{"version":3,"file":"main.84e787a97600eb86.js","mappings":"wVAAAA,MAAA,GACEA,MAAA,8DAQEA,MAAA,WAA0BA,MAAA,oBAAiCA,QAE3DA,MAAA,oBAIEA,MAAA,mBAAAA,MAAAC,GAAA,MAAAC,EAAAF,QAAA,OAASA,MAAAE,EAAAC,cAAa,GAExBH,UAEJA,wCAjBIA,cAAA,UAAAA,MAAA,GAAAI,EAAAC,EAAAC,aAAA,kBAAAC,EAAAP,MAAA,IAAAK,EAAAG,WAAA,KAAAD,EAAAE,MAAA,oBAAAF,EAAAP,MAAA,IAAAK,EAAAG,WAAA,KAAAD,EAAAE,MAAA,iBAAAF,EAAAP,MAAA,IAAAK,EAAAG,WAAA,KAAAD,EAAAE,QAO0BT,MAAA,GAAAA,MAAA,OAAAU,EAAAV,MAAA,IAAAK,EAAAG,WAAA,KAAAE,EAAAC,UCIvB,IAAMC,EAAe,MAAtB,MAAOA,EAWXC,YACUC,GAAAC,KAAAD,UAXFC,KAAAC,YAAc,IAAIC,IAORF,KAAAG,kBAAoB,IACtCH,KAAAT,cAAe,CAIZ,CAEHa,WACEJ,KAAKK,QAAUL,KAAKD,QAAQO,OAAOC,aACnCP,KAAKP,SAAWO,KAAKD,QAAQO,OAAOC,iBAEpCP,KAAKK,QAAQG,QACXC,KAAUT,KAAKC,cACfS,UAAWC,IACNA,EAGHC,WAAW,KACTZ,KAAKT,cAAe,GACnBS,KAAKG,mBAJRH,KAAKT,cAAe,GAO1B,CAEAsB,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACnB,CAEA3B,cACEY,KAAKD,QAAQiB,SAAST,YACxB,CAACU,SAAAjB,KAAA,mBAAAkB,iBAvCUrB,GAAeZ,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAAfxB,EAAeyB,UAAA,iBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,+HAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDb5B1C,MAAA,EAAA4C,EAAA,8CAAe5C,MAAA,OAAAA,MAAA,IAAA2C,EAAAnC,4DCaFI,CAAe,oZCLtBZ,MAAA,SAAAA,CAAoE,aAGhEA,MAAA,GACFA,uDAH4BA,cAAA,wBAAA6C,GAAAC,iBAAAC,GAAAC,QAAAD,GAAAE,UAAAjD,CAA8E,cAAA+C,GAAAE,WAExGjD,cAAA,IAAA+C,GAAAG,KAAA,kCAGJlD,MAAA,SAAAA,CAAiE,aAG7DA,MAAA,GACFA,uDAHoBA,cAAA,wBAAAmD,GAAAL,iBAAAC,GAAAC,QAAAD,GAAAE,UAAAjD,CAA8E,cAAA+C,GAAAE,WAEhGjD,cAAA,IAAA+C,GAAAG,KAAA,mDAVNlD,MAAA,WAA+BA,MAAA,yBAAA+C,GAAA/C,MAAAoD,IAAAC,UAAAC,GAAAtD,QAAA,OAASA,MAAAsD,GAAAC,YAAAR,IAAiB,GACvD/C,MAAA,EAAAwD,EAAA,aAAAxD,CAKO,EAAAyD,EAAA,cAOTzD,kDAZSA,cAAA,SAAAK,GAAAyC,iBAAAC,GAAAC,OAAAD,GAAAE,YAMAjD,cAAA,OAAAK,GAAAyC,iBAAAC,GAAAC,OAAAD,GAAAE,wDAsBHjD,MAAA,4BAAoEA,MAAA,yBAAA0D,GAAA1D,MAAA2D,IAAAN,UAAAO,GAAA5D,MAAA,UAASA,MAAA4D,GAAAL,YAAAG,IAAmB,GAC9F1D,MAAA,UAAMA,MAAA,GAAeA,yCAAfA,MAAA,GAAAA,MAAA0D,GAAAR,mCALVlD,MAAA,oBAAAA,CAA6E,YAA7EA,CAA6E,UAEnEA,MAAA,SAAGA,QAAOA,MAAA,UAAMA,MAAA,OAACA,UAEzBA,MAAA,EAAA6D,EAAA,6BAGF7D,iCAPcA,MAAA,oBAI4BA,MAAA,GAAAA,MAAA,UAAA8D,GAAAC,sEAN5C/D,MAAA,WACEA,MAAA,mBAAAA,MAAAgE,IAAA,MAAAC,GAAAjE,QAAAqD,UAAAa,GAAAlE,QAAA,OAASA,MAAAkE,GAAAX,YAAAU,IAAiB,GAC1BjE,MAAA,EAAAmE,EAAA,uBAQAnE,MAAA,aAAoBA,MAAA,GAAeA,yDAV0BA,MAAA,QAAAoE,GAAAtB,iBAAAmB,GAAAjB,OAEvBhD,cAAA,aAAAoE,GAAAL,wBAAA,KAAAK,GAAAL,wBAAAM,QAQlBrE,MAAA,GAAAA,MAAAiE,GAAAf,mCAXxBlD,MAAA,GACEA,MAAA,EAAAsE,EAAA,aAYFtE,qCAZ2CA,cAAA,OAAAiE,GAAAhB,uCAqBrCjD,MAAA,sDAAsCA,MAAA,OAAAuE,GAAAC,sCACtCxE,MAAA,sDAAkCA,MAAA,WAAAuE,GAAAE,mCAClCzE,MAAA,aAAiFA,MAAA,GAAkBA,0CAAlBA,cAAAuE,GAAAG,oDAJnF1E,MAAA,eAC+GA,MAAA,yBAAAuE,GAAAvE,MAAA2E,IAAAtB,UAAAuB,GAAA5E,MAAA,UAASA,MAAA4E,GAAAC,oBAAAN,IAA2B,GACjJvE,MAAA,EAAA8E,EAAA,sBAAA9E,CAA8E,EAAA+E,EAAA,uBACH/E,MAAA,YAC3EA,MAAA,EAAAgF,EAAA,eACFhF,uCAL+CA,MAAA,KAAAuE,GAAAG,MAAAO,cAAAC,QAAA,SAAAlF,CAAmD,oBAAAuE,GAAAY,WAAAZ,GAAAY,WAAA,MAEjFnF,cAAA,OAAAuE,GAAAC,UACAxE,cAAA,OAAAuE,GAAAE,MACRzE,MAAA,GAAAA,MAAA,OAAAuE,GAAAG,qCAPf1E,MAAA,GACEA,MAAA,UAAAA,CAAkB,WAEdA,MAAA,EAAAoF,EAAA,iBAMFpF,UAEJA,gCARiCA,MAAA,GAAAA,MAAA,UAAAqF,GAAAC,+DAc3BtF,MAAA,eAC2BA,MAAA,yBAAAuF,GAAAvF,MAAAwF,IAAAnC,UAAAoC,GAAAzF,MAAA,UAASA,MAAAyF,GAAAC,YAAAH,IAAmB,GACnDvF,MAAA,qBAAuDA,MAAA,YACvDA,MAAA,aAA4DA,MAAA,GAAkBA,yCAFhFA,MAAAuF,GAAAI,SAD8C3F,MAAA,KAAAuF,GAAAb,MAAAO,cAAAC,QAAA,UAE9BlF,cAAA,WAAAuF,GAAAd,MAC8CzE,MAAA,GAAAA,MAAAuF,GAAAb,qCAJlE1E,MAAA,GACEA,MAAA,EAAA4F,GAAA,iBAKF5F,gCAL6BA,cAAA,UAAA6F,GAAAC,gEAczB9F,MAAA,qBAKEA,MAAA,mBAAAA,MAAA+F,IAAA,MAAAC,GAAAhG,MAAA,UAASA,MAAAgG,GAAAC,0BAAyB,GACpCjG,cAFEA,MAAA,qEAGFA,MAAA,qBAKEA,MAAA,mBAAAA,MAAAkG,IAAA,MAAAC,GAAAnG,MAAA,UAASA,MAAAmG,GAAAF,0BAAyB,GACpCjG,cAFEA,MAAA,gDAYFA,MAAA,SAAkBA,MAAA,GAAeA,iCAAfA,cAAA,GAAAoG,GAAAC,SAAA,kDAxBpBrG,MAAA,gBACEA,MAAA,EAAAsG,GAAA,sBAAAtG,CAMe,EAAAuG,EAAA,uBAQfvG,MAAA,cAAAA,CAAgF,yBAK5EA,MAAA,mBAAAA,MAAAwG,IAAA,MAAAC,GAAAzG,MAAA,UAASA,MAAAyG,GAAAC,qBAAoB,GAEjC1G,UAEAA,MAAA,EAAA2G,EAAA,aACF3G,mCArBKA,cAAA,QAAA4G,GAAAC,iBAOA7G,cAAA,OAAA4G,GAAAC,iBAIK7G,cAAA,YAAA4G,GAAAC,iBAGJ7G,cAAA,iBAAAA,CAAkB,UAAA4G,GAAAE,SAMhB9G,cAAA,OAAA4G,GAAAG,mCAzBV/G,MAAA,GACEA,MAAA,EAAAgH,EAAA,kBA0BFhH,gCA1B0CA,cAAA,YAAAiH,GAAAC,sCAgCpClH,MAAA,2BAAsDA,MAAA,2CAEpDA,MAAA,2BAAcA,MAAA,uEAKpBA,MAAA,qBACEA,MAAA,mBAAAA,MAAAmH,IAAA,MAAAC,GAAApH,MAAA,UAASA,MAAAoH,GAAAC,eAAc,GACzBrH,cAF+DA,MAAA,gEAK7DA,MAAA,qBAAyDA,MAAA,mBAAAA,MAAAsH,IAAA,MAAAC,GAAAvH,MAAA,UAASA,MAAAuH,GAAAF,eAAc,GAAGrH,cAArEA,MAAA,yEAflBA,MAAA,GACEA,MAAA,UAAGA,MAAA,mBAAAA,MAAAwH,IAAA,MAAAC,GAAAzH,QAAA,OAASA,MAAAyH,GAAAC,mBAAkB,GAE1B1H,MAAA,EAAA2H,EAAA,sBAAA3H,CAAyF,EAAA4H,EAAA,0BAAA5H,OAK7FA,QAEAA,MAAA,EAAA6H,GAAA,sBAAA7H,CAEe,EAAA8H,GAAA,0BAAA9H,OAKjBA,0DAdqBA,MAAA,GAAAA,MAAA,OAAA+H,GAAAC,WAAAhI,CAAkB,WAAAiI,IAOtBjI,MAAA,GAAAA,MAAA,OAAA+H,GAAAG,UAAAlI,CAAiB,WAAAmI,kDAcpCnI,MAAA,4BAA+DA,MAAA,mBAAAA,MAAAoI,IAAA,MAAAC,GAAArI,QAAA,OAASA,MAAAqI,GAAApC,0BAAyB,GAC/FjG,MAAA,qBACAA,MAAA,UAAMA,MAAA,GAA2DA,oCADDA,cAAA,oBAAlDA,MAAA,OAAAsI,GAAAzB,gBAAA,sBACR7G,MAAA,GAAAA,MAAAsI,GAAAzB,gBAAA,kEAWJ7G,MAAA,UAAmBA,MAAA,GAAeA,iCAAfA,cAAA,GAAAuI,GAAAlC,SAAA,mDATvBrG,MAAA,4BACgCA,MAAA,mBAAAA,MAAAwI,IAAA,MAAAC,GAAAzI,QAAA,OAASA,MAAAyI,GAAA/B,qBAAoB,GAC3D1G,MAAA,yBAKAA,MAAA,UACEA,MAAA,eACAA,MAAA,EAAA0I,GAAA,cACF1I,oCATAA,MAAA,YAAA2I,GAAA9B,iBAEE7G,cAAA,iBAAAA,CAAkB,UAAA2I,GAAA7B,SAMX9G,MAAA,GAAAA,MAAA,OAAA2I,GAAA5B,oDAKX/G,MAAA,4BAA0DA,MAAA,mBAAAA,MAAA4I,IAAA,MAAAC,GAAA7I,QAAA,OAASA,MAAA6I,GAAAnB,mBAAkB,GACnF1H,MAAA,qBACAA,MAAA,UAAMA,MAAA,cAAQA,oCAD6CA,cAAA,oBAA7CA,MAAA,OAAA8I,GAAAd,WAAA,oEAIhBhI,MAAA,4BAA0DA,MAAA,mBAAAA,MAAA+I,IAAA,MAAAC,GAAAhJ,QAAA,OAASA,MAAAgJ,GAAA3B,eAAc,GAC/ErH,MAAA,qBACAA,MAAA,UAAMA,MAAA,UAAIA,oCADkDA,cAAA,oBAA9CA,MAAA,OAAAiJ,GAAAf,UAAA,sEAKhBlI,MAAA,4BAAmEA,MAAA,yBAAAkJ,GAAAlJ,MAAAmJ,IAAA9F,UAAA+F,GAAApJ,QAAAqJ,GAAArJ,MAAA,IAASoJ,UAAAvE,oBAAAqE,IAA6BlJ,MAAAqJ,GAAAC,SAAsB,GAC7HtJ,MAAA,qBACAA,MAAA,UAAMA,MAAA,GAAgBA,yCADaA,cAAA,oBAArBA,MAAA,OAAAkJ,GAAAzE,MACRzE,MAAA,GAAAA,MAAAkJ,GAAAxE,QCnHL,IAAM6E,GAA0B,MAAjC,MAAOA,GA+EX1I,YACU2I,GACAC,GACAC,GACAC,IAHA5I,KAAAyI,QACAzI,KAAA0I,UACA1I,KAAA2I,sBACA3I,KAAA4I,UA9EH5I,KAAA6I,kBAA4B,EAG5B7I,KAAA8I,QAAkB,EAGlB9I,KAAA+I,uBAAiC,EAGjC/I,KAAAgJ,kBAA4B,EAG5BhJ,KAAAiJ,0BAAoC,EAGpCjJ,KAAAkJ,mBAA6B,EAG7BlJ,KAAAmJ,WAAqB,EAGrBnJ,KAAAoJ,aAAuB,EAEdpJ,KAAAqJ,aAAuB,EAU/BrJ,KAAAsJ,eAAyB,KACjCtJ,KAAAuJ,mBAA8C,KAEvCvJ,KAAAwJ,UAAY,GACZxJ,KAAAyJ,OAAS,GAEhBzJ,KAAA0J,iBAAmB,KACnB1J,KAAAmG,YAAc,EAEdnG,KAAA2J,eAAgB,EAEhB3J,KAAA4J,YAAsB,EACtB5J,KAAA6J,cAAwB,EAEhB7J,KAAA8J,UAAY,IAAI5J,IAChBF,KAAAC,YAAc,IAAIC,IAmBlBF,KAAA+J,yBAA2B,CAAC,GAAI,IAChC/J,KAAAgK,6BAA+B,GAwb9BhK,KAAAiK,uBAAyB,IACzBjK,KAAAkK,SAAW,IAgBpBlK,KAAAmK,UAAW,EAEXnK,KAAAsF,SAAmB,KAGnBtF,KAAA8F,iBAAkB,EAgElB9F,KAAAoK,eAAsB,EAngBlB,CAEJhK,WACEJ,KAAK0I,OAAOlI,QACVF,MAAO+J,WACP3J,UAAU4J,KACVtK,KAAKsK,IAAMA,GAAIC,MAAM,KAAKC,KAAK,GAAE,GAGnCxK,KAAK0I,OAAOlI,QACVF,MAAOmK,OACP/J,UAAWgK,KACX1K,KAAK2K,oBAAoBD,GAAO,IACjC,EAGDE,KAAc,CACZ5K,KAAK0I,OAAOpI,OAAOmK,MACnBzK,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOmK,cACnBzK,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,KACnB7K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOmK,SACnBzK,KAAK0I,OAAOpI,OAAOC,yBACnBP,KAAK0I,OAAOpI,OAAOC,yBACnBP,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,QAClBrK,QACDC,KAAUT,KAAKC,cACfS,UAAU,EACVoK,GACAC,GACAzB,GACA0B,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,OAEAzL,KAAK0L,YAAYD,GAAgBH,GAAYC,GAAaC,GAAoBR,GAAc1B,IAC5FtJ,KAAK2L,sBACHb,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IAGFrL,KAAK8J,UAAUhJ,MAAI,GAGrBd,KAAK4L,wBAA0B5L,KAAK0I,OAAOpI,OAAOuL,MAClD7L,KAAK8L,yBAA2B9L,KAAK0I,OAAOpI,OAAOyL,MACnD/L,KAAKgM,qCAAuChM,KAAK0I,OAAOpI,OAAO2L,MAC/DjM,KAAKkM,qBAAuBlM,KAAK0I,OAAOpI,OAAO6L,MAC/CnM,KAAKoM,mBAAqBpM,KAAK0I,OAAOpI,OAAO+L,MAC7CrM,KAAKsM,wBAA0BtM,KAAK0I,OAAOpI,OAAOiM,MAClDvM,KAAKwM,0BAA4BxM,KAAK0I,OAAOpI,OAAOmM,OAAqC,EAEzF7B,KAAc,CACZ5K,KAAK4L,wBACL5L,KAAK8L,yBACL9L,KAAKgM,qCACLhM,KAAKkM,qBACLlM,KAAKoM,mBACLpM,KAAKsM,wBACLtM,KAAKwM,4BACJhM,QACDC,KAAUT,KAAKC,cACfS,UAAU,EACVgM,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,OAGAhN,KAAK2J,cAAgB+C,IAA4BC,IAC5CC,IAAuCC,IAAqBC,IAAuBC,IACnFC,GAELhN,KAAKiN,WAAWjN,KAAK2J,cAAa,GAGpC3J,KAAK0I,OAAOpI,OAAOuK,MAAiCnK,UAAUwM,IAAKlN,KAAK4J,WAAasD,IACrFlN,KAAK0I,OAAOpI,OAAOuK,MAAmCnK,UAAUwM,IAAKlN,KAAK6J,aAAeqD,IAGzF,MAAMC,GAAQC,OAAOD,MAErB,GAAIA,GAAO,CACT,IAAIE,GAAkB,GACtBrN,KAAKsN,MAAMC,QAAQC,IACjBH,IAAmBG,GAAKrL,KAAO,KAEjCgL,GAAMM,QAAQ,qBAAsBJ,GACtC,CAEArN,KAAK0I,OAAOpI,OAAOuK,MAAqCrK,QACtDC,KAAUT,KAAKC,cACfS,UAAWgN,KACX1N,KAAK8F,iBAAmB4H,GACxB1N,KAAKyI,KAAKkF,eAAa,GAEzB3N,KAAK4N,iBAAa,EAElBhD,KAAc,CACZ5K,KAAK0I,OAAOpI,OAAOuN,MACnB7N,KAAK0I,OAAOpI,OAAOuN,MACnB7N,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAOuK,QAClBrK,QACDC,KAAUT,KAAKC,cACfS,UAAU,EAAEuG,GAAY6G,GAAaC,GAAqBzE,GAAgB0E,GAAiBC,OAC3FjO,KAAKiH,WAAaA,GAClBjH,KAAKkO,mBAAqBH,GAC1B/N,KAAKmH,UAAY2G,IAAeA,GAAYK,YAAa,EAEzDnO,KAAKyI,KAAKkF,gBAEV3N,KAAKoK,eAAiB,CACpBgE,YAAaL,GACbM,OAAQ/E,GACRgF,QAASN,GACTO,eAAgBN,KAGtB,CAEApN,cACEb,KAAK8J,UAAU/I,WACff,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,WACjBf,KAAKwO,YACP,CAEAC,YAAYC,IACV1O,KAAK8J,UAAUhJ,MACjB,CAEA6N,SACE3O,KAAK0I,OAAO1H,SAAST,YACvB,CAEAqO,WACM5O,KAAKsJ,eACPtJ,KAAK6O,mBAEL7O,KAAK0I,OAAO1H,SAAS6J,MAEzB,CAEArI,YAAYgL,IACNxN,KAAK+B,iBAAiByL,GAAKvL,OAASuL,GAAKtL,WACzCsL,IAAQA,GAAKvL,MACfjC,KAAK0I,OAAO1H,SAAST,QAAmBiN,GAAKvL,MAEjD,CAEQ4M,mBACN,UAAWC,MAAY9O,KAAK0J,iBACtBqF,IAAYD,KAAW9O,KAAK0I,OAAO1H,SAAS,CAAEtB,KAAMqP,IAAYD,IAAWE,QAAS,IAE5F,CAEArK,YAAYsK,IACNA,IACFA,GAAOC,OAAOlP,KAAKsJ,eAEvB,CAEAxF,oBAAoB0J,IACdA,GAAK2B,aACH3B,GAAK2B,WAAWC,QAAQ,MAAO,EACjCpP,KAAK0I,OAAO1H,SAAST,QAAmB,CAACiN,GAAK2B,YAAa,CAAEE,WAAYrP,KAAK4I,OAAQ0G,YAAa9B,GAAK8B,eAExGtP,KAAK0I,OAAO1H,SAAST,QAAmB,CAACiN,GAAK2B,YAAa,CAAEG,YAAa9B,GAAK8B,gBAG/E9B,GAAK0B,QACPlP,KAAK0I,OAAO1H,SAASwM,GAAK0B,QAExB1B,GAAK+B,UACP/B,GAAK+B,UAET,CAEOC,0BACL5E,OACE5K,KAAK0I,OAAOpI,OAAOmP,MACnBzP,KAAK0I,OAAOpI,OAAOmP,OACnBjP,QACAC,KAAUT,KAAKC,cACfS,UAAU,EAAEqF,GAAS2J,OACrB1P,KAAK2P,sBAAwB5J,GAC7B/F,KAAKwJ,UAAYxJ,KAAK4P,mBAAmB7J,IAAU,EAAK2J,IACxD1P,KAAKyJ,OAASzJ,KAAK6P,UAAU9J,IAAU,EAAK2J,IAC5C1P,KAAKyI,KAAKqH,cAAY,EAE1B,CAEAF,mBAAmBF,IACjB,OAAwB,IAAjBA,IACc,IAAjBA,GADwB,UAEL,IAAjBA,GAAqB,UACF,IAAjBA,IACmB,IAAjBA,IACmB,IAAjBA,GAFiB,UAGf,IAChB,CAEAG,UAAUH,IACR,OAAwB,IAAjBA,GAAsB,aACR,IAAjBA,GAAqB,SACF,IAAjBA,GAAqB,OACF,IAAjBA,GAAqB,aACF,IAAjBA,IACmB,IAAjBA,IACmB,IAAjBA,GAFiB,SAGf,eAClB,CAEAK,2BAA2BC,IAEvBhQ,KAAK0I,OAAO1H,SADM,aAAhBgP,GACmBnF,OAEAA,OAEzB,CAEQoF,gBAAgBjF,GAAoBS,IAE1CzL,KAAK0J,iBAAmBsB,GAAakF,UACrClQ,KAAKmG,YAAcsF,IAAiB,EAAKT,GAAa7E,YACtDnG,KAAKmQ,eAAenQ,KAAKmG,YAC3B,CAEQuF,YACND,GACAH,GACAC,GACAC,GACAR,GACA1B,IACAtJ,KAAKsJ,eAAiBA,IAGL,IAAfgC,KACgB,IAAhBC,KACuB,IAAvBC,KACCxL,KAAK+J,yBAAyBqG,SAAS9G,KAExCtJ,KAAKmG,YAAc,EACnBnG,KAAKmQ,eAAenQ,KAAKmG,cAErB6E,GACFhL,KAAKiQ,gBAAgBjF,GAAcS,KAKnCzL,KAAKmG,YAAcnG,KAAK+J,yBAAyBqG,SAAS9G,KAAkB,EAAK,EACjFtJ,KAAKmQ,eAAenQ,KAAKmG,aAG/B,CAEQwF,sBACNb,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IAEA,MAAMiC,GAA0B,GAuChC,GApCIxC,IAAWA,GAAQvG,iBAAmBuG,GAAQvG,gBAAgBjB,OAAS,GACzEtD,KAAKuE,gBAAkBuG,GAAQvG,gBAC/BvE,KAAKqQ,sBAAyBvF,GAAQvG,gBAA+B+L,OAAO9C,KAASA,GAAK+C,iBAG1FvQ,KAAKuE,gBAAkBvE,KAAKqQ,sBAAwB,GAIlDnF,IAAgBlL,KAAK6I,mBACnB7I,KAAK8I,UACPoC,GAAeA,GAAasF,OAAOxQ,KAAK8I,UAI1CwE,GAAMmD,QAAQvF,GAAawF,IAAIC,KAC7B,MAAMnD,GAAuB,CAC3BrL,KAAMwO,GAAaxO,KACnBD,WAAW,GAGP0O,GAAsBvF,GAAcsF,GAAaE,aAEvD,OAAID,IAAuBA,GAAoBtN,SAG3CkK,GAAKvL,KADH8I,IAAqB6F,GAAoBE,KAAKC,IAAaA,GAAUC,KAAOjG,GAAkBiG,IACpF,CAAC,YAAajG,GAAkBiG,GAAI,eAAgBL,GAAaK,IAEjE,CAAC,YAAaJ,GAAoB,GAAGI,GAAI,eAAgBL,GAAaK,KAI/ExD,OAIPxN,KAAKiJ,2BAA6BmC,GAAe,CACnD,MAAMuF,GAAexF,IAAwBF,GAEvCuC,GAAuB,CAC3BrL,KAAMwO,IAAgBA,GAAaxO,KACnCD,WAAW,GAGP0O,GAAsBD,IAAgBtF,GAAcsF,GAAaE,cAAgB,GAEnFD,IAAuBA,GAAoBtN,SAG3CkK,GAAKvL,KADH8I,IAAqB6F,GAAoBE,KAAKC,IAAaA,GAAUC,KAAOjG,GAAkBiG,IACpF,CAAC,YAAajG,GAAkBiG,GAAI,eAAgBL,GAAaK,IAEjE,CAAC,YAAaJ,GAAoB,GAAGI,GAAI,eAAgBL,GAAaK,KAItF1D,GAAMmD,KAAKjD,GACb,CAWA,GATIzC,IAAqBK,IAAiBpL,KAAKkJ,mBAE7CoE,GAAMmD,KAAM,CACVtO,KAAMiJ,GAAcjJ,KACpBD,WAAW,EACXD,KAJS8I,GAAkBkG,QAAU,CAAC,YAAalG,GAAkBiG,GAAI,QAAS5F,GAAc4F,GAAI,SAAW,CAAC,YAAajG,GAAkBiG,GAAI,QAAS5F,GAAc4F,MAQ1KjG,IAAqB/K,KAAK+I,sBAAuB,CACnD,MAAMyE,GAAuB,CAC3BrL,KAAM4I,GAAkB5I,KACxBF,KAAM,CAAC,YAAa8I,GAAkBiG,KAGpC5F,IACFoC,GAAKvL,KAAKwO,KAAK,QAASrF,GAAc4F,IAGpC7F,IACFqC,GAAKvL,KAAKwO,KAAK,eAAgBtF,GAAqB6F,IAGtD1D,GAAMmD,KAAKjD,GACb,CAEIxC,IAAgBhL,KAAKgJ,kBACvBsE,GAAMmD,KAAK,CACTtO,KAAM6I,GAAa7I,OAInBnC,KAAKkR,OACP5D,GAAMmD,KAAK,CACTtO,KAAMnC,KAAKkR,QAIflR,KAAKsN,MAAQA,GAGI,KAAbtN,KAAKsK,KACPtK,KAAKsN,MAAM6D,OAAO,GAGpBnR,KAAKgD,wBAA0BhD,KAAKsN,MAAMgD,OAAO9C,IAAQ,cAAeA,KAASA,GAAKtL,WACtFlC,KAAKyI,KAAKqH,cACZ,CAEQnF,oBAAoBD,IACtBA,IACF1K,KAAK+E,iBAAmB/E,KAAK2I,mBAAmBgC,oBAAoBD,IACpE1K,KAAKwP,0BAELxP,KAAK+E,iBAAmB,EAE5B,CAEOhD,iBAAiBE,IACtB,OAAKA,KAGDjC,KAAKsK,KAAOrI,GACPjC,KAAKsK,MAAQrI,GAAKmP,WAAW7G,MAAM,KAAKC,KAAK,SADtD,EAGF,CAEOxJ,SAASkO,IACdlP,KAAK0I,OAAO1H,SAASkO,GACvB,CAUOjC,WAAWoE,IAChBC,aAAatR,KAAKuR,gBAClBvR,KAAKmK,SAAWkH,EAClB,CACA,WAAWtL,GACT,OAAO/F,KAAKmK,QACd,CAESgG,eAAenK,IACtBhG,KAAKgG,KAAOA,GACZhG,KAAK4N,eACP,CASAjI,qBACO3F,KAAK8F,kBAGV9F,KAAKsF,SAAWtF,KAAKgG,KACrBhG,KAAK4O,WACL5O,KAAKwR,wBACP,CAEAtM,0BAIIlF,KAAK0I,OAAO1H,SAHThB,KAAK8F,gBAGa+E,OAFAA,OAIzB,CAEQ+C,gBACN5N,KAAKwO,aAEDxO,KAAKgG,KAAO,IACdhG,KAAKsF,SAAWtF,KAAKgG,KACrBhG,KAAKyR,aAET,CAEQA,aACNzR,KAAK0R,SAAWC,YAAY,KACtB3R,KAAKsF,SAAW,GAClBtF,KAAKsF,WACLtF,KAAKyI,KAAKkF,kBAEV3N,KAAK2F,qBACL3F,KAAKyI,KAAKkF,gBAAa,EAExB3N,KAAKkK,SACV,CAEQsE,aACNoD,cAAc5R,KAAK0R,SACrB,CAEQF,wBACNxR,KAAKmK,UAAW,EAChBnK,KAAKuR,eAAiB3Q,WAAW,KAC/BZ,KAAKmK,UAAW,EAChBnK,KAAKyI,KAAKkF,eAAa,EACtB3N,KAAKiK,uBACV,CAiBAtD,mBAEI3G,KAAK0I,OAAO1H,SADVhB,KAAKiH,WACc4K,kBAAoC7R,KAAKiH,YAEzC4K,kBAAoC7R,KAAKoK,gBAAgB,GAElF,CAEA9D,eAEItG,KAAK0I,OAAO1H,SADVhB,KAAKiH,WACc4K,gBAAkC7R,KAAKiH,YAEvC4K,kBAAoC7R,KAAKoK,gBAAgB,GAElF,CAACnJ,SAAAjB,KAAA,mBAAAkB,mBAxmBUsH,IAA0BvJ,mBAAAkC,MAAAlC,MAAA6S,KAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,UAAAgS,EAAA3Q,IAAA,MAA1BmH,GAA0BlH,UAAA,yBAAA2Q,OAAA,CAAAf,MAAA,QAAArI,iBAAA,mBAAAC,QAAA,UAAAC,sBAAA,wBAAAC,iBAAA,mBAAAC,yBAAA,2BAAAC,kBAAA,oBAAAC,UAAA,YAAAC,YAAA,cAAAC,YAAA,cAAA9E,gBAAA,kBAAA0F,uBAAA,yBAAAC,SAAA,WAAA+C,WAAA,aAAAkD,eAAA,kBAAA+B,SAAA,CAAAjT,OAAAsC,MAAA,GAAAC,KAAA,GAAAC,OAAA,27DAAAC,SAAA,SAAAC,GAAAC,IAAA,EAAAD,KD7CvC1C,MAAA,UAAAA,CAA8D,SAA9DA,CAA8D,UAGtCA,MAAA,0BAAS2C,GAAA+M,QAAQ,GACnC1P,MAAA,oBACFA,QAEAA,MAAA,EAAAkT,GAAA,YAcFlT,QAGAA,MAAA,SAAAA,CAAsD,UAChCA,MAAA,0BAAS2C,GAAA+M,QAAQ,GACnC1P,MAAA,oBACFA,QAEAA,MAAA,EAAAmT,EAAA,sBAcFnT,QAGAA,MAAA,EAAAoT,GAAA,sBAcApT,MAAA,WAAAA,CAAkB,YAEdA,MAAA,GAAAqT,GAAA,sBAOFrT,UAGFA,MAAA,WAAAA,CAAkB,iBAGdA,MAAA,GAAAsT,EAAA,qBAAAtT,CA2Be,GAAAuT,GAAA,sBAqBjBvT,UAGFA,MAAA,yBACEA,MAAA,sBAEAA,MAAA,GAAAwT,GAAA,6BAAAxT,CAGsB,GAAAyT,GAAA,6BAHtBzT,CAGsB,GAAA0T,GAAA,6BAHtB1T,CAGsB,GAAA2T,GAAA,6BAHtB3T,CAGsB,GAAA4T,GAAA,6BA8BxB5T,kBA9JkBA,MAAA,GAAAA,MAAA,0BAAAA,CAA2B,wCAGtBA,cAAA,UAAA2C,GAAA0L,OAmBLrO,MAAA,GAAAA,MAAA,0BAAAA,CAA2B,wCAGZA,cAAA,UAAA2C,GAAA0L,OAiBlBrO,cAAA,SAAA2C,GAAA2C,iBAAA3C,GAAA2C,gBAAAjB,OAAA,GAAA1B,GAAA2C,gBAAA,GAAAuO,cAgBI7T,MAAA,GAAAA,MAAA,OAAA2C,GAAAmD,kBAAAnD,GAAAmD,iBAAAzB,OAAA,GAaArE,MAAA,GAAAA,MAAA,QAAA2C,GAAAgI,YA8BA3K,cAAA,QAAA2C,GAAAiI,cAAAjI,GAAAyH,aAqBUpK,cAAA,oBACQA,MAAA,GAAAA,MAAA,oBAEbA,cAAA,QAAA2C,GAAAgI,aAAA,IAAAhI,GAAAuE,aAIAlH,cAAA,QAAA2C,GAAAgI,aAAA,IAAAhI,GAAAuE,aAcAlH,cAAA,QAAA2C,GAAAiI,cAAAjI,GAAAyH,aAKApK,cAAA,QAAA2C,GAAAiI,cAAAjI,GAAAyH,aAMkBpK,cAAA,UAAA2C,GAAAyO,qZCjH/B7H,EAA0B,+LChCjCvJ,MAAA,sBACEA,MAAA,GACFA,kCAFuGA,MAAA,QAAA8T,EAAA9T,CAAkB,UAAA8T,EAAAC,MACvH/T,cAAA,IAAA8T,EAAAC,KAAA,yFAdR/T,MAAA,cAAAA,CAAiH,cAAjHA,CAAiH,WAG3GA,MAAA,4BAIAA,MAAA,UAAkBA,MAAA,GAA8CA,YAGpEA,MAAA,cAAAA,CAAwF,sBAEtFA,MAAA,uBAAAgU,GAAAhU,MAAAiU,GAAA,MAAApO,EAAA7F,QAAA,OAAeA,MAAA6F,EAAAqO,SAAAF,GAAgB,oBAC7BhU,MAAA,GAAAmU,EAAA,0CAGFnU,oCAXIA,MAAA,GAAAA,MAAA,UAAAA,MAAA,GAAAI,EAAA,OAAAJ,MAAA,KAAAK,EAAA+T,mBAAA,8BAEgBpU,MAAA,GAAAA,MAAAK,EAAAgU,cAAA,+BAGuCrU,cAAA,sBAC3CA,cAAA,kBAAAA,CAAqB,eAArBA,CAAqB,QAAAA,MAAA,KAAAK,EAAAiU,mBAArBtU,CAAqB,sBAEcA,MAAA,GAAAA,MAAA,0BAAAA,MAAA,MAAAK,EAAAkU,YAAAvU,CAA6B,+BAAAA,MAAA,GAAAwU,KCQ7E,IAAMC,EAAuB,MAA9B,MAAOA,EASX5T,YACU4I,EACAiL,EACAC,GAFA5T,KAAA0I,SACA1I,KAAA2T,SACA3T,KAAA4T,sBAXD5T,KAAA6T,kBAAmB,EAIrB7T,KAAAsT,aAAuBtT,KAAK4T,oBAAoBE,iBAQnD,CAEG1T,WACLJ,KAAKwT,WAAaxT,KAAK0I,OAAOpI,OAAOmK,aACrCzK,KAAKuT,kBAAoBvT,KAAK0I,OAAOpI,OAAOmK,kBAC5CzK,KAAKqT,kBAAoBrT,KAAK0I,OAAOpI,OAAOmK,iCAC9C,CAEO0I,SAASY,GACd,MAAMC,EAAoBhU,KAAK2T,OAAOrJ,IAAI8F,SAAS,oBAEnDpQ,KAAK0I,OAAO1H,SAASyJ,YAA0BsJ,EAASE,GAAID,EAAoBhU,KAAK2T,OAAOrJ,IAAM,KAAK,EAAO,CAAE4J,aAAcH,EAASf,OACzI,CAAC/R,SAAAjB,KAAA,mBAAAkB,iBAzBUwS,GAAuBzU,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,UAAAmU,EAAA9S,IAAA,MAAvBqS,EAAuBpS,UAAA,0BAAA2Q,OAAA,CAAA4B,iBAAA,oBAAAtS,MAAA,EAAAC,KAAA,EAAAC,OAAA,mrBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDrBpC1C,MAAA,EAAAmV,EAAA,wBAAUnV,MAAA,OAAA2C,EAAAiS,gfCqBGH,CAAuB,iICnBhCzU,MAAA,SAAqDA,MAAA,mBAAAA,MAAAC,GAAA,MAAAC,EAAAF,QAAA,OAASA,MAAAE,EAAAkV,gBAAAC,eAA8B,GAAErV,MAAA,qBAAeA,SCM1G,IAAMsV,EAAe,MAAtB,MAAOA,EAEXzU,YACSuU,GAAArU,KAAAqU,iBACL,CAACpT,SAAAjB,KAAA,mBAAAkB,iBAJMqT,GAAetV,MAAAkC,KAAA,EAAAF,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAfkT,EAAejT,UAAA,iBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,uKAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDR5B1C,MAAA,WAAAA,CAAQ,WAEJA,MAAA,EAAAwV,EAAA,WACFxV,UAEFA,MAAA,gBAHQA,MAAA,GAAAA,MAAA,OAAA2C,EAAAyS,gBAAAK,0CCMKH,CAAe,uZCKRtV,MAAA,uBAGIA,MAAA,GACJA,qCAFIA,MAAA,QAAA0V,GAAA1V,CAAkB,UAAA0V,GAAA3B,MAClB/T,cAAA,IAAA0V,GAAA3B,KAAA,uEARhB/T,MAAA,GACIA,MAAA,WAAAA,CAA0C,sBAGlCA,MAAA,uBAAAgU,IAAAhU,MAAA2V,IAAA,MAAAxS,GAAAnD,QAAA,OAAeA,MAAAmD,GAAA+Q,SAAAF,IAAgB,oBAC/BhU,MAAA,EAAA4V,EAAA,0CAKJ5V,UAERA,kCAXgBA,cAAA,yBACQA,cAAA,kBAAAA,CAAqB,eAArBA,CAAqB,QAAAA,MAAA,IAAAK,GAAAiU,mBAArBtU,CAAqB,4BAIIA,MAAA,GAAAA,MAAA,0BAAAA,MAAA,KAAAK,GAAAkU,YAAAvU,CAA6B,+BAAAA,MAAA,GAAAwU,+BAWlExU,MAAA,aAAuDA,MAAA,iBAAaA,qCADxEA,MAAA,YACIA,MAAA,EAAA6V,GAAA,gCACA7V,MAAA,aAA0BA,MAAA,oBAAiDA,mCADpEA,cAAA,OAAAA,MAAA,IAAA8V,GAAAC,sBACmB/V,MAAA,GAAAA,YAAA,IAAA8V,GAAAC,sBAAA,0CALtC/V,MAAA,GACIA,MAAA,WAAAA,CAA+F,QACvFA,MAAA,qCAAyEA,QAC7EA,MAAA,EAAAgW,EAAA,+BAIJhW,QACJA,uCANYA,MAAA,GAAAA,OAAA,OAAAO,GAAAP,MAAA,IAAAE,GAAA+V,gBAAA,KAAA1V,GAAA2C,QAAA,OAAA3C,GAAAP,MAAA,IAAAE,GAAAgW,qBAAA,KAAA3V,GAAA2C,OACoDlD,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAE,GAAAiW,2CAaxDnW,MAAA,uBAEIA,MAAA,GACJA,qCAFIA,MAAA,QAAAoW,GAAApW,CAAkB,UAAAoW,GAAArC,MAClB/T,cAAA,IAAAoW,GAAArC,KAAA,kCAMJ/T,MAAA,WAAAA,CAA6F,YACpEA,MAAA,GAASA,uCAATA,MAAA,GAAAA,MAAAqW,iDAKrBrW,MAAA,aACIA,MAAA,mBAAAA,MAAA2D,IAAA,MAAAC,GAAA5D,MAAA,UAASA,MAAA4D,GAAA0S,6BAA4B,GACrCtW,MAAA,4BAAiEA,MAAA,OAAGA,MAAA,sBAAgBA,yCAApFA,cAAA,aAAAA,MAAA,IAAAuW,GAAA,yDAGAvW,MAAA,qEANRA,MAAA,4BACIA,MAAA,EAAAwW,EAAA,gCAIAxW,MAAA,EAAAyW,EAAA,0BAAAzW,OAGJA,4CAPWA,cAAA,OAAAA,MAAA,IAAA+H,GAAA2O,kCAAA1W,CAAkD,WAAA2W,8BAUzD3W,MAAA,yBACIA,MAAA,kCACJA,kCAQQA,MAAA,yDAGAA,MAAA,GACIA,MAAA,UAAMA,MAAA,GAAuBA,MAAA,UACrBA,MAAA,mBAAAA,MAAA4W,IAAA,MAAAC,GAAA7W,QAAAqD,UAAAyT,GAAA9W,QAAA,OAASA,MAAA8W,GAAAC,aAAAF,GAAAxH,SAAwC,GAAErP,MAAA,GAAuDA,UAClHA,MAAA,YAAkBA,MAAA,cAAQA,MAAA,eACYA,MAAA,GAAwBA,UAC9DA,MAAA,YAA0BA,MAAA,IAA2CA,QACzEA,uDALUA,MAAA,GAAAA,MAAA,GAAA6W,GAAA3T,KAAA,MACqDlD,MAAA,GAAAA,MAAAgX,GAAAC,cAAAJ,GAAAxH,SAAAnM,MAErBlD,MAAA,GAAAA,MAAA6W,GAAAlW,SACZX,MAAA,GAAAA,MAAA6W,GAAAK,UAAAC,gEAE9BnX,MAAA,GACIA,MAAA,UAAMA,MAAA,GAAuBA,MAAA,UACrBA,MAAA,mBAAAA,MAAAoX,IAAA,MAAAP,GAAA7W,QAAAqD,UAAAgU,GAAArX,QAAA,OAASA,MAAAqX,GAAAC,iBAAAT,GAAAxH,SAA4C,GAAErP,MAAA,GAAuDA,UACtHA,MAAA,YAAkBA,MAAA,cAAQA,MAAA,eACYA,MAAA,GAAwBA,UAC9DA,MAAA,YAA0BA,MAAA,IAA2CA,QACzEA,uDALUA,MAAA,GAAAA,MAAA,GAAA6W,GAAA3T,KAAA,MACyDlD,MAAA,GAAAA,MAAAuX,GAAAN,cAAAJ,GAAAxH,SAAAnM,MAEzBlD,MAAA,GAAAA,MAAA6W,GAAAlW,SACZX,MAAA,GAAAA,MAAA6W,GAAAK,UAAAC,gEAO1BnX,MAAA,GACIA,MAAA,WAAAA,CAAoE,eAE5DA,MAAA,mBAAAA,MAAAwF,IAAA,MAAAqR,GAAA7W,MAAA,GAAAqD,UAAAmU,GAAAxX,QAAA,OAASA,MAAAwX,GAAAC,aAAAZ,GAAAa,kBAAAb,GAAAxH,QAAAwH,GAAA9E,IAA+F,GAAE/R,MAAA,mBACpGA,UAElBA,qDACAA,MAAA,GACIA,MAAA,WAAAA,CAAoE,eAE5DA,MAAA,mBAAAA,MAAA2X,IAAA,MAAAd,GAAA7W,MAAA,GAAAqD,UAAAuD,GAAA5G,QAAA,OAASA,MAAA4G,GAAA6Q,aAAAZ,GAAAa,kBAAAb,GAAAxH,QAAAwH,GAAA9E,IAA+F,GAAE/R,MAAA,WAAKA,UAE3HA,qDAjBJA,MAAA,GACIA,MAAA,UAAMA,MAAA,GAAuBA,MAAA,UACrBA,MAAA,mBAAAA,MAAA+F,IAAA,MAAA8Q,GAAA7W,QAAAqD,UAAA+C,GAAApG,QAAA,OAASA,MAAAoG,GAAAwR,mBAAAf,GAAAa,mBAAwD,GAAE1X,MAAA,GAAuDA,UAClIA,MAAA,YAAkBA,MAAA,cAAQA,MAAA,eACYA,MAAA,GAAwBA,UAC9DA,MAAA,EAAA6X,GAAA,sBAAA7X,CAMe,GAAA8X,EAAA,uBAOf9X,MAAA,aAA0BA,MAAA,IAA2CA,QACzEA,uDAlBUA,MAAA,GAAAA,MAAA,GAAA6W,GAAA3T,KAAA,MACqElD,MAAA,GAAAA,MAAA+X,GAAAd,cAAAJ,GAAAxH,SAAAnM,MAErClD,MAAA,GAAAA,MAAA6W,GAAAlW,SACvBX,cAAA,OAAA6W,GAAAmB,YAOAhY,cAAA,OAAA6W,GAAAoB,UAMWjY,MAAA,GAAAA,MAAA6W,GAAAK,UAAAC,+DAxC1CnX,MAAA,4BAEIA,MAAA,yBAAA6W,GAAA7W,MAAAkY,IAAA7U,UAAA8U,GAAAnY,QAAA,OAASA,MAAAmY,GAAAC,wBAAAvB,GAAA9E,IAAwC,GACjD/R,MAAA,WAAAA,CAAoB,YAEZA,MAAA,EAAAqY,GAAA,cACJrY,QACAA,MAAA,YACIA,MAAA,EAAAsY,GAAA,sBAAAtY,CAMe,EAAAuY,GAAA,sBANfvY,CAMe,EAAAwY,EAAA,uBA4BnBxY,QACAA,MAAA,WAAAA,CAA6C,qBAErCA,MAAA,yBAAA6W,GAAA7W,MAAAkY,IAAA7U,UAAAoV,GAAAzY,QAAA,OAASA,MAAAyY,GAAAC,wBAAA7B,GAAA9E,IAAwC,GAAE/R,6CA7CjCA,MAAA,kBAISA,MAAA,GAAAA,MAAA,iBACJA,cAAA,QAAA6W,GAAA8B,cAER3Y,cAAA,kBAAuBA,MAAA,WAAA6W,GAAApW,MAC3BT,cAAA,6BAOAA,cAAA,8BAOAA,cAAA,+BAqBIA,cAAA,mFAc/BA,MAAA,4BAEIA,MAAA,qBAAqDA,MAAA,UAAMA,MAAA,GAAoBA,uCAF9DA,MAAA,UAAA4Y,GAAA1V,KAAAlD,CAA0B,aAAAA,MAAA,EAAA6Y,EAAAD,GAAA7G,KAE7B/R,cAAA,OAAA4Y,GAAAnU,MAA6CzE,MAAA,GAAAA,MAAA4Y,GAAA1V,mCAcvDlD,MAAA,WAAAA,CAAqE,eAC3CA,MAAA,uCAAiCA,QACvDA,MAAA,aAAyDA,MAAA,GAA+BA,uCAA1DA,MAAA,GAAAA,MAAA,0BAA2BA,cAAA8Y,GAAAC,6CAIzD/Y,MAAA,eAA4DA,MAAA,wDAAkDA,sCADlHA,MAAA,YACIA,MAAA,EAAAgZ,GAAA,iBACAhZ,MAAA,aAA6DA,MAAA,GAAmCA,uCADvFA,cAAA,OAAA8Y,GAAAG,sBACqBjZ,cAAA,8BAA+BA,cAAA8Y,GAAAG,oDAGjEjZ,MAAA,WAAAA,CAAqE,eACfA,MAAA,GAAiBA,QACnEA,MAAA,UAA+FA,MAAA,GAAgBA,mDADzFA,cAAA,2BAA4BA,cAAAkZ,GAAAC,eACjBnZ,cAAA,OAAA8Y,GAAAM,iBAAApZ,OAAkC,0BAA4BA,cAAAkZ,GAAAG,yCAM3FrZ,MAAA,YAAiFA,MAAA,uBAAiBA,sCAClGA,MAAA,UAAyGA,MAAA,UAAIA,qCAAlEA,MAAA,OAAAsZ,GAAAC,aAAAvZ,OAA0B,gDACrEA,MAAA,UAA2HA,MAAA,uBAAiBA,qCAA9FA,MAAA,OAAAsZ,GAAAE,gBAAAxZ,OAA6B,4DAC3EA,MAAA,UAAqHA,MAAA,mBAAaA,qCAArFA,MAAA,OAAAsZ,GAAAG,eAAAzZ,OAA4B,wDANjFA,MAAA,GACIA,MAAA,YACIA,MAAA,YACAA,MAAA,EAAA0Z,GAAA,gBAAA1Z,CAA2G,EAAA2Z,GAAA,WAA3G3Z,CAA2G,EAAA4Z,GAAA,WAA3G5Z,CAA2G,EAAA6Z,GAAA,YAI/G7Z,QACJA,gCALiBA,MAAA,GAAAA,MAAA,OAAAsZ,GAAAC,cAAAD,GAAAE,iBAAAF,GAAAG,gBACLzZ,cAAA,OAAAsZ,GAAAC,cACAvZ,cAAA,OAAAsZ,GAAAE,iBACAxZ,cAAA,OAAAsZ,GAAAG,8CAOJzZ,MAAA,UAAoGA,MAAA,GAAeA,0CAA/FA,MAAA,OAAA8Z,GAAAC,IAAA/Z,OAAiB,SAAA8Z,GAAAE,QAAA,GAAjBha,CAAiB,UAAA8Z,GAAA/H,IAAA+H,GAAAG,MAA+Dja,cAAA8Z,GAAAG,oCACpGja,MAAA,UAA2FA,MAAA,GAAeA,0CAA/EA,MAAA,aAAA8Z,GAAA5J,WAAAlQ,CAA8B,UAAA8Z,GAAA/H,IAAA+H,GAAAG,MAAkCja,cAAA8Z,GAAAG,oCAC3Fja,MAAA,aAA6EA,MAAA,GAAeA,0CAAhDA,MAAA,UAAA8Z,GAAA/H,IAAA+H,GAAAG,MAAiCja,cAAA8Z,GAAAG,oCAHjFja,MAAA,GACIA,MAAA,EAAAka,GAAA,WAAAla,CAAuH,EAAAma,GAAA,WAAvHna,CAAuH,EAAAoa,GAAA,eAG3Hpa,qCAHQA,cAAA,OAAA8Z,GAAAC,KACA/Z,cAAA,OAAA8Z,GAAA5J,YACGlQ,cAAA,QAAA8Z,GAAAC,MAAAD,GAAA5J,0CALflQ,MAAA,GACIA,MAAA,YACAA,MAAA,EAAAqa,GAAA,uBAKJra,iCALmCA,MAAA,GAAAA,MAAA,UAAAsa,GAAAC,qCAMnCva,MAAA,GACIA,MAAA,YACAA,MAAA,WAAAA,CAA8B,aAC4BA,MAAA,GAAqBA,UAEnFA,iCAFwCA,MAAA,GAAAA,MAAA,qBAAsBA,cAAA,SAAAuH,GAAAiT,QAAA,kCAxCtExa,MAAA,GACIA,MAAA,WAAAA,CAAiH,eACzDA,MAAA,GAA8BA,QAElFA,MAAA,EAAAya,EAAA,aAAAza,CAGM,EAAA0a,GAAA,aAHN1a,CAGM,EAAA2a,GAAA,aAHN3a,CAGM,EAAA4a,GAAA,wCAsBN5a,MAAA,EAAA6a,GAAA,sBAAA7a,CAOe,GAAA8a,GAAA,uBAOnB9a,QACJA,4CA3CyEA,cAAA,iBAAAA,CAAkB,qBACzDA,cAAA,yBAA0BA,cAAA8Y,GAAAiC,iBAEhB/a,cAAA,OAAA8Y,GAAAC,kBAKA/Y,cAAA,OAAA8Y,GAAAG,sBAKAjZ,cAAA,OAAA8Y,GAAAM,kBAKrBpZ,cAAA,OAAAA,MAAA,KAAAgb,GAAAC,QAUAjb,MAAA,GAAAA,MAAA,aAAAgb,GAAAT,MAAA,KAAAS,GAAAT,MAAAlW,QAQArE,cAAA,OAAAgb,GAAAR,uCArCvBxa,MAAA,EAAAkb,GAAA,kEAAelb,MAAA,OAAAA,MAAA,IAAAmb,GAAAC,gDCpGxB,IAAMC,GAAe,MAAtB,MAAOA,GAiDTxa,YACYC,GACA6T,GACAD,IAFA3T,KAAAD,WACAC,KAAA4T,uBACA5T,KAAA2T,UAlDL3T,KAAAua,iBAAmBva,KAAKD,QAAQO,OAAOuK,MACvC7K,KAAAwa,gBAAkBxa,KAAKD,QAAQO,OAAOC,qBACtCP,KAAAqa,UAAYra,KAAKD,QAAQO,OAAOmK,kBAChCzK,KAAAya,cAAgBza,KAAKD,QAAQO,OAAOmK,kCACpCzK,KAAAka,MAAQla,KAAKD,QAAQO,OAAOC,sBAC5BP,KAAA0a,SAAW1a,KAAKD,QAAQO,OAAOmK,wBAC/BzK,KAAA2a,MAAQ3a,KAAKD,QAAQO,OAAOmK,iBAE5BzK,KAAAmV,mBAAqBnV,KAAKD,QAAQO,OAAOuK,MACzC7K,KAAAkV,cAAgBlV,KAAKD,QAAQO,OAAOuK,MAEnC7K,KAAAC,YAAc,IAAIC,IAGnBF,KAAA4a,UAAY5a,KAAK2a,MAAMna,QAC1BkQ,KAAImK,IAAQA,GAAOA,GAAKC,UAAY,IAAMD,GAAKE,SAAW,OAGvD/a,KAAAgb,UAAYhb,KAAK2a,MAAMna,QAC1BkQ,KAAImK,IAAQA,GAAOA,GAAKC,UAAU,GAAKD,GAAKE,SAAS,GAAK,OAGvD/a,KAAAib,qBAAuBjb,KAAKD,QAAQO,OAAOmK,gBAC3CzK,KAAAkb,mBAAqBlb,KAAKD,QAAQO,OAAOmK,eACzCzK,KAAA2V,iCAAmC3V,KAAKD,QAAQO,OAAOmK,6BAEvDzK,KAAAmb,oBAAqB,EAErBnb,KAAAoV,YAAcpV,KAAKD,QAAQS,QAC9BF,MAAOuK,OAAgC,EACvC6F,KAAIpC,KAAYA,KAGbtO,KAAAgV,oBAAsBhV,KAAKD,QAAQO,OAAO8a,MAE1Cpb,KAAAwZ,MAAQxZ,KAAK4T,oBAAoByH,WACjCrb,KAAAyZ,QAAUzZ,KAAK4T,oBAAoB0H,aAEnCtb,KAAAoY,cAAwBpY,KAAK4T,oBAAoB2H,mBACjDvb,KAAAsY,aAAuBtY,KAAK4T,oBAAoB4H,iBAYnD,CAEJpb,WAEIJ,KAAKD,QAAQS,QACTF,MAAOmK,sBAAoC,EAC3ChK,KAAUT,KAAKC,cACjBS,UAAUwV,IAAiBlW,KAAKkW,cAAgBA,IAElDlW,KAAKwT,WAAaxT,KAAKD,QAAQO,OAAOmK,aACtCzK,KAAKuT,kBAAoBvT,KAAKD,QAAQO,OAAOmK,kBAG7CzK,KAAKD,QAAQiB,SAASya,aAGtBzb,KAAKD,QAAQiB,SAAS0a,aAGtB1b,KAAKD,QAAQiB,SAAS2a,uBAGtB3b,KAAKD,QAAQiB,SAAS4a,gCAGtB5b,KAAKD,QAAQS,QACTF,MAAOC,0BAAkC,EACzCsb,KAAKC,KACD9b,KAAKD,QAAQiB,SAAS6J,OAA8B,IAE1DnK,WACN,CAEOqb,gBACH/b,KAAKD,QAAQiB,SAAST,sBAC1B,CAEAoX,wBAAwBqE,IACpBhc,KAAKD,QAAQiB,SAASyJ,YAA8BuR,IACxD,CAEA3E,wBAAwB2E,IACpBhc,KAAKD,QAAQiB,SAASyJ,iBAAmCuR,IAAgB,GAC7E,CAEAzG,6BACIvV,KAAKD,QAAQiB,SAASyJ,sBAC1B,CAEAuL,aAAa1H,IACTtO,KAAKic,mBAAmB1T,SACxBvI,KAAKD,QAAQiB,SAAS6J,KAA8ByD,GAAS4N,KAAMC,UACvE,CAEA5F,iBAAiBjI,IACbtO,KAAKic,mBAAmB1T,SACxBvI,KAAKD,QAAQiB,SAAS6J,KAA8ByD,GAAU4N,KAAME,UACxE,CAEAvF,mBAAmBF,IACf3W,KAAKic,mBAAmB1T,SACxBvI,KAAKD,QAAQiB,SAAST,QAAmB,CAAC,YAAa8b,KAAWC,aAAc,eAAgB,EAAG,aAAcJ,KAAMK,WAAY5F,GAAmB,IAC1J,CAEOD,aAAaC,GAA2BrI,GAAiB0N,IAC5Dhc,KAAKD,QAAQiB,SAAST,UAAoB,CAAEuK,QAAS0R,KAA+B7F,GAAmBrI,OACvGtO,KAAKD,QAAQiB,SAASyJ,YAA8BuR,IACxD,CAEAS,aAAanO,IACTtO,KAAKD,QAAQiB,SAAS0b,KAA2BpO,IACrD,CAEOqO,eACH3c,KAAKD,QAAQiB,SAASyJ,cAC1B,CAEOmS,gBACH5c,KAAKD,QAAQiB,SAAST,yBAC1B,CAEAsc,2BACI7c,KAAKD,QAAQiB,SAAST,4BAAwC,2BAC9DP,KAAKD,QAAQiB,SAAST,4BAAwC,oBAC9DP,KAAKD,QAAQiB,SAAST,4BAAwC,mBAC9DP,KAAKD,QAAQiB,SAAST,4BAAwC,kBAClE,CAEO4S,SAASY,IACZ/T,KAAK6c,2BACL,MAAM7I,GAAoBhU,KAAK2T,OAAOrJ,IAAI8F,SAAS,oBAEnDpQ,KAAKD,QAAQiB,SAASyJ,YAA0BsJ,GAASE,GAAID,GAAoBhU,KAAK2T,OAAOrJ,IAAM,KAAK,EAAO,CAAE4J,aAAcH,GAASf,OAC1I,CAAC/R,SAAAjB,KAAA,mBAAAkB,mBAlJMoZ,IAAerb,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,UAAA8c,EAAAzb,IAAA,MAAfiZ,GAAehZ,UAAA,iBAAAyb,UAAA,SAAApb,GAAAC,OAAA,EAAAD,m8GDnC5B1C,MAAA,UAAAA,CAA0G,WAElGA,MAAA,6CACAA,MAAA,QAAIA,MAAA,oBAAuCA,UAG/CA,MAAA,4BACIA,MAAA,qBAA8HA,MAAA,0BAAS2C,GAAAma,eAAe,qBAAE9c,QACxJA,MAAA,GAAA+d,EAAA,sBAAA/d,CAYe,GAAAge,EAAA,sBAUnBhe,QAEAA,MAAA,WAAAA,CAAkE,WAAlEA,CAAkE,uBAItDA,MAAA,uBAAAgU,IAAA,OAAerR,GAAAuR,SAAAF,GAAgB,qBAC/BhU,MAAA,GAAAie,EAAA,2CAIJje,UAEJA,MAAA,YAAAA,CAAiD,2BAEzCA,MAAA,GAAAke,EAAA,gCAGAle,MAAA,sBAEAA,MAAA,GAAAme,EAAA,gDAUAne,MAAA,GAAAoe,EAAA,0BAAApe,OAIc,GAAAqe,EAAA,kDAmDlBre,QAEAA,MAAA,sBACIA,MAAA,sBACAA,MAAA,+CAEIA,MAAA,aAAqBA,MAAA,sBAAuBA,QAAMA,MAAA,WAAMA,MAAA,sBAAuBA,UAEnFA,MAAA,GAAAse,EAAA,gDAIAte,MAAA,6BAA6EA,MAAA,4BAAW2C,GAAA+a,cAAc,GAClG1d,MAAA,sBAA6CA,MAAA,WAAMA,MAAA,eAAQA,YAInEA,MAAA,yBAAqJA,MAAA,0BAAA2C,GAAAuZ,oBAA8B,CAAI,GAAElc,QAEzLA,MAAA,GAAAue,GAAA,sBAAoJve,MAAA,kCAAA2C,GAAAuZ,oBAAsC,CAAK,GA+CnMlc,6DArL6EA,MAAA,oBAEpCA,MAAA,GAAAA,MAAA,MAAAA,MAAA,KAAA2C,GAAA6Y,eAAAxb,OAA6B,aAAAwe,GAAAxe,MAAA,KAAA2C,GAAAyY,YAAA,KAAAoD,GAAAzK,MAClE/T,MAAA,GAAAA,MAAA,OAAAye,GAAAze,MAAA,KAAA2C,GAAAyY,YAAA,KAAAqD,GAAAC,cAGsD1e,MAAA,GAAAA,MAAA,WAAAA,MAAA,KAAA2C,GAAA4Y,kBACtBvb,MAAA,GAAAA,MAAA,SAAAA,MAAA,MAAA2C,GAAA4Y,kBACrBvb,MAAA,GAAAA,MAAA,mBA0BKA,MAAA,GAAAA,MAAA,kBAAuBA,MAAA,kBAAAA,CAAqB,eAArBA,CAAqB,QAAAA,MAAA,MAAA2C,GAAA2R,mBAArBtU,CAAqB,sBAGPA,MAAA,GAAAA,MAAA,0BAAAA,MAAA,MAAA2C,GAAA4R,YAAAvU,CAA6B,+BAAAA,MAAA,GAAAwU,IAQ5CxU,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA2C,GAAA+T,mCAKZ1W,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA2C,GAAAsZ,oBAAAjc,CAAkC,WAAA2e,IAiB3B3e,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2C,GAAAqZ,uBAkDnBhc,MAAA,GAAAA,MAAA,mBAAAA,CAAsB,kBAEXA,MAAA,GAAAA,MAAA,oBAAAA,CAAqB,aAAAA,MAAA,GAAA4e,GAAA5e,MAAA,MAAA2C,GAAA+Y,OAAAmD,SAEjB7e,MAAA,GAAAA,YAAA,MAAA2C,GAAAoZ,YAAmC/b,MAAA,GAAAA,YAAA,MAAA2C,GAAAgZ,YAEU3b,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2C,GAAA2Y,mBAIjDtb,MAAA,GAAAA,MAAA,qBAKCA,MAAA,GAAAA,MAAA,kBAEOA,MAAA,GAAAA,MAAA,4BAAA8e,GAAA9e,CAAoC,0BAAA2C,GAAAuZ,i0CCnGpEb,EAAe,4OChC1Brb,MAAA,GACEA,MAAA,QACEA,MAAA,GACFA,QACFA,kCAFIA,MAAA,GAAAA,MAAA,eAAA+e,EAAA,MCeC,IAAMC,EAAa,MAApB,MAAOA,EAeXne,YACUoe,EACAxV,GADA1I,KAAAke,eACAle,KAAA0I,SANV1I,KAAAme,iBAAkB,EAQhBne,KAAKoe,UAAYpe,KAAKke,aAAaG,cACrC,CAEAje,WACEJ,KAAK0I,OAAOlI,QACV8d,KAAK,IAAC,EACNhe,MAAOC,uBACPG,UAAU6d,IACV,MAAMC,EAAkBC,OAAOF,EAAaG,wBAA6B,MAAQH,EAAaG,uBACxFpQ,EAAUmQ,OAAOF,EAAaI,iBAAsB,MAAQJ,EAAaI,gBACzEtQ,EAASoQ,OAAOF,EAAaK,gBAAqB,MAAQL,EAAaK,eACvE9C,EAASyC,EAAaM,eAE5B7e,KAAK0I,OAAO1H,SAAST,4BAAwC,oBAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,mBAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,mBAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,2BAEzD+N,EACF1N,WAAW,KACPZ,KAAK0I,OAAO1H,SAAS6J,KAA8ByD,EAASD,EAAQyQ,KAAKC,MAAMjD,IAAQ,EACtF,KAGI0C,GACT5d,WAAW,KACPZ,KAAK0I,OAAO1H,SAAS6J,KAAqC2T,EAAiBnQ,EAAQyQ,KAAKC,MAAMjD,IAAQ,EACrG,IAAI,GAKb9b,KAAK0I,OAAO1H,SAAS6J,QAErB7K,KAAKgf,cAAgBhf,KAAK0I,OAAOlI,QAC/BF,MAAOmK,mBAA8B,EACrCiG,KAAIqD,GAAYA,EAASf,OAG3BhT,KAAKif,cAAgBjf,KAAK0I,OAAOlI,QAC/BF,MAAOmK,mBAA8B,EACrCiG,KAAIqD,GAAYA,EAAS4J,cAAcuB,SAGzClf,KAAKya,cAAgBza,KAAK0I,OAAOpI,OAAOmK,kCACxCzK,KAAKmf,eAAiBnf,KAAK0I,OAAOlI,QAAKF,MAAO8e,OAE9Cpf,KAAKmf,eAAe3e,QAClB6e,KAAU,IAAMrf,KAAKme,kBAAe,EACpCmB,KAAetf,KAAK0I,OAAOpI,OAAOmK,WAClC/J,UAAU,EAAE6e,EAAeC,MACvBD,GAAiBA,EAAcjc,OAAS,IAC1Cic,EAAchS,QAAQkS,IACpB,MAAMC,EAAOD,EAASpD,WAAWvL,KAAK6O,IAA2B,IAAnBA,EAAKxR,WAC/CuR,IACF1f,KAAKoO,YAAcsR,EAAKzL,GACxBjU,KAAKsO,QAAUmR,EAASG,QACxB5f,KAAKuO,eAAiBkR,EAASI,gBAGjCJ,EAASpD,WAAW9O,QAAQwD,IAC1B,MAAM+O,EAAW/O,EAAUmL,MAAMpL,KAAKiP,IAA2B,IAAnBA,EAAK5R,WAC/C2R,IACF9f,KAAKoO,YAAc2C,EAAUkD,GAC7BjU,KAAKuO,eAAiBkR,EAASI,eAC/B7f,KAAKsO,QAAUmR,EAASG,QACxB5f,KAAKggB,aAAeF,EAAS7L,GAC7BjU,KAAKigB,YAAcT,EAAW1O,KAAKoP,GAAMA,EAAGlP,KAAOhR,KAAKoO,cAAc+R,MAAMrP,KAAK5P,GAAKA,EAAE8P,KAAOhR,KAAKggB,cAAcvG,UAErH,GAiBGzZ,KAAK0I,OAAO1H,SAdbhB,KAAKggB,aAOiB,IAArBhgB,KAAKigB,YAOgB1f,QANlBP,KAAKsO,QAON,CAAC,YAAatO,KAAKoO,YAAa,QAASpO,KAAKsO,SAL9C,CAAC,YAAatO,KAAKoO,YAAa,eAAgBpO,KAAKuO,gBAMrD,CAAEe,YAAa,CAAEjB,OAAQrO,KAAKggB,gBASXzf,QALlBP,KAAKsO,QAMN,CAAC,YAAatO,KAAKoO,YAAa,QAASpO,KAAKsO,QAAS,aAActO,KAAKggB,cAJ1E,CAAC,YAAahgB,KAAKoO,YAAa,eAAgBpO,KAAKuO,eAAgB,aAAcvO,KAAKggB,eAlBvEzf,QAHlBP,KAAKsO,QAGgC,CAAC,YAAatO,KAAKoO,YAAa,QAASpO,KAAKsO,SAF9C,CAAC,YAAatO,KAAKoO,YAAa,eAAgBpO,KAAKuO,kBAAgB,EAgCvH,CAEA1N,cACEb,KAAKme,iBAAkB,CACzB,CAACld,SAAAjB,KAAA,mBAAAkB,iBAjIU+c,GAAahf,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,UAAAogB,EAAA/e,IAAA,MAAb4c,EAAa3c,UAAA,eAAAC,MAAA,EAAAC,KAAA,GAAAC,OAAA,4IAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDpB1B1C,MAAA,0BACAA,MAAA,WACEA,MAAA,6CACAA,MAAA,EAAAohB,EAAA,uCAKAphB,MAAA,SACEA,MAAA,GACFA,iBAVkBA,MAAA,iBAAAA,CAAqB,gBAEnBA,MAAA,GAAAA,MAAA,MAAAA,MAAA,IAAA2C,EAAA6Y,eAAAxb,OAA2B,MAAAA,MAAA,IAAA2C,EAAAod,gBAChC/f,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAA2C,EAAAqd,gBAMbhgB,MAAA,GAAAA,MAAA,IAAA2C,EAAAwc,UAAA,sPCWSH,CAAa,+ECbnB,IAAMqC,EAAiB,MAAxB,MAAOA,EAEXxgB,cAAgB,CAEhBM,WACA,CAACa,SAAAjB,KAAA,mBAAAkB,iBALUof,EAAiB,EAAArf,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAjBif,EAAiBhf,UAAA,oBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,kCAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICP9B1C,MAAA,WACEA,MAAA,iBACFA,eADaA,cAAA,gGDMAqhB,CAAiB,+EEAvB,IAAMC,EAAgB,MAAvB,MAAOA,EAAgBtf,SAAAjB,KAAA,mBAAAkB,iBAAhBqf,EAAgB,EAAAtf,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAhBkf,EAAgBjf,UAAA,kBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,6GAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICP7B1C,MAAA,WACEA,MAAA,iBACFA,sCDKashB,CAAgB,+EEAtB,IAAMC,EAAgB,MAAvB,MAAOA,EAEX1gB,cACA,CAEAM,WACA,CAACa,SAAAjB,KAAA,mBAAAkB,iBANUsf,EAAgB,EAAAvf,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAhBmf,EAAgBlf,UAAA,kBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,kCAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICP7B1C,MAAA,WACEA,MAAA,iBACFA,eADaA,cAAA,6FDMAuhB,CAAgB,u7BE8EtB,IAAMC,GAAe,MAAtB,MAAOA,GACF,cAAOC,GACV,MAAO,CACHC,KAAYC,WAAW,OAAQC,KAE/BC,KAAcF,WAAW,CACrBnW,IAEAsW,UACAC,UACAC,KACAC,UACAC,KACAC,KACAC,KACAC,UACAC,UACAC,UACAC,KACAC,KACAC,KACAC,UACAC,UACAC,UACAC,KACAC,UACAC,UACAC,UACAC,UACAC,UACAC,KACAC,KACAC,UACAC,KAEAC,WACAC,UACAC,UACAC,UACAC,UACAC,KACAC,UACAC,KACAC,UACAC,MACAC,WACAC,MACAC,WACAC,KACAC,UACAC,UACAC,KACAC,UACAC,UACAC,WACAnX,MACAoX,WACAC,WACAC,WACAC,WACAC,WACAC,MACAC,WACAC,MACAC,MACAC,WACAC,WACAC,WACAC,MACAC,MACAC,WACAC,WACAC,WACAC,MACAC,WACAC,WACAC,MACAC,MACAC,WACAC,WACAC,WACAC,YAGZ,CAACrkB,SAAAjB,KAAA,mBAAAkB,mBApFQuf,GAAe,EAAAxf,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAf/E,KAAexf,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,WAAfhF,EAAe,oNClCrB,IAAMiF,GAAkB,MAAzB,MAAOA,GAAkBzkB,SAAAjB,KAAA,mBAAAkB,mBAAlBwkB,GAAkB,EAAAzkB,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAlBE,KAAkBzkB,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UApBvB9E,KAAYC,WAAW,UAAWC,MAClCC,KAAcF,WAAW,CACrB+E,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,WACAC,uBAICf,EAAkB,gOCpCxB,IAAMgB,GAAmB,MAA1B,MAAOA,GACX5mB,YACU6mB,IAAA3mB,KAAA2mB,QACN,CAKJC,yBACE,OAAO5mB,KAAK2mB,MAAME,IAAyB,oBAC7C,CAKAC,gBAAgB9V,IAGd,OAAOhR,KAAK2mB,MAAME,IAFN,qBAAqB7V,MAEgBxQ,QAC/CkQ,MAAIqW,IAsDV,SAASC,GAAeC,IACtB,MAAMC,GAAiB,GAEvBD,UAAgB1Z,QAAQ4Z,KACtB,MAAQC,cAAYC,YAAUC,eAAaC,gBAAgBJ,GAEvDA,GAASK,QACXL,GAASK,QAAQja,QAAQka,KACvB,MAAMC,GACJR,GAAepW,KAAK6W,IAAOA,GAAIP,aAAeD,GAASC,YAAcO,GAAIC,gBAAkBH,GAAOG,eACpG,GAAIF,GAAgB,CAClB,IAAIG,GAAcH,GAAeF,QAAQ1W,KAAKgX,IAAaA,GAAUC,WAAaN,GAAOM,UAErFF,IAAeA,GAAYE,WAAaN,GAAOM,SACjDF,GAAYG,MAAWH,GAAYG,MAAQ,IAAMP,GAAOO,MAExDN,GAAeF,QAAQ/W,KAAKgX,GAEhC,MACEP,GAAezW,KAAK,CAAE2W,cAAYC,YAAUC,eAAaC,eAAaK,cAAeH,GAAOG,cAAeJ,QAAS,CAACC,KAAS,GAIlIP,GAAezW,KAAK0W,GAAQ,GAGzBD,EACT,CAjFkBF,CAAeD,KAE/B,CAMAkB,wBAAwBjX,IAGtB,OAAOhR,KAAK2mB,MAAMuB,OAFN,qBAAqBlX,KAGnC,CAKAmX,uBAGE,OAAOnoB,KAAK2mB,MAAME,IAFN,+BAGd,CAOAuB,gBAAgBC,IACd,MAAOC,GAAYC,IAAiBF,GAAS9d,MAAM,KAGnD,OAAOvK,KAAK2mB,MAAME,IAFN,mCAAmCyB,KAAaC,GAAgB,aAAeA,GAAgB,MAE7D/nB,QAC5CkQ,MAAI8X,IAAeA,GAAY,IAEnC,CAMAC,oBAAoBC,IAGlB,OAAO1oB,KAAK2mB,MAAMgC,KAFN,oBAEkDD,GAChE,CAEAE,mBAAmBF,IAGjB,OAAO1oB,KAAK2mB,MAAMkC,IAFN,oBAEiDH,GAC/D,CAACznB,SAAAjB,KAAA,mBAAAkB,mBAtEUwlB,IAAmBznB,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnBpC,GAAmBqC,QAAnBrC,GAAmBsC,UAAAC,WAFlB,gBAEDvC,EAAmB,KCkBnBwC,GAAmB,MAA1B,MAAOA,GACXppB,YACUC,GACAopB,GACAC,IAFAppB,KAAAD,WACAC,KAAAmpB,wBACAnpB,KAAAopB,aAMHppB,KAAAqpB,2BAA0BC,MAC/B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOC,aAAwB,EAC/BC,MAAU,IAAMzpB,KAAKmpB,qBAAqBvC,yBAAyBpmB,QACjEkQ,MAAIgZ,IAAsBF,kBAAgCE,MAAmB,EAC7EC,MAAWC,OAASC,OAAGL,eAA6BI,UAQnD5pB,KAAA8pB,yBAAwBR,MAC7B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOQ,uBAAgC,EACvCN,MAAU,IAAMzpB,KAAKmpB,qBAAqBhB,uBAAuB3nB,QAC/DkQ,MAAIsZ,IAAoBD,4BAAwCC,MAAiB,EACjFL,MAAWC,OAASC,OAAGE,yBAAqCH,UAQ3D5pB,KAAAiqB,oBAAmBX,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOW,0BAAmC,EAC1CC,MAASjb,IACHA,GAAOkb,SACFpqB,KAAKmpB,qBAAqBrC,gBAAgB5X,GAAOkb,UAAU5pB,QAChEkQ,MAAI2Z,IAAeH,0BAAsCG,MAGpDC,QASRtqB,KAAAuqB,4BAA2BjB,MAChC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOC,eAA0B,EACjCW,MAASjb,IACPlP,KAAKmpB,qBAAqBlB,wBAAwB/Y,GAAOsb,gBAAgBhqB,QACvE2pB,MAAS,IAAM,CACbX,sBACAjpB,WAAqB,CAAEuK,WAAS2f,OAAe,aAC/CjB,gBACD,EACDG,MAAWC,KACT,MAAMc,GAAU,CACdlB,iBAA+BI,IAC/BrpB,WAAqB,CAAEuK,WAAS6f,OAAY,WAAYf,OAE1D,SAAOgB,MAAKF,GAAO,OAOtB1qB,KAAA6qB,2BAA0BvB,MAC/B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOuB,+BAAqC,EAC5CxL,MAAetf,KAAKD,QAAQO,OAAO8a,SAAgD,EACnF1K,MAAI,EAAExB,GAAQ6b,MACPA,IAAkC,MAAtB7b,GAAOoZ,WAGfwC,sBAFAA,gBAWR9qB,KAAAgrB,4BAA2B1B,MAChC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOuB,aAAmB,EAC1BxL,MAAetf,KAAKD,QAAQO,OAAO8a,SAA0C,EAC7E+O,MAAS,EAAEc,GAAG3C,MACZtoB,KAAKmpB,qBAAqBf,gBAAgBE,IAAY9nB,QACpDkQ,MAAIwa,IAAcJ,kBAA2BI,MAAW,EACxDvB,MAAWC,OAASC,OAAGiB,eAAwBlB,UAShD5pB,KAAAmrB,4BAA2B7B,MAChC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOuB,qBAA2B,EAClCrB,MAAUva,IAAUlP,KAAKmpB,qBAAqBf,gBAAgBlZ,GAAOmZ,UAAU7nB,QAC7EkQ,MAAIwa,IAAcJ,0BAAmCI,KAAU,EAC/DvB,MAAWC,OAASC,OAAGiB,uBAAgClB,WAKtD5pB,KAAAorB,mBAAkB9B,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOW,uBAAgC,EACvCxZ,MAAIxB,IAAUA,GAAOmc,UAAO,EAC5B/L,MAAetf,KAAKD,QAAQO,OAAOmK,mBAAgC,EACnEgf,MAAU,EAAE6B,GAAWC,OACrB,MAAMC,GAAQD,GAAUjb,OAAOmb,IAASH,GAAUlb,SAASqb,GAAMza,KACjE,SAAO6Y,OAAG6B,uBAAoCF,IAAM,KAQnDxrB,KAAA2rB,kBAAiBrC,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOqC,yBAAqC,EAC5CtM,MAAetf,KAAKD,QAAQO,OAAO8a,SAA6B,EAChE+O,MAAS,EAAEc,GAAGY,MACd7rB,KAAKmpB,qBAAqBV,oBAAoBoD,IAAUrrB,QACtD2pB,MAAUpD,IAAS,CACjB6E,gCACApC,aACAjpB,WAAqB,CAAEuK,WAAS2f,OAAe,cAChD,EACDd,MAAWC,KACT,MAAMc,GAAU,CACdlB,iBAA+BI,IAC/BrpB,WAAqB,CAAEuK,WAAS6f,OAAY,SAAUf,OAExD,SAAOgB,MAAKF,GAAO,OAMpB1qB,KAAA8rB,oBAAmBxC,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOqC,2BAAuC,EAC9CtM,MAAetf,KAAKD,QAAQO,OAAO8a,SAA6B,EAChE+O,MAAS,EAAEjb,GAAQ2c,MACnB7rB,KAAKmpB,qBAAqBP,mBAAmBiD,IAAUrrB,QACrD2pB,MAAS,IAAM,CACbyB,kCACArrB,WAAqB,CAAEuK,WAAS2f,OAAe,aAC/C5f,UACD,EACD8e,MAAWC,OAASC,OAAG+B,6BAA4ChC,UAMlE5pB,KAAA+rB,sBAAqBzC,MAC1B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOqC,0BAAsC,EAC7CzB,MAAS,IAAM,CACbyB,yBACAF,kBACAZ,6BAAsC,MACtCZ,cACA3pB,6BAhLF,CAACU,SAAAjB,KAAA,mBAAAkB,mBALMgoB,IAAmBjqB,MAAAkC,MAAAlC,MAAA6S,IAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnBI,GAAmBH,QAAnBG,GAAmBF,mBAAnBE,EAAmB,KCYnB8C,GAAkB,MAAzB,MAAOA,GAAkB/qB,SAAAjB,KAAA,mBAAAkB,mBAAlB8qB,GAAkB,EAAA/qB,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAlBwG,KAAkB/qB,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAX3BwG,MACAC,KACAC,MACAC,MACAzL,KAAYC,WAAW,eAAgBC,OACvCC,KAAcF,WAAW,CAACsI,eAMjB8C,EAAkB,+QC3BxB,IAAMK,GAAe,MAAtB,MAAOA,GAKXvsB,YACU4I,GACA4jB,GACApO,IAFAle,KAAA0I,UACA1I,KAAAssB,gBACAtsB,KAAAke,gBANFle,KAAAusB,yBAA0B,EAC1BvsB,KAAAwsB,sBAA8C,IAAIC,KAAqB,KAM3E,CAEGC,UAAUC,GAA2B7rB,IAE1C,OAAK6rB,GAAQriB,IAAIsiB,WAAW5sB,KAAKke,aAAa2O,qBAgFvC/rB,GAAKgsB,OAAOH,IAASnsB,QAC1BmpB,MAAWoD,KAELC,KAAYC,YACdjtB,KAAK0I,OAAO1H,SAASyJ,iBAAsB,EAEtCyiB,MAAW,IAAMH,OAnFnB/sB,KAAK0I,OAAOpI,OAAOmK,uBAA+BjK,QACvDipB,MAAU0D,IAAmBA,GACzBntB,KAAK0I,OAAOlI,QAGZF,MAAOmK,iBAAsB,EAC7B6T,MAAK,IAAC,EAGNmL,MAAU2D,OAEJC,WAAOD,GAAME,YAAYC,KAAK,IAAIC,KAAQ,YAAc,KACnDN,MAAW,IAAM,IAAIO,KAAkB,CAAEhkB,OAAQ,OAEjD3I,GAAKgsB,OAAO9sB,KAAK0tB,uBAAuBf,GAASS,OAC3D,EACD5sB,SACEmpB,MAAWoD,IAELA,cAAoBU,MAAyC,MAApBV,GAAStjB,OAEhDzJ,KAAKusB,wBAGAvsB,KAAKwsB,sBAAsBhsB,QAGhC8P,MAAOqd,IAAqB,OAAXA,KAAe,EAChCrP,MAAK,IAAC,EAGNmL,MAAWmE,IAAa9sB,GAAKgsB,OAAO9sB,KAAK0tB,uBAAuBf,GAASiB,QAM3E5tB,KAAKusB,yBAA0B,EAC/BvsB,KAAKwsB,sBAAsB1rB,KAAK,MAEzBd,KAAK0I,OAAOlI,QAGjBF,MAAOmK,iBAAsB,EAC7B6T,MAAK,IAAC,EAGNmL,MAAU2D,IAASptB,KAAKssB,aAAauB,aAAaT,GAAMS,cAAcrtB,QAGpEqb,MAAI+R,KACF5tB,KAAKusB,yBAA0B,EAC/BvsB,KAAKwsB,sBAAsB1rB,KAAK8sB,GAAQ,IACzC,EAGD/R,MAAI+R,IAAY5tB,KAAK0I,OAAO1H,SAASyJ,0BAAkC,CAAE2iB,MAAOQ,QAAY,EAG5FnE,MAAUmE,IACD9sB,GAAKgsB,OAAO9sB,KAAK0tB,uBAAuBf,GAASiB,WAG1D,EAKDV,MAAW,IAAMH,OAG1BjsB,GAAKgsB,OAAOH,KAexB,CAEAe,uBAAuBf,GAASS,IAC9B,OAAOT,GAAQmB,MAAM,CAAEC,WAAY,CAAEC,cAAe,UAAUZ,GAAMa,gBACtE,CAAChtB,SAAAjB,KAAA,mBAAAkB,mBA1GUmrB,IAAeptB,MAAAkC,MAAAlC,MAAA6S,OAAA7S,MAAA6S,OAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAfuD,GAAetD,QAAfsD,GAAerD,UAAAC,WAFd,gBAEDoD,EAAe,KCNf6B,GAA2B,MAAlC,MAAOA,GACXpuB,YACU4I,IAAA1I,KAAA0I,SACN,CAEGgkB,UAAUC,GAA2B7rB,IAC1C,OAAOd,KAAK0I,OAAOlI,QACjBF,MAAOmK,sBAAgC,EACvC6T,MAAK,IAAC,EACN5N,MAAIyd,IAAsBA,GAAqBxB,GAAQmB,MAAM,CAC3DC,WAAY,CACVK,WAAc,GAAGD,QAEhBxB,KAAO,EACZlD,MAAUkD,IAAW7rB,GAAKgsB,OAAOH,KAErC,CAAC1rB,SAAAjB,KAAA,mBAAAkB,mBAhBUgtB,IAA2BjvB,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAA3BoF,GAA2BnF,QAA3BmF,GAA2BlF,UAAAC,WAF1B,gBAEDiF,EAA2B,KCC3BG,GAAyB,MAAhC,MAAOA,GAEXvuB,YACUC,IAAAC,KAAAD,UACN,CAEJ2sB,UAAUC,GAA2B7rB,IACnC,OAAQd,KAAKD,QAAQS,QACnBF,MAAO8a,QAAoC,EAC3CkD,MAAK,IAAC,EACNmL,MAAUW,KACR,MAAMkE,GAAkBlE,GACpBuC,GAAQmB,MAAM,CAAES,QAAS5B,GAAQ4B,QAAQC,IAAI,iBAAkBpE,GAAShZ,cACxEub,GAEJ,OAAO7rB,GAAKgsB,OAAOwB,GAAa,GAGtC,CAACrtB,SAAAjB,KAAA,mBAAAkB,mBAlBUmtB,IAAyBpvB,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAzBuF,GAAyBtF,QAAzBsF,GAAyBrF,UAAAC,WAFxB,gBAEDoF,EAAyB,KCNzBI,GAAyB,MAAhC,MAAOA,GACX3uB,cAAgB,CAEhB4sB,UAAUC,GAA2B7rB,IACnC,MAAM4tB,QAAalB,MAAOmB,oBAAsB,GAEhD,OAAO7tB,GAAKgsB,OAAOH,GAAQmB,MAAM,CAC/BC,WAAY,CACVa,eAAkBF,GAAOtd,cAG/B,CAACnQ,SAAAjB,KAAA,mBAAAkB,mBAXUutB,GAAyB,EAAAxtB,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAzB2F,GAAyB1F,QAAzB0F,GAAyBzF,UAAAC,WAFxB,gBAEDwF,EAAyB,KCIzBI,GAAmB,MAA1B,MAAOA,GACJnC,UAAUC,GAA2B7rB,IAC1C,OAAOA,GAAKgsB,OAAOH,IAASnsB,QACxBkQ,MAAIqc,KACA,GAAIA,cAAoB+B,MAElB9uB,KAAK+uB,WAAWhC,GAASrE,OAASqE,GAASrE,KAAKsG,YAAc,IAChE,MAAM,IAAIvB,KAAkB,CAC1BhkB,OAAQsjB,GAAStjB,OACjBwlB,WAAY,gBACZrF,MAAOmD,GAASrE,KAChB6F,QAASxB,GAASwB,QAClBjkB,IAAKyiB,GAASziB,MAKpB,OAAOyiB,MACV,EACDpD,MAAWoD,IACLA,cAAoBU,MAClBV,GAASnD,MAEmB,iBAAnBmD,GAASnD,OAAU,EACrBsD,MAAW,IAAMH,GAASnD,OAGxB5pB,KAAK+uB,WAAWhC,GAASnD,QAAK,EAChCsD,MAAW,SACbH,GAASnD,MACZhqB,QAASmtB,GAASnD,MAAMhqB,SAAW,OACnC,EAIGstB,MAAW,MAChB8B,WAAYjC,GAAStjB,OACrB7J,QAASmtB,GAASkC,eAClB,EAKC/B,MAAW,MAChB8B,WAAY,EACZpvB,QAAS,oBAInB,CAEQmvB,WAAW/f,IACjB,IAAKA,GACH,OAAO,EAET,IACE,MAAO,eAAgBA,IAAW,eAAgBA,EACpD,OACE,OAAO,CACT,CACF,CAAC/N,SAAAjB,KAAA,mBAAAkB,mBA5DU2tB,GAAmB,EAAA5tB,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnB+F,GAAmB9F,QAAnB8F,GAAmB7F,UAAAC,WAFlB,gBAED4F,EAAmB,KCHnBK,GAAkB,MAAzB,MAAOA,GACTpvB,YACY8T,IAAA5T,KAAA4T,sBACR,CAEG8Y,UAAUC,GAA2B7rB,IACxC,OAAOA,GAAKgsB,OAAOH,GAAQmB,MACvB,CACIxjB,IAAKtK,KAAKmvB,eAAexC,GAAQriB,KACjCyjB,WAAY/tB,KAAK4T,oBAAoBwb,cAAcC,OAAO,CAACC,GAAKC,MACxDA,IAAQptB,MAAQotB,IAAQle,QACxBie,GAAIC,GAAOptB,MAAQotB,GAAOle,OAEvBie,IACR,KAAO,KAGtB,CAEQH,eAAe7kB,IACnB,OAAIA,GAAIsiB,WAAW,KACR,GAAG5sB,KAAK4T,oBAAoB4b,kBAAkBllB,KAElDA,EACX,CAACrJ,SAAAjB,KAAA,mBAAAkB,mBAxBQguB,IAAkBjwB,MAAAkC,OAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlBoG,GAAkBnG,QAAlBmG,GAAkBlG,mBAAlBkG,EAAkB,KCKxB,MAAMO,GAAe,CAC1B,CAAEC,QAASC,KAAmBC,SAAUf,GAAqBgB,OAAO,GACpE,CAAEH,QAASC,KAAmBC,SAAUvD,GAAiBwD,OAAO,GAChE,CAAEH,QAASC,KAAmBC,SCRH,MAAvB,MAAOE,GAEJpD,UAAUqD,GAAuBjvB,IACtC,MAAMkvB,GAAUD,GAAIjC,MAAM,CACxBC,WAAY,CACV,gBAAiB,cAGrB,OAAOjtB,GAAKgsB,OAAOkD,GACrB,CAAC/uB,SAAAjB,KAAA,mBAAAkB,mBATU4uB,GAAgB,EAAA7uB,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhBgH,GAAgB/G,QAAhB+G,GAAgB9G,mBAAhB8G,EAAgB,KDQ+BD,OAAO,GACjE,CAAEH,QAASC,KAAmBC,SAAU1B,GAA6B2B,OAAO,GAC5E,CAAEH,QAASC,KAAmBC,SAAUvB,GAA2BwB,OAAO,GAC1E,CAAEH,QAASC,KAAmBC,SAAUnB,GAA2BoB,OAAO,GAC1E,CAAEH,QAASC,KAAmBC,SAAUV,GAAoBW,OAAO,oBEI9D,IAAMI,GAAiB,MAAxB,MAAOA,GAKXnwB,YACUowB,GACAnwB,IADAC,KAAAkwB,QACAlwB,KAAAD,WAJVC,KAAAmwB,aAAenwB,KAAKD,QAAQO,OAAOmK,SAK/B,CASJ2lB,sBAAuB9hB,WAAS+hB,YAAUC,UAAQC,iBAChD,IAAIjmB,GACAwR,GAAqB,IAAI0U,KAG7B,OAAID,IACFjmB,GAAM,wBAAwBgE,oBAC9BwN,GAASA,GAAO0S,IAAI,cAAe+B,MAEnCjmB,GAAM,wBAAwBgE,aAC9BwN,GAASA,GAAO0S,IAAI,WAAY6B,IAChCvU,GAASA,GAAO0S,IAAI,SAAU8B,KAGzBtwB,KAAKkwB,KAAKrJ,IAAwBvc,GAAK,CAC5CwR,OAAQA,KAEPtb,QACC8e,MAAetf,KAAKmwB,eAAY,EAChCzf,MAAI,EAAE+f,GAAQC,MACLD,GAAO/f,IAAIigB,SAEXA,GACHC,iBAA8C,OAA5BD,GAAME,kBAA6B,eAAiB,mBACtEC,eAAgBJ,GAAYC,GAAMI,cAAc/d,KAChDge,gBAAiBN,GAAYC,GAAMI,cAAcE,MACjDC,mBAAoB,GAAGP,GAAMQ,cAAcR,GAAMS,QACjDC,uBAAwB,GAAGV,GAAMW,kBAAkBX,GAAMS,QACzDG,eAAgBZ,GAAMa,oBAKlC,CAEAC,yBAAyBC,GAAwBpjB,IAC/C,OAAOtO,KAAKkwB,KAAKrJ,IAAiC,kBAAkB6K,uBAAoC,CACtG5V,OAAQ,CACNxN,QAASA,GAAQ8C,aAGvB,CAKAugB,qCAEE,OAAO3xB,KAAKkwB,KAAKrJ,IADL,8CAEd,CAEA+K,mBAAmBC,IAGjB,OAAO7xB,KAAKkwB,KAAKrJ,IAFL,kBAAkBgL,oBAGhC,CAAC5wB,SAAAjB,KAAA,mBAAAkB,mBAxEU+uB,IAAiBhxB,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAjBmH,GAAiBlH,QAAjBkH,GAAiBjH,UAAAC,WAFhB,gBAEDgH,EAAiB,qBCEvB,IAAM6B,GAAuB,MAA9B,MAAOA,GACXhyB,YAAoBiyB,GACVC,GACAC,IAFUjyB,KAAA+xB,qBACV/xB,KAAAgyB,UACAhyB,KAAAiyB,YAIHjyB,KAAAkyB,yBAAwB5I,MAC7B,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAO4I,aAA4B,EACnC7S,MAAetf,KAAKgyB,OAAO1xB,OAAOuK,SAAiC,EACnE4e,MAAU,EAAEva,GAAQZ,OAClB,MAAM+hB,GAAW+B,cAAmBC,SAAS,EAAG,UAC1C/B,GAAS8B,cAETpjB,GAAUsjB,OAAOC,KAAKrjB,IAAQ5L,OAAS,EAAI4L,GAAS,CAAEZ,WAAS+hB,YAAUC,UAAQC,YADnE,KAGpB,OAAOvwB,KAAK+xB,kBAAkB3B,qBAAqBphB,IAASxO,QAC1DkQ,MAAI8hB,IAAcL,kBAAoCK,MAAW,EACjE7I,MAAWC,OAASC,OAAGsI,eAAiCvI,GAAMhqB,WAAU,KAMzEI,KAAAyyB,4BAA2BnJ,MAChC,IAAMtpB,KAAKiyB,SAASzxB,QACpB+oB,MAAOmJ,aAAsC,EAC7CjJ,MAAUva,IACRlP,KAAK+xB,kBAAkBN,yBAAyBviB,GAAOwiB,eAAgBxiB,GAAOZ,SAAS9N,QACrFkQ,MAAKiiB,IAAmBD,kBAA8CC,KAAe,EACnFhJ,MAAWiJ,OAAO/I,OAAG6I,eAA2CE,WAMjE5yB,KAAA6yB,sBAAqBvJ,MAC1B,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOuJ,aAAgC,EACvCrJ,MAAUva,IACRlP,KAAK+xB,kBAAkBH,mBAAmB1iB,GAAOwiB,gBAC9ClxB,QACC2pB,MAAU4I,IAA6C,CACrDD,kBAAwCC,OACzC,EACDpJ,MAAWiJ,OAAO/I,OAAGiJ,eAAqCF,UAM7D5yB,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOmJ,yCAAkE,EACzEjJ,MAAUva,IAAUlP,KAAK+xB,kBAAkBJ,qCAAqCnxB,QAC9EkQ,MAAIuiB,IAAYP,8CAA0EO,MAAS,EACnGtJ,MAAWC,OAASC,OAAG6I,2CAAuE9I,SAtDrE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBAHrB4wB,IAAuB7yB,MAAAkC,IAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAvBgJ,GAAuB/I,QAAvB+I,GAAuB9I,mBAAvB8I,EAAuB,qBCR7B,IAAMoB,GAA2B,MAAlC,MAAOA,GAA2BjyB,SAAAjB,KAAA,mBAAAkB,mBAA3BgyB,GAA2B,EAAAjyB,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAA3B0N,KAA2BjyB,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAJhC9E,KAAYC,WAAW,mBAAoBC,OAC3CC,KAAcF,WAAW,CAACkR,eAGrBoB,EAA2B,KC6D3BC,GAAU,MAAjB,MAAOA,GAAUlyB,SAAAjB,KAAA,mBAAAkB,mBAAViyB,GAAU,EAAAlyB,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAV2N,KAAUlyB,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,WAJV,CACTgK,IACD2D,QAAA,CAxBCC,KAEArH,GACAsH,KACAC,KACArH,KAEAzL,GAAgBC,UAEhB8S,KACA9N,GACA+N,KACAP,GAKAhH,KACAF,GACAuH,eAOSJ,EAAU,qDC/EhB,IAAK9W,EAAZ,SAAYA,GACVA,WAAAqX,aAAA,kBACArX,IAAAsX,YAAA,iBACAtX,IAAAuX,SAAA,cACAvX,IAAAwX,cAAA,mBACAxX,IAAAyX,UAAA,eACAzX,IAAA0X,aAAA,kBACA1X,IAAA2X,eAAA,oBACA3X,IAAA4X,QAAA,aACA5X,IAAA6X,YAAA,iBACA7X,IAAA8X,WAAA,iBACA9X,IAAA+X,cAAA,oBACA/X,IAAAgY,SAAA,eACAhY,IAAAiY,YAAA,kBACAjY,IAAAkY,WAAA,iBACAlY,IAAAC,aAAA,mBACAD,IAAAmY,UAAA,gBACAnY,IAAAoY,QAAA,cACApY,IAAAqY,OAAA,aAlBUrY,CAmBZ,CAnBA,CAAYA,GAAU,oFCAf,IAAKsY,EAAZ,SAAYA,GACRA,WAAAC,QAAA,aACAD,IAAAE,QAAA,aACAF,IAAAG,QAAA,aACAH,IAAAI,MAAA,WAJQJ,CAKZ,CALA,CAAYA,GAAW,eCAXK,EAAZ,SAAYA,GACRA,WAAAC,KAAA,UACAD,IAAAE,UAAA,eACAF,IAAAG,gBAAA,qBACAH,IAAAI,WAAA,gBACAJ,IAAAK,KAAA,UACAL,IAAAM,OAAA,YANQN,CAOZ,CAPA,CAAYA,GAAQ,wECAb,IAAK9Y,EAAZ,SAAYA,GACVA,WAAAC,SAAA,cACAD,IAAAqZ,aAAA,kBACArZ,IAAAsZ,WAAA,gBACAtZ,IAAAuZ,qBAAA,0BACAvZ,IAAAwZ,aAAA,kBACAxZ,IAAAE,SAAA,cACAF,IAAAyZ,sBAAA,2BACAzZ,IAAA0Z,sBAAA,2BACA1Z,IAAA2Z,iBAAA,sBACA3Z,IAAA4Z,SAAA,eACA5Z,IAAA6Z,2BAAA,iCACA7Z,IAAA8Z,iBAAA,uBACA9Z,IAAA+Z,iBAAA,uBACA/Z,IAAAga,kBAAA,wBACAha,IAAAxL,IAAA,UACAwL,IAAAia,SAAA,eACAja,IAAAka,kBAAA,wBACAla,IAAAma,wBAAA,8BACAna,IAAAoa,eAAA,qBACApa,IAAAqa,iBAAA,uBACAra,IAAAsa,oBAAA,0BACAta,IAAAua,wBAAA,8BACAva,IAAAwa,qBAAA,2BACAxa,IAAAya,SAAA,eACAza,IAAA0a,IAAA,UACA1a,IAAA2a,SAAA,eACA3a,IAAA4a,WAAA,iBACA5a,IAAA6a,aAAA,mBACA7a,IAAA8a,uBAAA,6BACA9a,IAAA+a,cAAA,oBACA/a,IAAAgb,cAAA,oBACAhb,IAAAib,cAAA,oBACAjb,IAAAkb,aAAA,mBACAlb,IAAAmb,WAAA,iBACAnb,IAAAob,cAAA,oBACApb,IAAAqb,iBAAA,uBACArb,IAAAsb,cAAA,oBACAtb,IAAAub,0BAAA,gCACAvb,IAAAwb,WAAA,iBACAxb,IAAAyb,YAAA,kBACAzb,IAAA0b,gBAAA,sBACA1b,IAAA2b,UAAA,gBACA3b,IAAA4b,iBAAA,uBACA5b,IAAA6b,QAAA,cACA7b,IAAA8b,gBAAA,sBACA9b,IAAA+b,mBAAA,yBACA/b,IAAAgc,KAAA,WACAhc,IAAAic,cAAA,oBACAjc,IAAAsW,WAAA,iBACAtW,IAAAkc,aAAA,mBACAlc,IAAAmc,YAAA,kBACAnc,IAAAoc,gBAAA,sBACApc,IAAAK,WAAA,iBACAL,IAAAqc,YAAA,kBACArc,IAAAsc,wBAAA,8BACAtc,IAAAuc,gBAAA,sBACAvc,IAAAwc,QAAA,cACAxc,IAAAyc,WAAA,iBACAzc,IAAA0c,WAAA,iBACA1c,IAAA2c,YAAA,kBACA3c,IAAA4c,eAAA,qBACA5c,IAAA6c,eAAA,qBACA7c,IAAA8c,mBAAA,yBACA9c,IAAA+c,qBAAA,2BACA/c,IAAAgd,IAAA,UACAhd,IAAAid,YAAA,kBACAjd,IAAAkd,sBAAA,4BACAld,IAAAmd,SAAA,eACAnd,IAAAod,WAAA,iBACApd,IAAAqd,YAAA,kBACArd,IAAAsd,eAAA,qBACAtd,IAAAud,kBAAA,wBAEAvd,IAAAwd,eAAA,uBA1EUxd,CA2EZ,CA3EA,CAAYA,GAAK,oDCAV,IAAKyd,EAAZ,SAAYA,GACVA,WAAAC,QAAA,aACAD,IAAAE,QAAA,aACAF,IAAAG,SAAA,cAHUH,CAIZ,CAJA,CAAYA,GAAa,gMCalB,IAAMI,EAAgB,MAAvB,MAAOA,EACXj6B,YACU4I,GAAA1I,KAAA0I,QACN,CAEJsxB,YAAYl5B,GACV,MAAMwN,GAAWxN,EAAKgb,OAAOxN,QAE7B,OAAOtO,KAAK0I,OAAOlI,QACjBF,MAAOmK,OAAkB,EACzB6F,KAAO2pB,IAAcA,IAAS,EAC9B3b,KAAK,IAAC,EACNmL,KAAUwQ,MAAarvB,KACnB5K,KAAK0I,OAAOpI,OAAOmK,kBACnBzK,KAAK0I,OAAOpI,OAAOmK,sBACrBjK,QACA8d,KAAK,IAAC,EACN5N,KAAI,EAAGqa,EAAUmP,QACXnP,GAAYmP,GAAYA,EAAS5rB,MAGrCtO,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,WAClC,MAIf,CAACU,SAAAjB,KAAA,mBAAAkB,iBA1BU64B,GAAgB96B,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhBiR,EAAgBhR,QAAhBgR,EAAgB/Q,UAAAC,WAFf,gBAED8Q,CAAgB,+BCQtB,IAAMI,EAAS,MAAhB,MAAOA,EACTr6B,YACY4I,EACA4jB,EACA8N,GAFAp6B,KAAA0I,SACA1I,KAAAssB,eACAtsB,KAAAo6B,aACR,CAEGJ,YAAYK,EAA+BC,GAC9C,OAAOt6B,KAAK0I,OAAOlI,QAEfF,MAAOmK,wBAA8B,EACrC6F,KAAOiqB,IAAqBA,IAAgB,EAC5Cjc,KAAK,IAAC,EAGNmL,KAAU8Q,MAAoB3vB,KAAc,CACxC5K,KAAK0I,OAAOpI,OAAOmK,sBACnBzK,KAAK0I,OAAOpI,OAAOC,mBAA8B,SACjDP,KAAK0I,OAAOlI,QACRF,MAAOC,mBAA8B,WAAQ,EAC7CmQ,KAAI8pB,IACA,IACI,OAAO1b,KAAKC,MAAM0b,KAAKD,GAC3B,OACI,OAAO,IACX,OAGTh6B,QACC8d,KAAK,IAAC,EACNmL,KAAU,EAAE0D,EAAiBuN,EAAYC,MACrC,GAAIxN,EACA,SAAOtD,OAAG,GAEd,IAAI6Q,IAAcC,EAOX,CACH,MAAMC,IAAqBF,EAC3B,OAAA16B,KAAKssB,aAAauO,cAAcD,EAAU,IAAMN,EAAYhwB,IAAKswB,IAAO,EACjE/Q,OAAG,EACd,CAGA,OAZI7pB,KAAK0I,OAAO1H,SAASyJ,cAAuB,CACxCiwB,aACAI,aAAcH,EAAWG,aACzBC,KAAMJ,EAAWI,QASlB/6B,KAAK0I,OAAOlI,QACfF,MAAOmK,wBAA8B,EACrC6F,KAAO6c,IAAoBA,IAAe,EAC1C7O,KAAK,IAAC,EACNmL,KAAU8Q,GAAoBv6B,KAAK0I,OAAOlI,QACtCF,MAAOmK,uBAA6B,EACpC6T,KAAK,IAAC,EACN5N,KAAIyc,IACIA,GAAmBwN,EAAWK,aAC9Bh7B,KAAK0I,OAAO1H,SAAST,SAAoBo6B,EAAWK,cAEjD7N,MAEb,KAKtB,CAEA8N,iBAAiBZ,EAA+BG,GAC5C,OAAOx6B,KAAKg6B,YAAYK,EAAOG,EACnC,CAACv5B,SAAAjB,KAAA,mBAAAkB,iBAtEQi5B,GAASl7B,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAATqR,EAASpR,QAAToR,EAASnR,UAAAC,WAFN,gBAEHkR,CAAS,KCRTe,EAAoB,MAA3B,MAAOA,EACXp7B,YACU4I,GAAA1I,KAAA0I,QACN,CAEJsxB,YAAYl5B,GACV,MAAMsN,GAAetN,EAAKgb,OAAO1N,YAEjC,OAAOpO,KAAK0I,OAAOlI,QACjBF,MAAOmK,OAAkB,EACzB6F,KAAO2pB,IAAcA,IAAS,EAC9BxQ,KAAUwQ,GAAaj6B,KAAK0I,OAAOpI,OAAOmK,MAAmBjK,QAC3D8P,KAAOya,GAAYA,MACpB,EACDzM,KAAK,IAAC,EACNmL,KAAUwQ,MAAarvB,KAAc,CACnC5K,KAAK0I,OAAOpI,OAAOmK,SACnBzK,KAAK0I,OAAOpI,OAAOmK,WAClBjK,QACD8d,KAAK,IAAC,EACN5N,KAAI,EAAGqa,EAAUmP,QAAkBnP,GAAYmP,GAAYA,EAAS9rB,IAAgB8rB,EAAS9rB,GAAa+R,OAAO7c,WAGvH,CAACrC,SAAAjB,KAAA,mBAAAkB,iBAvBUg6B,GAAoBj8B,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAApBoS,EAAoBnS,QAApBmS,EAAoBlS,UAAAC,WAFnB,gBAEDiS,CAAoB,KCApBC,EAAuB,MAA9B,MAAOA,EACTr7B,YACY4I,GAAA1I,KAAA0I,QACR,CAEJsxB,YAAYl5B,GACR,MAAMyN,GAAkBzN,EAAKgb,OAAOvN,eAEpC,OAAOvO,KAAK0I,OAAOlI,QACfF,MAAOmK,iBAAgC,EACvC6F,KAAO2pB,IAAcA,IAAS,EAC9B3b,KAAK,IAAC,EACNmL,KAAUwQ,MAAarvB,KACnB5K,KAAK0I,OAAOpI,OAAOmK,eACnBzK,KAAK0I,OAAOpI,OAAOmK,mBACrBjK,QACEkQ,KAAI,EAAGqa,EAAUmP,QACTnP,GAAYmP,GAAYA,EAAS3rB,MAGrCvO,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,WAClC,OAEd,EACD+d,KAAK,GAEb,CAACrd,SAAAjB,KAAA,mBAAAkB,iBA1BQi6B,GAAuBl8B,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAvBqS,EAAuBpS,QAAvBoS,EAAuBnS,UAAAC,WAFpB,gBAEHkS,CAAuB,+BCM7B,IAAMC,EAAqB,MAA5B,MAAOA,EAITt7B,YACY4I,EACA2yB,GADAr7B,KAAA0I,SACA1I,KAAAq7B,wBAJJr7B,KAAAs7B,kBAAoB,GAMxBt7B,KAAKu7B,YACT,CAEON,iBAAiBZ,EAA+BG,GAEnD,OAAOx6B,KAAK0I,OAAOlI,QACfF,MAAOmK,UAAiC,EACxC6F,KAAOya,GAAYA,IAAQ,EAC3BzM,KAAK,IAAC,EACN5N,KAAKqa,IACD,GAAIA,EAAU,CACV,MACMyQ,EAAcx7B,KAAKs7B,mBADTjB,EAAMve,OAAOzN,QAG7B,QAAKmtB,IAAOx7B,KAAKq7B,sBAAsBI,UAAUD,KAG7Cx7B,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,gBAClC,GAEf,CAEA,OAAAP,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,iBAClC,IAGnB,CAEQg7B,aACJv7B,KAAKs7B,kBAAkBpf,KAAM+a,eAAiB,2BAC9Cj3B,KAAKs7B,kBAAkBpf,KAAM6a,cAAgB,0BAC7C/2B,KAAKs7B,kBAAkBpf,KAAM8a,wBAA0B,6BACvDh3B,KAAKs7B,kBAAkBpf,KAAMmd,UAAY,QAEzCr5B,KAAKs7B,kBAAkBpf,KAAMgb,eAAiB,0BAC9Cl3B,KAAKs7B,kBAAkBpf,KAAMub,2BAA6B,kCAC1Dz3B,KAAKs7B,kBAAkBpf,KAAMkb,cAAgB,6BAC7Cp3B,KAAKs7B,kBAAkBpf,KAAMib,eAAiB,8BAE9Cn3B,KAAKs7B,kBAAkBpf,KAAMmb,YAAc,wBAC3Cr3B,KAAKs7B,kBAAkBpf,KAAMwd,gBAAkB,cAC/C15B,KAAKs7B,kBAAkBpf,KAAMsc,yBAA2B,oCAExDx4B,KAAKs7B,kBAAkBpf,KAAMC,UAAY,sBACzCnc,KAAKs7B,kBAAkBpf,KAAMsa,qBAAuB,yBACpDx2B,KAAKs7B,kBAAkBpf,KAAM2a,UAAY,sBACzC72B,KAAKs7B,kBAAkBpf,KAAMsW,YAAc,0BAC3CxyB,KAAKs7B,kBAAkBpf,KAAMga,mBAAqB,mBAGtD,CAACj1B,SAAAjB,KAAA,mBAAAkB,iBA1DQk6B,GAAqBn8B,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAArBsS,EAAqBrS,QAArBqS,EAAqBpS,UAAAC,WAFlB,gBAEHmS,CAAqB,qECH3B,kFChBP,IAAIM,EAAO,EAaL,MAAgBC,EAIjB77B,YACqBqC,EACAvC,EACAgY,GAAwB,EACxBzB,EAAY,IAAIqX,MAHhBxtB,KAAAmC,OACAnC,KAAAJ,UACAI,KAAA4X,eACA5X,KAAAmW,YAPLnW,KAAAgR,KAAO0qB,CAQnB,EAGH,MAAOE,UAAqCD,EAG7C77B,YACqB+7B,EACAvtB,EACA2I,GAAsB,GAEtC6kB,MAAM,cAAe,gBAJL97B,KAAA67B,YACA77B,KAAAsO,UACAtO,KAAAiX,aALLjX,KAAAN,KAAO,YAQvB,EAGC,MAAOq8B,UAAsCJ,EAG9C77B,YACqBqC,EACA05B,EACAvtB,EACA2I,GAAsB,GAEtC6kB,MAAM35B,EAAM,gBALInC,KAAAmC,OACAnC,KAAA67B,YACA77B,KAAAsO,UACAtO,KAAAiX,aANLjX,KAAAN,KAAO,aASvB,EAGC,MAAOs8B,UAAiCL,EAGzC77B,YACqBqC,EACAwU,EACArI,EACR2I,GAAsB,GAE9B6kB,MAAO35B,EAAM,sBALGnC,KAAAmC,OACAnC,KAAA2W,oBACA3W,KAAAsO,UACRtO,KAAAiX,aANGjX,KAAAN,KAAO,cASvB,iICjDE,IAAMu8B,EAAkB,MAAzB,MAAOA,EAOTn8B,YACY6mB,EAEAuV,EAERC,GAJQn8B,KAAA2mB,QAEA3mB,KAAAk8B,YAIRl8B,KAAKo8B,UAAYD,EAAgBE,eAAe,KAAM,KAC1D,CAEOC,wBACH,MAAMp7B,OAAQssB,MAAO+O,UAEfC,EAAOxP,IAAYC,WACnB7f,OAAOqvB,SAASC,SAAW,KAAOtvB,OAAOqvB,SAASE,KAAO,mCAAqCz7B,EAC9F,yCAA2CA,EAEjD,SAAO07B,KAAe58B,KAAK2mB,MAAME,IAAiB2V,IAAOK,KACrDzC,IACI,QAAS0C,EAAE,EAAGA,EAAE1C,EAAY2C,YAAYz5B,OAAQw5B,IAC5C,GAAI1C,EAAY2C,YAAYD,GAAGE,YAAY5sB,SAAShD,OAAOqvB,SAASE,MAAO,CACvE38B,KAAKi9B,aAAe7C,EAAY2C,YAAYD,GAC5C,KACJ,GAIhB,CAEOI,cAEH,MAAMV,EAAO,8BADChP,MAAO+O,UAGrB,SAAOK,KAAe58B,KAAK2mB,MAAME,IAAa2V,IAAOK,KAAKpjB,GAAWzZ,KAAKm9B,SAAW1jB,EACzF,CAEO3F,kBACH,OAAO9T,KAAKi9B,aAAej9B,KAAKi9B,aAAatf,aAAe,IAChE,CAEOyf,sBACH,OAAOp9B,KAAKi9B,aAAej9B,KAAKi9B,aAAaI,iBAAmB,IACpE,CACOC,oBACH,OAAOt9B,KAAKi9B,aAAej9B,KAAKi9B,aAAaM,eAAiB,IAClE,CAEO/N,gBACH,OAAOxvB,KAAKi9B,aAAej9B,KAAKi9B,aAAaO,WAAa,IAC9D,CAEO3Q,oBACH,OAAO7sB,KAAKi9B,aAAej9B,KAAKi9B,aAAaQ,eAAiB,IAClE,CAEOliB,mBACH,OAAOvb,KAAKi9B,aAAej9B,KAAKi9B,aAAaS,cAAgB,IACjE,CAEOliB,kBACH,OAAOxb,KAAKi9B,aAAej9B,KAAKi9B,aAAaU,aAAe,IAChE,CAEOC,eACH,OAAO59B,KAAKi9B,aAAej9B,KAAKi9B,aAAaY,UAAY,IAC7D,CAEOC,oBACH,OAAO99B,KAAKi9B,aAAej9B,KAAKi9B,aAAac,eAAiB,IAClE,CAEOC,iBACH,OAAOh+B,KAAKi9B,cAAcgB,aAAe,EAC7C,CAEOC,eACH,OAAOl+B,KAAKi9B,aAAej9B,KAAKi9B,aAAakB,UAAY,IAC7D,CAEOC,gBACH,OAAOp+B,KAAKi9B,aAAej9B,KAAKi9B,aAAaoB,WAAa,IAC9D,CAEOhjB,WACH,OAAOrb,KAAKi9B,aAAej9B,KAAKi9B,aAAaqB,MAAQ,EACzD,CAEOC,aACH,OAAOv+B,KAAKi9B,aAAej9B,KAAKi9B,aAAauB,QAAQluB,OAAOmuB,IAAWA,EAAOC,iBAAmB,EACrG,CAEOC,4BACL,OAAO3+B,KAAKi9B,aAAej9B,KAAKi9B,aAAauB,QAAQluB,OAAOmuB,GAAUA,EAAOC,iBAAmB,EAClG,CAEOrgB,eACH,OAAOre,KAAKi9B,aAAej9B,KAAKi9B,aAAa2B,UAAY,IAC7D,CAEA,WAAWC,GACP,QAAO7+B,KAAKi9B,cAAej9B,KAAKi9B,aAAa6B,OACjD,CAEOxjB,aACH,OAAOtb,KAAKm9B,SAAWn9B,KAAKm9B,SAAS1jB,QAAU,IACnD,CAEO2V,aACH,OAAOpvB,KAAKi9B,aAAej9B,KAAKi9B,aAAa8B,QAAU,EAC3D,CAEMC,iBAAiBC,GAAc,IAAAC,EAAAl/B,KAAA,SAAAm/B,KAAA,YACjC,IAAKF,EACD,OAGJ,MAAMG,GAA2B,IAAZH,EAAgB,QAAU,QAA7B,aACZI,EAASH,EAAKhD,UAAUoD,KACxBC,EAASL,EAAK9C,UAAUoD,cAAc,QAE5CN,SAAK9C,UAAUqD,aAAaF,EAAQ,OAAQH,GAC5CF,EAAK9C,UAAUqD,aAAaF,EAAQ,MAAO,cAEpC,IAAIG,QAAiB,CAACC,EAASC,KAClCL,EAAOM,OAAS,IAAMF,GAAQ,GAC9BJ,EAAOO,QAAUC,GAAKH,EAAOG,GAC7Bb,EAAK9C,UAAU4D,aAAaX,EAAQE,EAAQF,EAAOY,cAAc,WAG7Df,EAAKgB,YACLhB,EAAK9C,UAAU+D,YAAYd,EAAQH,EAAKgB,YAE5ChB,EAAKgB,WAAaX,GACnB,EAtB8B,EAuBrC,CAGMa,YAAYC,GAAgC,IAAAC,EAAAtgC,KAAA,SAAAm/B,KAAA,YAC9C,GAAIkB,GAAS/8B,OACT,QAASw5B,EAAI,EAAGA,EAAIuD,EAAQ/8B,OAAQw5B,IAAK,CACrC,IAAI2B,EAAS4B,EAAQvD,GACrB,GACS,IADD2B,EAAOhlB,QAET,QAAS8mB,EAAI,EAAGA,EAAI9B,EAAO4B,QAAQ/8B,OAAQi9B,IACzC,UACQD,EAAKE,aAAa/B,EAAO4B,QAAQE,GAAGtnB,OAAQwlB,EAAO4B,QAAQE,GAAG7gC,KAAM++B,EAAO4B,QAAQE,GAAGE,WAAYhC,EAAO4B,QAAQE,GAAGG,UAAWjC,EAAO4B,QAAQE,GAAGlvB,MAAOotB,EAAO4B,QAAQE,GAAGI,OAAQlC,EAAO4B,QAAQE,GAAGK,QAASnC,EAAO4B,QAAQE,GAAGp+B,KACvO,OAEE,YADA0+B,QAAQC,IAAI,0BAA0BrC,EAAO4B,QAAQE,GAAGlvB,QAE1D,KAMJ,CAEI,GAAIotB,EAAOsC,IACP,UACUT,EAAKE,aAAa/B,EAAOxlB,OAAQ,OAAQwlB,EAAO/+B,KAAM++B,EAAOiC,UAAWjC,EAAOsC,IAAKtC,EAAOkC,OAAQlC,EAAOmC,QAASnC,EAAOt8B,KACpI,OAEI,YADA0+B,QAAQC,IAAI,0BAA0BrC,EAAOptB,QAEjD,CAIJ,GAAIotB,EAAOptB,MACP,UACUivB,EAAKE,aAAa/B,EAAOxlB,OAAQ,SAAUwlB,EAAO/+B,KAAM++B,EAAOiC,UAAWjC,EAAOptB,MAAOotB,EAAOkC,OAAQlC,EAAOmC,QAASnC,EAAOt8B,KACxI,OAEI,YADA0+B,QAAQC,IAAI,0BAA0BrC,EAAOptB,QAEjD,CAGJ,CAEZ,CACH,EA1C6C,EA2ClD,CAEa2vB,6BAA0B,IAAAC,EAAAjhC,KAAA,SAAAm/B,KAAA,kBAC/B8B,EAAKb,YAAYa,EAAKtC,4BAA6B,EADpB,EAEvC,CAEc6B,aAAavnB,EAAyBvZ,EAAyB+gC,EAAoBC,EAAmBrvB,EAAesvB,EAAgBC,EAAiBz+B,EAAe,MAAI,IAAA++B,EAAAlhC,KAAA,SAAAm/B,KAAA,YACnL,MAAMgC,EAAWD,EAAKhF,UAAUkF,qBAAqBnoB,GAErD,GAAKkoB,GAAU79B,OAKf,OAAQ5D,GACJ,IAAK,aAEK,IAAIggC,QAAiB,CAACC,EAASC,KACjC,MAAMyB,EAAUH,EAAK9E,UAAUoD,cAAc,UAC7C6B,EAAQ3hC,KAAO+gC,EACfY,EAAQN,IAAM1vB,EACdgwB,EAAQrwB,GAAK7O,EACbk/B,EAAQxB,OAAS5U,GAAK0U,GAAQ,GAC9B0B,EAAQvB,QAAUC,GAAKH,EAAOG,GAC9BmB,EAAK9E,UAAUkF,YAAYH,EAAS,GAAIE,EAAO,GAEnD,MAEJ,IAAK,eACK,IAAI3B,QAAc,CAACC,EAASC,KAC9B,MAAMyB,EAAUH,EAAK9E,UAAUoD,cAAc,UAC7C6B,EAAQ3hC,KAAO+gC,EACfY,EAAQE,UAAY9G,KAAKppB,GACzBgwB,EAAQrwB,GAAK7O,EAETu+B,GACAQ,EAAK9E,UAAUoF,SAASH,EAASX,GAErCQ,EAAK9E,UAAUkF,YAAYH,EAAS,GAAIE,GAEpCV,GACEC,EAAU,GACZhgC,WAAW,KACTg/B,GAAM,EACLgB,GAGLxzB,OAAOq0B,iBAAiBd,EAAQZ,GAAKJ,MAErCA,GAAO,GAIb,MAEJ,QACIkB,QAAQC,IAAI,wBAAwBphC,UA9CxCmhC,QAAQC,IAAI,0BAA0B7nB,IAgDzC,EApDkL,EAqDvL,CAAChY,SAAAjB,KAAA,mBAAAkB,iBAtPQ+6B,GAAkBh9B,MAAAkC,MAAAlC,MASfyiC,MAAQziC,aAAA,EAAAgC,SAAAjB,KAAA,WAAA2hC,EAAA7Y,IAAA,OATXmT,EAAkBlT,QAAlBkT,EAAkBjT,UAAAC,WAFf,gBAEHgT,CAAkB,KAyPzB,SAAU2F,EAAkBxH,GAC9B,MAAO,IAAMA,EAAYkC,wBACpBO,KAAK,IAAMzC,EAAY8C,cAChC,4EC5OO,IAAM2E,EAAY,MAAnB,MAAOA,EACX/hC,YAA2B6mB,GAAA3mB,KAAA2mB,OAAqB,CAEzCmb,eAAexzB,GACpB,OAAOtO,KAAK2mB,MAAME,IAAW,aAAavY,IAC5C,CAEOyzB,cACL,OAAO/hC,KAAK2mB,MAAME,IAAa,aACjC,CAEOmb,UAAU1zB,GACf,OAAOtO,KAAK2mB,MAAME,IAAkB,aAAavY,WACnD,CAEO2zB,qCAAqC3zB,GAC1C,OAAOtO,KAAK2mB,MAAME,IAA8C,aAAavY,4BAC/E,CAEO4zB,sBAAsB5zB,EAAiB6zB,EAAmBC,GAC/D,OAAOpiC,KAAK2mB,MAAME,IAA8B,aAAavY,uBAA8B,CACzFwN,OAAQ,CAAEqmB,UAAWA,EAAWC,QAASA,IAE7C,CAEOC,8BAA8B/zB,EAAiB6zB,EAAmBC,GACvE,OAAOpiC,KAAK2mB,MAAME,IAAY,aAAavY,+BAAsC,CAC/EwN,OAAQ,CAAEqmB,UAAWA,EAAWC,QAASA,IAE7C,CAKOE,cAAch0B,GAEnB,OAAOtO,KAAK2mB,MAAME,IAAsB,aAAavY,eACvD,CAEOi0B,wBAAwBj0B,EAAiB6zB,EAAiBC,GAC/D,OAAOpiC,KAAK2mB,MAAME,IAAgC,aAAavY,yBAAgC,CAC7FwN,OAAQ,CACNqmB,UAAWA,EAAUK,cACrBJ,QAASA,EAAQI,gBAGvB,CAEOC,kCAAkCn0B,EAAiBo0B,GACxD,OAAO1iC,KAAK2mB,MAAME,IAAgC,aAAavY,yBAAgC,CAC7FwN,OAAQ,CACN6mB,WAAYD,EAAMtxB,aAGxB,CAKOwxB,qBAAqBt0B,GAE1B,OAAOtO,KAAK2mB,MAAME,IAChB,aAAavY,sBAEjB,CAEOuB,UAAUvB,GACf,OAAOtO,KAAK2mB,MAAME,IAAiB,aAAavY,WAClD,CAEOu0B,WACL,OAAO7iC,KAAK2mB,MAAME,IAAiB,uBACrC,CAEOic,qBACLx0B,EACA6zB,EACAC,EACA7R,EAA6B,MAE7B,OACSvwB,KAAK2mB,MAAME,IADD,MAAf0J,QAAuCwS,IAAhBxS,EAEvB,cAAcjiB,sBAA4B6zB,aAAqBC,IAI/D,cAAc9zB,sBAA4B6zB,aAAqBC,iBAAuB7R,IAG5F,CAEOyS,aAAa10B,EAAiB20B,GACnC,OAAOjjC,KAAK2mB,MAAME,IAChB,cAAcvY,0BAAgC20B,EAAMC,oBAAoBD,EAAME,iBAAiBF,EAAMG,qBAAqBH,EAAMI,gBAAgBJ,EAAMvjC,OAE1J,CAEO4jC,wBACLh1B,EACAi1B,EACAC,GAEA,OAAOxjC,KAAK2mB,MAAMgC,KAAmB,cAAcra,SAAgB,CACjEwN,OAAQ,CACNynB,aAAcA,EACdC,eAAgBA,IAItB,CAEOC,mBACLn1B,GAEA,OAAOtO,KAAK2mB,MAAMgC,KAAc,cAAcra,iBAAwB,CAAEo1B,aAAc,QAExF,CAEOC,qBAAqBr1B,EAAiB20B,GAC3C,OAAOjjC,KAAK2mB,MAAME,IAAI,2BAA2BvY,KAAW20B,EAAMW,eAAgB,CAAEF,aAAc,QACpG,CAEOG,0BAA0Bv1B,EAAiB20B,GAChD,OAAOjjC,KAAK2mB,MAAME,IAA4B,qCAAqCvY,KAAW20B,EAAMW,eAAgB,CAAEF,aAAc,QACtI,CAEOI,wBAAwBv1B,EAAwBic,GACrD,OAAOxqB,KAAK2mB,MAAME,IAAc,qBAAqB2D,WAAyB,CAC5E1O,OAAQ,CACNvN,eAAgBA,EAAe6C,aAGrC,CAEO2yB,cAAcz1B,GACnB,OAAOtO,KAAK2mB,MAAME,IAAgB,aAAavY,eACjD,CAEO01B,gBAAgBC,EAAsBC,EAAyBC,EAAoBC,GACxF,OAAOpkC,KAAK2mB,MAAME,IAAiB,oBAAqB,CACtD/K,OAAQ,CACNmoB,aAAcA,EACdC,gBAAiBA,EACjBC,WAAYA,EACZC,cAAeA,IAGrB,CAEOC,UAAU5Y,GACb,OAAOzrB,KAAK2mB,MAAMgC,KAAc,iBAAkB8C,EACtD,CAKO6Y,qBAAqBh2B,GAC1B,OAAOtO,KAAK2mB,MAAME,IAAuB,cAAcvY,sBACzD,CAEOi2B,uBAAuBC,EAAiBl2B,GAC7C,OAAOtO,KAAK2mB,MAAMgC,KAAW,cAAcra,sBAA6B,CAACk2B,WAC3E,CAEOC,uBAAuBn2B,EAAiBo2B,GAC7C,OAAO1kC,KAAK2mB,MAAMuB,OAAa,cAAc5Z,uBAA6Bo2B,IAC5E,CAEOC,uBAAuBr2B,EAAiBo2B,EAA0B7S,GACvE,OAAO7xB,KAAK2mB,MAAMkC,IAAY,cAAcva,uBAA6Bo2B,IAAoB7S,EAC/F,CAMO+S,oBAAoBt2B,EAAiBu2B,GAC1C,OAAO7kC,KAAK2mB,MAAME,IAAuB,cAAcvY,uBAA6Bu2B,IACtF,CAEOC,uBAAuBx2B,EAAiBo2B,EAA0BK,GACvE,OAAO/kC,KAAK2mB,MAAMgC,KAAwB,cAAcra,uBAA6Bo2B,gBAAgCK,EACvH,CAEOC,uBAAuB12B,EAAiBo2B,EAA0BK,GACvE,OAAO/kC,KAAK2mB,MAAMuB,OAAa,cAAc5Z,uBAA6Bo2B,gBAAgC,CAAC5oB,OAAQ,CAAEmpB,SAAUF,IACjI,CAAC9jC,SAAAjB,KAAA,mBAAAkB,iBA1LU2gC,GAAY5iC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAklC,EAAApc,IAAA,OAAZ+Y,EAAY9Y,QAAZ8Y,EAAY7Y,UAAAC,WAFX,gBAED4Y,CAAY,0FCblB,IAAMsD,EAAiB,MAAxB,MAAOA,EAEXrlC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEJye,iBACE,OAAOplC,KAAK2mB,MAAME,IAA2B,6BAC/C,CAEAwe,wBACE,OAAOrlC,KAAK2mB,MAAME,IAAkC,qCACtD,CAEAye,uBAAuBC,GACrB,OAAOvlC,KAAK2mB,MAAMkC,IAAU,qCAAsC0c,EACpE,CAEAC,yBACE,OAAOxlC,KAAK2mB,MAAME,IAAmC,sCACvD,CAEAhX,YACE,OAAO7P,KAAK2mB,MAAME,IAAuB,0BAC3C,CAEA4e,iBAAiBF,GAAoB,GACnC,OAAOvlC,KAAK2mB,MAAME,IAAoB0e,EAAW,6BAA+B,oBAClF,CAEAG,gBAAgBC,GACd,OAAO3lC,KAAK2mB,MAAMgC,KAAqB,oBAAqBgd,EAC9D,CAEAC,kBAAkBC,GAEhB,OAAO7lC,KAAK2mB,MAAMkC,IAAY,oBAAqBgd,EACrD,CAGOC,mBAAmBC,GACxB,OAAO/lC,KAAK2mB,MAAME,IAAuB,yBAAyBkf,IACpE,CAGOC,oBAAoBC,GACzBA,SAAkBA,EAAgB70B,WAC3BpR,KAAK2mB,MAAME,IAAuB,yBAA0B,CAAE/K,OAAQ,CAAEmqB,qBAAqBzlC,QAClGkQ,KAAIw1B,GAAWA,EAAQC,KAAK,CAACC,EAAGC,IAAeD,EAAEpe,MAAQqe,EAAEre,QAE/D,CAEOse,4BAA4Bh4B,EAAiBi4B,EAAoBC,GAEtE,OAAOxmC,KAAK2mB,MAAME,IAAwB,gBAAgBvY,sBAA6B,CAAEwN,OAAQ,CAAEyqB,YAAWC,oBAChH,CAEOC,6BAA6BC,GAElC,OAAO1mC,KAAK2mB,MAAMkC,IADN,wCACwB6d,EAAO,CAAEnY,QAAS,IAAIoY,KAAY,CAAE,eAAgB,sBAC1F,CAEOC,iBAAiBt4B,EAAiBy3B,GAEvC,OAAO/lC,KAAK2mB,MAAMuB,OADN,kBAAkB5Z,KAAWy3B,IACF,CAAExX,QAAS,IAAIoY,KAAY,CAAE,eAAgB,sBACtF,CAGOE,+BAA+BC,GACpC,OAAO9mC,KAAK2mB,MAAMgC,KAA4B,6BAA8Bme,EAC9E,CAGOC,iBAAiBz4B,EAAiB04B,GACvC,OAAOhnC,KAAK2mB,MAAMgC,KAAW,gBAAgBra,sBAA6B04B,EAC5E,CAEOC,eAAe34B,EAAiB04B,GACrC,OAAOhnC,KAAK2mB,MAAMgC,KAAW,gBAAgBra,iCAAwC04B,EACvF,CAAC/lC,SAAAjB,KAAA,mBAAAkB,iBA/EUikC,GAAiBlmC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAoB,EAAA0nB,IAAA,OAAjBqc,EAAiBpc,QAAjBoc,EAAiBnc,UAAAC,WAFhB,gBAEDkc,CAAiB,2oBCNvB,IAAM+B,EAA4B,MAAnC,MAAOA,GACTpnC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAGGwgB,yBAAyB54B,EAAwB64B,EAAsBjF,GAAmBC,IAC7F,OAAOpiC,KAAK2mB,MAAME,IAA6B,qBAAqBtY,kBAA+B64B,IAAgB,CAC/GtrB,OAAQ,CACJqmB,UAAWA,GAAUkF,OAAO,uBAC5BjF,QAASA,GAAQiF,OAAO,yBAGpC,CAACpmC,SAAAjB,KAAA,mBAAAkB,iBAbQgmC,IAA4BjoC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAA5Boe,GAA4Bne,QAA5Bme,GAA4Ble,UAAAC,WAFzB,gBAEHie,EAA4B,KCC5BI,EAAiB,MAAxB,MAAOA,GACXxnC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,MACL,OAAO7mB,KAAK2mB,MAAME,IAAkB,2BACtC,CAEO0gB,KAAKC,GACV,OAAOA,EAAWvzB,GACdjU,KAAK2mB,MAAMkC,IAAY,4BAA4B2e,EAAWvzB,KAAMuzB,GACpExnC,KAAK2mB,MAAMgC,KAAa,2BAA4B6e,EAC1D,CAEOtf,OAAOuf,EAAsBC,GAClC,OAAuB3E,MAAnB2E,GAAmD,MAAnBA,KAA2BA,EAAkB,GAC1E1nC,KAAK2mB,MAAMuB,OAAiC,4BAA4Buf,KAAgBC,IACjG,CAACzmC,SAAAjB,KAAA,mBAAAkB,iBAlBUomC,IAAiBroC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAjBwe,GAAiBve,QAAjBue,GAAiBte,UAAAC,WAFhB,gBAEDqe,EAAiB,KCDjBK,EAAiB,MAAxB,MAAOA,GAEX7nC,YACUowB,GAAAlwB,KAAAkwB,MACN,CAEJ0X,SACE,OAAO5nC,KAAKkwB,KAAKrJ,IAAkB,wBACrC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARUymC,IAAiB1oC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAjB6e,GAAiB5e,QAAjB4e,GAAiB3e,UAAAC,WAFhB,gBAED0e,EAAiB,KCAjBE,EAAgB,MAAvB,MAAOA,GAEX/nC,YACU6mB,GAAA3mB,KAAA2mB,OACP,CAEHihB,SACE,OAAO5nC,KAAK2mB,MAAME,IAAiB,uBACrC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARU2mC,IAAgB5oC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhB+e,GAAgB9e,QAAhB8e,GAAgB7e,UAAAC,WAFf,gBAED4e,EAAgB,+BCKtB,IAAMC,EAAoB,MAA3B,MAAOA,GACXhoC,YACU6mB,EACAzI,GADAle,KAAA2mB,QACA3mB,KAAAke,cACN,CAEG2I,MACL,OAAO7mB,KAAK2mB,MAAME,IAAqB,qBACzC,CAEO0gB,KAAKQ,GACV,OAAOA,EAAc9zB,GACjBjU,KAAK2mB,MAAMkC,IAAmB,sBAAsBkf,EAAc9zB,KAAM8zB,GACxE/nC,KAAK2mB,MAAMgC,KAAoB,qBAAsBof,EAC3D,CAEO7f,OAAO8f,EAAyBC,GACrC,OAA0BlF,MAAtBkF,GAAyD,MAAtBA,KAA8BA,EAAqB,GACnFjoC,KAAK2mB,MAAMuB,OAAoC,sBAAsB8f,KAAmBC,IACjG,CAEOC,SAASF,GACd,OACIhoC,KAAK2mB,MAAME,IADRmhB,EACiC,sBAAsBA,UACtB,2BAC1C,CAEOG,SAASH,EAAyBI,GACvC,OAAOJ,EACHhoC,KAAK2mB,MAAMkC,IAAuB,mBAAmBmf,WAAyBI,EAAkBn0B,KAAMm0B,GACtGpoC,KAAK2mB,MAAMgC,KAAwB,mBAAmBqf,UAAyBI,EACrF,CAEOC,WAAWL,EAAyBM,GACzC,OAAOtoC,KAAK2mB,MAAMuB,OAAO,mBAAmB8f,WAAyBM,KAAuB9nC,QAC1FkQ,KAAIqc,IAAYib,GAEpB,CAAC/mC,SAAAjB,KAAA,mBAAAkB,iBArCU4mC,IAAoB7oC,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAApBgf,GAAoB/e,QAApB+e,GAAoB9e,UAAAC,WAFnB,gBAED6e,EAAoB,KCLpBS,EAAkB,MAAzB,MAAOA,GAEXzoC,YACUowB,GAAAlwB,KAAAkwB,MACP,CAEH0X,SACE,OAAO5nC,KAAKkwB,KAAKrJ,IAAmB,mBACtC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARUqnC,IAAkBtpC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlByf,GAAkBxf,QAAlBwf,GAAkBvf,UAAAC,WAFjB,gBAEDsf,EAAkB,KCAlBC,EAAgB,MAAvB,MAAOA,GACT1oC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEJihB,SACI,OAAO5nC,KAAK2mB,MAAME,IAAiB,iBACvC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPQsnC,IAAgBvpC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhB0f,GAAgBzf,QAAhByf,GAAgBxf,UAAAC,WAFf,gBAEDuf,EAAgB,+BCGtB,IAAMC,EAAW,MAAlB,MAAOA,GACX3oC,YACU6mB,EACA/S,GADA5T,KAAA2mB,QACA3mB,KAAA4T,qBACN,CAEJinB,cAAcG,EAAqB0N,GAAwB,GACzB1oC,KAAK2mB,MAAME,IAAU,GAAG7mB,KAAK4T,oBAAoBiZ,8BAA+B,CAAE0B,QAAS,CAAE,gBAAiB,cAExI/tB,QACJ8d,KAAK,IACL5d,UAAUioC,KACV,MAAMhO,GAAkC,CACtCK,YAAaA,EACbF,aAAc6N,GAAK7N,aACnBC,KAAM4N,GAAK5N,MAGb,IAAIzwB,GAActK,KAAK4T,oBAAoBgqB,eACvC,iGACkB59B,KAAK4T,oBAAoBoqB,iBAC3C,6BACY4K,KAAK9pB,KAAK+pB,UAAUlO,KAChC,+FAGqBgO,GAAKG,cAC1B,8BAEAJ,IACFp+B,IAAO,iBAETA,IAAO,iBAAmBtK,KAAK4T,oBAAoBkqB,oBAEnD1wB,OAAOqvB,SAASsM,KAAOz+B,IAE3B,CAEA0+B,cAAcC,GACZ,OAAOjpC,KAAK2mB,MAAME,IAAW,GAAG7mB,KAAK4T,oBAAoBiZ,qCAAqCoc,IAChG,CAEAC,eAAexO,EAAoBI,EAAsBC,IACvD,MAAMxM,GAAU,IAAIoY,KAAY,CAAE,eAAgB,qBAC5Cje,GAA4B,CAChCgS,WAAcA,EACdI,aAAgBA,EAChBC,KAAQA,IAGV,OAAO/6B,KAAK2mB,MAAMgC,KAAY,GAAG3oB,KAAK4T,oBAAoBiZ,qCAAsCnE,GAAM,CAAE6F,QAASA,GAASmV,aAAc,QAC1I,CAEA7V,aAAaA,GACX,MAAMU,EAAU,IAAIoY,KAAY,CAAE,eAAgB,qBAC5Cje,GAAO,CAAEmF,aAAgBA,GAE/B,OAAO7tB,KAAK2mB,MAAMgC,KAAY,GAAG3oB,KAAK4T,oBAAoBiZ,mCAAoCnE,GAAM,CAAE6F,QAASA,EAASmV,aAAc,QACxI,CAEAyF,YAAYlb,EAAqBJ,GAC/B,MAAMU,GAAU,IAAIoY,KAAY,CAAE,eAAgB,qBAC5Cje,GAAO,CAAEuF,YAAeA,EAAaJ,aAAgBA,GAE3D,OAAO7tB,KAAK2mB,MAAMgC,KAAc,GAAG3oB,KAAK4T,oBAAoBiZ,kCAAmCnE,GAAM,CAAE6F,QAASA,GAASmV,aAAc,QACzI,CAEA0F,OAAOpO,GACL5tB,OAAOqvB,SAASsM,KAAO/N,GAAeh7B,KAAK4T,oBAAoBsqB,cACjE,CAACj9B,SAAAjB,KAAA,mBAAAkB,iBArEUunC,IAAWxpC,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAX2f,GAAW1f,QAAX0f,GAAWzf,UAAAC,WAFV,gBAEDwf,EAAW,KCHXY,EAAsB,MAA7B,MAAOA,GACXvpC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,MACL,OAAO7mB,KAAK2mB,MAAME,IAAwB,wBAC5C,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPUmoC,IAAsBpqC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAtBugB,GAAsBtgB,QAAtBsgB,GAAsBrgB,UAAAC,WAFrB,gBAEDogB,EAAsB,KCEtBC,EAAmB,MAA1B,MAAOA,GACXxpC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,MACL,OAAO7mB,KAAK2mB,MAAME,IAAoB,oBACxC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPUooC,IAAmBrqC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnBwgB,GAAmBvgB,QAAnBugB,GAAmBtgB,UAAAC,WAFlB,gBAEDqgB,EAAmB,KCGnBC,EAAqB,MAA5B,MAAOA,GACXzpC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,IAAI2iB,GACT,OAAOxpC,KAAK2mB,MAAME,IAAsB,eAAgB,CAAE/K,OAAQ,CAAE0tB,eAAgB,GAAGA,MACzF,CAEOC,OAAO1iB,GACZ,OAAO/mB,KAAK2mB,MAAMkC,IAAY,eAAgB9B,EAChD,CAEO8b,WACL,OAAO7iC,KAAK2mB,MAAME,IAAoB,oBACxC,CAEO6iB,SAASC,GACd,OAAO3pC,KAAK2mB,MAAME,IAAW,mDAAmD8iB,IAClF,CAAC1oC,SAAAjB,KAAA,mBAAAkB,iBAnBUqoC,IAAqBtqC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAArBygB,GAAqBxgB,QAArBwgB,GAAqBvgB,UAAAC,WAFpB,gBAEDsgB,EAAqB,KCLrBK,EAAc,MAArB,MAAOA,GAET9pC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAe,cACrC,CAEOgjB,kBACH,OAAO7pC,KAAK2mB,MAAME,IAAe,kBACrC,CAEO0gB,KAAKuC,GACR,OAAOA,EAAQ71B,GACTjU,KAAK2mB,MAAMkC,IAAY,eAAeihB,EAAQ71B,KAAM61B,GACpD9pC,KAAK2mB,MAAMgC,KAAa,cAAemhB,EACjD,CAAC7oC,SAAAjB,KAAA,mBAAAkB,iBAlBQ0oC,IAAc3qC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAd8gB,GAAc7gB,QAAd6gB,GAAc5gB,UAAAC,WAFb,gBAED2gB,EAAc,KCEdG,EAAmB,MAA1B,MAAOA,GAEXjqC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGqjB,uBACH,OAAOhqC,KAAK2mB,MAAME,IAAwB,eAAgB,GAE9D,CAEOojB,qBAAqBC,GAC1B,OAAOlqC,KAAK2mB,MAAMkC,IAAa,qBAAsBqhB,EACvD,CAACjpC,SAAAjB,KAAA,mBAAAkB,iBAbU6oC,IAAmB9qC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnBihB,GAAmBhhB,QAAnBghB,GAAmB/gB,UAAAC,WAFhB,gBAEH8gB,EAAmB,KCFnBI,EAAc,MAArB,MAAOA,GAETrqC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAe,gBACrC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQipC,IAAclrC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAdqhB,GAAcphB,QAAdohB,GAAcnhB,UAAAC,WAFb,gBAEDkhB,EAAc,KCAdC,EAAe,MAAtB,MAAOA,GACXtqC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGihB,SAEL,OAAO5nC,KAAK2mB,MAAME,IAAgB,sBACpC,CAEOA,MAEL,OAAO7mB,KAAK2mB,MAAME,IAAc,eAClC,CAEOwjB,yBACL,OAAOrqC,KAAK2mB,MAAME,IAAmC,oCACvD,CAEOyjB,kBACL,OAAOtqC,KAAK2mB,MAAME,IAAmB,6BACvC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBArBUkpC,IAAenrC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAfshB,GAAerhB,QAAfqhB,GAAephB,UAAAC,WAFd,gBAEDmhB,EAAe,cCRrB,MAAMG,EAAc,CACvB,EAAG,CAAC,EAAG,GAAI,IAAK,IAAK,KACrB,EAAG,CAAC,KACJ,EAAG,CAAC,GACJ,EAAG,CAAC,GACJ,EAAG,CAAC,KACJ,EAAG,CAAC,KACJ,EAAG,CAAC,GACJ,EAAG,CAAC,KACJ,EAAG,CAAC,GACJ,GAAI,CAAC,IACL,GAAI,CAAC,IAAK,KACV,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,KACT,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACvC,GAAI,CAAC,GAAI,IAAK,IAAK,KACnB,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,KACT,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,IAAK,KACd,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IAAK,KACV,GAAI,CAAC,IACL,GAAI,CAAC,KACL,GAAI,CAAC,GAAI,GAAI,EAAG,IAAK,KACrB,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,KACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,KACT,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,KACT,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,GAAI,EAAG,KAChB,GAAI,CAAC,IAAK,IAAK,IAAK,IACpB,GAAI,CAAC,KACL,GAAI,CAAC,IACL,GAAI,CAAC,IACL,GAAI,CAAC,IAAK,KACV,GAAI,CAAC,qBCrDF,IAAMC,EAAgB,MAAvB,MAAOA,GACT1qC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEJihB,SACI,OAAO5nC,KAAK2mB,MAAME,IAAiB,kBAAkBrmB,QACjDkQ,KAAI8O,IACF,MAAMirB,KAAgBC,aAAUlrB,GAChCirB,SAAcl9B,QAAQwD,KAClBA,GAAUoP,MAAM5S,QAAQwS,KACpBA,GAAK7P,UAAYq6B,EAAYxqB,GAAK/O,KAAO,IAC5C,GAEEy5B,IAGjB,CAACxpC,SAAAjB,KAAA,mBAAAkB,iBAjBQspC,IAAgBvrC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhB0hB,GAAgBzhB,QAAhByhB,GAAgBxhB,UAAAC,WAFf,gBAEDuhB,EAAgB,oBCLtB,IAAMG,EAAa,MAApB,MAAOA,GACT7qC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEJihB,SACI,OAAO5nC,KAAK2mB,MAAME,IAAc,cACpC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPQypC,IAAa1rC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAb6hB,GAAa5hB,QAAb4hB,GAAa3hB,UAAAC,WAFZ,gBAED0hB,EAAa,KCMbC,EAAwB,MAA/B,MAAOA,GAET9qC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAOGkkB,SAASv8B,GACZ,OAAOtO,KAAK2mB,MAAME,IAAwB,cAAcvY,iBAC5D,CAOO4Z,OAAO5Z,EAAiBw8B,GAC3B,OAAO9qC,KAAK2mB,MAAMuB,OAAgB,cAAc5Z,kBAAwBw8B,IAC5E,CAQOvD,KAAKj5B,EAAiBw8B,EAAqBC,IAC9C,OAAO/qC,KAAK2mB,MAAMkC,IAAU,cAAcva,kBAAwBw8B,IAAeC,GACrF,CAQOC,OAAO18B,EAAiBy8B,GAC3B,OAAO/qC,KAAK2mB,MAAMgC,KAAa,cAAcra,iBAAwBy8B,EACzE,CAQOE,gBAAgBC,GACnB,OAAOlrC,KAAK2mB,MAAMgC,KAA8B,4BAA6BuiB,EACjF,CAOOC,gBAAgBC,GACnB,OAAOprC,KAAK2mB,MAAMgC,KAAc,4BAA6ByiB,EACjE,CAMOC,qBACH,OAAOrrC,KAAK2mB,MAAME,IAA6B,8BACnD,CAMOykB,eACH,OAAOtrC,KAAK2mB,MAAME,IAAuB,8BAC7C,CAMO0kB,iBACH,OAAOvrC,KAAK2mB,MAAME,IAAyB,0BAC/C,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBArFQ0pC,IAAwB3rC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAxB8hB,GAAwB7hB,QAAxB6hB,GAAwB5hB,UAAAC,WAFrB,gBAEH2hB,EAAwB,KCNxBY,EAAyB,MAAhC,MAAOA,GAET1rC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,IACL4kB,EACAC,EACAC,IAEE,OAAO3rC,KAAK2mB,MAAME,IAA0B,4CAA4C4kB,cAAsBC,gBAAuBC,KACzI,CAAC1qC,SAAAjB,KAAA,mBAAAkB,iBAZQsqC,IAAyBvsC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAzB0iB,GAAyBziB,QAAzByiB,GAAyBxiB,UAAAC,WAFxB,gBAEDuiB,EAAyB,KCDtC,MAAMI,EAAc,CAClBrd,QAAS,IAAIoY,KAAY,CACvB,eAAgB,sBAMb,IAAMkF,EAAU,MAAjB,MAAOA,GAEX/rC,YACUowB,GAAAlwB,KAAAkwB,MACN,CAGJ4b,YAAYx9B,GACV,OAAOtO,KAAKkwB,KAAKrJ,IAAc,WAAWvY,aAC5C,CAEAy9B,mBACE,OAAO/rC,KAAKkwB,KAAKrJ,IAAoB,yBACvC,CAEAmlB,qBAAqB19B,GACnB,OAAOtO,KAAKkwB,KAAKrJ,IAAmC,WAAWvY,uBACjE,CAEA29B,eAAe39B,EAAiB49B,GAC9B,OAAOlsC,KAAKkwB,KAAKvH,KAAc,WAAWra,aAAoB49B,EAChE,CAEAC,aAAa79B,EAAiB49B,GAC5B,OAAOlsC,KAAKkwB,KAAKrH,IAAa,WAAWva,aAAoB49B,EAC/D,CAEAE,eAAe99B,EAAiB+9B,GAC9B,OAAOrsC,KAAKkwB,KAAKhI,OAAgB,WAAW5Z,cAAoB+9B,IAClE,CAGAC,eAAeh+B,GACb,OAAOtO,KAAKkwB,KAAKrJ,IAAuB,WAAWvY,eACrD,CAEAi+B,4BAA4Bj+B,EAAiBk+B,GAC3C,OAAOxsC,KAAKkwB,KAAKvH,KAAc,WAAWra,eAAsBk+B,EAClE,CAEAC,eAAen+B,EAAiBo+B,GAC9B,OAAO1sC,KAAKkwB,KAAKrH,IAAuB,WAAWva,eAAsBo+B,EAC3E,CAEAC,+BAA+Br+B,EAAiBo+B,EAA8BE,GAA0BC,IACtG,OAAO7sC,KAAKkwB,KAAKrH,IAAuB,WAAWva,gBAAsBo+B,sBAAyCE,KAAoBC,GAAejB,EACvJ,CAEAkB,oBAAoBx+B,EAAiBhB,GACnC,OAAOtN,KAAKkwB,KAAKrH,IAAuB,WAAWva,qBAA4BhB,EACjF,CAEAy/B,oBAAoBz+B,EAAiBd,GACnC,OAAOxN,KAAKkwB,KAAKvH,KAAU,WAAWra,2BAAkCd,EAC1E,CAGAw/B,0BACE,OAAOhtC,KAAKkwB,KAAKrJ,IAA0B,gCAC7C,CAGAomB,mBACE,OAAOjtC,KAAKkwB,KAAKrJ,IAAqB,sBACxC,CAGAqmB,eAAe3+B,EAAwBD,GACrC,OAAKA,EAGItO,KAAKkwB,KAAKrJ,IAAuB,WAAWtY,aAA2B,CAAEuN,OAAQ,CAAExN,aAFnFtO,KAAKkwB,KAAKrJ,IAAuB,WAAWtY,aAGvD,CAACtN,SAAAjB,KAAA,mBAAAkB,iBAxEU2qC,IAAU5sC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAV+iB,GAAU9iB,QAAV8iB,GAAU7iB,UAAAC,WAFT,gBAED4iB,EAAU,KCHVsB,GAAoB,MAA3B,MAAOA,GACXrtC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEJymB,wBACE,OAAOptC,KAAK2mB,MAAME,IAAmD,oCACvE,CAEAwmB,kCACE,OAAOrtC,KAAK2mB,MAAME,IAAqB,oCACzC,CAEAymB,eAAeC,GACb,OAAOvtC,KAAK2mB,MACTE,IACC,2DAA2D0mB,KAE5D/sC,QACCkQ,KAAI88B,QACCA,EACH1vB,OAAQyvB,KAGhB,CAEAE,eAAeC,GAEb,OAAiC,IAA7BA,EAAOrxB,WAAW/Y,SACpBoqC,EAAOxxB,MAAQ,IAGVlc,KAAK2mB,MAAMkC,IAAI,oBAAqB6kB,EAC7C,CAACzsC,SAAAjB,KAAA,mBAAAkB,iBAjCUisC,IAAoBluC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAApBqkB,GAAoBpkB,QAApBokB,GAAoBnkB,UAAAC,WAFnB,gBAEDkkB,EAAoB,KCJpBQ,EAAkB,MAAzB,MAAOA,GACT7tC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGinB,eAAer/B,EAAwB4zB,EAA0BC,IACpE,OAAOpiC,KAAK2mB,MAAME,IAAkC,qBAAqBtY,gBAA8B,CACnGuN,OAAQ,CACJqmB,UAAWA,EAAU0L,KAAI,GAAMxG,SAC/BjF,QAASA,GAAQyL,KAAI,GAAMxG,WAGvC,CAEOyG,0BACH,OAAO9tC,KAAK2mB,MAAME,IAAkC,yCACxD,CAEOknB,gBAAmB9rC,EAAc6Z,GACpC,OAAO9b,KAAK2mB,MAAMgC,KAAU,IAAI1mB,IAAQ6Z,EAC5C,CAAC7a,SAAAjB,KAAA,mBAAAkB,iBApBQysC,IAAkB1uC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlB6kB,GAAkB5kB,QAAlB4kB,GAAkB3kB,UAAAC,WAFf,gBAEH0kB,EAAkB,KCAlBK,EAAgB,MAAvB,MAAOA,GAETluC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAiB,iBACvC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQ8sC,IAAgB/uC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhBklB,GAAgBjlB,QAAhBilB,GAAgBhlB,UAAAC,WAFf,gBAED+kB,EAAgB,KCAhBC,EAAe,MAAtB,MAAOA,GAETnuC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,IAAItY,GACP,OAAOvO,KAAK2mB,MAAME,IAAgB,gBAAiB,CAC/C/K,OAAQ,CACJvN,mBAGZ,CAEOg5B,KAAK2G,GACR,OAAOA,EAASj6B,GACVjU,KAAK2mB,MAAMkC,IAAY,iBAAiBqlB,EAASj6B,KAAMi6B,GACvDluC,KAAK2mB,MAAMgC,KAAa,gBAAiBulB,EACnD,CAEOhmB,OAAOimB,GACV,OAAOnuC,KAAK2mB,MAAMuB,OAAa,iBAAiBimB,IACpD,CAACltC,SAAAjB,KAAA,mBAAAkB,iBAtBQ+sC,IAAehvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAfmlB,GAAellB,QAAfklB,GAAejlB,UAAAC,WAFd,gBAEDglB,EAAe,KCAfG,EAAkB,MAAzB,MAAOA,GAEXtuC,YACUowB,GAAAlwB,KAAAkwB,MACP,CAEH0X,SACE,OAAO5nC,KAAKkwB,KAAKrJ,IAAmB,sBACtC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARUktC,IAAkBnvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlBslB,GAAkBrlB,QAAlBqlB,GAAkBplB,UAAAC,WAFjB,gBAEDmlB,EAAkB,KCAlBC,EAAqB,MAA5B,MAAOA,GAEXvuC,YACUowB,GAAAlwB,KAAAkwB,MACP,CAEH0X,SACE,OAAO5nC,KAAKkwB,KAAKrJ,IAAsB,yBACzC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARUmtC,IAAqBpvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAArBulB,GAAqBtlB,QAArBslB,GAAqBrlB,UAAAC,WAFpB,gBAEDolB,EAAqB,KCArBC,EAAW,MAAlB,MAAOA,GAETxuC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAY,YAClC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQotC,IAAWrvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAXwlB,GAAWvlB,QAAXulB,GAAWtlB,UAAAC,WAFV,gBAEDqlB,EAAW,KCAXC,EAAe,MAAtB,MAAOA,GAEXzuC,YACUowB,GAAAlwB,KAAAkwB,MACP,CAEH0X,SACE,OAAO5nC,KAAKkwB,KAAKrJ,IAAgB,iBACnC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARUqtC,IAAetvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAfylB,GAAexlB,QAAfwlB,GAAevlB,UAAAC,WAFd,gBAEDslB,EAAe,KCCfC,EAAe,MAAtB,MAAOA,GACT1uC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEG8nB,mBAAmBngC,EAAiB6zB,EAAgBC,IACvD,OAAOpiC,KAAK2mB,MAAME,IAA0B,uBAAuBvY,IAAW,CAC1EwN,OAAQ,CACJqmB,UAAWA,EAAU/wB,WACrBgxB,QAASA,GAAQhxB,aAG7B,CAACnQ,SAAAjB,KAAA,mBAAAkB,iBAZQstC,IAAevvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAf0lB,GAAezlB,QAAfylB,GAAexlB,UAAAC,WAHZ,gBAGHulB,EAAe,KCCfE,GAAkB,MAAzB,MAAOA,GACT5uC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGgoB,uBACH,OAAO3uC,KAAK2mB,MAAME,IAAwB,8BAC9C,CAEO+nB,eAAetgC,GAClB,OAAOtO,KAAK2mB,MAAME,IAAsB,oBAAoBvY,IAChE,CAEOugC,wBAAwBvgC,EAAiBwgC,EAA2C1L,GAA6BpwB,IAUpH,OAAOhT,KAAK2mB,MAAMgC,KAAmC,oBAAoBra,cAR7B,CACxC2F,GAAI,EACJ86B,mBAAoB3L,GAAUnvB,GAC9B+6B,sBAAuB,KACvBh8B,QACA87B,qCAIR,CAEOG,2BAA2B3gC,EAAiB4gC,GAE/C,OAAOlvC,KAAK2mB,MAAMuB,OAAqC,oBAAoB5Z,eAAqB4gC,IACpG,CAEOC,gBAAgBx4B,EAA2By4B,GAE9CA,SAAYC,kBAAoB14B,EAEzB3W,KAAK2mB,MAAMkC,IAAsB,oBAAoBumB,EAAYxvB,UAAWwvB,EACvF,CAACnuC,SAAAjB,KAAA,mBAAAkB,iBApCQwtC,IAAkBzvC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlB4lB,GAAkB3lB,QAAlB2lB,GAAkB1lB,UAAAC,WAFjB,gBAEDylB,EAAkB,KCFlBY,GAAuB,MAA9B,MAAOA,GACTxvC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEJihB,SACI,OAAO5nC,KAAK2mB,MAAME,IAAwB,yBAC9C,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPQouC,IAAuBrwC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAvBwmB,GAAuBvmB,QAAvBumB,GAAuBtmB,UAAAC,WAFtB,gBAEDqmB,EAAuB,KCKvBC,GAAsB,MAA7B,MAAOA,GAEXzvC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEJ6oB,UACE,OAAOxvC,KAAK2mB,MAAME,IAA4B,uBAChD,CAEA4oB,cAAcvM,GACZ,OAAOljC,KAAK2mB,MAAME,IAA0B,6BAA6Bqc,IAC3E,CAEAwM,KAAK/4B,GACH,IAAImF,EAAS,IAAI0U,KAEjB,OAAI7Z,IACFmF,EAASA,EAAO6zB,OAAO,oBAAqBh5B,EAAkBvF,aAEzDpR,KAAK2mB,MAAME,IAAmC,8BAA+B,CAAE/K,UACxF,CAEA8zB,OAAOC,EAAa3M,EAAsB4M,IACxC,OAAO9vC,KAAK2mB,MAAMgC,KAAW,8BAA+B,CAAEmnB,cAAYD,OAAM3M,gBAAgB,CAC9FpnB,OAAQ,IAEZ,CAEAi0B,OAAOp5B,GACL,OAAO3W,KAAK2mB,MAAMgC,KAAW,8BAA+BhS,EAC9D,CAEAq5B,QAAQr5B,GACN,OAAO3W,KAAK2mB,MAAMgC,KAAW,+BAAgChS,EAC/D,CAAC1V,SAAAjB,KAAA,mBAAAkB,iBAnCUquC,IAAsBtwC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAtBymB,GAAsBxmB,QAAtBwmB,GAAsBvmB,UAAAC,WAFrB,gBAEDsmB,EAAsB,KCLtBU,GAAuB,MAA9B,MAAOA,GACTnwC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGupB,6BACH,OAAOlwC,KAAK2mB,MAAME,IAA+B,8BACrD,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPQ+uC,IAAuBhxC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAvBmnB,GAAuBlnB,QAAvBknB,GAAuBjnB,UAAAC,WAFpB,gBAEHgnB,EAAuB,KCCvBE,EAAc,MAArB,MAAOA,GACTrwC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,IAAIvY,EAAiB6zB,EAAiBC,IACzC,MAAMgO,GAAM,IAAI5iB,KAAK4U,GAAQ7F,UAA0C,IAA9B6F,GAAQzT,qBACjD,OAAO3uB,KAAK2mB,MAAME,IAAuB,cAAcvY,eAAsB,CACzEwN,OAAQ,CACJqmB,UAAWA,EAAUK,cACrBJ,QAASgO,GAAI5N,gBAGzB,CAEOzjB,MAAMzQ,EAAiB+hC,GAC1B,OAAOrwC,KAAK2mB,MAAME,IAAwB,cAAcvY,aAAmB+hC,KAAS7vC,QAChFkQ,KAAIqc,SAEOA,GACHnN,QAAStR,EACTgiC,MAAOD,KAIvB,CAACpvC,SAAAjB,KAAA,mBAAAkB,iBAzBQivC,IAAclxC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAdqnB,GAAcpnB,QAAdonB,GAAcnnB,UAAAC,WAFX,gBAEHknB,EAAc,KCDdI,EAAoB,MAA3B,MAAOA,GAEXzwC,YACUowB,GAAAlwB,KAAAkwB,MACP,CAEIsgB,mBACL,OAAOxwC,KAAKkwB,KAAKrJ,IAAuB,yCAC1C,CAEO4pB,qBAAqBC,GAE1B,OAAO1wC,KAAKkwB,KAAKhI,OADL,oCAAoCwoB,IAElD,CAACzvC,SAAAjB,KAAA,mBAAAkB,iBAbUqvC,IAAoBtxC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAApBynB,GAAoBxnB,QAApBwnB,GAAoBvnB,UAAAC,WAFnB,gBAEDsnB,EAAoB,KCCpBI,EAAmB,MAA1B,MAAOA,GACX7wC,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEJob,cACE,OAAO/hC,KAAK2mB,MAAME,IAAoB,oBACxC,CAEAmb,UAAUzzB,GACR,OAAOvO,KAAK2mB,MAAME,IAAyB,qBAAqBtY,WAClE,CAEA+zB,cAAc/zB,GACZ,OAAOvO,KAAK2mB,MAAME,IAAqC,qBAAqBtY,eAC9E,CAEAqiC,mBAAmBriC,EAAwBsiC,GACzCA,SAAkBA,EAAgBz/B,WAC3BpR,KAAK2mB,MAAME,IAAwB,qBAAqBtY,qBAAmC,CAAEuN,OAAQ,CAAE+0B,oBAChH,CAEAC,iCAAiCviC,EAAwBy5B,EAAyB+I,IAChFA,UAAmBA,GAAiB3/B,WAE7BpR,KAAK2mB,MAAME,IAChB,qBAAqBtY,gBAA6By5B,IAClD,CAAElsB,OAAQ,CAAEi1B,sBAEhB,CACAC,yBACEC,EACAjJ,EACAkJ,GACAC,GACAC,IAEA,OAAOpxC,KAAK2mB,MAAMgC,KAAc,qBAAqBsoB,gBAA4BjJ,IAAmB,CAChGkJ,QAASA,GACTC,oBAAqBA,GACrBC,aAAcA,GAAahgC,YAEjC,CAEAvB,UAAUtB,GACR,OAAOvO,KAAK2mB,MAAME,IAA0B,qBAAqBtY,WACnE,CAACtN,SAAAjB,KAAA,mBAAAkB,iBA9CUyvC,IAAmB1xC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnB6nB,GAAmB5nB,QAAnB4nB,GAAmB3nB,UAAAC,WAFlB,gBAED0nB,EAAmB,KCKnBU,EAAc,MAArB,MAAOA,GAETvxC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEJ2qB,uBACI,OAAOtxC,KAAK2mB,MAAME,IAAwB,+BAC9C,CAEA0qB,oBAAoBhjC,GAChB,OAAOvO,KAAK2mB,MAAME,IAAuB,8BAA+B,CACpE/K,OAAQ,CACJvN,eAAgBA,EAAe6C,aAG3C,CAEAogC,sBAAsBC,GAClB,OAAOzxC,KAAK2mB,MAAMgC,KAAa,8BAA+B,CAAE8oB,sBACpE,CAEAC,wBAAwBnjC,GACpB,OAAOvO,KAAK2mB,MAAME,IAAgC,8BAA8BtY,IACpF,CAEAojC,wBAAwBpjC,EAAwBqjC,GAC5C,OAAO5xC,KAAK2mB,MAAMkC,IAAa,8BAA8Bta,IAAkB,CAC3Ey4B,WAAY4K,GAEpB,CAEAC,mBACI,OAAO7xC,KAAK2mB,MAAME,IAAoB,0BAC1C,CAEAirB,cACI,OAAO9xC,KAAK2mB,MAAME,IAAe,qBACrC,CAEAkrB,YAAY5P,EAAmBC,EAAiB4P,GAAed,GAAmBe,GAAyBC,GAA0BC,GAAuB5jC,IACxJ,OAAOvO,KAAK2mB,MAAME,IAAe,WAAY,CACzC/K,OAAQ,CACJqmB,UAAWA,EACXC,QAASA,EACT4P,MAAOA,GACPd,QAASA,IAAS9/B,WAClB6gC,cAAeA,IAAe7gC,WAC9B8gC,eAAgBA,IAAgB9gC,WAChC+gC,YAAaA,IAAa/gC,WAC1B7C,eAAgBA,KAG5B,CAEA6jC,WAAWC,GACP,OAAOryC,KAAK2mB,MAAME,IAAa,YAAYwrB,IAC/C,CAACpxC,SAAAjB,KAAA,mBAAAkB,iBAzDQmwC,IAAcpyC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAduoB,GAActoB,QAAdsoB,GAAcroB,UAAAC,WAFX,gBAEHooB,EAAc,KCHdiB,EAAmB,MAA1B,MAAOA,GAETxyC,YACYowB,GAAAlwB,KAAAkwB,MACR,CAEJrJ,IAAItY,GACA,OAAOvO,KAAKkwB,KAAKrJ,IAAwB,oBAAoBtY,eACjE,CAACtN,SAAAjB,KAAA,mBAAAkB,iBARQoxC,IAAmBrzC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnBwpB,GAAmBvpB,QAAnBupB,GAAmBtpB,UAAAC,WAFhB,gBAEHqpB,EAAmB,KCHnBC,EAAW,MAAlB,MAAOA,GACTzyC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGihB,SACH,OAAO5nC,KAAK2mB,MAAME,IAAY,YAClC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPQqxC,IAAWtzC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAXypB,GAAWxpB,QAAXwpB,GAAWvpB,UAAAC,WAFR,gBAEHspB,EAAW,KCAXC,GAA2B,MAAlC,MAAOA,GAET1yC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAA4B,4BAClD,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQsxC,IAA2BvzC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAA3B0pB,GAA2BzpB,QAA3BypB,GAA2BxpB,UAAAC,WAF1B,gBAEDupB,EAA2B,KCA3BC,GAAc,MAArB,MAAOA,GAET3yC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAe,eACrC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQuxC,IAAcxzC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAd2pB,GAAc1pB,QAAd0pB,GAAczpB,UAAAC,WAFb,gBAEDwpB,EAAc,KCSdC,GAAkB,MAAzB,MAAOA,GAEX5yC,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAGGgsB,aAAapkC,GAChB,OAAOvO,KAAK2mB,MAAME,IAAwB,mBAAmBtY,QAAsB,IAChF/N,QACDkQ,KAAKkiC,GACIA,EAAYliC,IAAKmiC,SAEjBA,GACHC,SAAUD,GAAOC,SAASpiC,IAAKqiC,SAExBA,GACHC,kBAAqBH,GAAOI,wBAA0BF,GAAazkC,UAAYukC,GAAOK,eAEtD,IAA1BH,GAAaI,UAA6C,IAA3BJ,GAAaK,WAAqBP,GAAOI,uBAExE,EADA,GAFF,EAIJI,oBAAgD,IAA1BN,GAAaI,UAA6C,IAA3BJ,GAAaK,WAC9D,EAC2B,IAA1BL,GAAaI,UAA6C,IAA3BJ,GAAaK,UAC3C,EACA,SAOtB,CAEOE,wBAAwB/kC,EAAwBglC,GACrD,OAAOvzC,KAAK2mB,MAAMkC,IAAa,mBAAmBta,QAAsBglC,EAC1E,CAGOC,cAAcjlC,GACnB,OAAOvO,KAAK2mB,MAAME,IAAY,mBAAmBtY,UAAwB,GAE3E,CAEOklC,iBAAiBllC,EAAwBmlC,GAC9C,OAAO1zC,KAAK2mB,MAAMgC,KAAW,mBAAmBpa,UAAwBmlC,EAC1E,CAEOC,eAAeplC,EAAwBmlC,GAC5C,OAAO1zC,KAAK2mB,MAAMkC,IAAa,mBAAmBta,UAAwBmlC,EAC5E,CAEOE,iBAAiBrlC,EAAwBslC,GAC9C,OAAO7zC,KAAK2mB,MAAMuB,OAAgB,mBAAmB3Z,WAAwBslC,IAC/E,CAGOC,qBAAqBvlC,EAAwBmlC,GAClD,OAAO1zC,KAAK2mB,MAAMgC,KAAW,mBAAmBpa,mBAAiCmlC,EACnF,CAEOK,qBAAqBxlC,EAAwBslC,EAAgBG,IAClE,OAAOh0C,KAAK2mB,MAAMuB,OAAgB,mBAAmB3Z,UAAuBslC,oBAAyBG,KACvG,CAGSC,eAAe1lC,GACpB,OAAOvO,KAAK2mB,MAAME,IAAmB,mBAAmBtY,gBAA8B,GAE1F,CAEO2lC,qBAAqB3lC,EAAwB4zB,EAAmBC,IACrE,OAAOpiC,KAAK2mB,MAAME,IAAyB,mBAAmBtY,sBAAoC,CAChGuN,OAAQ,CACNqmB,UAAWA,EAAUkF,OAAO,uBAC5BjF,QAASA,GAAQiF,OAAO,yBAG9B,CAACpmC,SAAAjB,KAAA,mBAAAkB,iBA/EUwxC,IAAkBzzC,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlB4pB,GAAkB3pB,QAAlB2pB,GAAkB1pB,UAAAC,WAFf,gBAEHypB,EAAkB,KCNlByB,GAAkB,MAAzB,MAAOA,GAETr0C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGytB,eAAe9lC,GAClB,OAAOtO,KAAK2mB,MAAME,IAAmB,cAAcvY,aACvD,CAEO+lC,kBAAkB/lC,EAAiB6zB,EAAmBC,IACzD,OAAOpiC,KAAK2mB,MAAME,IAAsB,cAAcvY,mBAA0B,CAC5EwN,OAAQ,CACJqmB,UAAWA,GAAWK,cACtBJ,QAASA,IAASI,gBAG9B,CAACvhC,SAAAjB,KAAA,mBAAAkB,iBAjBQizC,IAAkBl1C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlBqrB,GAAkBprB,QAAlBorB,GAAkBnrB,UAAAC,WAFf,gBAEHkrB,EAAkB,KCFlBG,GAAe,MAAtB,MAAOA,GACTx0C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEG4tB,YAAYjmC,GACf,OAAOtO,KAAK2mB,MAAME,IAAgB,gBAAgBvY,IACtD,CAEOkmC,aAAalmC,EAAiBuoB,GACjC,OAAO72B,KAAK2mB,MAAMkC,IAAU,gBAAgBva,IAAWuoB,EAC3D,CAEO4d,eAAeC,EAAuBC,EAA6BC,IACxE,OAAO50C,KAAK2mB,MAAME,IAAwB,kCAAmC,CAC3E/K,OAAQ,CACN44B,cAAeA,EACfC,oBAAqBA,EACrBC,aAAcA,KAGpB,CAAC3zC,SAAAjB,KAAA,mBAAAkB,iBArBQozC,IAAer1C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAfwrB,GAAevrB,QAAfurB,GAAetrB,UAAAC,WAFd,gBAEDqrB,EAAe,KCDfO,GAAgB,MAAvB,MAAOA,GACX/0C,YACU6mB,GAAA3mB,KAAA2mB,OACP,CAEHihB,SACE,OAAO5nC,KAAK2mB,MAAME,IAAiB,iBACrC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAPU2zC,IAAgB51C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhB+rB,GAAgB9rB,QAAhB8rB,GAAgB7rB,UAAAC,WAFf,gBAED4rB,EAAgB,KCAhBC,GAAqB,MAA5B,MAAOA,GAETh1C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAqB,qBAC3C,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQ4zC,IAAqB71C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAArBgsB,GAAqB/rB,QAArB+rB,GAAqB9rB,UAAAC,WAFpB,gBAED6rB,EAAqB,KCErBC,GAA+B,MAAtC,MAAOA,GAETj1C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAgC,gCACtD,CAEOmuB,mBAAmBC,GACtB,OAAIA,EAAWjkC,GAAK,EACThR,KAAK2mB,MAAMgC,KAAW,iCAAkCssB,GAExDj1C,KAAK2mB,MAAMkC,IAAU,gCAAiCosB,EACrE,CAEOC,qBAAqBC,EAAoC5H,GAC5D,OAAOvtC,KAAK2mB,MAAME,IAAc,iCAAiCsuB,UAAmC5H,IACxG,CAEO6H,oCAAoCD,EAAoC5H,GAC3E,OAAI4H,EAA6B,EACtBn1C,KAAK2mB,MAAMgC,KAAU,iCAAiCwsB,UAAmC5H,IAAU,MAEnGvtC,KAAK2mB,MAAMuB,OAAY,wCAA2CqlB,IACjF,CAEO8H,aAAaF,GAChB,OAAOn1C,KAAK2mB,MAAMuB,OAAgB,iCAAiCitB,IACvE,CAEOG,yCAAyCH,GAC5C,OAAOn1C,KAAK2mB,MAAME,IAA4C,iCAAiCsuB,aACnG,CAACl0C,SAAAjB,KAAA,mBAAAkB,iBAlCQ6zC,IAA+B91C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAA/BisB,GAA+BhsB,QAA/BgsB,GAA+B/rB,UAAAC,WAF5B,gBAEH8rB,EAA+B,KCF/BQ,GAAgB,MAAvB,MAAOA,GAETz1C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAiB,iBACvC,CAEO2uB,OAAOC,GACV,OAAOz1C,KAAK2mB,MAAMgC,KAAgB,iBAAkB8sB,EACxD,CAEOhM,OAAOiM,GACV,OAAO11C,KAAK2mB,MAAMkC,IAAiB,iBAAkB6sB,EACzD,CAEOxtB,OAAOytB,GACV,OAAO31C,KAAK2mB,MAAMuB,OAAe,kBAAkBytB,IACvD,CAAC10C,SAAAjB,KAAA,mBAAAkB,iBApBQq0C,IAAgBt2C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhBysB,GAAgBxsB,QAAhBwsB,GAAgBvsB,UAAAC,WAFb,gBAEHssB,EAAgB,4CCMtB,IAAMK,GAAW,MAAlB,MAAOA,GACT91C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGkvB,oBACH,OAAO71C,KAAK2mB,MAAME,IAAY,oCAAoCrmB,QAC9DkQ,KAAIqW,GAAQ/mB,KAAK81C,oBAAoB/uB,GAAQ,KAErD,CAEOgvB,YAAYC,GACf,IAAIC,EAAc,GAMlB,OAJID,EAAQE,cAAgBF,EAAQE,aAAa5yC,OAAS,GAAK2yC,EAAYxlC,KAAK,gBAAkB0lC,UAAUH,EAAQE,eAChHF,EAAQL,aAAeM,EAAYxlC,KAAK,qBAAuBulC,EAAQL,aACvEK,EAAQI,YAAcH,EAAYxlC,KAAK,oBAAsBulC,EAAQI,YAEjEJ,EAAQK,cACZ,KAAK1c,KAAcG,SAAUmc,EAAYxlC,KAAK,uBAAwB,MACtE,KAAKkpB,KAAcC,QAASqc,EAAYxlC,KAAK,sBAAuB,MACpE,KAAKkpB,KAAcE,QAASoc,EAAYxlC,KAAK,6BAGjD,OAAIulC,EAAQM,mBACRL,EAAYxlC,KAAK,0BAGdzQ,KAAK2mB,MACPE,IAAY,2CAA6CovB,EAAYzrC,KAAK,MAC1EhK,QACGkQ,KAAIqW,IAAQ/mB,KAAK81C,oBAAoB/uB,KAEjD,CAEOwvB,eAAezG,EAAqB,GACvC,OAAO9vC,KAAK2mB,MAAME,IAAU,mBAAoB,CAAE/K,OAAQ,CAAEg0B,gBAAgBtvC,QACxEkQ,KAAIqW,GAAQ/mB,KAAKw2C,wBAAwBzvB,IAEjD,CAEO0iB,OAAO5uB,GACV,OAAO7a,KAAK2mB,MAAMkC,IAAU,mBAAoBhO,GAAMra,QAClDkQ,KAAIqW,GAAQ/mB,KAAKw2C,wBAAwBzvB,IAEjD,CAEO0vB,kBAAkB57B,GACrB,OAAO7a,KAAK2mB,MAAMkC,IAAU,+BAAgChO,GAAMra,QAC9DkQ,KAAIqW,GAAQ/mB,KAAKw2C,wBAAwBzvB,IAEjD,CAEO2vB,eAAe77B,GAClB,OAAO7a,KAAK2mB,MAAMgC,KAAW,YAAa9N,EAC9C,CAEQi7B,oBAAoBa,GACxBA,SAAUppC,QAASsN,IACfA,EAAK+7B,eAAiBvpB,KAAOxS,EAAK+7B,gBAClC/7B,EAAKg8B,SAAWh8B,EAAKE,SAAW,KAAOF,EAAKC,YAEzC67B,CACX,CAEQH,wBAAwB37B,GAC5BA,SAAK+7B,eAAiBvpB,KAAOxS,EAAK+7B,gBAC3B/7B,CACX,CAAC5Z,SAAAjB,KAAA,mBAAAkB,iBApEQ00C,IAAW32C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAX8sB,GAAW7sB,QAAX6sB,GAAW5sB,UAAAC,WAFR,gBAEH2sB,EAAW,KCNXkB,GAAkB,MAAzB,MAAOA,GACTh3C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAGCowB,eAAezoC,EAAiB6zB,EAAiBC,GAAe4U,IACrE,OAAOh3C,KAAK2mB,MAAME,IAA8B,aAAavY,gBAAuB,CAClFwN,OAAQ,CACNqmB,UAAWA,EAAUK,cACrBJ,QAASA,GAAQI,cACjBwU,YAAaA,KAGnB,CAEOC,wBAAwB1oC,EAAwB4zB,EAAiBC,GAAe4U,IACrF,OAAOh3C,KAAK2mB,MAAME,IAA0B,eAAetY,0BAAwC,CACjGuN,OAAQ,CACNqmB,UAAWA,EAAUK,cACrBJ,QAASA,GAAQI,cACjBwU,YAAaA,KAGnB,CAAC/1C,SAAAjB,KAAA,mBAAAkB,iBAxBU41C,IAAkB73C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAlBguB,GAAkB/tB,QAAlB+tB,GAAkB9tB,UAAAC,WAFf,gBAEH6tB,EAAkB,mBCAxB,IAAMI,GAAyB,MAAhC,MAAOA,GACXp3C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,IAAI0mB,GACT,OAAOvtC,KAAK2mB,MAAME,IAA0B,2BAA2B0mB,IACzE,CAACtsC,SAAAjB,KAAA,mBAAAkB,iBAPUg2C,IAAyBj4C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAzBouB,GAAyBnuB,QAAzBmuB,GAAyBluB,UAAAC,WAFxB,gBAEDiuB,EAAyB,KCAzBC,GAAqC,MAA5C,MAAOA,GACTr3C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAsC,sCAC5D,CAEOmkB,OAAOoM,GACZ,OAAOp3C,KAAK2mB,MAAMgC,KAAa,sCAAuCyuB,EACxE,CAEO7P,KAAK6P,GACV,OAAOp3C,KAAK2mB,MAAMkC,IAAY,sCAAuCuuB,EACvE,CAEOlvB,OAAOmvB,GACZ,OAAOr3C,KAAK2mB,MAAMuB,OAAa,uCAAuCmvB,IACxE,CAACp2C,SAAAjB,KAAA,mBAAAkB,iBAnBQi2C,IAAqCl4C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAArCquB,GAAqCpuB,QAArCouB,GAAqCnuB,UAAAC,WAFpC,gBAEDkuB,EAAqC,KCArCG,GAAgB,MAAvB,MAAOA,GAEXx3C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,MACL,OAAO7mB,KAAK2mB,MAAME,IAA4B,2BAChD,CAEO8B,KAAK4uB,EAAcC,GACxB,OAAOx3C,KAAK2mB,MAAMgC,KAAc,2BAA4B,CAAC4uB,QAAO,CAACz7B,OAAQ,CAAC07B,gBAChF,CAEOtvB,OAAOlX,EAAYumC,GACxB,OAAOv3C,KAAK2mB,MAAMuB,OAAgB,4BAA4BlX,IAAM,CAAC8K,OAAQ,CAACy7B,SAChF,CAEO1uB,IAAI0uB,GACT,OAAOv3C,KAAK2mB,MAAMkC,IAAa,yBAA0B,CAAC0uB,QAC5D,CAACt2C,SAAAjB,KAAA,mBAAAkB,iBApBUo2C,IAAgBr4C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhBwuB,GAAgBvuB,QAAhBuuB,GAAgBtuB,UAAAC,WAFf,gBAEDquB,EAAgB,KCDhBG,GAAgC,MAAvC,MAAOA,GAET33C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAgC,gCACtD,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARQu2C,IAAgCx4C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAhC2uB,GAAgC1uB,QAAhC0uB,GAAgCzuB,UAAAC,WAF/B,gBAEDwuB,EAAgC,KCIhCC,GAAoB,MAA3B,MAAOA,GAET53C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAGGgxB,iBAAiBrpC,EAAiBi1B,EAAuBC,IAC5D,OAAOxjC,KAAK2mB,MAAMgC,KAAa,0BAA0Bra,IAAW,KAAM,CACtEwN,OAAQ,CAAEynB,aAAcA,EAAanyB,WAAYoyB,oBAEzD,CAEOoU,yBAAyBnqC,GAE5B,OAAOzN,KAAK2mB,MAAMgC,KADN,sBACwBlb,EACxC,CAIOoqC,iBAAiBhc,GACpB,OAAO77B,KAAK2mB,MAAME,IAAmB,sBAAsBgV,IAC/D,CAAC56B,SAAAjB,KAAA,mBAAAkB,iBAtBQw2C,IAAoBz4C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAApB4uB,GAAoB3uB,QAApB2uB,GAAoB1uB,UAAAC,WAHnB,gBAGDyuB,EAAoB,KCHpBI,GAAiC,MAAxC,MAAOA,GAETh4C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAMJuB,OAAO6vB,EAA0BC,GAG7B,OAAOh4C,KAAK2mB,MAAMuB,OADN,iCAAiC6vB,IACN,CACnCj8B,OAAQ,CACJk8B,UAAWA,EAAU5mC,aAGjC,CAKA6mC,mBAAmB1K,GAEf,OAAOvtC,KAAK2mB,MAAMuB,OADN,2BAA2BqlB,IAE3C,CAACtsC,SAAAjB,KAAA,mBAAAkB,iBA1BQ42C,IAAiC74C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAjCgvB,GAAiC/uB,QAAjC+uB,GAAiC9uB,UAAAC,WAF9B,gBAEH6uB,EAAiC,mHCAvC,IAAMI,EAAe,MAAtB,MAAOA,EAETp4C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGE,MACH,OAAO7mB,KAAK2mB,MAAME,IAAgB,gBACtC,CAEOsxB,qBACH,OAAOn4C,KAAK2mB,MAAME,IAAgB,gCACtC,CAEOuxB,aAAaC,GAChB,OAAOr4C,KAAK2mB,MAAMgC,KAAU,6BAA8B0vB,EAC9D,CAEOC,cAAcC,GACjB,OAAOv4C,KAAK2mB,MAAMkC,IAAS,8BAA+B0vB,EAC9D,CAEOC,eAAepC,GAClB,OAAOp2C,KAAK2mB,MAAMuB,OAAY,iBAAiBkuB,IACnD,CAEOqC,gBAAgBC,EAAuBC,GAC1C,OAAO34C,KAAK2mB,MAAMkC,IAAU,wBAAyB,KAAM,CACvD/M,OAAQ,CACJ48B,cAAeA,EAActnC,WAC7BunC,cAAeA,EAAcvnC,aAGzC,CAACnQ,SAAAjB,KAAA,mBAAAkB,iBAjCQg3C,GAAej5C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAklC,EAAApc,IAAA,OAAfovB,EAAenvB,QAAfmvB,EAAelvB,UAAAC,WAFZ,gBAEHivB,CAAe,yFCDrB,IAAMU,EAAe,MAAtB,MAAOA,EACX94C,YACU4I,GAEN,GAFM1I,KAAA0I,UAED1I,KAAK0U,UACR,OAGF,IAAImkC,EAAyBzrC,OAAO0rC,qBACjCvuC,MAAM,KACN+F,OAAQyoC,GAAuBA,GAElC/4C,KAAK0I,OAAO1H,SAAST,oBAAiCs4C,IACtD74C,KAAK0I,OAAO1H,SAAST,eAGrB6M,OAAO4rC,SAASC,iBAAkBC,IAChCl5C,KAAK0I,OAAO1H,SAAST,oBAAiC24C,EAAOC,QAAO,EAE1E,CAEA,aAAWzkC,GAET,SAAKtH,OAAO4rC,WAAa5rC,OAAO0rC,qBAIlC,CAEOxkC,eACL,IAAKtU,KAAK0U,UACR,OAEF,MAAM0kC,EAAKC,SAASC,uBAAuB,wBAAwB,GAE9DF,GAGLA,EAAGG,OACL,CAACt4C,SAAAjB,KAAA,mBAAAkB,iBAvCU03C,GAAe35C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAwU,EAAAsU,IAAA,OAAf8vB,EAAe7vB,QAAf6vB,EAAe5vB,UAAAC,WAFd,gBAED2vB,CAAe,+ECCrB,IAAMY,EAAmB,MAA1B,MAAOA,EAEX15C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEG8yB,cACL,OAAOz5C,KAAK2mB,MAAME,IAA0B,2BAC9C,CAEO6yB,cACL,OAAO15C,KAAK2mB,MAAME,IAA6B,2BACjD,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAZUs4C,GAAmBv6C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAklC,EAAApc,IAAA,OAAnB0wB,EAAmBzwB,QAAnBywB,EAAmBxwB,UAAAC,WAFlB,gBAEDuwB,CAAmB,+ECEzB,IAAMG,EAAwB,MAA/B,MAAOA,EAEX75C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGihB,OAAOgS,GAAsB,GAClC,OAAO55C,KAAK2mB,MAAME,IAA6B,qCAAqC+yB,IACtF,CAEOC,wBAAwB9yB,GAC7B,OAAO/mB,KAAK2mB,MAAMkC,IAAa,uDAAwD9B,EACzF,CAEO+yB,0BAA0B9oC,GAC/B,OAAOhR,KAAK2mB,MAAMuB,OAAa,wDAAwDlX,IACzF,CAEO+oC,4BAA4BxC,EAAcyC,GAC/C,MAAMl+B,EAAS,IAAI0U,KAEnB,OAAI+mB,GACFz7B,EAAO6zB,OAAO,OAAQ4H,GAEpByC,GACFl+B,EAAO6zB,OAAO,WAAYqK,GAErBh6C,KAAK2mB,MAAME,IAAmC,8BAA+B,CAAE/K,UACxF,CAEOm+B,sBAAsBC,GAC3B,OAAOl6C,KAAK2mB,MAAMuB,OAAgB,0BAA0BgyB,IAC9D,CAACj5C,SAAAjB,KAAA,mBAAAkB,iBAhCUy4C,GAAwB16C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAwU,EAAAsU,IAAA,OAAxB6wB,EAAwB5wB,QAAxB4wB,EAAwB3wB,UAAAC,WAFvB,gBAED0wB,CAAwB,sICU9B,IAAMQ,EAAiB,MAAxB,MAAOA,EAKXr6C,YACU6mB,EACA5mB,GADAC,KAAA2mB,QACA3mB,KAAAD,UALVC,KAAAo6C,OAASp6C,KAAKD,QAAQS,QAAKF,MAAOuN,OAClC7N,KAAAq6C,aAAer6C,KAAKD,QAAQS,QAAKF,MAAOmK,iBAKpC,CAEJ6vC,cAAc/M,GAEZ,OAAOvtC,KAAK2mB,MAAME,IAAyB,+CAA+C0mB,KAAU/sC,QAClG8e,KAAetf,KAAKo6C,OAAQp6C,KAAKq6C,eAAY,EAC7C3pC,KAAI,EAAE6pC,EAAaC,EAAOC,MAAW,IAE3BF,EACJ5E,YAAapI,IAAWkN,EAAY38B,OAAS28B,EAAYC,YAAcF,EAAMD,EAAYhN,QAAQmN,eAI3G,CAEAC,cAAcC,GACZ,OAAO56C,KAAK2mB,MAAMgC,KAAc,uBAAwBiyB,EAC1D,CAAC35C,SAAAjB,KAAA,mBAAAkB,iBAzBUi5C,GAAiBl7C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAmU,EAAA2U,IAAA,OAAjBqxB,EAAiBpxB,QAAjBoxB,EAAiBnxB,UAAAC,WAFhB,gBAEDkxB,CAAiB,0FCVvB,IAAMU,EAA+B,MAAtC,MAAOA,EAET/6C,YACY6mB,EACAzI,GADAle,KAAA2mB,QACA3mB,KAAAke,cACR,CAEG2I,IAAI0mB,GACP,OAAOvtC,KAAK2mB,MAAME,IAA8B,yBAAyB0mB,IAC7E,CAEOhG,KAAKgG,EAAgBuN,GACxB,OAAO96C,KAAK2mB,MAAMkC,IAA8B,yBAAyB0kB,IAAUuN,EAEvF,CAEOC,SAASC,GACZ,OAAOh7C,KAAK2mB,MAAMgC,KAAwC,iCAAkCqyB,EAChG,CAAC/5C,SAAAjB,KAAA,mBAAAkB,iBAlBQ25C,GAA+B57C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAwU,EAAAsU,IAAA,OAA/B+xB,EAA+B9xB,QAA/B8xB,EAA+B7xB,UAAAC,WAF9B,gBAED4xB,CAA+B,8GCKrC,IAAMI,EAAkB,MAAzB,MAAOA,EAETn7C,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGu0B,eAAeC,GAClB,OAAOn7C,KAAK2mB,MAAME,IAAyB,iCAAiCs0B,IAChF,CAEOC,eAAelF,GAClB,OAAOl2C,KAAK2mB,MAAME,IAA2B,iCAAiCqvB,IAClF,CAEOmF,cAAc1uB,EAAyB2uB,GAC1C,OAAOt7C,KAAK2mB,MAAMgC,KAAW,qBAAsBgE,EAAS,CACxD7Q,OAAQ,CACJy/B,qBAAsBD,KAE3B96C,QACCkQ,KAAIqW,GAAQ/mB,KAAKw2C,wBAAwBzvB,IAEjD,CAEOy0B,oBAAoBC,EAAoBC,GAC3C,OAAO17C,KAAK2mB,MAAMkC,IAAS,qCAAqC,KAAM,CAClE/M,OAAQ,CACJ2/B,WAAYA,EAAWrqC,WACvBsqC,SAAUA,EAAStqC,aAG/B,CAEOuqC,oBAAoBhvB,GACvB,OAAO3sB,KAAK2mB,MAAMgC,KAAW,qBAAsBgE,GAASnsB,QACxDkQ,KAAIqW,GAAQ/mB,KAAKw2C,wBAAwBzvB,IAEjD,CAEO60B,kBAAkBjvB,GACrB,OAAO3sB,KAAK2mB,MAAMgC,KAAW,gCAAiCgE,GAASnsB,QACnEkQ,KAAIqW,GAAQ/mB,KAAKw2C,wBAAwBzvB,IAEjD,CAEQyvB,wBAAwB37B,GAC5BA,SAAK+7B,eAAiBvpB,IAAOxS,EAAK+7B,gBAC3B/7B,CACX,CAEOghC,mBAAmBC,GACtB,OAAO97C,KAAK2mB,MAAMgC,KAAW,sCAAwC,CAAEmzB,cAC3E,CAAC76C,SAAAjB,KAAA,mBAAAkB,iBApDQ+5C,GAAkBh8C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAoB,EAAA0nB,IAAA,OAAlBmyB,EAAkBlyB,QAAlBkyB,EAAkBjyB,UAAAC,WAFf,gBAEHgyB,CAAkB,0FCJxB,IAAMc,EAAsB,MAA7B,MAAOA,EAEXj8C,YAAoBowB,EAA0BkK,GAA1Bp6B,KAAAkwB,OAA0BlwB,KAAAo6B,aAAmC,CAEjF4hB,iBACE,OAAOh8C,KAAKkwB,KAAKrJ,IAAkB,GAAG7mB,KAAKo6B,YAAY5K,4CACzD,CAEAysB,0BACE,OAAOj8C,KAAKkwB,KAAKrJ,IAA2B,GAAG7mB,KAAKo6B,YAAY5K,6DAClE,CAACvuB,SAAAjB,KAAA,mBAAAkB,iBAVU66C,GAAsB98C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAwU,EAAAsU,IAAA,OAAtBizB,EAAsBhzB,QAAtBgzB,EAAsB/yB,UAAAC,WAFrB,gBAED8yB,CAAsB,6ECF5B,IAAMG,EAAU,MAAjB,MAAOA,EAEXp8C,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGE,MACL,OAAO7mB,KAAK2mB,MAAME,IAAoB,8CACxC,CAEOqB,OAAOqvB,GACZ,OAAOv3C,KAAK2mB,MAAMuB,OAAgB,+CAA+CqvB,IACnF,CAEO4E,cAAc5E,GACnB,OAAOv3C,KAAK2mB,MAAME,IAAgB,2CAA2C0wB,IAC/E,CAEO6E,YAAY7E,EAAc8E,GAC/B,OAAOr8C,KAAK2mB,MAAMgC,KAAmB,+CAA+C4uB,IAAQ,CAC1FvkC,KAAMqpC,GAEV,CAACp7C,SAAAjB,KAAA,mBAAAkB,iBAtBUg7C,GAAUj9C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAklC,EAAApc,IAAA,OAAVozB,EAAUnzB,QAAVmzB,EAAUlzB,UAAAC,WAFT,gBAEDizB,CAAU,2HCLhB,MAAMI,KAAOC,MAAa,eAEpBC,KAAWD,MAAa,qBAAmBE,SAI3CC,KAAcH,MAAa,sBAE3BI,KAASJ,MAAa,iBACtBK,KAAUL,MAAa,kBAEvBM,KAAuBN,MAAa,gCAAkCzxC,KAAkCkE,QAAS,CAAElE,cACnHgyC,KAAuBP,MAAa,gCAAkC7xC,KAAyBsE,QAAS,CAAEtE,sVCVhH,MAAMqyC,KAA4BR,MAAa,sCAAuC,CAAChuC,EAAwB4zB,EAAmBC,EAAiBgF,EAAuB,MAAS74B,iBAAgB64B,eAAcjF,YAAWC,aACtN4a,KAAgCT,MAAa,2CAA6C3yB,KAAuBA,WACjHqzB,KAAmCV,MAAa,8CAAgDnjB,KAAsDA,2GCM5J,IAAM8jB,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACAC,GADAp9C,KAAAm9C,WACAn9C,KAAAo9C,gCAGLp9C,KAAAq9C,kBAAiB/zB,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAuC,EAC9C7zB,KAAUva,GAAUlP,KAAKo9C,8BAA8BjW,yBAAyBj4B,EAAOX,eAAgBW,EAAOk4B,aAAcl4B,EAAOizB,UAAWjzB,EAAOkzB,SAAS5hC,QAC1JkQ,KAAI6sC,GAAUD,EAA+CC,KAAO,EACpE5zB,KAAWC,MAASC,MAAGyzB,EAA4C1zB,QAP3E,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMM,EAAuB,CAChCpkB,sBAAuB,GACvBrO,UAAU,EACVkP,WAAW,EACXrQ,MAAO,MCZE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAA0C9iB,QACtCA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAA6C,CAAC9iB,GAAS5Q,YAAK,IACxD4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAgD,CAAC9iB,GAASpB,4BAAqB,IAC3EoB,EACHpB,sBAAuBA,EACvBrO,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBC1BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMpB,uBAE1Da,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDud,KAA2B2W,MAAeD,EAAUrjB,GAASA,EAAMpB,8gBCNzE,MAAM6kB,KAA2B1B,MAAa,sCAExC2B,KAA+B3B,MAAa,0CACpD3yB,KAAuBA,WAGfu0B,KAAkC5B,MAAa,6CACvDx1B,KAA0CA,UAGlCq3B,KAAkB7B,MAAa,2BACxC,CAACjvC,EAAcrL,EAAco8C,EAAwBC,MAA2BhxC,QAAOrL,OAAMo8C,iBAAgBC,iBAGpGC,KAAsBhC,MAAa,gCAC5C,CAAC3yB,EAAiB00B,MAA2B10B,QAAO00B,iBAG3CE,KAAyBjC,MAAa,mCAC/C,CAACxvB,EAAiBsxB,MAA8BtxB,WAAUsxB,qICVvD,IAAMnB,EAAO,MAAd,MAAOA,EACZp9C,YACSq9C,EACAsB,GADAz+C,KAAAm9C,WACAn9C,KAAAy+C,sBAGFz+C,KAAA0+C,6BAA4Bp1B,MAClC,IAAMtpB,KAAKm9C,SAAS38C,QACnB+oB,MAAO+zB,EAAwCqB,OAAkC,EACjFl1B,KAAUva,GACLA,EAAOxP,OAAS49C,EAAuC59C,KACnDM,KAAKy+C,oBAAoB3Q,0BAA0BttC,QACzDkQ,KAAKqW,GAAuCu2B,EAA8Cv2B,KAAK,EAC/F4C,KAAWC,MAASC,MAAGyzB,EAA2C1zB,MAG3D1a,EAAOxP,OAASi/C,KAAmCj/C,KACpD4qB,SADH,KAODtqB,KAAA4+C,oBAAmBt1B,MACzB,IAAMtpB,KAAKm9C,SAAS38C,QACnB+oB,MAAO+zB,IAA6B,EACpC7zB,KAAUva,GAAUlP,KAAKy+C,oBAAoB1Q,gBAAgB7+B,EAAOjN,KAAMiN,EAAO5B,OAAO9M,QACvFkQ,KAAIqc,GAAYuwB,EAAqCvwB,EAAU7d,EAAOmvC,kBAAe,EACrF10B,KAAWC,MAASC,MAAGyzB,EAAkC1zB,EAAO1a,EAAOovC,mBAKnEt+C,KAAA6+C,2BAA0Bv1B,MAChC,IAAMtpB,KAAKm9C,SAAS38C,QACnB+oB,MAAO+zB,IAAoC,EAC3C7zB,KAAUva,GAAU,CACnB3O,UAAqB,CAAEuK,QAAS,CAAElL,QAASsP,EAAOmvC,gBAAkB,UAAYS,UAAW,IAAMp/C,KAAM,aACvG49C,QAKIt9C,KAAA++C,wBAAuBz1B,MAC7B,IAAMtpB,KAAKm9C,SAAS38C,QACnB+oB,MAAO+zB,IAAiC,EACxC5sC,KAAIxB,GAAU3O,UAAqB,CAAEuK,QAAS,CAAElL,QAAS,GAAGsP,EAAOovC,aAAe,aAAapvC,EAAO0a,OAAS,KAAMk1B,UAAW,IAAMp/C,KAAM,aA1C1I,CAACuB,SAAAjB,KAAA,mBAAAkB,iBAJOg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCOb,MAAMM,EAAsB,CAC/BwB,WAAY,KACZj0B,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACVr1B,MAAO,KAEPs1B,uBAAwB,KAExBC,oBAAqB,GACrBC,kBAAmB,GAEnBC,mBAAoB,GAEpBC,cAAe,MC/BN7B,KAAgBC,MACzBF,KAEAG,MAAGL,EAAyC9iB,QACrCA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAA4C,CAAC9iB,GAAS5Q,YAAK,IACvD4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAA+C,CAAC9iB,GAASzT,WAAI,IACzDyT,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAEPs1B,uBAAwBn4B,GAAMm4B,wBAA0B,KACxDI,cAAev4B,GAAMu4B,eAAiB,SACxC,EAEF3B,MAAGL,EAA+B9iB,QAC3BA,EACHykB,UAAU,MACZ,EAEFtB,MAAGL,EAAmCA,EAAsC9iB,QACrEA,EACHykB,UAAU,MAKZ,SAAUrB,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,2BCrCO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM+kB,sBAE1DtlB,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD41B,KAAU1B,MAAeD,EAAUrjB,GAASA,GAAO0kB,wBAA0B,IAE7EO,KAAgB3B,MACzB0B,EACAE,KACA,CAACC,EAAUC,IAAWD,GAAUjvC,IAAImvC,KAChC7uC,GAAI6uC,EAAQhgC,eACZigC,OAAQD,EAAQE,SAChB59C,KAAM09C,EAAQG,iBACd9uC,MAAO0uC,EAAOC,EAAQE,UAAU59C,KAChC89C,OAAQ,IAAML,EAAOC,EAAQE,UAAUE,OACvCC,OAAQ,IAAMN,EAAOC,EAAQE,UAAUG,OACvCC,cAAeP,EAAOC,EAAQE,UAAUI,cACxChN,SAAU0M,EAAQO,SAClBhN,UAAWyM,EAAQQ,UACnBvQ,WAAY+P,EAAQzxB,WAEpBkyB,QAAST,EAAQU,sBAAsB7vC,IAAI+a,KACvCza,GAAIya,EAAM7L,QACVkgC,OAAQr0B,EAAMs0B,SACd59C,KAAMspB,EAAM+0B,UACZtvC,MAAO0uC,EAAOn0B,EAAMs0B,UAAU59C,KAC9B89C,OAAQ,IAAML,EAAOn0B,EAAMs0B,UAAUE,OACrCC,OAAQ,IAAMN,EAAOn0B,EAAMs0B,UAAUG,OACrCC,cAAeP,EAAOn0B,EAAMs0B,UAAUI,cACtChN,SAAU1nB,EAAM20B,SAChBhN,UAAW3nB,EAAM40B,iBAIK,IAIrBI,KAAwB3C,MAAe0B,EAASz4B,IAEzD,IAAI25B,EAAgB,GAEpB,IAAK35B,EAAM,OAAO25B,EAElB,MAAMC,EAAmBC,IACrB,IAAIC,EAAqD,GAEzDD,SAAQvxB,OAAO,CAACwxB,EAAclzB,KAC1BkzB,GAAclzB,EAAOmzB,eAAiBnzB,EAC/BkzB,GAERA,GACIA,GAGX,QAAShB,KAAW94B,EAAM,CACtB,IAAI85B,EAAeF,EAAgBd,EAAQkB,2BAE3CL,EAAc,GAAGb,EAAQzxB,cAAcyxB,EAAQhgC,kBAAoBghC,EAEnE,QAASp1B,KAASo0B,EAAQU,qBAAsB,CAC5C,IAAIS,EAAoBL,EAAgBl1B,EAAMw1B,yBAC9CP,EAAc,GAAGb,EAAQzxB,cAAcyxB,EAAQhgC,kBAAkB4L,EAAM7L,WAAaohC,CACxF,CACJ,CACA,OAAON,IAIEQ,KAAmBpD,MAAeD,EAAUrjB,IAErD,IAAKA,EAAM8kB,cACP,OAAO,KAEX,MAAMA,EAAgB9kB,EAAM8kB,cAE5B,OAAOhtB,OAAOC,KAAK+sB,IAAgBjwB,OAAO,CAACwjB,EAAQsO,KAC/CtO,GAAQsO,GAAOriC,KAAKC,MAAMugC,EAAc6B,IACjCtO,GACR,KAAwD,KAKlDuO,MAAoBtD,MAAe0B,EAAUz4B,GAAS,IAC5DA,GAAMsI,OAAO,CAACgyB,EAAcxB,KAC3BA,EAAQkB,0BAA0BxzC,QAAQ+zC,IAEjCD,EAAaE,IAAID,EAAKR,cAAc1vC,aACrCiwC,EAAa7yB,IAAI8yB,EAAKR,cAAc1vC,WAAY,CAC5C+vC,IAAKG,EAAKR,cAAc1vC,WACxBme,OAAQ+xB,EAAKE,gBACbC,aAAcH,EAAKI,aACnBC,kBAAmBL,EAAKM,mBAC3B,GAGFP,GACR,IAAIQ,KAAkCC,UAC3C3b,KAAK,CAACC,EAAGC,IACHD,EAAEqb,eAAiBpb,EAAEob,aACdrb,EAAE7W,OAAOwyB,cAAc1b,EAAE9W,QAE7B6W,EAAEqb,aAAepb,EAAEob,eAIjBO,KAAkBlE,MAC3B0B,EACCz4B,GAAS,IACHA,EAAKsI,OAAO,CAAC4yB,EAAoBpC,KAChCA,EAAQU,qBAAqBhzC,QAAQke,IACjCA,EAAMw1B,wBAAwB1zC,QAAQ+zC,IAC7BW,EAAmBV,IAAID,EAAKR,gBAC7BmB,EAAmBzzB,IAAI8yB,EAAKR,cAAe,CACvCK,IAAKG,EAAKR,cAAc1vC,WACxBme,OAAQ+xB,EAAKE,gBACbC,aAAcH,EAAKI,aACnBC,kBAAmBL,EAAKM,mBAC3B,EACR,GAEEK,GACR,IAAIJ,KAAkCC,UAC3C3b,KAAK,CAACC,EAAGC,IACHD,EAAEqb,eAAiBpb,EAAEob,aACdrb,EAAE7W,OAAOwyB,cAAc1b,EAAE9W,QAE7B6W,EAAEqb,aAAepb,EAAEob,mHCpI3B,MAAMS,KAAuB3F,MAClC,mCACAE,SAEW0F,KAA2B5F,MACtC,wCACAE,SAEW2F,KAA8B7F,MACzC,2CACAE,SAIW4F,KAAgB9F,MAC3B,sCACAE,SAEW6F,KAAc/F,MACzB,oCACAE,0MCjBK,IAAM8F,EAA0B,MAAjC,MAAOA,EACXziD,YAAoBowB,GAAAlwB,KAAAkwB,MAAoB,CAExCsyB,oBAAoBj0C,EAAwB8hB,EAAkBC,GAC5D,OAAOtwB,KAAKkwB,KAAKrJ,IAAa,2CAA2CtY,cAA2B8hB,YAAmBC,IACzH,CAACrvB,SAAAjB,KAAA,mBAAAkB,iBALUqhD,GAA0BtjD,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAA1By5B,EAA0Bx5B,QAA1Bw5B,EAA0Bv5B,UAAAC,WAFzB,gBAEDs5B,CAA0B,oBCOhC,IAAMrF,EAAO,MAAd,MAAOA,EAEXp9C,YACUmyB,EACAwwB,EACAC,GAFA1iD,KAAAiyB,WACAjyB,KAAAyiD,0BACAziD,KAAA0iD,QAGV1iD,KAAA2iD,yBAAwBr5B,MAAa,IAAMtpB,KAAKiyB,SAASzxB,QACvD+oB,MAAOq5B,OAA4C,EACnDtjC,KACEtf,KAAK0iD,MAAMpiD,OAAOuK,MAClB7K,KAAK0iD,MAAMpiD,OAAO2gB,MAClBjhB,KAAK0iD,MAAMpiD,OAAO2gB,QAA+C,EAEnEwI,KAAU,EAAEva,EAAQX,EAAgB8hB,EAAUC,KACrCtwB,KAAKyiD,wBAAwBD,oBAClCtzC,EAAOX,gBAAkBA,EACzBW,EAAOmhB,UAAYA,GAAa+B,aAAmBC,SAAS,EAAG,UAAUwwB,QAAQ,OAAQxb,OAAO,uBAChGn4B,EAAOohB,QAAUA,GAAW8B,aAAmB0wB,MAAM,OAAQzb,OAAO,wBACpE7mC,QACAkQ,KAAIqyC,GAAWH,KAAoD,CAAEG,cAAU,EAC/Ep5B,KAAWC,MAASC,MAAG+4B,KAAiD,CAAEh5B,gBAKhF5pB,KAAAgjD,+BAA8B15B,MAAa,IAAMtpB,KAAKiyB,SAASzxB,QAC7D+oB,MAAOq5B,OAAgD,EACvDn5B,KAAUwB,GAAK,CACb1qB,UAAqB,CACnBuK,QAAS,CAAEpL,KAAM,QAASE,QAAS,4CAA6Ck/C,UAAW,UAzB7F,CAAC79C,SAAAjB,KAAA,mBAAAkB,iBANMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,GAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oYCVpB,MAAM+F,KAA0BvF,MAC9BF,OAEAG,MAAGiF,KAA8CpoB,QAC5CA,EACHzT,KAAM,KACNkT,WAAW,EACXrQ,MAAO,SACP,EAEF+zB,MAAGiF,KAAkD,CAACpoB,GAAS5Q,YAAK,IAC/D4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,MACP,EAEF+zB,MAAGiF,KAAqD,CAACpoB,GAASuoB,cAAO,IACpEvoB,EACHzT,KAAMg8B,EACNh4B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACP,EAEF+zB,MAAGiF,KAAuC,CAACpoB,EAAOtrB,SAC7CsrB,EACHnK,SAAUnhB,EAAOmhB,aACjB,EAEFstB,MAAGiF,KAAqC,CAACpoB,EAAOtrB,SAC3CsrB,EACHlK,OAAQphB,EAAOohB,WAIb,SAAUstB,EAAQpjB,EAA0BtrB,GAChD,OAAO+zC,EAAwBzoB,EAAOtrB,EACxC,sQChCO,MAAMg0C,KAA2BpF,MAAeC,KAAiBvjB,GAASA,EAAM2oB,kBAE1EC,KAA+BtF,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAMP,WAChGopB,KAA8BvF,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAMzP,UAC/Fu4B,KAA2BxF,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAM5Q,OAC5F25B,KAA0BzF,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAMzT,MAC3Fy8B,KAA8B1F,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAMnK,UAC/FozB,KAA4B3F,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAMlK,QAG7FozB,IAFAC,EAA8B7F,MAAeoF,EAA0B1oB,GAASA,GAASA,EAAMopB,WAE/FF,EAAkC5F,MAC7CyF,EACAM,KACA,CAACrpB,EAAOqmB,IACCrmB,GAASqmB,GAAgBrmB,EAAMspB,aAAapzC,IAAIqzC,QAEhDA,EACHC,OAAQD,EAAYE,qBAAuBF,EAAYC,OAASE,YAAYH,EAAYC,OAAO,MAAMG,QAAQ,IAC7GC,aAAcvD,EAAakD,EAAY9vC,IAAM4sC,EAAakD,EAAY9vC,IAAIowC,KAAON,EAAY/wC,SAE3F,KAIGsxC,KAAkCxG,MAC7C4F,EACAa,GAASA,EAAMj0C,OAAOgxC,IAASA,EAAK2C,uBAGzBO,KAAmC1G,MAC9C4F,EACA3+B,oBACA,CAACw/B,EAAOtlB,IAAkCslB,EAAMj0C,OAAOgxC,GAAQA,EAAK2C,sBAAsBvzC,IAAI4wC,KAC5FpwC,MAAO,CACLgI,KAAMooC,EAAK0C,OAAS,KAEtBS,SAAU,CACRvrC,KAAMooC,EAAKtuC,MAEb0xC,OAAQ,CACN,CACEhlD,KAAM,MACNqnB,KAAM,CACJ,CAAE49B,EAAGC,OAAOtD,EAAK0C,QAASa,MAAO,IAAMvD,EAAKrwB,OAC5C,CAAE0zB,EAAG,IAAMC,OAAOtD,EAAK0C,QAASa,MAAmB,IAAZ5lB,EAAgB6lB,IAAUC,KAAOD,IAAUE,iBAO/EC,KAA4BnH,MAAeyF,EAAyB/oB,GAASA,GAASA,EAAM0qB,QAC5FC,KAAmBrH,MAAemH,EAA2BG,GAAUA,GAAUA,EAAO90C,OAAO2yB,GAASA,EAAMoiB,MAAQ,GAAGlf,KAAK,CAACC,EAAGC,IAAMA,EAAEif,aAAelf,EAAEkf,eAAiB,IAE5KC,KAAuBzH,MAClCqH,EACApgC,oBACA,CAACqgC,EAAQnmB,KACP,MAAMumB,EAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAEvE,MAAQ,CACNC,MAAO,CACL/lD,KAAM,SACNgmD,gBAAiB,eAEnBC,QAAS,CACPC,SAAS,GAEXC,UAAW,CACTD,SAAS,GAEX10C,MAAO,CACLgI,KAAM,GACN4sC,MAAO,CACLC,SAAU,SAGdC,OAAQ,CACNJ,SAAS,GAEXK,YAAa,CACXvB,OAAQ,CACNwB,WAAY,CACVN,SAAS,EACTE,MAAO,CACLjB,MAAO,UACPkB,SAAU,QAEZI,cAAc,EACdC,YAAa,cAGjBC,OAAQ,CACNC,SAAU,SACVJ,WAAY,CACVN,SAAS,GAEXW,UAAW,CACTC,SAAU,KAEZC,UAAU,EACVC,eAAgB,EAChBC,YAAa,EACbC,cAAe,KAGnBC,QAAS,CACPC,QAAQ,EACRH,YAAa,EACbI,aAAc,EACdrB,gBAAiB,UACjBsB,SAAS,EACTC,QAAQ,EACRnB,MAAO,CACLjB,MAAmB,IAAZ5lB,EAAgB6lB,IAAUE,SAAWF,IAAUC,OAG1DmC,MAAO,CACLh2C,MAAO,CACLgI,KAAM,IAERiuC,WAAY/B,EAAO10C,IAAIuyB,IAASA,GAAMjwB,MACtCo0C,OAAQ,CACNtB,MAAO,CACLjB,MAAO,UACPkB,SAAU,QAEZH,SAAS,GAEXyB,SAA4B,IAAlBjC,EAAO9hD,YAAey/B,EAAY,EAC5CukB,cAAe,EAAI1C,OAAO2C,kBAE5BC,MAAO,CACLt2C,MAAO,CACLgI,KAAM,IAERkuC,OAAQ,CACNtB,MAAO,CACLjB,MAAO,UACPkB,SAAU,QAEZH,SAAS,GAEX6B,WAAW,EACXC,cAAe,UACfC,UAAW,EAAI/C,OAAO2C,iBACtBK,gBAAiB,GAEnBlD,OAAQ,CAAC,CACPhlD,KAAM,SACNyC,KAAM,QACN0kD,QAAS,CAAEgB,cAAe,GAC1B9gC,KAAMq+B,EAAO10C,IAAI,CAACuyB,GAAO6kB,MACvB3lD,KAAM8gC,GAAMjwB,KACZ2xC,EAAG1hB,GAAMqiB,aAAe,KACxBT,MAAOW,EAAOsC,EAAQ,WAOnBC,KAAoBjK,MAC/BqH,EACApgC,oBACA,CAACqgC,EAAQnmB,KACP,MAAMumB,EAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAEvE,MAAO,CACLt0C,MAAO,CACLgI,KAAM,GAAGksC,EAAO/1B,OAAO,CAACC,GAAK2T,IAAU3T,GAAO2T,EAAMoiB,MAAO,MAE7DZ,SAAU,CACRvrC,KAAM,UAER2tC,QAAS,CACPjB,SAAS,EACToC,YAAa,6CACblC,MAAO,CACLjB,MAAmB,IAAZ5lB,EAAgB6lB,IAAUE,SAAWF,IAAUC,OAG1DL,OAAQ,CAAC,CACPhlD,KAAM,MACNyC,KAAM,cACN4kB,KAAMq+B,EAAO10C,IAAI,CAACuyB,GAAO6kB,MACvB3lD,KAAM8gC,GAAMjwB,KACZ2xC,EAAG1hB,GAAMoiB,MACTR,MAAOW,EAAOsC,EAAQ,WAOnBG,KAA6BnK,MAAeyF,EAAyB/oB,GAASA,GAASA,EAAM0tB,SAC7FC,KAAoBrK,MAAemK,EAA4BG,GAAWA,GAAWA,EAAQ93C,OAAO+3C,GAASA,EAAMhD,MAAQ,GAAGlf,KAAK,CAACC,EAAGC,IAAMA,EAAEgf,MAAQjf,EAAEif,QAAU,IAEnKiD,KAAwBxK,MACnCqK,EACApjC,oBACA,CAACqjC,EAASnpB,MAENwmB,MAAO,CACL/lD,KAAM,SACNgmD,gBAAiB,eAEnBC,QAAS,CACPC,SAAS,GAEXC,UAAW,CACTD,SAAS,GAEX10C,MAAO,CACLgI,KAAM,2BACN4sC,MAAO,CACLC,SAAU,SAGdC,OAAQ,CACNJ,SAAS,GAEXK,YAAa,CACXvB,OAAQ,CACNwB,WAAY,CACVN,SAAS,EACTE,MAAO,CACLjB,MAAO,UACPkB,SAAU,QAEZI,cAAc,EACdC,YAAa,cAGjBC,OAAQ,CACNC,SAAU,SACVJ,WAAY,CACVN,SAAS,GAEXW,UAAW,CACTC,SAAU,KAEZC,UAAU,EACVC,eAAgB,EAChBC,YAAa,EACbC,cAAe,KAGnBC,QAAS,CACPC,QAAQ,EACRH,YAAa,EACbI,aAAc,EACdrB,gBAAiB,UACjBsB,SAAS,EACTC,QAAQ,EACRnB,MAAO,CACLjB,MAAmB,IAAZ5lB,EAAgB6lB,IAAUE,SAAWF,IAAUC,OAG1DmC,MAAO,CACLh2C,MAAO,CACLgI,KAAM,IAERiuC,WAAYiB,EAAQ13C,IAAI23C,GAASA,EAAMr1C,MACvCo0C,OAAQ,CACNtB,MAAO,CACLjB,MAAO,UACPkB,SAAU,OACVwC,aAAc,SAGlBlB,SAA6B,IAAnBe,EAAQ9kD,YAAey/B,EAAY,EAC7CukB,cAAe,EAAI1C,OAAO2C,kBAE5BC,MAAO,CACLt2C,MAAO,CACLgI,KAAM,IAERkuC,OAAQ,CACNtB,MAAO,CACLjB,MAAO,UACPkB,SAAU,SAGd0B,WAAW,EACXC,cAAe,UACfC,UAAW,EAAI/C,OAAO2C,iBACtBK,gBAAiB,GAEnBlD,OAAQ,CAAC,CACPhlD,KAAM,SACNyC,KAAM,SACN4kB,KAAMqhC,EAAQ13C,IAAI23C,KAChBlmD,KAAMkmD,EAAMr1C,KACZ2xC,EAAG0D,EAAMhD,MACTR,MAAO,IAAIwD,EAAMp3B,gBAOdu3B,KAAqB1K,MAChCqK,EACApjC,oBACA,CAACqjC,EAASnpB,MAEN/tB,MAAO,CACLgI,KAAM,GAAGkvC,EAAQ9kD,UAGnBmhD,SAAU,CACRvrC,KAAM,WAER2tC,QAAS,CACPjB,SAAS,EACToC,YAAa,mDACbH,cAAe,EACf/B,MAAO,CACLjB,MAAmB,IAAZ5lB,EAAgB6lB,IAAUE,SAAWF,IAAUC,OAG1DL,OAAQ,CAAC,CACPhlD,KAAM,MACNyC,KAAM,cACN4kB,KAAMqhC,EAAQ13C,IAAI,CAAC23C,EAAOP,OACxB3lD,KAAMkmD,EAAMr1C,KACZ2xC,EAAG0D,EAAM/C,aAAe,KACxBT,MAAO,IAAIwD,EAAMp3B,gBAOdw3B,KAA6B3K,MACxCyF,EACAM,KACA,CAACrpB,EAAOqmB,IACCrmB,GAASqmB,GAAgBrmB,EAAMkuB,QAAQh4C,IAAIid,QAE3CA,EACHm2B,aAAcn2B,EAAOm2B,aAAapzC,IAAIqzC,SAE/BA,GACHK,aAAcvD,EAAakD,GAAY9vC,IAAM4sC,EAAakD,GAAY9vC,IAAIowC,KAAON,GAAY/wC,YAQ5F21C,KAAiC7K,MAAeyF,EAAyB/oB,GAASA,GAASA,EAAMouB,aACjGC,KAAiC/K,MAAeyF,EAAyB/oB,GAASA,GAASA,EAAMsuB,aACjGC,KAAiCjL,MAAeyF,EAAyB/oB,GAASA,GAASA,EAAMwuB,6DCjWvG,MAAMxL,EAAsB,CAC/Bz2B,KAAM,KACNgE,UAAU,EACVkP,WAAW,EACX5J,SAAU,KACVC,OAAQ,KACRszB,SAAU,KACVqF,eAAgB,EAChBr/B,MAAO,wdClBJ,MAAM0yB,KAAOC,MAAa,2BAEpBC,KAAWD,MAAa,kCAAgCE,SAIxDC,KAAcH,MAAa,qCAAmCE,SAI9DyM,KAAO3M,MAAa,4BAA0BE,SAI9C0M,KAAW5M,MAAa,iCAA+BE,SAIvD2M,KAAc7M,MAAa,oCAAkCE,SAI7D4M,KAAS9M,MAAa,8BAA4BE,SAKlD6M,KAAa/M,MAAa,mCAAiCE,SAI3D8M,KAAgBhN,MAAa,sCAAoCE,SAIjE+M,KAASjN,MAAa,8BAA4BE,mICxBxD,IAAMS,EAAO,MAAd,MAAOA,GACTp9C,YACYq9C,GACAsM,EACAC,GAFA1pD,KAAAm9C,YACAn9C,KAAAypD,qBACAzpD,KAAA0pD,kBAIL1pD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOogC,IAAsB,EAC7BlgC,KAAUva,GAAUlP,KAAKypD,mBAAmB5iC,MAAMrmB,QAC9CkQ,KAAIk5C,GAAeD,EAA8B,CAAEC,kBAAc,EACjEjgC,KAAWC,MAASC,MAAG8/B,EAA2B,CAAE//B,gBAKzD5pB,KAAA6pD,SAAQvgC,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOogC,IAAsB,EAC7BlgC,KAAUva,GAAUlP,KAAKypD,mBAAmBliB,KAAKr4B,EAAOs4B,YAAYhnC,QAChEkQ,KAAI+2B,GAAgBkiB,EAA8B,CAAEliB,mBAAe,EACnE9d,KAAWC,MAASC,MAAG8/B,EAA2B,CAAE//B,gBAKzD5pB,KAAA8pD,gBAAexgC,MAClB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOogC,IAA6B,EACpCj5C,KAAIxB,GAAUy6C,MAAwB,EACtC9tC,KAAIoP,IACAjrB,KAAK0pD,gBAAgBK,OAAK,KAK/B/pD,KAAAgqD,eAAc1gC,MACjB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOogC,IAA4B,EACnCx/B,KAASjb,GACDA,EAAO0a,MAAMqgC,WAAa/6C,EAAO0a,MAAMsgC,mBAChC,CAACC,KAAkC,CAACr/C,QAAS,CAACic,KAAM,CAACqjC,qBAAsBl7C,EAAO0a,MAAMygC,kBAEvF,CAACF,OAAsCA,WAKxDnqD,KAAAsqD,kBAAiBhhC,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOogC,IAA+B,EACtCj5C,KAAIxB,GAAUi7C,OAAsCA,UAIrDnqD,KAAAuqD,WAAUjhC,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOogC,IAAwB,EAC/BlgC,KAAUva,GAAUlP,KAAKypD,mBAAmBvhC,OAAOhZ,EAAOu4B,aAAcv4B,EAAOw4B,iBAAiBlnC,QAC5FkQ,KAAIqc,GACIA,EAASy9B,UACFb,EAAgC,CAAEliB,aAAc1a,EAASs9B,eAC3Dt9B,EAASm9B,oBAAsBn9B,EAASk9B,UACtCN,EAA6B,CAAE//B,MAAO,CACzBygC,aAAct9B,EAASs9B,aACvBJ,UAAWl9B,EAASk9B,UACpBC,mBAAoBn9B,EAASm9B,2BAJhD,IAOR,EACDvgC,KAAWC,MAASC,MAAG8/B,EAA6B,CAAE//B,MAAO,CAAC6gC,SAAU7gC,UAlEhF,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBANIg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,KAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCAb,MAAMwN,cAAUC,GAAgC,CACnDC,SAAUpjB,IAAcA,GAAWvzB,GACnC42C,cAAc,IAGLrN,EAAsBkN,EAAQI,gBAAgB,CACvD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXglB,UAAU,EACV8L,YAAY,EAEZnhC,MAAO,OCvBLohC,KAAqBtN,MACvBF,KAEAG,MAAGgM,EAAwBnvB,SACpBA,GACHP,WAAW,MACb,EAEF0jB,MAAGgM,EAA4B,CAACnvB,IAAS5Q,aAAK,IACvC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGgM,EAA+B,CAACnvB,IAASovB,kBAAkBc,EAAQO,OAAOrB,GAAa,IACnFpvB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGgM,EAAwB,CAACnvB,SAAmB,IACxCA,GACHykB,UAAU,MACZ,EAEFtB,MAAGgM,EAA4B,CAACnvB,SAAc,IACvCA,GACHykB,UAAU,MACZ,EAEFtB,MAAGgM,EAA+B,CAACnvB,SAAqB,IACjDA,GACHykB,UAAU,MACZ,EAEFtB,MAAGgM,EAA0B,CAACnvB,SAAqB,IAC5CA,GACHuwB,YAAY,MACd,EAEFpN,MAAGgM,EAA8B,CAACnvB,SAAc,IACzCA,GACHuwB,YAAY,MACd,EAEFpN,MAAGgM,EAAiC,CAACnvB,IAASiN,mBAAmBijB,EAAQ1S,UAAUvQ,GAAc,IAC1FjN,GACHuwB,YAAY,MACd,EAEFpN,MAAGgM,EAA0B,CAACnvB,IAASiN,oBAAY,IAC5CjN,GACHwkB,WAAYvX,OAId,SAAUmW,EAAQpjB,GAA0BtrB,IAC9C,OAAO87C,EAAmBxwB,GAAOtrB,GACrC,gBC5DO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,IAASA,GAAMovB,cAGnEsB,UAAWtjB,EACXujB,eAAgBppB,GAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WAEpD+jB,KAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,OAEnDq1B,KAAWnB,MAAeD,EAAUrjB,IAASA,GAAMykB,UACnD8L,KAAajN,MAAeD,EAAUrjB,IAASA,GAAMuwB,YAErDU,KAAgB3N,MAAeD,EAAUrjB,IAASA,GAAMwkB,YACxD0M,MAAc5N,MAAe/b,GAAa0pB,EAAe,CAACvxB,GAAU8kB,KAAeA,IAAc9kB,GAAS8kB,oICpBhH,MAAM1C,KAAOC,MAAa,2BAEpBC,KAAWD,MAAa,kCAAgCE,SAIxDC,KAAcH,MAAa,qCAAmCE,yFCEpE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAuiC,IADA3rD,KAAAopB,YACAppB,KAAA2rD,sBAGL3rD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOqiC,IAAsB,EAC7BniC,KAAUva,GAAUlP,KAAK2rD,mBAAmB/jB,SAASpnC,QACjDkQ,KAAIggB,GAAek7B,EAA8B,CAAEl7B,iBAAa,EAChE/G,KAAWC,MAASC,MAAG+hC,EAA2B,CAAEhiC,gBAP5D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAgC,CACnDC,SAAUiB,GAAcA,EAAW96B,aACnC85B,aAAcA,CAACzkB,EAAGC,IAAMA,EAAEylB,SAAS16C,WAAW2wC,cAAc3b,EAAE0lB,SAAS16C,cAG9DosC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZLmiC,KAAqBrO,MACvBF,KAEAG,MAAGiO,EAAwBpxB,QACpBA,EACHP,WAAW,MACb,EAEF0jB,MAAGiO,EAA4B,CAACpxB,GAAS5Q,YAAK,IACvC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGiO,EAA+B,CAACpxB,GAAS9J,iBAAkBg6B,EAAQO,OAAOv6B,EAAa,IACnF8J,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO68C,EAAmBvxB,EAAOtrB,EACrC,gBCtBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM9J,cAGnEw6B,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,EAAQc,aAAa3N,GAWZmO,IATAjhC,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QAOnDoiC,EAAiBlO,MAC1BlW,EACClX,GACUA,EAAYhgB,IAAI8pB,KACnBxpB,GAAIwpB,EAAMzJ,aACVkvB,OAAQ,IAAMzlB,EAAMvJ,MACpBivB,OAAQ,IAAM1lB,EAAMvJ,w3BC5BzB,MAAMu4B,KAASjN,MAAa,kCAAoC7X,MAAgCA,uBAE1FunB,KAAmB1P,MAAa,kCAAoC2P,MAAsBA,aAC1FC,KAAkB5P,MAAa,iCAAmC2P,MAAsBA,aAExF5P,KAAOC,MAAa,iCAAmCjuC,MAAuBA,cAC9EkuC,KAAWD,MAAa,sCAAwC3yB,MAAuBA,YACvF8yB,KAAcH,MAAa,yCAA2C6P,MAA4CA,wBAElHC,KAAS9P,MAAa,kCAAmC,CAAC1qB,GAAiBvjB,OAAuBujB,WAASvjB,cAC3Gg+C,KAAa/P,MAAa,uCAAyC3yB,MAAuBA,YAC1F2iC,KAAgBhQ,MAAa,0CAA4CjuC,MAAuBA,cAEhG+6C,KAAS9M,MAAa,kCAAmC,CAACjuC,GAAiBo2B,GAA0Bn1B,OAA0BjB,WAASo2B,oBAAkBn1B,eAC1J+5C,KAAa/M,MAAa,uCAAyC3yB,MAAuBA,YAC1F2/B,KAAgBhN,MAAa,0CAA4CjuC,MAAuBA,cAEhGk+C,KAASjQ,MAAa,kCAAkC,CAACjuC,GAAiBo2B,GAA0B7S,OAAuBvjB,WAASo2B,oBAAkB7S,cACtJ46B,KAAalQ,MAAa,uCAAyC3yB,MAAuBA,YAC1F8iC,KAAgBnQ,MAAa,0CAA4C1qB,MAAuBA,cAEhG86B,KAAmBpQ,MAAa,kCAAmC,CAACjuC,GAAiBo2B,GAA0BK,OAAoCz2B,WAASo2B,oBAAkBK,yBAC9K6nB,KAAuBrQ,MAAa,uCAAyC3yB,MAAuBA,YACpGijC,KAA0BtQ,MAAa,0CAA2C,CAACjuC,GAAiBo2B,OAAgCp2B,WAASo2B,uBAE7IooB,KAAmBvQ,MAAa,kCAAmC,CAACjuC,GAAiBo2B,GAA0BK,OAAoCz2B,WAASo2B,oBAAkBK,yBAC9KgoB,KAAuBxQ,MAAa,uCAAyC3yB,MAAuBA,YACpGojC,KAA0BzQ,MAAa,0CAA2C,CAACjuC,GAASo2B,OAAwBp2B,WAASo2B,uBAE7HuoB,KAAQ1Q,MAAa,yJCtB3B,IAAMW,EAAO,MAAd,MAAOA,GACTp9C,YACYq9C,GACA+P,IADAltD,KAAAm9C,YACAn9C,KAAAktD,iBAGLltD,KAAAmtD,SAAQ7jC,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA4B,EACnC3jC,KAAUva,IACNlP,KAAKktD,cAAc5oB,qBAAqBp1B,GAAOZ,SAAS9N,QACpDkQ,KAAI07C,IAAqBgB,EAAoChB,GAAkBjmB,KAAK,CAACC,GAAGC,KAAMD,GAAEinB,iBAAmBhnB,GAAEgnB,iBAAmB,GAAI,MAAI,EAChJ1jC,KAAWC,OAASC,MAAGujC,EAAiCxjC,UAKjE5pB,KAAAstD,aAAYhkC,MACf,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAgC,EACvCjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,oCACTk/C,UAAW,WAOxB9+C,KAAAutD,WAAUjkC,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA8B,EACrC3jC,KAAUva,IAAUlP,KAAKktD,cAAc3oB,uBAAuBr1B,GAAO2iB,QAAS3iB,GAAOZ,SAAS9N,QAC1FkQ,KAAI,IAAM08C,EAAsCl+C,GAAOZ,WAAQ,EAC/Dqb,KAAWC,OAASC,MAAGujC,EAAmCxjC,UAK/D5pB,KAAAwtD,eAAclkC,MACjB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAkC,EACzCjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,qCACTk/C,UAAW,WAOxB9+C,KAAAytD,kBAAiBnkC,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAqC,EAC5CjjC,KAASjb,IAAU,CACfk+C,EAA6Bl+C,GAAOZ,SACpC/N,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,4BACTk/C,UAAW,WAOxB9+C,KAAA0tD,WAAUpkC,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA8B,EACrC3jC,KAAUva,IAAUlP,KAAKktD,cAAczoB,uBAAuBv1B,GAAOZ,QAASY,GAAOw1B,kBAAkBlkC,QACnGqb,KAAI,IAAM3M,GAAOK,aAAU,EAC3BmB,KAAI,IAAM08C,EAAsCl+C,GAAOZ,WAAQ,EAC/Dqb,KAAWC,OAASC,MAAGujC,EAAmCxjC,UAK/D5pB,KAAA2tD,eAAcrkC,MACjB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAkC,EACzCjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,uCACTk/C,UAAW,WAOxB9+C,KAAA4tD,kBAAiBtkC,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAqC,EAC5CjjC,KAASjb,IAAU,CACfk+C,EAA6Bl+C,GAAOZ,SACpC/N,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qCACTk/C,UAAW,WAOxB9+C,KAAA6tD,WAAUvkC,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA8B,EACrC3jC,KAAUva,IAAUlP,KAAKktD,cAAcvoB,uBAAuBz1B,GAAOZ,QAASY,GAAOw1B,iBAAkBx1B,GAAO2iB,SAASrxB,QACnHkQ,KAAImhB,IAAWu7B,EAAsCv7B,MAAQ,EAC7DlI,KAAWC,OAASC,MAAGujC,EAAmCxjC,UAK/D5pB,KAAA8tD,eAAcxkC,MACjB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAkC,EACzCjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,qCACTk/C,UAAW,WAOxB9+C,KAAA+tD,kBAAiBzkC,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAqC,EAC5CjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,4BACTk/C,UAAW,WAOxB9+C,KAAAguD,qBAAoB1kC,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAwC,EAC/C3jC,KAAUva,IAAUlP,KAAKktD,cAAcpoB,uBAAuB51B,GAAOZ,QAASY,GAAOw1B,iBAAkBx1B,GAAO61B,oBAAoBvkC,QAC9HkQ,KAAI,IAAM08C,EAAgDl+C,GAAOZ,QAASY,GAAOw1B,oBAAiB,EAClG/a,KAAWC,OAASC,MAAGujC,EAA6CxjC,UAKzE5pB,KAAAiuD,yBAAwB3kC,MAC3B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA4C,EACnDjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,4CACTk/C,UAAW,WAOxB9+C,KAAAkuD,4BAA2B5kC,MAC9B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA+C,EACtDjjC,KAASjb,IAAU,CACfk+C,EAA6Bl+C,GAAOZ,SACpC/N,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,oCACTk/C,UAAW,WAOxB9+C,KAAAmuD,qBAAoB7kC,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAAwC,EAC/C3jC,KAAUva,IAAUlP,KAAKktD,cAAcloB,uBAAuB91B,GAAOZ,QAASY,GAAOw1B,iBAAkBx1B,GAAO61B,oBAAoBvkC,QAC9HkQ,KAAI,IAAM08C,EAAgDl+C,GAAOZ,QAASY,GAAOw1B,oBAAiB,EAClG/a,KAAWC,OAASC,MAAGujC,EAA6CxjC,UAKzE5pB,KAAAouD,yBAAwB9kC,MAC3B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA4C,EACnDjjC,KAAS,IAAM,CACX5pB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,iDACTk/C,UAAW,WAOxB9+C,KAAAquD,4BAA2B/kC,MAC9B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO6jC,IAA+C,EACtDjjC,KAASjb,IAAU,CACfk+C,EAA6Bl+C,GAAOZ,SACpC/N,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,wCACTk/C,UAAW,UAlO5B,CAAC79C,SAAAjB,KAAA,mBAAAkB,mBAJKg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,OAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCKb,MAAMwN,cAAUC,GAAqC,CACxDC,SAAU0D,IAAmBA,GAAgBjB,iBAC7CxC,cAAc,IAGLrN,EAAsBkN,EAAQI,gBAAgB,CACvDyD,cAAe,KAEfC,iBAAkB,KAClBC,gBAAiB,KAEjBC,oBAAoB,EACpBC,qBAAqB,EAErB/kC,MAAO,OCzBLglC,KAA0BlR,MAC5BF,KAEAG,MAAGyP,EAAgC,CAAC5yB,IAASkK,wBAAgB,IACtDlK,GACH+zB,cAAe7pB,OACjB,EAEFiZ,MAAGyP,EAA8B5yB,SAC1BA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAkC,CAAC5yB,IAAS5Q,aAAK,IAC7C4Q,GACHm0B,qBAAqB,EACrBD,oBAAoB,EACpB9kC,MAAOA,OACT,EAEF+zB,MAAGyP,EAAqC,CAAC5yB,IAAS4xB,wBAAwB1B,EAAQO,OAAOmB,GAAmB,IACrG5xB,GACHm0B,qBAAqB,EACrBD,oBAAoB,EACpB9kC,MAAO,SACT,EAEF+zB,MAAGyP,EAAgC5yB,SAC5BA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAoC,CAAC5yB,IAAS5Q,aAAK,IAC/C4Q,GACHm0B,qBAAqB,EACrB/kC,MAAOA,OACT,EAEF+zB,MAAGyP,EAAuC,CAAC5yB,SAAgB,IACpDA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAgC,CAAC5yB,SAAkC,IAC/DA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAoC,CAAC5yB,SAAc,IAC/CA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAuC,CAAC5yB,SAAgB,IACpDA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAgC5yB,SAC5BA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAoC,CAAC5yB,IAAS5Q,aAAK,IAC/C4Q,GACHm0B,qBAAqB,EACrB/kC,MAAOA,OACT,EAEF+zB,MAAGyP,EAAuC,CAAC5yB,SAAgB,IACpDA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAA0C,CAAC5yB,SAAsD,IAC7FA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAA8C,CAAC5yB,IAAS5Q,aAAK,IACzD4Q,GACHm0B,qBAAqB,EACrB/kC,MAAOA,OACT,EAEF+zB,MAAGyP,EAAiD,CAAC5yB,SAAkC,IAChFA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAA0C5yB,SACtCA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAA8C,CAAC5yB,IAAS5Q,aAAK,IACzD4Q,GACHm0B,qBAAqB,EACrB/kC,MAAOA,OACT,EAEF+zB,MAAGyP,EAAiD,CAAC5yB,SAAkC,IAChFA,GACHm0B,qBAAqB,MACvB,EAEFhR,MAAGyP,EAAyC,CAAC5yB,IAAS0xB,cAAM,IACrD1xB,GACHi0B,gBAAiBvC,OACnB,EAEFvO,MAAGyP,EAA0C,CAAC5yB,IAAS0xB,cAAM,IACtD1xB,GACHg0B,iBAAkBtC,OACpB,EAEFvO,MAAGyP,EAA+B5yB,SAC3BgjB,MAIL,SAAUI,EAAQpjB,GAA0BtrB,IAC9C,OAAO0/C,EAAwBp0B,GAAOtrB,GAC1C,4BC3HO,MAAM2uC,MAAWC,MAAeC,MAAiBvjB,IAASA,GAAMxE,mBAGnEk1B,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,IAEZ6Q,KAAqB5Q,MAAeD,GAAUrjB,IAASA,GAAMk0B,oBAC7DC,KAAsB7Q,MAAeD,GAAUrjB,IAASA,GAAMm0B,qBAE9D3Q,KAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDilC,KAAqB/Q,MAAeD,GAAUrjB,IAASA,GAAMi0B,iBAC7DK,MAAsBhR,MAAeD,GAAUrjB,IAASA,GAAMg0B,kBAE9DO,MAAiCjR,MAAeD,GAAUrjB,IAASA,GAAM+zB,eACzE7C,MAAc5N,MAAelW,GAAQmnB,GAAgC,CAACC,GAAiBlH,KAAoB,OAAVA,IAAkBkH,GAAgBlH,KAAU,MAE7ImH,GAAsB3gD,OAAoBwvC,MACnDrzC,eAA8B6D,IAC9Bs5B,GACA8jB,GACAmD,EACA,CAACK,GAAQC,GAAaC,GAAoBlD,KACjCkD,GACAlD,GAOMgD,IAAQ5+C,OAAO++C,KAClB,IAAIC,GAAgBF,IAAoBG,iBAAiB7+C,IAAI8+C,IAAcA,GAAWhrB,SAClFirB,GAAgBN,GAAYz+C,IAAIg/C,IAAcA,GAAWlrB,SAC7D,OAAQ8qB,GAAcl/C,SAASi/C,GAAMr+C,MAAQy+C,GAAcr/C,SAASi/C,GAAMr+C,KACvEq+C,GAAMM,UAAUzrD,cAAckM,SAAS87C,GAAOhoD,cAAa,GAC/DiiC,KAAK,CAACC,GAAGC,KAAOD,GAAEupB,UAAYtpB,GAAEspB,UAAa,GAAI,GAX7CT,IAAQ5+C,OAAO++C,KAClB,IAAIC,GAAgBF,IAAoBG,iBAAiB7+C,IAAI8+C,IAAcA,GAAWhrB,SAClFirB,GAAgBN,GAAYz+C,IAAIg/C,IAAcA,GAAWlrB,SAC7D,OAAQ8qB,GAAcl/C,SAASi/C,GAAMr+C,MAAQy+C,GAAcr/C,SAASi/C,GAAMr+C,GAAE,GAC7Em1B,KAAK,CAACC,GAAGC,KAAOD,GAAEupB,UAAYtpB,GAAEspB,UAAa,GAAI,GANxB,IAkB3B/qB,GAAuBt2B,OAAoBwvC,MACpDrzC,eAA8B6D,IAC9Bo9C,GACAoD,GACA,CAACI,GAAQE,GAAoBlD,KACpBkD,GACAlD,GAMMgD,IAAQ5+C,OAAO++C,IACED,GAAmBG,iBAAiB7+C,IAAI8+C,IAAcA,GAAWhrB,SAChEp0B,SAASi/C,GAAMr+C,KAAOq+C,GAAMM,UAAUzrD,cAAckM,SAAS87C,GAAOhoD,gBAC1FiiC,KAAK,CAACC,GAAGC,KAAOD,GAAEupB,UAAYtpB,GAAEspB,UAAa,GAAI,GAR7CT,IAAQ5+C,OAAO++C,IACED,GAAmBG,iBAAiB7+C,IAAI8+C,IAAcA,GAAWhrB,SAChEp0B,SAASi/C,GAAMr+C,KACrCm1B,KAAK,CAACC,GAAGC,KAAOD,GAAEupB,UAAYtpB,GAAEspB,UAAa,GAAI,GALxB,IAe3BC,GAAqBthD,OAAoBwvC,MAClDrzC,eAA8B6D,IAC9Bs5B,GACA,CAACsnB,GAAQC,KACLD,IAAQ/oB,KAAK,CAACC,GAAGC,KAAOD,GAAEupB,UAAYtpB,GAAEspB,UAAa,GAAI,GAAIr/C,OAAO++C,KACxDF,GAAYr+C,KAAK4+C,IAAcA,GAAWH,iBAAiBM,KAAKL,IAAcA,GAAWhrB,UAAY6qB,GAAMr+C,6HCvExH,MAAMsrC,KAAOC,MAAa,0BAEpBC,KAAWD,MAAa,iCAA+BE,SAIvDC,KAAcH,MAAa,oCAAkCE,yFCEnE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA0mC,GADA9vD,KAAAopB,YACAppB,KAAA8vD,oBAGL9vD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOwmC,IAAqB,EAC5BtmC,KAAUva,IAAUlP,KAAK8vD,kBAAkBloB,SAASpnC,QAChDkQ,KAAIs/C,GAAcD,EAA6B,CAAEC,gBAAY,EAC7DrmC,KAAWC,MAASC,MAAGkmC,EAA0B,CAAEnmC,gBAP3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA+B,CAClDC,SAAUqF,GAAaA,EAAUC,YACjCrF,aAAcA,CAACzkB,EAAGC,IAAMD,EAAE8pB,YAAc7pB,EAAE6pB,cAGjC1S,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZLumC,KAAoBzS,MACtBF,KAEAG,MAAGoS,EAAuBv1B,QACnBA,EACHP,WAAW,MACb,EAEF0jB,MAAGoS,EAA2B,CAACv1B,GAAS5Q,YAAK,IACtC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGoS,EAA8B,CAACv1B,GAASw1B,gBAAiBtF,EAAQO,OAAO+E,EAAY,IAChFx1B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOihD,EAAkB31B,EAAOtrB,EACpC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMw1B,aAGnE9E,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QACnDwmC,EAAsBtS,MAAelW,EAAQooB,GAAcA,EAAW1/C,OAAO+/C,IAA4B,IAApBA,EAAKC,yHCdhG,MAAMhU,KAAOC,MAAa,2BAEpBC,KAAWD,MAAa,kCAAgCE,SAIxDC,KAAcH,MAAa,qCAAmCE,yFCEpE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA8jC,GADAltD,KAAAopB,YACAppB,KAAAktD,gBAGLltD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOwmC,IAAqB,EAC5BtmC,KAAUva,IAAUlP,KAAKktD,cAAcrqB,WAAWriC,QAC9CkQ,KAAI6/C,GAAcR,EAA6B,CAAEQ,gBAAY,EAC7D5mC,KAAWC,MAASC,MAAGkmC,EAA0B,CAAEnmC,gBAP3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA+B,CAClDC,SAAUqF,GAAaA,EAAUO,YACjC3F,aAAcA,CAACzkB,EAAGC,IAAMD,EAAEoqB,YAAcnqB,EAAEmqB,cAGjChT,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZLumC,KAAoBzS,MACtBF,KAEAG,MAAGoS,EAAuBv1B,QACnBA,EACHP,WAAW,MACb,EAEF0jB,MAAGoS,EAA2B,CAACv1B,GAAS5Q,YAAK,IACtC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGoS,EAA8B,CAACv1B,GAAS+1B,gBAAiB7F,EAAQO,OAAOsF,EAAY,IAChF/1B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOihD,EAAkB31B,EAAOtrB,EACpC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM+1B,aAGnErF,UAAWtjB,GAIX8iB,EAAQc,aAAa3N,GAKZ4S,IAHA1lC,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QACnD6mC,EAAuB3S,MAAelW,EAAQ2oB,GAAcA,EAAWjgD,OAAO+/C,IAA4B,IAApBA,EAAKC,gGCdjG,MAAMhU,KAAOC,MAAa,gCAAkCvU,KAA+Bh5B,QAAS,CAAEg5B,sBAEhGwU,KAAWD,MAAa,wCAAsCE,SAI9DC,KAAcH,MAAa,2CAAyCE,2ZCE1E,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAsnC,GADA1wD,KAAAopB,YACAppB,KAAA0wD,wBAGL1wD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOonC,OAA6B,EACpClnC,KAAUva,GAAUlP,KAAK0wD,sBAAsBxoB,SAAS,MAAM1nC,QAC1DkQ,KAAIkgD,GAAsBD,KAAqC,CAAEC,wBAAoB,EACrFjnC,KAAWC,MAASC,MAAG8mC,KAAkC,CAAE/mC,gBAPnE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oBCFb,MAAMwN,cAA4CC,GAAuC,CAC5FC,SAAUxiB,GAAqBA,EAAkBn0B,KAGxCupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLinC,KAA2BnT,MAC7BF,KAEAG,MAAGgT,KAA+Bn2B,QAC3BA,EACHP,WAAW,MACb,EAEF0jB,MAAGgT,KAAmC,CAACn2B,GAAS5Q,YAAK,IAC9C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGgT,KAAsC,CAACn2B,GAASo2B,wBAAyBlG,EAAQO,OAAO2F,EAAoB,IACxGp2B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO2hD,EAAyBr2B,EAAOtrB,EAC3C,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMo2B,qBAGnE1F,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZiT,EAA2B9oB,MAA4B8V,MAChElW,EACAmpB,GAASA,EAAMzgD,OAAO0gD,GAAQA,EAAKC,kBAAoBjpB,IAE9Cjd,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,0cChBzD,MAAM0yB,KAAOC,MAAa,8BAEpBC,KAAWD,MAAa,qCAAmCE,SAI3DC,KAAcH,MAAa,wCAAsCE,SAIjE4M,KAAS9M,MAAa,iCAA+BE,SAKrD6M,KAAa/M,MAAa,uCAAqCE,SAI/D8M,KAAgBhN,MAAa,0CAAwCE,SAIrE+M,KAAUjN,MAAa,iCAA+BE,SAItDyM,KAAO3M,MAAa,+BAA6BE,SAIjD0M,KAAW5M,MAAa,qCAAmCE,SAI3D2M,KAAc7M,MAAa,wCAAsCE,0LCrBvE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAsnC,EACAhH,GAFA1pD,KAAAopB,YACAppB,KAAA0wD,wBACA1wD,KAAA0pD,kBAGL1pD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAAyB,EAChCznC,KAAUva,IAAUlP,KAAK0wD,sBAAsB7pC,MAAMrmB,QACjDkQ,KAAIygD,IAAkBD,EAAiC,CAAEC,qBAAgB,EACrExnC,KAAWC,OAASC,MAAGqnC,EAA8B,CAAEtnC,kBAMhE5pB,KAAA6pD,SAAQvgC,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAAyB,EAChCznC,KAAUva,IAAUlP,KAAK0wD,sBAAsBnpB,KAAKr4B,GAAO64B,eAAevnC,QACtEkQ,KAAIq3B,IAAiBmpB,EAAiC,CAAEnpB,qBAAgB,EACxEpe,KAAWC,OAASC,MAAGqnC,EAA8B,CAAEtnC,iBAK5D5pB,KAAA8pD,gBAAexgC,MAClB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAAgC,EACvCznC,KAAUva,IAAU,CAChBkiD,mBACAF,IACAG,KAA+B,MAC/BC,OAAY,CAAExmD,WAASymD,MAA4B,cACtD,EACD11C,KAAIoP,KACAjrB,KAAK0pD,gBAAgBK,OAAK,KAK/B/pD,KAAAwxD,aAAYloC,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAA6B,EACpC/mC,KAASP,IAAS,CACd0nC,OAAY,CACRxmD,QAAS,CACLpL,KAAM,QACNE,QAASgqB,GAAMA,MAAMhqB,QACrBk/C,UAAW,WAOxB9+C,KAAAuqD,WAAUjhC,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAA2B,EAClCznC,KAAUva,IAAUlP,KAAK0wD,sBAAsBxoC,OAAOhZ,GAAO84B,gBAAiB94B,GAAO+4B,oBAAoBznC,QACrGkQ,KAAIqc,IACIA,GAASy9B,UACF0G,EAAmC,CAAElpB,gBAAiBjb,GAASkkC,kBACjElkC,GAAS0kC,gCACPP,EAAgC,CACnCtnC,MAAO,CACHqnC,gBAAiBlkC,GAASkkC,gBAC1BQ,gCAAiC1kC,GAAS0kC,wCAJjD,IAOR,EACD9nC,KAAWC,OAASC,MAAGqnC,EAAgC,CAAEtnC,iBAK9D5pB,KAAAsqD,kBAAiBhhC,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAAkC,EACzCznC,KAAUva,IAAU,CAChBkiD,mBACAjH,OACAA,OACAmH,OAAY,CAAExmD,WAASymD,MAA4B,iBAKxDvxD,KAAAgqD,eAAc1gC,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2nC,IAA+B,EACtC/mC,KAASjb,IACDA,GAAO0a,MAAM6nC,gCACN,CAACtH,KAA0C,CAAEr/C,QAAS,CAAEic,KAAM,CAAE2qC,wBAAyBxiD,GAAO0a,MAAMqnC,qBAGtG,CACH9G,OACAA,OACA5pD,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,gCAAkCsP,GAAO0a,MAAMhqB,QACxDk/C,UAAW,UApGnC,CAAC79C,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,KAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCNb,MAAMwN,cAAUC,GAAmC,CACtDC,SAAU7iB,GAAiBA,EAAc9zB,KAGhCupC,EAAsBkN,EAAQI,gBAAgB,CACvD9L,WAAY,KACZj0B,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACV8L,YAAY,EACZnhC,MAAO,OCjBL+nC,MAAuBjU,MACzBF,KAEAG,MAAGuT,EAA6B,CAAC12B,GAASwN,sBAAe,IAClDxN,EACHwkB,WAAYhX,MACd,EAEF2V,MAAGuT,EAA2B12B,QACvBA,EACHP,WAAW,MACb,EAEF0jB,MAAGuT,EAA+B,CAAC12B,GAAS5Q,YAAK,IAC1C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGuT,EAAkC,CAAC12B,GAAS22B,oBAAqBzG,EAAQO,OAAOkG,EAAgB,IAC5F32B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGuT,EAA6B,CAAC12B,QAAwB,IAClDA,EACHuwB,YAAY,MACd,EAEFpN,MAAGuT,EAAoC,CAAC12B,GAASwN,qBAAsB0iB,EAAQ1S,UAAUhQ,EAAiB,IACnGxN,EACHuwB,YAAY,MACd,EAEFpN,MAAGuT,EAA2B,CAAC12B,QAAsB,IAC9CA,EACHykB,UAAU,MACZ,EAEFtB,MAAGuT,EAAkC,CAAC12B,QAAsB,IACrDA,EACHykB,UAAU,MACZ,EAEFtB,MAAGuT,EAA+B,CAAC12B,QAAc,IAC1CA,EACHykB,UAAU,MAKZ,SAAUrB,EAAQpjB,EAA0BtrB,GAC9C,OAAOyiD,GAAqBn3B,EAAOtrB,EACvC,gBCrDO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM22B,iBAGnEjG,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,MAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDglB,MAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UACnDjB,MAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD6hC,MAAgB3N,MAAeD,EAAUrjB,GAASA,EAAMwkB,YACxD0M,KAAc5N,MAAe/b,EAAa0pB,GACnD,CAACvxB,EAAU8kB,SAEgC9kB,EAAS8kB,4ICvBjD,MAAM1C,KAAOC,MAAa,4BACpBC,KAAWD,MAAa,gCAAkC3yB,KAAuB5a,QAAS,CAAE4a,YAC5F8yB,KAAcH,MAAa,mCAAqCqV,KAAmC5iD,QAAS,CAAE4iD,mGCMpH,IAAM1U,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAyoC,GADA7xD,KAAAopB,YACAppB,KAAA6xD,sBAGL7xD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOuoC,IAAuB,EAC9BroC,KAAUva,GAAUlP,KAAK6xD,oBAAoBjqB,SAASpnC,QAClDkQ,KAAIkhD,IAAgBE,EAA+BF,KAAY,EAC/DjoC,KAAWC,OAASC,MAAGioC,EAA4BloC,UAP3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAiC,CACpDC,SAAUmH,GAAeA,EAAY/gD,KAG5BwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLooC,KAAqBtU,MACvBF,KAEAG,MAAGmU,EAAyBt3B,QACrBA,EACHP,WAAW,MACb,EAEF0jB,MAAGmU,EAA6B,CAACt3B,GAASxrB,cAAO,IAC1CwrB,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,EAAQ4a,UACjB,EAEF+zB,MAAGmU,EAAgC,CAACt3B,GAASxrB,aAAc07C,EAAQO,OAAOj8C,EAAQ4iD,aAAc,IACzFp3B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO8iD,EAAmBx3B,EAAOtrB,EACrC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMo3B,eAGnE1G,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,+LCbzD,MAAM0yB,KAAOC,MAAa,0BACpBC,KAAWD,MAAa,iCAA+BE,SACvDC,KAAcH,MAAa,oCAAkCE,yFCMnE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA6oC,GADAjyD,KAAAopB,YACAppB,KAAAiyD,oBAGLjyD,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2oC,IAAsB,EAC7BzoC,KAAUva,GAAUlP,KAAKiyD,kBAAkBrqB,SAASpnC,QAChDkQ,KAAIyhD,GAAcD,EAA8B,CAAEC,gBAAY,EAC9DxoC,KAAWC,MAASC,MAAGqoC,EAA2B,CAAEtoC,gBAP5D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oBCNpB,MAAMkV,KAAoB1U,MACtBF,OAEAG,MAAGuU,EAAwB13B,QACpBA,EACHP,WAAW,MACb,EAEF0jB,MAAGuU,EAA4B,CAAC13B,GAAS5Q,YAAK,IACvC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGuU,EAA+B,CAAC13B,GAAS23B,gBAAiBzH,IAAQO,OAAOkH,EAAY,IACjF33B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOkjD,EAAkB53B,EAAOtrB,EACpC,6LCnBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM23B,aAGnEjH,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GAEXX,IAAQc,aAAa3N,GAMZwU,IAJAtnC,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QAEnDyoC,EAAqBvU,MAAelW,EAAQuqB,GAAcA,EAAW7hD,OAAOgiD,IAAcA,EAAUC,sBACpGC,KAA4B1U,MAAelW,EAAQuqB,GAAcA,EAAW7hD,OAAOgiD,GAAaA,EAAUC,qBAE1GE,KAAiB3U,MAC1BuN,EACAtpB,EACA1f,KACA,CAACqwC,EAAeC,EAAmBC,IAAsBF,EAAIrjC,OAAO,CAAC1B,EAAQ9c,KACzE,MAAMyhD,EAAYK,EAAkB9hD,GAEpC,OAAIyhD,IACA3kC,EAAO9c,GAAeyhD,EAAU9yC,WAAWlP,OAAOS,GAAa6hD,EAAkB7hD,EAAUC,KAAKN,IAAIK,QAC7F6hD,EAAkB7hD,EAAUC,IAC/BtN,KAAMqN,EAAU8hD,QAChB1wD,KAAM4O,EAAU5O,KAChBs/C,aAAc1wC,EAAU0wC,gBACxBtb,KAAK,CAACC,EAAGC,IAAMD,EAAEqb,aAAepb,EAAEob,eAGnC9zB,GAER,KAGMtiB,KAAgByyC,MACzB2U,EACAlyD,cACA,CAACif,EAAYszC,IAAcjiD,GAAwB2O,EAAW3O,IAAcH,IAAIK,QACzEA,EACHoP,MAAOpP,EAAUoP,MAAM7P,OAAOyP,IAAQ+yC,GAAW/yC,EAAKgzC,aAAoBriD,IAAIqP,QACvEA,EACHizC,YAAajzC,EAAKizC,eAAgBF,GAAW/yC,EAAKkzC,2BAEtD3iD,OAAOS,GAAaA,EAAUoP,MAAM7c,OAAS,IAAM,IAG9C4vD,KAAoBpV,MAC7BzyC,EACAA,GAAkBwF,GAAwBxF,EAAcwF,GAAa,IAG5DsiD,KAAsBrV,MAC/BoV,EACAA,GAAsBriD,GAAwBqiD,EAAkBriD,IAAcG,IAAM,8DC1DjF,MAAM05C,cAAUC,GAA+B,CAClDC,SAAU0H,GAAaA,EAAUthD,KAGxBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,yFCbJ,MAAMwpC,KAAO7W,MAAa,+CAAgD,MAAQvtC,QAAS,CAAErO,QAAQ,MAC/F0yD,KAAQ9W,MAAa,gDAAiD,MAAQvtC,QAAS,CAAErO,QAAQ,MAEjG2yD,KAA8B/W,MAAa,yDAA0D,MAAQvtC,QAAS,CAAEukD,+BAA+B,MACvJC,KAA+BjX,MAAa,0DAA2D,MAAQvtC,QAAS,CAAEukD,+BAA+B,8BCFtK,MAAME,KAAyB/V,MCDI,CAC/B/8C,QAAQ,EACR4yD,+BAA+B,IDAjC/V,EAEAG,MAAG+V,EAAoBl5B,GAAUvP,UAAQ,GAAIuP,EAAO,CAClD75B,QAAQ,MACR,EAGFg9C,MAAG+V,EAAqBl5B,GAAUvP,UAAQ,GAAIuP,EAAO,CACnD75B,QAAQ,MACR,EAGFg9C,MAAG+V,EAA2Cl5B,QACzCA,EACH+4B,+BAA+B,MAC/B,EAEF5V,MAAG+V,EAA4Cl5B,QAC1CA,EACH+4B,+BAA+B,MAK7B,SAAU3V,EAAQpjB,EAA0BtrB,GAChD,OAAOukD,EAAuBj5B,EAAOtrB,EACvC,gBE9BO,MAAMykD,KAA0B7V,MAAe8V,IAAgBp5B,GAASA,EAAMq5B,iBAExEC,KAA2BhW,MACpC6V,EACAn5B,GAASA,EAAM75B,QAGNozD,KAAmCjW,MAC5C6V,EACAn5B,GAASA,EAAM+4B,gKCRZ,MAAM1V,KAAWC,MAAekW,IAAgBx5B,GAASA,EAAMy5B,kBAGzDC,KAAapW,MACtBD,EACArjB,GAAU,GAAyB25B,UAAU35B,EAAMk4B,IAAIhiD,IAAIM,GAAMwpB,EAAMN,SAASlpB,MAGvEq6C,KAASvN,MAAeD,EAAUrjB,GAASA,EAAMk4B,KAEjD0B,EAAkBruB,MAAwB+X,MACnDD,EACArjB,GAASA,EAAMN,SAAS6L,IAGfhb,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,glBCfzD,MAAM0yB,KAAOC,MAAa,yCAC7B,CAACjuC,EAAiBi4B,GAAqB,EAAMC,IAA2B,MAAax3B,QAAS,CAAEV,UAASi4B,YAAWC,uBAC3GgW,KAAWD,MAAa,8CACjC,CAACjuC,EAAiBsb,MAAuB5a,QAAS,CAAEV,UAASsb,YACpD8yB,KAAcH,MAAa,iDACpC,CAACjuC,EAAiB+lD,MAA6CrlD,QAAS,CAAEV,UAAS+lD,wBAE1EC,KAAiC/X,MAAa,2CACtD7V,KAAoC13B,QAAS,CAAE03B,YACvC6tB,KAAqChY,MAAa,gDAC3D,CAAC7V,EAA8B9c,MAAuB5a,QAAS,CAAE03B,QAAO9c,YAC/D4qC,KAAwCjY,MAAa,mDAC9D,CAAC7V,EAA8B+tB,MAAwBzlD,QAAS,CAAE03B,QAAO+tB,cAEhEC,KAAmBnY,MAAa,2BACzC,CAACjuC,EAAiBqmD,MAA6CrmD,UAASqmD,gBAC/DC,KAA0BrY,MAAa,mCAC/CjuC,KAAuBA,aACfumD,KAAuBtY,MAAa,iCAC5C3yB,KAAuBA,WAGfkrC,KAAiBvY,MAAa,iCACvC,CAACjuC,EAAiBqmD,MAAiDrmD,UAASqmD,gBACnEI,KAAwBxY,MAAa,yCAC7CjuC,KAAuBA,aACf0mD,KAAqBzY,MAAa,uCAC1C3yB,KAAuBA,0BCbrB,MAAM8gC,cAAUC,GAAsC,CACzDC,SAAUqK,GAAmBA,EAAgBC,cAGpC1X,EAAsBkN,EAAQI,gBAAgB,CACvDqK,YAAY,EACZC,wBAAuB,EACvBC,sBAAqB,EACrBvN,MAAO,KCpBLwN,KAA2B5X,MAC7BF,KAEAG,MAAG4X,EAAc,CAAC/6B,GAASxrB,aAAcic,QAAQ,GAAIuP,EAAO,CACxDstB,MAAO,CACH,CAAC94C,EAAQV,SAAU,CACf2rB,WAAW,QAGrB,EAEF0jB,MAAG4X,EAAkB,CAAC/6B,GAASxrB,aAAcic,QAAQ,GAAIuP,EAAO,CAC5DstB,MAAO,CACH,CAAC94C,EAAQV,SAAU,CACfyc,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,EAAQ4a,YAGzB,EAEF+zB,MAAG4X,EAAqB,CAAC/6B,GAASxrB,aAAc07C,EAAQ8K,WAAWxmD,EAAQqlD,kBAAmBppC,QAAQ,GAAIuP,EAAO,CAC7GstB,MAAO,CACH,CAAC94C,EAAQV,SAAU,CACfokD,IAAK1jD,EAAQqlD,kBAAkB3jD,IAAI+kD,IAAYA,GAASP,aAExDnqC,UAAU,EACVkP,WAAW,EACXrQ,MAAO,YAGhB,EAEH+zB,MAAG4X,EAA2B/6B,QACvBA,EACH46B,wBAAwB,MAC1B,EAEFzX,MAAG4X,EAA8B,CAAC/6B,GAAS5Q,YAAK,IACzC4Q,EACH46B,wBAAwB,EACxBxrC,MAAOA,MACT,EAEF+zB,MAAG4X,EAAiC/6B,QAC7BA,EACH46B,wBAAwB,MAC1B,EAEFzX,MAAG4X,EAAyB/6B,QACrBA,EACH66B,sBAAsB,MACxB,EAEF1X,MAAG4X,EAA4B,CAAC/6B,GAAS5Q,YAAK,IACvC4Q,EACH66B,sBAAsB,EACtBzrC,MAAOA,MACT,EAEF+zB,MAAG4X,EAA+B/6B,QAC3BA,EACH66B,sBAAsB,MACxB,EAEF1X,MAAG4X,EAAyC/6B,QACrCA,EACH26B,YAAY,MACd,EAEFxX,MAAG4X,EAA4C,CAAC/6B,GAASxrB,cAAO,IACzDwrB,EACH26B,YAAY,EACZvrC,MAAO5a,EAAQ4a,UACjB,EAEF+zB,MAAG4X,EAA+C/6B,QAC3CA,EACH26B,YAAY,MAId,SAAUvX,EAAQpjB,EAA0BtrB,GAC9C,OAAOomD,EAAyB96B,EAAOtrB,EAC3C,gBCnFO,MAAMwmD,KAA0B5X,MAAekW,IAAgBx5B,GAASA,EAAMm7B,2BAGjFxK,eAAgByK,GAChBlL,EAAQc,aAAakK,GAEZG,KAAgB/X,MAAe4X,EAAyBl7B,GAASA,EAAM26B,YACvEW,KAA4BhY,MAAe4X,EAAyBl7B,GAASA,EAAM46B,wBACnFW,KAA0BjY,MAAe4X,EAAyBl7B,GAASA,EAAM66B,sBAExFW,EAAa1nD,MAAoBwvC,MAAe4X,EAAyBl7B,GAASA,GAASA,EAAMstB,OAASttB,EAAMstB,MAAMx5C,IAE/Gs5B,EAAUt5B,MAAoBwvC,MACvCkY,EAAU1nD,GACVsnD,EACA,CAAC9N,EAAO5tB,KAAa4tB,GAASA,EAAM4K,KAAO5K,EAAM4K,IAAIhiD,IAAIM,GAAMkpB,IAAYA,GAASlpB,KAG3E+wB,EAAezzB,MAAoBwvC,MAC5CuN,EAAO/8C,GACPsnD,EACA,CAAClD,EAAKx4B,KAAaw4B,EAAIrjC,OAAO,CAAC4mC,EAAYjlD,SACpCilD,EACH5vB,CAACr1B,GAAKkpB,IAAYA,GAASlpB,KAC3B,KAAqC,IAGhCq6C,EAAU/8C,MAAoBwvC,MACvCkY,EAAU1nD,GACVw5C,GAASA,GAASA,EAAM4K,KAAO,kVClC5B,MAAMpW,KAAOC,MAAa,sBACpBC,KAAWD,MAAa,6BAA2BE,SACnDC,KAAcH,MAAa,gCAA8BE,wBCAtE,MAAMyZ,KAAgBxY,MAClBF,OAEAG,MAAGwY,EAAmB37B,QACfA,EACHP,WAAW,MACb,EAEF0jB,MAAGwY,EAAuB,CAAC37B,GAAS5Q,YAAK,IAClC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGwY,EAA0B,CAAC37B,GAAS47B,YAAa1L,IAAQO,OAAOmL,EAAQ,IACpE57B,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOgnD,EAAc17B,EAAOtrB,EAChC,8KCzBO,MAAMmnD,KAAmBvY,MAAekW,IAAgBx5B,GAASA,EAAMN,WAG1EgxB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,IAAQc,aAAa6K,GAEZC,KAAkBxY,MAC3BlW,EACCwuB,GACUA,EAAOjwB,KAAK,CAACC,EAAGC,IAAOD,EAAEjkC,KAAOkkC,EAAElkC,KAAQ,GAAI,IAIhD4oB,KAAW+yB,MAAeuY,EAAkB77B,GAASA,EAAMzP,UAC3DkP,KAAY6jB,MAAeuY,EAAkB77B,GAASA,EAAMP,WAC5D+jB,KAAWF,MAAeuY,EAAkB77B,GAASA,EAAM5Q,+DCdjE,MAAM8gC,cAAUC,GAA2B,CAC9CC,SAAUn/B,GAASA,EAAMza,GACzB65C,aAAcA,CAACzkB,EAAGC,IAAMD,EAAEjkC,KAAOikC,EAAEjkC,KAAK4/C,cAAc1b,EAAElkC,MAAQ,IAGvDq7C,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,8jNCdJ,MAAMqjC,KAAQ1Q,MAAa,4BAA8BjuC,KAAuBU,QAAS,CAAEV,cAErFguC,MAAOC,MAAa,2BAA6BjuC,KAAuBU,QAAS,CAAEV,cACnFkuC,KAAWD,MAAa,gCAAiC,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aACtH8yB,KAAcH,MAAa,mCAAoC,CAACjuC,EAAiB4gD,OAA4BlgD,QAAS,CAAEV,UAAS4gD,wCCOvI,MAAMxE,KAAUC,KAAgC,CACnDC,SAAUyE,GAASA,EAAMr+C,KAGhBwsC,EAAsBkN,EAAQI,gBAAgB,CACvDhD,MAAO,OCZLyO,KAAmB7Y,MACrBF,KAEAG,MAAG6Y,GAAmB,CAACh8B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC7DstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf2rB,WAAW,QAGrB,EAEF0jB,MAAG6Y,EAAuB,CAACh8B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACjEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfyc,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,YAGzB,EAEF+zB,MAAG6Y,EAA0B,CAACh8B,GAASxrB,cAC5B07C,EAAQ8K,WAAWxmD,GAAQkgD,OAAQ,IACnC10B,EACHstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfokD,IAAK1jD,GAAQkgD,OAAOx+C,IAAI2+C,IAASA,GAAMr+C,IAEvC+Z,UAAU,EACVkP,WAAW,EACXrQ,MAAO,WAOrB,SAAUg0B,EAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,EAAiB/7B,EAAOtrB,GACnC,yCCnCO,MAAMunD,MAAiB3Y,MAAekW,KAAgBx5B,GAASA,EAAM00B,SAGxE/D,eAAgByK,GAChBlL,EAAQc,aAAaiL,IAEnBT,EAAa1nD,MAAoBwvC,MAAe2Y,GAAgBj8B,IAASA,IAASA,GAAMstB,OAASttB,GAAMstB,MAAMx5C,IAEtGs5B,EAAUt5B,MAAoBwvC,MACvCkY,EAAU1nD,GACVsnD,EACA,CAAC9N,GAAO5tB,KAAa4tB,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,MAG3E+wB,EAAezzB,MAAoBwvC,MAC5CuN,EAAO/8C,GACPsnD,EACA,CAAClD,GAAKx4B,KAAaw4B,GAAIrjC,OAAO,CAAC4mC,GAAYjlD,UACpCilD,GACHS,CAAC1lD,IAAKkpB,IAAYA,GAASlpB,MAC3B,KAAiC,IAG5Bq6C,EAAU/8C,MAAoBwvC,MACvCkY,EAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO,IAGtBnH,EAAYj9C,MAAoBwvC,MACzCkY,EAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIpvD,QAAU,GAG1CynB,GAAYzc,MAAoBwvC,MAAekY,EAAU1nD,GAAUw5C,IAASA,GAAM/8B,UAClFkP,GAAa3rB,MAAoBwvC,MAAekY,EAAU1nD,GAAUw5C,IAASA,GAAM7tB,WACnF+jB,GAAY1vC,MAAoBwvC,MAAekY,EAAU1nD,GAAUw5C,IAASA,GAAMl+B,OAElFoY,GAAYA,CAAC1zB,EAAiBksB,QAAwBsjB,MAC/DlW,EAAOt5B,GACP7D,gBAAuC6D,GACvC,CAAC4gD,GAAQloB,KAAekoB,KACpB10B,GACM00B,IAAQ5+C,OAAO++C,IAASroB,GAAW6oB,KAAK8G,IAAatH,GAAMvkB,cAAgB6rB,GAAU3lD,MAAQq+C,GAAMuH,YAAcvH,GAAMwH,eAAiBliC,MAAYC,SACpJs6B,KACL,IAGI4H,GAAiBA,CAACxoD,EAAiBksB,QAAwBsjB,MACpE9b,GAAU1zB,EAASksB,IACnB00B,IAAUA,IAAUA,GAAO5rD,QAAU,GCzD5B2pD,MAAQ1Q,MAAa,2DAA6DjuC,KAAuBU,QAAS,CAAEV,cAEpHguC,MAAOC,MAAa,0DAA4DjuC,KAAuBU,QAAS,CAAEV,cAClHkuC,MAAWD,MAAa,+DAAgE,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aACrJ8yB,MAAcH,MAAa,kEAAmE,CAACjuC,EAAiByoD,OAAmF/nD,QAAS,CAAEV,UAASyoD,yCCEvNvZ,GAAsB,CAC/BzyB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KACPmtC,kCAAmC,MCNjCR,MAAmB7Y,MACrBF,MAEAG,MAAGqZ,GAA+C,CAACx8B,QAAgB,IAC5DA,EACHP,WAAW,MACb,EAEF0jB,MAAGqZ,GAAmD,CAACx8B,GAASxrB,eAAO,IAChEwrB,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAGqZ,GAAsD,CAACx8B,GAASxrB,eAAO,IACrEwrB,EACHP,WAAW,EACXlP,UAAU,EACVgsC,kCAAmC/nD,GAAQ+nD,sCAI3C,SAAUnZ,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,CC7BO,MAAM+nD,MAA4CnZ,MAAekW,KAAgBx5B,GAASA,EAAMu8B,mCAE1FhsC,MAAW+yB,MAAemZ,GAA2Cz8B,GAASA,EAAMzP,UACpFkP,MAAY6jB,MAAemZ,GAA2Cz8B,GAASA,EAAMP,WACrF+jB,MAAWF,MAAemZ,GAA2Cz8B,GAASA,EAAM5Q,OAEpFqY,MAAuC6b,MAChDmZ,GACAz8B,GAASA,GAASA,EAAMu8B,mCAAqC,ICRpD9J,MAAQ1Q,MAAa,yCAA2CjuC,KAAuBU,QAAS,CAAEV,cAElGguC,MAAOC,MAAa,wCAAyC,CAACjuC,EAAiB6zB,GAAiBC,OAAqBpzB,QAAS,CAAEV,UAAS6zB,aAAWC,eACpJoa,MAAWD,MAAa,6CAA8C,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aACnI8yB,MAAcH,MAAa,gDAAiD,CAACjuC,EAAiB4oD,OAAoDloD,QAAS,CAAEV,UAAS4oD,0BAEtKC,MAAkB5a,MAAa,+CAAiD6a,KAA8BpoD,QAAS,CAAEooD,YCGzH5Z,GAAsB,CAC/BzyB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KACPytC,kBAAmB,MACnBH,mBAAoB,KACpB/0B,UAAW,KACXC,QAAS,MCZPm0B,MAAmB7Y,MACrBF,MAEAG,MAAG2Z,GAA+B,CAAC98B,QAAgB,IAC5CA,EACHP,WAAW,MACb,EAEF0jB,MAAG2Z,GAAmC,CAAC98B,GAASxrB,eAAO,IAChDwrB,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG2Z,GAAsC,CAAC98B,GAASxrB,eAAO,IACrDwrB,EACHP,WAAW,EACXlP,UAAU,EACVmsC,mBAAoBloD,GAAQkoD,uBAC5B,EAEFvZ,MAAG2Z,GAA0C,CAAC98B,GAASxrB,eAEnD,IAAImzB,GAAY,IAAI3U,KAChB4U,GAAU,IAAI5U,KAElB,MAAqB,UAAlBxe,GAAQooD,OACPj1B,GAAUo1B,SAAS,EAAE,EAAE,EAAE,GACzBp1B,GAAUq1B,QAAQr1B,GAAUs1B,UAAY,KAGxCt1B,GAAUq1B,QAAQr1B,GAAUs1B,UAAY,GAGpC,IACDj9B,EACH68B,kBAAmBroD,GAAQooD,MAC3Bj1B,UAAWA,GACXC,QAASA,OAKf,SAAUwb,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,iBC7CO,MAAMwoD,MAA6B5Z,MAAekW,KAAgBx5B,GAASA,EAAM08B,oBAE3EnsC,KAAW+yB,MAAe4Z,GAA4Bl9B,GAASA,EAAMzP,UACrEkP,KAAY6jB,MAAe4Z,GAA4Bl9B,GAASA,EAAMP,WACtE+jB,MAAWF,MAAe4Z,GAA4Bl9B,GAASA,EAAM5Q,OAErE+tC,MAAuB7Z,MAAe4Z,GAA4Bl9B,GAASA,EAAM68B,mBAEjFO,MAAe9Z,MAAe4Z,GAA4Bl9B,GAASA,EAAM2H,WACzE01B,MAAa/Z,MAAe4Z,GAA4Bl9B,GAASA,EAAM4H,SAEvEF,MAAwB4b,MACjC4Z,GACAl9B,GAASA,GAASA,EAAM08B,oBAAsB,IAGrCY,MAAkCha,MAC3C5b,GACAhhB,eACA,CAAC62C,EAAQnO,KAAgBmO,EAAOrnD,IAAKsnD,MAC7BC,MAAOD,GAAEC,MACTt0D,MAAOimD,GAAYoO,GAAEvwB,cAAcz0B,KACnC6xC,MAAO,IAAI+E,GAAYoO,GAAEvwB,cAAcxW,YAKtCinC,MAA4Bpa,MACrC5b,GACA61B,GAAUA,GAAUA,EAAO1oC,OAAO,CAAC8oC,GAAMr3D,KAASq3D,GAAOr3D,GAAKm3D,MAAO,IAAM,GAGlEG,MAA+Bta,MACxC5b,GACAg2B,GACAh3C,eACA,CAAC62C,EAAQM,GAAYzO,OACjB14C,MAAO,CACHgI,KAAM,GAAGm/C,MAEb5T,SAAU,CACNvrC,KAAM,wBAEV2tC,QAAS,CACLjB,SAAS,EACToC,YAAa,8CAEjBtD,OAAQ,CAAC,CACLhlD,KAAM,MACNyC,KAAM,sBACN4kB,KAAMgxC,EAAOrnD,IAAIunD,MACb91D,KAAMynD,GAAYqO,GAAMxwB,cAAcz0B,KACtC2xC,EAAGsT,GAAMA,MACTpT,MAAO,IAAI+E,GAAYqO,GAAMxwB,cAAcxW,gBC1D9Cg8B,MAAQ1Q,MAAa,mDAAqDjuC,KAAuBU,QAAS,CAAEV,cAE5GguC,MAAOC,MAAa,kDAAmD,CAACjuC,EAAiB6zB,GAAiBC,OAAqBpzB,QAAS,CAAEV,UAAS6zB,aAAWC,eAC9Joa,MAAWD,MAAa,uDAAwD,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aAC7I8yB,MAAcH,MAAa,0DAA2D,CAACjuC,EAAiBgqD,OAA0CtpD,QAAS,CAAEV,UAASgqD,kCAEtKnB,MAAkB5a,MAAa,+DAAiE6a,KAA8BpoD,QAAS,CAAEooD,YCGzI5Z,GAAsB,CAC/BzyB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KACPytC,kBAAmB,MACnBiB,2BAA4B,KAC5Bn2B,UAAW,KACXC,QAAS,MCZPm0B,MAAmB7Y,MACrBF,MAEAG,MAAG4a,GAAwC,CAAC/9B,QAAgB,IACrDA,EACHP,WAAW,MACb,EAEF0jB,MAAG4a,GAA4C,CAAC/9B,GAASxrB,eAAO,IACzDwrB,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4a,GAA+C,CAAC/9B,GAASxrB,eAAO,IAC9DwrB,EACHP,WAAW,EACXlP,UAAU,EACVutC,2BAA4BtpD,GAAQspD,+BACpC,EAEF3a,MAAG4a,GAAmD,CAAC/9B,GAASxrB,eAE5D,IAAImzB,GAAY,IAAI3U,KAChB4U,GAAU,IAAI5U,KAElB,MAAoB,SAAjBxe,GAAQooD,OACPj1B,GAAUo1B,SAAS,EAAE,EAAE,EAAE,GACzBp1B,GAAUq1B,QAAQr1B,GAAUs1B,UAAY,KAGxCt1B,GAAUq1B,QAAQr1B,GAAUs1B,UAAY,GAGpC,IACDj9B,EACH68B,kBAAmBroD,GAAQooD,MAC3Bj1B,UAAWA,GACXC,QAASA,OAKf,SAAUwb,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,CCnDO,MAAMspD,MAAqC1a,MAAekW,KAAgBx5B,GAASA,EAAM89B,4BAEnFvtC,MAAW+yB,MAAe0a,GAAoCh+B,GAASA,EAAMzP,UAC7EkP,MAAY6jB,MAAe0a,GAAoCh+B,GAASA,EAAMP,WAC9E+jB,MAAWF,MAAe0a,GAAoCh+B,GAASA,EAAM5Q,OAE7E+tC,MAAuB7Z,MAAe0a,GAAoCh+B,GAASA,EAAM68B,mBAEzFO,MAAe9Z,MAAe0a,GAAoCh+B,GAASA,EAAM2H,WACjF01B,MAAa/Z,MAAe0a,GAAoCh+B,GAASA,EAAM4H,SAE/EC,MAAgCyb,MACzC0a,GACAh+B,GAASA,GAASA,EAAM89B,4BAA8B,GAG7CG,MAAyC3a,MAClDzb,GACC41B,KACGA,MAAOA,EACPt0D,MAAO,0BACPkhD,MAAO,aCpBFvI,MAAOC,MAAa,+BAAiCmc,KAA2B1pD,QAAS,CAAE0pD,mBAC3Flc,MAAWD,MAAa,oCAAsC3yB,KAAuB5a,QAAS,CAAE4a,YAChG8yB,MAAcH,MAAa,uCAAyCrW,KAAkCl3B,QAAS,CAAEk3B,cCQjHsX,GAAsB,CAC/BtjB,SAAU,GACVw4B,IAAK,GACL3nC,UAAU,EACVkP,WAAW,EACXrQ,MAAO,MCbL+uC,MAAiBjb,MACnBF,MAEAG,MAAG4X,GAAc/6B,QACVA,EACHP,WAAW,MACb,EAEF0jB,MAAG4X,GAAkB,CAAC/6B,GAASxrB,eAAO,IAC/BwrB,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,GAASxrB,eAE9B,MAAMkrB,GAAW,IACVM,EAAMN,YACNlrB,GAAQk3B,QAAQ7W,OAAO,CAAC1B,GAAQq4B,MAC1Br4B,GAAOq4B,GAAOkP,eACfvnC,GAAOq4B,GAAOkP,aAAe,IAEjCvnC,GAAOq4B,GAAOkP,aAAazkD,KAAKu1C,IACzBr4B,IACR,KAGP,MAAO,IACA6M,EACHN,YACAw4B,IAAKpgC,OAAOC,KAAK2H,IAAUxpB,IAAIkoD,KAAgBA,IAC/C7tC,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKb,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOypD,GAAen+B,EAAOtrB,GACjC,iBC3CO,MAAM+9C,MAAQ1Q,MAAa,2CAA6CjuC,KAAuBA,aAEzFguC,MAAOC,MAAa,0CAC7B,CAACjuC,EAAiB6zB,GAAiBC,OAAqB9zB,UAAS6zB,aAAWC,cACnEy2B,MAAiBtc,MAAa,sDACvC,CAACjuC,EAAiBo0B,OAAqBp0B,UAASo0B,YACvC8Z,MAAWD,MAAa,+CACjC,CAACjuC,EAAiBsb,OAAuBtb,UAASsb,YACzC8yB,MAAcH,MAAa,kDACpC,CAACjuC,EAAiB04B,OAA8C14B,UAAS04B,iBCEhE0jB,MAAUC,KAA8C,CACjEC,SAAU+L,GAAaA,EAAU3lD,KAGxBwsC,GAAsBkN,GAAQI,gBAAgB,CACvDhD,MAAO,KCZLyO,MAAmB7Y,MACrBF,MAEAG,MAAGmb,GAAuBA,GAAiC,CAACt+B,GAASlsB,cAAc2c,QAAQ,GAAIuP,EAAO,CAClGstB,MAAO,CACHiR,CAACzqD,IAAU,CACP2rB,WAAW,QAGrB,EAEF0jB,MAAGmb,GAA2B,CAACt+B,GAASlsB,WAASsb,YAAYqB,QAAQ,GAAIuP,EAAO,CAC5EstB,MAAO,CACHiR,CAACzqD,IAAU,CACPyc,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,SAGjB,EAEF+zB,MAAGmb,GAA8B,CAACt+B,GAASlsB,WAAS04B,iBAAiB0jB,GAAQ8K,WAAWxuB,GAAY/b,QAAQ,GAAIuP,EAAO,CACnHstB,MAAO,CACHiR,CAACzqD,IAAU,CACPokD,IAAK1rB,GAAWt2B,IAAIimD,IAAaA,GAAU3lD,IAC3C+Z,UAAU,EACVkP,WAAW,EACXrQ,MAAO,YAMjB,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,CClCO,MAAM8pD,MAAqBlb,MAAekW,KAAgBx5B,GAASA,EAAMy+B,sBAG5E9N,eAAgByK,IAChBlL,GAAQc,aAAawN,IAEnBhD,GAAa1nD,MAAoBwvC,MAAekb,GAAoBx+B,IAASA,IAASA,GAAMstB,OAASttB,GAAMstB,MAAMx5C,IAE1Gs5B,GAAUt5B,MAAoBwvC,MACvCkY,GAAU1nD,GACVsnD,GACA,CAAC9N,GAAO5tB,KAAa4tB,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,MAAQ,IAGnF+wB,GAAezzB,MAAoBwvC,MAC5CuN,GAAO/8C,GACPsnD,GACA,CAAClD,GAAKx4B,KAAaw4B,GAAIrjC,OAAO,CAAC4mC,GAAYjlD,UACpCilD,GACHS,CAAC1lD,IAAKkpB,IAAYA,GAASlpB,MAC3B,KAAqC,IAGhCq6C,GAAU/8C,MAAoBwvC,MACvCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO,IAGtBnH,GAAYj9C,MAAoBwvC,MACzCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIpvD,QAAU,GAG1C41D,GAAY5qD,MAAoBwvC,MAAekb,GAAoBx+B,IAASA,GAAMstB,MAAMx5C,IAAY,IAEpGyc,GAAYzc,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,MAAUA,IAAQA,GAAM/8B,UAC3FkP,GAAa3rB,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,KAAUA,IAAQA,GAAM7tB,WAC5F+jB,GAAY1vC,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,IAASA,GAAMl+B,uBC1CxF,MAAMqjC,MAAQ1Q,MAAa,gCAAkCjuC,KAAuBU,QAAS,CAAEV,cAEzFguC,MAAOC,MAAa,uCAAyCjuC,KAAuBU,QAAS,CAAEV,cAC/FkuC,MAAWD,MAAa,4CACrC,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aAChD8yB,MAAcH,MAAa,+CACxC,CAACjuC,EAAiB04B,OAA2Ch4B,QAAS,CAAEV,UAAS04B,kBCKpE0jB,MAAUC,KAA2C,CAC9DC,SAAU+L,GAAaA,EAAU1iD,KAGxBupC,GAAsBkN,GAAQI,gBAAgB,CACvDhD,MAAO,OCZLyO,MAAmB7Y,MACrBF,MAEAG,MAAGmb,GAAuB,CAACt+B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACjEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf2rB,WAAW,QAGrB,EAEF0jB,MAAGmb,GAA2B,CAACt+B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACrEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfyc,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,YAGzB,EAEF+zB,MAAGmb,GAA8B,CAACt+B,GAASxrB,cAAc07C,GAAQ8K,WAAWxmD,GAAQg4B,WAAY/b,QAAQ,GAAIuP,EAAO,CAC/GstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfokD,IAAK1jD,GAAQg4B,WAAWt2B,IAAIimD,IAAaA,GAAU1iD,IAEnD8W,UAAU,EACVkP,WAAW,EACXrQ,MAAO,YAMjB,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,CClCO,MAAM8pD,MAAqBlb,MAAekW,KAAgBx5B,GAASA,EAAM2+B,oBAG5EhO,eAAgByK,IAChBlL,GAAQc,aAAawN,IAEnBhD,GAAa1nD,MAAoBwvC,MAAekb,GAAoBx+B,IAASA,IAASA,GAAMstB,OAASttB,GAAMstB,MAAMx5C,IAE1Gs5B,GAAUt5B,MAAoBwvC,MACvCkY,GAAU1nD,GACVsnD,GACA,CAAC9N,GAAO5tB,KAAa4tB,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,MAAQ,IAGnF+wB,GAAezzB,MAAoBwvC,MAC5CuN,GAAO/8C,GACPsnD,GACA,CAAClD,GAAKx4B,KAAaw4B,GAAIrjC,OAAO,CAAC4mC,GAAYjlD,UACpCilD,GACHS,CAAC1lD,IAAKkpB,IAAYA,GAASlpB,MAC3B,KAA4C,IAGvCq6C,GAAU/8C,MAAoBwvC,MACvCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO,IAGtBnH,GAAYj9C,MAAoBwvC,MACzCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIpvD,QAAU,GAG1CynB,GAAYzc,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,IAASA,GAAM/8B,UAClFkP,GAAa3rB,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,IAASA,IAASA,GAAM7tB,WAC5F+jB,GAAY1vC,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,IAASA,GAAMl+B,OAGlFwvC,GAA6BA,CAAC9qD,EAAiB+qD,QAAkCvb,MAC1FlW,GAAOt5B,GACP04B,IAAcA,GAAWl2B,KAAK6lD,IAAaA,GAAU2C,wBAA0BD,KAGtEE,GAA0BA,CAACjrD,EAASy3B,QAAwB+X,MACrElW,GAAOt5B,GACP04B,IAAcA,GAAWl2B,KAAK6lD,IAAaA,GAAU1iD,KAAO8xB,KAAcyzB,SAGjEC,GAA0BnrD,MAAYwvC,MAC/ClW,GAAOt5B,GACP04B,IAAcA,GAAWt2B,IAAIgpD,IAAMA,GAAGF,SAASlpD,OAAO41B,IAAWA,GAAQ5iC,OAAS,IAGzEq2D,GAAwBrrD,MAAoBwvC,MACrDlW,GAAOt5B,GACP04B,IAAcA,GAAW12B,OAAOopD,KAAOA,GAAGpJ,aAGjCsJ,GAAwBtrD,MAAoBwvC,MACrDlW,GAAOt5B,GACP7D,gBAAgD6D,GAChD,CAAC04B,GAAY6yB,KAAe7yB,GAAW12B,OAAOopD,IAAMG,GAAW/oD,KAAKgpD,IAASA,GAAK5E,cAAgBwE,GAAGzlD,MCnE5Fg5C,MAAQ1Q,MAAa,gCAAkCjuC,KAAuBU,QAAS,CAAEV,cAEzFguC,MAAOC,MAAa,+BAAiCjuC,KAAuBU,QAAS,CAAEV,cACvFkuC,MAAWD,MAAa,oCACjC,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aACpD8yB,MAAcH,MAAa,uCACpC,CAACjuC,EAAiB04B,OAAoCh4B,QAAS,CAAEV,UAAS04B,kBAEjE+yB,MAAmBxd,MAAa,iCACzC,CAACjuC,EAAiBy3B,OAA2B/2B,QAAS,CAAEV,UAASy3B,mBACxDi0B,MAAuBzd,MAAa,sCAC7C,CAACjuC,EAAiBy3B,GAAqBnc,OAAuB5a,QAAS,CAAEV,UAASy3B,eAAanc,aACtFqwC,MAA0B1d,MAAa,yCAChD,CAACjuC,EAAiBy3B,GAAqB0uB,OAAwBzlD,QAAS,CAAEV,UAASy3B,mBCF1E2kB,MAAUC,KAAoC,CACvDC,SAAU+L,GAAaA,EAAU3lD,KAGxBwsC,GAAsBkN,GAAQI,gBAAgB,CACvDhD,MAAO,KCZLyO,MAAmB7Y,MACrBF,MAEAG,MAAGmb,GAAuB,CAACt+B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACjEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf2rB,WAAW,QAGrB,EAEF0jB,MAAGmb,GAA2B,CAACt+B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACrEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfyc,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,YAGzB,EAEF+zB,MAAGmb,GAA8B,CAACt+B,GAASxrB,cAChC07C,GAAQ8K,WAAWxmD,GAAQg4B,WAAY,IACvCxM,EACDstB,MAAO,IACFttB,EAAMstB,MACT,CAAC94C,GAAQV,SAAU,CACjBokD,IAAK1jD,GAAQg4B,WAAWt2B,IAAIimD,IAAaA,GAAU3lD,IACnD+Z,UAAU,EACVkP,WAAW,EACXrQ,MAAO,WAQnB,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,iBCpCO,MAAM8pD,MAAqBlb,MAAekW,KAAgBx5B,GAASA,EAAM0/B,kBAG5E/O,eAAgByK,IAChBlL,GAAQc,aAAawN,IAEnBhD,GAAa1nD,MAAoBwvC,MAAekb,GAAoBx+B,IAASA,IAASA,GAAMstB,OAASttB,GAAMstB,MAAMx5C,IAE1Gs5B,GAAUt5B,MAAoBwvC,MACvCkY,GAAU1nD,GACVsnD,GACA,CAAC9N,GAAO5tB,KAAa4tB,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,MAAQ,IAGnF+wB,GAAezzB,MAAoBwvC,MAC5CuN,GAAO/8C,GACPsnD,GACA,CAAClD,GAAKx4B,KAAaw4B,GAAIrjC,OAAO,CAAC4mC,GAAYjlD,UACpCilD,GACHS,CAAC1lD,IAAKkpB,IAAYA,GAASlpB,MAC3B,KAAqC,IAGhCq6C,GAAU/8C,MAAoBwvC,MACvCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO,IAGtBnH,GAAYj9C,MAAoBwvC,MACzCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIpvD,QAAU,GAG1CynB,GAAYzc,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,MAAUA,IAAQA,GAAM/8B,UAC3FkP,GAAa3rB,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,KAAUA,IAAQA,GAAM7tB,WAC5F+jB,GAAY1vC,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,IAASA,GAAMl+B,OAGlFwvC,GAA6BA,CAAC9qD,EAAiB+qD,QAAkCvb,MAC1FlW,GAAOt5B,GACP04B,IAAcA,GAAWl2B,KAAK6lD,IAAaA,GAAU0C,wBAA0BA,KAGtEc,GAAc7rD,MAAoBwvC,MAC3ClW,GAAOt5B,GACPgU,kBACA,CAAC0kB,GAAYozB,KAAmBpzB,GAAW12B,OAAOqmD,IAAayD,GAAezD,GAAU0D,mBAAmBC,YAAc3D,GAAUC,aAG1H2D,GAAmBjsD,MAAoBwvC,MAChDqc,GAAW7rD,GACX04B,IAAcA,IAAcA,GAAW1jC,QAAU,GAGxCk3D,GAAqBlsD,MAAoBwvC,MAClDlW,GAAOt5B,GACP04B,IAAcA,IAAcA,GAAW3X,OAAO,CAACorC,GAAM9D,MACjD,MAAM+D,GAAa,IAAIltC,KAAKmpC,GAAU+D,YACtC,OAAOA,GAAaD,GAAOC,GAAaD,IACzC,IAAIjtC,KAAK,KAAO,MAGVmtC,GAA8BrsD,MAAoBwvC,MAC3DlW,GAAOt5B,GACP04B,KACI,IAAI0yB,GAAK1yB,GAAW12B,OAAOopD,MAAQ,CAAC,GAAI,GAAI,IAAK,IAAK,GAAGtpD,SAASspD,GAAGW,qBAAyC,IAAlBX,GAAG9C,aAC/F,OAAO8C,IAAIp2D,OAAS,EAAIo2D,GAAGrqC,OAAO,CAACorC,GAAM9D,MAAgB,MAAM+D,GAAa,IAAIltC,KAAKmpC,GAAU+D,YAAa,OAAOA,GAAaD,GAAOC,GAAaD,IAAQ,IAAIjtC,KAAK,IAAM,OAItKotC,GAAqBtsD,MAAoBwvC,MAClDlW,GAAOt5B,GACP04B,IAAcA,GAAWl2B,KAAKknD,IAAgC,KAA3BA,GAAEqB,wBAInCwB,MAAwB/c,MAC1Bkb,GACAnuD,KACA,CAAC2vB,EAAOlsB,KAAYksB,GAASA,EAAMstB,OAASttB,EAAMstB,MAAMx5C,KAG/CwsD,MAA6Bhd,MACtC+c,GACAjF,GACA,CAAC9N,EAAO5tB,KAAa4tB,GAASA,EAAM4K,KAAO5K,EAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,MAAQ,IC5FnFi8C,MAAQ1Q,MAAa,sCAAwCjuC,KAAuBA,aAEpFguC,MAAOC,MAClB,2CACA,CACEjuC,EACA6zB,GACAC,GACA7R,OAEAvhB,QAAS,CAAEV,UAAS6zB,aAAWC,WAAS7R,mBAI/BisB,MAAWD,MACtB,gDACA,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aAGlD8yB,MAAcH,MACzB,mDACA,CACEjuC,EACA4nB,GACA3F,OAEAvhB,QAAS,CAAEV,UAAS4nB,qBAAmB3F,mBAK9BwqC,MAAexe,MAC1B,kDACAE,SAGWue,MAAqBze,MAAa,8BAC1CjuC,KAAuBU,QAAS,CAAEV,cAG1B2sD,MAAuB1e,MAClC,gCACA,CAACjuC,EAAiB4sD,OAAoDlsD,QAAS,CAAEV,UAAS4sD,WAG/EC,MAA8B5e,MACzC,wCACA,CAACxvB,EAAeze,GAAiBs1B,OAA4B50B,QAAS,CAAE+d,WAAUze,WAASs1B,oBAGhFw3B,MAA2B7e,MACtC,qCACA,CAACjuC,EAAiBsb,OAAa5a,QAAS,CAAEV,UAASsb,aAGxCyxC,MAAqB9e,MAChC,yCACA,CAAC+e,EAA2BhtD,GAAiB4sD,OAAoDlsD,QAAS,CAAEssD,oBAAmBhtD,WAAS4sD,WAG7HK,MAA4Bhf,MACvC,kDAGWif,MAAyBjf,MACpC,iDACC3yB,KAAa5a,QAAS4a,KClDZ8gC,MAAUC,KAAqC,CACxDC,SAAU6Q,GAAmBA,EAAgBzqD,KAGpCwsC,GAAsBkN,GAAQI,gBAAgB,CACvD3oB,UAAW,KACXC,QAAS,KACT0lB,MAAO,OCpBL4T,MAA2Bhe,MAC7BF,MAEAG,MAAG4X,GAA4B,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACxEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,QAIzB,EAEAqvC,MAAG4X,GAAe,CAAC/6B,OACRkwB,GAAQiR,UAAWnhC,KAC7B,EAEDmjB,MAAG4X,GAAc,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACxDstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf2rB,WAAW,EACXrQ,MAAO,WAGjB,EAEF+zB,MAAG4X,GAAkB,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC5DstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfyc,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,YAGzB,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,GAASxrB,cAAc07C,GAAQ8K,WAAWxmD,GAAQknB,kBAAmBjL,QAAQ,GAAIuP,EAAO,CAC7GstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfokD,IAAK1jD,GAAQknB,kBAAkBxlB,IAAI+qD,IAAmBA,GAAgBzqD,IAEtE+Z,UAAU,EACVkP,WAAW,EACXrQ,MAAO,YAGhB,EAEH+zB,MAAG4X,GAAsB,CAAC/6B,GAAS2H,aAAWC,eAAO,IAChD5H,EACH2H,aACAC,eACA,EAEFub,MAAG4X,GAA8B,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACxEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfstD,2BAA2B,EAC3BC,0BAA0B,QAGpC,EAEFle,MAAG4X,GAAqC,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC/EstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfstD,2BAA2B,EAC3BC,0BAA0B,QAGpC,EAEFle,MAAG4X,GAAkC,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC5EstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfstD,2BAA2B,EAC3BC,0BAA0B,EAC1BjyC,MAAO5a,GAAQ4a,YAGzB,EAEF+zB,MAAG4X,GAA4B,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACtEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfwtD,6BAA6B,EAC7BC,4BAA4B,QAGtC,EAEFpe,MAAG4X,GAAqC,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC/EstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfwtD,6BAA6B,EAC7BC,4BAA4B,QAGtC,EAEFpe,MAAG4X,GAAkC,CAAC/6B,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC5EstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfstD,2BAA2B,EAC3BC,0BAA0B,EAC1BjyC,MAAO5a,GAAQ4a,YAMzB,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOwsD,GAAyBlhC,EAAOtrB,GAC3C,iBCxGO,MAAM8sD,MAA4Ble,MACvCkW,KACAx5B,GAASA,EAAMtE,oBAGTi1B,eAAgByK,IAAiBlL,GAAQc,aAC/CwQ,IAGIhG,GAAa1nD,MACjBwvC,MACEke,GACAxhC,IAASA,IAASA,GAAMstB,OAASttB,GAAMstB,MAAMx5C,IAGpCs5B,GAASA,CACpBt5B,EACAiiB,QAEAutB,MACEkY,GAAU1nD,GACVsnD,GACA,CAAC9N,GAAO5tB,KAAc4tB,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,KAAKV,OAAOitC,MAAYA,KAC3G,IAGOxb,GAAezzB,MAC1BwvC,MACEuN,GAAO/8C,GACPsnD,GACA,CAAClD,GAAKx4B,KACJw4B,GAAIrjC,OACF,CAAC4mC,GAAYjlD,UACRilD,GACHS,CAAC1lD,IAAKkpB,IAAYA,GAASlpB,MAE7B,KACG,IAGEq6C,GAAU/8C,MACrBwvC,MACEkY,GAAU1nD,GACVw5C,IAAUA,IAASA,GAAM4K,KAAQ,IAGxBnH,GAAYj9C,MACvBwvC,MACEkY,GAAU1nD,GACVw5C,IAAUA,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIpvD,QAAW,GAG5CynB,GAAYzc,MACvBwvC,MACEkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM/8B,UAEfkP,GAAa3rB,MACxBwvC,MACEkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM7tB,WAEf+jB,GAAY1vC,MACvBwvC,MACEkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAMl+B,OAGfkZ,GAAuBA,CAClCx0B,EACAiiB,QAEAutB,MACEke,GACCxhC,IACQlI,OAAOwvB,OAAOtnB,GAAMN,WAIpB+hC,GAAeA,CAC1B3tD,EACAiiB,GACAiK,QAEAsjB,MACEhb,GAAqBx0B,EAASiiB,IAC9ByrC,GACAzQ,GAASj9C,GACT,CAAC4nB,GAAmBsE,GAAO0hC,MAGzB,IAAI/U,GAAa,GACbgV,GAAe5rC,IACC,OAAhBA,SAAyCwS,IAAjBo5B,MAC1BA,GAAe,GAGjB,IAAIzX,GAAS,GAET0X,GAAc,GAEdnE,GAAQ,EACRoE,GAA2B,GAC/B,MAAMC,GAA4BpmC,GAAkB5lB,OAClD0nD,IACE5lC,YAAiB4lC,GAAE0C,YAAY6B,SAC7BnqC,YAAiBoI,GAAM2H,WAAWo6B,UACpCnqC,YAAiB4lC,GAAE0C,YAAY6B,SAC7BnqC,YAAiBoI,GAAM4H,SAASm6B,UAGtC,UAAWd,MAAmBa,GAK5B,GAJeD,GAAyBvrD,KACtCknD,IAAKA,GAAEoE,cAAgBX,GAAgBW,aACpCpE,GAAEnT,QAAU4W,GAAgB5W,OAErB,CACVoT,KACA,MAAMnQ,GAAQuU,GAAyBG,UACrCxE,IAAKA,GAAEoE,cAAgBX,GAAgBW,aACpCpE,GAAEnT,QAAU4W,GAAgB5W,OAE3B4X,GAAYH,GAA0BhsD,OAAO0nD,IAAKA,GAAEoE,cAAgBX,GAAgBW,aACrFpE,GAAEnT,QAAU4W,GAAgB5W,OACjCwX,GAAyBvU,IAAOmQ,MAAQwE,GAAUn5D,MACpD,MACE84D,GAAcX,GAAgBW,YAC9BnE,GAAQ,EACRoE,GAAyB5rD,KAAK,CAC5B2rD,YAAaX,GAAgBW,YAC7BvX,MAAO4W,GAAgB5W,MACvBoT,MAAOA,GACPyE,SAAUjB,GAAgBkB,gBAIhC1E,GAAQ,EAER,UAAWwD,MAAmBY,QAIVt5B,IAHFokB,GAAWr2C,KACzBgsB,IAAKA,KAAO2+B,GAAgBW,cAG5BjV,GAAW12C,KAAKgrD,GAAgBW,kBAMbr5B,IAHF2hB,GAAO5zC,KACxBgsB,IAAKA,GAAE36B,OAASs5D,GAAgBiB,WAShChY,GAAOj0C,KANU,CACftO,KAAMs5D,GAAgBiB,SACtB31C,KAAM,GACN89B,MAAO,IAAI4W,GAAgB5W,QAC3BnlD,KAAM,QAMZ,IAAIk9D,GAAe,GAEnB,UAAWnB,MAAmBY,GAA0B,CACtD,IAAIvU,GAAQX,GAAWqV,UACrB1/B,IAAKA,KAAO2+B,GAAgBW,aAG9B,MAAMS,GAAMD,GAAa9rD,KAAKknD,IAAKA,KAAMyD,GAAgBW,aAEnDU,GAAQpY,GAAO5zC,KAAKknD,IAAKA,GAAE71D,OAASs5D,GAAgBiB,UAC1D,GAAII,KAAUD,GAAK,CACjBC,GAAM/1C,KAAKtW,KAAKgrD,GAAgBxD,OAChC2E,GAAansD,KAAKgrD,GAAgBW,aAClC,MAAMW,GAASrY,GAAOp0C,OAAO0nD,IAAKA,GAAE71D,OAASs5D,GAAgBiB,UAC7D,UAAWM,MAAQD,GACjBC,GAAKj2C,KAAKtW,KAAK,EAEnB,MAAWosD,GACTC,GAAM/1C,KAAK+gC,IAAS2T,GAAgBxD,MAEpC6E,GAAM/1C,KAAKtW,KAAK,EAIpB,CAEA,UAAWqsD,MAASpY,GAClBoY,GAAM/1C,KAAK5V,OAAOgrD,GAAcW,GAAM/1C,KAAKzjB,QAG7C6jD,UAAaA,GAAWh2C,OAAO,EAAGgrD,IAE3B,CACLjrD,MAxGY,CAAEgI,KAAM,IAyGpBurC,SAxGe,CAAEvrC,KAAM,IAyGvBiuC,cACAzC,aAKKuY,MAAenf,MAC1Bke,GACAxhC,KACE2H,UAAW3H,EAAM2H,UACjBC,QAAS5H,EAAM4H,WCvNN86B,MAAiB3gB,MAAa,0BAC9B4gB,MAAqB5gB,MAAa,8BAAgC3yB,KAAuBA,WACzFwzC,MAAwB7gB,MAAa,iCAAmC8gB,KAAsCA,gBAE9GC,MAAkB/gB,MAAa,2BAA6BjuC,KAAuBA,aACnFivD,MAAsBhhB,MAAa,gCAAkC3yB,KAAuBA,WAC5F4zC,MAAyBjhB,MAAa,mCAAqCnN,KAAqCA,iBAEhHquB,MAAkBlhB,MAAa,2BAA4B,CAAC5lC,EAA2By4B,GAA+BtuC,OAAqB6V,oBAAmBy4B,eAAatuC,WAC3K48D,MAAsBnhB,MAAa,gCAAkC3yB,KAAuBA,WAC5F+zC,MAAyBphB,MAAa,oCAEtCqhB,MAA6BrhB,MAAa,uCAAwC,CAACjuC,EAAiB4gC,OAA2C5gC,UAAS4gC,kCACxJ2uB,MAAiCthB,MAAa,4CAA8C3yB,KAAuBA,WACnHk0C,MAAoCvhB,MAAa,+CAAiDjuC,KAAuBA,aAEzHyvD,MAA0BxhB,MAAa,oCAAqC,CAACjuC,EAAiB0vD,GAA2C56B,GAA6BjhC,OAAoBmM,UAAS0vD,qCAAmC56B,aAAWjhC,WACjP87D,MAA8B1hB,MAAa,yCAA2C3yB,KAAuBA,WAC7Gs0C,MAAiC3hB,MAAa,4CAA8CjuC,KAAuBA,aCHnHkvC,GAAsB,CAC/B2gB,kBAAmB,GACnBC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,uBAAwB,KAExBlvB,YAAa,KACbmvB,sBAAsB,EACtBC,qBAAqB,EACrBC,iBAAkB,KAElBC,mBAAmB,EACnBC,qBAAqB,EACrBC,qBAAqB,EACrBC,qBAAsB,MC5BpBC,MAAqBphB,MACvBF,MAEAG,MAAGohB,GAAoCvkC,QAChCA,EACHwkC,qBAAqB,MACvB,EAEFrhB,MAAGohB,GAAuC,CAACvkC,GAAS5Q,aAAK,IAClD4Q,EACH6jC,2BAA2B,EAC3BD,4BAA4B,EAC5BE,uBAAwB10C,OAC1B,EAEF+zB,MAAGohB,GAA0C,CAACvkC,GAAS6iC,kBAAU,IAC1D7iC,EACH2jC,kBAAmBd,GACnBgB,2BAA2B,EAC3BD,4BAA4B,EAC5Bx0C,MAAO,SACT,EAEF+zB,MAAGohB,GAAqCvkC,QACjCA,EACH+jC,sBAAsB,MACxB,EAEF5gB,MAAGohB,GAAwC,CAACvkC,GAAS5Q,aAAK,IACnD4Q,EACHgkC,qBAAqB,EACrBD,sBAAsB,EACtBE,iBAAkB70C,OACpB,EAEF+zB,MAAGohB,GAA2C,CAACvkC,GAAS4U,mBAAW,IAC5D5U,EACH4U,eACAovB,qBAAqB,EACrBD,sBAAsB,EACtB30C,MAAO,SACT,EAEF+zB,MAAGohB,GAAqCvkC,QACjCA,EACHokC,qBAAqB,MACvB,EAEFjhB,MAAGohB,GAA4CvkC,QACxCA,EACHokC,qBAAqB,MACvB,EAEFjhB,MAAGohB,GAAyCvkC,QACrCA,EACHokC,qBAAqB,MACvB,EAEFjhB,MAAGohB,GAA6CvkC,QACzCA,EACHkkC,mBAAmB,MACrB,EAEF/gB,MAAGohB,GAAoDvkC,QAChDA,EACHkkC,mBAAmB,MACrB,EAEF/gB,MAAGohB,GAAiDvkC,QAC7CA,EACHkkC,mBAAmB,MACrB,EAEF/gB,MAAGohB,GAAgDvkC,QAC5CA,EACHmkC,qBAAqB,MACvB,EAEFhhB,MAAGohB,GAAuDvkC,QACnDA,EACHmkC,qBAAqB,MACvB,EAEFhhB,MAAGohB,GAAoDvkC,QAChDA,EACHmkC,qBAAqB,MAIvB,SAAU/gB,GAAQpjB,EAA0BtrB,IAC9C,OAAO4vD,GAAmBtkC,EAAOtrB,GACrC,CC9FO,MAAM2uC,MAAWC,MAAekW,KAAgBx5B,GAASA,EAAM4U,aAEzDT,MAAuBmP,MAAeD,GAAUrjB,GAASA,EAAM2jC,mBAC/DC,MAA6BtgB,MAAeD,GAAUrjB,GAASA,EAAM4jC,4BACrEC,MAA4BvgB,MAAeD,GAAUrjB,GAASA,EAAM6jC,2BACpEY,MAA4BnhB,MAAeD,GAAUrjB,GAASA,EAAM8jC,wBAEpE1vB,MAAiBkP,MAAeD,GAAUrjB,GAASA,EAAM4U,aACzDmvB,MAAuBzgB,MAAeD,GAAUrjB,GAASA,EAAM+jC,sBAC/DC,MAAsB1gB,MAAeD,GAAUrjB,GAASA,EAAMgkC,qBAC9DU,MAAsBphB,MAAeD,GAAUrjB,GAASA,EAAMikC,kBAE9DC,MAAoB5gB,MAAeD,GAAUrjB,GAASA,EAAMkkC,mBAC5DC,MAAsB7gB,MAAeD,GAAUrjB,GAASA,EAAMmkC,qBAC9DC,MAAsB9gB,MAAeD,GAAUrjB,GAASA,EAAMokC,qBCb9D3R,MAAQ1Q,MAAa,+BAErBD,MAAOC,MAAa,6BAC7B,CAACjuC,EAAiB6zB,GAAiBC,OAAqB9zB,UAAS6zB,aAAWC,cACnEoa,MAAWD,MAAa,kCACjC,CAACjuC,EAAiBsb,OAAuBtb,UAASsb,YACzC8yB,MAAcH,MAAa,qCACpC,CAACjuC,EAAiBoqB,OAAkCpqB,UAASoqB,cAEpDymC,MAAQ5iB,MAAa,wBAC9B,CAACjuC,EAAiB+hC,OAAqB/hC,UAAS+hC,YACvC+uB,MAAY7iB,MAAa,6BACjC3yB,KAAuBA,WACfy1C,MAAe9iB,MAAa,gCACpC5uB,KAAkCA,YCD1B+8B,MAAUC,KAAqC,CACxDC,SAAUlyB,GAAWA,EAAQzkB,KAGpBqrD,MAAoB3U,KAAwC,CACrEC,SAAU2U,GAAaA,EAAUjvB,QAGxBkN,GAAsBkN,GAAQI,gBAAgB,CACvDhD,MAAO,GAEPyX,UAAWD,GAAkBxU,oBCpB3B0U,MAAiB9hB,MACnBF,MAEAG,MAAG4X,GAAe,IAAO/X,KAAa,EAEtCG,MAAG4X,GAAc,CAAC/6B,GAASlsB,cAAc2c,QAAQ,GAAIuP,EAAO,CACxDstB,MAAO,CACHiR,CAACzqD,IAAU,CACPokD,IAAK,KACLz4B,WAAW,QAGrB,EAEF0jB,MAAG4X,GAAkB,CAAC/6B,GAASlsB,WAASsb,YAAYqB,QAAQ,GAAIuP,EAAO,CACnEstB,MAAO,CACHiR,CAACzqD,IAAU,CACPokD,IAAK,GACL3nC,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,SAGjB,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,GAASlsB,WAASoqB,cAAcgyB,GAAQO,OAAOvyB,GAASzN,QAAQ,GAAIuP,EAAO,CAChGstB,MAAO,CACHiR,CAACzqD,IAAU,CACPokD,IAAKh6B,GAAQhoB,IAAIgoB,IAAWA,GAAQzkB,IACpC8W,UAAU,EACVkP,WAAW,EACXrQ,MAAO,YAGhB,EAEH+zB,MAAG4X,GAAe,CAAC/6B,QAAuB,IACnCA,EACHilC,WAAW,MACb,EAEF9hB,MAAG4X,GAAmB,CAAC/6B,GAAS5Q,aAAK,IAC9B4Q,EACH+kC,UAAW,KACXE,WAAW,EACXC,UAAU,EACVC,WAAY/1C,OACd,EAEF+zB,MAAG4X,GAAsB,CAAC/6B,GAAS7M,cAAM,IAClC6M,EACH+kC,UAAWD,GAAkBM,OAAOjyC,GAAQ6M,EAAM+kC,eAIpD,SAAU3hB,GAAQpjB,EAA0BtrB,IAC9C,OAAOswD,GAAehlC,EAAOtrB,GACjC,CCxDO,MAAM2uC,MAAWC,MAAekW,KAAgBx5B,GAASA,EAAM9B,UAGlEyyB,eAAgByK,IAChBlL,GAAQc,aAAa3N,IAEnBmY,GAAa1nD,MAAoBwvC,MAAeD,GAAUrjB,IAASA,IAASA,GAAMstB,OAASttB,GAAMstB,MAAMx5C,IAEhGs5B,GAAUt5B,MAAoBwvC,MACvCkY,GAAU1nD,GACVsnD,GACA,CAAC9N,GAAO5tB,KAAa4tB,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIhiD,IAAIM,IAAMkpB,IAAYA,GAASlpB,MAAQ,IAGnF+wB,GAAezzB,MAAoBwvC,MAC5CuN,GAAO/8C,GACPsnD,GACA,CAAClD,GAAKx4B,KAAaw4B,GAAIrjC,OAAO,CAAC4mC,GAAYjlD,UACpCilD,GACHS,CAAC1lD,IAAKkpB,IAAYA,GAASlpB,MAC3B,KAAsC,IAGjCq6C,GAAU/8C,MAAoBwvC,MACvCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO,IAGtBnH,GAAYj9C,MAAoBwvC,MACzCkY,GAAU1nD,GACVw5C,IAASA,IAASA,GAAM4K,KAAO5K,GAAM4K,IAAIpvD,QAAU,GAG1CynB,GAAYzc,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,MAAUA,IAAQA,GAAM/8B,UAC3FkP,GAAa3rB,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,KAAUA,IAAQA,GAAM7tB,WAC5F+jB,GAAY1vC,MAAoBwvC,MAAekY,GAAU1nD,GAAUw5C,IAASA,GAAMl+B,OAElFi2C,MAAe/hB,MAAeD,GAAUrjB,GAASA,EAAM+kC,YAGhEpU,eAAgB2U,IAChBR,GAAkB9T,aAAaqU,IAEtBE,GAAwB1vB,MAAkByN,MAAegiB,GAAmB5lC,IAAYA,GAASmW,IAAQ2vB,cAAcC,MACvHC,GAAc7vB,MAAkByN,MAAegiB,GAAmB5lC,MAAaA,GAASmW,IACxF8vB,GAAwB9vB,MAAkByN,MAAegiB,GAAmB5lC,IACjFA,IAA2E,KAA9DA,GAASmW,IAAQ2vB,eAAeI,mBAAmB98D,OAAsB,KAClF42B,GAASmW,IAAQ2vB,eAAeI,mBAAoB1vD,IAAI2vD,IAAOA,KAC9DC,GAA4BjwB,MAAkByN,MAAegiB,GAAmB5lC,IACrFA,IAA2E,KAA9DA,GAASmW,IAAQ2vB,eAAeI,mBAAmB98D,OAAsB,KAClF42B,GAASmW,IAAQ2vB,eAAeI,mBAAoB1vD,IAAI2vD,IAAOA,IAAKE,aCvDnEtT,MAAQ1Q,MAAa,4BAA8BjuC,KAAuBU,QAAS,CAAEV,cAErFguC,MAAOC,MAAa,2BAA6BjuC,KAAuBU,QAAS,CAAEV,cACnFkuC,MAAWD,MAAa,gCAAiC,CAACjuC,EAAiBsb,OAAuB5a,QAAS,CAAEV,UAASsb,aACtH8yB,MAAcH,MAAa,mCAAoC,CAACjuC,EAAiB7E,OAA2BuF,QAAS,CAAEV,UAAS7E,cCMhI+zC,GAAsB,CAC/BsK,MAAO,MCPL0Y,MAAgB9iB,MAClBF,MAEAG,MAAG8iB,GAAqB,CAACjmC,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC/DstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf7E,OAAQ,KACRshB,UAAU,QAGpB,EAEF4yB,MAAG8iB,GAAoB,CAACjmC,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAC9DstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf2rB,WAAW,QAGrB,EAEF0jB,MAAG8iB,GAAwB,CAACjmC,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CAClEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACfyc,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,YAGzB,EAEF+zB,MAAG8iB,GAA2B,CAACjmC,GAASxrB,cAAcic,QAAQ,GAAIuP,EAAO,CACrEstB,MAAO,CACH,CAAC94C,GAAQV,SAAU,CACf7E,OAAQuF,GAAQvF,OAEhBshB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,WAMjB,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOsxD,GAAchmC,EAAOtrB,GAChC,iBCjDO,MAAMotC,MAAOC,MAAa,wBAA0BjuC,KAAuBA,aACrEkuC,MAAWD,MAAa,6BAA+B3yB,KAAuBA,WAC9E8yB,MAAcH,MAAa,gCAAkCriB,KAA4BA,cAEzFgvB,MAAO3M,MAAa,wBAAyB,CAACjuC,EAAiBuoB,GAA2B/1B,IAAe,MAAawN,UAASuoB,YAAU/1B,WACzIqoD,MAAW5M,MAAa,6BAA+B3yB,KAAuBA,WAC9Ew/B,MAAc7M,MAAa,iCCA3BiB,GAAsB,CAC/BtjB,SAAU,GACVnP,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACVr1B,MAAO,MCTL82C,MAAkBhjB,MACpBF,MAEAG,MAAGgjB,GAAsBnmC,QAClBA,EACHP,WAAW,MACb,EAEF0jB,MAAGgjB,GAA0B,CAACnmC,GAAS5Q,aAAK,IACrC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAOA,OACT,EAEF+zB,MAAGgjB,GAA6B,CAACnmC,GAASN,gBAAQ,IAC3CM,EACHN,YACAD,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAGgjB,GAAsBnmC,QAClBA,EACHykB,UAAU,MACZ,EAEFtB,MAAGgjB,GAA6BnmC,QACzBA,EACHykB,UAAU,MACZ,EAEFtB,MAAGgjB,GAA0BnmC,QACtBA,EACHykB,UAAU,MAIZ,SAAUrB,GAAQpjB,EAA0BtrB,IAC9C,OAAOwxD,GAAgBlmC,EAAOtrB,GAClC,CC3CO,MAAM2uC,MAAWC,MAAekW,KAAgBx5B,GAASA,EAAM3D,UAEzDkL,MAAc+b,MAAeD,GAAUrjB,GAASA,EAAMN,UACtDnP,MAAW+yB,MAAeD,GAAUrjB,GAASA,EAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,GAASA,EAAMP,WACpDglB,MAAWnB,MAAeD,GAAUrjB,GAASA,EAAMykB,UACnDjB,MAAWF,MAAeD,GAAUrjB,GAASA,EAAM5Q,uBCNzD,MAAM0yB,MAAOC,MAChB,gCACA,CAACjuC,EAAiB6zB,GAAiBC,GAAe4U,IAAuB,MAAa1oC,UAAS6zB,aAAWC,WAAS4U,kBAG1GwF,MAAWD,MACpB,qCACC3yB,KAAuBA,WAGf8yB,MAAcH,MACvB,wCACA,CAACriB,EAAoCiI,GAAiBC,OAAqBlI,WAAUiI,aAAWC,cAGvF6qB,MAAQ1Q,MAAa,kCCPrBiB,GAAsB,CAC/BzyB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KACPuY,UAAW,KACXC,QAAS,KACTrb,KAAM,MCZJ02B,MAAgBC,MAClBF,MAEAG,MAAGL,GAAoB9iB,QAChBA,EACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGL,GAAwB,CAAC9iB,GAAS5Q,aAAK,IACnC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAOA,OACT,EAEF+zB,MAAGL,GAA2B,CAAC9iB,GAASN,YAAUiI,aAAWC,eAAO,IAC7D5H,EACHzT,KAAMmT,GACNiI,UAAWA,GACXC,QAASA,GACTnI,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAGL,GAAqB,IAAME,KAG5B,SAAUI,GAAQpjB,EAA0BtrB,IAC9C,OAAOuuC,GAAcjjB,EAAOtrB,GAChC,CC9BO,MAAM2uC,MAAWC,MAAekW,KAAgBx5B,GAASA,EAAMjC,aAEzDinB,MAAU1B,MAAeD,GAAUrjB,GAASA,EAAMzT,MAClDgE,MAAW+yB,MAAeD,GAAUrjB,GAASA,EAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,GAASA,EAAMP,WAEpD+jB,MAAWF,MAAeD,GAAUrjB,GAASA,EAAM5Q,OAEnDg3C,MAA4B9iB,MAAeD,GAAUrjB,GACvDA,EAAMzT,MAAM85C,4BAGVC,MAA0BhjB,MAAeD,GAAUrjB,GACrDA,EAAMzT,MAAMg6C,wBChBVzkB,MAAOC,MAAa,sCAC7B,CAAChuC,EAAwBic,OAAsBjc,iBAAgBic,qBAEtDgyB,MAAWD,MAAa,4CAChC3yB,GAAsBA,GAEd8yB,MAAcH,MAAa,+CACnCykB,KAAsCA,0BCD9BtW,MAAUC,KAA4B,CAC/CC,SAAUt8C,GAAWA,IAGZkvC,GAAsBkN,GAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCTL2sC,MAAmB7Y,MACrBF,MAEAG,MAAGsjB,GAAoCzmC,QAChCA,EACHP,WAAW,MACb,EAEF0jB,MAAGsjB,GAAuC,CAACzmC,EAAO5Q,UAC3C4Q,EACHP,WAAW,EACXrQ,MAAOA,OACT,EAEF+zB,MAAGsjB,GAA0C,CAACzmC,GAASwmC,2BAA2BtW,GAAQO,OAAO+V,GAAsB,IAChHxmC,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKT,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,EAAOtrB,GACnC,CCzBO,MAAMmnD,MAAmBvY,MAAekW,KAAgBx5B,GAASA,EAAMwmC,uBAG1E9V,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACbb,GAAQc,aAAa6K,IAEZtrC,MAAW+yB,MAAeuY,GAAkB77B,GAASA,EAAMzP,UAC3DkP,MAAY6jB,MAAeuY,GAAkB77B,GAASA,EAAMP,WAC5D+jB,MAAWF,MAAeuY,GAAkB77B,GAASA,EAAM5Q,OAE3Ds3C,MAAwBpjB,MACjClW,GACAlmB,SACA,CAACy/C,EAAsB/K,KAEiB,IAAhC+K,EAAqB79D,OACd8yD,GAEJA,GAAO9lD,OAAOmb,IAAS01C,GAAsBrwD,KAAKE,IAAMya,GAAMza,KAAOA,sBCzB7E,MAAMsrC,MAAOC,MAAa,0BAA4BjuC,KAAuBA,aACvEkuC,MAAWD,MAAa,+BAAiC3yB,KAAuBA,WAChF8yB,MAAcH,MAAa,kCAAoC6kB,KAA6BA,gBCI5F5jB,GAAsB,CAC/Bz2B,KAAM,KACNgE,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACVr1B,MAAO,MCTLy3C,MAAoB3jB,MACtBF,MAEAG,MAAG2jB,GAAwB9mC,QACpBA,EACHP,WAAW,MACb,EAEF0jB,MAAG2jB,GAA4B,CAAC9mC,GAAS5Q,aAAK,IACvC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAOA,OACT,EAEF+zB,MAAG2jB,GAA+B,CAAC9mC,GAAQ4mC,kBAAU,IAC9C5mC,EACHzT,KAAMq6C,GACNnnC,WAAW,EACXlP,UAAU,EACVnB,MAAO,SAIT,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAOmyD,GAAkB7mC,EAAOtrB,GACpC,CCxBO,MAAM2uC,MAAWC,MAAekW,KAAgBx5B,GAASA,EAAM4mC,YACzDr9B,MAAgB+Z,MAAeD,GAAUrjB,GAASA,EAAMzT,MACxDw6C,MAAsBzjB,MAAe/Z,GAAeq9B,GAAcA,GAAYI,kBAC9EC,MAAwB3jB,MAAe/Z,GAAeq9B,GAAcA,GAAYM,oBAGhF32C,MAAW+yB,MAAeD,GAAUrjB,GAASA,EAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,GAASA,EAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,GAASA,EAAM5Q,OCXnD0yB,MAAOC,MAAa,2CAA4C,CAACtY,EAAsBC,GAAyBC,GAAoBC,OAA6Bp1B,QAAS,CAAEi1B,eAAcC,mBAAiBC,cAAYC,qBACvNoY,MAAWD,MAAa,gDAAkD3yB,KAAuBA,WACjG8yB,MAAcH,MAAa,mDAAqDolB,KAAgCA,kBAEhHC,MAAYrlB,MAAa,oBAAsB9wB,KAA4BA,WAC3Eo2C,MAAgBtlB,MAAa,yBAA2B3yB,KAAuBA,WAC/Ek4C,MAAmBvlB,MAAa,6BCIhCiB,GAAsB,CAC/Bz2B,KAAM,KACNgE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAEPm4C,eAAe,EACfC,cAAc,GCdZC,MAAmBvkB,MACrBF,MAEAG,MAAGukB,GAAuB1nC,QACrBA,EACHP,WAAW,MACX,EAEF0jB,MAAGukB,GAA2B,CAAC1nC,GAAS5Q,aAAK,IACtC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAOA,OACT,EAEF+zB,MAAGukB,GAA8B,CAAC1nC,GAASmnC,oBAAY,IAClDnnC,EACHP,WAAW,EACXlP,UAAU,EACVhE,KAAM46C,OACN,EAEFhkB,MAAGukB,GAA4B1nC,QAC1BA,EACHunC,eAAe,MACf,EAEFpkB,MAAGukB,GAAgC,CAAC1nC,GAAS5Q,aAAK,IAC3C4Q,EACHunC,eAAe,EACfC,cAAc,EACdp4C,MAAOA,OACT,EAEF+zB,MAAGukB,GAAoC1nC,QAClCA,EACHunC,eAAe,EACfC,cAAc,EACdp4C,MAAO,SAMP,SAAUg0B,GAAQpjB,EAA0BtrB,IAC9C,OAAO+yD,GAAiBznC,EAAOtrB,GACnC,CClDO,MAAMizD,MAAoBrkB,MAAekW,KAAgBx5B,GAASA,EAAMmnC,cAElE52C,MAAW+yB,MAAeqkB,GAAmB3nC,GAASA,EAAMzP,UAC5DkP,MAAY6jB,MAAeqkB,GAAmB3nC,GAASA,EAAMP,WAC7D+jB,MAAWF,MAAeqkB,GAAmB3nC,GAASA,EAAM5Q,OAE5Dm4C,MAAgBjkB,MAAeqkB,GAAmB3nC,GAASA,EAAMunC,eACjEC,MAAelkB,MAAeqkB,GAAmB3nC,GAASA,EAAMwnC,cAGhEh+B,MAAkB8Z,MAC7BqkB,GACE3nC,GAASA,GAASA,EAAMzT,oECiCrB,IAAMm2B,GAAO,MAAd,MAAOA,EACXp9C,YACUspB,GACA4I,GACAk7B,GACAkV,GACAC,GACAC,GACAC,GACAC,GACA9Y,IARA1pD,KAAAopB,aACAppB,KAAAgyB,UACAhyB,KAAAktD,iBACAltD,KAAAoiE,sBACApiE,KAAAqiE,oBACAriE,KAAAsiE,uBACAtiE,KAAAuiE,mBACAviE,KAAAwiE,uBACAxiE,KAAA0pD,mBAGH1pD,KAAAyiE,iBAAgBn5C,MAAa,IAClCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOm5C,SAAiB,EACxBj5C,KAAUva,IACRlP,KAAKktD,cACFnrB,cACAvhC,QACCkQ,KACE0lD,IAAUsM,cAAyB,CAAEtM,aAAQ,EAC7CzsC,KAAWC,OAASC,MAAG64C,WAAsB,CAAE94C,kBAOpD5pB,KAAA2iE,eAAcr5C,MAAa,IAChCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOq5C,KAAe,EACtBtjD,KAAetf,KAAKgyB,OAAO1xB,OAAOuK,QAAiC,EACnE6F,KACE,EAAExB,GAAQlB,MACPkB,GAAOF,SAAWE,GAAOF,QAAQV,SAAYN,KAAe,EAEjEyb,KAAUnb,IACRtO,KAAKktD,cAAclrB,UAAU1zB,IAAS9N,QACpCkQ,KAAIw+C,IAAU0T,EAAuBt0D,GAAS4gD,MAAO,EACrDvlC,KAAWC,OAASC,MAAG+4C,EAAoBt0D,GAASsb,UAMrD5pB,KAAA6iE,mBAAkBv5C,MAAa,IACpCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAO1D,KAAmB,EAC1B4D,KAAUva,IAAUlP,KAAKktD,cAAcnpB,cAAc70B,GAAOZ,SAAS9N,QACnEkQ,KAAI0wD,IAAcv7C,GAA2Bu7C,MAAW,EACxDz3C,KAAWC,OAASC,MAAGhE,GAAwB+D,UAM9C5pB,KAAA8iE,2BAA0Bx5C,MAAa,IAC5CtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOw5C,KAA2B,EAClCzjD,KACEtf,KAAKgyB,OAAO1xB,OAAOuK,MACnB7K,KAAKgyB,OAAO1xB,OAAO0iE,IACnBhjE,KAAKgyB,OAAO1xB,OAAO0iE,MAA0C,EAC/DtyD,KACE,EAAExB,GAAQlB,GAAiBm0B,GAAWC,MAChClzB,GAAOF,SAAWE,GAAOF,QAAQV,SAAWY,GAAOF,QAAQmzB,WAAajzB,GAAOF,QAAQozB,QAClF,CACL9zB,QAASY,GAAOF,QAAQV,QACxB6zB,UAAWjzB,GAAOF,QAAQmzB,UAC1BC,QAASlzB,GAAOF,QAAQozB,YAGrBD,KAAcC,MACjBD,GAAY,IAAI3U,KAChB4U,GAAU,IAAI5U,KACd2U,GAAUq1B,QAAQr1B,GAAUs1B,UAAY,IAEnC,CACLnpD,QAASN,GACTm0B,UAAWA,GACXC,QAASA,OAGd,EAEH3Y,KAAU1C,IACR/mB,KAAKktD,cAAchrB,sBAAsBnb,GAAKzY,QAC5C8jB,YAAiByb,IAAI9mB,GAAKob,WAAWkF,OAAO,uBAC5CjV,YAAiByb,IAAI9mB,GAAKqb,SAASiF,OAAO,wBAAwB7mC,QAChEkQ,KAAIuyD,IAAqBF,GAAmCh8C,GAAKzY,QAAS20D,MAAkB,EAC5Ft5C,KAAWC,OAASC,MAAGk5C,GAAgCh8C,GAAKzY,QAASsb,UAMxE5pB,KAAAkjE,0CAAyC55C,MAAa,IAC3DtpB,KAAKopB,UAAU5oB,QACb+oB,MAAO45C,KAA0C,EACjD7jD,KAAetf,KAAKgyB,OAAO1xB,OAAOuK,QAAiC,EACnE6F,KACE,EAAExB,GAAQlB,MACPkB,GAAOF,SAAWE,GAAOF,QAAQV,SAAYN,KAAe,EAEjEyb,KAAUnb,IACRtO,KAAKktD,cAAcjrB,qCAAqC3zB,IAAS9N,QAC/DkQ,KAAIqmD,IACFoM,GAAkD70D,GAASyoD,MAAkC,EAC/FptC,KAAWC,OAASC,MAAGs5C,GAA+C70D,GAASsb,UAOhF5pB,KAAAojE,mCAAkC95C,MAAa,IACpDtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOy5C,KAAmC,EAC1C1jD,KACEtf,KAAKgyB,OAAO1xB,OAAOuK,MACnB7K,KAAKgyB,OAAO1xB,OAAOyiE,IACnB/iE,KAAKgyB,OAAO1xB,OAAOyiE,MAAkC,EACvDryD,KACE,EAAExB,GAAQlB,GAAiBm0B,GAAWC,MAChClzB,GAAOF,SAAWE,GAAOF,QAAQV,SAAWY,GAAOF,QAAQmzB,WAAajzB,GAAOF,QAAQozB,QAClF,CACL9zB,QAASY,GAAOF,QAAQV,QACxB6zB,UAAWjzB,GAAOF,QAAQmzB,UAC1BC,QAASlzB,GAAOF,QAAQozB,YAGrBD,KAAcC,MACjBD,GAAY,IAAI3U,KAChB4U,GAAU,IAAI5U,KACd2U,GAAUq1B,QAAQr1B,GAAUs1B,UAAY,IAEnC,CACLnpD,QAASN,GACTm0B,UAAWA,GACXC,QAASA,OAGd,EAEH3Y,KAAU1C,IACR/mB,KAAKktD,cAAc7qB,8BAA8Btb,GAAKzY,QACpD8jB,YAAiBrL,GAAKob,WAAWkF,OAAO,uBACxCjV,YAAiBrL,GAAKqb,SAASiF,OAAO,wBAAwB7mC,QAC5DkQ,KAAI4nD,IAA8B0K,GAA2Cj8C,GAAKzY,QAASgqD,MAA2B,EACtH3uC,KAAWC,OAASC,MAAGm5C,GAAwCj8C,GAAKzY,QAASsb,UAMhF5pB,KAAAqjE,yBAAwB/5C,MAAa,IAC1CtpB,KAAKopB,UAAU5oB,QACb+oB,MAAO+5C,KAAyB,EAChChkD,KACEtf,KAAKgyB,OAAO1xB,OAAOijE,SAA2D,EAEhF95C,KAAU,EAAEva,GAAQs0D,OAClB,MAAM9K,GACJpmC,OAAOC,KAAKrjB,GAAOF,SAAS1L,OAAS,EACjC4L,GAAOF,QAAQ0pD,aACf8K,GAEN,OAAI9K,IAAgBA,GAAap1D,OAAS,EACjCtD,KAAKoiE,mBAAmBp8B,oBAAoB0yB,IAAcl4D,QAC/DkQ,KAAIw1B,IAAWo9B,GAAiCp9B,MAAQ,EACxDvc,KAAWC,OAASC,MAAGy5C,GAA8B15C,OAGhDU,QAMRtqB,KAAAyjE,4BAA2Bn6C,MAAa,IAC7CtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOm6C,KAA4B,EACnCv5C,KAASjb,IACPlP,KAAKktD,cAAc3qB,wBAAwBrzB,GAAOZ,QAASY,GAAOizB,UAAWjzB,GAAOkzB,SAAS5hC,QAC3FkQ,KAAIs2B,IAAc08B,GAAoCx0D,GAAOZ,QAAS04B,MAAW,EACjFrd,KAAWC,OAASC,MAAG65C,GAAiCx0D,GAAOZ,QAASsb,UAMzE5pB,KAAA2jE,sCAAqCr6C,MAAa,IACvDtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOm6C,KAAsC,EAE7Cj6C,KAAUva,IACRlP,KAAKktD,cAAczqB,kCAAkCvzB,GAAOZ,QAASY,GAAOwzB,OAAOliC,QACjFkQ,KAAIs2B,IAAc08B,GAAoCx0D,GAAOZ,QAAS04B,MAAW,EACjFrd,KAAWC,OAASC,MAAG65C,GAAiCx0D,GAAOZ,QAASsb,UAMzE5pB,KAAA4jE,wBAAuBt6C,MAAa,IACzCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOs6C,KAAwB,EAC/BvkD,KAAetf,KAAKgyB,OAAO1xB,OAAOuK,QAAiC,EACnE6F,KACE,EAAExB,GAAQlB,MACPkB,GAAOF,SAAWE,GAAOF,QAAQV,SAAYN,KAAe,EAEjEmc,KAAS7b,IACPtO,KAAKktD,cAAc5qB,cAAch0B,IAAS9N,QACxCkQ,KAAIs2B,IACF68B,GAAgCv1D,GAAS04B,MAAW,EAEtDrd,KAAWC,OAASC,MAAGg6C,GAA6Bv1D,GAASsb,UAM9D5pB,KAAA8jE,0BAAyBx6C,MAAa,IAC3CtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOw6C,KAA0B,EACjCzkD,KAAetf,KAAKgyB,OAAO1xB,OAAOuK,QAAiC,EACnEsf,KAAS,EAAEjb,GAAQlB,MACjBhO,KAAKktD,cACFtqB,qBAAqB1zB,GAAOF,QAAQV,SAAWN,IAC/CxN,QACCkQ,KAAIs2B,IACF+8B,GACE70D,GAAOF,QAAQV,SAAWN,GAC1Bg5B,MACD,EAEHrd,KAAWC,OACTC,MACEk6C,GACE70D,GAAOF,QAAQV,SAAWN,GAC1B4b,UAST5pB,KAAAgkE,eAAc16C,MAAa,IAChCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAO06C,KAAe,EACtB3kD,KAAetf,KAAKgyB,OAAO1xB,OAAOuK,QAAiC,EACnE6F,KACE,EAAExB,GAAQlB,MACPkB,GAAOF,SAAWE,GAAOF,QAAQV,SAAYN,KAAe,EAEjEmc,KAAS7b,IACPtO,KAAKktD,cAAcr9C,UAAUvB,IAAS9N,QACpCkQ,KAAIjH,IAAUw6D,GAAuB31D,GAAS7E,MAAO,EACrDkgB,KAAWC,OAASC,MAAGo6C,GAAoB31D,GAASsb,UAMrD5pB,KAAAkkE,0BAAyB56C,MAAa,IAC3CtpB,KAAKopB,UAAU5oB,QACb+oB,MAAO46C,UAAwB,EAC/B7kD,KAAetf,KAAKgyB,OAAO1xB,OAAOuK,QAAiC,EACnE4e,KAAU,EAAEva,GAAQlB,MAClBhO,KAAKoiE,mBACF97B,4BACCp3B,GAAOF,QAAQV,SAAWN,GAC1BkB,GAAOF,QAAQu3B,UACfr3B,GAAOF,QAAQw3B,iBAEhBhmC,QACCkQ,KAAImpD,IACFsK,eACEj1D,GAAOF,QAAQV,SAAWN,GAC1B6rD,MACD,EAEHlwC,KAAWC,OACTC,MACEs6C,YACEj1D,GAAOF,QAAQV,SAAWN,GAC1B4b,UAST5pB,KAAAokE,qBAAoB96C,MACzB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO46C,sBAAoC,EAC3C16C,KAAUva,IAAUlP,KAAKoiE,mBAAmBr7B,iBAAiB73B,GAAOZ,QAASY,GAAOylD,YAAYn0D,QAC9FkQ,KAAIua,IAAKk5C,2BAA4Cj1D,GAAOZ,WAAQ,EACpEqb,KAAWC,OAASC,MAAGs6C,wBAAyCv6C,UAK/D5pB,KAAAqkE,mBAAkB/6C,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO46C,oBAAkC,EACzC16C,KAAUva,IAAUlP,KAAKoiE,mBAAmBn7B,eAAe/3B,GAAOZ,QAASY,GAAOylD,YAAYn0D,QAC5FkQ,KAAIua,IAAKk5C,yBAA0Cj1D,GAAOZ,WAAQ,EAClEqb,KAAWC,OAASC,MAAGs6C,sBAAuCv6C,UAK7D5pB,KAAAskE,mCAAkCh7C,MACvC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO46C,2BAA6CA,2BAAyC,EAC7Fh6C,KAASjb,IAAU,CACjB20D,GAAyB30D,GAAOZ,SAChC61D,QAAyBj1D,GAAOZ,SAAS,GAAO,GAChDy1D,GAA2B70D,GAAOZ,SAClC/N,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,WAOd9+C,KAAAukE,+BAA8Bj7C,MACnC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO46C,wBAA0CA,wBAAsC,EACvFh6C,KAASjb,IAAU,CACjB3O,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,iBACTk/C,UAAW,WAQd9+C,KAAAwkE,0BAAyBl7C,MAAa,IAC3CtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOk7C,KAA0B,EACjCnlD,KACEtf,KAAKgyB,OAAO1xB,OAAOuK,MACnB7K,KAAKgyB,OAAO1xB,OAAOmkE,MAAmC,EAExDh7C,KAAU,EAAEva,GAAQZ,GAASo2D,MACvBp2D,GACKtO,KAAKktD,cACTpqB,qBACCx0B,GACAY,GAAOF,QAAQmzB,WAAauiC,GAAUviC,WACtC/P,cAAmBC,SAAS,EAAG,UAAUgV,OAAO,uBAChDn4B,GAAOF,QAAQozB,SAAWsiC,GAAUtiC,SAAWhQ,cAAmBiV,OAAO,uBACzE,MAED7mC,QACC2pB,KAAS+L,IAAqB,CAC5BuuC,GAA4Bn2D,IAC5Bm2D,GAAkCn2D,GAAS4nB,GAAmBhnB,GAAOF,QAAQuhB,gBAC9E,EAED5G,KAAWC,OACTC,MAAG46C,GAA+Bn2D,GAASsb,OAI1CU,OAMRtqB,KAAA2kE,iCAAgCr7C,MAAa,IAClDtpB,KAAKopB,UAAU5oB,QACb+oB,MAAO46C,oCAAkD,EACzD16C,KAAUva,IACRlP,KAAKoiE,mBACF37B,6BAA6Bv3B,GAAOF,QAAQ03B,OAC5ClmC,QACC2pB,KAASsqC,KACPz0D,KAAK0pD,gBAAgBK,QACd,CAGP8Z,GAAyB30D,GAAOF,QAAQ03B,MAAM9mB,SAC9CukD,QAAyBj1D,GAAOF,QAAQ03B,MAAM9mB,SAAS,GAAO,GAC9DmkD,GAA2B70D,GAAOF,QAAQ03B,MAAM9mB,SAChDukD,yCACEj1D,GAAOF,QAAQ03B,MACf+tB,IAEFl0D,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,WAGf,EACFn1B,KAAWC,OACTgB,KAAK,CACHu5C,sCACEj1D,GAAOF,QAAQ03B,MACf9c,IAEFrpB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,sBACTk/C,UAAW,cAUtB9+C,KAAA4kE,qBAAoBt7C,MAAa,IACtCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOs6C,KAAoC,EAC3Cp6C,KAAUva,IACRlP,KAAKoiE,mBACFx7B,iBAAiB13B,GAAOF,QAAQV,QAASY,GAAOF,QAAQ+2B,aACxDvlC,QACCkQ,KAAI+jD,IACFoP,GACE30D,GAAOF,QAAQV,QACfY,GAAOF,QAAQ+2B,YACf0uB,MACD,EAEH9qC,KAAWC,OACTC,MACEg6C,GACE30D,GAAOF,QAAQV,QACfY,GAAOF,QAAQ+2B,YACfnc,UAST5pB,KAAA6kE,iBAAgBv7C,MAAa,IAClCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOld,KAAiB,EACxBod,KAAUva,IAAUlP,KAAKqiE,iBAAiB9tB,YAAYrlC,GAAOZ,SAAS9N,QACpEkQ,KAAImmB,IAAYxqB,GAAyBwqB,MAAS,EAClDlN,KAAWC,OAASC,MAAGxd,GAAsBud,UAK5C5pB,KAAA8kE,iBAAgBx7C,MAAa,IAClCtpB,KAAKopB,UAAU5oB,QACb+oB,MAAOld,KAAiB,EACxBod,KAAUva,IAAUlP,KAAKqiE,iBAAiB7tB,aAAatlC,GAAOZ,QAASY,GAAO2nB,UAAUr2B,QACtF2pB,KAAS0M,IAAY,CACnBxqB,KACA04D,UACAxkE,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,kBACTk/C,UAAW,UAGZ5vC,GAAO2nB,SAASwY,kBACf,CACA21B,MAAiC91D,GAAO2nB,SAASwY,sBAC9CngC,GAAOpO,KAAO,CAACkkE,SAAgC,IAChD,MACP,EACDr7C,KAAWC,OAASC,MAAGxd,GAAsBud,UAK5C5pB,KAAAilE,0BAAyB37C,MAC9B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAA8B,EACrCz7C,KAAUva,IAAUlP,KAAKsiE,oBAAoB3zB,uBAAuBnuC,QAClEkQ,KAAI2sD,IAAc6H,GAAsC7H,MAAW,EACnE1zC,KAAWC,OAASC,MAAGq7C,GAAmCt7C,UAKzD5pB,KAAAmlE,oBAAmB77C,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAA+B,EACtCz7C,KAAUva,IAAUlP,KAAKsiE,oBAAoB1zB,eAAe1/B,GAAOZ,SAAS9N,QAC1EkQ,KAAI0+B,IAAe81B,GAAuC91B,MAAY,EACtEzlB,KAAWC,OAASC,MAAGq7C,GAAoCt7C,UAK1D5pB,KAAAolE,4BAA2B97C,MAChC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAAuC,EAC9Cz7C,KAAUva,IAAUlP,KAAKsiE,oBAAoBzzB,wBAAwB3/B,GAAOZ,QAASY,GAAO8uD,kCAAmC9uD,GAAOk0B,UAAWl0B,GAAO/M,MAAM3B,QAC5JkQ,KAAIid,IAAUu3C,GAA+Ch2D,GAAOZ,WAAQ,EAC5Eqb,KAAWC,OAASC,MAAGq7C,GAA4Ct7C,UAKlE5pB,KAAAqlE,mCAAkC/7C,MACvC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAA8C,EACrD/6C,KAASjb,IAAU,CACjBg2D,GAAgCh2D,GAAOZ,SACvC/N,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,0BACTk/C,UAAW,WAOd9+C,KAAAslE,+BAA8Bh8C,MACnC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAA0C,EACjDz7C,KAAUva,IAAUlP,KAAKsiE,oBAAoBrzB,2BAA2B//B,GAAOZ,QAASY,GAAOggC,6BAA6B1uC,QAC1HkQ,KAAIid,IAAUu3C,GAAkDh2D,GAAOZ,WAAQ,EAC/Eqb,KAAWC,OAASC,MAAGq7C,GAA+Ct7C,UAKrE5pB,KAAAulE,sCAAqCj8C,MAC1C,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAAiD,EACxD/6C,KAASjb,IAAU,CACjBg2D,GAAgCh2D,GAAOZ,SACvCy2D,UACAxkE,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,4BACTk/C,UAAW,WAOd9+C,KAAAwlE,oBAAmBl8C,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO27C,KAA+B,EACtCz7C,KAAUva,IAAUlP,KAAKsiE,oBAAoBnzB,gBAAgBjgC,GAAOyH,kBAAmBzH,GAAOkgC,aAAa5uC,QACzG2pB,KAASc,IAAK,CACZi6C,KACAH,aACG71D,GAAOpO,KACN,CACAkkE,MAAiC91D,GAAOyH,mBACxCquD,SACC,CACDzkE,UAAqB,CACrBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,QAIjBomB,GAAgCh2D,GAAOkgC,YAAYxvB,YACpD,EACD+J,KAAWC,OAASC,MAAGq7C,GAAoCt7C,UAK1D5pB,KAAAylE,gBAAen8C,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOm8C,KAAgB,EACvBj8C,KAAUva,IAAUlP,KAAKuiE,gBAAgB17C,IAAI3X,GAAOZ,QAASY,GAAOizB,UAAWjzB,GAAOkzB,SAAS5hC,QAC7FkQ,KAAIgoB,IAAWgtC,GAAwBx2D,GAAOZ,QAASoqB,MAAQ,EAC/D/O,KAAWC,OAASC,MAAG67C,GAAqBx2D,GAAOZ,QAASsb,UAK3D5pB,KAAA2lE,iBAAgBr8C,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOm8C,KAAiB,EACxBj8C,KAAUva,IAAUlP,KAAKuiE,gBAAgBxjD,MAAM7P,GAAOZ,QAASY,GAAOmhC,OAAO7vC,QAC3EkQ,KAAIid,IAAU+3C,GAAyB/3C,MAAO,EAC9ChE,KAAWC,OAASC,MAAG67C,GAAsB97C,UAK5C5pB,KAAA4lE,uBAAsBt8C,MAC3B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOk7C,KAAwC,EAC/Ch7C,KAAUva,IAAUlP,KAAKktD,cAAczpB,mBAAmBv0B,GAAOF,QAAQV,SAAS9N,QAChF2pB,KAASc,IAAK,CACZ1qB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,0BACTk/C,UAAW,aAQhB9+C,KAAA6lE,oBAAmBv8C,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOu8C,KAAoB,EAC3Br8C,KAAUva,IAAUlP,KAAKwiE,oBAAoBzrB,eAAe7nC,GAAOZ,QAASY,GAAOizB,UAAWjzB,GAAOkzB,QAASlzB,GAAO8nC,aAAax2C,QAChIkQ,KAAIwpB,IAAY4rC,GAA4B5rC,GAAUhrB,GAAOizB,UAAWjzB,GAAOkzB,WAAQ,EACvFzY,KAAWC,OAASC,MAAGi8C,GAAyBl8C,UAK/C5pB,KAAA+lE,6BAA4Bz8C,MACjC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOy8C,KAA6B,EACpCv8C,KAAWva,IAAWlP,KAAKktD,cAAcppB,wBAAwB50B,GAAOX,eAAgBW,GAAOsb,gBAAgBhqB,QAC7GkQ,KAAIu1D,IAAYD,GAAqCC,MAAS,EAC9Dt8C,KAAWC,OAASC,MAAGm8C,GAAkCp8C,UAKxD5pB,KAAAkmE,qBAAoB58C,MACzB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO48C,KAAkB,EACzB18C,KAAWva,IAAWlP,KAAKktD,cAAclpB,gBAAgB90B,GAAOF,QAAQi1B,aAAc/0B,GAAOF,QAAQk1B,gBAAiBh1B,GAAOF,QAAQm1B,WAAYj1B,GAAOF,QAAQo1B,eAAe5jC,QAC7KkQ,KAAI0lD,IAAU+P,GAA0B/P,MAAO,EAC/CzsC,KAAWC,OAASC,MAAGs8C,GAAuBv8C,UAI7C5pB,KAAAomE,cAAa98C,MAClB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO48C,KAAuB,EAC9B18C,KAAUva,IAAUlP,KAAKktD,cAAc7oB,UAAUn1B,GAAOuc,OAAOjrB,QAC3D2pB,KAASc,IAAK,CACZk7C,KACA5lE,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,wBACTk/C,UAAW,UAGpB,EACDn1B,KAAWC,OAASC,MAClBs8C,GAA4Bv8C,IAC5BrpB,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,QACNE,QAASgqB,GAAMhqB,QACfk/C,UAAW,aAQtB9+C,KAAAqmE,yBAAwB/8C,MAC7B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOk7C,KAA0C,EACjDh7C,KAAWva,IAAWlP,KAAKktD,cAAcvpB,qBAAqBz0B,GAAOF,QAAQV,QAASY,GAAOF,QAAQksD,KAAK16D,QACxGkQ,KAAI41D,IAAO7B,GAAkD6B,GAAKp3D,GAAOF,QAAQV,QAASY,GAAOF,QAAQksD,IAAIt3B,gBAAa,EAC1Hja,KAAWC,OAASC,MAClB46C,GAA+Cv1D,GAAOF,QAAQV,QAASsb,IACvErpB,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,iDACTk/C,UAAW,aAQlB9+C,KAAAumE,gCAA+Bj9C,MACpC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOk7C,KAAiD,EACxD/zD,KAAI41D,MACFE,aAAOF,GAAIt3D,QAAQ+d,SAAUu5C,GAAIt3D,QAAQ40B,cAAc,EAAI,IAG/D,CAAE5iC,UAAU,IAGPhB,KAAAymE,uBAAsBn9C,MAC3B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOk7C,KAAwC,EAC/Ch7C,KAAWva,IAAWlP,KAAKktD,cAAcrpB,0BAA0B30B,GAAOF,QAAQV,QAASY,GAAOF,QAAQksD,KAAK16D,QAC7G2pB,KAASm8C,IAAO,CACd7B,KACAlkE,QAAmB,CAAC,YAAa2O,GAAOF,QAAQssD,kBAAmB,QAASpsD,GAAOF,QAAQV,SAAU,CACnGgB,YAAa,CACXo3D,aAAcJ,GAAIt/B,WAAW51B,WAC7B+wB,UAAWmkC,GAAInkC,UACfC,QAASkkC,GAAIlkC,QACbukC,SAAS,QAGd,EACDh9C,KAAWC,OAASC,MAClB46C,GAA6C76C,IAC7CrpB,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,wDACTk/C,UAAW,YA1tBrB,CAAC79C,SAAAjB,KAAA,mBAAAkB,mBAXMg8C,GAAOj+C,OAAAkC,MAAAlC,OAAA6S,MAAA7S,OAAA8S,OAAA9S,OAAA8S,OAAA9S,OAAA8S,OAAA9S,OAAA8S,OAAA9S,OAAA8S,OAAA9S,OAAA8S,OAAA9S,OAAA2nE,MAAA,EAAA3lE,SAAAjB,KAAA,WAAAulB,GAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,qBCvBpB,MAAMgZ,MAAgB2Q,MAAuB,CACzC3sC,SAAUwoC,UAEVxT,OAAQ0T,EACR7L,kCAAmCoM,GACnCjM,mBAAoB6L,GACpBzK,2BAA4B0K,GAC5BrN,yBAA0BmR,WAC1BjT,gBAAiBkT,MACjB9N,oBAAqByK,GACrBzP,iBAAkBqP,GAClBnK,kBAAmB4K,GACnB7J,gBAAiB2J,GACjBzC,WAAYv7C,GACZqQ,kBAAmBuuC,GACnBr1B,YAAa81B,GACbxsC,QAASgtC,GACTj8D,OAAQw6D,GACRptC,SAAUxqB,GACVksB,YAAautC,GACb9E,qBAAsBgF,GACtBrE,aAAcwE,KAGZ,SAAUvoB,GAAQpjB,EAA0BtrB,IAC9C,OAAOgnD,GAAc17B,EAAOtrB,GAChC,4EChDO,MAAM8kD,KAAiBlW,MAAeC,KAAiBvjB,GAASA,EAAM47B,gHCCtE,MAAMvY,KAAWC,MAAekW,IAAgBx5B,GAASA,EAAM/wB,QAOzDoG,EAAavB,MAAoBwvC,MAL3BxvC,OAAoBwvC,MACnCD,EACArjB,GAASA,GAASA,EAAMstB,OAASttB,EAAMstB,MAAMx5C,IAI7C0nD,CAAU1nD,GACVw5C,GAASA,GAASA,EAAMr+C,QAGfu9D,KAAyBlpB,MAClCmpB,KACAppB,EACA,CAACvvC,EAASksB,IAAUA,EAAMstB,OAASttB,EAAMstB,MAAMx5C,IAAYksB,EAAMstB,MAAMx5C,GAAS7E,qcCd7E,MAAMy9D,KAAQ3qB,MAAa,gBAErB4qB,KAAY5qB,MAAa,uBAAqBE,SAI9C2qB,KAAe7qB,MAAa,0BAAwBE,SAKpD4qB,KAAW9qB,MAAa,sBAAoBE,SAM5C6qB,KAAe/qB,MAAa,2BAAyBE,SAIrD8qB,KAAkBhrB,MAAa,8BAA4BE,SAK3D+qB,KAAejrB,MAAa,0BAAwBE,SAIpDgrB,KAAmBlrB,MAAa,+BAA6BE,SAI7DirB,KAAsBnrB,MAAa,kCAAgCE,SAKnEkrB,KAASprB,MAAa,gBAAiB,CAACvhB,EAAsB,SAAYA,iBAE1E4sC,KAAarrB,MAAa,wBAAsBE,SAKhDorB,KAAgBtrB,MAAa,2BAAyBE,SAKtDqrB,KAAgBvrB,MAAa,4BAA0BE,+GCzC7D,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAkD,EACA5jB,GAFA1I,KAAAopB,YACAppB,KAAAssB,eACAtsB,KAAA0I,SAGZ1I,KAAA+nE,aAAYz+C,MACR,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOy+C,IAAoB,EAC3Bv+C,KAAUva,GAAUlP,KAAKssB,aAAa4c,eAAeh6B,EAAOwrB,WAAYxrB,EAAO4rB,aAAc5rB,EAAO6rB,MAAMv6B,QACtGkQ,KAAI0c,IAAS46C,EAA4B,CAAE56C,aAAQ,EACnDzD,KAAWC,OAASC,MAAGm+C,EAAyB,CAAEp+C,iBAK9D5pB,KAAAioE,oBAAmB3+C,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOy+C,IAA2B,EAClCt3D,KAAIxB,GAAUg5D,UAItBloE,KAAAmoE,iBAAgB7+C,MACZ,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOy+C,IAAwB,EAC/Bv+C,KAAUva,GAAUlP,KAAKssB,aAAauB,aAAa3e,EAAO2e,cAAcrtB,QACpEkQ,KAAI0c,IAAS46C,EAAgC,CAAE56C,aAAQ,EACvDzD,KAAWC,OAASC,MAAGm+C,EAA6B,CAAEp+C,iBAKlE5pB,KAAAooE,WAAU9+C,MACN,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOy+C,IAAkB,EACzBnsD,KAAI3M,GAAUlP,KAAKssB,aAAa8c,OAAOl6B,EAAO8rB,eAC/C,CAAEh6B,UAAU,IAGnBhB,KAAAqoE,kBAAiB/+C,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOy+C,IAAyB,EAChCnsD,KAAI3M,GAAUlP,KAAKssB,aAAa8c,OAAOl6B,EAAO8rB,eAC/C,CAAEh6B,UAAU,IAGnBhB,KAAAsoE,kBAAiBh/C,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOy+C,IAAyB,EAChCv+C,KAAUva,GAAUlP,KAAKssB,aAAa0c,cAAc95B,EAAO+5B,YAAYzoC,QACnEkQ,KAAI0c,IAAS46C,EAA4B,CAAE56C,aAAQ,EACnDzD,KAAWC,OAASC,MAAGm+C,EAAyB,CAAEp+C,gBAhD1D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCJb,MAAMM,EAAsB,CAC/BpwB,eAAOJ,EAAYI,MACnBxD,MAAO,KAEP2Q,kBAAkB,EAClBguC,cAAc,GCXZC,KAAc9qB,MAChBF,KAEAG,MAAGqqB,EAAmBxtC,QACfA,EACHD,kBAAkB,MACpB,EAEFojB,MAAGqqB,EAAuB,CAACxtC,GAAS5Q,YAAK,IAClC4Q,EACHpN,MAAO,KACPxD,QACA2Q,kBAAkB,MACpB,EAEFojB,MAAGqqB,EAA0B,CAACxtC,GAASpN,YAAK,IACrCoN,EACHpN,QACAxD,MAAO,KACP2Q,kBAAkB,MACpB,EAEFojB,MAAGqqB,EAAsBxtC,QAClBA,EACHD,kBAAkB,MACpB,EAEFojB,MAAGqqB,EAA0B,CAACxtC,GAAS5Q,YAAK,IACrC4Q,EACHpN,MAAO,KACPxD,QACA2Q,kBAAkB,MACpB,EAEFojB,MAAGqqB,EAA6B,CAACxtC,GAASpN,YAAK,IACxCoN,EACHpN,QACAxD,MAAO,KACP2Q,kBAAkB,MACpB,EAEFojB,MAAGqqB,EAA0BxtC,QACtBA,EACH+tC,cAAc,MAChB,EAEF5qB,MAAGqqB,EAA8B,CAACxtC,GAAS5Q,YAAK,IACzC4Q,EACHpN,MAAO,KACPxD,QACA2+C,cAAc,MAChB,EAEF5qB,MAAGqqB,EAAiC,CAACxtC,GAASpN,YAAK,IAC5CoN,EACHpN,QACAxD,MAAO,KACP2+C,cAAc,MAChB,EAEF5qB,MAAGqqB,EAA2BxtC,QACvBA,EACHpN,MAAO,KACPxD,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOs5D,EAAYhuC,EAAOtrB,EAC9B,gBCvEO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMiuC,MAE1DC,KAAW5qB,MAAeD,EAAUrjB,GAASA,EAAMpN,OAEnDD,MAAkB2wB,MAAeD,EAAUrjB,KAAWA,EAAMpN,OAC5DmN,KAAmBujB,MAAeD,EAAUrjB,GAASA,EAAMD,kBAC3DguC,KAAezqB,MAAeD,EAAUrjB,GAASA,EAAM+tC,qQCL7D,MAAMjsB,KAAOC,MAAa,sBACpBC,KAAWD,MAAa,0BAA4B3yB,KAAuBA,WAC3E8yB,KAAcH,MAAa,6BAA+BosB,KAAuBA,4FCCvF,IAAOC,EAAY,MAApB,MAAQA,EAEZ9oE,YACU6mB,GAAA3mB,KAAA2mB,OACN,CAEGkiD,YACL,OAAO7oE,KAAK2mB,MAAME,IAAa,aACjC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBARW0nE,GAAY3pE,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAZ8/C,EAAY7/C,QAAZ6/C,EAAY5/C,UAAAC,WAFZ,gBAEA2/C,CAAY,KCIb1rB,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACA2rB,GADA9oE,KAAAm9C,WACAn9C,KAAA8oE,gBAGL9oE,KAAA+oE,cAAaz/C,MAChB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAkB,EACzB7zB,KAAUva,GAAUlP,KAAK8oE,cAAcD,YAAYroE,QAC/CkQ,KAAIqc,GAAYuwB,EAA0BvwB,KAAS,EACnDpD,KAAWC,MAASC,MAAGyzB,EAAuB1zB,QAPtD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,GAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMM,EAAuB,CAChCmrB,OAAQ,GACR59C,UAAU,EACVkP,WAAW,EACXrQ,MAAO,MCTE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAAqB9iB,QACjBA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAwB,CAAC9iB,GAAS5Q,YAAK,IACnC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAA2B,CAAC9iB,GAASmuC,aAAM,IACvCnuC,EACHmuC,OAAQA,EACR59C,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBC3BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMmuC,QAE1D1uC,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDge,KAASkW,MAAeD,EAAUrjB,GAASA,EAAMmuC,qTCRvD,MAAMrsB,KAAOC,MAAa,iCAEpBC,KAAWD,MAAa,wCAAsCE,SAI9DC,KAAcH,MAAa,2CAAyCE,yFCE1E,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA4/C,GADAhpE,KAAAopB,YACAppB,KAAAgpE,2BAGLhpE,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0/C,IAA4B,EACnCx/C,KAAUva,IAAUlP,KAAKgpE,yBAAyBniD,MAAMrmB,QACpDkQ,KAAIw4D,GAAqBD,EAAoC,CAAEC,uBAAmB,EAClFv/C,KAAWC,MAASC,MAAGo/C,EAAiC,CAAEr/C,gBAPlE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCCb,MAAMwN,cAAUC,GAAsC,CACzDC,SAAUv5C,GAASA,EAAML,KAGhBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD9L,WAAY,KACZj0B,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACV8L,YAAY,EACZnhC,MAAO,OCjBLu/C,KAA0BzrB,MAC5BF,KAEAG,MAAGsrB,EAA8BzuC,QAC1BA,EACHP,WAAW,MACb,EAEF0jB,MAAGsrB,EAAkC,CAACzuC,GAAS5Q,YAAK,IAC7C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGsrB,EAAqC,CAACzuC,GAAS0uC,uBAAwBxe,EAAQO,OAAOie,EAAmB,IACrG1uC,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOi6D,EAAwB3uC,EAAOtrB,EAC1C,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM0uC,oBAGnEhe,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDglB,KAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UACnDjB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,gFCZzD,MAAM0yB,KAAOC,MAAa,6BACpBC,KAAWD,MAAa,iCAAmC3yB,KAAuBA,WAClF8yB,KAAcH,MAAa,oCAAsCriB,KAAgCA,SAAUA,qFCKjH,IAAMgjB,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAggD,GADAppE,KAAAopB,YACAppB,KAAAopE,uBAGLppE,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8/C,IAAwB,EAC/B5/C,KAAUva,GAAUlP,KAAKopE,qBAAqBviD,MAAMrmB,QAChDkQ,KAAI44D,GAAiBD,EAAgCC,KAAc,EACnE3/C,KAAWC,MAASC,MAAGw/C,EAA6Bz/C,QAP5D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMwN,cAAUC,GAAkC,CACrDC,SAAUv5C,GAASA,EAAM4C,KAGhBupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCdL2/C,KAAuB7rB,MACzBF,KAEAG,MAAG0rB,EAA0B7uC,QACtBA,EACHP,WAAW,MACb,EAEF0jB,MAAG0rB,EAA8B,CAAC7uC,GAAS5Q,YAAK,IACzC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG0rB,EAAiC,CAAC7uC,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IACtFM,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOq6D,EAAqB/uC,EAAOtrB,EACvC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM8uC,eAMnE5e,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,6hBCZzD,MAAM0yB,KAAOC,MAAa,6BAA+B/S,KAA6BA,oBAEhFgT,KAAWD,MAAa,qCAAmCE,SAI3DC,KAAcH,MAAa,wCAAsCE,SAIjE+sB,KAA0BjtB,MAAa,iCAAmCktB,KAAuBA,cAEjGC,KAA8BntB,MAAa,yCAAuCE,SAIlFktB,KAAiCptB,MAAa,4CAA0CE,SAIxF+P,KAASjQ,MAAa,yBAA2Bx1B,KAAgBA,UACjE2lC,KAAgBnQ,MAAa,iCAAmCxvB,KAAqBA,cACrF0/B,KAAalQ,MAAa,8BAAgC3yB,GAAgBA,0IChBjF,SAAUa,EAAem/C,GAC7B,MAAO,CACLlqE,KAAM,UACNE,QAAS,+BAA+BgqE,KACxC9qB,UAAW,IAEf,sCCGO,IAAM5B,EAAO,MAAd,MAAOA,EACXp9C,YACYspB,GACAygD,GACAnnB,IAFA1iD,KAAAopB,aACAppB,KAAA6pE,oBACA7pE,KAAA0iD,SAGL1iD,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOugD,IAAoB,EAC3BxqD,KAAetf,KAAK0iD,MAAMpiD,OAAOypE,QAAW,EAC5CtgD,KAAU,EAAGva,GAAQ86D,MAAchqE,KAAK6pE,iBAAiBhjD,IAAImjD,GAAQnqD,gBAAgBrf,QACjFkQ,KAAIu5D,IAAkBH,EAA4B,CAAEG,qBAAgB,EACpEtgD,KAAWC,OAASC,MAAGigD,EAAyB,CAAElgD,kBAKrD5pB,KAAAkqE,wCAAuC5gD,MAC5C,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOugD,IAA2B,EAClCp5D,KAAI+jD,IAAW9V,KAA+BziC,KAAMib,kBAIjDn3B,KAAAmqE,oBAAmB7gD,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOugD,IAAuC,EAC9CrgD,KAAUva,IAAUlP,KAAK6pE,iBAAiBngC,SAASx6B,GAAOu6D,UAAUjpE,QAChEkQ,KAAI05D,IAASN,EAA+C,CAAEM,YAAO,EACrEzgD,KAAWC,OAASC,MAAGigD,EAA4C,CAAElgD,kBAKtE5pB,KAAAqqE,WAAU/gD,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOugD,IAAsB,EAC7BxqD,KAAetf,KAAK0iD,MAAMpiD,OAAOypE,QAAW,EAC5C5/C,KAAS,EAAEjb,GAAQ86D,MACjBhqE,KAAK6pE,iBAAiBpgC,OAAOv6B,GAAO6X,MACnCvmB,QACCipB,KAAWsD,IAAa,CACtB+8C,EAA8B/8C,IAC9B+8C,EAAqBE,GAAQnqD,gBAC7Btf,UAAqB,CAAEuK,QAAS2f,EAAe,gBAChD,EACDd,KAAWC,KACT,MAAMc,GAAU,CACdo/C,EAA2BlgD,IAC3BrpB,UAAqB,CAAEuK,WAAS6f,MAAY,WAAYf,OAE1D,SAAOgB,KAAKF,GAAO,MA/CzB,CAACzpB,SAAAjB,KAAA,mBAAAkB,mBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCLb,MAAMwN,cAAUC,GAAoC,CACvDC,SAAUv5C,GAASA,EAAMuO,UAGhB49B,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXqwC,8BAA6B,EAC7BC,SAAS,EACTtrB,UAAU,EACVurB,sBAAuB,KACvB5gD,MAAO,OCnBL6gD,KAAkB/sB,MACpBF,KAEAG,MAAGmsB,EAAsBtvC,QAClBA,EACHP,WAAW,MACb,EAEF0jB,MAAGmsB,EAA0B,CAACtvC,GAAS5Q,aAAK,IACrC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGmsB,EAA6B,CAACtvC,GAASyvC,qBAAqBvf,EAAQO,OAAOgf,GAAgB,IACvFzvC,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGmsB,EAAyCtvC,QACrCA,EACH8vC,8BAA8B,MAChC,EAEF3sB,MAAGmsB,EAA6C,CAACtvC,GAAS5Q,aAAK,IACxD4Q,EACHzP,UAAU,EACVu/C,8BAA8B,EAC9B1gD,aACF,EAEF+zB,MAAGmsB,EAAgD,CAACtvC,GAAS4vC,aAAK,IAC3D5vC,EACHgwC,sBAAuBJ,GAAM,GAC7BE,8BAA8B,EAC9B1gD,MAAO,SACT,EAEF+zB,MAAGmsB,EAAwBtvC,QACpBA,EACHykB,UAAU,MACZ,EAEFtB,MAAGmsB,EAA4B,CAACtvC,GAAS5Q,aAAK,IACvC4Q,EACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,aACF,EAEF+zB,MAAGmsB,EAA6B,CAACtvC,GAASyvC,qBAAqBvf,EAAQO,OAAOgf,GAAgB,IACvFzvC,EACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,IAC9C,OAAOu7D,EAAgBjwC,EAAOtrB,GAClC,gBC/DO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMkwC,WAGnExf,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACXC,YAAaC,IACbb,EAAQc,aAAa3N,GAEZ9yB,MAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,MAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDqwC,KAA+BxsB,MAAeD,EAAUrjB,GAASA,EAAM8vC,8BAEvEK,KAAS7sB,MAAeD,EAAUrjB,GAASA,EAAMP,WAAaO,EAAMykB,UACpEA,KAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UAEnDjB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDghD,KAAyB9sB,MAAeD,EAAUrjB,GAASA,EAAMgwC,yeCpBvE,MAAMluB,KAAOC,MAAa,yBACpBC,KAAWD,MAAa,6BAA+B3yB,KAAuBA,WAC9E8yB,KAAcH,MAAa,gCAAkCriB,KAA2BA,SAAUA,KAGlG2wC,KAAmBtuB,MAAa,6BAChCuuB,KAAuBvuB,MAAa,iCAAmC3yB,KAAuBA,WAC9FmhD,KAA0BxuB,MAAa,oCAAsCriB,KAA2BA,SAAUA,KAGlHgvB,KAAO3M,MAAa,sBAAwBgB,KAAuBA,YACnE4L,KAAW5M,MAAa,2BAA6B3yB,KAAuBA,WAC5Ew/B,KAAc7M,MAAa,8BAAgCyuB,KAAyBh6D,GAAIg6D,sHCF9F,IAAM9tB,EAAO,MAAd,MAAOA,EAETp9C,YACYspB,EACA6hD,IADAjrE,KAAAopB,YACAppB,KAAAirE,mBAGLjrE,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2hD,IAAmB,EAC1BzhD,KAAUva,IAAUlP,KAAKirE,gBAAgBpkD,MAAMrmB,QAC3CkQ,KAAIpD,IAAS49D,EAA2B59D,MAAM,EAC9Cqc,KAAWC,OAASC,MAAGqhD,EAAwBthD,UAKpD5pB,KAAAmrE,YAAW7hD,MACd,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2hD,IAA+B,EACtCzhD,KAAUva,IAAUlP,KAAKirE,gBAAgBphC,kBAAkBrpC,QACvDkQ,KAAIpD,IAAS49D,EAAuC59D,MAAM,EAC1Dqc,KAAWC,OAASC,MAAGqhD,EAAoCthD,UAKhE5pB,KAAA6pD,SAAQvgC,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2hD,IAAmB,EAC1BzhD,KAAUva,IAAUlP,KAAKirE,gBAAgB1jC,KAAKr4B,GAAOquC,QAAQ/8C,QACzD2pB,KAAS6gD,IAAa,CAClBE,EAA2BF,IAC3BzqE,UAAqB,CAACuK,QAAS,CAC3BpL,KAAM,UACNE,QAAS,gBACTk/C,UAAW,OAEfosB,OACH,EACDvhD,KAAWC,OAASgB,KAAK,CACrBsgD,EAAwBthD,IACxBrpB,UAAqB,CAACuK,QAAS,CAC3BpL,KAAM,QACNE,QAAS,sBACTk/C,UAAW,aAxC3B,CAAC79C,SAAAjB,KAAA,mBAAAkB,mBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA6B,CAClDC,SAAU9gB,GAAWA,EAAQ71B,KAGlBupC,EAAqBkN,EAAQI,gBAAgB,CACxD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OChBHwhD,KAAmB1tB,MACvBF,KAGAG,MAAGutB,EAAsB1wC,QACpBA,EACHP,WAAW,EACXoxC,SAAS,MACT,EAEF1tB,MAAGutB,EAA4B,CAAC1wC,EAAOxrB,IAAY07C,EAAQO,OAAOj8C,EAAQkrB,SAAU,IAC/EM,EACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGutB,EAAyB,CAAC1wC,EAAOxrB,SAC/BwrB,EACHP,WAAW,EACXlP,UAAU,MACV,EAGA4yB,MAAGutB,EAAkC1wC,QAChCA,EACHP,WAAW,MACX,EAEF0jB,MAAGutB,EAAwC,CAAC1wC,EAAOxrB,IAAY07C,EAAQO,OAAOj8C,EAAQkrB,SAAU,IAC3FM,EACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGutB,EAAyB,CAAC1wC,EAAOxrB,SAC/BwrB,EACHP,WAAW,EACXlP,UAAU,MAKV,SAAU6yB,EAAQpjB,EAA0BtrB,GAChD,OAAOk8D,EAAiB5wC,EAAOtrB,EACjC,gBC9CO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM8wC,YAGrEpgB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,MAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpDwxB,KAAgB3N,MAAeD,EAAUrjB,GAASA,EAAMwkB,YAExDusB,KAAqBztB,MAChC2N,EACA1pB,EACA,CAACipC,EAAW9wC,IAAaA,GAAYA,EAAS8wC,IAGnChtB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OACnD4hD,KAAoB1tB,MAAelW,EAAQ8N,GAAcA,EAAWvP,KAAK,CAACC,EAAGC,IAAMD,EAAEpzB,KAAK+uC,cAAc1b,EAAErzB,0cCnBhH,MAAMy4D,KAAmBlvB,MAAa,6BAChCmvB,KAAuBnvB,MAAa,iCAAmC3yB,KAAuBA,WAC9F+hD,KAA0BpvB,MAAa,oCAAsCqvB,KAA4CA,sBAEzHC,KAAuBtvB,MAAa,gCAAkCrS,KAA+BA,aACrG4hC,KAA2BvvB,MAAa,qCAAuC3yB,KAAuBA,WACtGmiD,KAA8BxvB,MAAa,+ICIjD,IAAMW,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACA6uB,IADAhsE,KAAAm9C,WACAn9C,KAAAgsE,wBAGLhsE,KAAAisE,yBAAwB3iD,MAC3B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA8B,EACrC7zB,KAAUva,GAAUlP,KAAKgsE,qBAAqBhiC,uBAAuBxpC,QACjEkQ,KAAI6sC,GAAUD,EAAsCC,KAAO,EAC3D5zB,KAAWC,MAASC,MAAGyzB,EAAmC1zB,SAK/D5pB,KAAAksE,4BAA2B5iD,MAChC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAkC,EACzC7zB,KAAUva,GAAUlP,KAAKgsE,qBAAqB/hC,qBAAqB/6B,EAAOg7B,SAAS1pC,QAC/E2pB,KAASc,GAAK,CACVqyB,IACA/8C,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,uCACTk/C,UAAW,UAGpB,EACDn1B,KAAWC,MAASC,MAAGyzB,EAAuC1zB,QA1BpE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMM,EAAuB,CAChCouB,iBAAkB,GAClB7gD,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAGPuiD,0BAA0B,EAC1BC,yBAAyB,GChBhB3uB,KAAgBC,MACzBF,KAEAG,MAAGL,EAAiC9iB,QAC7BA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAoC,CAAC9iB,GAAS5Q,YAAK,IAC/C4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAuC,CAAC9iB,GAASoxC,uBAAgB,IAC7DpxC,EACHoxC,iBAAkBA,EAClB7gD,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGL,EAAqC9iB,QACnCA,EACH2xC,0BAA0B,MAC5B,EAEFxuB,MAAGL,EAAwC,CAAC9iB,GAAS5Q,YAAK,IACnD4Q,EACH2xC,0BAA0B,EAC1BC,yBAAyB,EACzBxiD,YACF,EAEF+zB,MAAGL,EAA4C9iB,QACxCA,EACH2xC,0BAA0B,EAC1BC,yBAAyB,EACzBxiD,MAAO,SAIP,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBChDO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMoxC,kBAE1D3xC,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDogB,KAAuB8T,MAAeD,EAAUrjB,GAASA,EAAMoxC,kBAG/DO,KAA2BruB,MAAeD,EAAUrjB,GAASA,EAAM2xC,0BACnEC,KAA0BtuB,MAAeD,EAAUrjB,GAASA,EAAM4xC,0QCPxE,MAAM9vB,KAAOC,MAAa,mCAAoC,CAACjuC,EAAiB6zB,EAAmBC,MAAuB9zB,UAAS6zB,YAAWC,aACxIoa,KAAWD,MAAa,wCAA0C3yB,KAAuBA,WACzF8yB,KAAcH,MAAa,2CAA6C/iB,KAAwCA,oGCMtH,MAAMkxB,cAAUC,GAAoC,IAG9CnN,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXoyC,UAAW,KACXC,QAAS,KACTh+D,QAAS,KACTsb,MAAO,sBCnBJ,MAAMi0B,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMhB,gBAE1DzO,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QAG5DshC,UAAWtjB,GACX8iB,EAAQc,aAAa3N,kBCClB,IAAMX,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAmjD,EACAxsE,GAFAC,KAAAopB,YACAppB,KAAAusE,sBACAvsE,KAAAD,UAGZC,KAAAwsE,gBAAeljD,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOkjD,IAAuB,EAC9BntD,KAAetf,KAAKD,QAAQO,OAAOosE,KAAyB,EAC5DjjD,KAAU,EAAEva,EAAQsrB,KAAWx6B,KAAKusE,oBAAoBl4B,kBACpD7Z,EAAMlsB,QACNksB,EAAM6xC,UACN7xC,EAAM8xC,SAAS9rE,QACfkQ,KAAI8oB,IAAkBizC,EAA+BjzC,MAAe,EACpE7P,KAAWC,OAASC,MAAG4iD,EAA4B7iD,SAX3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCTpB,MAAMyvB,KAAwBjvB,MAC1BF,KAEAG,MAAGivB,EAA4B,CAACpyC,GAASlsB,UAAS6zB,YAAWC,cAAO,IAC7D5H,EACHP,WAAW,EACX3rB,QAASA,GAAUksB,EAAMlsB,QACzB+9D,UAAWlqC,GAAa3H,EAAM6xC,UAC9BC,QAASlqC,GAAW5H,EAAM8xC,YAC5B,EAEF3uB,MAAGivB,EAAgC,CAACpyC,GAAS5Q,YAAK,IAC3C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGivB,EAAmC,CAACpyC,GAAShB,oBAC5CkxB,EAAQO,OAAOzxB,EACf,IACGgB,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOy9D,EAAsBnyC,EAAOtrB,EACxC,gWC9BO,MAAMotC,KAAOC,MAAa,yBACpBC,KAAWD,MAAa,6BAA+B3yB,KAAuBA,WAC9E8yB,KAAcH,MAAa,gCAAkCriB,KAA2BA,SAAUA,qFCMxG,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAyjD,IADA7sE,KAAAopB,YACAppB,KAAA6sE,mBAGH7sE,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOujD,IAAmB,EAC1BrjD,KAAUva,GAAUlP,KAAK6sE,gBAAgBhmD,MAAMrmB,QAC7CkQ,KAAIpD,GAASw/D,EAA2Bx/D,KAAM,EAC9Cqc,KAAWC,MAASC,MAAGijD,EAAwBljD,QAPjD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMwN,cAAUC,GAA6B,CAClDC,SAAUmiB,GAAWA,EAAQ94D,KAGlBupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OChBHojD,KAAmBtvB,MACvBF,KAGAG,MAAGmvB,EAAsBtyC,QACpBA,EACHP,WAAW,EACXoxC,SAAS,MACT,EAEF1tB,MAAGmvB,EAA4B,CAACtyC,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IACnFM,EACHP,WAAW,MACX,EAEF0jB,MAAGmvB,EAAyB,CAACtyC,EAAOxrB,SAC/BwrB,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAO89D,EAAiBxyC,EAAOtrB,EACjC,gBC1BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMyyC,YAGrE/hB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpDwxB,KAAgB3N,MAAeD,EAAUrjB,GAASA,EAAMwkB,YACxDusB,KAAqBztB,MAChC2N,EACA1pB,EACA,CAACmrC,EAAWhzC,IAAaA,GAAYA,EAASgzC,IAGnClvB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDujD,KAA8BrvB,MAAelW,EAAQqlC,GAAaA,EAAU38D,OAAO88D,GAAKA,EAAEC,gPCjBhG,MAAM/wB,KAAOC,MAAa,kCACpBC,KAAWD,MAAa,sCAAwC3yB,KAAuBA,WACvF8yB,KAAcH,MAAa,yCAA2C+wB,KAA4DA,8BAGlIpkB,KAAO3M,MAAa,0CAA2C,CAACgxB,EAAoCC,MAA8BD,mBAAkBC,oBACpJrkB,KAAW5M,MAAa,+CAAiD3yB,KAAuBA,WAChGw/B,KAAc7M,MAAa,kDAAmD,CAACixB,EAAyBpjD,MAAyBojD,iBAAgBpjD,cAGjJ8qB,KAAuBqH,MAAa,8BAA+B,CAACpH,EAAoC5H,MAAsB4H,6BAA4B5H,YAC1JkgC,KAA2BlxB,MAAa,mCAAqC3yB,KAAuBA,WACpG8jD,KAA8BnxB,MAAa,sCAAwC0pB,KAA0BA,cAG7G0H,KAAoBpxB,MAAa,sBAAuB,CAACpH,EAAoC5H,MAAsB4H,6BAA4B5H,YAC/IqgC,KAAwBrxB,MAAa,2BAA6B3yB,KAAuBA,WACzFikD,KAA2BtxB,MAAa,8BAAgCnyB,KAAwBA,cAGhGirB,KAAekH,MAAa,uBAAyBnyB,KAAwBA,cAC7E0jD,KAAmBvxB,MAAa,4BAA8B3yB,KAAuBA,WACrFmkD,KAAsBxxB,MAAa,+BAAiCnyB,KAAwBA,cAG5F4jD,KAAwBzxB,MAAa,0BAA4BnyB,KAAwBA,cACzF6jD,KAA4B1xB,MAAa,+BAAiC3yB,KAAuBA,WACjGskD,KAA+B3xB,MAAa,kCAAoC4xB,KAA8DA,oBAE9IlhB,KAAQ1Q,MAAa,89BClB3B,IAAMW,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAglD,EACAruE,GAFAC,KAAAopB,YACAppB,KAAAouE,mCACApuE,KAAAD,UAGHC,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAA4B,EACnC5kD,KAAUva,GAAUlP,KAAKouE,iCAAiCvnD,MAAMrmB,QAC9DkQ,KAAIwpB,GAAYm0C,KAAoCn0C,KAAS,EAC7DvQ,KAAWC,MAASC,MAAGwkD,KAAiCzkD,SAKvD5pB,KAAAsuE,gBAAehlD,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAAmC,EAC1CxyD,KAAI3M,IACEA,EAAOkb,UAAYlb,EAAOs+D,gBAC5BxtE,KAAKD,QAAQiB,SAASqtE,KAA6Cn/D,EAAOkb,UAAY,EAAGlb,EAAOs+D,gBAAe,IAGlH,CAAExsE,UAAU,IAGVhB,KAAA6pD,SAAQvgC,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAA4B,EACnC5kD,KAAUva,GAAUlP,KAAKouE,iCAAiCp5B,mBAAmB9lC,EAAOq+D,kBAAkB/sE,QACpG2pB,KAAU+P,GAAa,CACrBm0C,KAAoCn/D,EAAOs+D,eAAgBt+D,EAAOq+D,iBAAiBv8D,IACnFq9D,OACA9tE,aACAA,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,eACTk/C,UAAW,UAGhB,EACDn1B,KAAWC,MAASgB,KAAK,CACvByjD,KAAiCzkD,GACjCrpB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,4BACTk/C,UAAW,cAQhB9+C,KAAAuuE,uBAAsBjlD,MAC3B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAAgD,EACvDxyD,KAAI3M,IACsB,IAApBA,EAAOkb,UACTpqB,KAAKD,QAAQiB,SAASwtE,qBAAgD,IAGzE,CAAExtE,UAAU,IAGVhB,KAAAyuE,gBAAenlD,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAAyC,EAChD5kD,KAAUva,GAAUlP,KAAKouE,iCAAiCh5B,oCAAoClmC,EAAOimC,2BAA4BjmC,EAAOq+B,QAAQ/sC,QAC9I2pB,KAAS,IAAM,CACbkkD,KAAiDn/D,EAAOimC,4BACxDk5B,OACAK,mBACAA,cAA0C,GAC1CnuE,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,eACTk/C,UAAW,UAGhB,EACDn1B,KAAWC,MAASgB,KAAK,CACvByjD,KAA8CzkD,GAC9CrpB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,4BACTk/C,UAAW,cAQhB9+C,KAAA2uE,0BAAyBrlD,MAC9B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAA4C,EACnD5kD,KAAUva,GAAUlP,KAAKouE,iCAAiCl5B,qBAAqBhmC,EAAOimC,2BAA4BjmC,EAAOq+B,QAAQ/sC,QAC/H2pB,KAAU+P,GAAa,CACrBm0C,KAAoDn0C,MACrD,EACDvQ,KAAWC,MAASgB,KAAK,CACvByjD,KAAiDzkD,UAMlD5pB,KAAA4uE,iBAAgBtlD,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAAoC,EAC3C5kD,KAAUva,GAAUlP,KAAKouE,iCAAiC/4B,aAAanmC,EAAOkb,UAAU5pB,QACtF2pB,KAAU+P,GAAa,CACrBm0C,KAA4Cn/D,EAAOkb,UACnDikD,OACAK,mBACAnuE,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,iBACTk/C,UAAW,UAGhB,EACDn1B,KAAWC,MAASgB,KAAK,CACvByjD,KAAyCzkD,GACzCrpB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,8BACTk/C,UAAW,cAShB9+C,KAAA6uE,mBAAkBvlD,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8kD,OAA6C,EACpD5kD,KAAUva,GAAUlP,KAAKouE,iCAAiC94B,yCAAyCpmC,EAAOkb,UAAU5pB,QAClH2pB,KAAU+P,GAAa,CACrBm0C,KAAqDn0C,MACtD,EACDvQ,KAAWC,MAASgB,KAAK,CACvByjD,KAAkDzkD,SApJtD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBANMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMwN,cAAUC,GAA8C,CACnEC,SAAU0iB,GAA4BA,EAAyBr5D,KAGpDupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KACZj0B,UAAU,EACVkP,WAAW,EACX60C,YAAY,EACZllD,MAAO,KACPq8C,SAAU,GACVlb,YAAY,EACZgkB,iCAAkC,GAClCC,yBAAyB,ICxBrBC,KAAkCvxB,MACtCF,KAGAG,MAAGuxB,KAA6B10C,QAC3BA,EACHP,WAAW,MACX,EAEF0jB,MAAGuxB,KAAmC,CAAC10C,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQs+D,yBAA0B,IAC1G9yC,EACHP,WAAW,MACX,EAEF0jB,MAAGuxB,KAAiC10C,QAC/BA,EACHP,WAAW,MACX,EAGF0jB,MAAGuxB,KAA6B10C,QAC3BA,EACHs0C,YAAY,MACZ,EAEFnxB,MAAGuxB,KAAoC10C,QAClCA,EACHs0C,YAAY,MACZ,EAEFnxB,MAAGuxB,KAAiC10C,QAC/BA,EACHs0C,YAAY,MACZ,EAGFnxB,MAAGuxB,KAA6C10C,QAC3CA,EACHP,WAAW,EACXgsC,SAAU,OACV,EAEFtoB,MAAGuxB,KAAmD,CAAC10C,GAASyrC,eAAQ,IACnEzrC,EACHP,WAAW,EACXgsC,SAAUA,MACV,EAEFtoB,MAAGuxB,KAAiD10C,QAC/CA,EACHP,WAAW,MACX,EAGF0jB,MAAGuxB,KAAqC10C,QACnCA,EACHuwB,YAAY,MACZ,EAEFpN,MAAGuxB,KAA2C,CAAC10C,GAASpQ,cAAesgC,EAAQ1S,UAAU5tB,EAAU,IAC9FoQ,EACHuwB,YAAY,MACZ,EAEFpN,MAAGuxB,KAAyC10C,QACvCA,EACHuwB,YAAY,MACZ,EAGFpN,MAAGuxB,KAA8C10C,QAC5CA,EACHw0C,yBAAyB,EACzBD,iCAAkC,OAClC,EAEFpxB,MAAGuxB,KAAoD,CAAC10C,GAAS2zC,qBAAc,IAC1E3zC,EACHw0C,yBAAyB,EACzBD,iCAAkCZ,MAClC,EAEFxwB,MAAGuxB,KAAkD10C,QAChDA,EACHw0C,yBAAyB,MACzB,EAEFrxB,MAAGuxB,KAA8B10C,QAC5BA,EACHu0C,iCAAkC,OAKhC,SAAUnxB,EAAQpjB,EAA0BtrB,GAChD,OAAO+/D,EAAgCz0C,EAAOtrB,EAChD,gBClGO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM8yC,2BAGrEpiB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD60C,KAAahxB,MAAeD,EAAUrjB,GAASA,EAAMs0C,YACrDK,KAAcrxB,MAAeD,EAAUrjB,GAASA,EAAMyrC,UACtDmJ,KAAoBtxB,MAAeD,EAAUrjB,GAASA,EAAMu0C,kCAC5DC,KAA0BlxB,MAAeD,EAAUrjB,GAASA,EAAMw0C,yBAElEhxB,MAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,8MCdzD,MAAMylD,KAAa9yB,MAAa,+BAC1B+yB,KAAiB/yB,MAAa,mCAAqC3yB,KAAuB5a,QAAS,CAAE4a,YACrG2lD,KAAoBhzB,MAAa,sCAAwCizB,KAA6BxgE,QAAS,CAAEwgE,gBAEjHlzB,KAAOC,MAAa,wBACpBC,KAAWD,MAAa,4BAA8B3yB,KAAuB5a,QAAS,CAAE4a,YACxF8yB,KAAcH,MAAa,+BAAiCxoC,KAA0B/E,QAAS,CAAE+E,eAEjGy1C,KAASjN,MAAa,yBAA2BzM,KAA0B9gC,QAAS,CAAE8gC,iBAGtF2/B,KAASlzB,MAAa,yBAA0B,CAACzM,EAAoB9U,EAAsB,IAAK00C,GAAkB,EAAO3oD,MAClI+oB,aACA9U,cACA00C,SACA3oD,UAGS4oD,KAA2BpzB,MAAa,sCAAuC,CAACzM,EAAmBxhC,EAAgBD,EAAiByN,MAAoBg0B,aAAYxhC,UAASD,SAAQyN,YAGrL8zD,KAAkCrzB,MAAa,6CAA8C,CAACzM,EAAmBtxB,EAAwBnQ,EAAiByN,MAAoBg0B,aAAYtxB,kBAAiBnQ,SAAQyN,YAGnN+zD,KAA0BtzB,MAAa,4CACvCuzB,KAA8BvzB,MAAa,gDAAkD3yB,KAAuB5a,QAAS,CAAE4a,YAC/HmmD,KAAiCxzB,MAAa,mDAAqDyzB,KAAwDA,uBAE3JC,KAAmB1zB,MAAa,6BAChC2zB,KAA0B3zB,MAAa,oCAAsChX,KAA+BA,cAC5G4qC,KAAuB5zB,MAAa,2BAA6B3yB,KAAuBA,ghCChB9F,IAAMszB,EAAO,MAAd,MAAOA,GAETp9C,YACYspB,GACAgnD,EACA1nE,GAFA1I,KAAAopB,aACAppB,KAAAowE,mBACApwE,KAAA0I,SAGL1I,KAAAqwE,eAAc/mD,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAA0B,EACjCz+C,KAAUva,GAAUlP,KAAKowE,iBAAiBxoC,SAASpnC,QAC/CkQ,KAAI8+D,GAAatH,KAAkCsH,KAAU,EAC7D7lD,KAAWC,MAASC,MAAGq+C,KAA+Bt+C,SAM3D5pB,KAAAswE,sBAAqBhnD,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAiC,EACxC5oD,KACItf,KAAK0I,OAAOpI,OAAOC,+BAA2C,eAC9DP,KAAK0I,OAAOpI,OAAOC,iCAA6C,eAChEP,KAAK0I,OAAOpI,OAAOC,mBAA8B,iBAAc,EAEnEkpB,KAAU,EAAEva,EAAQqhE,EAAiBC,EAAmBC,MACpD,GAAIA,EACA,SAAO5mD,MAAGq+C,MAAwBuI,IAEtC,GAAwC,IAApCvhE,EAAOF,QAAQwgE,UAAUlsE,OACzB,SAAOumB,MAAGq+C,KAAuBh5D,EAAOF,QAAQwgE,UAAU,GAAGv7D,KAEjE,MAAMy8D,GAAkBF,GAAqBD,EAE7C,OAAIG,IAAmBxhE,EAAOF,QAAQwgE,UAAU1+D,KAAKiD,IAAYA,GAASE,KAAOy8D,KAAe,EACrF7mD,MAAGq+C,KAAuBwI,KAE9BpmD,QAKZtqB,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAoB,EAC3Bz+C,KAAUva,GAAUlP,KAAKowE,iBAAiBvpD,MAAMrmB,QAC5CkQ,KAAIqD,GAAYm0D,KAA4Bn0D,KAAS,EACrD4V,KAAWC,MAASC,MAAGq+C,KAAyBt+C,SAKrD5pB,KAAA2wE,WAAUrnD,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAsB,EAC7B5oD,KAAetf,KAAK0I,OAAOpI,OAAOmK,oBAAmCzK,KAAK0I,OAAOpI,OAAOmK,oBAA+B,EACvHoR,KAAI,EAAE3M,EAAQ0hE,EAAmBC,MAC7B7wE,KAAK0I,OAAO1H,SAAST,wBAAoC,aAAc,GAAG2O,EAAO4gC,eACjF9vC,KAAK0I,OAAO1H,SAAST,wBAAoC,eAAgB,GAAG2O,EAAO6X,KAAK7S,iBAEnFhF,EAAOwgE,QAKR1vE,KAAK0I,OAAO1H,SAAST,0BAAsC,aAAc,GAAGqwE,MAC5E5wE,KAAK0I,OAAO1H,SAAST,0BAAsC,eAAgB,GAAGswE,EAAgB79D,SAC9F5F,OAAO0jE,KAAK5hE,EAAO8rB,YAAa,SAAU,qBAN1Ch7B,KAAK0I,OAAO1H,SAAST,0BAAsC,aAAc,GAAG2O,EAAO4gC,eACnF9vC,KAAK0I,OAAO1H,SAAST,wBAAoC,eAAgB,GAAG2O,EAAO6X,KAAK7S,iBACxF9G,OAAOqvB,SAASs0C,SAAW7hE,EAAO8rB,gBAQ9C,CAAEh6B,UAAU,IAGThB,KAAAgxE,6BAA4B1nD,MAC/B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAwC,EAC/CrsD,KAAI,EAAGvN,UAASD,SAAQyhC,aAAYh0B,aAChC9b,KAAK0I,OAAO1H,SAAST,4BAAwC,2BAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,mBAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,mBAE7D,MAAM0wE,GAAen1D,EAASgD,KAAK+pB,UAAU/sB,GAAU,KACvD9b,KAAK0I,OAAO1H,SAAST,wBAAoC,kBAAmB,GAAG+N,MAC/EtO,KAAK0I,OAAO1H,SAAST,wBAAoC,iBAAkB0wE,KAEvE5iE,GACArO,KAAK0I,OAAO1H,SAAST,wBAAoC,iBAAkB,GAAG8N,MAElFrO,KAAK0I,OAAO1H,SAASkwE,KAAmBphC,EAAY,KAAK,EAAMh0B,GAAO,IAG9E,CAAE9a,UAAU,IAEThB,KAAAmxE,oCAAmC7nD,MACtC,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAA+C,EACtDrsD,KAAI,EAAG2C,kBAAiBnQ,SAAQyhC,aAAYh0B,aACxC9b,KAAK0I,OAAO1H,SAAST,4BAAwC,oBAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,mBAC7DP,KAAK0I,OAAO1H,SAAST,4BAAwC,mBAE7D,MAAM0wE,GAAen1D,EAASgD,KAAK+pB,UAAU/sB,GAAU,KAEvD9b,KAAK0I,OAAO1H,SAAST,wBAAoC,yBAA0B,GAAGie,MACtFxe,KAAK0I,OAAO1H,SAAST,wBAAoC,iBAAkB0wE,KAEvE5iE,GACArO,KAAK0I,OAAO1H,SAAST,wBAAoC,iBAAkB,GAAG8N,MAElFrO,KAAK0I,OAAO1H,SAASkwE,KAAmBphC,EAAY,KAAK,EAAMh0B,GAAO,IAG9E,CAAE9a,UAAU,IAGThB,KAAAoxE,WAAU9nD,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAsB,EAC7BrsD,KAAI3M,IACAlP,KAAK0I,OAAO1H,SAAST,wBAAoC,aAAc,GAAG2O,EAAOF,QAAQ8gC,eACzF9vC,KAAK0I,OAAO1H,SAAST,0BAAsC,aAAc,GAAG2O,EAAOF,QAAQ8gC,cAAa,IAC3G,EACDx/B,KAAOpB,KAAYA,EAAOF,QAAQ8gC,aAAU,EAC5C3lB,KAASjb,GAAU,CACfmiE,OACAC,OACAC,WAKLvxE,KAAAwxE,4BAA2BloD,MAC9B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAuC,EAC9Cz+C,KAAUva,GAAUlP,KAAKowE,iBAAiB/lC,yBAAyB7pC,QAC/DkQ,KAAIwpB,GAAYguC,KAA+ChuC,KAAS,EACxEvQ,KAAWC,MAASC,MAAGq+C,KAA4Ct+C,SAKxE5pB,KAAAyxE,qBAAoBnoD,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO2+C,OAAgC,EACvCz+C,KAAUva,GAAUlP,KAAKowE,iBAAiB9lC,kBAAkB9pC,QACxDkQ,KAAI60B,GAAY2iC,KAAwC3iC,KAAS,EACjE5b,KAAWC,MAASC,MAAGq+C,KAAqCt+C,QA/IpE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBANIg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCOb,MAAMwN,cAAUC,GAA8B,CACjDC,SAAU72C,IAAYA,GAASE,KAGtBupC,EAAsBkN,EAAQI,gBAAgB,CACvD9L,WAAY,KAEZ0yB,gBAAgB,EAChBC,iBAAiB,EAEjB5mD,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAEPgoD,oBAAqB,GACrBC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,iBAAkB,KAElBC,aAAc,GACdC,uBAAuB,EACvBC,sBAAsB,EACtBC,kBAAmB,OC1CjBC,KAAkB10B,MACpBF,KAMAG,MAAGuqB,KAA4B1tC,SACxBA,GAEHm3C,iBAAiB,MACnB,EAEFh0B,MAAGuqB,KAAgC,CAAC1tC,IAASxrB,eAAO,IAC7CwrB,GAEHm3C,iBAAiB,EACjBD,gBAAgB,EAEhB9nD,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAGuqB,KAAmC,CAAC1tC,IAASxrB,cAAc07C,EAAQO,OAAOj8C,GAAQwgE,UAAW,IACzFh1C,GAEHm3C,iBAAiB,EACjBD,gBAAgB,EAEhB9nD,MAAO,SACT,EAMF+zB,MAAGuqB,KAAsB1tC,SAClBA,GAEHP,WAAW,MACb,EAEF0jB,MAAGuqB,KAA0B,CAAC1tC,IAASxrB,eAAO,IACvCwrB,GAEHzP,UAAU,EACVkP,WAAW,EAEXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAGuqB,KAA6B,CAAC1tC,IAASxrB,cAAc07C,EAAQ2nB,UAAU,CACtErhE,GAAIhC,GAAQ+E,SAASE,GACrBvF,QAASM,GAAQ+E,UAClB,IACIymB,GAEHzP,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,SACT,EAEF+zB,MAAGuqB,KAAwB,CAAC1tC,IAASxrB,eAAO,IACrCwrB,GACHwkB,WAAYhwC,GAAQ8gC,eACtB,EAEF6N,MAAGuqB,KAAyC1tC,SACrCA,GACHs3C,8BAA8B,MAChC,EAEFn0B,MAAGuqB,KAAgD,CAAC1tC,GAAOxrB,UACpDwrB,GAEHs3C,8BAA8B,EAC9BD,6BAA6B,EAC7BD,oBAAqB5iE,GAAQghE,kBAC7B+B,iBAAkB,SACpB,EAEFp0B,MAAGuqB,KAA6C,CAAC1tC,IAASxrB,eAAO,IAC1DwrB,GAEHq3C,6BAA6B,EAC7BC,8BAA8B,EAE9BC,iBAAkB/iE,GAAQ4a,UAC5B,EAEF+zB,MAAGuqB,KAAkC1tC,SAC9BA,GACHy3C,uBAAuB,MACzB,EAEFt0B,MAAGuqB,KAAyC,CAAC1tC,IAAS+K,gBAAQ,IACvD/K,GACHy3C,uBAAuB,EACvBC,sBAAsB,EACtBF,aAAczsC,GACd4sC,kBAAmB,SACrB,EAEFx0B,MAAGuqB,KAAsC,CAAC1tC,IAAS5Q,aAAK,IACjD4Q,GACHy3C,uBAAuB,EACvBC,sBAAsB,EACtBF,aAAc,GACdG,kBAAmBvoD,OAIrB,SAAUg0B,EAAQpjB,GAA0BtrB,IAC9C,OAAOkjE,EAAgB53C,GAAOtrB,GAClC,gBClHO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,IAASA,GAAMg1C,YAGnEtkB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAGZ4N,MAAgB3N,MAAeD,EAAUrjB,IAASA,GAAMwkB,YACxD0M,KAAc5N,MAAe2N,GAAe1pB,EAAa,CAAC5T,GAAoB+L,KAAaA,IAAYA,GAAS/L,KAEhHujD,KAAiB5zB,MAAeD,EAAUrjB,IAASA,GAAMk3C,gBACzDC,KAAkB7zB,MAAeD,EAAUrjB,IAASA,GAAMm3C,iBAE1D5mD,KAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WAEpD+jB,KAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,OAEnDygB,KAAyByT,MAAeD,EAAUrjB,IAASA,GAAMo3C,qBACjEU,KAAqBx0B,MAAeD,EAAUrjB,IAASA,GAAMw3C,cAE7D1nC,GAAkBA,CAACj8B,GAAgBkkE,GAAqB,UAASz0B,MAC1E4N,EACA4mB,EACA,CAACv+D,GAAUi+D,IAAiBA,EAAa1hE,OAAOkiE,GAAeA,EAAYnkE,SAAWA,KAAWkkE,GAAaC,EAAYD,aAAeA,GAAaC,EAAYD,aAAex+D,GAAS0+D,uGC7BvL,MAAMn2B,KAAOC,MAAa,0BACpBC,KAAWD,MAAa,iCAA+BE,SACvDC,KAAcH,MAAa,oCAAkCE,6NCMnE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAspD,GADA1yE,KAAAopB,YACAppB,KAAA0yE,oBAGL1yE,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOopD,OAAsB,EAC7BlpD,KAAUva,GAAUlP,KAAK0yE,kBAAkB9qC,SAASpnC,QAChDkQ,KAAI8O,GAAcmzD,KAA8B,CAAEnzD,iBAAa,EAC/DmK,KAAWC,MAASC,MAAG8oD,KAA2B,CAAE/oD,eAP5D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oBCDb,MAAMwN,cAAUC,GAA+B,CAClDC,SAAU75C,GAAaA,EAAUC,KAGxBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCbLgpD,KAAoBl1B,MACtBF,KAEAG,MAAGg1B,KAAwBn4C,QACpBA,EACHP,WAAW,MACb,EAEF0jB,MAAGg1B,KAA4B,CAACn4C,GAAS5Q,YAAK,IACvC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGg1B,KAA+B,CAACn4C,GAAShb,gBAAiBkrC,EAAQO,OAAOzrC,EAAa,IAClFgb,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO0jE,EAAkBp4C,EAAOtrB,EACpC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMhb,aAGnE0rC,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,yjECbzD,MAAM0yB,KAAOC,MAAa,4BAA6B,CAAChX,IAAoB,MAAaA,eACnFiX,KAAWD,MAAa,iCAAmC3yB,MAAuB5a,QAAS,CAAE4a,aAC7F8yB,KAAcH,MAAa,oCAAsC1W,MAAqCA,oBAGtGgtC,KAAet2B,MAAa,qCAC5Bu2B,KAAmBv2B,MAAa,yCAA2C3yB,MAAuB5a,QAAS,CAAE4a,aAC7GmpD,KAAsBx2B,MAAa,4CAA8C1W,MAAqCA,oBAEtHmtC,KAAMz2B,MAAa,2BAA6B5W,MAAkCA,mBAClFstC,KAAU12B,MAAa,gCAAkC3yB,MAAuBA,YAChFspD,KAAa32B,MAAa,mCAAqC1W,MAAqCA,oBAEpGqjB,KAAO3M,MAAa,4BAA8B1W,MAAqCA,oBACvFsjB,KAAW5M,MAAa,iCAAmC3yB,MAAuBA,YAClFw/B,KAAc7M,MAAa,oCAAsC42B,MAA8BniE,GAAImiE,qBCFzG,MAAMzoB,KAAUC,KAAkC,CACrDC,SAAUjlB,IAAgBA,GAAa1xB,KAG9BupC,EAAsBkN,EAAQI,gBAAgB,CACvDsoB,oBAAqB,KACrBroD,UAAU,EACVkP,WAAW,EAEXswC,SAAS,EACTtrB,UAAU,EAEVo0B,SAAS,EACTC,UAAU,EACV1pD,MAAO,OCzBL2pD,KAAsB71B,MACxBF,KAEAG,MAAG4X,EAAc/6B,SACVA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,EAAkB,CAAC/6B,IAASxrB,eAAO,IAC/BwrB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4X,EAAqB,CAAC/6B,IAASqL,oBAAoB6kB,EAAQO,OAAOplB,GAAe,IAC7ErL,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAG4X,EAAsB/6B,SAClBA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,EAA0B,CAAC/6B,IAASxrB,eAAO,IACvCwrB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4X,EAA6B,CAAC/6B,IAASqL,qBAAa,IAChDrL,GACH44C,oBAAqBvtC,GACrB9a,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAG4X,EAAa/6B,SACTA,GACH84C,UAAU,MACZ,EAEF31B,MAAG4X,EAAiB,CAAC/6B,IAAS5Q,aAAK,IAC5B4Q,GACH64C,SAAS,EACTC,UAAU,EACV1pD,MAAOA,OACT,EAEF+zB,MAAG4X,EAAoB,CAAC/6B,IAASqL,oBAAoB6kB,EAAQO,OAAOplB,GAAe,IAC5ErL,GACH64C,SAAS,EACTC,UAAU,EACV1pD,MAAO,SACT,EAEF+zB,MAAG4X,EAAc/6B,SACVA,GACHykB,UAAU,MACZ,EAEFtB,MAAG4X,EAAkB,CAAC/6B,IAAS5Q,aAAK,IAC7B4Q,GACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,MAAOA,OACT,EAEF+zB,MAAG4X,EAAsB/6B,SAClBA,GACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,MAAO,SAIT,SAAUg0B,EAAQpjB,GAA0BtrB,IAC9C,OAAOqkE,EAAoB/4C,GAAOtrB,GACtC,gBCrFO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,IAASA,GAAMwM,YCE1D6W,MAAWC,MAAe8V,EAAgBp5B,IAASA,GAAMqL,gBAGlEqlB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,IAEZ9yB,KAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,KAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WAEpDswC,KAAUzsB,MAAeD,GAAUrjB,IAASA,GAAM+vC,SAClDtrB,KAAWnB,MAAeD,GAAUrjB,IAASA,GAAMykB,UAEnDo0B,MAAUv1B,MAAeD,GAAUrjB,IAASA,GAAM64C,SAClDC,MAAWx1B,MAAeD,GAAUrjB,IAASA,GAAM84C,UAEnDt1B,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnD4pD,MAAyB11B,MAAeD,GAAUrjB,IAASA,GAAM44C,qBAEjEK,EAA2BN,OAA2Br1B,MAC/D/b,EACCvH,IAAUA,GAAM24C,KAAiBngE,MCzBzBspC,KAAOC,MAAa,oCACpBC,KAAWD,MAAa,wCAA0C3yB,MAAuB5a,QAAS,CAAE4a,aACpG8yB,KAAcH,MAAa,2CAA6Cm3B,MAA0C1kE,QAAS,CAAE0kE,mBAE7HC,KAAmCp3B,MAAa,6CAChDq3B,KAAuCr3B,MAAa,iDAC5D3yB,MAAuB5a,QAAS,CAAE4a,aAE1BiqD,MAA0Ct3B,MAAa,oDAC/Du3B,MAA0DA,0BAIlDC,MAAiCx3B,MAAa,2CACtDzV,MAAgEA,mCAExDktC,MAAqCz3B,MAAa,gDAC1D3yB,MAAuBA,YAEfqqD,MAAwC13B,MAAa,mDAC7Dm3B,MAA0CA,kBCRlChpB,MAAUC,KAAyC,CAC5DC,SAAUspB,IAAcA,GAAW/yB,MAG1B3D,GAAsBkN,GAAQI,gBAAgB,CACvDgpB,oBAAqB,GACrB/oD,UAAU,EACVkP,WAAW,EAEXo5C,SAAS,EACTC,UAAU,EACVa,WAAW,EACXppB,YAAY,EAEZnhC,MAAO,OCzBLwqD,MAAoB12B,MACtBF,MAEAG,MAAG4X,EAAc/6B,SACVA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,EAAkB,CAAC/6B,IAASxrB,eAAO,IAC/BwrB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4X,EAAqB,CAAC/6B,IAASxrB,cAAc07C,GAAQO,OAAOj8C,GAAQ0kE,YAAa,IAC7El5C,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAG4X,EAA0C/6B,SACtCA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,EAA8C,CAAC/6B,IAASxrB,eAAO,IAC3DwrB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4X,GAAiD,CAAC/6B,IAASs5C,2BAAmB,IAC1Et5C,GACHs5C,oBAAqBA,GACrB/oD,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAG4X,GAAwC/6B,SACpCA,GACH84C,UAAU,MACZ,EAEF31B,MAAG4X,GAA4C,CAAC/6B,IAAS5Q,aAAK,IACvD4Q,GACH64C,SAAS,EACTC,UAAU,EACV1pD,MAAOA,OACT,EAEF+zB,MAAG4X,GAA+C,CAAC/6B,IAASk5C,kBAAkBhpB,GAAQO,OAAOyoB,GAAa,IACnGl5C,GACH64C,SAAS,EACTC,UAAU,EACV1pD,MAAO,SAOT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOklE,GAAkB55C,GAAOtrB,GACpC,CCnEO,MAAM2uC,MAAWC,MAAe8V,EAAgBp5B,IAASA,GAAMk5C,cAGpExoB,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACXb,GAAQc,aAAa3N,IAEZw2B,GAAmCC,OAAoBx2B,MAClED,GACCrjB,IAAUA,GAAMN,SAASo6C,KAGfC,MAA+Bz2B,MAAelW,GAAQpN,IAASA,GAAMlqB,OAAO0nD,IAAyB,GAApBA,GAAEwc,iBACnFC,MAAgC32B,MAAelW,GAAQpN,IAASA,GAAMlqB,OAAO0nD,IAA0B,GAArBA,GAAE0c,kBAEpFC,MAAoB72B,MAAelW,GAAQpN,IAASA,GAAMlqB,OAAO4jE,KAAeA,GAAWU,4BAA+BV,GAAWW,cACrIC,MAAqBh3B,MAAelW,GAAQpN,IAASA,GAAMlqB,OAAO4jE,KAAeA,GAAWU,6BAA+BV,GAAWW,cAEtIE,MAA2Bj3B,MAAeD,GAAUrjB,IAASA,GAAMs5C,oBAAoBpjE,IAAIwjE,IAAcA,GAAWljE,KAEpHgkE,MAA4Bl3B,MACvCg3B,GACAC,GACA,CAACE,GAAQviB,KAAQuiB,GAAO3kE,OAAO4kE,IAASxiB,GAAItiD,UAAU8kE,GAAMlkE,MAGjD+Z,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WAEpDq5C,MAAWx1B,MAAeD,GAAUrjB,IAASA,GAAM84C,UACnDvoB,MAAajN,MAAeD,GAAUrjB,IAASA,GAAMuwB,YAErD/M,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OCpCnD0yB,MAAOC,MAAa,8CACpBG,MAAcH,MAAa,qDAAuDhX,MAA8CA,eAChIiX,KAAWD,MAAa,kDAAoD3yB,MAAuBA,YAEnGs/B,KAAO3M,MAAa,6CAA+ChX,MAA8CA,eACjH6jB,MAAc7M,MAAa,sDAC3B4M,MAAW5M,MAAa,kDAAoD3yB,MAAuBA,YAEnGqjC,MAAQ1Q,MAAa,+CCFrBmO,MAAUC,KAAgD,CACnEC,SAAUrN,IAAUA,GAAO43B,wBAGlB33B,GAAsBkN,GAAQI,gBAAgB,CACvD7wB,WAAW,EACXlP,UAAU,EACVk0B,UAAU,EACVr1B,MAAO,OCbEwrD,MAAqC13B,MAC9CF,MAEAG,MAAGL,GAAoB9iB,SAChBA,GACHP,WAAW,MACb,EAEF0jB,MAAGL,GAA2B,CAAC9iB,IAAS+K,eAAemlB,GAAQO,OAAO1lB,GAAU,IACzE/K,GACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAGL,EAAwB,CAAC9iB,IAAS5Q,aAAK,IACnC4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,aACF,EAEF+zB,MAAGL,EAAoB9iB,SAChBA,GACHykB,UAAU,MACZ,EAEFtB,MAAGL,GAA2BA,GAAwB9iB,SAC/CA,GACHykB,UAAU,MACZ,EAEFtB,MAAGL,GAAqB9iB,IAASgjB,KAG/B,SAAUI,GAAQpjB,GAA0BtrB,IAC9C,OAAOkmE,GAAmC56C,GAAOtrB,GACrD,CCpCO,MAAM2uC,MAAWC,MAAe8V,EAAgBp5B,IAASA,GAAM+K,WAGpE2lB,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACXb,GAAQc,aAAa3N,IAEZ9yB,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpDglB,MAAWnB,MAAeD,GAAUrjB,IAASA,GAAMykB,UACnDjB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OCdnD0yB,MAAOC,MAAa,+BACpBC,MAAWD,MAAa,mCAAqC3yB,MAAuB5a,QAAS,CAAE4a,aAC/F8yB,MAAcH,MAAa,sCAAwC9yC,MAAiCuF,QAAS,CAAEvF,cCI/GihD,MAAUC,KAAqC,CACxDC,SAAUnhD,IAAUA,GAAOuH,KAGlBwsC,GAAsBkN,GAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXL42C,MAAgB9iB,MAClBF,MAEAG,MAAG4X,GAAc/6B,SACVA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,GAAkB,CAAC/6B,IAASxrB,eAAO,IAC/BwrB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,GAAQ4a,UACjB,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,IAASxrB,cAAc07C,GAAQO,OAAOj8C,GAAQvF,OAAQ,IACxE+wB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOsxD,GAAchmC,GAAOtrB,GAChC,CCzBO,MAAM2uC,MAAWC,MAAe8V,EAAgBp5B,IAASA,GAAM/wB,SAGlEyhD,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACbb,GAAQc,aAAa3N,IAEZ9yB,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDyrD,GAAiBC,OAAqBx3B,MAC/CD,GACCrjB,IAAUA,GAAMN,SAASo7C,iCCLvB,IAAMp4B,GAAO,MAAd,MAAOA,GAETp9C,YACYspB,GACAg5C,IADApiE,KAAAopB,aACAppB,KAAAoiE,sBAILpiE,KAAAu1E,sBAAqBjsD,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOisD,IAAsB,EAC7B/rD,KAAUva,IAAUlP,KAAKoiE,mBAAmB38B,iBAAiBv2B,GAAOq2B,UAAU/kC,QAC1EkQ,KAAIm1B,IAAiB2vC,EAA8B3vC,MAAc,EACjElc,KAAWC,OAASC,MAAG2rD,EAA2B5rD,UAKvD5pB,KAAAy1E,6BAA4BnsD,MAC/B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOisD,IAA8B,EACrC/rD,KAAUva,IAAUlP,KAAKoiE,mBAAmB38B,kBAAiB,GAAMjlC,QAC/DkQ,KAAIm1B,IAAiB2vC,EAAsC3vC,MAAc,EACzElc,KAAWC,OAASC,MAAG2rD,EAAmC5rD,UAK/D5pB,KAAA01E,qBAAoBpsD,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOisD,IAAqB,EAC5B/rD,KAAUva,IAAUlP,KAAKoiE,mBAAmB18B,gBAAgBx2B,GAAOy2B,cAAcnlC,QAC7EkQ,KAAIm1B,IAAiB2vC,EAA6B3vC,MAAc,EAChElc,KAAWC,OAASC,MAAG2rD,EAA0B5rD,UAKtD5pB,KAAA21E,sBAAqBrsD,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOisD,IAAsB,EAC7B/rD,KAAUva,IAAUlP,KAAKoiE,mBAAmBx8B,kBAAkB12B,GAAO22B,eAAerlC,QAChF2pB,KAASyrD,IAAa,CAClBJ,EAA8BI,IAC9BJ,IACAj1E,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,uBACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAG2rD,EAA2B5rD,UAMvD5pB,KAAA61E,oBAAmBvsD,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOusD,IAAoB,EAC3BrsD,KAAUva,IAAUlP,KAAKoiE,mBAAmBh9B,iBAAiB5kC,QACzDkQ,KAAIgjE,IAAeoC,EAA4BpC,MAAY,EAC3D/pD,KAAWC,OAASC,MAAGisD,EAAyBlsD,UAKrD5pB,KAAA+1E,4BAA2BzsD,MAC9B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOusD,IAAgD,EACvDrsD,KAAUva,IAAUlP,KAAKoiE,mBAAmB58B,yBAAyBhlC,QACjEkQ,KAAIojE,IAAuBgC,GAAwDhC,MAAoB,EACvGnqD,KAAWC,OAASC,MAAGisD,EAAqDlsD,UAKjF5pB,KAAAg2E,2BAA0B1sD,MAC7B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0sD,KAAiB,EACxBxsD,KAAUva,IAAUlP,KAAKoiE,mBAAmB/8B,wBAAwB7kC,QAChEkQ,KAAI60B,IAAY0wC,GAAyB1wC,MAAS,EAClD5b,KAAWC,OAASC,MAAGosD,EAAsBrsD,UAKlD5pB,KAAAk2E,2BAA0B5sD,MAC7B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0sD,IAAiB,EACxBxsD,KAAUva,IAAUlP,KAAKoiE,mBAAmB98B,uBAAuBp2B,GAAOq2B,UAAU/kC,QAChFkQ,KAAI,IAAMulE,OAA0B,EACpCtsD,KAAWC,OAASC,MAAGosD,GAAsBrsD,UAKlD5pB,KAAAm2E,kCAAiC7sD,MACpC,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0sD,KAAwB,EAC/B9rD,KAASjb,IAAU,CACf3O,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,wCACTk/C,UAAW,OAGnBm3B,SAKLj2E,KAAAo2E,+BAA8B9sD,MACjC,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0sD,KAAqB,EAC5B9rD,KAASjb,IAAU,CACf3O,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,kDAAkDsP,GAAO0a,OAAOhqB,SAAW,KACpFk/C,UAAW,WASxB9+C,KAAAq2E,oBAAmB/sD,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOusD,KAA8C,EACrDrsD,KAAUva,IAAUlP,KAAKoiE,mBAAmBv7B,+BAA+B33B,GAAO43B,8BAA8BtmC,QAC5G2pB,KAASupD,IAAe,CACpBoC,GAAsDpC,IACtDnzE,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,gCACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGisD,GAAmDlsD,UAO/E5pB,KAAAgkE,eAAc16C,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO06C,KAAe,EACtBx6C,KAAUva,IAAUlP,KAAKoiE,mBAAmBvyD,YAAYrP,QACpDkQ,KAAIjH,IAAUw6D,GAAuBx6D,MAAO,EAC5CkgB,KAAWC,OAASC,MAAGo6C,GAAoBr6C,SAzJnD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBALIg8C,IAAOj+C,OAAAkC,MAAAlC,OAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,GAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCNpB,MAAMo5B,MAAoBzP,MAAuB,CAC7ChhC,cAAe2vC,EACf9B,YAAaoC,GACbvwC,SAAU0wC,GACVxsE,OAAQw6D,KAGN,SAAUrmB,GAAQpjB,GAA0BtrB,IAC9C,OAAOonE,GAAkB97C,GAAOtrB,GACpC,4JCfO,MAAMotC,KAAOC,MAAa,0BAEpBC,KAAWD,MAAa,iCAA+BE,SAIvDC,KAAcH,MAAa,oCAAkCE,SAI7D85B,KAASh6B,MAAa,wBACjC,CAAChF,EAAcC,OAA4BD,OAAMC,kBAEtCg/B,KAAaj6B,MAAa,gCAA8BE,SAIxDg6B,KAAgBl6B,MAAa,iCAE7B8M,KAAS9M,MAAa,8BAA4BE,SAKlD6M,KAAa/M,MAAa,mCAAiCE,SAI3D8M,KAAgBhN,MAAa,sCAAoCE,SAIjEi6B,KAAgBn6B,MAAa,yBACvChF,KAAoBA,UAEVo/B,KAAoBp6B,MAAa,iCAA+BE,SAIhEm6B,KAAuBr6B,MAAa,wIChC1C,IAAMW,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,GACA05B,IADA72E,KAAAm9C,YACAn9C,KAAA62E,qBAGL72E,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAe,EACtBrtD,KAAUva,IAAUlP,KAAK62E,kBAAkBhwD,MAAMrmB,QAC7CkQ,KAAIqmE,GAAiBD,EAAuB,CAAEC,oBAAgB,EAC9DptD,KAAWC,MAASC,MAAGitD,EAAoB,CAAEltD,gBAKlD5pB,KAAAg3E,QAAO1tD,MACZ,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAiB,EACxBrtD,KAAUva,IAAUlP,KAAK62E,kBAAkBluD,KAAKzZ,GAAOqoC,KAAMroC,GAAOsoC,aAAah3C,QAC7EkQ,KAAIqc,GAAY+pD,MAA0B,EAE1CntD,KAAWC,MAASC,MAAGitD,EAAsB,CAAEltD,gBAKlD5pB,KAAAuqD,WAAUjhC,MACf,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOutD,IAAiB,EACxBrtD,KAAUva,IAAUlP,KAAK62E,kBAAkB3uD,OAAOhZ,GAAO8B,GAAI9B,GAAOqoC,MAAM/2C,QACxEkQ,KAAIqc,GAAY+pD,EAAyB,CAACriB,QAAS1nC,MAAU,EAC7DpD,KAAWC,MAASC,MAAGitD,EAAsB,CAACltD,MAAOA,UAKpD5pB,KAAAi3E,eAAc3tD,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAwB,EAC/B3sD,KAASjb,IAAU,CACjB3O,UAAqB,CAACuK,QAAS,CAAElL,QAAS,eAAgBk/C,UAAW,IAAMp/C,KAAM,aACjFo3E,QAMD92E,KAAAk3E,YAAW5tD,MAChB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAqB,EAC5BpmE,KAAIxB,IAAU3O,UAAqB,CAACuK,QAAS,CAAElL,QAAS,uBAAuBsP,GAAO0a,OAAOhqB,SAAW,KAAMk/C,UAAW,IAAMp/C,KAAM,cAIpIM,KAAAsqD,kBAAiBhhC,MACtB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOutD,IAAwB,EAC/B3sD,KAASjb,IAAU,CACjB3O,UAAqB,CAACuK,QAAS,CAAElL,QAAS,sBAAuBk/C,UAAW,IAAMp/C,KAAM,aACxFo3E,QAMD92E,KAAA2tD,eAAcrkC,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAqB,EAC5BpmE,KAAIxB,IAAU3O,UAAqB,CAACuK,QAAS,CAAElL,QAAS,oBAAqBk/C,UAAW,IAAMp/C,KAAM,cAInGM,KAAAm3E,eAAc7tD,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAwB,EAC/BrtD,KAAUva,IAAUlP,KAAK62E,kBAAkBhuD,IAAI3Z,GAAOqoC,MAAM/2C,QACxDkQ,KAAIqc,GAAY+pD,MAAiC,EACjDntD,KAAWC,MAASC,MAAGitD,EAA6B,CAAEltD,gBAKzD5pB,KAAAo3E,sBAAqB9tD,MAC1B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAA+B,EACtC3sD,KAASjb,IAAU,CACjB3O,UAAqB,CAACuK,QAAS,CAAElL,QAAS,eAAgBk/C,UAAW,IAAMp/C,KAAM,aACjFo3E,QAMD92E,KAAAq3E,mBAAkB/tD,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAA4B,EACnCpmE,KAAIxB,IAAU3O,UAAqB,CAACuK,QAAS,CAAElL,QAAS,+BAA+BsP,GAAO0a,OAAS,KAAMk1B,UAAW,IAAMp/C,KAAM,aA7FpI,CAACuB,SAAAjB,KAAA,mBAAAkB,mBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCQb,MAAMwN,cAAUC,GAA0C,CAC7DC,SAAU0sB,GAAgBA,EAAarjE,GACvC42C,cAAc,IAGLrN,EAAsBkN,EAAQI,gBAAgB,CAEvD//B,UAAU,EACVkP,WAAW,EAEXo5C,SAAS,EACTC,UAAU,EAEVr0B,UAAU,EACVsrB,SAAS,EAETxf,YAAY,EAEZnhC,MAAO,OC/BL2tD,KAAa75B,MACfF,KAEAG,MAAGm5B,EAAiBt8C,QACbA,EACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGm5B,EAAqB,CAACt8C,GAAS5Q,aAAK,IAChC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGm5B,EAAwB,CAACt8C,GAASu8C,oBAAoBrsB,EAAQO,OAAO8rB,GAAe,IAChFv8C,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGm5B,EAAoBt8C,QAClBA,EACH84C,UAAU,MACV,EAEF31B,MAAGm5B,EAA2Bt8C,QACzBA,EACH84C,UAAU,EACV1pD,MAAO,SACP,EAEF+zB,MAAGm5B,EAAuB,CAACt8C,GAAQ5Q,aAAK,IACnC4Q,EACH84C,UAAU,EACV1pD,MAAOA,OACP,EAEF+zB,MAAGm5B,EAAoBt8C,QAClBA,EACHuwB,YAAY,MACZ,EAEFpN,MAAGm5B,EAA2Bt8C,QACzBA,EACHuwB,YAAY,EACZnhC,MAAO,SACP,EAEF+zB,MAAGm5B,EAAuB,CAACt8C,GAAQ5Q,aAAK,IACnC4Q,EACHuwB,YAAY,EACZnhC,MAAOA,OACP,EAEF+zB,MAAGm5B,EAA2Bt8C,QACzBA,EACH84C,UAAU,MACV,EAEF31B,MAAGm5B,EAAkCt8C,QAChCA,EACH84C,UAAU,EACV1pD,MAAO,SACP,EAEF+zB,MAAGm5B,EAA8B,CAACt8C,GAAQ5Q,aAAK,IAC1C4Q,EACH84C,UAAU,EACV1pD,MAAOA,OAIP,SAAUg0B,EAAQpjB,EAA0BtrB,IAC9C,OAAOqoE,EAAW/8C,EAAOtrB,GAC7B,gBC7EO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMg9C,YAGnEtsB,UAAWtjB,GAIX8iB,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDglB,KAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UACnD8L,KAAajN,MAAeD,EAAUrjB,GAASA,EAAMuwB,aACrD/M,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,sSCfzD,MAAM0yB,KAAOC,MAAa,uBACpBC,KAAWD,MAAa,8BAA4BE,SACpDC,KAAcH,MAAa,iCAA+BE,yFCMhE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAquD,GADAz3E,KAAAopB,YACAppB,KAAAy3E,iBAGLz3E,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmuD,IAAmB,EAC1BjuD,KAAUva,GAAUlP,KAAKy3E,eAAe7vC,SAASpnC,QAC7CkQ,KAAIinE,IAAWD,EAA2B,CAAEC,cAAS,EACrDhuD,KAAWC,OAASC,MAAG6tD,EAAwB,CAAE9tD,iBAPzD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA4B,CAC/CC,SAAUgtB,GAAUA,EAAO5mE,KAGlBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLiuD,KAAiBn6B,MACnBF,KAEAG,MAAG+5B,EAAqBl9C,QACjBA,EACHP,WAAW,MACb,EAEF0jB,MAAG+5B,EAAyB,CAACl9C,GAAS5Q,YAAK,IACpC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG+5B,EAA4B,CAACl9C,GAASm9C,aAAcjtB,EAAQO,OAAO0sB,EAAS,IACxEn9C,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO2oE,EAAer9C,EAAOtrB,EACjC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMm9C,UAGnEzsB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,inDCVzD,MAAMkuD,KAAUv7B,MAAa,mCACvBw7B,KAAcx7B,MAAa,uCAAyC3yB,MAAuBA,YAC3FouD,KAAiBz7B,MAAa,0CAA4C07B,MAAgCA,WAE1GC,KAAoB37B,MAAa,4CAA8CjuC,MAAuBA,cACtG6pE,KAAwB57B,MAAa,iDAAmD3yB,MAAuBA,YAC/GwuD,KAA2B77B,MAAa,oDAAsD07B,MAAgCA,WAE9H/uB,KAAO3M,MAAa,iCAAkC,CAACjuC,GAAiBw8B,GAAqBC,GAAoCx7B,GAAqBA,YAAO,CAASjB,WAASw8B,eAAaC,oBAAkBx7B,eAC9M45C,KAAW5M,MAAa,sCAAwC3yB,MAAuBA,YACvFw/B,KAAc7M,MAAa,0CAE3B8P,KAAS9P,MAAa,mCAAoC,CAACjuC,GAAiBy8B,GAAoCx7B,GAAqBA,YAAO,CAASjB,WAASy8B,oBAAkBx7B,eAChL+8C,KAAa/P,MAAa,wCAA0C3yB,MAAuBA,YAC3F2iC,KAAgBhQ,MAAa,4CAE7B8M,KAAS9M,MAAa,oCAAsCzR,MAA2BA,kBACvFwe,KAAa/M,MAAa,yCAA2C3yB,MAAuBA,YAC5F2/B,KAAgBhN,MAAa,4CAA8CzR,MAA2BA,kBAEtGutC,KAAmB97B,MAAa,8CAAgD+7B,MAAmDA,wBACnIC,KAAuBh8B,MAAa,mDAAqD3yB,MAAuBA,YAChH4uD,KAA0Bj8B,MAAa,sDAAwDk8B,MAAwDA,8BAEvJC,MAAmBn8B,MAAa,8CAAgDo8B,MAAmDA,wBACnIC,KAAuBr8B,MAAa,mDAAqD3yB,MAAuBA,YAChHivD,KAA0Bt8B,MAAa,uDAEvCu8B,KAAYv8B,MAAa,mCAAqCxR,MAA0CA,uBACxGguC,KAAmBx8B,MAAa,2DCZtC,MAAMmO,KAAUC,KAAsC,CACzDC,SAAU7f,IAAoBA,GAAiBiuC,mBAC/CnuB,cAAc,IAGLrN,EAAsBkN,EAAQI,gBAAgB,CAEvD//B,UAAU,EACVkP,WAAW,EAEXglB,UAAU,EAEV8L,YAAY,EACZkuB,cAAc,EAEdR,wBAAyB,KAEzBS,aAAc,KACdC,kBAAkB,EAClBC,YAAa,KAEbxvD,MAAO,OCtCE6zB,KAAgBC,MACzBF,KAGAG,MAAGL,EAAuB9iB,SACnBA,GACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGL,EAA2B,CAAC9iB,IAAS5Q,aAAK,IACtC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGL,EAA8B,CAAC9iB,IAASy9C,WAAWvtB,EAAQO,OAAOgtB,GAAM,IACpEz9C,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGL,EAAkC9iB,SAC9BA,GACH0+C,aAAc,KACdC,kBAAkB,MACpB,EAEFx7B,MAAGL,EAAqC,CAAC9iB,IAAS5Q,aAAK,IAChD4Q,GACH5Q,MAAOA,OACT,EAEF+zB,MAAGL,EAAwC,CAAC9iB,IAASy9C,YAAI,IAClDz9C,GACH0+C,aAAcjB,GACdkB,kBAAkB,MACpB,EAEFx7B,MAAGL,EAAyB,CAAC9iB,IAASuQ,wBAAgB,IAC/CvQ,GACH4+C,YAAaruC,GACbmuC,aAAc,SAChB,EAEFv7B,MAAGL,EAAiC9iB,SAC7BA,GACH4+C,YAAa,SACf,EAEFz7B,MACIL,EACAA,EACC9iB,SACMA,GACHykB,UAAU,MACZ,EAENtB,MACIL,EACAA,EACA,CAAC9iB,SAAO,IACDA,GACHykB,UAAU,EACVr1B,MAAO,SACT,EAGN+zB,MACIL,EACAA,EACA,CAAC9iB,IAAS5Q,aAAK,IACR4Q,GACHykB,UAAU,EACVr1B,MAAOA,OACT,EAGN+zB,MAAGL,EAAuB9iB,SACnBA,GACHuwB,YAAY,MACd,EAEFpN,MAAGL,EAA6B,CAAC9iB,IAASsQ,kBAAkB4f,EAAQ1S,UAAUlN,GAAa,IACpFtQ,GACHuwB,YAAY,EACZnhC,MAAO,SACT,EAGF+zB,MAAGL,EAA0B,CAAC9iB,IAAS5Q,aAAK,IACrC4Q,GACHuwB,YAAY,EACZnhC,MAAOA,OACT,EAEF+zB,MAAGL,EAAiC9iB,SAC7BA,GACHy+C,cAAc,MAChB,EAEFt7B,MAAGL,EAAuC,CAAC9iB,IAAQi+C,+BAAuB,IACnEj+C,GACHy+C,cAAc,EACdI,aAAa,EACbZ,wBAAyBA,GACzB7uD,MAAO,SACT,EAEF+zB,MAAGL,EAAoC,CAAC9iB,IAAS5Q,aAAK,IAC/C4Q,GACHy+C,cAAc,EACdI,aAAa,EACbzvD,MAAOA,OAKT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOuuC,EAAcjjB,GAAOtrB,GAChC,iBC5HO,MAAM2uC,MAAWC,MAAeC,MAAiBvjB,IAASA,GAAMf,mBCC1DokB,MAAWC,MAAe8V,GAAgBp5B,IAASA,GAAMltB,QAGlE49C,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,IAEZ9yB,KAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,KAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnD0vD,MAAiBx7B,MAAeD,GAAUrjB,IAASA,GAAM4+C,aACzDG,MAAez7B,MAAeD,GAAUrjB,IAASA,GAAM0+C,cACvDM,MAAqB17B,MAAeD,GAAUrjB,IAASA,GAAM2+C,kBAE7DpuB,MAAajN,MAAeD,GAAUrjB,IAASA,GAAMuwB,YAErD9L,MAAWnB,MAAeD,GAAUrjB,IAASA,GAAMykB,UAEnDg6B,MAAen7B,MAAeD,GAAUrjB,IAASA,GAAMy+C,cAEvDQ,MAAY37B,MAAeD,GAAUrjB,IAASA,GAAMi+C,yBCzBpDn8B,MAAOC,MAAa,wCACpBC,MAAWD,MAAa,4CAA8C3yB,MAAuBA,YAC7F8yB,MAAcH,MAAa,+CAAiDm9B,MAAgDA,sBCK5HhvB,MAAUC,KAA2C,CAC9DC,SAAU+uB,IAAaA,GAAU1lE,KAGxBupC,GAAsBkN,GAAQI,gBAAgB,CAEvD//B,UAAU,EACVkP,WAAW,EAGXrQ,MAAO,OCfLwqD,MAAoB12B,MACtBF,MAEAG,MAAG4X,GAAc/6B,SACVA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,GAAkB,CAAC/6B,IAAS5Q,aAAK,IAC7B4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,OACT,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,IAASk/C,sBAAsBhvB,GAAQO,OAAOyuB,GAAiB,IACjFl/C,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAOT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOklE,GAAkB55C,GAAOtrB,GACpC,CC5BO,MAAM2uC,MAAWC,MAAe8V,GAAgBp5B,IAASA,GAAMk/C,kBAGpExuB,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACXb,GAAQc,aAAa3N,ICRZvB,MAAOC,MAAa,kCACpBC,MAAWD,MAAa,sCAAwC3yB,MAAuBA,YACvF8yB,MAAcH,MAAa,yCAA2Cq9B,MAAoCA,gBCM1GlvB,MAAUC,KAAqC,CACxDC,SAAU+uB,IAAaA,GAAU1lE,KAGxBupC,GAAsBkN,GAAQI,gBAAgB,CAEvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCfLwqD,MAAoB12B,MACtBF,MAEAG,MAAG4X,GAAc/6B,SACVA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,GAAkB,CAAC/6B,IAAS5Q,aAAK,IAC7B4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,IAASo/C,gBAAgBlvB,GAAQO,OAAO2uB,GAAW,IACrEp/C,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAOT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOklE,GAAkB55C,GAAOtrB,GACpC,CC5BO,MAAM2uC,KAAWC,MAAe8V,GAAgBp5B,IAASA,GAAMo/C,YAGpE1uB,UAAWtjB,EACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACXb,GAAQc,aAAa3N,GCRZvB,MAAOC,MAAa,+CACpBC,MAAWD,MAAa,mDAAqD3yB,MAAuBA,YACpG8yB,MAAcH,MAAa,sDAAwDs9B,MAAwCA,kBCK3HnvB,MAAUC,KAAuC,CAC1DC,SAAUivB,IAAeA,GAAY5lE,KAG5BupC,GAAsBkN,GAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCdLkwD,MAAgBp8B,MAClBF,MAEAG,MAAG4X,GAAc/6B,SACVA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,GAAkB,CAAC/6B,IAAS5Q,aAAK,IAC7B4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,OACT,EAEF+zB,MAAG4X,GAAqB,CAAC/6B,IAASq/C,kBAAiBnvB,GAAQO,OAAO4uB,GAAa,IACxEr/C,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAOT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAO4qE,GAAct/C,GAAOtrB,GAChC,CC5BO,MAAM2uC,MAAWC,MAAe8V,GAAgBp5B,IAASA,GAAMq/C,cAGpE3uB,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACXb,GAAQc,aAAa3N,wDCOlB,IAAMX,GAAO,MAAd,MAAOA,GACTp9C,YACYq9C,GACA48B,GACArxE,IAFA1I,KAAAm9C,YACAn9C,KAAA+5E,4BACA/5E,KAAA0I,UAGL1I,KAAAmrE,YAAW7hD,MACd,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAA+B,EACtC16D,KAAetf,KAAK0I,OAAOpI,OAAOuK,SAAiC,EACnE4e,KAAU,EAAEva,GAAQlB,MAAqBhO,KAAK+5E,yBAAyBlvC,SAAS78B,IAAiBxN,QAC7FkQ,KAAIwpB,IAAY8/C,EAAuC9/C,MAAS,EAChEvQ,KAAWC,OAASC,MAAGmwD,EAAoCpwD,UAKhE5pB,KAAAi6E,qBAAoB3wD,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAAyC,EAChDvwD,KAAUva,IAAUlP,KAAK+5E,yBAAyBlvC,SAAS37B,GAAOZ,SAAS9N,QACvEqb,KAAIqe,IAAYA,GAASiM,KAAK,CAACC,GAAGC,KAAOD,GAAE8zC,oBAAsB7zC,GAAE6zC,oBAAuB,GAAI,KAAG,EACjGxpE,KAAIwpB,IAAY8/C,EAAiD9/C,MAAS,EAC1EvQ,KAAWC,OAASC,MAAGmwD,EAA8CpwD,UAK1E5pB,KAAAm6E,yBAAwB7wD,MAC3B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAA6C,EACpD7vD,KAASjb,IAAU,CACf3O,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAASsP,GAAO0a,MAAMhqB,QACtBk/C,UAAW,WAOxB9+C,KAAAuqD,WAAUjhC,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAA8B,EACrC16D,KAAetf,KAAK0I,OAAOpI,OAAOuK,SAAiC,EACnE4e,KAAU,EAAEva,GAAQlB,MAAqBhO,KAAK+5E,yBAAyB7xD,OAAOla,GAAiBkB,GAAO47B,aAAatqC,QAC/G2pB,KAASc,IAAK,CACV+uD,EAAsC9qE,GAAO47B,aAC7CvqC,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,oDACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGmwD,EAAmCpwD,UAKtE5pB,KAAAo6E,kBAAiB9wD,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO8wD,KAA2B,EAClC5wD,KAAUva,IAAUlP,KAAK+5E,yBAAyB1uC,qBAAqB7qC,QACnEkQ,KAAIipE,IAAaU,GAAmCV,MAAU,EAC9DhwD,KAAWC,OAASC,MAAGwwD,GAAgCzwD,UAKnE5pB,KAAAs6E,kBAAiBhxD,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOgxD,KAAqB,EAC5B9wD,KAAUva,IAAUlP,KAAK+5E,yBAAyBzuC,eAAe9qC,QAC7DkQ,KAAIkpE,IAAaW,GAA6BX,MAAU,EACxDjwD,KAAWC,OAASC,MAAG0wD,GAA0B3wD,UAK7D5pB,KAAAw6E,oBAAmBlxD,MACf,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOkxD,KAAuB,EAC9BhxD,KAAUva,IAAUlP,KAAK+5E,yBAAyBxuC,iBAAiB/qC,QAC/DkQ,KAAImpE,IAAeY,GAA+BZ,MAAY,EAC9DlwD,KAAWC,OAASC,MAAG4wD,GAA4B7wD,UAK/D5pB,KAAA06E,qBAAoBpxD,MAChB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAAwC,EAC/CvwD,KAAUva,IAAUlP,KAAK+5E,yBAAyB9uC,gBAAgB/7B,GAAOopE,mBAAmB93E,QACxFkQ,KAAIqc,IAAYitD,EAAgDjtD,MAAS,EACzEpD,KAAWC,OAASC,MAAGmwD,EAA6CpwD,UAKhF5pB,KAAA26E,qBAAoBrxD,MAChB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,KAAwC,EAC/CvwD,KAAUva,IAAUlP,KAAK+5E,yBAAyB5uC,gBAAgBj8B,GAAOypE,mBAAmBn4E,QACxFkQ,KAAIqc,IAAYitD,MAAiD,EACjErwD,KAAWC,OAASC,MAAGmwD,EAA6CpwD,UAKhF5pB,KAAA46E,wBAAuBtxD,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAA4B,EACnCvwD,KAAUva,IAAUlP,KAAK+5E,yBAAyBxyC,KAAKr4B,GAAOZ,QAASY,GAAO47B,YAAa57B,GAAO67B,kBAAkBvqC,QAChHkQ,KAAIqc,IAAYitD,MAAqC,EACrDn+D,KAAI,IAAM3M,GAAOK,aAAU,EAC3Boa,KAAWC,OAASC,MAAGmwD,EAAiCpwD,UAKpE5pB,KAAA66E,0BAAyBvxD,MACrB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,IAA8B,EACrCvwD,KAAUva,IAAUlP,KAAK+5E,yBAAyB/uC,OAAO97B,GAAOZ,QAASY,GAAO67B,kBAAkBvqC,QAC9FkQ,KAAIqc,IAAYitD,MAAuC,EACvDn+D,KAAI,IAAM3M,GAAOK,aAAU,EAC3Boa,KAAWC,OAASC,MAAGmwD,EAAiCpwD,UAKpE5pB,KAAA86E,4BAA2BxxD,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,EAAoCA,IAAgC,EAC3EtpE,KAAIxB,IAAU3O,WAAqB,CAAEuK,QAAS,CAC1CpL,KAAM,QACNE,QAAyEsP,GAAO0a,MAAMhqB,QACtFk/C,UAAW,UAMvB9+C,KAAA+6E,+BAA8BzxD,MAC1B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOywD,EAAuCA,IAAmC,EACjFtpE,KAAIxB,IAAU3O,WAAqB,CAAEuK,QAAS,CAC1CpL,KAAM,UACNE,QAAS,4BACTk/C,UAAW,SArJnB,CAAC79C,SAAAjB,KAAA,mBAAAkB,mBALIg8C,IAAOj+C,OAAAkC,MAAAlC,OAAA6S,MAAA7S,OAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,GAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCXpB,MAAM89B,MAA2BnU,MAAuB,CACpD6S,gBAAiBuB,GACjBrB,UAAWsB,GACX5tE,MAAO6tE,GACPtB,YAAauB,KAGX,SAAUx9B,GAAQpjB,GAA0BtrB,IAC9C,OAAO8rE,GAAyBxgD,GAAOtrB,GAC3C,6WCbO,MAAMmsE,KAAiB9+B,MAAa,0BAA2B,CAACjuC,EAAiBgtE,EAAmBC,EAAoBh4C,EAAuBC,MAA8Bl1B,UAASgtE,YAAWC,aAAYh4C,eAAcC,oBACrNg4C,KAAwBj/B,MAAa,kCAAmC,CAAC1gB,EAAmBvtB,MAAuButB,YAAWvtB,aAE9HmtE,KAAkBl/B,MAAa,2BAA6BrS,KAAmCA,aAC/FwxC,KAAyBn/B,MAAa,mCAAoC,CAAC1gB,EAAmBvtB,EAAiBqtE,MAA2B9/C,YAAWvtB,UAASqtE,iBAE9JC,KAAkBr/B,MAAa,2BAA6B3yB,KAAuBA,WAEnFiyD,KAAqBt/B,MAAa,8BAA+B,CAAC1gB,EAAmB7f,EAAwB8/D,EAA2B,KAAMC,MAA0BlgD,YAAW7f,iBAAgB8/D,mBAAmBC,iBACtNC,KAAyBz/B,MAAa,mCAAoC,CAACvgC,EAAwB4N,MAAsB5N,iBAAgB4N,WACzIqyD,KAA4B1/B,MAAa,sCAAuC,CAAC1gB,EAAmB7f,EAAwBvS,EAAuBqyE,EAA0BC,MAA0BlgD,YAAW7f,iBAAgBvS,SAAQqyE,mBAAkBC,iBCL5Pv+B,EAAuB,CAChC0+B,WAAW,EACXtyD,MAAO,MCNLuyD,KAAuBz+B,MACzBF,KAEAG,MAAGy+B,EAA+BA,EAAgC5hD,QAC3DA,EACH0hD,WAAW,MACb,EAEFv+B,MAAGy+B,EAAsCA,EAAuC5hD,QACzEA,EACH0hD,WAAW,MACb,EAEFv+B,MAAGy+B,EAAgC,CAAC5hD,GAAS5Q,YAAK,IAC3C4Q,EACH0hD,WAAW,EACXtyD,MAAOA,MAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOitE,EAAqB3hD,EAAOtrB,EACvC,gBCxBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM6hD,gBAE1DH,KAAYp+B,MAAeD,EAAUrjB,GAASA,EAAM0hD,WACpDl+B,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,qMCWzD,IAAMszB,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACAm/B,EACA5zE,GAFA1I,KAAAm9C,WACAn9C,KAAAs8E,wBACAt8E,KAAA0I,SAOL1I,KAAAu8E,mBAAkBjzD,MACrB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAAmC,EAC1C/yD,KAAUva,GAAUlP,KAAKs8E,sBAAsB3kC,iBAAiBzoC,EAAOZ,QAASY,EAAOq0B,aAAcr0B,EAAOs0B,gBAAgBhjC,QACxHkQ,KAAImrB,IAAa2gD,EAA2C3gD,GAAW3sB,EAAOZ,WAAQ,EACtFqb,KAAWC,OAASC,MAAG2yD,EAAqC5yD,UAKjE5pB,KAAAy8E,0BAAyBnzD,MAC5B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAA0C,EACjDryD,KAASjb,IACL,MAAMwtE,GAAe,IAAI9gD,KAA6B1sB,EAAO2sB,UAAW3sB,EAAOZ,SAE/E,MAAO,CACHquE,KAAwBD,IACxBF,EAAwCttE,EAAO2sB,UAAW6gD,GAAa1rE,GAAI,KAAM,GAAE,KAU5FhR,KAAA48E,oBAAmBtzD,MACtB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAAoC,EAC3C/yD,KAAUva,GAAUlP,KAAKs8E,sBAAsB1kC,yBAAyB1oC,EAAOg7B,SAAS1pC,QACpF2pB,KAAS0R,IAAa,CACpB2gD,EAA4C3gD,GAAW3sB,EAAOg7B,QAAQ57B,QAASY,EAAOg7B,QAAQkyB,aAG9FqQ,KAAwBv9D,EAAOg7B,QAAQ57B,YACxC,EACDqb,KAAWC,OAASC,MAAG2yD,EAAqC5yD,UAKjE5pB,KAAA68E,2BAA0BvzD,MAC7B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAA2C,EAClDryD,KAASjb,IAEL,IAAKA,EAAO2sB,UAER,MAAO,CACHt7B,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,0BACTk/C,UAAW,QAM3B,MAAM49B,GAAe,IAAI3gD,KAA8B7sB,EAAOysE,YAAazsE,EAAO2sB,UAAW3sB,EAAOZ,SAEpG,MAAO,CACHquE,KAAwBD,IACxBF,EAAwCttE,EAAO2sB,UAAW6gD,GAAa1rE,GAAI,KAAM,GAAE,KAU5FhR,KAAA88E,uBAAsBxzD,MACzB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,EAA4CA,IAA2C,EAC9F9rE,KAAIxB,GAAU3O,UAAqB,CAC/BuK,QAAS,CACLpL,KAAM,UACNE,QAAS,gBACTk/C,UAAW,UAMpB9+C,KAAA+8E,oBAAmBzzD,MACtB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAAoC,EAC3C9rE,KAAIxB,GAAU3O,UAAqB,CAC/BuK,QAAS,CACLpL,KAAM,QACNE,QAA8DsP,EAAO0a,MAAMhqB,QAC3Ek/C,UAAW,UAUpB9+C,KAAAg9E,uBAAsB1zD,MACzB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAAuC,EAC9CryD,KAASjb,GAAUlP,KAAKs8E,sBAAsBzkC,iBAAiB3oC,EAAO2sB,WAAWr7B,QAC7EkQ,KAAIjH,IAAU+yE,EAA+CttE,EAAO2sB,UAAW3sB,EAAO8M,eAAgBvS,GAAQyF,EAAO4sE,iBAAmB5sE,EAAO6sE,aAAe,KAAG,EACjKpyD,KAAWC,OAASC,MAAG2yD,EAA4CttE,EAAO8M,eAAgB4N,UAK/F5pB,KAAAi9E,wBAAuB3zD,MAC1B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAA8C,EACrDl9D,KAAetf,KAAK0I,OAAOpI,OAAO48E,QAA6B,EAC/D/yD,KAAS,EAAEjb,EAAQiuE,MAEVA,GAAcrsE,KAAK4rE,IAAgBA,GAAa1rE,KAAO9B,EAAO8M,gBAI/D9M,EAAO6sE,YAAc,IACrB/7E,KAAK0I,OAAO1H,SAAS27E,KAA2BztE,EAAO8M,eAAgB,aAAa,IAC7EsO,MAGXtqB,KAAK0I,OAAO1H,SAAS27E,KAA2BztE,EAAO8M,eAAgB9M,EAAOzF,OAAO9F,MAAOuL,EAAO4sE,mBAAqB5sE,EAAOzF,OAAO2zE,gCAElIluE,EAAOzF,OAAOwN,WACPqT,OAEA+yD,KAAM,KAAO78E,QAChBkQ,KAAIua,IAAKuxD,EAAwCttE,EAAO2sB,UAAW3sB,EAAO8M,eAAgB9M,EAAOzF,OAAO2zE,8BAA+BluE,EAAO6sE,gBAd3IzxD,OAqBhBtqB,KAAAs9E,qBAAoBh0D,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOizD,IAA2C,EAClDl9D,KAAetf,KAAK0I,OAAOpI,OAAO48E,QAA6B,EAC/DxsE,KAAI,EAAExB,EAAQiuE,MACLA,GAAcrsE,KAAK4rE,IAAgBA,GAAa1rE,KAAO9B,EAAO8M,gBAG5D2gE,KAA2BztE,EAAO8M,eAA6E9M,EAAO0a,MAAMhqB,SAAc,GAFtI,OAGd,EACD0Q,KAAOpB,KAAYA,IA/JvB,CAACjO,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,OAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,iSCfb,MAAM+P,KAAQ1Q,MAAa,8BAErBD,KAAOC,MAAa,4BAA6B,CAC5D9Q,EACAC,EACAC,MACM38B,QAAS,CAAEy8B,YAAWC,WAAUC,iBAE3B6Q,KAAWD,MAAa,oCAAkCE,SAG1DC,KAAcH,MAAa,oCAAsCriB,KAAsCA,SAAUA,qFCFvH,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAm0D,GADAv9E,KAAAopB,YACAppB,KAAAu9E,6BAGHv9E,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOi0D,IAA8B,EACrC/zD,KAAUva,GAAUlP,KAAKu9E,2BAA2B12D,IAAI3X,EAAOF,QAAQy8B,UAAWv8B,EAAOF,QAAQ08B,SAAUx8B,EAAOF,QAAQ28B,YAAYnrC,QACpIkQ,KAAIwpB,IAAYsjD,EAAsCtjD,MAAS,EAC/DvQ,KAAWC,OAASC,MAAG2zD,EAAmC5zD,SAP5D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAwC,CAC7DC,SAAUrN,GAAUA,EAAOkgC,WAGhBjgC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCdH8zD,KAA4BhgC,MAChCF,KAGAG,MAAG6/B,EAAiC,SAC/BhgC,MACH,EAGFG,MAAG6/B,EAAiChjD,QAC/BA,EACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAG6/B,EAAuC,CAAChjD,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IAC9FM,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACP,EAEF+zB,MAAG6/B,EAAoC,CAAChjD,GAAS5Q,YAAK,IACjD4Q,EACHP,WAAW,EACXrQ,YAKE,SAAUg0B,EAAQpjB,EAA0BtrB,GAChD,OAAOwuE,EAA0BljD,EAAOtrB,EAC1C,gBClCO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMmjD,sBAGrEzyB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,sSCTzD,MAAM0yB,KAAOC,MAAa,0CAEpBC,KAAWD,MAAa,iDAA+CE,SAIvEC,KAAcH,MAAa,oDAAkDE,yFCAnF,IAAMS,EAAO,MAAd,MAAOA,EACXp9C,YACUq9C,EACAygC,GADA59E,KAAAm9C,WACAn9C,KAAA49E,uBAGH59E,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOs0D,IAA8B,EACrCp0D,KAAUva,GAAUlP,KAAK49E,qBAAqBlkC,cAAcl5C,QAC1DkQ,KAAIotE,IAAYD,EAAsC,CAAEC,gBAAW,EACnEn0D,KAAWC,OAASC,MAAGg0D,EAAmC,CAAEj0D,gBAP9D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMwN,cAAUC,GAA2C,CAChEC,SAAUmzB,GAAUA,EAAO9pE,GAC3B42C,cAAc,IAGHrN,EAAsBkN,EAAQI,gBAAgB,CACzD//B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCdHo0D,KAA4BtgC,MAChCF,KAEAG,MAAGkgC,EAAgCrjD,QAC9BA,EACHP,WAAW,MACX,EAEF0jB,MAAGkgC,EAAoC,CAACrjD,GAAS5Q,YAAK,IACjD4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACA,EAEF+zB,MAAGkgC,EAAuC,CAACrjD,GAASsjD,cAAepzB,EAAQO,OAAO6yB,EAAU,IACvFtjD,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKL,SAAUg0B,EAAQpjB,EAA0BtrB,GAChD,OAAO8uE,EAA0BxjD,EAAOtrB,EAC1C,gBC1BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMyjD,0BAGrE/yB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACXb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,ocCuBzD,IAAMszB,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA1gB,IADA1I,KAAAopB,YACAppB,KAAA0I,UAML1I,KAAAk+E,iBAAgB50D,MACnB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgoD,OAAgB,EACvBpnD,KAASjb,IAAU,CACfgS,SACAC,OACAC,OACAC,OACAI,OACAC,YACAC,OACAQ,SACAA,4BACAA,qBACAE,OACAC,YACAA,YACAA,YACAM,SACAC,SACAG,OACAE,OACAC,SACAC,OACAE,OACAC,SACAE,OACAG,SACAE,SACAO,OACAC,SACAG,QACAC,OACAQ,WAKLllB,KAAAm+E,uBAAsB70D,MACzB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MACIrI,WACAC,KACAC,KACAC,KACAI,KACAC,cACAC,KACAQ,8BACAA,WACAA,uBACAE,KACAC,cACAA,cACAA,cACAM,WACAC,WACAG,KACAE,KACAC,WACAC,KACAE,KACAC,WACAE,KACAG,WACAE,WACAO,KACAC,WACAG,MACAC,KACAQ,OAAsC,EAE1C5F,KAAetf,KAAK0I,OAAOpI,OAAO89E,QAAwB,EAC1D9tE,KAAO,EAAEpB,GAAQ+qB,MAAeA,KAAS,EACzCvpB,KAAI,EAAExB,GAAQ+qB,MAAes3C,KAAqB,CAAE3nD,MAAO1a,GAAO0a,WAKnE5pB,KAAAq+E,0BAAyB/0D,MAC5B,IAAMtpB,KAAKopB,UAAU5oB,QACjB89E,KACIt+E,KAAKopB,UAAU5oB,QAAK+oB,MAAOrI,gBAC3BlhB,KAAKopB,UAAU5oB,QAAK+oB,MAAOpI,OAC3BnhB,KAAKopB,UAAU5oB,QAAK+oB,MAAOnI,OAC3BphB,KAAKopB,UAAU5oB,QAAK+oB,MAAOlI,OAC3BrhB,KAAKopB,UAAU5oB,QAAK+oB,MAAO9H,OAC3BzhB,KAAKopB,UAAU5oB,QAAK+oB,MAAO7H,mBAC3B1hB,KAAKopB,UAAU5oB,QAAK+oB,MAAO5H,OAC3B3hB,KAAKopB,UAAU5oB,QAAK+oB,MAAOpH,mCAC3BniB,KAAKopB,UAAU5oB,QAAK+oB,MAAOpH,gBAC3BniB,KAAKopB,UAAU5oB,QAAK+oB,MAAOpH,4BAC3BniB,KAAKopB,UAAU5oB,QAAK+oB,MAAOlH,OAC3BriB,KAAKopB,UAAU5oB,QAAK+oB,MAAOjH,mBAC3BtiB,KAAKopB,UAAU5oB,QAAK+oB,MAAOjH,mBAC3BtiB,KAAKopB,UAAU5oB,QAAK+oB,MAAOjH,mBAC3BtiB,KAAKopB,UAAU5oB,QAAK+oB,MAAO3G,gBAC3B5iB,KAAKopB,UAAU5oB,QAAK+oB,MAAO1G,gBAC3B7iB,KAAKopB,UAAU5oB,QAAK+oB,MAAOvG,OAC3BhjB,KAAKopB,UAAU5oB,QAAK+oB,MAAOrG,OAC3BljB,KAAKopB,UAAU5oB,QAAK+oB,MAAOpG,gBAC3BnjB,KAAKopB,UAAU5oB,QAAK+oB,MAAOnG,OAC3BpjB,KAAKopB,UAAU5oB,QAAK+oB,MAAOjG,OAC3BtjB,KAAKopB,UAAU5oB,QAAK+oB,MAAOhG,gBAC3BvjB,KAAKopB,UAAU5oB,QAAK+oB,MAAO9F,OAC3BzjB,KAAKopB,UAAU5oB,QAAK+oB,MAAO3F,gBAC3B5jB,KAAKopB,UAAU5oB,QAAK+oB,MAAOzF,gBAC3B9jB,KAAKopB,UAAU5oB,QAAK+oB,MAAOlF,OAC3BrkB,KAAKopB,UAAU5oB,QAAK+oB,MAAOjF,gBAC3BtkB,KAAKopB,UAAU5oB,QAAK+oB,MAAO9E,QAC3BzkB,KAAKopB,UAAU5oB,QAAK+oB,MAAO7E,OAC3B1kB,KAAKopB,UAAU5oB,QAAK+oB,MAAOrE,SAA2C,EAE1E5F,KAAetf,KAAK0I,OAAOpI,OAAO89E,QAAwB,EAC1D9tE,KAAO,EAAEpB,GAAQ+qB,MAAeA,KAAS,EACzCvpB,KAAI,IAAM6gE,SAxHd,CAACtwE,SAAAjB,KAAA,mBAAAkB,mBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAu+E,EAAAz1D,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,0+GC5Bb,MAAMshC,KAAuBjiC,MAAa,iCAAmCjuC,MAAuBA,cAC9FmwE,KAA2BliC,MAAa,sCAAwC3yB,MAAuBA,YACvG80D,KAA8BniC,MAAa,yCAA2CoiC,MAA0BA,eAMhHC,KAA4BriC,MAAa,wCACzCsiC,KAAgCtiC,MAAa,4CAA8C3yB,MAAuBA,YAClHk1D,KAAmCviC,MAAa,+CAAiDwiC,MAAqCA,oBAMtIC,KAAgCziC,MAAa,2CAA6CjuC,MAAuBA,cACjH2wE,KAAoC1iC,MAAa,gDAAkD3yB,MAAuBA,YAC1Hs1D,KAAuC3iC,MAAa,mDAAqD4iC,MAAgDA,gBAOzJC,KAAyB7iC,MAAa,mCAAoC,CAACjuC,GAAiBqwE,OAA+BrwE,WAASqwE,eACpIU,KAA6B9iC,MAAa,wCAA0C3yB,MAAuBA,YAC3G01D,KAAgC/iC,MAAa,4CAM7CgjC,KAAuBhjC,MAAa,iCAAkC,CAACjuC,GAAiBqwE,OAA+BrwE,WAASqwE,eAChIa,KAA2BjjC,MAAa,sCAAwC3yB,MAAuBA,YACvG61D,KAA8BljC,MAAa,0CAM3CmjC,KAAyBnjC,MAAa,mCAAoC,CAACjuC,GAAiB+9B,OAAkC/9B,WAAS+9B,yBACvIszC,KAA6BpjC,MAAa,wCAA0C3yB,MAAuBA,YAC3Gg2D,KAAgCrjC,MAAa,4CAM7CsjC,KAA0BtjC,MAAa,oCAAsCjuC,MAAuBA,cACpGwxE,KAA8BvjC,MAAa,yCAA2C3yB,MAAuBA,YAC7Gm2D,KAAiCxjC,MAAa,4CAA8CyjC,MAAsCA,kBAMlIC,KAAiC1jC,MAAa,4CAA6C,CAACjuC,GAAiBk+B,OAAoDl+B,WAASk+B,4BAC1K0zC,KAAqC3jC,MAAa,iDAAmD3yB,MAAuBA,YAC5Hu2D,KAAwC5jC,MAAa,qDAMrD6jC,KAAyB7jC,MAAa,mCAAoC,CAACjuC,GAASo+B,OAAoCp+B,WAASo+B,2BACjI2zC,KAA6B9jC,MAAa,wCAA0C3yB,MAAuBA,YAC3G02D,KAAgC/jC,MAAa,4CAM7CgkC,KAAyChkC,MAAa,qDAC/D,CAAC3P,GAA0BC,OAA6BD,oBAAkBC,oBACjE2zC,KAA6CjkC,MAAa,0DAA4D3yB,MAAuBA,YAC7I62D,KAAgDlkC,MAAa,8DAM7DmkC,MAA8BnkC,MAAa,yCAA0C,CAACjuC,GAAShB,OAAoCgB,WAAShB,YAC5IqzE,KAAkCpkC,MAAa,8CAAgD3yB,MAAuBA,YACtHg3D,KAAqCrkC,MAAa,kDAMlDskC,KAAkCtkC,MAAa,8CAA+C,CAACjuC,GAASd,OAAuCc,WAASd,WACxJszE,KAAsCvkC,MAAa,mDAAqD3yB,MAAuBA,YAC/Hm3D,KAAyCxkC,MAAa,sDAAwDykC,MAAqCA,+BAMnJC,KAA8B1kC,MAAa,yCAC3C2kC,KAAkC3kC,MAAa,6CAA+C3yB,MAAuBA,YACrHu3D,KAAqC5kC,MAAa,gDAAkD4K,MAAwCA,iBAM5Ii6B,MAAoB7kC,MAAa,+BACjC8kC,MAAwB9kC,MAAa,mCAAqC3yB,MAAuBA,YACjG03D,MAA2B/kC,MAAa,sCAAwCglC,MAAmCA,iBAMnHC,MAAkBjlC,MAAa,2BAA4B,CAAChuC,GAAwBD,OAAwBC,kBAAgBD,cAC5HmzE,KAAsBllC,MAAa,gCAAkC3yB,MAAuBA,YAC5F83D,KAAyBnlC,MAAa,mCAAqColC,MAAmCA,eAE9GC,KAAyBrlC,MAAa,kCAC9CslC,MAA0CA,oBAElCC,KAAavlC,MAAa,0BAC1BwlC,KAAcxlC,MAAa,2BAE3BylC,KAAiCzlC,MAAa,4CAA8CykC,MAAwCA,kLCtH1I,IAAM9jC,GAAO,MAAd,MAAOA,GACTp9C,YACYmiF,GACA9kC,GACAp9C,IAFAC,KAAAiiF,eACAjiF,KAAAm9C,YACAn9C,KAAAD,WAILC,KAAAkiF,yBAAwB54D,OAC3B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAkC,EACzC7zB,MAAUva,IAAUlP,KAAKiiF,YAAYn2C,YAAY58B,GAAOZ,SAAS9N,QAC7DkQ,MAAI8a,IAAS8xB,EAA0C9xB,MAAM,EAC7D7B,MAAWC,OAASC,OAAGyzB,EAAuC1zB,UAKnE5pB,KAAAmiF,8BAA6B74D,OAChC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAuC,EAC9C7zB,MAAUva,IAAUlP,KAAKiiF,YAAYl2C,mBAAmBvrC,QACpDkQ,MAAIquE,IAAiBzhC,EAA+CyhC,MAAc,EAClFp1D,MAAWC,OAASC,OAAGyzB,EAA4C1zB,UAKxE5pB,KAAAoiF,kCAAiC94D,OACpC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAA2C,EAClD7zB,MAAUva,IAAUlP,KAAKiiF,YAAYj2C,qBAAqB98B,GAAOZ,SAAS9N,QACtEkQ,MAAIyuE,IAAa7hC,EAAmD6hC,MAAU,EAC9Ex1D,MAAWC,OAASC,OAAGyzB,EAAgD1zB,UAK5E5pB,KAAAqiF,4BAA2B/4D,OAC9B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAoC,EAC3C7zB,MAAUva,IAAUlP,KAAKiiF,YAAYh2C,eAAe/8B,GAAOZ,QAASY,GAAOyvE,UAAUn+E,QACjF2pB,MAASc,IAAK,CACVqyB,IACAA,EAAmCpuC,GAAOZ,SAC1CgvC,EAA4CpuC,GAAOZ,SACnD/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,2BACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASC,OAAGyzB,EAAyC1zB,UAKrE5pB,KAAAsiF,0BAAyBh5D,OAC5B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAkC,EACzC7zB,MAAUva,IAAUlP,KAAKiiF,YAAY91C,aAAaj9B,GAAOZ,QAASY,GAAOyvE,UAAUn+E,QAC/E2pB,MAASc,IAAK,CACVqyB,IACAA,EAAmCpuC,GAAOZ,SAC1CgvC,EAA4CpuC,GAAOZ,SACnD/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,4BACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASC,OAAGyzB,EAAuC1zB,UAKnE5pB,KAAAuiF,4BAA2Bj5D,OAC9B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAoC,EAC3C7zB,MAAWva,IAAWlP,KAAKiiF,YAAY71C,eAAel9B,GAAOZ,QAASY,GAAOm9B,oBAAoB7rC,QAC7F2pB,MAASc,IAAK,CACVqyB,IACAA,EAAmCpuC,GAAOZ,SAC1CgvC,EAA4CpuC,GAAOZ,SACnD/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,8BACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASC,OAAGyzB,EAAyC1zB,UAMrE5pB,KAAAwiF,4BAA2Bl5D,OAC9B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAqC,EAC5C7zB,MAAUva,IAAUlP,KAAKiiF,YAAY31C,eAAep9B,GAAOZ,SAAS9N,QAChEkQ,MAAIsvE,IAAe1iC,EAA6C0iC,MAAY,EAC5Er2D,MAAWC,OAASC,OAAGyzB,EAA0C1zB,UAKtE5pB,KAAAyiF,mCAAkCn5D,OACrC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAA4C,EACnD7zB,MAAUva,IAAUlP,KAAKiiF,YAAY11C,4BAA4Br9B,GAAOZ,QAASY,GAAOs9B,uBAAuBhsC,QAC3G2pB,MAASc,IAAK,CACVqyB,IACAA,EAAsCpuC,GAAOZ,SAC7CgvC,EAA4CpuC,GAAOZ,SACnD/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,6BACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASC,OAAGyzB,EAAiD1zB,UAK7E5pB,KAAA0iF,2BAA0Bp5D,OAC7B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAoC,EAC3C7zB,MAAUva,IAAUlP,KAAKiiF,YAAYx1C,eAAev9B,GAAOZ,QAASY,GAAOw9B,sBAAsBlsC,QAC7F2pB,MAASc,IAAK,CACVqyB,IACAA,EAAsCpuC,GAAOZ,SAC7C/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,8BACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASC,OAAGyzB,EAAyC1zB,UAKrE5pB,KAAA2iF,2CAA0Cr5D,OAC7C,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAoD,EAC3Dh+B,MACItf,KAAKD,QAAQO,OAAOmK,6BACpBzK,KAAKD,QAAQO,OAAOmK,4BAAgC,EAExDgf,MAAU,EAAEva,GAAQ0zE,GAAYt0E,MAAatO,KAAKiiF,YAAYt1C,+BAA+Br+B,GAASs0E,GAAW5xE,GAAI9B,GAAO09B,iBAAkB19B,GAAO29B,eAAersC,QAChK2pB,MAASc,IAAK,CACVqyB,IACAA,EAAsChvC,IACtC/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qCACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASgB,MAAK,CACrB0yB,EAAyD1zB,IACzDrpB,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,uCACTk/C,UAAW,cAQ5B9+C,KAAA6iF,gCAA+Bv5D,OAClC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,KAAyC,EAChD7zB,MAAUva,IAAUlP,KAAKiiF,YAAYn1C,oBAAoB59B,GAAOZ,QAASY,GAAO5B,OAAO9M,QACnF2pB,MAASc,IAAK,CACVqyB,IACAA,EAAsCpuC,GAAOZ,SAC7C/N,WAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,oCACTk/C,UAAW,UAGtB,EACDn1B,MAAWC,OAASC,OAAGyzB,EAA8C1zB,UAK1E5pB,KAAA8iF,iCAAgCx5D,OACnC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAA6C,EACpD7zB,MAAUva,IAAUlP,KAAKiiF,YAAYl1C,oBAAoB79B,GAAOZ,QAASY,GAAO1B,MAC/EhN,QACG2pB,MAASc,IAAK,CACVqyB,IACAA,EAAsCpuC,GAAOZ,YAEhD,EAEDqb,MAAWC,OAASC,OAAGyzB,EAAkD1zB,UAK9E5pB,KAAA+iF,gCAA+Bz5D,OAClC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,IAAyC,EAChD7zB,MAAUwB,IAAKjrB,KAAKiiF,YAAYj1C,0BAA0BxsC,QACtDkQ,MAAIy2C,IAAc7J,EAAiD6J,MAAW,EAC9Ex9B,MAAWC,OAASC,OAAGyzB,EAA8C1zB,UAM1E5pB,KAAAgjF,sBAAqB15D,OACxB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,KAA+B,EACtC7zB,MAAUwB,IAAKjrB,KAAKiiF,YAAYh1C,mBAAmBzsC,QAC/CkQ,MAAI6wE,IAAcjkC,GAAuCikC,MAAW,EACpE53D,MAAWC,OAASC,OAAGyzB,GAAoC1zB,UAMhE5pB,KAAAijF,oBAAmB35D,OACtB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,OAAO+zB,KAA6B,EACpC7zB,MAAUva,IAAUlP,KAAKiiF,YAAY/0C,eAAeh+B,GAAOX,eAAgBW,GAAOZ,SAAS9N,QACvFkQ,MAAIixE,IAAYrkC,EAAqCqkC,MAAS,EAC9Dh4D,MAAWC,OAASC,OAAGyzB,EAAkC1zB,SApPjE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBALIg8C,IAAOj+C,OAAAkC,OAAAlC,OAAA6S,OAAA7S,OAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,GAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCqDb,MAAMM,GAAsB,CAC/BmkC,SAAU,KACVhD,SAAU,CACNuE,eAAgB,KAChBC,gBAAiB,MAErBnD,YAAa,KAEbjB,cAAe,KAEfI,UAAW,CACPiE,mBAAoB,KACpBC,kBAAmB,MAGvBl8B,WAAY,KACZo6B,WAAY,KAEZ+B,cAAc,EAEd15D,MAAO,KAGN25D,mBAAmB,EACnBC,kBAAkB,EAElBC,wBAAwB,EACxBC,uBAAuB,EAEvBC,4BAA4B,EAC5BC,2BAA2B,EAE3BC,sBAAsB,EACtBC,qBAAqB,EAErBC,+BAA+B,EAC/BC,8BAA8B,EAE9BC,qBAAqB,EACrBC,oBAAoB,EAEpBC,mBAAmB,EACnBC,kBAAkB,EAGlBC,oBAAoB,EACpBC,mBAAmB,EAEnBC,sBAAsB,EACtBC,qBAAqB,EAGrBC,kBAAkB,EAClBC,iBAAiB,EAEjBC,oBAAoB,EACpBC,mBAAmB,EAEnBC,0BAA0B,EAC1BC,yBAAyB,EAEzBC,yBAAyB,EACzBC,wBAAwB,EAGxBC,oBAAoB,EACpBC,mBAAmB,EACnBlE,yBAAyB,MCtIjBvjC,MAAgBC,MACzBF,MAGAG,MAAGL,EAAqC9iB,SACjCA,GACH+oD,mBAAmB,MACrB,EAEF5lC,MAAGL,EAAwC,CAAC9iB,IAAS5Q,aAAK,IACnD4Q,GACH+oD,mBAAmB,EACnBC,kBAAkB,EAClB55D,aACF,EAEF+zB,MAAGL,EAA2C,CAAC9iB,IAASmkD,gBAAQ,IACzDnkD,GACHmkD,SAAUA,GAEV4E,mBAAmB,EACnBC,kBAAkB,EAClB55D,MAAO,SACT,EAEF+zB,MAAGL,EAA0C9iB,SACtCA,GACHipD,wBAAwB,MAC1B,EAEF9lC,MAAGL,EAA6C,CAAC9iB,IAAS5Q,aAAK,IACxD4Q,GACHipD,wBAAwB,EACxBC,uBAAuB,EACvB95D,aACF,EAEF+zB,MAAGL,EAAgD,CAAC9iB,IAASukD,qBAAa,IACnEvkD,GACHukD,cAAeA,GAEf0E,wBAAwB,EACxBC,uBAAuB,EACvB95D,MAAO,SACT,EAEF+zB,MAAGL,EAA8C9iB,SAC1CA,GACHmpD,4BAA4B,MAC9B,EAEFhmC,MAAGL,EAAiD,CAAC9iB,IAAS5Q,aAAK,IAC5D4Q,GACHmpD,4BAA4B,EAC5BwB,2BAA2B,EAC3Bv7D,aACF,EAEF+zB,MAAGL,EAAoD,CAAC9iB,IAAS2kD,iBAAS,IACnE3kD,GACH2kD,UAAW,CACPiE,mBAAoBjE,GAAUiE,mBAC9BC,kBAAmBlE,GAAUkE,mBAGjCM,4BAA4B,EAC5BwB,2BAA2B,EAC3Bv7D,MAAO,SACT,EAEF+zB,MAAGL,EAAuC9iB,SACnCA,GACH6pD,oBAAoB,MACtB,EAEF1mC,MAAGL,EAA0C,CAAC9iB,IAAS5Q,aAAK,IACrD4Q,GACH6pD,oBAAoB,EACpBC,mBAAmB,EACnB16D,aACF,EAEF+zB,MAAGL,EAA8C9iB,SAC1CA,GACH6pD,oBAAoB,EACpBC,mBAAmB,EACnB16D,MAAO,SACT,EAEF+zB,MAAGL,EAAqC9iB,SACjCA,GACHiqD,kBAAkB,MACpB,EAEF9mC,MAAGL,EAAwC,CAAC9iB,IAAS5Q,aAAK,IACnD4Q,GACHiqD,kBAAkB,EAClBC,iBAAiB,EACjB96D,aACF,EAEF+zB,MAAGL,EAA4C9iB,SACxCA,GACHiqD,kBAAkB,EAClBC,iBAAiB,EACjB96D,MAAO,SACT,EAEF+zB,MAAGL,EAAuC9iB,SACnCA,GACHyqD,oBAAoB,EACpBC,mBAAmB,MACrB,EAEFvnC,MAAGL,EAA0C,CAAC9iB,IAAS5Q,aAAK,IACrD4Q,GACHyqD,oBAAoB,EACpBC,mBAAmB,EACnBt7D,aACF,EAEF+zB,MAAGL,EAA8C9iB,SAC1CA,GACHyqD,oBAAoB,EACpBC,mBAAmB,EACnBt7D,MAAO,SACT,EAGF+zB,MAAGL,EAAwC9iB,SACpCA,GACHqpD,sBAAsB,MACxB,EAEFlmC,MAAGL,EAA2C,CAAC9iB,IAAS5Q,aAAK,IACtD4Q,GACHqpD,sBAAsB,EACtBC,qBAAqB,EACrBl6D,aACF,EAEF+zB,MAAGL,EAA8C,CAAC9iB,IAASwlD,mBAAW,IAC/DxlD,GACHwlD,YAAaA,GAEb6D,sBAAsB,EACtBC,qBAAqB,EACrBl6D,MAAO,SACT,EAEF+zB,MAAGL,EAA+C9iB,SAC3CA,GACH+pD,sBAAsB,MACxB,EAEF5mC,MAAGL,EAAkD,CAAC9iB,IAAS5Q,aAAK,IAC7D4Q,GACH+pD,sBAAsB,EACtBC,qBAAqB,EACrB56D,aACF,EAEF+zB,MAAGL,EAAsD9iB,SAClDA,GACH+pD,sBAAsB,EACtBC,qBAAqB,EACrB56D,MAAO,SACT,EAEF+zB,MAAGL,EAAuC9iB,SACnCA,GACHmqD,oBAAoB,MACtB,EAEFhnC,MAAGL,EAA0C,CAAC9iB,IAAS5Q,aAAK,IACrD4Q,GACHmqD,oBAAoB,EACpBC,mBAAmB,EACnBh7D,aACF,EAEF+zB,MAAGL,EAA8C9iB,SAC1CA,GACHmqD,oBAAoB,EACpBC,mBAAmB,EACnBh7D,MAAO,SACT,EAEF+zB,MAAGL,EAAuD9iB,SACnDA,GACHqqD,0BAA0B,MAC5B,EAEFlnC,MAAGL,EAA0D,CAAC9iB,IAAS5Q,aAAK,IACrE4Q,GACHqqD,0BAA0B,EAC1BC,yBAAyB,EACzBl7D,aACF,EAEF+zB,MAAGL,EAA8D9iB,SAC1DA,GACHqqD,0BAA0B,EAC1BC,yBAAyB,EACzBl7D,MAAO,SACT,EAEF+zB,MAAGL,GAA4C9iB,SACxCA,GACHuqD,yBAAyB,MAC3B,EAEFpnC,MAAGL,EAA+C,CAAC9iB,IAAS5Q,aAAK,IAC1D4Q,GACHuqD,yBAAyB,EACzBC,wBAAwB,EACxBp7D,aACF,EAEF+zB,MAAGL,EAAmD9iB,SAC/CA,GACHuqD,yBAAyB,EACzBC,wBAAwB,EACxBp7D,MAAO,SACT,EAEF+zB,MAAGL,EAA4C9iB,SACxCA,GACHupD,+BAA+B,MACjC,EAEFpmC,MAAGL,EAA+C,CAAC9iB,IAAS5Q,aAAK,IAC1D4Q,GACHupD,+BAA+B,EAC/BC,8BAA8B,EAC9Bp6D,aACF,EAEF+zB,MAAGL,EAAkD,CAAC9iB,IAAS2sB,kBAAU,IAClE3sB,GACH2sB,WAAYA,GAEZ48B,+BAA+B,EAC/BC,8BAA8B,EAC9Bp6D,MAAO,SACT,EAEF+zB,MAAGL,GAAkC9iB,SAC9BA,GACHypD,qBAAqB,MACvB,EAEFtmC,MAAGL,GAAqC,CAAC9iB,IAAS5Q,aAAK,IAChD4Q,GACHypD,qBAAqB,EACrBC,oBAAoB,EACpBt6D,aACF,EAEF+zB,MAAGL,GAAwC,CAAC9iB,IAAS+mD,kBAAU,IACxD/mD,GACH+mD,WAAYA,GAEZ0C,qBAAqB,EACrBC,oBAAoB,EACpBt6D,MAAO,SACT,EAEF+zB,MAAGL,GAAgC9iB,SAC5BA,GACH2pD,mBAAmB,EACnBC,kBAAkB,MACpB,EAEFzmC,MAAGL,EAAmC,CAAC9iB,IAAS5Q,aAAK,IAC9C4Q,GACH2pD,mBAAmB,EACnBC,kBAAkB,EAClBx6D,aACF,EAEF+zB,MAAGL,EAAsC,CAAC9iB,IAASmnD,gBAAQ,IACpDnnD,GACHmnD,SAAUA,GAEVwC,mBAAmB,EACnBC,kBAAkB,EAClBx6D,MAAO,SACT,EAEF+zB,MAAGL,EAA2B9iB,SACvBA,GACH8oD,cAAc,MAChB,EAEF3lC,MAAGL,EAA4B9iB,SACxBA,GACH8oD,cAAc,MAChB,EACF3lC,MAAGL,EAAsD,CAAC9iB,IAASwmD,gCAAwB,IACpFxmD,GACHwmD,yBAA0BA,OAC5B,EACFrjC,MAAGL,EAA8C,CAAC9iB,IAASwmD,gCAAwB,IAC5ExmD,GACHwmD,yBAA0BA,OAI5B,SAAUpjC,GAAQpjB,GAA0BtrB,IAC9C,OAAOuuC,GAAcjjB,GAAOtrB,GAChC,yCCxSO,MAAM2uC,MAAWC,MAAeC,MAAiBvjB,IAASA,GAAMtB,KAG1DksD,MAActnC,MACvBD,GAAUrjB,IACVA,GAAMmnD,UAAUjxE,IAAIixE,MAEZ3wE,GAAI2wE,GAAS3wE,GACbq0E,WAAY1D,GAAS0D,WACrBljF,KAAMw/E,GAASx/E,KAEfmjF,aAAc3D,GAAS2D,aAAe,SACtCC,iBAAkB5D,GAAS4D,iBAAmB,IAC9CC,SAAU7D,GAAS6D,SACnBC,UAAW,IAAM9D,GAAS8D,UAC1BltD,YAAaopD,GAASppD,YAAc,IAEpCmtD,gBAAiB/D,GAASgE,wBAA0B,IAAIn4D,KAAKm0D,GAASgE,yBAA2B,KACjGC,yBAA0BjE,GAASgE,wBAA0BE,GAAW,IAAIr4D,KAAKm0D,GAASgE,0BAA4B,KAGtHG,gBAAiBnE,GAASoE,gBAAkBpE,GAASqE,2BACjD,CACI,CACI13E,QAASqzE,GAAS3wE,GAClB+0E,eAAgBpE,GAASoE,eACzBE,kBAAmBtE,GAASsE,kBAC5BC,qBAAsBvE,GAASuE,qBAC/BC,wBAAyBC,GAA2BzE,IACpD0E,iBAAkBR,GAAWlE,GAAS0E,kBACtCC,mBAAoB3E,GAAS2E,mBAC7BC,iCAAkC5E,GAAS6E,mCAC3CC,wBAAyBC,GAAiC/E,KAAWvwE,WACrEu1E,iBAAkBhF,GAASgF,iBAC3BX,2BAA4BrE,GAASqE,2BACrCY,iBAAkBjF,GAASiF,iBAC3BC,sBAAuBlF,GAASkF,sBAChCC,+BAAgCnF,GAASmF,+BACzCC,uBAAwBpF,GAASoF,wBAA0B,KAC3DxuD,YAAaopD,GAASppD,YACtBotD,wBAAyB,IAAIn4D,KAAKm0D,GAASgE,yBAC3CqB,6BAA8BC,GAA8BtF,IAC5DuF,0BAA2BrB,GAAW,IAAIr4D,KAAKm0D,GAASgE,4BAE5D,GAGRwB,kBAAmBxF,GAASyF,kBAAoBzF,GAAS0F,6BACrD,CACI,CACI/4E,QAASqzE,GAAS3wE,GAClBs2E,oBAAqB3F,GAAS2F,oBAC9BC,uBAAwB5F,GAAS4F,uBACjCC,0BAA2BC,GAA6B9F,IACxDyF,iBAAkBzF,GAASyF,iBAC3BM,mBAAoB7B,GAAWlE,GAAS+F,oBACxClB,mCAAoC7E,GAAS6E,mCAC7CmB,mBAAoBhG,GAASgG,mBAC7BC,0BAA2BC,GAAmClG,KAAWvwE,WACzEi2E,6BAA8B1F,GAAS0F,6BACvCS,mBAAoBnG,GAASmG,mBAC7BC,wBAAyBpG,GAASoG,wBAClCC,iCAAkCrG,GAASqG,iCAC3CC,uBAAwBC,GAA2CvG,IACnEwG,yBAA0BxG,GAASwG,yBACnC5vD,YAAaopD,GAASppD,YAEtB6vD,+BAAgCC,GAAgC1G,IAGhE2G,cAAe3G,GAAS2G,iBACrBC,GAAuB5G,GAAS2G,iBAEvC,OAKPE,MAAmB1qC,MAAeD,GAAUrjB,IAASA,GAAMmkD,UAC3D8J,MAAoB3qC,MAAe0qC,GAAkBhuD,IAC9DA,GAAM0oD,gBAAgBxyE,IAAIw7B,SAEfA,GACHw8C,sBAAuB7C,GAAW35C,GAAcy8C,kBAK/C17C,MAAmB6Q,MAAeD,GAAUrjB,IAASA,GAAM+mD,YAC3Dv0C,MAA0B8Q,MAAeD,GAAUrjB,IAASA,GAAM2sB,YAClEyhC,MAAsB9qC,MAC/BD,GACA7Q,GACAC,GACA,CAACzS,GAAO2sB,GAAYo6B,KAAe/mD,GAAMwlD,aAAatvE,IAAIkyE,KACtD,MAAMiG,GAAejG,GAAWkG,qBAAqBp4E,IAAIpD,IAASA,GAAMy7E,gBAClEC,GAA+BzH,IAAYjxE,OAAO24E,IAAaJ,GAAaz4E,SAAS64E,GAAUj4E,KAAKN,IAAIu4E,IAAaA,GAAU9oC,eAAe9wB,OAAO,CAAC+W,GAAGC,KAAM6iD,KAAKC,IAAI/iD,GAAGC,KACjLu8C,OAWOwG,GAXPxG,GAAa,IACNA,GACHyG,wBAAyBxD,GAAWjD,GAAW+F,cAC/CW,wBAAyB/H,IAAYzwE,KAAKm4E,IAAaA,GAAU9oC,gBAAkB6oC,IAAsB7mF,KACzGonF,YAAahI,IAAYzwE,KAAKm4E,IAAaA,GAAU9oC,gBAAkB6oC,IAAsBnkC,MAC7F2kC,cAAe5G,GAAW6G,aAMStiC,GAAYo6B,GAAU,IAKxDmI,MAAwB5rC,MACjC8qC,GACAroF,oBAA8B,gBAC9B,CAACi6B,GAAOmvD,KAAiBnvD,IAAO1pB,KAAK8xE,IAAcA,GAAW5xE,MAAQ24E,KAG7D1iB,KAAqBnpB,MAC9Bv9C,oBAA8B,WAAY+N,KAAYA,IAI7Cs7E,EAAuBA,CAACthE,GAAoBC,QAA0Bu1B,MAC/E4rC,GACC9G,IAAeA,IAAYkG,qBAAqBx4E,OAAO9C,IAAQA,GAAKq8E,gBAAkBvhE,IAAc9a,GAAKs8E,mBAAqBvhE,KAGtHwhE,MAA8BjsC,MAAeD,GAAUrjB,IAASA,GAAMukD,eAAezuE,OAAO5Q,IAAQA,GAAKsqF,gBACzGC,MAAiCnsC,MAAeD,GAAUrjB,IAASA,GAAMukD,eAAezuE,OAAO5Q,KAASA,GAAKsqF,gBAC7GE,MAAqBpsC,MAAe0qC,GAAkBhuD,IAASA,GAAM2oD,iBAGrEgH,MAAkBrsC,MAC3BD,GACArjB,IACYA,GAAMukD,eAAez7E,OAAS,EAClC,IACOk3B,GAAMukD,cAAcruE,IAAIhR,MAEnBsR,GAAItR,GAAKsR,GACT7O,KAAM,YAAczC,GAAKyC,KACzB0iD,MAAO,IAAMnlD,GAAKmlD,MAClBulC,SAAS,QAGd5vD,GAAMukD,cAAcruE,IAAIhR,MAEnBsR,GAAItR,GAAKsR,GACT7O,KAAM,YAAczC,GAAKyC,KACzB0iD,MAAO,IAAMnlD,GAAKmlD,MAClBulC,SAAS,MAGjB,IAIHC,GAA+BC,OAAmBxsC,MAC3DqsC,GACAI,IAAWA,IAASz5E,KAAK+hC,IAAUA,GAAO7hC,KAAOs5E,KAASzlC,OAIjD2lC,GAAiCC,OAAgC3sC,MAC1ED,GACAksC,GACAtB,GACA,CAACjuD,GAAOkwD,GAA0BC,MAC9B,IAAIC,GAA6BD,IAAWj6E,IAAIiuE,IAAYA,GAASkM,uBAErE,OAAIJ,KACAG,GAAmBA,GAAiBt6E,OAAOU,IAAMA,KAAOy5E,KAErDjwD,GAAM2kD,UAAUiE,oBAAoB9yE,OAAOoB,IAC9Cg5E,GAAyB55E,KAAKpR,IAAQA,GAAKsR,KAAOU,GAASo5E,qBACjB,IAA1CF,GAAiBx7E,QAAQsC,GAASV,IAAU,GAO3C+5E,MAAkCjtC,MAC3CD,GACAosC,GACArB,GACA,CAACpuD,GAAOwwD,GAA6BhL,MACjC,IAAI4K,GAA6B5K,IAAatvE,IAAIkyE,IAAcA,GAAWiI,uBAE3E,OAAOrwD,GAAM2kD,UAAUiE,oBAAoB9yE,OAAOoB,IAC9Cs5E,GAA4Bl6E,KAAKpR,IAAQA,GAAKsR,KAAOU,GAASo5E,qBACpB,IAA1CF,GAAiBx7E,QAAQsC,GAASV,IAAU,GAM3CuyE,MAAoBzlC,MAAeD,GAAUrjB,IAASA,GAAM+oD,mBAC5DC,MAAmB1lC,MAAeD,GAAUrjB,IAASA,GAAMgpD,kBAE3DC,MAAyB3lC,MAAeD,GAAUrjB,IAASA,GAAMipD,wBACjEC,MAAwB5lC,MAAeD,GAAUrjB,IAASA,GAAMkpD,uBAEhEC,MAA6B7lC,MAAeD,GAAUrjB,IAASA,GAAMmpD,4BACrEC,MAA4B9lC,MAAeD,GAAUrjB,IAASA,GAAMopD,2BAEpEC,MAAuB/lC,MAAeD,GAAUrjB,IAASA,GAAMqpD,sBAC/DC,MAAsBhmC,MAAeD,GAAUrjB,IAASA,GAAMspD,qBAE9DC,MAAgCjmC,MAAeD,GAAUrjB,IAASA,GAAMupD,+BACxEC,MAA+BlmC,MAAeD,GAAUrjB,IAASA,GAAMwpD,8BAEvEC,MAAsBnmC,MAAeD,GAAUrjB,IAASA,GAAMypD,qBAC9DC,MAAqBpmC,MAAeD,GAAUrjB,IAASA,GAAM0pD,oBAE7DC,MAAoBrmC,MAAeD,GAAUrjB,IAASA,GAAM2pD,mBAC5DC,MAAmBtmC,MAAeD,GAAUrjB,IAASA,GAAM4pD,kBAG3DC,MAAqBvmC,MAAeD,GAAUrjB,IAASA,GAAM6pD,oBAC7DC,MAAoBxmC,MAAeD,GAAUrjB,IAASA,GAAM8pD,mBAE5DC,MAAuBzmC,MAAeD,GAAUrjB,IAASA,GAAM+pD,sBAC/DC,MAAsB1mC,MAAeD,GAAUrjB,IAASA,GAAMgqD,qBAG9DC,MAAmB3mC,MAAeD,GAAUrjB,IAASA,GAAMiqD,kBAC3DC,MAAkB5mC,MAAeD,GAAUrjB,IAASA,GAAMkqD,iBAE1DC,MAAqB7mC,MAAeD,GAAUrjB,IAASA,GAAMmqD,oBAC7DC,MAAoB9mC,MAAeD,GAAUrjB,IAASA,GAAMoqD,mBAE5DC,MAA2B/mC,MAAeD,GAAUrjB,IAASA,GAAMqqD,0BACnEC,MAA0BhnC,MAAeD,GAAUrjB,IAASA,GAAMsqD,yBAElEC,MAA0BjnC,MAAeD,GAAUrjB,IAASA,GAAMuqD,yBAClEC,MAAyBlnC,MAAeD,GAAUrjB,IAASA,GAAMwqD,wBAGjEC,MAAqBnnC,MAAeD,GAAUrjB,IAASA,GAAMyqD,oBAC7DC,MAAoBpnC,MAAeD,GAAUrjB,IAASA,GAAM0qD,mBAG5D5B,MAAexlC,MAAeD,GAAUrjB,IAASA,GAAM8oD,cAEvDtlC,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OACnDo3D,MAA2BljC,MAAeD,GAAUrjB,IAASA,GAAMwmD,0BAG1E,SAAUoI,GACZxG,GACAz7B,GACAo6B,IAEA,MAAM0J,GAAerI,GAAWkG,qBAAqBh4E,KAAKtD,KAASA,GAAK09E,aAExEtI,UAAWuI,cAAgB,EAC3BvI,GAAWwI,WAAa,EAExBjkC,IAAY55C,QAAQ4Z,KAChB,MAAMkkE,GAAgBzI,GAAWkG,qBAAqBx4E,OAAO9C,IAAQA,GAAKq8E,gBAAkB1iE,GAASnW,IAC/Fs6E,GAAuBD,GAAc/6E,OAAO9C,IAAQA,GAAK09E,aAAa5nF,OACtEioF,GAAiBpkE,GAASqkE,wBAAwB96E,IAAI+6E,IAAeA,GAAYz6E,IACjF63E,GAAyBjG,GAAWkG,qBAAqBx4E,OAAO9C,IAAQ+9E,GAAen7E,SAAS5C,GAAKs8E,mBAAmBp5E,IAAIlD,IAAQA,GAAKu7E,gBACzI2C,GAAqBC,GAAoBL,GAAsBD,GAAc/nF,QAEnF,IAAIsoF,GAEJ,GAA2B,GAAvB/C,GAAavlF,OAAa,CAC1B,MAAM0lF,GAA+BzH,IAAYjxE,OAAO24E,IAAaJ,GAAaz4E,SAAS64E,GAAUj4E,KAAKN,IAAIu4E,IAAaA,GAAU9oC,eAAe9wB,OAAO,CAAC+W,GAAGC,KAAM6iD,KAAKC,IAAI/iD,GAAGC,KACjLulD,GAAgBrK,IAAYzwE,KAAKm4E,IAAaA,GAAU9oC,gBAAkB6oC,GAC9E,CAEApG,GAAWuI,eAAiBG,GAC5B1I,GAAWwI,YAAcC,GAAc/nF,OAEvCs/E,GAAa,IACNA,GACHiJ,cAAeF,GAAoB/I,GAAWuI,cAAevI,GAAWwI,YACxE,CAACjkE,GAAShlB,MAAOypF,IAAezpF,KAChC,CAACglB,GAAShlB,KAAO,YAAampF,GAAuB,EAAII,GAAqB,IAAM,KAK5F9I,GAAWkJ,YAAcb,IAA0C,IAA1BrI,GAAWwI,WAAmBtmC,KAAUinC,SAAWnJ,GAAWoJ,SAAWlnC,KAAUmnC,SAAWnnC,KAAUonC,MACjJtJ,GAAW3zD,WAAag8D,IAA0C,IAA1BrI,GAAWwI,WAAmB,yBAA2BxI,GAAWoJ,SAAW,wBAA0B,qBAE1IpJ,EACX,CAEM,SAAU2F,GACZ4D,IAEA,IAAI55D,GAAO,GAEX45D,WAAS5+E,QAAQ6+E,KAEb75D,GAAO,IACAA,GACH,CAAC65D,GAAOC,aAAcD,GAAO5G,YAI9BjzD,EACX,CAEM,SAAUo5D,GAAoB5qF,GAAkBurF,IAClD,OAAOpD,KAAKqD,MAAOxrF,GAAWurF,GAAS,IAC3C,CAIM,SAAU5F,GAAiC/E,IAE7C,IAAI6K,GAAiB,IAAIh/D,KAAKm0D,GAAS0E,kBACvCmG,UAAej1B,SAASi1B,GAAeC,YAAe9K,GAASuE,qBAAuBvE,GAAS4E,iCAAmC5E,GAAS+K,sBAAsB31C,GAAe4qC,KAEzKA,GAASoE,eAAiBF,GAAW2G,IAAkB,IAClE,CAEM,SAAU3E,GAAmClG,IAE/C,IAAI6K,GAAiB,IAAIh/D,KAAKm0D,GAAS+F,oBACvC8E,UAAej1B,SAASi1B,GAAeC,YAAe9K,GAAS4F,uBAAyB5F,GAAS6E,mCAAqC7E,GAASgL,wBAAwB51C,GAAe4qC,KAE/KA,GAASgG,mBAAqB9B,GAAW2G,IAAkB,IACtE,CAEM,SAAUtE,GAA2CvG,IACvD,MAAMiL,GAAc,IAAIp/D,KAExB,OAAOm0D,GAASmG,mBAAqB,IAAIt6D,KAAKo/D,GAAYr1B,SAAUq1B,GAAYH,YAAe9K,GAASqG,iCAAmCrG,GAAS2D,cAAgBvuC,GAAe4qC,MAAgB,IACvM,CAGM,SAAUsF,GAA8BtF,IAC1C,MAAMiL,GAAc,IAAIp/D,KAExB,OAAOm0D,GAASmG,mBAAqB,IAAIt6D,KAAKo/D,GAAYr1B,SAAUq1B,GAAYH,YAAe9K,GAASkF,sBAAwBlF,GAAS2D,cAAgBvuC,GAAe4qC,MAAgB,IAC5L,CAEM,SAAU0G,GAAgC1G,IAC5C,MAAMiL,GAAc,IAAIp/D,KAExB,OAAOm0D,GAASmG,mBAAqB,IAAIt6D,KAAKo/D,GAAYr1B,SAAUq1B,GAAYH,YAAe9K,GAASoG,wBAA0BpG,GAAS2D,cAAgBvuC,GAAe4qC,MAAgB,IAC9L,CAGM,SAAUkE,GAAWprB,IACvB,OAAOA,MAAOptC,WAAOotC,IAAMpzB,OAAO,cAAgB,IACtD,CAEM,SAAU0P,GAAe4qC,IAC3B,OAA+B,GAAxBA,GAASppD,YAAmB,IAAOopD,GAASppD,YAAc,GACrE,CAEM,SAAU6tD,GAA2BzE,IACvC,OAAOA,GAASsE,kBAAoBtE,GAASuE,qBAAuBvE,GAAS4E,iCAAmC5E,GAAS+K,oBAC7H,CAEM,SAAUjF,GAA6B9F,IACzC,OAAOA,GAAS2F,oBAAsB3F,GAAS4F,uBAAyB5F,GAAS6E,mCAAqC7E,GAASgL,sBACnI,yYC5XO,MAAMrwC,KAAOC,MAAa,2BACpBC,KAAWD,MAAa,kCAAgCE,SAIxDC,KAAcH,MAAa,qCAAmCE,SAI9DowC,KAAiBtwC,MAAa,sCACtCuwC,KAA+BA,gBAEvBC,KAAqBxwC,MAAa,2CAC1C3yB,KAAuBA,WAEfojE,KAAwBzwC,MAAa,qJCX3C,IAAM0wC,EAAiB,MAAxB,MAAOA,EACXntF,YAAoB6mB,GAAA3mB,KAAA2mB,OAAqB,CAEzCumE,eACE,OAAOltF,KAAK2mB,MAAME,IAAiB,gCACrC,CAEAsmE,eAAeL,GACb,MAAMM,EAAoCN,EAAWp8E,IAAIi4B,KAErD10B,GAAI00B,EAAK10B,GACTjB,KAAM21B,EAAK31B,KACXq6E,aAAc1kD,EAAK0kD,aACnBC,gBAAiB3kD,EAAK4kD,qBACtBC,cAAe7kD,EAAK6kD,cACpBC,qBAAsB9kD,EAAK8kD,wBAI/B,OAAOztF,KAAK2mB,MAAMkC,IADN,gCACwBukE,EACtC,CAACnsF,SAAAjB,KAAA,mBAAAkB,iBApBU+rF,GAAiBhuF,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAjBmkE,EAAiBlkE,QAAjBkkE,EAAiBjkE,UAAAC,WAFhB,gBAEDgkE,CAAiB,KCEjB/vC,EAAO,MAAd,MAAOA,EACXp9C,YACUmyB,EACAy7D,GADA1tF,KAAAiyB,WACAjyB,KAAA0tF,mBAIH1tF,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOokE,IAAqB,EAC5BlkE,KAAUwB,GAAKjrB,KAAK0tF,iBAAiBR,eAAe1sF,QAClDkQ,KAAIo8E,GAAca,EAA6B,CAAEb,gBAAY,EAC3DnjE,KAAWC,MAASC,MAAG8jE,EAA0B,CAAE/jE,iBAKpD5pB,KAAA4tF,mBAAkBtkE,MACvB,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOokE,IAA+B,EACtClkE,KAAUva,GAAUlP,KAAK0tF,iBAAiBP,eAAej+E,EAAO49E,YAC7DtsF,QACCipB,KAAUwB,GAAK,CACb0iE,IACAptF,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGfr0C,eACD,EACDkf,KAAWC,MAASC,MAAG8jE,EAAoC/jE,QA7B/D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,GAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMwN,cAAUC,GAA+B,CAClDC,SAAUijC,GAAaA,EAAU55E,KAGxBupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZLkkE,KAAmBpwC,MACrBF,KAEAG,MAAGgwC,EAAuBnzD,QACnBA,EACHP,WAAW,MACb,EAEF0jB,MAAGgwC,EAA2B,CAACnzD,GAAS5Q,YAAK,IACtC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGgwC,EAA8B,CAACnzD,GAASsyD,gBAAiBpiC,EAAQO,OAAO6hC,EAAY,IAChFtyD,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO4+E,EAAiBtzD,EAAOtrB,EACnC,2BCxBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMsyD,aAGnE5hC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,MAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDmkE,KAAyBjwC,MAClClW,EACA/kB,SACA,CAACmrE,EAAO5lC,IAAY4lC,EAAMt9E,IAAIi4B,IAC1B,MAAMslD,EAAa7lC,EAAQt3C,KAAKu3C,GAASA,EAAMp0C,KAAO00B,EAAK4kD,uBAAuBt8D,MAC5Ei9D,EAAe9lC,EAAQt3C,KAAKu3C,GAASA,EAAMl6C,WACjD,MAAO,IACAw6B,EACHwlD,mBAAoBxlD,EAAKwlD,mBAAqBxlD,EAAKwlD,mBAAqBD,EAAal7E,KAAO,aAC5Fie,MAAOg9D,EAAa,IAAIA,IAAe,IAAIC,EAAaj9D,2VCxB7D,MAAMqrB,KAAOC,MAAa,6BAEpBC,KAAWD,MAAa,oCAAkCE,SAI1DC,KAAcH,MAAa,uCAAqCE,yFCHtE,IAAM2xC,EAAmB,MAA1B,MAAOA,EACXtuF,YAAoBowB,GAAAlwB,KAAAkwB,MAAmB,CAEvCm+D,mBACE,OAAOruF,KAAKkwB,KAAKrJ,IAAkB,iCACrC,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBALUktF,GAAmBnvF,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAnBslE,EAAmBrlE,QAAnBqlE,EAAmBplE,UAAAC,WAFlB,gBAEDmlE,CAAmB,KCCnBlxC,EAAO,MAAd,MAAOA,EACXp9C,YACUmyB,EACAq8D,GADAtuF,KAAAiyB,WACAjyB,KAAAsuF,eAGHtuF,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOglE,IAAwB,EAC/B9kE,KAAUwB,GAAKjrB,KAAKsuF,aAAaD,mBAAmB7tF,QAClDkQ,KAAI89E,GAAgBD,EAAgC,CAAEC,kBAAc,EAClE7kE,KAAWC,MAASC,MAAG0kE,EAA6B,CAAE3kE,gBAP1D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,GAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oBCHpB,MAAMuxC,KAAsB/wC,MACxBF,OAEAG,MAAG4wC,EAA0B/zD,QACtBA,EACHP,WAAW,MACb,EAEF0jB,MAAG4wC,EAA8B,CAAC/zD,GAAS5Q,YAAK,IACzC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG4wC,EAAiC,CAAC/zD,GAASg0D,kBAAmB9jC,IAAQO,OAAOujC,EAAc,IACvFh0D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOu/E,EAAoBj0D,EAAOtrB,EACtC,8KC1BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMg0D,eAGnEtjC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,IAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD8kE,KAAa5wC,MAAelW,EAAQpN,GAASA,EAAM1pB,KAAK5D,IAAoB,IAAhBA,EAAEiB,oECPpE,MAAMu8C,cAAUC,GAAgC,CACnDC,SAAU4jC,GAAgBA,EAAav6E,KAG9BupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,sICZJ,MAAM0yB,KAAOC,MAAa,uCAEpBC,KAAWD,MAAa,8CAA4CE,SAIpEC,KAAcH,MAAa,iDAA+CE,SCA1EiO,cAAUC,GAA+B,CAClDC,SAAU75C,GAAaA,EAAUkD,KAGxBupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCbLgpD,KAAoBl1B,MACtBF,KAEAG,MAAGg1B,EAAwBn4C,QACpBA,EACHP,WAAW,MACb,EAEF0jB,MAAGg1B,EAA4B,CAACn4C,GAAS5Q,YAAK,IACvC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGg1B,EAA+B,CAACn4C,GAAShb,gBAAiBkrC,EAAQO,OAAOzrC,EAAY,IACjFgb,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO,wBCrBR,MAAM+kE,KAAwB7wC,MAAeC,KAAiBvjB,GAASA,EAAMo0D,eCEvEC,KAAqB/wC,MAAe6wC,EAAuBn0D,GAASA,EAAMhb,YAOnFkrC,EAAQc,aAAaqjC,IAEZ9jE,EAAW+yB,MAAe+wC,EAAoBr0D,GAASA,EAAMzP,WAC7DkP,EAAY6jB,MAAe+wC,EAAoBr0D,GAASA,EAAMP,YAC9D+jB,EAAWF,MAAe+wC,EAAoBr0D,GAASA,EAAM5Q,iCCLnE,IAAMszB,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,GACA0lE,GADA9uF,KAAAopB,aACAppB,KAAA8uF,wBAGL9uF,KAAA+uF,mBAAkBzlE,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOlH,IAAmB,EAC1BoH,KAAUva,GAAUlP,KAAK8uF,sBAAsB1hD,wBAAwB5sC,QACnEkQ,KAAI8O,GAAc6C,EAA2B,CAAE7C,iBAAa,EAC5DmK,KAAWC,MAASC,MAAGxH,EAAwB,CAAEuH,eAPzD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCNpB,MAAM8xC,KAA2BnoB,MAAuB,CACpDrnD,WJsBE,SAAUo+B,EAAQpjB,EAA0BtrB,GAC9C,OAAO0jE,EAAkBp4C,EAAOtrB,EACpC,IIrBM,SAAU0uC,EAAQpjB,EAA0BtrB,GAC9C,OAAO8/E,EAAyBx0D,EAAOtrB,EAC3C,gaCPO,MAAM+/E,KAAiB1yC,MAAa,2BAA4B,CAAChuC,EAAwB4zB,EAA0BC,OAA8B7zB,iBAAgB4zB,YAAWC,cACtK8sD,KAAqB3yC,MAAa,gCAAkC3yB,KAAuBA,WAC3FulE,KAAwB5yC,MAAa,mCAAqCxvB,KAA8CA,8FCK9H,IAAMmwB,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,GACAsB,GADAz+C,KAAAm9C,YACAn9C,KAAAy+C,sBAGLz+C,KAAAovF,mBAAkB9lE,MACrB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA4B,EACnC7zB,KAAUva,GAAUlP,KAAKy+C,oBAAoB7Q,eAAe1+B,EAAOX,eAAgBW,EAAOizB,UAAWjzB,EAAOkzB,SAAS5hC,QACjHkQ,KAAI6sC,GAAUD,EAAoCC,KAAO,EACzD5zB,KAAWC,MAASC,MAAGyzB,EAAiC1zB,QAPhE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMM,EAAuB,CAChCrkB,YAAa,GACbk2D,cAAe,KACftkE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,MCVE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAA+B9iB,QAC3BA,EACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGL,EAAkC,CAAC9iB,GAAS5Q,YAAK,IAC7C4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAqC,CAAC9iB,GAASzN,eAAQ,IACnDyN,EACHrB,YAAapM,GAAUmyB,wBAA0B,KACjDmwC,cAAetiE,GAAUuyB,eAAiB,GAC1Cv0B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,+CC3BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMrB,aAE1Dc,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDgkB,KAAiBkQ,MAAeD,EAAUrjB,GAASA,EAAMrB,aAEzDm2D,KAAsBxxC,MAC/BlQ,EACA9pB,cACA,CAACqV,EAAao2D,IACHp2D,GAAa9J,OAAO,CAACC,GAAKuwB,KAC7BvwB,GAAI7e,KAAK,IACFovC,EACH2vC,mBAAoB3vC,EAAQ4vC,SAAW,SAAW,UAClDC,kBAAmB7vC,GAAS8vC,kBAAoBtiE,IAAOwyB,EAAQ8vC,mBAAmBC,UAAY,KAC9FC,eAAgBhwC,GAAS8vC,kBAAoBtiE,IAAOwyB,EAAQ8vC,mBAAmBtoD,OAAO,yBAA2B,KACjHyoD,YAAaP,EAAgB1vC,EAAQhgC,iBAAiBhP,YAEtD0vC,qBAAsBV,EAAQU,qBAAqB7vC,IAAI+a,QAChDA,EACH+jE,mBAAoB/jE,EAAMgkE,SAAW,SAAW,UAChDC,kBAAmBjkE,GAAOkkE,kBAAoBtiE,IAAO5B,EAAMkkE,mBAAmBC,UAAY,KAC1FC,eAAgBpkE,GAAOkkE,kBAAoBtiE,IAAO5B,GAAOkkE,mBAAmBtoD,OAAO,yBAA2B,UAG/G/X,IACR,KAAmC,MAIjCygE,KAA2BjyC,MACpClQ,EACCzU,GAAgB,KAETA,GAAa9J,OAAO,CAACC,EAAKuwB,MACtBA,GAAQkB,0BAA0BxzC,QAAQ+zC,IACjChyB,EAAIiyB,IAAID,EAAKR,gBACdxxB,EAAId,IAAI8yB,EAAKR,cAAe,CACxBK,IAAKG,EAAKR,cAAc1vC,WACxBme,OAAQ+xB,EAAKE,gBACbC,aAAcH,EAAKI,aACnBC,kBAAmBL,EAAKM,mBAC3B,GAEFtyB,GACR,IAAIuyB,MAAqC,IAC9CC,UACJ3b,KAAK,CAACC,EAAGC,KACHD,EAAEqb,eAAiBpb,GAAEob,aACdrb,EAAE7W,OAAOwyB,cAAc1b,GAAE9W,QAE7B6W,EAAEqb,aAAepb,GAAEob,eAIrBO,KAAkBlE,MAC3BlQ,EACCzU,GAAgB,KAETA,GAAa9J,OAAO,CAACC,EAAKuwB,MACtBA,GAAQU,qBAAqBhzC,QAAQke,IACjCA,EAAMw1B,wBAAwB1zC,QAAQ+zC,IAC7BhyB,EAAIiyB,IAAID,EAAKR,gBACdxxB,EAAId,IAAI8yB,EAAKR,cAAe,CACxBK,IAAKG,EAAKR,cAAc1vC,WACxBme,OAAQ+xB,EAAKE,gBACbC,aAAcH,EAAKI,aACnBC,kBAAmBL,EAAKM,mBAC3B,EACR,GAEEtyB,GACR,IAAIuyB,MAAqC,IAC9CC,UACJ3b,KAAK,CAACC,EAAGC,KACHD,EAAEqb,eAAiBpb,GAAEob,aACdrb,EAAE7W,OAAOwyB,cAAc1b,GAAE9W,QAE7B6W,EAAEqb,aAAepb,GAAEob,eAIrBP,KAAmBpD,MAAeD,EAAUrjB,IAErD,MAAQ60D,iBAAkB70D,EAE1B,OAAK60D,EAGE/8D,OAAOC,KAAK88D,IAAgBhgE,OAAO,CAACwjB,GAAQsO,KAC/CtO,IAAQsO,GAAOriC,KAAKC,MAAMswE,EAAcluC,IACjCtO,IACR,KAAwD,GALhD,OAUF4N,KAAwB3C,MAAelQ,EAAgB7mB,IAEhE,IAAI25B,EAAgB,GAEpB,IAAK35B,EAAM,OAAO,KAElB,MAAM45B,GAAmBC,IACrB,IAAIC,EAAqD,GAEzDD,SAAQvxB,OAAO,CAACwxB,EAAclzB,KAC1BkzB,GAAclzB,EAAOmzB,eAAiBnzB,EAC/BkzB,GAERA,GACIA,GAGX,QAAShB,KAAW94B,EAAM,CACtB,IAAI85B,EAAeF,GAAgBd,EAAQkB,2BAE3CL,EAAc,GAAGb,EAAQzxB,cAAcyxB,EAAQhgC,kBAAoBghC,EAEnE,QAASp1B,KAASo0B,EAAQU,qBAAsB,CAC5C,IAAIS,EAAoBL,GAAgBl1B,EAAMw1B,yBAC9CP,EAAc,GAAGb,EAAQzxB,cAAcyxB,EAAQhgC,kBAAkB4L,EAAM7L,WAAaohC,CACxF,CACJ,CACA,OAAON,iHCjIJ,MAAMpE,KAAOC,MAAa,2BACpBC,KAAWD,MAAa,+BAAiC3yB,KAAuBA,WAChF8yB,KAAcH,MAAa,kCAAoCriB,KAA6BA,SAAUA,qFCM5G,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACA4mE,GADAhwF,KAAAopB,YACAppB,KAAAgwF,oBAGHhwF,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO0mE,IAAqB,EAC5BxmE,KAAUva,GAAUlP,KAAKgwF,kBAAkBnpE,MAAMrmB,QAC/CkQ,KAAIpD,IAAS2iF,EAA6B3iF,MAAM,EAChDqc,KAAWC,OAASC,MAAGomE,EAA0BrmE,SAPnD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMwN,cAAUC,GAA+B,CACpDC,SAAUslC,GAAaA,EAAUj8E,KAGtBupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OChBHumE,KAAoBzyC,MACxBF,KAGAG,MAAGsyC,EAAwBz1D,QACtBA,EACHP,WAAW,MACX,EAEF0jB,MAAGsyC,EAA8B,CAACz1D,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IACrFM,EACHP,WAAW,MACX,EAEF0jB,MAAGsyC,EAA4Bz1D,QAC1BA,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAOihF,EAAkB31D,EAAOtrB,EAClC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM41D,aAGrEllC,UAAWtjB,GAGT8iB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YAEpDwxB,EAAgB3N,MAAeD,EAAUrjB,GAASA,EAAMwkB,aAExDhB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,wfCbzD,MAAM0yB,KAAOC,MAAa,wBAA0BhuC,MAA8BA,qBAC5EiuC,KAAWD,MAAa,6BAA+B3yB,MAAuBA,YAC9E8yB,KAAcH,MAAa,gCAAkCriB,MAA4BA,eAGzFgvB,KAAO3M,MAAa,uBAAwB,CAACrO,GAAoBmiD,EAA4B,SAAYniD,YAAUmiD,qBACnHlnC,KAAW5M,MAAa,4BAA8B3yB,MAAuBA,YAC7Ew/B,KAAc7M,MAAa,+BAAgC,CAACpO,GAAoBD,EAAoB3+B,EAAqB,SAAY4+B,cAAYD,WAAU3+B,cAG3J85C,KAAS9M,MAAa,yBAA2BpO,MAA0BA,iBAC3Emb,KAAa/M,MAAa,8BAAgC3yB,MAAuBA,YACjF2/B,KAAgBhN,MAAa,iCAAmCpO,MAA0BA,iBAG1Fqb,KAASjN,MAAa,yBAA2BpO,MAA0BA,wJCHjF,IAAM+O,EAAO,MAAd,MAAOA,GAEXp9C,YACUspB,EACAknE,EACA5nF,GAFA1I,KAAAopB,YACAppB,KAAAswF,mBACAtwF,KAAA0I,SAGH1I,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOgnE,IAAoB,EAC3BjxE,KAAetf,KAAK0I,OAAOpI,OAAOuK,QAAwC,EAC1E4e,KAAU,EAAGva,EAAQX,KAAqBvO,KAAKswF,iBAAiBzpE,IAAI3X,EAAOX,gBAAkBA,GAAgB/N,QAC3GkQ,KAAIpD,IAASijF,EAA4BjjF,MAAM,EAC/Cqc,KAAWC,OAASC,MAAG0mE,EAAyB3mE,UAK/C5pB,KAAA6pD,SAAQvgC,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOgnE,IAAoB,EAC3B9mE,KAAUva,GAAUlP,KAAKswF,iBAAiB/oD,KAAKr4B,EAAOg/B,UAAU1tC,QAC9DkQ,KAAIy9B,GAAcoiD,EAA4BpiD,EAAYj/B,EAAOg/B,SAAUh/B,EAAOmhF,mBAAgB,EAClG1mE,KAAWC,MAASC,MAAG0mE,EAAyB3mE,SAK/C5pB,KAAA8pD,gBAAexgC,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOgnE,IAA2B,EAClC10E,KAAI3M,GAAUA,EAAOK,aAAU,EAC/B4a,KAASjb,GAAU,CACjB3O,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,kBACTk/C,UAAW,WAOd9+C,KAAAwxD,aAAYloC,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOgnE,IAAwB,EAC/BpmE,KAASjb,GAAU,CACjB3O,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,6BAA+BsP,EAAO0a,MAAMhqB,QAAUsP,EAAO0a,MAAMhqB,QAAWsP,EAAO0a,MAAQ1a,EAAO0a,MAAQ,IACrHk1B,UAAW,WAOd9+C,KAAAuqD,WAAUjhC,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOgnE,IAAsB,EAC7B9mE,KAAUva,GAAUlP,KAAKswF,iBAAiBpoE,OAAOhZ,EAAOi/B,YAAY3tC,QAClEkQ,KAAIua,GAAKslE,EAA8BrhF,EAAOi/B,cAAW,EACzDxkB,KAAWC,MAASC,MAAG0mE,EAAyB3mE,SAK/C5pB,KAAAsqD,kBAAiBhhC,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOgnE,IAA6B,EACpCpmE,KAASjb,GAAU,CACjB3O,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,oBACTk/C,UAAW,UAxEjB,CAAC79C,SAAAjB,KAAA,mBAAAkB,iBANMg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCAb,MAAMwN,cAAUC,GAA8B,CACnDC,SAAU1c,IAAYA,GAASj6B,KAGpBupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXglB,UAAU,EACV8L,YAAY,EAEZnhC,MAAO,OCvBHumE,KAAoBzyC,MACxBF,KAGAG,MAAG4yC,EAAuB/1D,SACrBA,GACHP,WAAW,MACX,EAEF0jB,MAAG4yC,EAA0B,CAAC/1D,IAAS5Q,YAAK,IACvC4Q,GACHP,WAAW,EACXrQ,YACA,EAEF+zB,MAAG4yC,EAA6B,CAAC/1D,IAASN,cAAewwB,EAAQO,OAAO/wB,EAAU,IAC7EM,GACHP,WAAW,EACXrQ,MAAO,SACP,EAGF+zB,MAAG4yC,EAAsB,CAAC/1D,SAAiB,IACtCA,GACHykB,UAAU,MACV,EAEFtB,MAAG4yC,EAA0B,CAAC/1D,IAAS5Q,YAAK,IACvC4Q,GACHykB,UAAU,EACVr1B,YACA,EAEF+zB,MAAG4yC,EAA6B,CAAC/1D,IAAS2T,aAAYD,cAAewc,EAAQkV,OAAO,IAC/E1xB,EACHj6B,GAAIk6B,GACH,IACE3T,GACHykB,UAAU,EACVr1B,MAAO,SACP,EAGF+zB,MAAG4yC,EAAwB,CAAC/1D,IAAS2T,gBAAiBuc,EAAQ1S,UAAU7J,EAAY,IAC/E3T,GACHuwB,YAAY,MACZ,EAEFpN,MAAG4yC,EAA4B,CAAC/1D,IAAS5Q,YAAK,IACzC4Q,GACHuwB,YAAY,EACZnhC,YACA,EAEF+zB,MAAG4yC,EAA+B,CAAC/1D,SAAmB,IACjDA,GACHuwB,YAAY,EACZnhC,MAAO,SACP,EAGF+zB,MAAG4yC,EAAwB,CAAC/1D,IAAS2T,iBAAU,IAC1C3T,GACHwkB,WAAY7Q,MAIV,SAAUyP,EAAQpjB,GAA0BtrB,GAChD,OAAOihF,EAAkB31D,GAAOtrB,EAClC,gBCtEO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,IAASA,GAAMg2D,YAGrEtlC,UAAWtjB,GACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WAEpDglB,KAAWnB,MAAeD,EAAUrjB,IAASA,GAAMykB,UACnD8L,KAAajN,MAAeD,EAAUrjB,IAASA,GAAMuwB,YAErD/M,KAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,OAEnD6hC,KAAgB3N,MAAeD,EAAUrjB,IAASA,GAAMwkB,YACxD0M,MAAc5N,MAAe2N,EAAe1pB,EAAa,CAACid,GAAY9kB,IAAaA,EAAS8kB,KAE5FyxC,GAAmBC,OAA0B5yC,MAAelW,GAAS1N,GAAaA,EAAS5pB,OAAOitC,GAAUmzC,GAAYthF,QAAQmuC,EAAOtpC,KAAM,IAE7I08E,MAAkB7yC,MAC7BlW,GACCgpD,IACQA,GAAIlgF,IAAI,CAACmgF,EAAU/zD,MACxBg0D,IAAKh0D,EACL36B,KAAM0uF,GAAU79E,KAAO69E,EAAS79E,KAAO,GACvC+9E,UAAW,IAAMF,EAASG,UAC1BC,UAAW,IAAMJ,EAASK,UAC1BC,MAAON,EAASO,MAChBC,SAAUR,EAASS,eAAe5gF,IAAIwkE,KAAYqc,IAAKrc,EAAM90B,SAAUoxC,IAAKtc,EAAM70B,aAClFoxC,aAAa,EACbnxC,QAAS,GACTsW,WAAYi6B,EAASvgC,qIClCpB,MAAMhU,KAAOC,MAAa,4BAEpBC,KAAWD,MAAa,mCAAiCE,SAIzDC,KAAcH,MAAa,sCAAoCE,yFCErE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAsoE,GADA1xF,KAAAopB,YACAppB,KAAA0xF,sBAGL1xF,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOwmC,IAAqB,EAC5BtmC,KAAUva,GAAUlP,KAAK0xF,oBAAoB9pD,SAASpnC,QAClDkQ,KAAIihF,IAAgB5hC,EAA6B,CAAE4hC,mBAAc,EACjEhoE,KAAWC,OAASC,MAAGkmC,EAA0B,CAAEnmC,iBAP3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAiC,CACpDC,SAAUgnC,GAAeA,EAAY39E,KAG5BupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLioE,KAAsBn0C,MACxBF,KAEAG,MAAGm0C,EAAyBt3D,QACrBA,EACHP,WAAW,MACb,EAEF0jB,MAAGm0C,EAA6B,CAACt3D,GAAS5Q,YAAK,IACxC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGm0C,EAAgC,CAACt3D,GAASm3D,kBAAmBjnC,EAAQO,OAAO0mC,EAAc,IACtFn3D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO2iF,EAAoBr3D,EAAOtrB,EACtC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMm3D,eAGnEzmC,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,sPCZzD,MAAM0yB,KAAOC,MAAa,iCACpBC,KAAWD,MAAa,qCAAuC3yB,KAAuBA,WACtF8yB,KAAcH,MAAa,wCAA0Cw1C,KAAmCA,qGCK9G,IAAM70C,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACA60C,GADAhyF,KAAAm9C,WACAn9C,KAAAgyF,mBAGLhyF,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO0oE,IAAqB,EAC5BxoE,KAAUva,GAAUlP,KAAKgyF,iBAAiB75C,qBAAqB33C,QAC3DkQ,KAAIwhF,GAAaD,EAA6BC,KAAU,EACxDvoE,KAAWC,MAASC,MAAGooE,EAA0BroE,QAPzD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMM,EAAuB,CAEhCzyB,UAAU,EACVkP,WAAW,EAEX83D,gBAAiB,KACjBnoE,MAAO,MCZLohC,KAAqBtN,MACvBF,KAEAG,MAAGw0C,EAAe33D,QACXA,EACHP,WAAW,MACb,EAEF0jB,MAAGw0C,EAAsB,CAAC33D,EAAO03D,SAC1B13D,EACHu3D,gBAAiBG,EAAUH,gBAC3B93D,WAAW,EACXlP,UAAU,EACVnB,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO87C,EAAmBxwB,EAAOtrB,EACrC,gBCrBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMu3D,iBAE1D55C,KAAqB2F,MAAeD,EAAUrjB,GAASA,EAAMu3D,iBAE7DhnE,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,6HCPzD,MAAM0yB,KAAOC,MAAa,+BAEpBC,KAAWD,MAAa,sCAAoCE,SAI5DC,KAAcH,MAAa,yCAAuCE,yFCExE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAgpE,GADApyF,KAAAopB,YACAppB,KAAAoyF,yBAGLpyF,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOwmC,IAAqB,EAC5BtmC,KAAUva,GAAUlP,KAAKoyF,uBAAuBxqD,SAASpnC,QACrDkQ,KAAI2hF,IAAmBtiC,EAA6B,CAAEsiC,sBAAiB,EACvE1oE,KAAWC,OAASC,MAAGkmC,EAA0B,CAAEnmC,iBAP3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAoC,CACvDC,SAAU0nC,GAAkBA,EAAer+E,KAGlCupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXL2oE,KAAyB70C,MAC3BF,KAEAG,MAAG60C,EAA4Bh4D,QACxBA,EACHP,WAAW,MACb,EAEF0jB,MAAG60C,EAAgC,CAACh4D,GAAS5Q,YAAK,IAC3C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG60C,EAAmC,CAACh4D,GAAS63D,qBAAsB3nC,EAAQO,OAAOonC,EAAiB,IAC/F73D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOqjF,EAAuB/3D,EAAOtrB,EACzC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM63D,kBAGnEnnC,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,ybCXzD,MAAM6oE,KAAgBl2C,MAAa,yBAA2BhuC,KAA8BA,oBACtFmkF,KAAoBn2C,MAAa,8BAAgC3yB,KAAuBA,WACxF+oE,KAAuBp2C,MAAa,iCAAmCq2C,KAAqCA,eAE5GC,KAA0Bt2C,MAAa,oCAAqC,CAAChuC,EAAwBglC,MAAqChlC,iBAAgBglC,kBAC1Ju/C,KAA8Bv2C,MAAa,yCAA2C3yB,KAAuBA,WAC7GmpE,KAAiCx2C,MAAa,wICGpD,IAAMW,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACA61C,GADAhzF,KAAAm9C,WACAn9C,KAAAgzF,sBAGLhzF,KAAAizF,iBAAgB3pE,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA2B,EAClC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBrgD,aAAazjC,GAAOX,gBAAgB/N,QAC7EkQ,KAAI6sC,GAAUD,EAAmCC,KAAO,EACxD5zB,KAAWC,MAASC,MAAGyzB,EAAgC1zB,SAK5D5pB,KAAAksE,4BAA2B5iD,MAChC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAqC,EAC5C7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoB1/C,wBAAwBpkC,GAAOX,eAAgBW,GAAOqkC,cAAc/yC,QAC7G2pB,KAASc,GAAK,CACVqyB,IACAA,EAA4BpuC,GAAOX,mBAGtC,EACDob,KAAWC,MAASC,MAAGyzB,EAA0C1zB,QAtBvE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMM,EAAuB,CAChCo1C,UAAW,GACX7nE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAGPspE,sBAAsB,EACtBC,qBAAqB,GChBZ11C,KAAgBC,MACzBF,KAEAG,MAAGL,EAA8B9iB,QAC1BA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAiC,CAAC9iB,GAAS5Q,YAAK,IAC5C4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAoC,CAAC9iB,GAASo4D,gBAAS,IACnDp4D,EACHo4D,UAAWA,EACX7nE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGL,EAAwC9iB,QACtCA,EACH04D,sBAAsB,MACxB,EAEFv1C,MAAGL,EAA2C,CAAC9iB,GAAS5Q,YAAK,IACtD4Q,EACH04D,sBAAsB,EACtBC,qBAAqB,EACrBvpE,YACF,EAEF+zB,MAAGL,EAA+C9iB,QAC3CA,EACH04D,sBAAsB,EACtBC,qBAAqB,EACrBvpE,MAAO,SAIP,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBChDO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMo4D,WAE1D34D,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD+oB,KAAemL,MAAeD,EAAUrjB,GAASA,EAAMo4D,WAGvDM,KAAuBp1C,MAAeD,EAAUrjB,GAASA,EAAM04D,sBAC/DC,KAAsBr1C,MAAeD,EAAUrjB,GAASA,EAAM24D,2ICTpE,MAAM72C,KAAOC,MAAa,qBACpBC,KAAWD,MAAa,yBAA2B3yB,KAAuBA,WAC1E8yB,KAAcH,MAAa,4BAA8BriB,KAAwBA,SAAUA,qFCMjG,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAgqE,GADApzF,KAAAopB,YACAppB,KAAAozF,eAGHpzF,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO8pE,IAAgB,EACvB5pE,KAAUva,GAAUlP,KAAKozF,aAAavsE,MAAMrmB,QAC1CkQ,KAAIpD,IAAS+lF,EAAwB/lF,MAAM,EAC3Cqc,KAAWC,OAASC,MAAGwpE,EAAqBzpE,SAP9C,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA0B,CAC/CC,SAAUlnD,GAAQA,EAAKuQ,KAGZupC,EAAsBkN,EAAQI,gBAAgB,CACzD//B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCZH0pE,KAAe51C,MACnBF,KAGAG,MAAG01C,EAAmB74D,QACjBA,EACHP,WAAW,MACX,EAEF0jB,MAAG01C,EAAyB,CAAC74D,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IAChFM,EACHP,WAAW,MACX,EAEF0jB,MAAG01C,EAAsB,CAAC74D,EAAOxrB,SAC5BwrB,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAOokF,EAAa94D,EAAOtrB,EAC7B,gBCxBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM+4D,QAGrEroC,UAAWtjB,GAGT8iB,EAAQc,aAAa3N,GAOZ21C,IALAzoE,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YAEpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QAEnD4pE,EAAY11C,MACvBlW,EACA,CAAC2rD,EAAe92C,IAA4B82C,GAAOziF,KAAKpN,GAAQA,EAAK+vF,UAAYh3C,EAAM9T,OAAS,+5DChB3F,MAAM2T,KAAOC,MAAa,0BACpBC,KAAWD,MAAa,8BAAgC3yB,KAAuB5a,QAAS,CAAE4a,YAC1F8yB,KAAcH,MAAa,iCAAmCm3C,KAA8B1kF,QAAS,CAAE0kF,iGCM7G,IAAMx2C,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAuqE,GADA3zF,KAAAopB,YACAppB,KAAA2zF,mBAGL3zF,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOqqE,IAAoB,EAC3BnqE,KAAUva,GAAUlP,KAAK2zF,iBAAiB/rD,SAASpnC,QAC/CkQ,KAAIgjF,IAAcE,EAA4BF,KAAU,EACxD/pE,KAAWC,OAASC,MAAG+pE,EAAyBhqE,UAPxD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA8B,CACjDC,SAAUipC,GAAYA,EAAS7iF,KAGtBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLkqE,KAAkBp2C,MACpBF,KAEAG,MAAGi2C,EAAsBp5D,QAClBA,EACHP,WAAW,MACb,EAEF0jB,MAAGi2C,EAA0B,CAACp5D,GAASxrB,cAAO,IACvCwrB,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO5a,EAAQ4a,UACjB,EAEF+zB,MAAGi2C,EAA6B,CAACp5D,GAASxrB,aAAc07C,EAAQO,OAAOj8C,EAAQ0kF,WAAY,IACpFl5D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO4kF,EAAgBt5D,EAAOtrB,EAClC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMk5D,aAGnExoC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,6cCbzD,MAAMmqE,KAA0Bx3C,MAAa,8CAA+C,CAACjuC,EAAiB6zB,EAAgBC,MAAoB9zB,UAAS6zB,YAAWC,aAChK4xD,KAA8Bz3C,MAAa,mDAAqD3yB,KAAuBA,WACvHqqE,KAAiC13C,MAAa,sDAAwD23C,KAAwCA,gBAE9IC,KAAiB53C,MAAa,mCAAoC,CAACpa,EAAgBC,MAAoBD,YAAWC,aAClHgyD,KAAqB73C,MAAa,wCAA0C3yB,KAAuBA,WACnGyqE,KAAwB93C,MAAa,2CAA6C23C,KAAwCA,gBAE1HjnC,KAAQ1Q,MAAa,2ICG3B,IAAMW,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACAm3C,EACAv0F,GAFAC,KAAAm9C,WACAn9C,KAAAs0F,mBACAt0F,KAAAD,UAGLC,KAAAq9C,kBAAiB/zB,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA4B,EACnCh+B,KAAetf,KAAKD,QAAQO,OAAOuK,QAAiC,EACpE4e,KAAU,EAAEva,EAAQZ,MAAatO,KAAKs0F,iBAAiB7lD,mBAAmBngC,GAASY,EAAOizB,UAAWjzB,EAAOkzB,SAAS5hC,QACjHkQ,KAAI8a,IAAS8xB,EAAoC9xB,MAAM,EACvD7B,KAAWC,OAASC,MAAGyzB,EAAiC1zB,UAK7D5pB,KAAAu0F,2BAA0BjrE,MAC7B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAqC,EAC5C7zB,KAAUva,GAAUlP,KAAKs0F,iBAAiB7lD,mBAAmBv/B,EAAOZ,QAASY,EAAOizB,UAAWjzB,EAAOkzB,SAAS5hC,QAC3GkQ,KAAI8a,IAAS8xB,EAA6C9xB,MAAM,EAChE7B,KAAWC,OAASC,MAAGyzB,EAA0C1zB,SAlBzE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMM,EAAsB,CAC/Bg3C,mBAAoB,KACpBv6D,WAAW,EACXlP,UAAU,EACVnB,MAAO,MCXE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAA+B9iB,QAC3BA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAkC,CAAC9iB,GAAS5Q,YAAK,IAC7C4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAqC,CAAC9iB,GAAS05D,iBAAU,IACrD15D,EACHg6D,mBAAoBN,EACpBj6D,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAGL,EAAwC9iB,QACpCA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAA2C,CAAC9iB,GAAS5Q,YAAK,IACtD4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAA8C,CAAC9iB,GAAS05D,iBAAU,IAC9D15D,EACHg6D,mBAAoBN,EACpBj6D,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAGL,EAAsB9iB,GAAUgjB,IAIjC,SAAUI,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,qEC3CO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMg6D,oBAE1Dv6D,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD6qE,MAAgB32C,MACzBD,EACCrjB,GAAUA,EAAMg6D,oBAGRE,KAAwB52C,MACjC22C,GACAl0F,mBAA8B,UAC9B4gB,KACA,CAAC+yE,EAAYrgD,EAAQnjB,IAEVwjE,GAAYxjF,IAAI,CAAClD,EAAMs6C,KAEnB,CACH92C,GAAI82C,EACJhI,QAHatyC,EAAKmnF,kBAAoB,EAAIjkE,EAAY,GAAKA,EAAY,IAGpDK,aACnB5uB,KAAMkrB,IAAO7f,EAAKonF,oBAAoBvtD,OAAO,yBAC7Cn2B,MAAOmc,IAAO7f,EAAKonF,oBAAoBvtD,OAAO,yBAC9C8L,SAAU3lC,EAAK4yC,SACfhN,UAAW5lC,EAAK6yC,UAChBw0C,QAAShhD,EACT9sB,KAAMvZ,MAKTsnF,KAAyBh3C,MAClCi3C,cACChhF,GACUA,EAASf,KAAO,uBAAyBqa,IAAO,IAAIG,MAAQ6Z,OAAO,0HC3C3E,MAAMiV,KAAOC,MAAa,kCACpBC,KAAWD,MAAa,yCAAuCE,SAC/DC,KAAcH,MAAa,4CAA0CE,yFCM3E,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA4rE,GADAh1F,KAAAopB,YACAppB,KAAAg1F,2BAGLh1F,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0rE,IAA6B,EACpCxrE,KAAUva,GAAUlP,KAAKg1F,yBAAyBptD,SAASpnC,QACvDkQ,KAAIwkF,IAAqBD,EAAqC,CAAEC,wBAAmB,EACnFvrE,KAAWC,OAASC,MAAGorE,EAAkC,CAAErrE,iBAPnE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAsC,CACzDC,SAAUuqC,GAAoBA,EAAiBlhF,KAGtCupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLwrE,KAA2B13C,MAC7BF,KAEAG,MAAGs3C,EAA+Bz6D,QAC3BA,EACHP,WAAW,MACb,EAEF0jB,MAAGs3C,EAAmC,CAACz6D,GAAS5Q,YAAK,IAC9C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGs3C,EAAsC,CAACz6D,GAAS06D,uBAAwBxqC,EAAQO,OAAOiqC,EAAmB,IACtG16D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOkmF,EAAyB56D,EAAOtrB,EAC3C,gBCxBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM06D,oBAGnEhqC,UAAWtjB,GAIX8iB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,4HCbzD,MAAMopD,KAAMz2B,MAAa,0BAA4BmgC,KAAiCA,kBAGhFrzB,KAAS9M,MAAa,6BAA+BvgC,KAA6BA,oBAGlFq5E,KAAc94C,MAAa,kCAAmC,CAACvgC,EAAwBpE,MAA4BoE,iBAAgBpE,kBACnI09E,KAAiB/4C,MAAa,wCAG9BiQ,KAASjQ,MAAa,6BAA8B,CAACvgC,EAAwBpc,EAAiB21F,MAAuBv5E,iBAAgBpc,UAAS21F,aAC9IC,KAAWj5C,MAAa,4BAA6B,CAACvgC,EAAwBpc,EAAiB21F,EAAkBt+E,MAA0B+E,iBAAgBpc,UAAS21F,UAASt+E,gBAC7Kw+E,KAASl5C,MAAa,2BAA4B,CAACvgC,EAAwBpc,EAAiB21F,EAAkBr+E,MAAwB8E,iBAAgBpc,UAAS21F,UAASr+E,8bCXrL,MAAMw+E,KAAsBh4C,MACxBF,OAEAG,MAAGg4C,KAAyB,CAACn7D,GAASkiD,kBAAmBhyB,IAAQkrC,OAAOlZ,EAAcliD,KAAM,EAE5FmjB,MAAGg4C,KAA4B,CAACn7D,GAASxe,iBAAgBpc,UAAS21F,aAAc7qC,IAAQ2nB,UAAU,CAC9FrhE,GAAIgL,EACJtN,QAAS,CACL9O,UACAgY,cAAc29E,GAAkB/6D,EAAMN,SAASle,GAAgBpE,aAC/DzB,UAAWo/E,EAAU,IAAI/nE,KAASgN,EAAMN,SAASle,GAAgB7F,YAEtEqkB,KAAM,EAETmjB,MAAGg4C,KAA8B,CAACn7D,GAASxe,iBAAgBpc,UAAS21F,UAASt+E,gBAAiByzC,IAAQ2nB,UAAU,CAC5GrhE,GAAIgL,EACJtN,QAAS,CACL9O,UACAgY,cAAc29E,GAAkB/6D,EAAMN,SAASle,GAAgBpE,aAC/DzB,UAAWo/E,EAAU,IAAI/nE,KAASgN,EAAMN,SAASle,GAAgB7F,UACjEc,WAAaA,IAElBujB,KAAM,EAETmjB,MAAGg4C,KAA4B,CAACn7D,GAASxe,iBAAgBpc,UAAS21F,UAASr+E,cAAewzC,IAAQ2nB,UAAU,CACxGrhE,GAAIgL,EACJtN,QAAS,CACL9O,UACAgY,cAAc29E,GAAkB/6D,EAAMN,SAASle,GAAgBpE,aAC/DzB,UAAWo/E,EAAU,IAAI/nE,KAASgN,EAAMN,SAASle,GAAgB7F,UACjEe,SAAWA,IAEhBsjB,KAAM,EAETmjB,MAAGg4C,KAA4B,CAACn7D,GAASxe,oBAAqB0uC,IAAQ1S,UAAUh8B,EAAgBwe,KAAM,EAEtGmjB,MAAGg4C,KAAiC,CAACn7D,GAASxe,iBAAgBpE,kBAAmB8yC,IAAQ2nB,UAAU,CAC/FrhE,GAAIgL,EACJtN,QAAS,CACLkJ,iBAEL4iB,KAAM,EAETmjB,MAAGg4C,KAAqCn7D,GAAUkwB,IAAQmrC,WAAWr7D,EAAMk4B,IAAIhiD,IAAIM,KAC/EA,KACAtC,QAAS,CACLkJ,cAAc,MAEjB4iB,KAGH,SAAUojB,EAAQpjB,EAA0BtrB,GAC9C,OAAOwmF,EAAoBl7D,EAAOtrB,EACtC,qKCtDA,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM2iD,gBAG5DjyB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,IAAQc,aAAa3N,GAEZi4C,KAAoBh4C,MAC7BlW,EACCu1C,GAAkBA,EAAc7sE,OAAOosE,IAAiBA,EAAa9kE,eAG7Dm+E,KAAkBj4C,MAC3BlW,EACCu1C,GAAkBA,EAAc7sE,OAAOosE,GAAgBA,EAAa9kE,eAG5Do+E,KAAyBl4C,MAClCg4C,EACC3Y,GAAkBA,GAAe75E,QAAU,GAGnC2yF,KAAYn4C,MACrBlW,EACAu1C,GAAiBA,EAAch3C,KAAK,CAACC,EAAGC,IAChCD,EAAExuB,eAAiByuB,EAAEzuB,aACdwuB,EAAExuB,aAAe,GAAI,EAExByuB,EAAElwB,UAAUomB,UAAY6J,EAAEjwB,UAAUomB,oEC7B7C,MAAMmuB,cAAUC,GAAmC,CACtDC,SAAUjvB,GAAgBA,EAAa3qB,KAG9BwsC,EAAsBkN,EAAQI,mRCNpC,MAAMpb,KAAO6M,MAAa,0CAA4CrZ,KAA4BA,kBAC5FgzD,KAAW35C,MAAa,+CAAiD3yB,KAAuBA,WAChGusE,KAAc55C,MAAa,kDAAoD65C,KAAgDA,wGCQrI,IAAMl5C,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EAEAitE,GAFAr2F,KAAAopB,YAEAppB,KAAAq2F,0BAGLr2F,KAAAs2F,kBAAiBhtE,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAA2B,EAClC9sE,KAAUva,GAAUlP,KAAKq2F,wBAAwB5mD,cAAcvgC,EAAOg0B,cAAe1iC,QACjFkQ,KAAI6sC,GAAUg5C,EAAmCh5C,KAAO,EACxD5zB,KAAWC,MAASC,MAAG0sE,EAAgC3sE,QAP/D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCJb,MAAMwN,cAAUC,GAAwC,CAC3DC,SAAUn/B,GAASA,EAAMza,KAGhBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD7wB,WAAW,EAEXrQ,MAAO,OCXL4sE,KAA6B94C,MAC/BF,KAEAG,MAAG4X,EAAe/6B,QACXA,EACHP,WAAW,MACb,EAEF0jB,MAAG4X,EAAkB,CAAC/6B,GAAS5Q,YAAK,IAC7B4Q,EACHP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG4X,EAAqB,CAAC/6B,GAAS47D,wBAAyB1rC,EAAQO,OAAOmrC,EAAqB,IACxF57D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOsnF,EAA2Bh8D,EAAOtrB,EAC7C,gBCvBA,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMi8D,sBAG5DvrC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ5jB,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,otBCdzD,MAAM8sE,KAA+Bn6C,MAAa,kDAE5Co6C,KAAmCp6C,MAAa,sDAC1D3yB,MAAuBA,YAEbgtE,KAAsCr6C,MAAa,yDAC7Ds6C,MAAqDA,4BAE3CC,KAAmBv6C,MAAa,wCAC3C,CAAC1M,GAAc3M,GAAsB4M,OAA0BD,QAAM3M,gBAAc4M,iBAExEinD,KAAuBx6C,MAAa,6CAC9C3yB,MAAuBA,YAEbotE,KAA0Bz6C,MAAa,iDAEvCD,KAAOC,MAAa,gCAAkC5lC,MAAiCA,wBACvF6lC,KAAWD,MAAa,qCAAuC3yB,MAAuBA,YACtF8yB,KAAcH,MAAa,wCAA0CgB,MAA6CA,aAElH05C,KAAS16C,MAAa,4BAA8B5lC,MAAiCA,wBACrFugF,KAAa36C,MAAa,iCAAmC3yB,MAAuBA,YACpFutE,KAAgB56C,MAAa,oCAAsC5lC,MAAiCA,wBAEpGygF,KAAU76C,MAAa,6BAA+B5lC,MAAiCA,wBACvF0gF,KAAc96C,MAAa,kCAAoC3yB,MAAuBA,YACtF0tE,KAAiB/6C,MAAa,qCAAuC5lC,MAAiCA,wBAEtG4gF,KAAiBh7C,MAAa,sCAAuC,CAACzM,GAAoBn5B,GAA2B6gF,OAAsB1nD,cAAYn5B,qBAAmB6gF,+JCbhL,IAAMt6C,EAAO,MAAd,MAAOA,GACTp9C,YACYspB,GACA1gB,GACA2tF,IAFAr2F,KAAAopB,aACAppB,KAAA0I,UACA1I,KAAAq2F,2BAGLr2F,KAAAy3F,gCAA+BnuE,MAClC,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAAmD,EAC1D9sE,KAAUva,IAAUlP,KAAKq2F,wBAAwB7mD,UAAUhvC,QACvDkQ,KAAImmF,IAAyBN,EACzBM,MACH,EACDltE,KAAWC,OAASC,MAAG0sE,EAAwD3sE,UAKpF5pB,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAA2B,EAClC9sE,KAAUva,IAAUlP,KAAKq2F,wBAAwB3mD,KAAKxgC,GAAOyH,mBAAmBnW,QAC5EkQ,KAAI6sC,IAAUg5C,EAAmCh5C,MAAO,EACxD5zB,KAAWC,OAASC,MAAG0sE,EAAgC3sE,UAK5D5pB,KAAA03F,qBAAoBpuE,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAAuC,EAC9C9sE,KAAUva,IAAUlP,KAAKq2F,wBAAwBzmD,OAAO1gC,GAAO2gC,KAAM3gC,GAAOg0B,aAAch0B,GAAO4gC,YAAYtvC,QACzGkQ,KAAI,IAAM6lF,MAAgD,EAC1D5sE,KAAWC,OAASC,MAAG0sE,EAA4C3sE,UAKxE5pB,KAAA23F,4BAA2BruE,MAC9B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAA8C,EACrDpsE,KAASjb,IAAU,CACfqnF,IACAh2F,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,6CACTk/C,UAAW,WAOxB9+C,KAAA43F,yBAAwBtuE,MAC3B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAA2C,EAClDpsE,KAASjb,IAAU,CACfqnF,IACAh2F,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,yBACTk/C,UAAW,WAOxB9+C,KAAA63F,WAAUvuE,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAA6B,EACpC9sE,KAAUva,IAAUlP,KAAKq2F,wBAAwBtmD,OAAO7gC,GAAOyH,mBAAmBnW,QAC9E2pB,KAASc,IAAK,CACVsrE,EAAqCrnF,GAAOyH,mBAC5CpW,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,yCACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAG0sE,EAAkC3sE,UAK9D5pB,KAAA83F,kBAAiBxuE,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAAoC,EAC3C16E,KAAI3M,IAAU6oF,KAA+B7oF,GAAOyH,qBAExD,CAAE3V,UAAU,IAGThB,KAAAg4F,YAAW1uE,MACd,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAA8B,EACrC9sE,KAAUva,IAAUlP,KAAKq2F,wBAAwBrmD,QAAQ9gC,GAAOyH,mBAAmBnW,QAC/E2pB,KAASc,IAAK,CACVsrE,EAAsCrnF,GAAOyH,mBAC7CpW,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,0CACTk/C,UAAW,UAGtB,EAEDn1B,KAAWC,OAASC,MAAG0sE,EAAmC3sE,UAK/D5pB,KAAAi4F,mBAAkB3uE,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAAqC,EAC5C16E,KAAI3M,IAAU6oF,KAA+B7oF,GAAOyH,qBAExD,CAAE3V,UAAU,IAGThB,KAAAk4F,mBAAkB5uE,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgtE,IAAqC,EAC5C9sE,KAAUva,IAAUlP,KAAK0I,OAAOlI,QAC5BF,MAAOy0F,WAAmB,EAC1BrkF,KAAI8+D,KACA,MAAMz7D,GAAWy7D,GAAU1+D,KAAKs8D,IAAKA,GAAEn5D,KAAO/E,GAAO4gC,YAErD,OAAK/7B,GASMghF,SACH7lF,GAAO4gC,WACP,cAAczzB,KAAWC,6BAA6BvI,GAASokF,iCAAiCj8E,KAAMK,cAAcrN,GAAOyH,qBAAqBzH,GAAOsoF,UACvJ,EAAO,CAACtjF,aAAcH,GAASf,OAX5BzS,UAAoB,CAAEuK,QAAS,CAClCstF,UAAW73F,eAAyB83F,GACpCC,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,gBACP6V,KAAM,2CACNyxE,YAAa,OACf,MAxIlB,CAACv3F,SAAAjB,KAAA,mBAAAkB,mBALIg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCJb,MAAMwN,cAAUC,GAA0C,CAC7DC,SAAUn/B,IAASA,GAAMxX,KAGhBupC,EAAsBkN,EAAQI,gBAAgB,CACvDr/B,MAAO,KACPV,UAAU,EACVkP,WAAW,EAEXw+D,cAAc,EACdC,aAAa,EAEb9uE,MAAO,OCrBL+uE,KAAoBj7C,MACtBF,KAEAG,MAAG4X,EAAuC/6B,SACnCA,GACHi+D,cAAc,MAChB,EAEF96C,MAAG4X,EAA0C,CAAC/6B,IAAS5Q,aAAK,IACrD4Q,GACHk+D,aAAa,EACbD,cAAc,EACd7uE,aACF,EAEF+zB,MAAG4X,EAA6C,CAAC/6B,IAASq8D,4BAA4BnsC,EAAQO,OAAO4rC,GAAuB,IACrHr8D,GACHk+D,aAAa,EACbD,cAAc,EACd7uE,MAAO,SACT,EAEF+zB,MAAG4X,EAAc,CAAC/6B,SAA0B,IACrCA,GACHP,WAAW,MACb,EAEF0jB,MAAG4X,EAAkB,CAAC/6B,IAAS5Q,aAAK,IAC7B4Q,GACH/O,MAAO,KACPV,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAG4X,EAAqB,CAAC/6B,IAAS+iB,cAAM,IACjC/iB,GACH/O,MAAO8xB,GACPxyB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,GAA0BtrB,IAC9C,OAAOypF,EAAkBn+D,GAAOtrB,GACpC,gBC5CA,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,IAASA,GAAMo+D,kBAG5D1tC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACXC,YAAaC,IACbb,EAAQc,aAAa3N,GAEZ46C,MAAe36C,MAAeD,EAAUrjB,IAASA,GAAMi+D,cACvDC,MAAc56C,MAAeD,EAAUrjB,IAASA,GAAMk+D,aAEtDz+D,KAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UAEnD8tE,KAA0B/6C,MAAeD,EAAUrjB,IAASA,GAAM/O,OAClEqtE,KAAyBh7C,MAAelW,EAAQ,CAAC1N,GAAkCuiB,KAAyCviB,GAASppB,KAAKysC,IAAUA,GAAOlO,oBAAsBoN,GAAM9lC,oBAEvLoiF,KAAqBj7C,MAAelW,EAAQ1N,IAAYA,GAASxpB,IAC1E+a,SAEWA,GACHutE,uBAAyBhoF,KACrB,OAAQA,IAEJ,KAAK,EACL,KAAK,EACL,KAAK,EAGL,KAAK,EAAG,MAAO,SAFf,KAAK,EAAG,MAAO,QACf,KAAK,EAAG,MAAO,MAEf,KAAK,EAAG,MAAO,SAEvB,EAXAgoF,CAWGvtE,GAAMwtE,wBAKRj7C,KAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,2SCzCzD,MAAM0yB,KAAOC,MAAa,yCACpBC,KAAWD,MAAa,6CAA+C3yB,KAAuBA,WAC9F8yB,KAAcH,MAAa,gDAAkD28C,KAA0DA,6GCK7I,IAAMh8C,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACAg8C,GADAn5F,KAAAm9C,WACAn9C,KAAAm5F,oBAGLn5F,KAAAmtD,SAAQ7jC,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAkB,EACzB7zB,KAAU,IAAMzpB,KAAKm5F,kBAAkBjpD,6BAA6B1vC,QAChEkQ,KAAI0oF,GAAY97C,EAA0B87C,KAAS,EACnDzvE,KAAWC,MAASC,MAAGyzB,EAAuB1zB,QAPtD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMM,EAAsB,CAC/B47C,SAAU,GACVn/D,WAAW,EACXlP,UAAU,EACVnB,MAAO,MCRE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAAqB9iB,QACjBA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAwB,CAAC9iB,GAAS5Q,YAAK,IACnC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAA2B,CAAC9iB,GAAS0+D,8BAAuB,IACxD1+D,EACH4+D,SAAUF,EACVj/D,WAAW,EACXlP,UAAU,EACVnB,MAAO,SAKT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBC7BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM0+D,yBAE1Dj/D,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDyvE,KAAsBv7C,MAAeD,EAAUrjB,GAASA,EAAM4+D,UAE9DE,EAA6Bn3F,MAAiB27C,MAAeu7C,EAAqBE,GAAoBA,GAAkBzoF,KAAK0oF,GAAWA,EAAQr3F,MAAQA,46BCsErK,MAAMq+D,KAAgB9iB,MAClBF,OAEAG,MAAG87C,KAAuB,CAACj/D,IAASxrB,eAAO,IACpCwrB,GACHk/D,SAAU,IACHl/D,GAAMk/D,SACT1qF,GAAQsrB,iBAEd,EAEFqjB,MAAGlzC,KAAe+vB,SACXA,GACHP,WAAW,MACb,EAEF0jB,MAAGlzC,KAAmB,CAAC+vB,IAAS5Q,aAAK,IAC9B4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGlzC,KAAsB+vB,SAClBA,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGlzC,KAAiB+vB,SACbA,GACHm/D,UAAU,MACZ,EAEFh8C,MAAGlzC,KAAkB+vB,SACdA,GACHm/D,UAAU,MACZ,EAEFh8C,MAAGlzC,KAA+B,CAAC+vB,IAASxrB,eAAO,IAC5CwrB,GACHo/D,kBAAmB5qF,GAAQlE,YAC7B,EAEF6yC,MAAGlzC,KAA+B,CAAC+vB,IAASxrB,eAAO,IAC5CwrB,GACHq/D,kBAAmB7qF,GAAQtE,YAQtBmW,GAAoC,CAC7CpX,OALE,SAAUm0C,GAAQpjB,GAAoCtrB,IACxD,OAAOsxD,EAAchmC,GAAOtrB,GAChC,EAIIqwC,qBAAsBv+B,UACtBoY,sBAAuBrY,UACvBoiC,iBAAkBliC,KAClB2oC,YAAa1oC,UACbwP,YAAavP,KACb6uC,WAAY5uC,KACZmvC,WAAYlvC,KACZ8vC,eAAgB7vC,UAChBsvC,mBAAoBrvC,UACpByU,iBAAkBxU,UAClBowC,aAAcnwC,KACd20C,OAAQ10C,KACRywC,WAAYxwC,KACZ8mD,KAAM7mD,UACNsnD,kBAAmBrnD,UACnB6oD,SAAU5oD,UACVwnD,cAAevnD,KACfupD,UAAWtpD,UACX4pD,iBAAkB3pD,UAClBgrD,UAAW/qD,UACXstD,UAAWrtD,UACXmrD,yBAA0BwsB,WAC1Bt6E,WAAY6C,KACZ2kB,WAAY1kB,KACZq1D,QAASp1D,UACTkX,kBAAmBjX,KACnBm7D,oBAAqBl7D,UACrBw7D,wBAAyBv7D,UACzBwW,IAAKvW,WACLmqE,WAAYlqE,UACZ4rE,aAAc3rE,UACd+rE,cAAe9rE,KACfqW,YAAapW,UACbqtE,WAAYptE,KACZwtE,UAAWvtE,UACX0uE,aAAczuE,KACd6uE,gBAAiB5uE,UACjBkvE,gBAAiBjvE,MACjBwvE,UAAWvvE,WACXkwE,MAAOjwE,MACPowE,WAAYnwE,WACZixE,mBAAoBhxE,UACpB0xE,kBAAmBzxE,KACnBgzE,oBAAqB/yE,UACrBk1E,gBAAiBj1E,UACjBu1E,wBAAyBt1E,UACzBm2E,qBAAsBl2E,WACtBm2E,cAAel2E,WACfm2E,mBAAoBl2E,WACpBm2E,wBAAyBl2E,WACzBm2E,QAASl2E,WACT+S,uBAAwB9S,MACxB6S,aAAc5S,WACdhE,MAAOiE,MACPg2E,sBAAuB/1E,MACvBg2E,SAAU/1E,WACVg2E,WAAY/1E,WACZg2E,YAAa/1E,WACbg2E,YAAap1E,WACbq1E,eAAgBh2E,MAChBi2E,WAAYh2E,MACZi2E,oBAAqBh2E,WACrBi2E,+BAAgCh2E,WAChC8wB,WAAYmlD,WACZC,eAAgBh2E,MAChBi2E,cAAetuF,KACfuuF,YAAaj2E,WACbk2E,IAAKj2E,WACLwyD,UAAWvyD,MACXi2E,0BAA2Bh2E,MAC3Bm3D,eAAgB8e,WAChBhe,cAAeie,WACf5hE,eAAgBnU,WAChBsjD,OAAQrjD,oFCvML,MAAM+1E,KAAoB9+C,MAAa,8BAEjC++C,KAAwB/+C,MAAa,qCAAmCE,SAIxE8+C,KAA2Bh/C,MAAa,wCAAsCE,SAI9E++C,KAAqBj/C,MAAa,iCAA+BE,SAIjEg/C,KAAyBl/C,MAAa,sCAAoCE,SAI1Ei/C,KAA4Bn/C,MAAa,uCAEzCo/C,KAAqBp/C,MAAa,2JCnBxC,IAAMW,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAwyE,GADA57F,KAAAopB,YACAppB,KAAA47F,wBAGL57F,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOsyE,IAAwC,EAC/CpyE,KAAUva,IAAUlP,KAAK47F,sBAAsBprD,mBAAmBhwC,QAC9DkQ,KAAIorF,IAAmBD,EAAgD,CAAEC,sBAAiB,EAC1FnyE,KAAWC,OAASC,MAAGgyE,EAA6C,CAAEjyE,kBAK3E5pB,KAAAuqD,WAAUjhC,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOsyE,IAAyC,EAChD1xE,KAASjb,IACLlP,KAAK47F,sBAAsBnrD,qBAAqBvhC,GAAO8B,IAAIxQ,QACzDipB,KAAU,IAAM,CACdoyE,IACAt7F,UAAqB,CAAEuK,WAAS2f,KAAe,aAC/CoxE,IACAA,OACD,EACDlyE,KAAWC,KACT,MAAMc,GAAU,CACdmxE,EAA8CjyE,IAC9CrpB,UAAqB,CAAEuK,WAAS6f,KAAY,WAAYf,OAE1D,SAAOgB,KAAKF,GAAO,MA5B/B,CAACzpB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMwN,cAAUC,GAAqC,CACxDC,SAAUmxC,GAAkBA,EAAeC,mCAGlCx+C,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACX8wB,YAAY,EACZnhC,MAAO,KACPqyE,QAAS,KCbPC,KAAuBx+C,MACzBF,KAEAG,MAAGk+C,EAA0CrhE,QACtCA,EACHP,WAAW,MACb,EAEF0jB,MAAGk+C,EAA8C,CAACrhE,GAAS5Q,YAAK,IACzD4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGk+C,EAAiD,CAACrhE,GAASshE,qBAAsBpxC,EAAQO,OAAO6wC,EAAiB,IAC7GthE,EACHzP,UAAU,EACVkP,WAAW,EACXgiE,QAASH,EACTlyE,MAAO,SACT,EAEF+zB,MAAGk+C,EAA2C,CAACrhE,GAASxpB,QAAS05C,EAAQ1S,UAAUhnC,EAAI,IAChFwpB,EACHuwB,YAAY,MACd,EAEFpN,MAAGk+C,EAAkDrhE,QAC9CA,EACHuwB,YAAY,MACd,EAEFpN,MAAGk+C,EAA2C,CAACrhE,QAAO,IAC/CgjB,MAIL,SAAUI,EAAQpjB,EAA0BtrB,GAC9C,OAAOgtF,EAAqB1hE,EAAOtrB,EACvC,2BCzCO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMugE,eAOnErwC,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QACnDuyE,EAAgBr+C,MACzBD,EACAu+C,gBACA,CAAC5hE,EAAO6hE,KACJ,MAAMC,EAA0C,GAChD9hE,SAAMyhE,QAAQ1uF,QAAQyqD,IAClBskC,EAAqB7rF,KAAK,IACvBunD,EACHukC,kBAAmBF,EAAcrkC,EAAEmgC,qBAClC,GAEAmE,wGC3BN,MAAMv+C,KAAkBy+C,MAA6B,QAE/C3sF,KAAYiuC,MAAeC,EAAiBvjB,GAASA,EAAM/wB,QAE3DshB,KAAW+yB,MAAejuC,EAAW2qB,GAASA,EAAMzP,UACpDkP,KAAY6jB,MAAejuC,EAAW2qB,GAASA,EAAMP,WAGrDwiE,IAFAz+C,EAAWF,MAAejuC,EAAW2qB,GAASA,EAAM5Q,QAEpD6yE,EAAuB3+C,MAAejuC,EAAW2qB,GAASA,EAAMo/D,oBAChE8C,KAAuB5+C,MAAejuC,EAAW2qB,GAASA,EAAMq/D,kTCRtE,MAAMv9C,KAAOC,MAAa,sCAEpBC,KAAWD,MAAa,6CAA2CE,SAInEC,KAAcH,MAAa,gDAA8CE,yFCH/E,IAAMS,EAAO,MAAd,MAAOA,EACXp9C,YACUq9C,EACAygC,GADA59E,KAAAm9C,WACAn9C,KAAA49E,uBAGH59E,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOozE,IAA8B,EACrClzE,KAAUva,GAAUlP,KAAK49E,qBAAqBnkC,cAAcj5C,QAC1DkQ,KAAIqpF,IAAwB4C,EAAsC,CAAE5C,4BAAuB,EAC3FpwE,KAAWC,OAASC,MAAG8yE,EAAmC,CAAE/yE,gBAP9D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCIb,MAAMwN,cAAUC,GAAwC,CAC7DC,SAAUgyC,GAAsBA,EAAmB3oF,GACnD42C,cAAc,IAGHrN,EAAsBkN,EAAQI,gBAAgB,CAEzD//B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OChBHizE,KAA4Bn/C,MAChCF,KAEAG,MAAGg/C,EAAgCniE,QAC9BA,EACHP,WAAW,MACX,EAEF0jB,MAAGg/C,EAAoC,CAACniE,GAAS5Q,YAAK,IACjD4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACA,EAEF+zB,MAAGg/C,EAAuC,CAACniE,GAASu/D,0BAA2BrvC,EAAQO,OAAO8uC,EAAsB,IAC/Gv/D,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAKL,SAAUg0B,EAAQpjB,EAA0BtrB,GAChD,OAAO2tF,EAA0BriE,EAAOtrB,EAC1C,gBC1BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMu/D,uBAGrE7uC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACXb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,mzECdzD,MAAM0yB,KAAOC,MAAa,6BACpBC,KAAWD,MAAa,oCAAkCE,SAC1DC,KAAcH,MAAa,uCAAqCE,0HCFtE,MAAMH,KAAOC,MAAa,2CAAyCE,SAM7DD,KAAWD,MAAa,gDAA8CE,SAItEC,KAAcH,MAAa,mDAAiDE,SAI5EqgD,KAAmBvgD,MAAa,+BAA6BE,SAI7DwQ,KAAQ1Q,MAAa,0CAErBwgD,KAA2BxgD,MAAa,mDAExCygD,KAAyBzgD,MAAa,sCAAoCE,SAI1EwgD,KAA4B1gD,MAAa,yCAAuCE,SAIhFyM,KAAO3M,MAAa,iCAA+BE,SAMnD0M,KAAW5M,MAAa,6CAA2CE,SAInE2M,KAAc7M,MAAa,8CC5B3BiB,GAAsB,CAC/B0/C,YAAa,GAEbC,sBAAuB,KACvBC,oBAAqB,GAErBryE,UAAU,EACVkP,WAAW,EAEXswC,SAAS,EACTtrB,UAAU,EACVr1B,MAAO,MCpBLyzE,KAAoB3/C,MACtBF,MAEAG,MAAG2/C,EAAwB9iE,SACpBA,GACHP,WAAW,MACb,EAEF0jB,MAAG2/C,EAA4B,CAAC9iE,IAAS5Q,aAAK,IACvC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAG2/C,EAA+B,CAAC9iE,IAAS0iE,mBAAW,IAChD1iE,GACH0iE,YAAaA,GACbnyE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAG2/C,EAAoC,CAAC9iE,IAASuN,qBAAa,IACvDvN,GACH2iE,sBAAuBp1D,OACzB,EAEF4V,MAAG2/C,EAA0B9iE,SACtBA,GACH0iE,YAAa,OACf,EAEFv/C,MAAG2/C,EAA6C9iE,SACzCA,GACH4iE,oBAAqB,OACvB,EACFz/C,MAAG2/C,EAA0C,CAAC9iE,IAAS0iE,mBAAW,IAC3D1iE,GACH4iE,oBAAqB,IAAI5iE,GAAM4iE,uBAAwBF,QACzD,EAEFv/C,MAAG2/C,EAA6C,CAAC9iE,IAAS0iE,mBAAW,IAC9D1iE,GACH4iE,oBAAqBG,EAAiB/iE,GAAM4iE,oBAAqBF,QACnE,EAEFv/C,MAAG2/C,EAAwB9iE,SACpBA,GACHykB,UAAU,MACZ,EAEFtB,MAAG2/C,EAA4B,CAAC9iE,IAAS5Q,aAAK,IACvC4Q,GACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,aACF,EAEF+zB,MAAG2/C,EAAgC9iE,SAC5BA,GACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,MAAO,SACT,EAEF+zB,MAAG2/C,EAA0C,CAAC9iE,IAAS0iE,mBAAW,IAC3D1iE,GACH4iE,oBAAqB,IAAI5iE,GAAM4iE,uBAAwBF,QACzD,EAEFv/C,MAAG2/C,EAA6C,CAAC9iE,IAAS0iE,mBAAW,IAC9D1iE,GACH4iE,oBAAqBG,EAAiB/iE,GAAM4iE,oBAAqBF,QACnE,EAEFv/C,MAAG2/C,EAAwB9iE,SACpBA,GACHykB,UAAU,MACZ,EAEFtB,MAAG2/C,EAA4B,CAAC9iE,IAAS5Q,aAAK,IACvC4Q,GACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,aACF,EAEF+zB,MAAG2/C,EAAgC9iE,SAC5BA,GACH+vC,SAAS,EACTtrB,UAAU,EACVr1B,MAAO,SAIT,SAAU2zE,EAAiBL,GAA2BM,IAGxDC,OADeP,GAAY5sF,OAAOotF,IAAKF,GAAoB3tC,KAAK,EAAE57C,MAAGo2C,mBAAkBqzC,GAAEzpF,KAAOA,IAAMypF,GAAErzC,eAAiBA,KAClH98C,QAAQowF,KACX,MAAM71C,GAAQo1C,GAAY1gC,UAAUohC,IAAcA,GAAW3pF,KAAO0pF,GAAM1pF,IAAM2pF,GAAWvzC,eAAiBszC,GAAMtzC,eAElH6yC,GAAc5qE,OAAOsd,OAAO,GAAIstD,KACpB/rF,OAAO22C,GAAO,EAAC,GAGxBo1C,GAAY5sF,OAAO,CAACutF,GAAM/1C,GAAOg2C,KAC7Bh2C,KAAUg2C,GAAKthC,UAAUohC,IAAcA,GAAW3pF,KAAO4pF,GAAK5pF,IAAM2pF,GAAWvzC,eAAiBwzC,GAAKxzC,cAEpH,CAGM,SAAUzM,EAAQpjB,GAA0BtrB,IAC9C,OAAOmuF,EAAkB7iE,GAAOtrB,GACpC,gBCrHO,MAAM2uC,KAAWC,MAAeigD,KAAuBvjE,IAASA,GAAM0iE,aAEhEc,KAAmBlgD,MAAeD,EAAUrjB,IAASA,GAAM2iE,uBAE3Dc,KAAyBngD,MAAeD,EAAUrjB,IAASA,GAAM4iE,qBACjEc,KAAiBpgD,MAAeD,EAAUrjB,IAASA,GAAM0iE,aAEzDnyE,MAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,OCTnD0yB,MAAOC,MAAa,qCAAmCE,SAIvDD,KAAWD,MAAa,0CAAwCE,SAIhEC,KAAcH,MAAa,6CAA2CE,wBCF5E,MAAMiO,KAAWC,KAAuC,CAC3DC,SAAUyE,IAASA,GAAMr+C,KAGhBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXLu0E,KAAgBzgD,MAClBF,KAEAG,MAAG6Y,GAAmBh8B,SACfA,GACHP,WAAW,MACb,EAEF0jB,MAAG6Y,EAAuB,CAACh8B,IAAS5Q,aAAK,IAClC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAG6Y,EAA0B,CAACh8B,IAAS00B,aAAaxE,EAAQO,OAAOiE,GAAQ,IACpE10B,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOivF,EAAc3jE,GAAOtrB,GAChC,CCzBO,MAAM2uC,MAAWC,MAAeigD,KAAuBvjE,IAASA,GAAM00B,SAGzEhE,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACbb,EAAQc,aAAa3N,IAEZ9yB,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDw0E,MAAatgD,MAAelW,GAAQsnB,IAAUA,GAAO5+C,OAAO++C,IAASA,KACrEgvC,MAAkBvgD,MAAesgD,GAAYnnE,IAAiBA,GAAc3zB,QChB5Eg5C,MAAOC,MAAa,iDAA+CE,SAOnED,MAAWD,MAAa,sDAAoDE,SAI5EC,MAAcH,MAAa,yDAAuDE,SCLlFiO,MAAWC,KAAmD,CACvEC,SAAU+L,IAAaA,GAAU3lD,KAGxBwsC,GAAsBkN,GAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXL0sD,MAAoB54B,MACtBF,MAEAG,MAAGmb,GAAuBt+B,SACnBA,GACHP,WAAW,MACb,EAEF0jB,MAAGmb,GAA2B,CAACt+B,IAAS5Q,aAAK,IACtC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGmb,GAA8B,CAACt+B,IAAS2+B,wBAAwBzO,GAAQO,OAAOkO,GAAmB,IAC9F3+B,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOonE,GAAkB97C,GAAOtrB,GACpC,CCzBO,MAAM2uC,MAAWC,MAAeigD,KAAuBvjE,IAASA,GAAM2+B,oBAGzEjO,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACbb,GAAQc,aAAa3N,IAEZ9yB,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDuwC,MAAarc,MAAelW,GAAQZ,IAAcA,GAAW12B,OAAOqmD,IAAaA,GAAUtlD,QAC3FkpD,KAAkBzc,MAAeqc,GAAYmkC,IAAqBA,GAAkBh7F,QChBpFg5C,KAAOC,MAAa,4CAC7B,CAAChuC,GAAwBgwF,OAA8BhwF,kBAAgBgwF,sBAG9D/hD,MAAWD,MAAa,iDACjC,CAAChuC,GAAwBqb,OAAuBrb,kBAAgBqb,YAEvD8yB,MAAcH,MAAa,oDACpC,CAAChuC,GAAwBy4B,OAAsCz4B,kBAAgBy4B,iBCHtEwW,GAAsB,CAC/B0c,gBAAiB,GACjBnvC,UAAU,EACVkP,WAAW,EACXrQ,MAAO,MCLL2sC,MAAmB7Y,MACrBF,MAEAG,MAAGmb,EAAuBt+B,SACnBA,GACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGmb,GAA2B,CAACt+B,IAAS5Q,aAAK,IACtC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAGmb,GAA8B,CAACt+B,IAASwM,kBAAU,IAC9CxM,GACH0/B,gBAAiBlzB,GACjBjc,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOqnD,GAAiB/7B,GAAOtrB,GACnC,CC9BO,MAAM2uC,MAAWC,MAAeigD,KAAuBvjE,IAASA,GAAM0/B,iBAEhEnvC,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDgnB,MAAqBkN,MAAeD,GAAUrjB,IAASA,IAASA,GAAM0/B,iBCPtE5d,MAAOC,MAAa,kCAAoChuC,MAA6BA,qBAErFiuC,MAAWD,MAAa,0CAAwCE,SAIhEC,MAAcH,MAAa,6CAA2CE,SCDtEiO,MAAUC,KAAwC,CAC3DC,SAAUv5C,IAASA,GAAM/C,UAGhBkvC,GAAsBkN,GAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCVL40E,MAAkB9gD,MACpBF,MAEAG,MAAG8iB,GAAoBjmC,SAChBA,GACHP,WAAW,MACb,EAEF0jB,MAAG8iB,GAAwB,CAACjmC,IAAS5Q,aAAK,IACnC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAG8iB,GAA2B,CAACjmC,IAAS/wB,aAAaihD,GAAQO,OAAOxhD,GAAQ,IACrE+wB,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOsvF,GAAgBhkE,GAAOtrB,GAClC,CCzBO,MAAM2uC,MAAWC,MAAeigD,KAAuBvjE,IAASA,GAAM/wB,SAGzEyhD,UAAWtjB,GACXujB,eAAgBppB,GAChBqpB,UAAWC,GACXC,YAAaC,IACbb,GAAQc,aAAa3N,IAEZ9yB,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OCbnD0yB,MAAOC,MAChB,oCACA,CAAChuC,GAAwB4zB,GAAiBC,GAAe4U,IAAuB,MAAazoC,kBAAgB4zB,aAAWC,WAAS4U,kBAGxHwF,MAAWD,MACpB,yCACC3yB,MAAuBA,YAGf8yB,MAAcH,MACvB,4CACA,CAACriB,GAAgCiI,GAAiBC,OAAqBlI,YAAUiI,aAAWC,cCJnFob,GAAsB,CAC/BzyB,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KACPuY,UAAW,KACXC,QAAS,KACTrb,KAAM,MCZJ02B,MAAgBC,MAClBF,MAEAG,MAAGL,GAAoB9iB,SAChBA,GACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGL,GAAwB,CAAC9iB,IAAS5Q,aAAK,IACnC4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,MAAOA,OACT,EAEF+zB,MAAGL,GAA2B,CAAC9iB,IAASN,YAAUiI,aAAWC,eAAO,IAC7D5H,GACHzT,KAAMmT,GACNiI,UAAWA,GACXC,QAASA,GACTnI,WAAW,EACXlP,UAAU,EACVnB,MAAO,SAKT,SAAUg0B,GAAQpjB,GAA0BtrB,IAC9C,OAAOuuC,GAAcjjB,GAAOtrB,GAChC,CC5BO,MAAM2uC,MAAWC,MAAeigD,KAAuBvjE,IAASA,GAAMjC,aAEhEinB,MAAU1B,MAAeD,GAAUrjB,IAASA,GAAMzT,MAClDgE,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WAEpD+jB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnD60E,MAAsB3gD,MAAeD,GAAUrjB,IACjDA,GAAMzT,MAAM23E,sBAGVC,MAAwB7gD,MAAeD,GAAUrjB,IACnDA,GAAMzT,MAAM63E,wBAGVC,MAAsB/gD,MAAeD,GAAUrjB,IACjDA,GAAMzT,MAAM+3E,sBAGVh+B,MAA0BhjB,MAAeD,GAAUrjB,IACrDA,GAAMzT,MAAMg6C,wCCPhB,IAAM7jB,GAAO,MAAd,MAAOA,GACTp9C,YACYspB,GACA21E,GACAv8B,GACAziE,IAHAC,KAAAopB,aACAppB,KAAA++F,wBACA/+F,KAAAwiE,uBACAxiE,KAAAD,WAGLC,KAAAyiE,iBAAgBn5C,MACnB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOm5C,IAAiB,EACxBj5C,KAAUva,IAAUlP,KAAK++F,qBAAqBh9D,cAAcvhC,QACxDkQ,KAAIspF,IAAiBt3B,EAAyB,CAAEs3B,qBAAgB,EAChErwE,KAAWC,OAASC,MAAG64C,EAAsB,CAAE94C,iBAKpD5pB,KAAA2iE,eAAcr5C,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOq5C,KAAe,EACtBn5C,KAAUva,IAAUlP,KAAK++F,qBAAqB/8D,UAAU9yB,GAAOX,gBAAgB/N,QAC3EkQ,KAAIw+C,IAAU0T,EAAuB,CAAE1T,cAAS,EAChDvlC,KAAWC,OAASC,MAAG+4C,EAAoB,CAAEh5C,iBAKlD5pB,KAAA8jE,0BAAyBx6C,MAC5B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOw6C,KAA0B,EACjCt6C,KAAUva,IAAUlP,KAAK++F,qBAAqBz8D,cAAcpzB,GAAOX,gBAAgB/N,QAC/EkQ,KAAIyoD,IAAqB4K,GAAkC,CAAE5K,yBAAoB,EACjFxvC,KAAWC,OAASC,MAAGk6C,GAA+B,CAAEn6C,iBAK7D5pB,KAAA4jE,wBAAuBt6C,MAC1B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOs6C,IAAwB,EAC/Bp6C,KAAUva,IAAUlP,KAAK++F,qBAAqBnuD,mBAAmB1hC,GAAOX,eAAgBW,GAAOqvF,iBAAiB/9F,QAC5GkQ,KAAIs2B,IAAc68B,GAAgC30D,GAAOX,eAAgBy4B,MAAW,EACpFrd,KAAWC,OAASC,MAAGg6C,GAA6B30D,GAAOX,eAAgBqb,UAKhF5pB,KAAAgkE,eAAc16C,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO06C,KAAe,EACtBx6C,KAAUva,IAAUlP,KAAK++F,qBAAqBlvF,UAAUX,GAAOX,gBAAgB/N,QAC3EkQ,KAAIjH,IAAUw6D,GAAuB,CAAEx6D,cAAS,EAChDkgB,KAAWC,OAASC,MAAGo6C,GAAoB,CAAEr6C,iBAKlD5pB,KAAAg/F,6BAA4B11E,MAC/B,IAAMtpB,KAAKopB,UAAU5oB,QACrB+oB,MAAOu8C,KAAoB,EAC3Br8C,KAAUva,IAAUlP,KAAKwiE,oBAAoBvrB,wBAAwB/nC,GAAOX,eAAgBW,GAAOizB,UAAWjzB,GAAOkzB,QAASlzB,GAAO8nC,aAAax2C,QAC9I2pB,KAAS+P,IAAY,CACrB4rC,GAA4B5rC,GAAUhrB,GAAOizB,UAAWjzB,GAAOkzB,YAC9D,EACDzY,KAAWC,OAASC,MAAGi8C,GAAyBl8C,UAKjD5pB,KAAAi/F,oBAAmB31E,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO21E,IAAoB,EAC3Bz1E,KAAUva,IAAUlP,KAAK++F,qBAAqBjuD,iCAAiC5hC,GAAOX,eAAgBW,GAAO84B,gBAAiB94B,GAAO6hC,kBAAkBvwC,QACnJkQ,KAAIwsF,IAAegC,EAA4B,CAAEhC,mBAAc,EAC/DvzE,KAAWC,OAASC,MAAGq1E,EAAyB,CAAEt1E,iBAKvD5pB,KAAAm/F,oBAAmB71E,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO21E,IAAoB,EAC3B5/E,KACItf,KAAKD,QAAQO,OAAOmK,mCACpBzK,KAAKD,QAAQO,OAAOmK,2CAA0D,EAElFgf,KAAU,EAAEva,GAAQ64B,GAAem1D,MACxBl9F,KAAK++F,qBAAqB/tD,yBAC7B9hC,GAAO+hC,cACPlJ,GAAc9zB,GACd/E,GAAOgiC,QACPhiC,GAAOiiC,oBACP+rD,GAAYxsF,IAAIunD,IAAS,CAAEA,GAAMhkD,GAAIgkD,GAAM5N,aAAc4N,GAAMmnC,6BACjE5+F,QACE2pB,KAAS,IAAM,CACX+0E,IACA3+F,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,sCACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGq1E,EAAyB,CAAEt1E,gBAnG9D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBANIg8C,IAAOj+C,OAAAkC,MAAAlC,OAAA6S,MAAA7S,OAAA6S,MAAA7S,OAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,GAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,qBCTpB,MAAMmiD,MAAuBx4B,MAAuB,CAChD3sC,YAAUwjB,MACNF,QAEAG,MAAG+kB,EAAmBloC,SACfA,GACHP,WAAW,MACb,EAEF0jB,MAAG+kB,EAAuB,CAACloC,IAAS5Q,aAAK,IAClC4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACF,EAEF+zB,MAAG+kB,EAA0B,CAACloC,IAASw/D,oBAAoBtvC,KAAQO,OAAO+uC,GAAe,IAClFx/D,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIfszE,YAAagC,EACbhwC,OAAQ0T,GACRzJ,kBAAmB4K,GACnB7J,gBAAiB2J,GACjBp6D,OAAQw6D,GACR1rC,YAAautC,KAGX,SAAUloB,GAAQpjB,GAA0BtrB,IAC9C,OAAOmwF,GAAqB7kE,GAAOtrB,GACvC,mOCpCO,MAAM6uF,KAAyBjgD,MAAeC,KAAiBvjB,GAASA,EAAMw/D,eAExE3jC,KAAmBvY,MAAeigD,EAAuBvjE,GAASA,EAAMN,WAGjFgxB,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,IAAQc,aAAa6K,GAEZtrC,KAAW+yB,MAAeuY,EAAkB77B,GAASA,EAAMzP,UAC3DkP,KAAY6jB,MAAeuY,EAAkB77B,GAASA,EAAMP,WAC5D+jB,KAAWF,MAAeuY,EAAkB77B,GAASA,EAAM5Q,OAE3D01E,KAAUxhD,MACnB/b,EACA6F,EACA,CAAC1N,EAAU8/D,IAAkBA,EAAclpF,KAAMH,IAAiBupB,EAASvpB,EAAa4uF,YAG/EC,KAAiC1hD,MAC1ClW,EACA63D,KACA,CAACC,EAAkBn0E,KACf,MAAMo0E,EAAqBD,EAAiBhvF,IAAIC,GAAgBA,EAAaK,IACvE4uF,KAAwBC,UAAOt0E,EAAW,kBAAkB7a,IAAI+a,GAASA,EAAMld,gBACrF,SAAOuxF,WAAQH,EAAoBC,EAAqB,GAInDG,KAAUjiD,MACnB/b,EACA7H,GAAY,CAAC3rB,EAAwByxF,GAAmB,KACpD,IAAIxjE,EAAuB,GAEvB7rB,EAAeupB,EAAS3rB,GAE5B,GAAIoC,EAIA,IAHIqvF,GACAxjE,EAAK/rB,KAAKE,GAGVA,EAAeupB,EAASvpB,EAAa4uF,UAEjC5uF,GACA6rB,EAAKyjE,QAAQtvF,GAMzB,OAAO6rB,IAIF0jE,EAAmBA,CAAC5xF,EAAiB6xF,OAA2BriD,MACzE/b,EACA09D,KACA,CAACW,EAAsB70E,KACnB,MAAM80E,EAA0B,GAC1BC,EAAkB/0E,EAAUza,KAAK2a,GAASA,EAAMza,KAAO1C,GAC7D,IAAIiyF,EAAoBH,EAAqBE,EAAW/xF,gBAExD,GAAIgyF,EAOA,IANIJ,EACAE,EAAQ5vF,KAAK8vF,EAAmBD,GAEhCD,EAAQ5vF,KAAK8vF,GAIbA,EAAoBH,EAAqBG,EAAkBhB,UAEvDgB,GACAF,EAAQJ,QAAQM,GAO5B,OAAOF,IAIFhE,KAAgBv+C,MACzBiiD,EACAA,GAAW,CAACxxF,EAAwByxF,GAAmB,IAASD,EAAQxxF,EAAgByxF,GAAStvF,IAAIC,GAAgBA,EAAaxO,MAAMqI,KAAK,8DClF1I,MAAMkgD,cAAUC,GAAkC,CACrDC,SAAUj6C,GAAgBA,EAAaK,GACvC65C,aAAcA,CAACzkB,EAAGC,IAAMD,EAAEjkC,KAAOikC,EAAEjkC,KAAK4/C,cAAc1b,EAAElkC,MAAQ,IAGvDq7C,EAA8BkN,EAAQI,gBAAgB,CAC/D//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,uDC+IJ,MAAM4zB,EAAgC,CACzCm8C,UAAU,EACV5uE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAEPgwE,kBAAmB,KACnBC,kBAAmB,KAEnBH,SAAU,yzBC5KP,MAAMp9C,KAAOC,MAAa,yCACpBC,KAAWD,MAAa,gDAA8CE,SAGtEC,KAAcH,MAAa,mDAAiDE,SAK5EyM,KAAO3M,MAAa,2CAAyCE,SAC7D0M,KAAW5M,MAAa,gDAA8CE,SAGtE2M,KAAc7M,MAAa,iDAG3B8M,KAAS9M,MAAa,0CAA4CvrC,MAAkBA,SACpFs4C,KAAa/M,MAAa,kDAAgDE,SAG1E8M,KAAgBhN,MAAa,mDAE7BikD,KAAyBjkD,MAAa,oCACtCkkD,KAA6BlkD,MAAa,wCAA0C3yB,MAAuBA,YAC3G82E,KAAgCnkD,MAAa,2CAA6CokD,MAA8CA,0IChB9I,IAAMzjD,EAAO,MAAd,MAAOA,GACXp9C,YACUq9C,GACAyjD,GACAv+B,IAFAriE,KAAAm9C,YACAn9C,KAAA4gG,6BACA5gG,KAAAqiE,oBAGHriE,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOs3E,IAAmC,EAC1Cp3E,KAAUva,IAAUlP,KAAK4gG,0BAA0B7mD,4BAA4B,KAAM,MAAMv5C,QACzFkQ,KAAImiC,IAAUguD,EAA2C,CAAEhuD,cAAS,EACpElpB,KAAWC,OAASC,MAAGg3E,EAAwC,CAAEj3E,iBAMhE5pB,KAAA6pD,SAAQvgC,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOs3E,IAAmC,EAC1Cp3E,KAAUva,IAAUlP,KAAK4gG,0BAA0B/mD,wBAAwB3qC,IAAQ1O,QAC/EkQ,KAAIua,IAAK41E,MAA4C,EACrDl3E,KAAWC,OAASC,MAAGg3E,EAAwC,CAAEj3E,iBAKpE5pB,KAAA8pD,gBAAexgC,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOs3E,IAA0C,EACjD12E,KAASc,IAAK,CACZ41E,IACAtgG,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,4CACTk/C,UAAW,WAOhB9+C,KAAAwxD,aAAYloC,MACjB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOs3E,IAAuC,EAC9C12E,KAASP,IAAS,CAChBA,GAAMA,OAAOhqB,QACXW,UAAoB,CAClBuK,QAAS,CACPstF,UAAW73F,eAAyB83F,GACpCC,YAAa/3F,sBAAgCugG,SAC7C5vF,MAAO,uCACP6V,KAAM6C,GAAMA,OAAOhqB,QACnB44F,YAAa,QAEZj4F,UAAqB,CAAEuK,QAAS,CAAEpL,KAAM,QAASE,QAAS,wCAAyCk/C,UAAW,WAKpH9+C,KAAAuqD,WAAUjhC,MACf,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOs3E,IAAqC,EAC5Cp3E,KAAUva,IAAUlP,KAAK4gG,0BAA0B9mD,0BAA0B5qC,GAAO8B,IAAIxQ,QACpFkQ,KAAIua,IAAK41E,MAA8C,EACvDl3E,KAAWC,OAASC,MAAGg3E,EAA0Cj3E,UAKpE5pB,KAAAsqD,kBAAiBhhC,MACtB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOs3E,IAA4C,EACnD12E,KAASc,IAAK,CACZ41E,IACAtgG,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,8CACTk/C,UAAW,WAOhB9+C,KAAAgqD,eAAc1gC,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOs3E,IAAyC,EAChD12E,KAASc,IAAK,CACZ1qB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,0CACTk/C,UAAW,WAOd9+C,KAAA+gG,mBAAkBz3E,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOs3E,IAAqD,EAC5Dp3E,KAAUva,IAAUlP,KAAKqiE,iBAAiB5tB,eAAe,EAAG,GAAI,IAAIj0C,QAChEkQ,KAAIqc,IAAY8zE,EAA6D9zE,MAAS,EACtFpD,KAAWC,OAASC,MAAGg3E,EAA0Dj3E,SAvGvF,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBALMg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,oBCOb,MAAMwN,KAAUC,KAAiD,CACtEC,SAAUo2C,IAAqBA,IAAmB/sF,GAClD42C,cAAc,IAGHo2C,KAAiBt2C,KAAoD,CAChFC,SAAUs2C,IAAUA,IAAQjtF,GAC5B42C,cAAc,IAGHrN,EAAsBkN,EAAQI,gBAAgB,CAEzD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAEPq1B,UAAU,EAEV0hD,mBAAoB,KAEpBQ,aAAcF,EAAen2C,kBAC7Bs2C,YAAaH,EAAen2C,kBAC5Bu2C,kBAAmBJ,EAAen2C,oBCpC9Bw2C,KAAiC5jD,MACrCF,KAEAG,MAAGkjD,EAAqCrmE,SACnCA,GACHP,WAAW,MACX,EAEF0jB,MAAGkjD,EAAyC,CAACrmE,IAAS5Q,aAAK,IACtD4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,aACA,EAEF+zB,MAAGkjD,EAA4C,CAACrmE,IAASqY,aAAa6X,EAAQO,OAAOpY,GAAQ,IACxFrY,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACP,EAIF+zB,MAAGkjD,EAAsCrmE,SACpCA,GACHykB,UAAU,MACV,EAEFtB,MAAGkjD,EAAyC,CAACrmE,IAAS5Q,aAAK,IACpD4Q,GACHykB,UAAU,EACVr1B,aACF,EAEF+zB,MAAGkjD,EAA6CrmE,SACzCA,GACHykB,UAAU,EACVr1B,MAAO,SACT,EAEF+zB,MAAGkjD,EAAuC,CAACrmE,IAASxpB,SAAS05C,EAAQ1S,UAAUhnC,GAAIwpB,MAAM,EAEzFmjB,MAAGkjD,EAAwDrmE,SACtDA,GACHP,WAAW,MACb,EAEF0jB,MAAGkjD,EAA2D,CAACrmE,IAAS5Q,aAAK,IACtE4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,aACF,EAEF+zB,MAAGkjD,EAA8D,CAACrmE,IAASmmE,0BAAkB,IACxFnmE,GACH2mE,aAAcF,EAAeh2C,OAAO01C,GAAmBY,aAAc/mE,GAAM2mE,cAC3EC,YAAaH,EAAeh2C,OAAO01C,GAAmBa,YAAahnE,GAAM4mE,aACzEC,kBAAmBJ,EAAeh2C,OAAO01C,GAAmBc,mBAAoBjnE,GAAM6mE,uBAGlF,SAAUzjD,EAAQpjB,GAA0BtrB,IAChD,OAAOoyF,EAA+B9mE,GAAOtrB,GAC/C,gBChEO,MAAM2uC,MAAWC,MAAeC,KAAiBvjB,IAASA,GAAM0/D,yBAC1DwH,KAAsB5jD,MAAeD,GAAUrjB,IAASA,GAAM2mE,cAC9DQ,KAAsB7jD,MAAeD,GAAUrjB,IAASA,GAAM4mE,aAC9DQ,KAA4B9jD,MAAeD,GAAUrjB,IAASA,GAAM6mE,oBAG/En2C,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACXb,EAAQc,aAAa3N,IAEZ9yB,KAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpDglB,MAAWnB,MAAeD,GAAUrjB,IAASA,GAAMykB,UACnDjB,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,QAG5DuhC,eAAgB02C,GAChB32C,UAAW42C,GACXb,EAAez1C,aAAak2C,IAG9Bv2C,eAAgB42C,EAChB72C,UAAW82C,GACTf,EAAez1C,aAAam2C,IAG9Bx2C,eAAgB82C,EAChB/2C,UAAWg3C,GACTjB,EAAez1C,aAAao2C,GAEnBO,KAAwBrkD,MAAeD,GAAUrjB,IAASA,GAAM6mE,mBAChEe,MAAiBtkD,MAAeD,GAAUrjB,IAASA,GAAM4mE,ogBClC/D,MAAM9kD,KAAOC,MAAa,kCAAmC,CAAC3C,GAAsB,MAAYA,gBAC1FyoD,KAAwB9lD,MAAa,kCAAoC3yB,KAAuBA,WAChG4yB,KAAWD,MAAa,0CAAwCE,SAGhEC,KAAcH,MAAa,6CAA2CE,SAOtE6lD,KAA0B/lD,MAAa,yCAClDE,SAEW8lD,KAAiChmD,MAAa,iDACzDE,SAEW+lD,KAA8BjmD,MAAa,8CACtDE,yFCfK,IAAMS,EAAO,MAAd,MAAOA,EACXp9C,YACUq9C,EACAyjD,GADA5gG,KAAAm9C,WACAn9C,KAAA4gG,4BAGH5gG,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOk5E,IAA6B,EACpCh5E,KAAUva,GAAUlP,KAAK4gG,0BAA0Bh5D,OAAO14B,EAAO0qC,YAAYp5C,QAC3EkQ,KAAIupF,GAAsBwI,EAAqC,CAAExI,yBAAqB,EACtFtwE,KAAWC,MAASC,MAAG44E,EAAkC,CAAE74E,gBAK1D5pB,KAAAuqD,WAAUjhC,MACf,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOk5E,IAAgD,EACvDh5E,KAAUva,GAAUlP,KAAK4gG,0BAA0B3mD,sBAAsB/qC,EAAOgrC,YAAY15C,QAC1FkQ,KAAI+jD,GAAWguC,EAAwD,CAACvoD,WAAYhrC,EAAOgrC,eAAY,EACvGvwB,KAAWC,MAASC,MAAG44E,EAAqD,CAAC74E,eAjB/E,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCQb,MAAMwN,cAAUC,GAA2C,CAChEC,SAAUo2C,GAAqBA,GAAmB/sF,GAClD42C,cAAc,IAGHrN,EAAsBkN,EAAQI,gBAAgB,CAEzD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAEP84E,6BAA6B,EAC7BC,8BAA8B,EAE9B53C,YAAY,ICzBR63C,KAA2BllD,MAC/BF,KAEAG,MAAG8kD,EAA+BjoE,QAC7BA,EACHP,WAAW,MACX,EAEF0jB,MAAG8kD,EAAmC,CAACjoE,GAAS5Q,YAAK,IAChD4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACA,EAEF+zB,MAAG8kD,EAAsC,CAACjoE,GAASy/D,wBAAyBvvC,EAAQO,OAAOgvC,EAAmBvpF,IAAImyF,GAAaA,EAAUC,MAAO,IAC3ItoE,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACP,EAEF+zB,MAAG8kD,EAAkD,CAACjoE,QAAkB,IACnEA,EACHuwB,YAAY,MACZ,EAEFpN,MAAG8kD,EAAyD,CAACjoE,GAAQ0f,gBAAgBwQ,EAAQ1S,UAAUkC,EAAY,IAC9G1f,EACHuwB,YAAY,MACZ,EAEFpN,MAAG8kD,EAAsD,CAACjoE,GAAQ5Q,YAAK,IAClE4Q,EACHuwB,YAAY,EACZnhC,YAIE,SAAUg0B,EAAQpjB,EAA0BtrB,GAChD,OAAO0zF,EAAyBpoE,EAAOtrB,EACzC,gBCzCO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMy/D,qBAGrE/uC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACXb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD8wB,KAAajN,MAAeD,EAAUrjB,GAASA,EAAMuwB,YACrD/M,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAGnD+4E,MAA+B7kD,MAAeD,EAAUrjB,GAASA,EAAMmoE,8BACvED,KAA8B5kD,MAAeD,EAAUrjB,GAASA,EAAMkoE,gxCClB5E,MAAMl2C,KAASjQ,MAAa,sCAAuC,CACxEhuC,GACAqjC,OACMrjC,kBAAgBqjC,kBACX6a,KAAalQ,MAAa,2CAA6C3yB,MAAuBA,YAC9F8iC,KAAgBnQ,MAAa,8CAAgDxvB,MAAyBA,eAGtGuvB,KAAOC,MAAa,oCAAsChuC,MAA8BA,qBACxFiuC,KAAWD,MAAa,yCAA2C3yB,MAAuBA,YAC1F8yB,KAAcH,MAAa,4CACtC3K,MACMA,kBAEKmxD,KAAqBxmD,MAAa,8BAAgCoY,MAAmDA,iBCLrHjK,cAAUC,GAA8C,CACnEC,SAAUo4C,IAAcA,GAAWC,cAAgBD,GAAW1pC,wBAGnD9b,EAAsBkN,EAAQI,gBAAgB,CACzD7wB,WAAW,EACXlP,UAAU,EACVoqC,YAAY,EACZ+tC,WAAW,EACXC,mBAAoB,KACpBv5E,MAAO,OCnBH6zB,KAAgBC,MACpBF,KAEAG,MAAGL,EAAsB9iB,SACpBA,GACH26B,YAAY,EACZ+tC,WAAW,MACX,EAEFvlD,MAAGL,EAA6B,CAAC9iB,SAAiB,IAC7CA,GACH26B,YAAY,EACZ+tC,WAAW,MACX,EAEFvlD,MAAGL,EAA0B,CAAC9iB,IAAS5Q,aAAK,IACvC4Q,GACH26B,YAAY,EACZ+tC,WAAW,EACXt5E,MAAOA,OACP,EAEF+zB,MAAGL,EAAqB9iB,SACnBA,GACHP,WAAW,EACXipE,WAAW,MACX,EAEFvlD,MAAGL,EAA2B,CAAC9iB,IAASoX,kBAAkB8Y,EAAQO,OAAOrZ,GAAa,IACjFpX,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACP,EAEF+zB,MAAGL,EAAwB,CAAC9iB,IAAS5Q,aAAK,IACrC4Q,GACHP,WAAW,EACXrQ,MAAOA,OACP,EAEF+zB,MAAGL,EAAkC,CAAC9iB,IAASm6B,kBAAU,IACpDn6B,GACH2oE,mBAAoBxuC,OAIlB,SAAU/W,EAAQpjB,GAA0BtrB,IAChD,OAAOuuC,EAAcjjB,GAAOtrB,GAC9B,gBCjDO,MAAM2uC,KAAWC,MAAeslD,IAAiB5oE,IAASA,GAAM6oE,uBAGrEn4C,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACXb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WACpDk7B,KAAarX,MAAeD,EAAUrjB,IAASA,GAAM26B,YACrD+tC,KAAYplD,MAAeD,EAAUrjB,IAASA,GAAM0oE,WACpDllD,KAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,OACnD05E,KAAwBxlD,MAAeD,EAAUrjB,IAASA,GAAM2oE,oBCVhEI,KAAoBhnD,MAAa,8BACjC8lD,KAAwB9lD,MAAa,kCAAoC3yB,MAAuBA,YAChG45E,KAA2BjnD,MAAa,qCAAuCknD,MAAqCA,oBAEpHC,KAAennD,MAAa,yBAC5BonD,MAAmBpnD,MAAa,6BAA+B3yB,MAAuBA,YACtFg6E,MAAsBrnD,MAAa,gCAAkCsnD,MAA2BA,eAEhGC,MAAevnD,MAAa,wBAAyB,CAACpa,GAAmBC,GAAiB4P,GAAed,GAAmBe,GAAyBC,GAA0BC,MACxLhQ,aAAWC,WAAS4P,SAAOC,iBAAef,WAASgB,kBAAgBC,iBAG1D4xD,MAAmBxnD,MAAa,6BAA+B3yB,MAAuBA,YAEtFo6E,KAAsBznD,MAAa,gCAAkC0nD,MAA2BA,eAEhGC,KAAc3nD,MAAa,6BAA+BlK,MAAqBA,YAE/E8xD,KAAkB5nD,MAAa,kCAAoC3yB,MAAuBA,YAE1Fw6E,KAAqB7nD,MAAa,qCAAuC8nD,MAAwBA,cAEjGtvE,KAAQwnB,MAAa,0BAErB+nD,KAAS/nD,MAAa,gCCNtBiB,GAAsB,CACjCimD,cAAe,GACfI,SAAU,GACVI,SAAU,GACVM,cAAe,KACfC,aAAc,KAEdvqE,WAAW,EACXlP,UAAU,EAEV05E,mBAAmB,EACnBC,kBAAkB,EAElBC,kBAAkB,EAClBN,QAAS,KAETz6E,MAAO,MCtCH6zB,MAAgBC,MACpBF,MAEAG,MAAGL,EAAkC9iB,SAChCA,GACHP,WAAW,MACX,EAEF0jB,MAAGL,EAAwC,CAAC9iB,IAASipE,qBAAa,IAC7DjpE,GACHipE,cAAeA,GACf14E,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACP,EAEF+zB,MAAGL,EAAqC,CAAC9iB,IAAS5Q,aAAK,IAClD4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,OACP,EAEF+zB,MAAGL,EAA6B9iB,SAC3BA,GACHP,WAAW,MACX,EAEF0jB,MAAGL,GAAmC,CAAC9iB,IAASqpE,gBAAQ,IACnDrpE,GACHqpE,SAAUA,GACV94E,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACP,EAEF+zB,MAAGL,GAAgC,CAAC9iB,IAAS5Q,aAAK,IAC7C4Q,GACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,OACP,EAEF+zB,MAAGL,GAA6B9iB,SAC3BA,GACHkqE,kBAAkB,EAClBD,mBAAmB,MACnB,EAEF9mD,MAAGL,EAAuB9iB,SACrBA,GACHiqE,mBAAmB,MACnB,EAEF9mD,MAAGL,EAAmC,CAAC9iB,IAASypE,gBAAQ,IACnDzpE,GACHypE,SAAUA,GACVS,kBAAkB,EAClBD,mBAAmB,EACnB76E,MAAO,SACP,EAEF+zB,MAAGL,GAAgC,CAAC9iB,IAAS5Q,aAAK,IAC7C4Q,GACHkqE,kBAAkB,EAClBD,mBAAmB,EACnB76E,MAAOA,OACP,EAEF+zB,MAAGL,EAAsB9iB,SACpBA,GACHypE,SAAU,GACVS,kBAAkB,EAClBD,mBAAmB,MACnB,EAEF9mD,MAAGL,EAA4B9iB,SAC1BA,GACHmqE,kBAAkB,EAClBN,QAAS,SACT,EAEF1mD,MAAGL,EAAkC,CAAC9iB,IAAS6pE,eAAO,IACjD7pE,GACH6pE,QAASA,GACTM,kBAAkB,EAClB/6E,MAAO,SACP,EAEF+zB,MAAGL,EAA+B,CAAC9iB,IAAS5Q,aAAK,IAC5C4Q,GACHmqE,kBAAkB,EAClB/6E,MAAOA,OAKL,SAAUg0B,GAAQpjB,GAA0BtrB,IAChD,OAAOuuC,GAAcjjB,GAAOtrB,GAC9B,CCnGO,MAAM2uC,MAAWC,MAAeslD,IAAiB5oE,IAASA,GAAMoqE,UAE1D75E,MAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpDyqE,MAAmB5mD,MAAeD,GAAUrjB,IAASA,GAAMkqE,kBAC3DD,MAAoB3mD,MAAeD,GAAUrjB,IAASA,GAAMiqE,mBAC5DzmD,MAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDioB,MAAmBiM,MAAeD,GAAUrjB,IAASA,GAAMipE,cAAcjzF,QAAQ21B,KAAK,CAACC,GAAGC,KAAMD,GAAEjkC,KAAK4/C,cAAc1b,GAAElkC,QACvH2vC,MAAcgM,MAAeD,GAAUrjB,IAASA,GAAMqpE,SAASrzF,QAAQ21B,KAAK,CAACC,GAAGC,KAAMD,GAAEjkC,KAAK4/C,cAAc1b,GAAElkC,QAE7G4vC,MAAc+L,MAAeD,GAAUrjB,IAASA,GAAMypE,UAEtDY,MAAa/mD,MAAeD,GAAUrjB,IAASA,GAAM6pE,SAErDS,MAAmBhnD,MAAeD,GAAUrjB,IAASA,GAAMmqE,sECJjE,IAAMznD,GAAO,MAAd,MAAOA,GACXp9C,YACYC,GACAqpB,GACA27E,IAFA/kG,KAAAD,WACAC,KAAAopB,aACAppB,KAAA+kG,mBAGL/kG,KAAAglG,0BAAyB17E,MAC5B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO07E,WAA2B,EAClCx7E,KAAUva,IAAUlP,KAAK+kG,gBAAgBvzD,sBAAsBtiC,GAAOuiC,oBAAoBjxC,QACtFkQ,KAAIiG,GAAqBsuF,gBAAmCtuF,IAAiB,EAC7EgT,KAAWC,MAASC,MAAGo7E,aAAgCr7E,UAK5D5pB,KAAAklG,yBAAwB57E,MAC3B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO07E,SAAyB,EAChC3lF,KAAetf,KAAKD,QAAQO,OAAOuK,SAAwC,EAC3E4e,KAAU,EAAEva,GAAQX,KAAoBvO,KAAK+kG,gBAAgBxzD,oBAAoBriC,GAAOX,gBAAkBA,GAAgB/N,QACtHkQ,KAAIy0F,GAAQF,cAAiCE,IAAI,EACjDx7E,KAAWC,MAASC,MAAGo7E,WAA8Br7E,UAK1D5pB,KAAAolG,0BAAyB97E,MAC5B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO87E,SAA0B,EACjC57E,KAAUva,IAAUlP,KAAK+kG,gBAAgBzzD,uBAAuB9wC,QAC5DkQ,KAAI40F,GAASD,cAAkCC,IAAK,EACpD37E,KAAWC,MAASC,MAAGw7E,WAA+Bz7E,UAK3D5pB,KAAAulG,6BAA4Bj8E,MACjC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOi8E,IAA6B,EACpClmF,KAAetf,KAAKD,QAAQO,OAAOuK,SAAwC,EAC3E4e,KAAU,EAAEva,GAAQX,KAAoBvO,KAAK+kG,gBAAgBrzD,wBAAwBxiC,GAAOX,gBAAkBA,GAAgB/N,QAC5HkQ,KAAIkhC,GAAe4zD,EAAqC5zD,KAAY,EACpEjoB,KAAWC,MAASC,MAAG27E,EAAkC57E,SAKxD5pB,KAAAylG,+BAA8Bn8E,MACnC,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOi8E,IAA+B,EACtClmF,KAAetf,KAAKD,QAAQO,OAAOuK,SAAwC,EAC3E4e,KAAU,EAAEva,GAAQX,KAAoBvO,KAAK+kG,gBAAgBpzD,wBAAwBziC,GAAOX,gBAAkBA,EAAgBW,GAAO0iC,aAAapxC,QAChJkQ,KAAIid,GAAU63E,EAAuC73E,KAAO,EAC5DhE,KAAWC,MAASC,MAAG27E,EAAoC57E,SAK1D5pB,KAAA0lG,sBAAqBp8E,MAC1B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOo8E,IAA8B,EACrCl8E,KAAUva,IAAUlP,KAAK+kG,gBAAgBlzD,mBAAmBrxC,QAC1DkQ,KAAIid,GAAUg4E,EAAsCh4E,KAAO,EAC3DhE,KAAWC,MAASC,MAAG87E,EAAmC/7E,SAKzD5pB,KAAA4lG,qBAAoBt8E,MACzB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOo8E,IAAyB,EAChCl8E,KAAUva,IAAUlP,KAAK+kG,gBAAgBjzD,cAActxC,QACrDkQ,KAAIid,GAAUg4E,GAAiCh4E,KAAO,EACtDhE,KAAWC,MAASC,MAAG87E,GAA8B/7E,SAKpD5pB,KAAA6lG,iBAAgBv8E,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOo8E,KAAyB,EAChCrmF,KAAetf,KAAKD,QAAQO,OAAOuK,SAAwC,EAC3E4e,KAAU,EAAEva,GAAQX,KAAoBW,GAAOxP,OAASimG,GAA0BjmG,KAAOM,KAAK+kG,gBAAgBhzD,YAAY7iC,GAAOizB,UAAWjzB,GAAOkzB,QAASlzB,GAAO8iC,MAAO9iC,GAAOgiC,QAAShiC,GAAO+iC,cAAe/iC,GAAOgjC,eAAgBhjC,GAAOijC,YAAa5jC,GAAgB/N,QACzQkQ,KAAIid,GAAUg4E,EAAiCh4E,KAAO,EACtDhE,KAAWC,MAASC,MAAG87E,GAA8B/7E,OAAQ,EAC3DC,MACF,QACD,EACDvZ,KAAOpB,MAAYA,MAIhBlP,KAAA8lG,gBAAex8E,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOo8E,IAAwB,EAC/Bl8E,KAAWva,IAAYlP,KAAK+kG,gBAAgB3yD,WAAWljC,GAAOmjC,OAAO7xC,QACnEkQ,KAAIid,GAAUg4E,EAAgCh4E,KAAO,EACrDhE,KAAWC,MAASC,MAAG87E,EAA6B/7E,SAKnD5pB,KAAA+lG,uBAAsBz8E,MAC3B,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOo8E,KAA6B,EACpCj1F,KAAIxB,KACA,OAAOA,GAAO0a,MAAMoF,YAChB,KAAK,IACD,OAAOzuB,WAAoB,CACzBuK,QAAS,CACPk7F,YAAa,0BACb5N,UAAW73F,gBAAyB83F,GACpCC,YAAa/3F,uBAAgCg4F,KAC7CrnF,MAAO,mBACP6V,KAAM,uEACNyxE,YAAa,KACbyN,cAAe,KACfC,cAAe,KACfC,gBAAiB,QAGzB,KAAK,IACH,OAAO5lG,WAAoB,CACzBuK,QAAS,CACPk7F,YAAa,0BACb5N,UAAW73F,gBAAyB83F,GACpCC,YAAa/3F,uBAAgCg4F,KAC7CrnF,MAAO,mBACP6V,KAAM7X,GAAO0a,MAAMhqB,QACnB44F,YAAa,KACbyN,cAAe,KACfC,cAAe,KACfC,gBAAiB,QAGvB,QACE,OAAO5lG,WAAoB,CACzBuK,QAAS,CACPk7F,YAAa,0BACb5N,UAAW73F,gBAAyB83F,GACpCC,YAAa/3F,uBAAgCg4F,KAC7CrnF,MAAO,mBACP6V,KAAM,sEACNyxE,YAAa,KACbyN,cAAe,KACfC,cAAe,KACfC,gBAAiB,QAG3B,IAlJJ,CAACllG,SAAAjB,KAAA,mBAAAkB,mBALMg8C,IAAOj+C,OAAAkC,MAAAlC,OAAA6S,MAAA7S,OAAA8S,OAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,GAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCNpB,MAAMkpD,MAAiBv/B,MAAuB,CAC1Cw/B,iBAAkBpB,UAClBqB,kBAAmBjB,UACnBhC,qBAAsBmC,EACtBZ,SAAUe,KAGR,SAAU/nD,GAAQpjB,GAA0BtrB,IAC9C,OAAOk3F,GAAe5rE,GAAOtrB,GACjC,4ECdO,MAAMk0F,KAAkBtlD,MAAeC,KAAiBvjB,GAASA,EAAM2/D,ueCAvE,MAAM9tC,KAAS9P,MAAa,kCAAoC9K,KAAkCA,wBAC5F6a,KAAa/P,MAAa,uCAAyC3yB,KAAuBA,WAC1F2iC,KAAgBhQ,MAAa,0CAA4C5lC,KAAiCA,uBAE1G2lC,KAAOC,MAAa,iCAAmChuC,KAA8BA,oBACrFiuC,KAAWD,MAAa,sCAAwC3yB,KAAuBA,WACvF8yB,KAAcH,MAAa,yCAA2C4oD,KAA+BA,UCCrGz6C,cAAUC,GAAqC,CACxDC,SAAU9pB,GAAOA,EAAI7sB,KAGZupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACX60C,YAAY,EACZllD,MAAO,OCbL6zB,KAAgBC,MAClBF,KAEAG,MAAGL,EAAsB9iB,QAClBA,EACHs0C,YAAY,MACd,EAEFnxB,MAAGL,EAA0BA,EAA6B9iB,QACnDA,EACHs0C,YAAY,MACd,EAEFnxB,MAAGL,EAAoB9iB,QAChBA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAwB,CAAC9iB,GAAS5Q,aAAK,IACnC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAOA,OACT,EAEF+zB,MAAGL,EAA2B,CAAC9iB,GAAS2qE,WAAWz6C,EAAQO,OAAOk6C,GAAM,IACjE3qE,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,IAC9C,OAAOuuC,EAAcjjB,EAAOtrB,GAChC,iDC/BO,MAAM2uC,KAAWC,MAAeslD,IAAiB5oE,GAASA,EAAM6rE,mBAGnEn7C,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD60C,KAAahxB,MAAeD,EAAUrjB,GAASA,EAAMs0C,YACrD9wB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD28E,KAAiBzoD,MAC1BlW,EACAy9D,cACA,CAACF,EAAMqB,KAAyBrB,EAAKz0F,IAAIowB,KAGrC81B,YAAY91B,EAAIwvB,WAChBhiD,QAASwyB,EAAIlhB,QACb6pD,SAAU3oC,EAAI28C,SACdgpB,iBAAkBD,GAAqB1lE,EAAI4lE,oBAAsBF,GAAqB1lE,EAAI4lE,oBAAoB1zF,KAAO,mBACrH2D,kBAAmBmqB,EAAI7sB,GACvB0yF,SAAU7lE,EAAI0f,UACdomD,QAAS9lE,EAAI/lB,SAAW,KAAO+lB,EAAIhmB,UACnC+rF,cAAe/lE,EAAIgmE,mBAAqB,KAAOhmE,EAAIimE,oBACnDC,OAAQlmE,EAAImmE,OAAS,QACrBC,aAAY75E,UAAOyT,EAAIqmE,UAAW9/D,OAAO,yBACzC+/D,SAAUle,KAAKqD,MAAOzrD,EAAIumE,0BAA4BvmE,EAAIwmE,kBAAqB,KAAO,IACtFrwF,WAAY6pB,EAAIymE,WAChBC,YAAa1mE,EAAI2mE,qBAAuB3mE,EAAI4mE,qBAAuB5mE,EAAI2mE,oBAAsB,KAAO3mE,EAAI4mE,qBAAuB,IAC/HC,YAAa7mE,EAAI8mE,eAAev6E,UAAOyT,EAAI8mE,aAAcvgE,OAAO,yBAA2B,QAKtFwgE,KAAyB/pD,MAClCyoD,EACAuB,GAASA,EAAMx3F,OAAO9C,IAAQA,GAAKyJ,aAAkC,IAApBzJ,GAAKopD,aAG7CmxC,KAA2BjqD,MACpCyoD,EACAuB,GAASA,EAAMx3F,OAAO9C,KAASA,GAAKyJ,aAAkC,IAApBzJ,GAAKopD,aAG9CoxC,KAAmBlqD,MAC5ByoD,EACAuB,GAASA,EAAMx3F,OAAO9C,KAA4B,IAApBA,GAAKopD,aAG1BqxC,KAA8BnqD,MACvCjzC,KACA+8B,EACA,CAACt5B,EAAS62F,KAASA,GAAKr0F,KAAKgwB,GAAOA,EAAIlhB,UAAYtR,uTC9DjD,MAAMguC,KAAOC,MAAa,mCACpBC,KAAWD,MAAa,uCAAyC3yB,KAAuBA,WACxF8yB,KAAcH,MAAa,0CAA4C+oD,KAAiCA,WCIxG56C,cAAUC,GAAsC,CACzDC,SAAUlrD,GAAQA,EAAKuU,KAGdupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXL6zB,KAAgBC,MAClBF,KAEAG,MAAGL,EAAoB9iB,QAChBA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAwB,CAAC9iB,GAAS5Q,YAAK,IACnC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGL,EAA2B,CAAC9iB,GAAS8qE,WAAY56C,EAAQO,OAAOq6C,EAAO,IACnE9qE,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBCzBO,MAAM2uC,KAAWC,MAAeslD,IAAiB5oE,GAASA,EAAM8rE,oBAGnEp7C,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDs+E,KAA8BpqD,MAAelW,EAAQ0+D,GAAqBA,EAAkBh2F,OAAO5Q,IAASA,EAAK4wD,iHCfvH,MAAMhU,KAAOC,MAAa,uCAAwC,CAAChuC,EAAwB4zB,EAAmBC,MAAuB7zB,iBAAgB4zB,YAAWC,aAC1Joa,KAAWD,MAAa,4CAA8C3yB,KAAuBA,WAC7F8yB,KAAcH,MAAa,+CAAiDvlB,KAA2DA,4BAEvI+jC,KAAexe,MAAa,iDAAkD,CAACpa,EAAmBC,EAAiB+lE,MAA6BhmE,YAAWC,UAAS+lE,mBAEpKl7C,KAAQ1Q,MAAa,gQCF3B,IAAM6rD,EAA4B,MAAnC,MAAOA,EAGXtoG,YACU6mB,EACAzI,GADAle,KAAA2mB,QACA3mB,KAAAke,eAJFle,KAAAqoG,IAAM,iCAKX,CAEIC,8BACL/5F,EACA4zB,EACAC,GAEA,OAAOpiC,KAAK2mB,MAAME,IAIhB,eAAetY,sBAAmC4zB,aAAqBC,IAE3E,CAACnhC,SAAAjB,KAAA,mBAAAkB,iBAnBUknG,GAA4BnpG,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAA5Bs/E,EAA4Br/E,QAA5Bq/E,EAA4Bp/E,UAAAC,WAF3B,gBAEDm/E,CAA4B,gECUlC,IAAMlrD,EAAO,MAAd,MAAOA,EAGXp9C,YACUspB,EACAm/E,EACAv2E,GAFAhyB,KAAAopB,YACAppB,KAAAuoG,oBACAvoG,KAAAgyB,SALOhyB,KAAAwoG,WAAa,sBAQvBxoG,KAAAmtD,SAAQ7jC,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+zB,OAAkB,EACzBh+B,KACEtf,KAAKgyB,OAAO1xB,OAAOuK,MACnB7K,KAAKgyB,OAAO1xB,OAAOmoG,QAA4C,EAEjEh/E,KAAU,EAAEva,GAAQjB,EAAwBy2D,KACtCz2D,EACKjO,KAAKuoG,kBAAkBD,8BAC5Br6F,EACAiB,GAAOizB,WAAauiC,EAAUviC,WAAa/P,aAAmBC,SAAS,EAAG,SAASgV,OAAOrnC,KAAKwoG,YAC/Ft5F,GAAOkzB,SAAWsiC,EAAUtiC,SAAWhQ,aAAmBiV,OAAOrnC,KAAKwoG,aACtEhoG,QACAC,KAAUT,KAAKgyB,OAAO1xB,OAAOmoG,MAA0CjoG,QAAK8P,KAAOvK,IAAYA,MAAS,EACxG2K,KAAIsmB,GAA0BsmB,KAA0BtmB,KAAuB,EAC/ErN,KAAWoD,MAAYlD,MAAGyzB,KAAuBvwB,EAASntB,YAGrD0qB,OAMRtqB,KAAA0oG,gBAAep/E,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+zB,OAAyB,EAChC5sC,KAAI,IAAMiuC,KAA+BziC,IAAM8a,0BA9BhD,CAAC/1B,SAAAjB,KAAA,mBAAAkB,iBAPOg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,GAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCGb,MAAMM,cAJUmN,GAA+C,CACpEC,SAAU+9C,GAAQA,EAAKp6F,iBAGkBu8C,gBAAgB,CACzD89C,WAAY,KACZzmE,UAAW,KACXC,QAAS,KACT+lE,cAAe,KACfp9E,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCpBH6zB,KAAgBC,MACpBF,KAEAG,MAAGL,KAAqB9iB,QACnBA,EACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGL,KAAwB,CAAC9iB,GAAS5Q,YAAK,IACrC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACA,EAEF+zB,MAAGL,KAA2B,CAAC9iB,GAASxD,6BAAsB,IACzDwD,EACHouE,WAAY5xE,EACZiD,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACP,EAEF+zB,MAAGL,KAA4B,CAAC9iB,GAAS2H,YAAWC,UAAS+lE,oBAAa,IACrE3tE,EACH2H,YACAC,UACA+lE,oBACA,EAEFxqD,MAAGL,KAAqB,IAAME,IAG1B,SAAUI,EAAQpjB,EAA0BtrB,GAChD,OAAOuuC,EAAcjjB,EAAOtrB,EAC9B,qIClCO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMxD,wBAE1D6xE,KAA4B/qD,MAAeD,EAAUrjB,GAASA,GAASA,EAAMouE,YAE7E3uE,KAAY6jB,MAAeD,EAAUrjB,GAASA,GAASA,EAAMP,WAC7DlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,GAASA,EAAMzP,UAC5DizB,KAAWF,MAAeD,EAAUrjB,GAASA,GAASA,EAAM5Q,OAE5DqzC,KAAenf,MAAeD,EAAUrjB,KAAY2H,UAAW3H,EAAM2H,UAAWC,QAAS5H,EAAM4H,QAAS+lE,cAAe3tE,EAAM2tE,iBAE7HW,EAAkBA,CAACC,EAAoBC,EAAqBC,OAAiEnrD,MACxIrzC,uBACAo+F,EACA,CAAC5pE,EAASmmB,KAEV,IAAKA,GAAQ9hD,OACX,OAAO,KAET,IAAI6jD,EAAuB,GACvB+hD,EAAa,GACbC,EAAe,IAAI/jD,GACnBgkD,EAAgB,GAGpB,GAAkB,YAAfL,EAAyB,CAE1BI,EAAahjE,KAAK,CAACC,EAAGC,IAAKA,EAAEgjE,WAAajjE,EAAEijE,YAAchjE,EAAEijE,UAAYljE,EAAEkjE,WAAajjE,EAAEkjE,UAAYnjE,EAAEmjE,WAEvGpiD,EAAa/B,EAAO10C,IAAIuyB,GAASA,EAAMumE,SAEvC,UAAWvmE,KAASkmE,EAClB,UAAWM,KAAgBxmE,EAAMmmE,cAAe,CAC9C,IAAI1kD,EAAS0kD,EAAct4F,KAAK4zC,GAAUA,EAAOviD,OAASsnG,EAAaC,eAElEhlD,IACHA,EAAS,CACPilD,kBAAkB,EAClBxnG,KAAMsnG,EAAaC,cACnB7kD,MAAO,IAAI4kD,EAAaG,kBACxB7iF,KAAM,GACNrnB,KAAM,UAGR0pG,EAAc34F,KAAKi0C,IAGrBA,EAAO39B,KAAKtW,KAAK,CACfo5F,OAAQ,CAACt7F,eAAkB00B,EAAM10B,gBACjCo2C,EAAG8kD,EAAaK,cAAgB,EAAIL,EAAaK,cAAgB,MAErE,CAEJ,KAAO,CAEL,UAAW7mE,KAASmiB,EAClB,UAAW2kD,KAAY9mE,EAAM+mE,UAC3Bd,EAAWz4F,KAAKs5F,GAIpBb,EAAW/iE,KAAK,CAACC,EAAGC,IAAKA,EAAEgjE,WAAajjE,EAAEijE,YAAchjE,EAAEijE,UAAYljE,EAAEkjE,WAAajjE,EAAEkjE,UAAYnjE,EAAEmjE,WAErG,UAAU99E,KAASy9E,EAAW,CAC5B/hD,EAAW12C,KAAKgb,EAAMtpB,MACtB,UAAWsnG,KAAgBh+E,EAAM29E,cAAe,CAC9C,IAAI1kD,EAAS0kD,EAAct4F,KAAK4zC,GAAUA,EAAOviD,OAASsnG,EAAaC,eAElEhlD,IACHA,EAAS,CACPilD,kBAAkB,EAClBxnG,KAAMsnG,EAAaC,cACnB7kD,MAAO,IAAI4kD,EAAaG,kBACxB7iF,KAAM,GACNrnB,KAAM,SACN6yB,KAAM,CAAC,OAAQ,IAAK,SACpB03E,YAAa,CACXrkD,SAAS,EACTskD,QAAS,UAIbd,EAAc34F,KAAKi0C,IAIrBA,EAAO39B,KAAKtW,KAAK,CACfo5F,OAAQ,CAACv7F,QAAWmd,EAAMnd,SAC1Bq2C,EAAG8kD,EAAaK,cAAgB,EAAIL,EAAaK,cAAgB,MAErE,CACF,CACF,CAEA,MACMpkD,EAA8B,IAAZzmB,EAAgB,UAAY,UAC9CkrE,EAAwB,IAAZlrE,EAAgB,UAAY,UAG9C,MAAQ,CACNwmB,MAAO,CACL/lD,KAAM,SACNgmD,gBAAiB,eAEnBC,QAAS,CACPC,SAAS,GAEXC,UAAW,CACTD,SAAS,GAEX10C,MAAO,CACLgI,KAAM,GACN4sC,MAAO,CACLC,SAAU,SAGdC,OAAQ,CACNokD,MAAO,SACPC,cAAe,MACf1lD,GAAG,GACH2lD,UAAU,EACV5kD,gBAAiB,cACjBiB,YAAa,EACbM,QAAQ,EACRsjD,UAAW,CACT1lD,MAAOslD,EACPpkD,SAAU,SAGdE,YAAa,CACXukD,IAAK,CACHjkD,UAAW,CACTC,SAAU,KAEZN,WAAY,CACVN,SAAS,GAEXa,UAAU,GAEZ/B,OAAQ,CACN4B,SA9C8B,YAAfyiD,EAA2B,cAAWhmE,EA+CrDqjB,YAAa,YACbG,WAAW,EACXL,WAAY,CACVN,SAAS,IAGbS,OAAQ,CACNO,cAAe,GACf6jD,eAAgB,GAChBC,OAAQ,UACRtlD,OAAQ,CACN7L,MAAO0vD,KAIbpiD,QAAS,CACPC,QAAQ,EACRE,SAAS,EACTL,YAAa,EACbI,aAAc,EACd4jD,aAAc,uBACdjlD,gBAAiBA,EACjBuB,QAAQ,EACRnB,MAAO,CACLjB,MAAOslD,EACPpkD,SAAU,SAGdmB,MAAO,CACLxnD,KAAM,WACNynD,aACAyjD,WAAW,EACXxjD,OAAQ,CACNtB,MAAO,CACLC,SAAU,OACVlB,MAAOslD,GAITU,UAAW,WACT,MAAMC,EAAO9qG,KAAK+qG,KAAKC,MAAMhrG,KAAKirG,KAElC,GAAIH,EAAM,CACR,MAAMpmD,EAAS1kD,KAAKylD,MAAMf,OAAO1kD,KAAKirG,KAEtC,GAAIvmD,GAAQuwB,QAAQ3xE,OAAStD,KAAKirG,IAAK,CACrC,MAAM/1B,EAAQxwB,EAAOuwB,OAAOj1E,KAAKirG,KAGjCH,EAAKnnG,MAAM09B,QAAQ6pE,QAAU,SAASjoE,GAClCriC,WAAW,IAAMqoG,EAAoBkC,KAAKzmD,EAAQ,CAAEwwB,UACxD,CACF,CACF,CAEA,OAAOl1E,KAAK+qG,KAAK5jD,WAAWnnD,KAAKirG,IACnC,GAEF5jD,SAAgC,IAAtBF,EAAW7jD,YAAey/B,EAAY,EAChDukB,cAAe,EAAI1C,OAAO2C,kBAE5BC,MAAO,CACLt2C,MAAO,CACLgI,KAAM,IAERkuC,OAAQ,CACNtB,MAAO,CACLC,SAAU,OACVqlD,WAAY,SACZvmD,MAAOslD,IAGXviD,gBAAiB,EACjBD,UAAW,EAAI/C,OAAO2C,iBACtB0pC,UAAWvrC,EACX2lD,UAvH0B,IAAZpsE,EAAgB,UAAY,UAyH5CylB,OAAQ0kD,wWC/NL,MAAM9sD,KAAOC,MAAa,4BAA8BhuC,KAA8BA,oBAChFiuC,KAAWD,MAAa,iCAAmC3yB,KAAuBA,WAClF8yB,KAAcH,MAAa,oCAAsC/wB,KAAiCA,WAElGyhC,KAAQ1Q,MAAa,oICO3B,IAAMW,EAAO,MAAd,MAAOA,EACTp9C,YACYwrG,EACAnuD,GACAz0C,IAFA1I,KAAAsrG,uBACAtrG,KAAAm9C,YACAn9C,KAAA0I,UAGL1I,KAAAurG,QAAOjiF,MACV,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAkB,EACzBh+B,KAAetf,KAAK0I,OAAOpI,OAAOuK,QAAwC,EAC1E4e,KAAU,EAAEva,GAAQX,MAAoBvO,KAAKsrG,qBAAqBzkF,IAAI3X,GAAOX,gBAAkBA,IAAgB/N,QAC3GkQ,KAAI8a,GAAS8xB,EAA0B9xB,KAAM,EAC7C7B,KAAWC,MAASC,MAAGyzB,EAAuB1zB,QARvD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBALKg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCHb,MAAMwN,cAAUC,GAAsC,CACzDC,SAAU+9C,GAAQA,EAAK/oF,UAGd49B,EAAsBkN,EAAQI,gBAAgB,CACvD7wB,WAAW,EACXlP,UAAU,EACVnB,MAAO,OCbE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAAoB,CAAC9iB,QAAuB,IACxCA,EACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAwB,CAAC9iB,GAAS5Q,YAAK,IACnC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAA2B,CAAC9iB,GAAShP,WAAYk/B,EAAQO,OAAOz/B,EAAO,IACnEgP,EACHP,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAGL,EAAqB9iB,GAASgjB,IAG/B,SAAUI,EAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gFCnBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMzD,eAGnEm0B,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,IACbb,EAAQc,aAAa3N,GAEZ5jB,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAGnD4hF,KAAW1tD,MACpBlW,EACAljB,KACA/C,KAEA,CAAC6J,EAAOkvE,EAAYxnC,IAAsB1nC,EAAM9a,IAAIi4F,KAChD,MAAMnuE,GAAQkgE,EAAWiO,GAAK5oD,UACxB0rD,GAAiBv4C,EAAkBy1C,GAAK7Y,aACxC4b,GAAiBhR,EAAWiO,GAAKgD,0BAEvC,GAAInxE,GACA,MAAO,IACAmuE,GACH3gF,MAAOwS,GAAM8/B,UAAY,KAAOquC,GAAK3gF,MACrC4jF,oBAAqBjD,GAAKkD,WAAcx+E,IAAOs7E,GAAKkD,YAAaxkE,OAAO,yBAA2B,KACnGykE,UAAWtxE,GAAMr4B,KACjB4pG,OAAQ,IAAMvxE,GAAMylB,OACpB+rD,OAAQ,IAAMxxE,GAAM0lB,OACpB+rD,cAAezxE,GAAM2lB,cACrBhxC,WAAYs8F,GAAiB,cAAcA,GAAez6F,YAAY23F,GAAK/oF,UAAY,KACvFssF,eAAgB,IAAMR,IAAgBzrD,OACtCksD,mBAAoBT,IAAgBvpG,SAMvCiqG,EAAiB79F,MAA2BuvC,MACrDs+C,cACArH,yBACA,CAAC76D,EAAUk/D,KACP,IAAIvoF,GAAcqpB,EAAS3rB,IAAiBsC,YAE5C,QAAIuoF,GAAUvpC,KAAK2pC,IAAWA,GAAQ3oF,cAAgBA,GAAW,4ECzDlE,MAAMyrC,KAAOC,MAAa,gBACpBC,KAAWD,MAAa,uBAAqBE,SAC7CC,KAAcH,MAAa,0BAAwBE,yFCMzD,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAijF,GADArsG,KAAAopB,YACAppB,KAAAqsG,eAGLrsG,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOghB,IAAgB,EACvB9gB,KAAUva,GAAUlP,KAAKqsG,aAAazkE,SAASpnC,QAC3CkQ,KAAIyP,IAASoqB,EAAwB,CAAEpqB,aAAQ,EAC/CwJ,KAAWC,OAASC,MAAG0gB,EAAqB,CAAE3gB,gBAPtD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAA0B,CAC7CC,SAAU7qC,GAAQA,EAAK/O,KAGdwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCXL0iF,KAAc5uD,MAChBF,KAEAG,MAAGpT,EAAkB/P,QACdA,EACHP,WAAW,MACb,EAEF0jB,MAAGpT,EAAsB,CAAC/P,GAAS5Q,YAAK,IACjC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGpT,EAAyB,CAAC/P,GAASra,WAAYuqC,EAAQO,OAAO9qC,EAAO,IACjEqa,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOo9F,EAAY9xE,EAAOtrB,EAC9B,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMra,OAOnEuqC,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,oHCbzD,MAAM0yB,KAAOC,MAAa,uCACpBC,KAAWD,MAAa,sCAAwC3yB,KAAuBA,WACvF8yB,KAAcH,MAAa,yCAA2CriB,KAAwCA,SAAUA,qFCM9H,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAmjF,GADAvsG,KAAAopB,YACAppB,KAAAusG,+BAGHvsG,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOijF,IAAgC,EACvC/iF,KAAUva,GAAUlP,KAAKusG,6BAA6B1lF,MAAMrmB,QAC1DkQ,KAAIpD,IAASk/F,EAAwCl/F,MAAM,EAC3Dqc,KAAWC,OAASC,MAAG2iF,EAAqC5iF,SAP9D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMwN,cAAUC,GAA0C,CAC/DC,SAAU6hD,GAAwBA,EAAqBx4F,KAG5CupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OChBHumE,KAAoBzyC,MACxBF,KAGAG,MAAG6uD,EAAmChyE,QACjCA,EACHP,WAAW,MACX,EAEF0jB,MAAG6uD,EAAyC,CAAChyE,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IAChGM,EACHP,WAAW,MACX,EAEF0jB,MAAG6uD,EAAuChyE,QACrCA,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAOihF,EAAkB31D,EAAOtrB,EAClC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM4/D,wBAGrElvC,UAAWtjB,GAGT8iB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YAEpDwxB,EAAgB3N,MAAeD,EAAUrjB,GAASA,EAAMwkB,aAExDhB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,sVCbzD,MAAM0yB,KAAOC,MAAa,yBACpBC,KAAWD,MAAa,6BAA+B3yB,KAAuBA,WAC9E8yB,KAAcH,MAAa,gCAAkCriB,KAA2BA,SAAUA,qFCMxG,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAsjF,IADA1sG,KAAAopB,YACAppB,KAAA0sG,mBAGH1sG,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOojF,IAAmB,EAC1BljF,KAAUva,GAAUlP,KAAK0sG,gBAAgB7lF,MAAMrmB,QAC7CkQ,KAAIpD,GAASq/F,EAA2Br/F,KAAM,EAC9Cqc,KAAWC,MAASC,MAAG8iF,EAAwB/iF,QAPjD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCAb,MAAMwN,cAAUC,GAA6B,CAClDC,SAAUgiD,GAAWA,EAAQ34F,KAGlBupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OChBHijF,KAAkBnvD,MACtBF,KAGAG,MAAGgvD,EAAsBnyE,QACpBA,EACHP,WAAW,MACX,EAEF0jB,MAAGgvD,EAA4B,CAACnyE,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IACnFM,EACHP,WAAW,MACX,EAEF0jB,MAAGgvD,EAA0BnyE,QACxBA,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAO29F,EAAgBryE,EAAOtrB,EAChC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM6/D,WAGrEnvC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WAEpDwxB,KAAgB3N,MAAeD,EAAUrjB,GAASA,EAAMwkB,YAExDhB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDkjF,EAAkBC,MAAsBjvD,MAAe/b,EAAavH,GAASA,EAAMuyE,IAEnFC,EAAmBC,MAAuBnvD,MAAelW,EAAQpN,GAC5EA,EAAM1pB,KAAKknD,GAAKA,EAAEy7B,UAAYwZ,49BCjBzB,MAAMC,KAAiB3wD,MAAa,0BAA4BhuC,KAA8BA,oBACxF4+F,KAAqB5wD,MAAa,+BAAiC3yB,KAAuBA,WAC1FwjF,KAAwB7wD,MAAa,kCAAoC+9C,KAA0BA,gBAEnG+S,KAAmB9wD,MAAa,4BAA6B,CAAChuC,EAAwBmlC,MAAsBnlC,iBAAgBmlC,UAC5H45D,KAAuB/wD,MAAa,iCAAmC3yB,KAAuBA,WAC9F2jF,KAA0BhxD,MAAa,qCAEvCixD,KAAiBjxD,MAAa,0BAA2B,CAAChuC,EAAwBmlC,MAAsBnlC,iBAAgBmlC,UACxH+5D,KAAqBlxD,MAAa,+BAAiC3yB,KAAuBA,WAC1F8jF,KAAwBnxD,MAAa,mCAErCoxD,KAAmBpxD,MAAa,4BAA6B,CAAChuC,EAAwBylC,EAA0B45D,OAAwBr/F,iBAAgBylC,mBAAkB45D,eAC1KC,KAAuBtxD,MAAa,iCAAmC3yB,KAAuBA,WAC9FkkF,KAA0BvxD,MAAa,oCAAsC1I,KAAsBA,YAEnGk6D,KAAuBxxD,MAAa,gCAAiC,CAAChuC,EAAwBy/F,MAA0Cz/F,iBAAgBy/F,oBACxJC,KAA2B1xD,MAAa,qCAAuC3yB,KAAuBA,WACtGskF,KAA8B3xD,MAAa,yCAE3C4xD,KAAuB5xD,MAAa,gCAAiC,CAAChuC,EAAwBslC,EAAgBG,OAAgCzlC,iBAAgBslC,SAAQG,uBACtKo6D,KAA2B7xD,MAAa,qCAAuC3yB,KAAuBA,WACtGykF,KAA8B9xD,MAAa,wCAA0CvI,KAAgCA,4HCb3H,IAAMkJ,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,GACA61C,IADAhzF,KAAAm9C,YACAn9C,KAAAgzF,uBAGLhzF,KAAAsuG,kBAAiBhlF,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA4B,EACnC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBx/C,cAActkC,GAAOX,gBAAgB/N,QAC9EkQ,KAAI6sC,IAAUD,EAAoCC,MAAO,EACzD5zB,KAAWC,OAASC,MAAGyzB,EAAiC1zB,UAK7D5pB,KAAAuuG,qBAAoBjlF,MACzB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA8B,EACrC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBv/C,iBAAiBvkC,GAAOX,eAAgBW,GAAOwkC,MAAMlzC,QAC9F2pB,KAASc,IAAK,CACVqyB,IACAA,EAA6BpuC,GAAOX,gBACpChO,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAASsP,GAAOwkC,KAAKvxC,KAAO,gCAC5B28C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGyzB,EAAmC1zB,UAK7D5pB,KAAAwuG,mBAAkBllF,MACvB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA4B,EACnC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBr/C,eAAezkC,GAAOX,eAAgBW,GAAOwkC,MAAMlzC,QAC5F2pB,KAASc,IAAK,CACVqyB,IACAA,EAA6BpuC,GAAOX,gBACpChO,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAASsP,GAAOwkC,KAAKvxC,KAAO,gCAC5B28C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGyzB,EAAiC1zB,UAK3D5pB,KAAAyuG,qBAAoBnlF,MACzB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA8B,EACrC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBp/C,iBAAiB1kC,GAAOX,eAAgBW,GAAO8kC,kBAAkBxzC,QAC1G2pB,KAASozB,IAAU,CACjBD,EAAsCpuC,GAAO8kC,kBAC7CsJ,EAA6BpuC,GAAOX,gBACpChO,UAAqB,CACnBuK,QAAS,CACLpL,KAAM,UACNE,QAASsP,GAAO0+F,SAAW,kCAC3B9uD,UAAW,UAGlB,EACDn1B,KAAWC,OAASC,MAAGyzB,EAAmC1zB,UAK7D5pB,KAAA0uG,yBAAwBplF,MAC7B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAkC,EACzC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBl/C,qBAAqB5kC,GAAOX,eAAgBW,GAAO8+F,gBAAgBxtG,QAC5G2pB,KAASc,IAAK,CACVqyB,IACAA,EAA6BpuC,GAAOX,gBACpChO,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,iDACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGyzB,EAAuC1zB,UAKjE5pB,KAAA2uG,yBAAwBrlF,MAC7B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAkC,EACzC7zB,KAAUva,IAAUlP,KAAKgzF,oBAAoBj/C,qBAAqB7kC,GAAOX,eAAgBW,GAAO2kC,OAAQ3kC,GAAO8kC,kBAAkBxzC,QAC7H2pB,KAASozB,IAAU,CACfD,EAA0CpuC,GAAO8kC,kBACjDsJ,EAA6BpuC,GAAOX,gBACpChO,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,mDACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,OAASC,MAAGyzB,EAAuC1zB,SA3GpE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,mBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCgBb,MAAMM,EAAuB,CAChC88C,WAAY,GACZvvE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,KAGPglF,sBAAsB,EACtBC,qBAAqB,EAGrBC,oBAAoB,EACpBC,mBAAmB,EAGnBC,sBAAsB,EACtBC,qBAAqB,EAGrBC,0BAA0B,EAC1BC,yBAAyB,EAGzBC,0BAA0B,EAC1BC,yBAAyB,GChDhB5xD,KAAgBC,MACzBF,KAEAG,MAAGL,EAA+B9iB,QAC3BA,EACHq0E,qBAAqB,EACrBI,qBAAqB,EACrBF,mBAAmB,EACnB90E,WAAW,MACb,EAEF0jB,MAAGL,EAAkC,CAAC9iB,GAAS5Q,YAAK,IAC7C4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAqC,CAAC9iB,GAAS8/D,iBAAU,IACrD9/D,EACH8/D,WAAYA,EACZvvE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGL,EAAiC9iB,QAC/BA,EACHo0E,sBAAsB,MACtB,EAEFjxD,MAAGL,EAAoC,CAAC9iB,GAAS5Q,YAAK,IAC/C4Q,EACHo0E,sBAAsB,EACtBC,qBAAqB,EACrBjlF,YACF,EAEF+zB,MAAGL,EAAwC9iB,QACpCA,EACHo0E,sBAAsB,EACtBC,qBAAqB,EACrBjlF,MAAO,SACT,EAEF+zB,MAAGL,EAA+B9iB,QAC7BA,EACHs0E,oBAAoB,MACpB,EAEFnxD,MAAGL,EAAkC,CAAC9iB,GAAS5Q,YAAK,IAC7C4Q,EACHs0E,oBAAoB,EACpBC,mBAAmB,EACnBnlF,YACF,EAEF+zB,MAAGL,EAAsC9iB,QAClCA,EACHs0E,oBAAoB,EACpBC,mBAAmB,EACnBnlF,MAAO,SACT,EAEF+zB,MAAGL,EAAiC9iB,QAC/BA,EACHw0E,sBAAsB,EACtBC,qBAAqB,MACrB,EAEFtxD,MAAGL,EAAoC,CAAC9iB,GAAS5Q,YAAK,IAC/C4Q,EACHw0E,sBAAsB,EACtBC,qBAAqB,EACrBrlF,YACF,EAEF+zB,MAAGL,EAAwC9iB,QACpCA,EACHw0E,sBAAsB,EACtBC,qBAAqB,EACrBrlF,MAAO,SACT,EAEF+zB,MAAGL,EAAqC9iB,QACnCA,EACH00E,0BAA0B,MAC1B,EAEFvxD,MAAGL,EAAwC,CAAC9iB,GAAS5Q,YAAK,IACnD4Q,EACH00E,0BAA0B,EAC1BC,yBAAyB,EACzBvlF,YACF,EAEF+zB,MAAGL,EAA4C9iB,QACxCA,EACH00E,0BAA0B,EAC1BC,yBAAyB,EACzBvlF,MAAO,SACT,EAEF+zB,MAAGL,EAAqC9iB,QACnCA,EACH40E,0BAA0B,EAC1BC,yBAAyB,MACzB,EAEF1xD,MAAGL,EAAwC,CAAC9iB,GAAS5Q,YAAK,IACnD4Q,EACH40E,0BAA0B,EAC1BC,yBAAyB,EACzBzlF,YACF,EAEF+zB,MAAGL,EAA4C9iB,QACxCA,EACH40E,0BAA0B,EAC1BC,yBAAyB,EACzBzlF,MAAO,SAIT,SAAUg0B,GAAQpjB,EAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,EAAOtrB,EAChC,gBCjIO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM8/D,YAE1DrgE,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDlP,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDizB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnD4pB,KAAgBsK,MAAeD,EAAUrjB,GAASA,EAAM8/D,YAGxDsU,KAAuB9wD,MAAeD,EAAUrjB,GAASA,EAAMo0E,sBAC/DC,KAAsB/wD,MAAeD,EAAUrjB,GAASA,EAAMq0E,qBAG9DC,MAAqBhxD,MAAeD,EAAUrjB,GAASA,EAAMs0E,oBAC7DC,MAAoBjxD,MAAeD,EAAUrjB,GAASA,EAAMu0E,mBAG5DC,MAAuBlxD,MAAeD,EAAUrjB,GAASA,EAAMw0E,sBAC/DC,MAAsBnxD,MAAeD,EAAUrjB,GAASA,EAAMy0E,qBAG9DC,KAA2BpxD,MAAeD,EAAUrjB,GAASA,EAAM00E,0BACnEC,KAA0BrxD,MAAeD,EAAUrjB,GAASA,EAAM20E,yBAGlEC,KAA2BtxD,MAAeD,EAAUrjB,GAASA,EAAM40E,0BACnEC,KAA0BvxD,MAAeD,EAAUrjB,GAASA,EAAM60E,4qBCtBxE,MAAMC,KAAkB/yD,MAAa,2BAA6BhuC,MAA8BA,qBAC1FghG,KAAsBhzD,MAAa,gCAAkC3yB,MAAuBA,YAC5F4lF,KAAyBjzD,MAAa,mCAAqCg+C,MAAkCA,kBAE7GkV,KAAwBlzD,MAAa,mCAAoC,CAAChuC,GAAwB4zB,EAAmBC,MAAuB7zB,kBAAgB4zB,YAAUC,aACtKstE,KAA4BnzD,MAAa,wCAA0C3yB,MAAuBA,YAC1G+lF,KAA+BpzD,MAAa,2CAA6CqzD,MAAwCA,kBAEjIC,KAAmBtzD,MAAa,6BAEhCuzD,KAAqBvzD,MAAa,8BAAgC5vB,MAA0CA,cAC5GojF,KAA4BxzD,MAAa,uCACzCyzD,KAAyBzzD,MAAa,mCAAqC3yB,MAAuBA,6HCLxG,IAAMszB,EAAO,MAAd,MAAOA,GACTp9C,YACYq9C,EACA61C,EACAid,GAFAjwG,KAAAm9C,WACAn9C,KAAAgzF,sBACAhzF,KAAAiwG,iBAGLjwG,KAAAi0C,kBAAiB3qB,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAA6B,EACpC7zB,KAAUva,GAAUlP,KAAKgzF,oBAAoB/+C,eAAe/kC,EAAOX,gBAAgB/N,QAC/EkQ,KAAI6sC,GAAUD,EAAqCC,KAAO,EAC1D5zB,KAAWC,MAASC,MAAGyzB,EAAkC1zB,SAK9D5pB,KAAAk0C,wBAAuB5qB,MAC1B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAmC,EAC1C7zB,KAAUva,GAAUlP,KAAKgzF,oBAAoB9+C,qBAAqBhlC,EAAOX,eAAgBW,EAAOizB,UAAWjzB,EAAOkzB,SAAS5hC,QACvHkQ,KAAI6sC,GAAUD,EAA2CC,KAAO,EAChE5zB,KAAWC,MAASC,MAAGyzB,EAAwC1zB,SAKpE5pB,KAAA8vG,sBAAqBxmF,MACxB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO+zB,IAAgC,EACvC7zB,KAAUva,GAAUlP,KAAKiwG,eAAeC,eAAehhG,EAAOyd,SAC7DnsB,QACG2pB,KAASozB,GAAU,CACfD,IACA/8C,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,oCACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,MAASC,MAAGyzB,EAAqC1zB,GAC5DrpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,oCACTk/C,UAAW,YA1C3B,CAAC79C,SAAAjB,KAAA,mBAAAkB,iBALIg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,KAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCDb,MAAMM,EAAuB,CAChC+8C,YAAa,GACbqV,YAAa,GACb7kF,UAAU,EACVkP,WAAW,EACXk2E,gBAAgB,EAChBC,iBAAiB,EACjBxmF,MAAO,MCdE6zB,KAAgBC,MACzBF,KAEAG,MAAGL,EAAgC9iB,SAC5BA,GACHP,WAAW,MACb,EAEF0jB,MAAGL,EAAmC,CAAC9iB,IAAS5Q,YAAK,IAC9C4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAGL,EAAsC,CAAC9iB,IAAS+/D,kBAAW,IACvD//D,GACH+/D,YAAaA,EACbxvE,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGL,EAAsC9iB,SAClCA,GACH41E,iBAAiB,MACnB,EAEFzyD,MAAGL,EAAyC,CAAC9iB,IAAS5Q,YAAK,IACpD4Q,GACH41E,iBAAiB,EACjBD,gBAAgB,EAChBvmF,YACF,EAEF+zB,MAAGL,EAA4C,CAAC9iB,IAASo1E,kBAAW,IAC7Dp1E,GACHo1E,YAAaA,EACbO,gBAAgB,EAChBC,iBAAiB,EACjBxmF,MAAO,SACT,EAEF+zB,MAAGL,EAAiC9iB,SAC7BA,GACHo1E,YAAa,OAIf,SAAUhyD,EAAQpjB,GAA0BtrB,GAC9C,OAAOuuC,EAAcjjB,GAAOtrB,EAChC,qEChDO,MAAM2uC,MAAWC,MAAeC,KAAiBvjB,IAASA,GAAM+/D,aAE1DtgE,KAAY6jB,MAAeD,GAAUrjB,IAASA,GAAMP,WACpDlP,KAAW+yB,MAAeD,GAAUrjB,IAASA,GAAMzP,UAEnDqlF,KAAkBtyD,MAAeD,GAAUrjB,IAASA,GAAM41E,iBAC1DD,KAAiBryD,MAAeD,GAAUrjB,IAASA,GAAM21E,gBAEzDnyD,KAAWF,MAAeD,GAAUrjB,IAASA,GAAM5Q,OAEnDqqB,KAAiB6J,MAAeD,GAAUrjB,IAASA,GAAM+/D,aAEzD8V,KAAiBvyD,MAAeD,GAAUrjB,IAASA,GAAMo1E,aAEzDU,EAA0Bz8D,OAAmBiK,MACtD7J,EACCsmD,GACUA,EAAYzpF,KAAK4iC,GAAQA,EAAKk8D,YAAY9+F,KAAKy/F,GAAWA,EAAQv/F,IAAM6iC,MAG1E28D,GAAsB38D,OAAmBiK,MAClDwyD,EAAuBz8D,IACvBpvB,KACA,CAAC81E,EAAakW,KACV,IAAIb,EAAcrV,GAAaqV,YAAY9+F,KAAKy/F,IAAWA,GAAQv/F,IAAM6iC,IACrE68D,EAA+B,GAEnC,GAAId,EAAa,CACb,IAAIztE,EAAYytE,EAAYztE,UAAY9U,IAAOuiF,EAAYztE,WAAWkF,OAAO,cAAgB,KACzFjF,EAAUwtE,EAAYztE,UAAY9U,IAAOuiF,EAAYxtE,SAASiF,OAAO,cAAgB,KAEzFqpE,EAASjgG,KAAK,CAAEtO,KAAM,YAAakP,MAAO8wB,GAAaC,EAAU,GAAGD,SAAiBC,IAAY,OACjGsuE,EAASjgG,KAAK,CAAEtO,KAAM,gBAAiBkP,MAAOu+F,EAAYppD,WAC1DkqD,EAASjgG,KAAK,CAAEtO,KAAM,4BAA6BkP,MAAOu+F,EAAYe,SAAW,KAAKF,EAAIb,GAAagB,0BAA0B59F,UACjI09F,EAASjgG,KAAK,CAAEtO,KAAM,aAAckP,MAAOu+F,EAAYiB,SAAW,KAAKJ,EAAIb,GAAakB,0BAA0B99F,UAClH09F,EAASjgG,KAAK,CAAEtO,KAAM,SAAUkP,MAAOu+F,EAAYhS,YAAYxsF,aAC/Ds/F,EAASjgG,KAAK,CAAEtO,KAAM,SAAUkP,MAAOu+F,EAAYmB,YAAY3/F,YACnE,CAEA,OAAOs/F,IAGFM,GAAuBn9D,OAAmBiK,MACnDz6B,eACAitF,EAAuBz8D,IACvB,CAACymD,EAAYC,MAELjsF,QAASgsF,GAAYxpF,KAAK4iC,GAAQA,EAAKnlC,gBAAkBgsF,EAAYhsF,iBAAiB2kC,eACtF9Q,QAASm4D,GAAaqV,YAAY9+F,KAAKy/F,GAAWA,EAAQv/F,IAAM6iC,IAAQzR,QACxED,UAAWo4D,GAAaqV,YAAY9+F,KAAKy/F,GAAWA,EAAQv/F,IAAM6iC,IAAQ1R,aAIzE1lB,GAAgBo3B,OAAmBiK,MAC5CkzD,GAAoBn9D,IACpBnyB,cACA,CAACgyB,EAAMxZ,IAGIA,EAASwZ,EAAKplC,UAAUnM,wFC/DhC,MAAMm6C,KAAOC,MAAa,4BAA8BjuC,KAAuBA,aACzEkuC,KAAWD,MAAa,iCAAmC3yB,KAAuBA,WAClF8yB,KAAcH,MAAa,oCAAsCi+C,KAAkCA,gbCOzG,IAAMt9C,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAmjD,EACAxsE,GAFAC,KAAAopB,YACAppB,KAAAusE,sBACAvsE,KAAAD,UAGZC,KAAAgzB,SAAQ1J,MACJ,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOkjD,OAAuB,EAC9BntD,KAAetf,KAAKD,QAAQO,OAAOuK,QAAiC,EACpE4e,KAAU,EAAGva,EAAQZ,MAAatO,KAAKusE,oBAAoBn4B,eAAellC,EAAOZ,SAAWA,IAAS9N,QACjGkQ,KAAIugG,GAAgBxkC,KAA+BwkC,KAAc,EACjEtnF,KAAWC,MAASC,MAAG4iD,KAA4B7iD,QAR3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCHb,MAAMwN,cAAUC,GAAiC,CACpDC,SAAUsmD,GAAeA,EAAYpmE,cAG5B0S,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXk3E,yBAAyB,EACzBvnF,MAAO,OCfLwnF,KAA0B1zD,MAC5BF,KAEAG,MAAG0zD,KAA8B,CAAC72E,QAAgB,IAC3CA,EACHP,WAAW,MACb,EAEF0jB,MAAG0zD,KAAkC,CAAC72E,GAAS5Q,YAAK,IAC7C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG0zD,KAAqC,CAAC72E,GAASggE,iBAC9C9vC,EAAQO,OAAOuvC,EACf,IACGhgE,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOkiG,EAAwB52E,EAAOtrB,EAC1C,gBC3BO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMggE,aAE1DzvE,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,QAG5DshC,UAAWtjB,GACX8iB,EAAQc,aAAa3N,GAGZyzD,KAAsBxzD,MAAelW,EAAQxrB,GAAYA,EAAS9L,OAAO45B,IAAkC,IAAvBA,EAAQqnE,aAE5FJ,KAA0BrzD,MAAeD,EAAUrjB,GAASA,EAAM22E,qJCbxE,MAAM70D,KAAOC,MAAa,0BAEpBC,KAAWD,MAAa,iCAA+BE,SAIvDC,KAAcH,MAAa,oCAAkCE,yFCEnE,IAAMS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAooF,GADAxxG,KAAAopB,YACAppB,KAAAwxG,oBAGLxxG,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOkoF,IAAqB,EAC5BhoF,KAAUva,GAAUlP,KAAKwxG,kBAAkB5pE,SAASpnC,QAChDkQ,KAAIgqF,GAAc+W,EAA6B,CAAE/W,gBAAY,EAC7D/wE,KAAWC,MAASC,MAAG4nF,EAA0B,CAAE7nF,gBAP3D,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oBCNpB,MAAMw0D,KAAoBh0D,MACtBF,OAEAG,MAAGiO,EAAwBpxB,QACpBA,EACHP,WAAW,MACb,EAEF0jB,MAAGiO,EAA4B,CAACpxB,GAAS5Q,YAAK,IACvC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGiO,EAA+B,CAACpxB,GAASkgE,gBAAiBhwC,IAAQO,OAAOyvC,EAAY,IACjFlgE,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOwiG,EAAkBl3E,EAAOtrB,EACpC,+GCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMkgE,aAGnExvC,UAAWtjB,EACXujB,eAAgBppB,GAGhB2oB,IAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YACpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,+DCPzD,MAAM8gC,cAAUC,GAA+B,CAClDC,SAAU+mD,GAAaA,EAAU3gG,GACjC65C,aAAcA,CAACzkB,EAAGC,IAAMA,EAAE8Z,cAAgB/Z,EAAE+Z,gBAGnC3C,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,oHCbJ,MAAM0yB,KAAOC,MAAa,4CACpBC,KAAWD,MAAa,gDAAkD3yB,KAAuBA,WACjG8yB,KAAcH,MAAa,mDAAqDriB,KAA4CA,SAAUA,qFCK5I,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACAwoF,GADA5xG,KAAAopB,YACAppB,KAAA4xG,oCAGH5xG,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAOsoF,IAAqC,EAC5CpoF,KAAUva,GAAUlP,KAAK4xG,kCAAkC/qF,MAAMrmB,QAC/DkQ,KAAIwpB,GAAY23E,EAA6C33E,KAAS,EACtEvQ,KAAWC,MAASC,MAAGgoF,EAA0CjoF,QAPnE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMwN,cAAUC,GAA8C,CACnEC,SAAUrN,GAAUA,EAAOtpC,KAGhBupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCfHkoF,KAAwBp0D,MAC5BF,KAEAG,MAAGuxB,EAA6B10C,QAC3BA,EACHP,WAAW,MACX,EAEF0jB,MAAGuxB,EAAmC,CAAC10C,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IAC1FM,EACHP,WAAW,MACX,EAEF0jB,MAAGuxB,EAAiC10C,QAC/BA,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAO4iG,EAAsBt3E,EAAOtrB,EACtC,gBCxBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAM0gE,4BAGrEhwC,UAAWtjB,GAGT8iB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YAEpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,6HCXzD,MAAM0yB,KAAOC,MAAa,gCACpBC,KAAWD,MAAa,oCAAsC3yB,KAAuBA,WACrF8yB,KAAcH,MAAa,uCAAyCriB,KAAiCA,SAAUA,qFCMrH,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,EACA2oF,GADA/xG,KAAAopB,YACAppB,KAAA+xG,yBAGH/xG,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO2lD,IAA0B,EACjCzlD,KAAUva,GAAUlP,KAAK+xG,uBAAuBlrF,MAAMrmB,QACpDkQ,KAAIwpB,GAAYg1C,EAAkCh1C,KAAS,EAC3DvQ,KAAWC,MAASC,MAAGqlD,EAA+BtlD,QAPxD,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCFb,MAAMwN,cAAUC,GAAmC,CACxDC,SAAUrN,GAAUA,EAAOtpC,KAGhBupC,EAAsBkN,EAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCdHkoF,KAAwBp0D,MAC5BF,KAGAG,MAAGuxB,EAA6B10C,QAC3BA,EACHP,WAAW,MACX,EAEF0jB,MAAGuxB,EAAmC,CAAC10C,EAAOxrB,IAAY07C,EAAQ8K,WAAWxmD,EAAQkrB,SAAU,IAC1FM,EACHP,WAAW,MACX,EAEF0jB,MAAGuxB,EAAiC10C,QAC/BA,EACHP,WAAW,MAKT,SAAU2jB,EAAQpjB,EAA0BtrB,GAChD,OAAO4iG,EAAsBt3E,EAAOtrB,EACtC,gBCzBO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMigE,iBAGrEvvC,UAAWtjB,EACXujB,eAAgBppB,GAEd2oB,EAAQc,aAAa3N,IAEZ9yB,EAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YAEpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,saCXzD,MAAM0yB,KAAOC,MAAa,kCAC7BhP,KACIv+B,QAAS,CAAEu+B,aAENiP,KAAWD,MAAa,0CAAwCE,SAIhEC,KAAcH,MAAa,0CACpCo+C,KACI3rF,QAAS,CAAE2rF,0BAGNqX,KAAmBz1D,MAAa,4BACzC9U,KACIz4B,QAAS,CAAEy4B,mBAENwqE,KAAwB11D,MAAa,+BAC9C21D,KACIljG,QAAS,CAAEkjG,sGCXZ,IAAMh1D,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACA+oF,GADAnyG,KAAAopB,YACAppB,KAAAmyG,6BAGLnyG,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO6oF,IAA8B,EACrC3oF,KAAUva,GAAUlP,KAAKmyG,2BAA2BtrF,IAAI3X,EAAOF,QAAQu+B,QAAQ/sC,QAC3EkQ,KAAIiqF,GAAuByX,EAAuCzX,IAAmB,EACrFhxE,KAAWC,MAASC,MAAGuoF,EAAmC,CAAExoF,gBAPpE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCMb,MAAMwN,cAAUC,GAAwC,CAC3DC,SAAUv5C,GACC,GAAGA,EAAMg5C,gBAAgBh5C,EAAM4/C,mBAAmB5/C,EAAMuO,YAI1D49B,EAAsBkN,EAAQI,gBAAgB,CACvD9L,WAAY,KACZj0B,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACV8L,YAAY,EAGZX,qBAAsB,KACtBioD,mBAAoB,KAEpBzoF,MAAO,OC7BL0oF,KAA4B50D,MAC9BF,KAEAG,MAAG40D,EAAiC/3E,QAC7BA,EACHP,WAAW,MACb,EAEF0jB,MAAG40D,EAAqC,CAAC/3E,GAAS5Q,YAAK,IAChD4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAG40D,EAAwC,CAAC/3E,GAASxrB,aACtC07C,EAAQO,OAAOj8C,EAAQ2rF,oBAAqB,IAC5CngE,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAEd,EAGL+zB,MAAG40D,EAA6C,CAAC/3E,GAASxrB,cAAO,IAC1DwrB,EACH4vB,qBAAsBp7C,EAAQy4B,iBAChC,EAEFkW,MAAG40D,EAAkD,CAAC/3E,GAASxrB,cAAO,IAC/DwrB,EACH63E,mBAAoBrjG,EAAQkjG,oBAK9B,SAAUt0D,EAAQpjB,EAA0BtrB,GAC9C,OAAOojG,EAA0B93E,EAAOtrB,EAC5C,2BCnCO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMmgE,sBAGnEzvC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa3N,GAEZ20D,KAAW10D,MACpBlW,EAAQ9jB,KACR,CAACm0D,EAAMokB,KAEP,IAAI1uE,EAAyC,CACzC8kF,eAAgB,IAGpBx6B,SAAK1qE,QAAQC,IAET,IAAIklG,EAAarW,EAAc7uF,EAAKqS,gBACpC6yF,GAA0C,KAAfA,EAAoB,GAAK,IACpD,IAAI/L,EAAY+L,EAAallG,EAAKgzC,UAE9BmyD,EAAYhlF,EAAO8kF,eAAej2C,UAAUmsC,IAAQA,GAAKiK,QAAUplG,EAAKoS,SACxE+yF,EAAY,IACZhlF,EAAO8kF,eAAehiG,KAAK,CACvBmiG,OAAQplG,EAAKoS,QACbizF,SAAUlM,EACVmM,UAAW,KAEfH,EAAYhlF,EAAO8kF,eAAenvG,OAAS,GAI3BqqB,EAAO8kF,eAAeE,GAAWG,UAAUt2C,UAAUu2C,IAAYA,GAAS1oD,cAAgB78C,EAAK68C,cAAgB0oD,GAAS9hD,iBAAmBzjD,EAAKyjD,iBAChJ,GAChBtjC,EAAO8kF,eAAeE,GAAWG,UAAUriG,KAAK,CAC5C45C,aAAc78C,EAAK68C,aACnB2oD,eAAgBxlG,EAAKwlG,eACrB/hD,gBAAiBzjD,EAAKyjD,gBACtBgiD,kBAAmBzlG,EAAKylG,kBACxBC,iBAAkB1lG,EAAK0lG,iBACvBrzF,eAAgBrS,EAAKqS,gBACxB,GAKF8N,IAIE5C,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDglB,KAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UACnDjB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDupF,MAAkBr1D,MAAeD,EAAUrjB,GAASA,EAAM4vB,sBAC1DgpD,KAAqBt1D,MAAeD,EAAUrjB,GAASA,EAAM63E,qbChEnE,MAAM/1D,KAAOC,MAAa,8CACpBC,KAAWD,MAAa,kDAAoD3yB,KAAuBA,WACnG8yB,KAAcH,MAAa,qDAAuDriB,KAAkDA,SAAUA,KAE9ImyB,KAAS9P,MAAa,+CAAiD82D,KAA6CA,WACpH/mD,KAAa/P,MAAa,oDAAsD3yB,KAAuBA,WACvG2iC,KAAgBhQ,MAAa,uDAAwD,CAACvrC,EAAYqiG,MAA6CriG,KAAIqiG,WAEnJnqD,KAAO3M,MAAa,6CAA+C82D,KAA6CA,WAChHlqD,KAAW5M,MAAa,kDAAoD3yB,KAAuBA,WACnGw/B,KAAc7M,MAAa,qDAAuD82D,KAA6CA,WAE/HhqD,KAAS9M,MAAa,+CAAiDvrC,KAAkBA,QACzFs4C,KAAa/M,MAAa,oDAAsD3yB,KAAuBA,WACvG2/B,KAAgBhN,MAAa,uDAAyDvrC,KAAkBA,wFCN9G,IAAMksC,EAAO,MAAd,MAAOA,EAETp9C,YACYspB,EACAkqF,GADAtzG,KAAAopB,YACAppB,KAAAszG,WAGLtzG,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgqF,IAA0C,EACjD9pF,KAAUva,GAAUlP,KAAKszG,SAASzsF,MAAMrmB,QACpCkQ,KAAI8iG,GAAmBD,EAAkDC,KAAgB,EACzF7pF,KAAWC,MAASC,MAAG0pF,EAA+C3pF,SAK3E5pB,KAAAyzG,WAAUnqF,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgqF,IAA4C,EACnD9pF,KAAUva,GAAUlP,KAAKszG,SAAStoE,OAAO97B,EAAOmkG,OAAO7yG,QACnDkQ,KAAIM,GAAMuiG,EAAoDviG,EAAI9B,EAAOmkG,SAAM,EAC/E1pF,KAAWC,MAASC,MAAG0pF,EAAiD3pF,SAK7E5pB,KAAA6pD,SAAQvgC,MACX,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgqF,IAA0C,EACjD9pF,KAAUva,GAAUlP,KAAKszG,SAAS/rE,KAAKr4B,EAAOmkG,OAAO7yG,QACjDkQ,KAAIM,GAAMuiG,EAAkDrkG,EAAOmkG,SAAM,EACzE1pF,KAAWC,MAASC,MAAG0pF,EAA+C3pF,SAK3E5pB,KAAAuqD,WAAUjhC,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOgqF,IAA4C,EACnD9pF,KAAUva,GAAUlP,KAAKszG,SAASprF,OAAOhZ,EAAO8B,IAAIxQ,QAChDkQ,KAAIua,GAAKsoF,EAAoDrkG,EAAO8B,MAAG,EACvE2Y,KAAWC,MAASC,MAAG0pF,EAAiD3pF,QArChF,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCGb,MAAMwN,cAAUC,GAAoD,CACzEC,SAAUgwC,GAAkCA,EAA+B5pF,KAGhEwsC,EAAqBkN,EAAQI,gBAAgB,CACxD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEXglB,UAAU,EAEVr1B,MAAO,OCrBH8pF,KAAwCh2D,MAC1CF,KAGAG,MAAG41D,EAA6C/4E,QACzCA,EACHP,WAAW,EACXoxC,SAAS,MACX,EAEF1tB,MAAG41D,EAAmD,CAAC/4E,EAAOxrB,IAAY07C,EAAQO,OAAOj8C,EAAQkrB,SAAU,IACpGM,EACHP,WAAW,MACb,EAEF0jB,MAAG41D,EAAgD,CAAC/4E,EAAOxrB,SACpDwrB,EACHP,WAAW,MACb,EAEF0jB,MAAG41D,EAA8C,CAAC/4E,QAAc,IACzDA,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAAkD,CAAC/4E,QAAc,IAC7DA,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAAqD,CAAC/4E,GAASxpB,KAAIqiG,WAAY3oD,EAAQkrC,OAAO,IAAKyd,EAAOriG,MAAM,IAC5GwpB,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAA4C,CAAC/4E,QAAc,IACvDA,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAAgD,CAAC/4E,QAAc,IAC3DA,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAAmD,CAAC/4E,GAAS64E,WAAY3oD,EAAQ2nB,UAAU,CAAErhE,GAAIqiG,EAAMriG,GAAItC,QAAS2kG,GAAS,IACzH74E,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAA8C,CAAC/4E,QAAW,IACtDA,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAAkD,CAAC/4E,QAAc,IAC7DA,EACHykB,UAAU,MACZ,EAEFtB,MAAG41D,EAAqD,CAAC/4E,GAASxpB,QAAS05C,EAAQ1S,UAAUhnC,EAAI,IAC1FwpB,EACHykB,UAAU,MAIZ,SAAUrB,EAAQpjB,EAA0BtrB,GAC9C,OAAOwkG,EAAsCl5E,EAAOtrB,EACxD,gBCtEO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMogE,iCAGrE1vC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,GACTX,EAAQc,aAAa3N,GAEZ9yB,MAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpD+jB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,wnBCXpD+pF,EAAZ,SAAYA,IACVA,UAAAr3D,KAAA,0BACAq3D,GAAAn3D,SAAA,+BACAm3D,GAAAj3D,YAAA,kCACAi3D,GAAAC,OAAA,4BACAD,GAAAE,cAAA,oCACAF,GAAAG,WAAA,gCACAH,GAAAnnD,OAAA,4BACAmnD,GAAAjnD,cAAA,oCACAinD,GAAAlnD,WAAA,iCACAknD,GAAAtqD,OAAA,4BACAsqD,GAAApqD,cAAA,oCACAoqD,GAAArqD,WAAA,iCACAqqD,GAAAnqD,OAAA,4BACAmqD,GAAAI,WAAA,iCACAJ,GAAAK,WAAA,qCAfUL,EAgBZ,CAhBA,CAAYA,GAAqB,IAoC1B,MAAMr3D,KAAOC,MAAa,2BACpBC,KAAWD,MAAa,+BAAiC3yB,MAAuBA,YAChF8yB,KAAcH,MAAa,kCAAoCriB,MAA6BA,SAAUA,MAGtG05E,KAASr3D,MAAa,4BAA8BgB,MAAyBA,aAC7Es2D,KAAgBt3D,MAAa,oCAAsCgB,MAAyBA,aAC5Fu2D,KAAav3D,MAAa,gCAAkC3yB,MAAuBA,YAGnF4iC,KAASjQ,MAAa,4BAA8BriB,MAA6BA,eACjFwyB,KAAgBnQ,MAAa,qCAC7BkQ,KAAalQ,MAAa,iCAAmC3yB,MAAuBA,YAGpFy/B,KAAS9M,MAAa,4BAA8B5G,MAA2BA,kBAC/E4T,KAAgBhN,MAAa,oCAAsC5G,MAA2BA,kBAC9F2T,KAAa/M,MAAa,iCAAmC3yB,MAAuBA,YAGpF4/B,KAASjN,MAAa,4BAA8B5G,MAA2BA,kBAC/Eo+D,KAAax3D,MAAa,kCAC1By3D,KAAaz3D,MAAa,4IC3D3B03D,EAAZ,SAAYA,IACVA,UAAAnR,KAAA,OACAmR,GAAAC,QAAA,UACAD,GAAAE,MAAA,QAHUF,EAIZ,CAJA,CAAYA,GAAsB,ICMtBG,EAAZ,SAAYA,IACVA,UAAA7nD,cAAA,iBACA6nD,GAAA1nD,cAAA,iBACA0nD,GAAA7qD,cAAA,iBACA6qD,GAAA9nD,WAAA,cACA8nD,GAAA3nD,WAAA,cACA2nD,GAAA9qD,WAAA,cANU8qD,EAOZ,CAPA,CAAYA,GAAkB,eCQvB,IAAMl3D,EAAO,MAAd,MAAOA,GAEXp9C,YACUspB,GACAirF,IADAr0G,KAAAopB,aACAppB,KAAAq0G,qBAGHr0G,KAAAgzB,SAAQ1J,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+qF,IAAqB,EAC5B7qF,KAAUva,IAAUlP,KAAKq0G,kBAAkBxtF,MAAMrmB,QAC/CkQ,KAAIglC,IAAc4+D,EAA6B5+D,MAAW,EAC1D/rB,KAAWC,OAASC,MAAGyqF,EAA0B1qF,UAKhD5pB,KAAAu0G,kBAAiBjrF,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+qF,IAA8B,EACrC5jG,KAAIxB,IAAUkiD,sBAIXpxD,KAAAw0G,WAAUlrF,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+qF,IAAuB,EAC9B7qF,KAAUva,IAAUlP,KAAKq0G,kBAAkB7+D,OAAOtmC,GAAOquC,QAAQ/8C,QAC/D2pB,KAASsrB,IAAa,CACpB6+D,EAA+B7+D,IAC/B6+D,OACD,EACD3qF,KAAWC,OAASC,MAAGyqF,EAA4B1qF,UAKlD5pB,KAAAqqE,WAAU/gD,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+qF,IAAuB,EAC9B7qF,KAAUva,IAAUlP,KAAKq0G,kBAAkB5qE,OAAOv6B,GAAOgrB,UAAU15B,QACjEipB,KAAWwB,IACT,CAACqpF,IACDA,OAAwB,EAE1B3qF,KAAWC,OAASC,MAAGyqF,EAA4B1qF,UAKlD5pB,KAAAuqD,WAAUjhC,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MAAO+qF,IAAuB,EAC9B7qF,KAAUiB,IAAW1qB,KAAKq0G,kBAAkBnsF,OAAOwC,GAAQirB,aAAan1C,QACtEkQ,KAAIilC,IAAe2+D,EAA+B3+D,MAAY,EAC9DhsB,KAAWC,OAASC,MAAGyqF,EAA4B1qF,UAKlD5pB,KAAAy0G,wCAAuCnrF,MAC5C,IAAMtpB,KAAKopB,UAAU5oB,QACnB+oB,MACE+qF,EACAA,EACAA,EACAA,EACAA,EACAA,IAA2B,EAE7B7qF,KAAUva,IAAUlP,KAAK00G,WAAWxlG,GAAOxP,QAjE3C,CAqEIg1G,WAAWC,IACjB,IAAIC,GAAiCC,GAErC,OAAQF,IACN,KAAKL,EAAuCT,cAC1Ce,GAAcX,EAAuBC,QACrCW,GAAcT,EAAmB7nD,cACjC,MAEF,KAAK+nD,EAAuC5nD,cAC1CkoD,GAAcX,EAAuBC,QACrCW,GAAcT,EAAmB1nD,cACjC,MAEF,KAAK4nD,EAAuC/qD,cAC1CqrD,GAAcX,EAAuBC,QACrCW,GAAcT,EAAmB7qD,cACjC,MAEF,KAAK+qD,EAAuCR,WAC1Cc,GAAcX,EAAuBE,MACrCU,GAAcT,EAAmB9nD,WACjC,MAEF,KAAKgoD,EAAuC7nD,WAC1CmoD,GAAcX,EAAuBE,MACrCU,GAAcT,EAAmB3nD,WACjC,MAEF,KAAK6nD,EAAuChrD,WAC1CsrD,GAAcX,EAAuBE,MACrCU,GAAcT,EAAmB9qD,WAKrC,MAAO,CACL/oD,UAAqB,CACnBuK,QAAS,CACPpL,KAAMk1G,GACNh1G,QAASi1G,GACT/1D,UAAW,OAInB,CAAC79C,SAAAjB,KAAA,mBAAAkB,mBAvHUg8C,IAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,GAAOn0B,QAAPm0B,GAAOl0B,mBAAPk0B,EAAO,KCAb,MAAMwN,eAAUC,GAA+B,CACpDC,SAAUnV,IAAaA,GAAUxhC,KAGtBupC,EAAsBkN,GAAQI,gBAAgB,CACzD9L,WAAY,KAEZj0B,UAAU,EACVkP,WAAW,EAEX66E,aAAa,EACb3/C,YAAY,EACZpK,YAAY,EAEZnhC,MAAO,sBCvBT,MAAMmrF,KAAoBr3D,MACxBF,KAEAG,MAAG6L,KAAQ,IAAMhM,IAAY,EAG7BG,MAAG22D,EAAwB95E,SACtBA,GACHP,WAAW,EACXoxC,SAAS,MACT,EAEF1tB,MAAG22D,EAA8B,CAAC95E,GAAOxrB,KAAY07C,GAAQO,OAAOj8C,GAAQkrB,SAAU,IACjFM,GACHP,WAAW,MACX,EAEF0jB,MAAG22D,EAA2B,CAAC95E,GAAOxrB,UACjCwrB,GACHP,WAAW,MACX,EAGF0jB,MAAG22D,EAAyB,CAAC95E,GAAOxrB,UAC/BwrB,GACHs6E,aAAa,MACb,EAEFn3D,MAAG22D,EAAgC,CAAC95E,GAAOxrB,KAAY07C,GAAQsqD,UAAUhmG,GAAQuuC,OAAQ,IACpF/iB,GACHs6E,aAAa,MACb,EAEFn3D,MAAG22D,EAA6B,CAAC95E,GAAOxrB,UACnCwrB,GACHs6E,aAAa,MACb,EAGFn3D,MAAG22D,EAAyB,CAAC95E,GAAOxrB,UAC/BwrB,GACF26B,YAAY,MACb,EAEFxX,MAAG22D,EAAgC,CAAC95E,GAAOxrB,UACtCwrB,GACH26B,YAAY,MACZ,EAEFxX,MAAG22D,EAA6B,CAAC95E,GAAOxrB,UACnCwrB,GACH26B,YAAY,MACZ,EAGFxX,MAAG22D,EAAyB,CAAC95E,GAAOxrB,UAC/BwrB,GACHuwB,YAAY,MACZ,EAEFpN,MAAG22D,EAAgC,CAAC95E,GAAOxrB,KAAY07C,GAAQ1S,UAAUhpC,GAAQ2mC,YAAa,IACzFnb,GACHuwB,YAAY,MACZ,EAEFpN,MAAG22D,EAA6B,CAAC95E,GAAOxrB,UACnCwrB,GACHuwB,YAAY,MACZ,EAGFpN,MAAG22D,EAAyB,CAAC95E,GAAOxrB,UAC/BwrB,GACHwkB,WAAYhwC,GAAQ2mC,gBACpB,EAEFgI,MAAG22D,EAA6B,CAAC95E,GAAOxrB,MACtC,IAAIimG,GAAqBz6E,GAAMk4B,IAAKtjD,QAAQorB,GAAMwkB,YAAc,EAChE,MAAO,IACFxkB,GACHwkB,WAAYi2D,IAAWz6E,GAAMk4B,IAAIpvD,OAAiBk3B,GAAMk4B,IAAI,GAAal4B,GAAMk4B,IAAIuiD,QAEtF,EAEDt3D,MAAG22D,EAA6B,CAAC95E,GAAOxrB,MACtC,IAAIkmG,GAAqB16E,GAAMk4B,IAAKtjD,QAAQorB,GAAMwkB,YAAc,EAChE,MAAO,IACFxkB,GACHwkB,WAAYk2D,GAAU,EAAY16E,GAAMk4B,IAAIl4B,GAAMk4B,IAAIpvD,OAAO,GAAak3B,GAAMk4B,IAAIwiD,QAMpF,SAAUt3D,EAAQpjB,GAA0BtrB,IAChD,OAAO6lG,EAAkBv6E,GAAOtrB,GAClC,gBCnGO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,IAASA,GAAMkb,aAGrEwV,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,IACTX,GAAQc,aAAa3N,GAEZ9yB,MAAW+yB,MAAeD,EAAUrjB,IAASA,GAAMzP,UACnDkP,MAAY6jB,MAAeD,EAAUrjB,IAASA,GAAMP,WACpD66E,MAAch3D,MAAeD,EAAUrjB,IAASA,GAAMs6E,aACtD3/C,KAAarX,MAAeD,EAAUrjB,IAASA,GAAM26B,YACrDpK,KAAajN,MAAeD,EAAUrjB,IAASA,GAAMuwB,YAErDU,KAAgB3N,MAAeD,EAAUrjB,IAASA,GAAMwkB,YACxDm2D,KAAuBr3D,MAClC2N,EACA1pB,EACA,CAAC4T,GAAazb,KAAaA,IAAYA,GAASyb,KAGrCqI,KAAWF,MAAeD,EAAUrjB,IAASA,GAAM5Q,OACnD4hD,KAAoB1tB,MAAelW,EAAQ8N,IAAcA,GAAWvP,KAAK,CAACC,GAAEC,KAAMD,GAAEpzB,KAAK+uC,cAAc1b,GAAErzB,mGCxB/G,MAAM0pC,KAAcH,MAAa,sCAAwCriB,KAAgDA,SAAUA,gECUnI,IAAMgjB,EAAO,MAAd,MAAOA,EAEXp9C,YACUspB,GAAAppB,KAAAopB,YAGHppB,KAAAo1G,gBAAe9rF,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOopD,OAA6B,EACpCjiE,KAAIxB,IACF,IAAImmG,EAAgC,GACpCnmG,EAAOsQ,WAAWjS,QAAQwD,IACxBA,EAAUoP,MAAM5S,QAAQwS,IACtBs1F,EAAc,IAAIA,KAAgBt1F,EAAKs1F,YAAW,EACnD,GAGH,MAAMC,KAAiDC,cAAQ1V,UAAOwV,EAAa,MAAO,OACpFG,EAAqBljF,OAAOC,KAAK+iF,GAAkB5kG,IAAI8qB,KAAUA,MAAKk3B,IAAK4iD,EAAiB95E,GAAK9qB,IAAI+kG,GAAKA,EAAExhG,OAElH,OAAOyhG,EAAkCF,EAAkB,IAhB/D,CAACv0G,SAAAjB,KAAA,mBAAAkB,iBAJMg8C,GAAOj+C,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCDb,MAAMwN,cAAUC,GAAkD,CACvEC,SAAU+qD,GAAkBA,EAAen6E,MAGhCgiB,EAAsBkN,EAAQI,gBAAgB,CAEzD//B,UAAU,EACVkP,WAAW,EAEXrQ,MAAO,OCdHgsF,KAAyBl4D,MAC7BF,KAEAG,MAAG+3D,EAAmC,CAACl7E,EAAOxrB,IAAY07C,EAAQO,OAAOj8C,EAAQkrB,SAAU,IACtFM,EACHP,WAAW,EACXlP,UAAU,MAIR,SAAU6yB,EAAQpjB,EAA0BtrB,GAChD,OAAO0mG,EAAuBp7E,EAAOtrB,EACvC,gBCdO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMsgE,iBAIrE3vC,eAAgBppB,GAEd2oB,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,WACnDkP,EAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,YAEpD+jB,EAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,0KCXzD,MAAM0yB,KAAOC,MAAa,4BACpBC,KAAWD,MAAa,gCAAkC3yB,KAAuBA,WACjF8yB,KAAcH,MAAa,mCAAqCytB,KAAqBA,aAErF9gB,KAAO3M,MAAa,2BAA4B,CAAChP,EAAgBgQ,MAAoBhQ,SAAQgQ,YAC7F4L,KAAW5M,MAAa,gCAAkC3yB,KAAuBA,WACjFw/B,KAAc7M,MAAa,mCAAqCytB,KAAqBA,aAErF6rC,KAAkBt5D,MAAa,+BAAgC,CAAChP,EAAgBgQ,MAAoBhQ,SAAQgQ,YAC5Gu4D,KAAsBv5D,MAAa,oCAAsC3yB,KAAuBA,WAChGmsF,KAAyBx5D,MAAa,uCAAyCytB,KAAqBA,aAEpGgsC,KAAWz5D,MAAa,wBAA0Btd,KAAsBA,aACxEg3E,KAAkB15D,MAAa,gCAAkCtd,KAAuBA,aAMxFi3E,KAAuB35D,MAAa,gCAAkCuhD,KAA4BA,qyBCNxG,IAAM5gD,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAxV,EACAuiG,GAFAn2G,KAAAopB,YACAppB,KAAA4T,sBACA5T,KAAAm2G,eAGZn2G,KAAAo2G,WAAU9sF,MACN,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAAuB,EAC9B5nD,KAAUva,GAAUlP,KAAKm2G,aAAa5/D,iBAAiB/1C,QACnDkQ,KAAIs5D,GAAWqH,KAA+BrH,KAAQ,EACtDrgD,KAAWC,MAASC,MAAGwnD,KAA4BznD,SAK/D5pB,KAAAq2G,eAAc/sF,MACV,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAA2B,EAClC3gE,KAAIxB,GAAUg5D,KAAuB,SAI7CloE,KAAAs2G,kBAAiBhtF,MACb,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAA8B,EACrClnD,KAASjb,GAAW,CAChBmiE,KAAmCniE,EAAO86D,QAAQusC,aAK9Dv2G,KAAAw2G,sBAAqBltF,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAAkC,EACzC5nD,KAAUva,GAAUlP,KAAKm2G,aAAa1/D,kBAAkBvnC,EAAOquC,QAAQ/8C,QACnEkQ,KAAIs5D,GAAWqH,KAA0CrH,KAAQ,EACjErgD,KAAWC,MAASC,MAAGwnD,KAAuCznD,SAK1E5pB,KAAAy2G,2BAA0BntF,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAAuC,EAC9C3gE,KAAIxB,GAAUA,EAAO4uF,KAAK4Y,eAIlC12G,KAAA22G,6BAA4BrtF,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAAyC,EAChD5nD,KAAUva,GAAU,CAChBmiE,KAAmCniE,EAAO86D,QAAQusC,SAClD9rG,eACAlK,UAAqB,CAAEuK,WAAS8rG,MAAuC,uBAKnF52G,KAAA62G,sBAAqBvtF,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAAkC,EACzC3gE,KAAIxB,GACA3O,wBAAoC,UAAW,GAAK2O,EAAO+vB,YAKvEj/B,KAAA82G,eAAcxtF,MACV,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8nD,OAA2B,EAClCx1D,KAAI3M,GAAUlP,KAAK4T,oBAAoBorB,iBAAiB9vB,EAAO+vB,WAChE,CAAEj+B,UAAU,GArEf,CAACC,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,oBCPb,MAAMM,EAAsB,CAC/BwsB,QAAS,KACT/vC,WAAW,EACXlP,UAAU,EACVk0B,UAAU,EACVr1B,MAAO,MCTLmtF,KAAsBr5D,MACxBF,KAEAG,MAAG0zB,KAAyB72C,QACrBA,EACHP,WAAW,MACb,EAEF0jB,MAAG0zB,KAA6B,CAAC72C,GAAS5Q,YAAK,IACxC4Q,EACHP,WAAW,EACXlP,UAAU,EACVnB,YACF,EAEF+zB,MAAG0zB,KAAgC,CAAC72C,GAASwvC,cAAO,IAC7CxvC,EACHwvC,UACA/vC,WAAW,EACXlP,UAAU,EACVnB,MAAO,SACT,EAEF+zB,MAAG0zB,KAAoC72C,QAChCA,EACHykB,UAAU,MACZ,EAEFtB,MAAG0zB,KAAwC,CAAC72C,GAAS5Q,YAAK,IACnD4Q,EACHykB,UAAU,EACVr1B,YACF,EAEF+zB,MAAG0zB,KAA2C,CAAC72C,GAASwvC,cAAO,IACxDxvC,EACHwvC,UACA/qB,UAAU,EACVr1B,MAAO,SACT,EAEF+zB,MAAG0zB,KAA6B,CAAC72C,GAASyE,cAAO,IAC1CzE,EACHwvC,QAAS,IAAKxvC,EAAMwvC,QAASusC,QAASt3E,OAIxC,SAAU2e,EAAQpjB,EAA0BtrB,GAC9C,OAAO6nG,EAAoBv8E,EAAOtrB,EACtC,+NC/CO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMwgE,aAE1DjxB,KAAajsB,MAAeD,EAAUrjB,GAASA,EAAMwvC,SACrDgtC,KAAmBl5D,MAAeisB,EAAYvvC,GAASA,GAASA,EAAM1c,QACtEm5F,KAAyBn5D,MAAeisB,EAAYvvC,GAASA,GAAO1f,UAAY,IAAM0f,GAAOzf,UAE7FgQ,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDglB,KAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UACnDjB,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,OAEnDstF,KAAmBp5D,MAAeD,EAAUrjB,GAASA,EAAMwvC,QAAQtvB,aAEnEy8D,KAAoBr5D,MAC7Bv9C,+BAA2C,WAC3CwpE,EACA,CAACqtC,EAAqBptC,IAAYA,GAASusC,SAAWa,GAAuB,GAGpEC,KAAav5D,MAAeq5D,EAAmBl4E,IACxD,OAAQA,GACJ,QACA,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO,EACnB,GAKSq4E,KAA8Bx5D,MACvC37B,cACAk1F,EACA,CAACtjG,EAAUsjG,KACP,MAAME,EAAexjG,EAAWA,EAASyjG,KAAO,eAE1CC,EAAQJ,EAAa,OAAS,QAEpC,OAAIrqF,IAAYC,WACL,SAASwqF,KAASF,IAElB,gBAAgBE,KAASF,GAAY,sbC5CjD,MAAMj7D,KAAOC,MAAa,mBAEpBC,KAAWD,MAAa,0BAAwBE,SAIhDC,KAAcH,MAAa,6BAA2BE,SAItD4M,KAAS9M,MAAa,uBAAqBE,SAK3C6M,KAAa/M,MAAa,4BAA0BE,SAIpD8M,KAAgBhN,MAAa,+BAA6BE,SAI1Di7D,KAAcn7D,MAAa,yBACtC,CAAChF,EAAcogE,MAAoBpgE,OAAMogE,UAE9BC,KAAkBr7D,MAAa,8BACzC3yB,KAAuBA,WAEbiuF,KAAqBt7D,MAAa,iCAC5Cw6B,KAAmCA,oICxB/B,IAAM75B,EAAO,MAAd,MAAOA,EAEXp9C,YACYq9C,EACA26D,IADA93G,KAAAm9C,WACAn9C,KAAA83G,eAGL93G,KAAAgzB,SAAQ1J,MACX,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOutD,IAAe,EACtBrtD,KAAUva,IAAUlP,KAAK83G,YAAYjxF,MAAMrmB,QACvCkQ,KAAIqmE,IAAiBD,EAAuB,CAAEC,qBAAgB,EAC9DptD,KAAWC,OAASC,MAAGitD,EAAoB,CAAEltD,iBAKlD5pB,KAAAuqD,WAAUjhC,MACf,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOutD,IAAiB,EACxBrtD,KAAUva,IAAUlP,KAAK83G,YAAY5vF,OAAOhZ,GAAOqoC,MAAM/2C,QACvDkQ,KAAIqc,IAAY+pD,EAAyB,CAAC9lE,GAAI9B,GAAO8B,OAAI,EACzD2Y,KAAWC,OAASC,MAAGitD,EAAsB,CAACltD,MAAOA,WAKpD5pB,KAAAsqD,kBAAiBhhC,MACtB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOutD,IAAwB,EAC/B3sD,KAASc,IAAK,CACZ1qB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,UACNE,QAAS,4BACTk/C,UAAW,WAOd9+C,KAAAgqD,eAAc1gC,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOutD,IAAqB,EAC5B3sD,KAASc,IAAK,CACZ1qB,UAAqB,CACnBuK,QAAS,CACPpL,KAAM,QACNE,QAAS,wBACTk/C,UAAW,WAOd9+C,KAAA+3G,eAAczuF,MACnB,IAAMtpB,KAAKm9C,SAAS38C,QAClB+oB,MAAOutD,IAAsB,EAC7BrtD,KAAUva,IAAUlP,KAAK83G,YAAY17D,YAAYltC,GAAOqoC,KAAMroC,GAAOyoG,MAAMn3G,QACzE2pB,KAASsqC,IAAW,CAClBqiB,EAA8BriB,IAC9Bl0D,UAAoB,CAChBuK,QAAS,CACPk7F,YAAa,0BACb5N,UAAW73F,eAAyB83F,GACpCC,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,eACP6V,KAAM,sCACNyxE,YAAa,KACbyN,cAAe,KACfC,cAAe,KACfC,gBAAiB,WAGxB,EACDx8E,KAAWC,OAASgB,KAAK,CACvBksD,EAA2BltD,IAC3BrpB,UAAoB,CAClBuK,QAAS,CACPk7F,YAAa,0BACb5N,UAAW73F,eAAyB83F,GACpCC,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,eACP6V,KAAM,sCACNyxE,YAAa,KACbyN,cAAe,KACfC,cAAe,KACfC,gBAAiB,cApFzB,CAACllG,SAAAjB,KAAA,mBAAAkB,mBALMg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCMb,MAAMwN,cAAUC,GAAkC,CACrDC,SAAU0sB,GAAgBA,EAAarjE,GACvC42C,cAAc,IAGLrN,EAAsBkN,EAAQI,gBAAgB,CAEvD//B,UAAU,EACVkP,WAAW,EAEXglB,UAAU,EACVsrB,SAAS,EAETxf,YAAY,EAEZnhC,MAAO,OCzBL2tD,KAAa75B,MACfF,KAEAG,MAAGm5B,EAAiBt8C,QACbA,EACHP,WAAW,EACXlP,UAAU,MACZ,EAEF4yB,MAAGm5B,EAAqB,CAACt8C,GAAS5Q,YAAK,IAChC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGm5B,EAAwB,CAACt8C,GAASu8C,mBAAoBrsB,EAAQO,OAAO8rB,EAAe,IAChFv8C,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAGm5B,EAAmB,CAACt8C,QAAgB,IAClCA,EACHuwB,YAAY,MACZ,EAEFpN,MAAGm5B,EAA0B,CAACt8C,GAAQxpB,QAAQ05C,EAAQ1S,UAAUhnC,EAAI,IAC/DwpB,EACHuwB,YAAY,EACZnhC,MAAO,SACP,EAEF+zB,MAAGm5B,EAAuB,CAACt8C,GAAQ5Q,YAAK,IACnC4Q,EACHuwB,YAAY,EACZnhC,MAAOA,MACP,EAEF+zB,MAAGm5B,EAAwB,CAACt8C,QAAmB,IAC1CA,EACHzP,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACVr1B,MAAO,SACP,EAEF+zB,MAAGm5B,EAA+B,CAACt8C,GAASu8C,mBAAoBrsB,EAAQkrC,OAAO7e,EAAe,IACzFv8C,EACHzP,UAAU,EACVkP,WAAW,EACXglB,UAAU,EACVr1B,MAAO,SAOP,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOqoE,EAAW/8C,EAAOtrB,EAC7B,gBC9DO,MAAM2uC,KAAWC,MAAeC,KAAiBvjB,GAASA,EAAMygE,MAGnE/vC,UAAWtjB,EACXujB,eAAgBppB,EAChBqpB,UAAWC,EACXC,YAAaC,IACbb,EAAQc,aAAa3N,GAEZ9yB,KAAW+yB,MAAeD,EAAUrjB,GAASA,EAAMzP,UACnDkP,KAAY6jB,MAAeD,EAAUrjB,GAASA,EAAMP,WACpDglB,KAAWnB,MAAeD,EAAUrjB,GAASA,EAAMykB,UACnD8L,KAAajN,MAAeD,EAAUrjB,GAASA,EAAMuwB,YACrD/M,KAAWF,MAAeD,EAAUrjB,GAASA,EAAM5Q,uDCnBzD,MAAM7a,EAAc,CACzB,EAAG,wBACH,GAAI,wBACJ,GAAI,4BACJ,GAAI,uCACJ,GAAI,mDACJ,GAAI,gCACJ,GAAI,6BACJ,GAAI,4CACJ,GAAI,sCACJ,GAAI,4BACJ,GAAI,iCACJ,GAAI,kCACJ,GAAI,oCACJ,GAAI,kCACJ,IAAK,2CACL,IAAK,yCACL,IAAK,2CACL,IAAK,gCACL,IAAK,2BACL,IAAK,+BACL,IAAK,2BACL,IAAK,uCACL,IAAK,yCACL,IAAK,0CACL,IAAK,iDACL,IAAK,kCACL,IAAK,yCACL,IAAK,+BACL,IAAK,4CACL,IAAK,4BACL,IAAK,iDACL,IAAK,uDACL,IAAK,0DACL,IAAK,+CACL,IAAK,uCACL,IAAK,yCACL,IAAK,iCACL,IAAK,0DACL,IAAK,kDACL,IAAK,wCACL,IAAK,2CACL,IAAK,+BACL,IAAK,4BACL,IAAK,wBACL,IAAK,iDACL,IAAK,4BACL,IAAK,4BACL,IAAK,mCACL,IAAK,yRCTA,IAAMipG,EAAiB,MAAxB,MAAOA,EAAiB/2G,SAAAjB,KAAA,mBAAAkB,iBAAjB82G,EAAiB,EAAA/2G,SAAAjB,KAAA,UAAAi4G,EAAAzyF,IAAA,MAAjBwyF,IAAiB/2G,SAAAjB,KAAA,UAAAi4G,EAAAxyF,IAAA,WAPf,CACPyyF,KACH9kF,QAAA,CAjBGnH,KACAksF,IACA/rF,KACAD,KACAgH,IACAjH,IACAvL,KAAYC,WAAW,eAAgBg9B,KACvC98B,KAAcF,WAAW,CACrBs8B,gBAcC86D,CAAiB,0YCxBN/4G,MAAA,GACIA,MAAA,WAAAA,CAA2E,yBACrDA,MAAA,0BAAAm5G,EAAAn5G,MAAAo5G,GAAA/1G,UAAAyS,GAAA9V,QAAA,OAAUA,MAAA8V,GAAAujG,iBAAAF,GAA4B,GACxDn5G,QACAA,MAAA,GACJA,QACJA,sDALSA,cAAA,kBAAsCA,MAAA,oBAAAs5G,GACmBt5G,cAAA,UAAAK,EAAAk5G,oBAAAJ,IAE1Dn5G,cAAA,IAAAm5G,EAAAplG,KAAA,8CAiBR/T,MAAA,GACIA,MAAA,WAAAA,CAA2E,YAC7CA,MAAA,yBAAAw5G,EAAAx5G,MAAAy5G,GAAAp2G,UAAAe,GAAApE,QAAA,OAASA,MAAAoE,GAAAs1G,oBAAAF,GAAkC,GACjEx5G,MAAA,cAEAA,MAAA,aAAAA,CAAmC,UAE3BA,MAAA,GACJA,cAIhBA,sDAXSA,cAAA,kBAAsCA,MAAA,oBAAA25G,GAEa35G,MAAA,GAAAA,MAAA,UAAAE,EAAAg+F,wBAAAsb,GAGtCx5G,MAAA,GAAAA,MAAA,wBACFA,cAAA,IAAAw5G,EAAAzlG,KAAA,KAAAylG,EAAAI,KAAA,IAAAJ,EAAAK,QAAA,kDAyBpB75G,MAAA,qBAAmFA,MAAA,mBAAAA,MAAA85G,GAAA,MAAAC,EAAA/5G,QAAA,OAAAA,MAAA+5G,EAAAC,iBAA4B,GAAE,GAAEh6G,iCAKnHA,MAAA,kDAA6DA,MAAA,eAAA6F,EAAAm0G,0CAC7Dh6G,MAAA,aACIA,MAAA,gCACJA,iDAcIA,MAAA,WAAAA,CAAqG,yBAC/EA,MAAA,0BAAAi6G,EAAAj6G,MAAAk6G,GAAA72G,UAAA82G,GAAAn6G,QAAA,OAAUA,MAAAm6G,GAAAC,UAAAH,EAAAjlG,IAA8B,GAE1DhV,QACAA,MAAA,UAAMA,MAAA,GAAyBA,gDAF3BA,cAAA,UAAA+H,EAAAsyG,UAAAJ,EAAAjlG,KAEEhV,MAAA,GAAAA,MAAAi6G,EAAAK,+CAWdt6G,MAAA,qBAA8EA,MAAA,mBAAAA,MAAAgE,GAAA,MAAAu2G,EAAAv6G,QAAAqJ,OAAArJ,MAAA,IAAAoS,MAAwB,GAAIpS,MAAAu6G,EAAAC,WAAW,MAAK,GAAEx6G,iDAQ5HA,MAAA,GACIA,MAAA,WAAAA,CAAqG,qBACnDA,MAAA,yBAAAy6G,EAAAz6G,MAAA4W,GAAAvT,UAAAq3G,GAAA16G,MAAA,UAASA,MAAA06G,GAAAC,WAAAF,GAAgB,GAAEz6G,QACzEA,MAAA,WAAAA,CAAmC,UAE3BA,MAAA,GACJA,QACAA,MAAA,aACIA,MAAA,GACJA,UAEJA,MAAA,WAAAA,CAAY,eACAA,MAAA,yBAAAy6G,EAAAz6G,MAAA4W,GAAAvT,UAAAu3G,GAAA56G,MAAA,UAASA,MAAA46G,GAAAC,UAAAJ,GAAe,GAC5Bz6G,MAAA,sBACAA,MAAA,WACIA,MAAA,qBACJA,cAIhBA,4CAnByEA,cAAA,oBAAA86G,GACxC96G,cAAA,oBAGjBA,MAAA,GAAAA,MAAA,IAAAy6G,EAAA7iE,SAAA,KAGA53C,MAAA,GAAAA,MAAA,IAAAy6G,EAAAM,MAAA,UAAAN,EAAAM,MAAA,QAKc/6G,MAAA,GAAAA,MAAA,mDAdlCA,MAAA,WACIA,MAAA,EAAAg7G,EAAA,wBAqBJh7G,8BArBmCA,cAAA,UAAA2I,EAAAsyG,kDAsBnCj7G,MAAA,WAAAA,CAAmJ,SAC1IA,MAAA,GAAiFA,0CAAjFA,MAAA,GAAAA,MAAAqJ,EAAA+I,MAAA,qFAQTpS,MAAA,GACIA,MAAA,YACIA,MAAA,iBACJA,QACJA,iDAGQA,MAAA,GACIA,MAAA,WAAAA,CAAqG,qBACpDA,MAAA,yBAAAk7G,EAAAl7G,MAAAm7G,GAAA93G,UAAAmU,GAAAxX,MAAA,UAASA,MAAAwX,GAAAmjG,WAAAO,GAAgB,GAAEl7G,QACxEA,MAAA,WAAAA,CAAmC,UAE3BA,MAAA,GACJA,QACAA,MAAA,aACIA,MAAA,GACJA,UAEJA,MAAA,WAAAA,CAAY,eACAA,MAAA,yBAAAk7G,EAAAl7G,MAAAm7G,GAAA93G,UAAA+3G,GAAAp7G,MAAA,UAASA,MAAAo7G,GAAAP,UAAAK,GAAe,GAC5Bl7G,MAAA,sBACAA,MAAA,WACIA,MAAA,qBACJA,cAIhBA,4CAnByEA,cAAA,oBAAAq7G,GACxCr7G,cAAA,mBAGjBA,MAAA,GAAAA,MAAA,IAAAk7G,EAAAtjE,SAAA,KAGA53C,MAAA,GAAAA,MAAA,IAAAk7G,EAAAH,MAAA,UAAAG,EAAAH,MAAA,QAKc/6G,MAAA,GAAAA,MAAA,mDAdlCA,MAAA,YACIA,MAAA,EAAAs7G,EAAA,yCAqBJt7G,+BArBmCA,cAAA,UAAAA,MAAA,IAAAqX,EAAA8jC,oCAuB/Bn7C,MAAA,WAAAA,CACuG,UAC7FA,MAAA,GAAmFA,2CAAnFA,MAAA,GAAAA,MAAAqJ,EAAA+I,MAAA,2FAFVpS,MAAA,EAAAu7G,GAAA,4DAAMv7G,MAAA,kBAAAO,EAAAP,MAAA,IAAAw7G,EAAArgE,SAAA,KAAA56C,EAAA8D,oCAxBVrE,MAAA,EAAAy7G,EAAA,+BAuBAz7G,MAAA,EAAA07G,GAAA,0BAAA17G,8CAvBMA,MAAA,eAAAO,EAAAP,MAAA,IAAAmb,EAAAggC,SAAA,KAAA56C,EAAA8D,QAAA,EAAArE,CAAoC,WAAAoX,IChI3D,IAAMukG,GAAyB,MAAhC,MAAOA,EA+BT96G,YACY4I,GAAA1I,KAAA0I,SAvBL1I,KAAA66G,oBAAoC,GAIpC76G,KAAA86G,cAAwB,GACxB96G,KAAAk6G,uBAAiC,GAKhCl6G,KAAA+6G,sBAAwB,IAAItuF,IAAwB,MACpDzsB,KAAAg7G,oBAAsB,IAAIvuF,IAAwB,MAGnDzsB,KAAAi7G,gBAA0B,EAC1Bj7G,KAAAk7G,eAAyB,EACzBl7G,KAAAm7G,4BAAwC,GAIvCn7G,KAAAC,YAAc,IAAIC,GAItB,CAEJE,WACIJ,KAAK0I,OAAO1H,SAASyJ,aACrBzK,KAAK0I,OAAO1H,SAASyJ,aACrBzK,KAAK0I,OAAO1H,SAAS0tE,oBAErB1uE,KAAKo7G,aAAep7G,KAAK0I,OAAOpI,OAAOmK,aACvCzK,KAAKq7G,gBAAkBr7G,KAAK0I,OAAOpI,OAAOmK,cAA8B,EAExEG,KAAc,CACV5K,KAAK0I,OAAOpI,OAAOuK,MACnB7K,KAAK0I,OAAOpI,OAAO8a,MACnBpb,KAAKq7G,kBACN76G,QACCC,KAAUT,KAAKC,cACjBS,UAAU,EAAE6N,EAAgBic,EAAgB2mC,MAC1CnxD,KAAK66G,oBAAsB,GAC3B76G,KAAKm9F,sBAAwBhsC,EAAe,GAExC5iD,GACAvO,KAAK0I,OAAO1H,SAASyJ,aAA0C8D,EAAgBic,GAAkC,GAAE,GAG3HxqB,KAAKs7G,mBAAqBt7G,KAAK0I,OAAOlI,QAClCF,MAAOmK,UAAiC,EACxCiG,KAAI40F,GAASA,EAAMh1F,OAAO5Q,IAASA,EAAK67G,SAAW77G,EAAK87G,WAG5Dx7G,KAAKs7G,mBAAmB96G,QACpBC,KAAUT,KAAKC,cACjBS,UAAU4kG,GAASA,EAAM/3F,QAAQ7N,GAAQM,KAAKm7G,4BAA4B1qG,KAAK/Q,EAAKuU,MAEtFjU,KAAKy7G,gBAAkBz7G,KAAK0I,OAAOpI,OAAOuN,MAE1C7N,KAAK0I,OAAOpI,OAAOmK,yCAA2DjK,QAC1EC,KAAUT,KAAKC,cACjBS,UAAU08F,GAAuBp9F,KAAK07G,yBAA2Bte,EAAoB95F,QAEvFtD,KAAK0I,OAAOlI,QACRF,MAAOuK,MAAqC,EAC5CpK,KAAUT,KAAKC,cACjBS,UAAUiQ,GAAgB3Q,KAAK2Q,aAAeA,GAEhD3Q,KAAKq7G,gBAAgB76G,QACjB8P,KAAOqrG,GAAaA,GAAWr4G,OAAS,IAAC,EACzC7C,KAAUT,KAAKC,cACjBS,UAAUi7G,IACR37G,KAAKm9F,sBAAwBwe,EAAU,GACvC37G,KAAK0I,OAAO1H,SAASyJ,kCAAoD,CAAEs9B,cAAe/nC,KAAKm9F,wBAAwB,GAG3Hn9F,KAAKo6C,UAASxvC,KAAc,CACxB5K,KAAK0I,OAAOpI,OAAOuN,MACnB7N,KAAK+6G,sBACL/6G,KAAKg7G,sBACNx6G,QACCC,KAAUT,KAAKC,cAAW,EAC1ByQ,KAAI,EAAEkrG,EAAWC,EAAU3lE,MAEvBl2C,KAAKk6G,uBAAyBl6G,KAAK86G,cAAcxqG,OAAOuK,GACpD7a,KAAK87G,qBAAqBjhG,EAAMq7B,IAAe/P,KAAK,CAACC,EAAGC,KAAMD,EAAEyQ,SAASkL,cAAc1b,GAAEwQ,WAGtF+kE,EAAUtrG,OAAOuK,GAAQ7a,KAAK87G,qBAAqBjhG,EAAMq7B,IAC3D5lC,OAAOuK,IAAQghG,GAAWA,EAASzsG,QAAQyL,GAAQ,KAGpE,CAEAha,cACIb,KAAK0I,OAAO1H,SAASyJ,0BACrBzK,KAAK0I,OAAO1H,SAASyJ,6CACrBzK,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,WACjBf,KAAK+6G,sBAAsBh6G,WAC3Bf,KAAKg7G,oBAAoBj6G,UAC7B,CAGOg7G,kBACH/7G,KAAK0I,OAAO1H,SAASyJ,6CACrBzK,KAAK0I,OAAO1H,SAASyJ,sBAAwC,CACzD8D,eAAgBvO,KAAK2Q,aAAaK,GAClCg3B,gBAAiBhoC,KAAKm9F,sBAAsBlpF,GAC5C88B,iBAAkB/wC,KAAK66G,oBAAoBnqG,IAAI2iG,GAASA,EAAMp/F,MAEtE,CAEOqkG,iBAAiB9wE,GACpB,MAAMsgB,EAAQ9nD,KAAK66G,oBAAoBzrG,QAAQo4B,GAE3CsgB,GAAQ,EACR9nD,KAAK66G,oBAAoB1pG,OAAO22C,EAAO,GAEvC9nD,KAAK66G,oBAAoBpqG,KAAK+2B,GAElCxnC,KAAK+7G,iBACT,CAEOpD,oBAAoB5wE,GACvB/nC,KAAKm9F,sBAAwBp1D,EAC7B/nC,KAAK0I,OAAO1H,SAASyJ,kCAAoD,CAAEs9B,mBAC3E/nC,KAAK+7G,iBACT,CAGOnC,WAAW/+F,GACd,MAAMitC,EAAQ9nD,KAAK86G,cAAc1rG,QAAQyL,GAErCitC,GAAQ,EACR9nD,KAAK86G,cAAc3pG,OAAO22C,EAAO,GAEjC9nD,KAAK86G,cAAcrqG,KAAKoK,GAE5B7a,KAAK+6G,sBAAsBj6G,KAAKd,KAAK86G,cACzC,CAEOrB,WAAWvjE,GACdl2C,KAAKg8G,iBAAmB9lE,EAAahyC,cACrClE,KAAKg7G,oBAAoBl6G,KAAKo1C,EAAahyC,cAC/C,CAEO43G,qBAAqBjhG,EAAYq7B,GACpC,OAAOA,IAAmF,IAApEr7B,EAAKg8B,SAAS3yC,cAAckL,QAAQ8mC,EAAahyC,iBACF,IAAjE2W,EAAKm/F,MAAM91G,cAAckL,QAAQ8mC,EAAahyC,cACtD,CAEO41G,UAAUj/F,GACb7a,KAAK0I,OAAO1H,SACRT,UAAoB,CAChBuK,QAAS,CACLk7F,YAAa,0BACbiW,YAAa,QACb7jB,UAAW73F,eAAyB27G,UACpC5jB,YAAa/3F,sBAAgC47G,eAC7CjrG,MAAO,GAAG2J,EAAKg8B,WACfulE,OAAQ,GAAGvhG,EAAKm/F,QAChBjzF,KAAMlM,EACNwhG,QAAQ,KAGxB,CAEO90E,OACHvnC,KAAK0I,OAAO1H,SAASyJ,sBAAwC,CACzDwmC,cAAejxC,KAAK2Q,aAAaK,GACjCkgC,QAASlxC,KAAK86G,cAAcpqG,IAAImK,GAAQA,EAAKiD,QAC7CqzB,oBAAqBnxC,KAAKm7G,+BAG9Bn7G,KAAKs8G,4BACT,CAEOA,6BACHt8G,KAAK86G,cAAgB,GACrB96G,KAAKk6G,uBAAyB,GAC9Bl6G,KAAK+6G,sBAAsBj6G,KAAKd,KAAK86G,eACrC96G,KAAKg7G,oBAAoBl6G,KAAKd,KAAKg8G,kBACnCh8G,KAAK0I,OAAO1H,SAASyJ,4CACzB,CAEO8xG,iBACH,OAAqC,IAA9Bv8G,KAAK86G,cAAcx3G,QAAoD,IAApCtD,KAAK66G,oBAAoBv3G,QAAkD,IAAlCtD,KAAK07G,0BAA8E,IAA5C17G,KAAKm7G,4BAA4B73G,MAC/J,CAEO+1G,UAAU/uB,GACb,MAAMxiC,EAAQ9nD,KAAKm7G,4BAA4B/rG,QAAQk7E,GAEnDxiC,GAAQ,EACR9nD,KAAKm7G,4BAA4BhqG,OAAO22C,EAAO,GAE/C9nD,KAAKm7G,4BAA4B1qG,KAAK65E,EAC9C,CAEOgvB,UAAUhvB,GACb,QAAStqF,KAAKm7G,6BAA6BrqG,KAAK0rG,GAAiBA,IAAkBlyB,EACvF,CAEOkuB,oBAAoBhxE,GACvB,OAAOxnC,KAAK66G,oBAAoBzrG,QAAQo4B,IAAc,CAC1D,CAACvmC,SAAAjB,KAAA,mBAAAkB,iBAtNQ05G,GAAyB37G,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,UAAA8c,EAAAzb,IAAA,MAAzBu5G,EAAyBt5G,UAAA,wBAAAC,MAAA,GAAAC,KAAA,GAAAC,OAAA,g+FAAAC,SAAA,SAAAC,EAAAC,GAAA,KAAAD,EAAA,iBDvBtC1C,MAAA,cAAAA,CAA6E,UAA7EA,CAA6E,UAA7EA,CAA6E,UAA7EA,CAA6E,WAA7EA,CAA6E,UAA7EA,CAA6E,UAQpBA,MAAA,kBAAYA,YAGrDA,MAAA,UAAAA,CAA6D,UACnBA,MAAA,iBAAUA,UAEpDA,MAAA,WAAAA,CAAkC,YAE1BA,MAAA,GAAAw9G,EAAA,yCAOJx9G,UAGJA,MAAA,eAAAA,CAA8C,WAA9CA,CAA8C,WAGLA,MAAA,sBAAeA,YAGxDA,MAAA,WAAAA,CAA6D,WACnBA,MAAA,oBAAaA,UAEvDA,MAAA,WAAAA,CAAkC,YAE1BA,MAAA,GAAAy9G,EAAA,yCAaJz9G,cAKZA,MAAA,YAAAA,CAC0B,YAD1BA,CAC0B,YAD1BA,CAC0B,WAD1BA,CAC0B,WAMuBA,MAAA,IAAsBA,YAG/DA,MAAA,YAAAA,CAA0D,2BAA1DA,CAA0D,eAElBA,MAAA,yBAAAgU,IAAA,OAAArR,EAAAq3G,iBAAAhmG,EAAA,GAAhChU,QACAA,MAAA,sBACAA,MAAA,GAAA09G,EAAA,uBACJ19G,UAEJA,MAAA,WAAAA,CAAkC,YAE1BA,MAAA,GAAA29G,EAAA,8BAAA39G,CAAsH,GAAA49G,GAAA,eAI1H59G,cAKZA,MAAA,YAAAA,CAC8B,WAD9BA,CAC8B,YAD9BA,CAC8B,YAD9BA,CAC8B,WAKmBA,MAAA,iBAAUA,QAC3CA,MAAA,aACIA,MAAA,GAAA69G,EAAA,gCAMA79G,MAAA,gBAAkFA,MAAA,0BAAS2C,EAAA06G,4BAA4B,GAAuEr9G,MAAA,YAAKA,QACnMA,MAAA,gBAAsCA,MAAA,0BAAS2C,EAAA2lC,MAAM,GAAqEtoC,MAAA,WAAIA,cAI1IA,MAAA,WAAAA,CAA6D,2BAA7DA,CAA6D,kBAEoBA,MAAA,mBAAAA,MAAA89G,GAAA,MAAAz0G,GAAArJ,MAAA,WAASA,MAAA2C,EAAA63G,WAAAnxG,GAAA+I,OAAwB,GAA1GpS,QACAA,MAAA,sBACAA,MAAA,GAAA+9G,EAAA,uBACJ/9G,UAEJA,MAAA,WAAAA,CAA6D,WACnBA,MAAA,qBAAcA,UAExDA,MAAA,YACIA,MAAA,GAAAg+G,EAAA,aAAAh+G,CAsBM,GAAAi+G,EAAA,cAIVj+G,QAEAA,MAAA,YAAAA,CAAgE,WACtBA,MAAA,2BAAoBA,UAE9DA,MAAA,+BACIA,MAAA,GAAAk+G,EAAA,yCAKAl+G,MAAA,GAAAm+G,GAAA,0BAAAn+G,OA+BJA,uDAhLQA,MAAA,GAAAA,MAAA,sBAWqCA,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2C,EAAAw5G,eAUrCn8G,MAAA,GAAAA,MAAA,sBAWwCA,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2C,EAAAy5G,kBAqBxCp8G,MAAA,GAAAA,MAAA,sBAIiCA,MAAA,GAAAA,MAAA,MAAA2C,EAAA+O,aAAA,KAAA/O,EAAA+O,aAAAxO,MAKDlD,MAAA,GAAAA,MAAA,UAAA2C,EAAAq3G,kBAEmBh6G,MAAA,GAAAA,MAAA,aAAA2C,EAAAq3G,iBAAA,KAAAr3G,EAAAq3G,iBAAA31G,QAK5BrE,MAAA,GAAAA,MAAA,OAAA2C,EAAAi5G,oBAAAv3G,OAAA,GAC6BrE,cAAA,WAAA2C,EAAAi5G,oBAAAv3G,QAWpDrE,MAAA,GAAAA,MAAA,sBAK0EA,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2C,EAAA05G,qBAM9Dr8G,MAAA,GAAAA,MAAA,eAAA2C,EAAAk5G,cAAAx3G,QAAA,IAAA1B,EAAA85G,0BACAz8G,MAAA,GAAAA,MAAA,WAAA2C,EAAA26G,kBAQuCt9G,MAAA,GAAAA,MAAA,OAAAqJ,EAAA+I,MAAA/N,QAOjDrE,MAAA,GAAAA,MAAA,OAAA2C,EAAAs4G,uBAAA52G,OAAA,GAuBArE,cAAA,UAAA2C,EAAAs4G,uBAAA52G,QAQuCrE,MAAA,GAAAA,MAAA,UAAAA,MAAA,MAAA2C,EAAA65G,iBAAA,mCAC9Bx8G,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA2C,EAAA65G,iBAAAx8G,CAA+B,WAAAo+G,unCC1HrDzC,CAAyB,iOCnBhC37G,MAAA,EAAAA,CAA0E,KAEtEA,MAAA,sBAEFA,8CAHcA,cAAA,gBAAAq+G,GACIr+G,cAAA,YAAAs+G,6BAJxBt+G,MAAA,WACEA,MAAA,KACEA,MAAA,EAAAu+G,EAAA,sBAMFv+G,QACFA,8BATkBA,MAAA,YAAAK,EAAAm+G,MAEoBx+G,MAAA,GAAAA,MAAA,UAAAK,EAAAo+G,4CAStCz+G,MAAA,WACEA,MAAA,mBACAA,MAAA,UAAMA,MAAA,0BAAoBA,iBADbA,cAAA,eCKV,IAAM0+G,EAA2B,MAAlC,MAAOA,EAEX,gBAAoBznE,CAAaA,GAC/Bl2C,KAAK49G,cAAgB1nE,EACrBl2C,KAAK69G,oBAAoB/8G,KAAKo1C,EAChC,CAeAp2C,YACUC,EACA+9G,EACAr1G,GAFAzI,KAAAD,UACAC,KAAA89G,MACA99G,KAAAyI,OATFzI,KAAA69G,oBAAsB,IAAIpxF,IAAwB,MACnDzsB,KAAAC,YAAc,IAAIC,GASrB,CAEJE,WAEEJ,KAAK+9G,WAAa/9G,KAAKD,QAAQO,OAAOmK,4BAEtCzK,KAAK69G,oBAAoBr9G,QACvBC,KAAUT,KAAKC,cAAW,EAC1B+9G,KAAa,MACbt9G,UAAUw1C,IACVl2C,KAAKi+G,YAAY/nE,GACjBl2C,KAAKyI,KAAKkF,eAAa,GAIzB3N,KAAKD,QAAQS,QACXF,MAAOmK,0CAAyD,EAChEhK,KAAUT,KAAKC,cACfS,UAAUw9G,KACLA,EAAe56G,QAAUtD,KAAKm+G,cACjCn+G,KAAKm+G,YAAY/hG,SAAS,GAAGyK,IAAI,SAASu3F,YAAW,GACrDp+G,KAAKq+G,YAAYr+G,KAAKm+G,YAAY/hG,SAAS,IAAsB,IAEpE,EAEDxR,KAAc,CACZ5K,KAAKD,QAAQO,OAAOuN,MACpB7N,KAAKD,QAAQO,OAAOmK,+BACpBzK,KAAKD,QAAQO,OAAOmK,mCACnBjK,QACDC,KAAUT,KAAKC,cACfS,UAAU,EAAEy9G,EAAa/nD,EAAQ2B,MACjC/3D,KAAKo2D,OAASA,EACdp2D,KAAKk9F,YAAcnlC,EAEd/3D,KAAKy9G,MAMRz9G,KAAKm+G,YAAYG,QACjB,CAACH,GAAa5wG,QAAQC,IACpBxN,KAAKm+G,YAAY1tG,KAAKzQ,KAAKu+G,iBAAiB/wG,GAAK,GAEnDxN,KAAKi+G,YAAYj+G,KAAK49G,eACtB59G,KAAKyI,KAAKkF,iBAVV3N,KAAKy9G,KAAOz9G,KAAK89G,IAAIzK,MAAM,CACzB8K,YAAan+G,KAAK89G,IAAIU,MAAM,CAACL,GAAaztG,IAAIlD,GAAQxN,KAAKu+G,iBAAiB/wG,MAC7E,EAWP,CAEA3M,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,WACjBf,KAAK69G,oBAAoB98G,UAC3B,CAKOw9G,iBAAiBE,GACtB,MAAMroD,EAASp2D,KAAKo2D,QAAQ9lD,OAAOpD,GAAKA,EAAEqB,iBAAmBkwG,GAAOptG,OAAOL,IAE3E,OAAOhR,KAAK89G,IAAIzK,MAAM,CACpBqL,QAAS,EAAC,GACVC,MAAO,EAAC,GAERpwG,eAAgBkwG,GAAOptG,MAAML,GAC7B7O,KAAMs8G,GAAOptG,MAAMlP,KACnBy8G,OAAQH,GAAOG,OACfC,SAAUJ,GAAOI,SAAW7+G,KAAK89G,IAAIU,MAAMC,EAAMI,SAASnuG,IAAI+tG,GAASz+G,KAAKu+G,iBAAiBE,KAAW,GACxGroD,OAAQqoD,GAAOptG,OAAOL,GAAKhR,KAAK89G,IAAIU,MAAMpoD,EAAO1lD,IAAI+a,GAASzrB,KAAK8+G,UAAUrzF,KAAW,IAE5F,CAEOqzF,UAAUrzF,GACf,MAAMyxE,EAAcl9F,KAAKk9F,aAAa5sF,OAAO2nD,GAASA,EAAMhkD,KAAOwX,GAAOza,IAE1E,OAAOhR,KAAK89G,IAAIzK,MAAM,CACpBqL,QAAS,EAAC,GACVC,MAAO,EAAC,GAER3tG,GAAIya,EAAMza,GACV7O,KAAMspB,EAAMtpB,KACZ+6F,YAAazxE,GAAOza,GAAKhR,KAAK89G,IAAIU,MAAMthB,EAAYxsF,IAAIunD,GAASj4D,KAAK++G,eAAe9mD,KAAW,IAEpG,CAEO8mD,eAAe9mD,GACpB,OAAOj4D,KAAK89G,IAAIzK,MAAM,CACpBqL,QAAS,EAAC,GACVC,MAAO,EAAC,GACR3tG,GAAIinD,EAAMhkD,GACV9R,KAAM81D,EAAMjlD,KACZy0B,aAAcwwB,EAAM5N,aACpB20D,eAAgB/mD,EAAM+6C,eACtBiM,0BAA2BhnD,EAAMmnC,0BACjC8f,kBAAmBjnD,EAAMknD,kBACzBC,mBAAoBnnD,EAAMonD,oBAE9B,CAEOhB,YAAYI,GAChBA,EAAM53F,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IACpDA,EAAM53F,IAAI,SAASu3F,YAAW,GAC9Bp+G,KAAKq+G,YAAYI,EAAyB,GAE3CA,EAAM53F,IAAI,UAAwBzK,SAAS7O,QAAQke,IAClDA,EAAM5E,IAAI,SAASu3F,YAAW,GAC7B3yF,EAAM5E,IAAI,eAA6BzK,SAAS7O,QAAQ0qD,IACvDA,EAAMpxC,IAAI,SAASu3F,YAAW,EAAK,EACpC,EAEL,CAKOH,YAAY/nE,GACZA,GAKFl2C,KAAKm+G,YAAY/hG,SAAS,GAAGyK,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IAC3Ez+G,KAAKs/G,WAAWppE,EAAcuoE,EAAyB,GAGxDz+G,KAAKm+G,YAAY/hG,SAAS,GAAGyK,IAAI,UAAwBzK,SAAS7O,QAAQke,IACzEzrB,KAAKu/G,aAAarpE,EAAczqB,EAAyB,IAT3DzrB,KAAKw/G,0BAA0Bx/G,KAAKm+G,YAAY/hG,SAAS,GAY7D,CAEOojG,0BAA0Bf,GAC9BA,EAAM53F,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IACpDA,EAAM53F,IAAI,WAAWu3F,YAAW,GAChCp+G,KAAKw/G,0BAA0Bf,EAAyB,GAEzDA,EAAM53F,IAAI,UAAwBzK,SAAS7O,QAAQke,IAClDA,EAAM5E,IAAI,WAAWu3F,YAAW,EAAI,EAExC,CAEOkB,WAAWppE,EAAsBuoE,GACtC,MAAMgB,EAA0BhB,EAAM53F,IAAI,YAA0BzK,SAAS1L,IAAI+tG,GAASz+G,KAAK0/G,aAAaxpE,EAAcuoE,IAA4BruG,UAAS,GACzJuvG,EAAwBlB,EAAM53F,IAAI,UAAwBzK,SAAS1L,IAAI+a,GAASzrB,KAAKu/G,aAAarpE,EAAczqB,IAA4Brb,UAAS,GAE3J,IAAIwvG,EAAiBH,GAAiBE,EAErClB,SAAM53F,IAAI,YAA0BzK,SAAS7O,QAAQsyG,IAChD7/G,KAAKs/G,WAAWppE,EAAc2pE,KAChCD,GAAQ,KAGPnB,EAAMptG,MAAMlP,KAAgB+B,cAAckM,SAAS8lC,EAAahyC,iBACnElE,KAAKw/G,0BAA0Bf,GAC/BmB,GAAQ,GAGVnB,EAAM53F,IAAI,WAAWu3F,WAAWwB,GACzBA,CACT,CAEOF,aAAaxpE,EAAsBuoE,GACxC,MAAMqB,EAAuBrB,EAAMptG,MAAMlP,KAAgB+B,cAAckM,SAAS8lC,EAAahyC,eAE7Fu6G,SAAM53F,IAAI,WAAWu3F,WAAW0B,GACzBA,CACT,CAEOP,aAAarpE,EAAsBzqB,GACxC,MAAMs0F,EAAuBt0F,EAAMpa,MAAMlP,KAAgB+B,cAAckM,SAAS8lC,EAAahyC,eAE7FunB,SAAM5E,IAAI,WAAWu3F,WAAW2B,GACzBA,CACT,CAKA,eAAW5B,GACT,OAAOn+G,KAAKy9G,MAAM52F,IAAI,cACxB,CAEA,uBAAW62F,GACT,OAAO19G,KAAKm+G,YAAY/hG,QAC1B,CAACnb,SAAAjB,KAAA,mBAAAkB,iBAnNUy8G,GAA2B1+G,MAAAkC,MAAAlC,MAAA6S,MAAA7S,aAAA,EAAAgC,SAAAjB,KAAA,UAAAggH,EAAA3+G,IAAA,MAA3Bs8G,EAA2Br8G,UAAA,2BAAA2Q,OAAA,CAAAikC,aAAA,gBAAA30C,MAAA,EAAAC,KAAA,EAAAC,OAAA,kMAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDlBxC1C,MAAA,WACEA,MAAA,EAAAghH,EAAA,YAAAhhH,CASM,EAAAihH,EAAA,8BAMRjhH,eAfQA,cAAA,OAAA2C,EAAA67G,MAWAx+G,cAAA,OAAAA,MAAA,IAAA2C,EAAAm8G,sPCMKJ,CAA2B,yYCDhC1+G,MAAA,qBAAcA,MAAA,mBAAAA,MAAA8e,GAAA,MAAAhW,GAAA9I,MAAA,UAASA,MAAA8I,GAAAo4G,qBAAqB,IAAG,GACTlhH,aAD+CA,MAAA,6CASnFA,MAAA,uBACEA,MAAA,GACFA,kCAFyDA,MAAA,QAAAmhH,EAAAlwD,aACvDjxD,cAAA,IAAAmhH,EAAAptG,KAAA,8CASJ/T,MAAA,qBAAcA,MAAA,mBAAAA,MAAAohH,GAAA,MAAAC,GAAArhH,MAAA,UAASA,MAAAqhH,GAAAC,qBAAqB,MAAK,GACXthH,aADiDA,MAAA,6CAzB7FA,MAAA,UAAAA,CAAmE,UAAnEA,CAAmE,0BAAnEA,CAAmE,mBAG7CA,MAAA,kBAAWA,QAC3BA,MAAA,gBAAAA,CAA4F,qBAE5FA,MAAA,EAAAuhH,EAAA,uBAEFvhH,UAGFA,MAAA,WAAAA,CAAgD,2BAAhDA,CAAgD,oBAE7BA,MAAA,iBAAUA,QACzBA,MAAA,wBACEA,MAAA,GAAAwhH,EAAA,yBAGFxhH,UAGFA,MAAA,2BAAAA,CAA2B,oBACTA,MAAA,kBAAUA,QAC1BA,MAAA,iBAAAA,CAAgH,sBAEhHA,MAAA,GAAAyhH,EAAA,uBAEFzhH,4DApBKA,MAAA,GAAAA,MAAA,OAAAiU,EAAA7B,MAAA/N,QAOyErE,MAAA,GAAAA,MAAA,gBACxCA,cAAA,UAAAE,GAAAwhH,oBAQ0B1hH,MAAA,GAAAA,MAAA,MAAAE,GAAAyhH,WAG3D3hH,MAAA,GAAAA,MAAA,OAAA2e,GAAAvM,MAAA/N,gCAUHrE,MAAA,2BAAAA,CAAwF,YAEpFA,MAAA,iBACFA,oCAEFA,MAAA,qBACEA,MAAA,GACFA,kCADEA,cAAA,IAAA4hH,EAAAhO,UAAA,qCAMF5zG,MAAA,2BAAAA,CAAwF,YAEpFA,MAAA,kBACFA,mDAEFA,MAAA,qBAA6EA,MAAA,yBAAA6hH,GAAA7hH,MAAA8hH,GAAAz+G,UAAA2T,GAAAhX,MAAA,UAASA,MAAAgX,GAAAkqG,qBAAAW,GAAAE,WAAmC,GACvH/hH,MAAA,GACFA,oCADEA,cAAA,IAAA6hH,EAAAE,WAAA,qCAKF/hH,MAAA,2BAAAA,CAAwF,YAEpFA,MAAA,YACFA,oCAEFA,MAAA,qBACEA,MAAA,GACFA,kCADEA,cAAA,IAAAgiH,EAAAC,eAAA,qCAKFjiH,MAAA,2BAAAA,CAAwF,YAEpFA,MAAA,iBACFA,mDAEFA,MAAA,qBAA6EA,MAAA,yBAAAkiH,GAAAliH,MAAA4W,GAAAvT,UAAAq3G,GAAA16G,MAAA,UAASA,MAAA06G,GAAA4G,qBAAAY,GAAAC,WAAmC,GACrHniH,MAAA,GACJA,oCADIA,cAAA,IAAAkiH,EAAAE,4BAAA,qCAIJpiH,MAAA,YACEA,MAAA,qBACAA,MAAA,qBACFA,+BAEFA,MAAA,8CAEAA,MAAA,2CAvDFA,MAAA,sBAGEA,MAAA,MACEA,MAAA,EAAAqiH,GAAA,6BAAAriH,CAIsB,EAAAsiH,EAAA,uBAKxBtiH,QAEAA,MAAA,MACEA,MAAA,EAAAuiH,EAAA,6BAAAviH,CAIsB,EAAAwiH,EAAA,uBAIxBxiH,QAEAA,MAAA,MACEA,MAAA,EAAAyiH,EAAA,6BAAAziH,CAIsB,EAAA0iH,EAAA,uBAIxB1iH,QAEAA,MAAA,OACEA,MAAA,GAAA2iH,EAAA,6BAAA3iH,CAIsB,GAAA4iH,EAAA,uBAIxB5iH,QACAA,MAAA,GAAA6iH,EAAA,qBAAA7iH,CAKc,GAAA8iH,GAAA,4BALd9iH,CAKc,GAAA+iH,GAAA,sBAOhB/iH,+BA3DeA,MAAA,oBAAAmD,EAAA6/G,YAAA,MAAA7/G,EAAA6/G,WAAAl7F,KAAA,KAAA3kB,EAAA6/G,WAAAl7F,KAAAzjB,QAAA,MAAArE,CAAkD,aAAAmD,EAAA6/G,WAAlDhjH,CAAkD,gBAqD1CA,MAAA,IAAAA,MAAA,sBAAAmD,EAAA8/G,SAEiBjjH,cAAA,uBAAAmD,EAAA8/G,oCAxD1CjjH,MAAA,GACEA,MAAA,EAAAkjH,GAAA,0CA4DFljH,+BA5DqEA,cAAA,QAAAA,MAAA,IAAAqF,EAAAy5G,oCA6DrE9+G,MAAA,YACEA,MAAA,6BACFA,iDA3GFA,MAAA,UAAAA,CAAoF,UAApFA,CAAoF,YAG9EA,MAAA,cACFA,QACAA,MAAA,cAE2DA,MAAA,mBAAAA,MAAAmjH,GAAA,MAAA9rG,GAAArX,QAAA,OAASA,MAAAqX,GAAA+rG,kBAAiB,oBACnFpjH,MAAA,mBACFA,UAGFA,MAAA,EAAAqjH,EAAA,+BA+BArjH,MAAA,EAAAsjH,GAAA,wCA8DAtjH,MAAA,GAAAujH,EAAA,+BAIFvjH,gCA7GoDA,MAAA,YAAAK,EAAAm+G,MAM9Cx+G,MAAA,GAAAA,MAAA,iBAAAK,EAAAm+G,KAAApsG,MAAAoxG,cAAA,MAAAnjH,EAAA2iH,YAAA,MAAA3iH,EAAA2iH,WAAAl7F,KAAA,KAAAznB,EAAA2iH,WAAAl7F,KAAAzjB,QAAA,GAAAhE,EAAAm+G,KAAApsG,MAAAqxG,UAAApjH,EAAAshH,WAAA3hH,MAAA,IAAAK,EAAAqjH,YAME1jH,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAAK,EAAAsjH,YA+BS3jH,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAAK,EAAAsjH,YA8DmD3jH,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAAK,EAAAy+G,cCrF7D,IAAM8E,EAAwB,MAA/B,MAAOA,EAEX,QACY18E,CAAKA,GACXA,IAASnmC,KAAKiiH,WAAW97E,OAC3BnmC,KAAKiiH,WAAW97E,KAAOA,EAE3B,CAmCArmC,YACUC,EACA+9G,IADA99G,KAAAD,UACAC,KAAA89G,OAjBF99G,KAAAC,YAAc,IAAIC,IAEnBF,KAAA4gH,UAAoBh8D,OAAO2C,iBAExBvnD,KAAA8iH,UAAY,IAAIC,MAEnB/iH,KAAAiiH,WAAa,IAAIe,KAA+B,KAAMj8F,IAAQ/mB,KAAKkiH,SAEnEliH,KAAAkiH,QAAU,CACf,WACA,YACA,gBACA,6BAME,CAEJ9hH,WAEEJ,KAAK2iH,UAAY3iH,KAAKD,QAAQO,OAAO2iH,MAErCjjH,KAAKy9G,KAAOz9G,KAAK89G,IAAIzK,MAAM,CACzB1jD,UAAW,KACX+yD,UAAW,KACXD,YAAa,CAAC,KAAMS,KAAWC,YAGjCnjH,KAAKy9G,KAAK2F,aAAa5iH,QAAKC,KAAUT,KAAKC,cAAcS,UAAU2iH,IACjErjH,KAAKsjH,cAAY,GAGnBtjH,KAAKujH,QAAUvjH,KAAKD,QAAQO,OAAO2iH,MACnCjjH,KAAKwjH,YAAcxjH,KAAKD,QAAQO,OAAOmK,SACvCzK,KAAKyjH,gBAAkBzjH,KAAKD,QAAQO,OAAOmK,SAC3CzK,KAAKD,QAAQO,OAAOmK,yBAEpBzK,KAAK4iH,UAAY5iH,KAAKD,QAAQO,OAAO2iH,MACrCjjH,KAAK+9G,WAAa/9G,KAAKD,QAAQO,OAAO2iH,MAEtCjjH,KAAK0jH,kBAAoB1jH,KAAKD,QAAQO,OAAO2iH,OAAiC,EAE9Er4G,KAAc,CACZ5K,KAAKujH,QACLvjH,KAAKwjH,YACLxjH,KAAKyjH,gBACLzjH,KAAK0jH,oBACJljH,QACDC,KAAUT,KAAKC,cACfS,UAAU,EAAEwuD,EAAQy0D,GAAOC,GAAgB39C,OACvC/W,GAAU+W,GAAS3iE,OAAS,IAC9BtD,KAAKkvD,OAAS,GACdlvD,KAAKkvD,OAASA,GAAQx+C,IAAI2+C,SACrBA,GACH6xD,cAAeyC,IAAO7yG,KAAKu/C,IAAQA,GAAKH,cAAgBb,GAAMa,cAAcl9C,KAC5E6wG,mBAAoBD,IAAgB9yG,KAAKgzG,IAAOA,GAAI7vG,KAAOo7C,GAAM00D,mBAAmB/wG,KACpFquG,2BAA+C,MAAnBhyD,GAAM+xD,UAAoB/xD,GAAM+xD,UAAY,KAAO/xD,GAAM00D,iBAAmBH,IAAgB9yG,KAAKgzG,IAAOA,GAAI7vG,KAAOo7C,GAAM00D,mBAAmB/wG,KAAO,IAAM,QACnL1C,OAAO++C,IAAS4W,GAAS71D,SAASi/C,GAAMzvC,UAE5C5f,KAAK2gH,mBAAqBgD,GAAMrzG,OAAO+/C,IACrCnB,GAAQx+C,IAAI2+C,IAASA,GAAMa,aAAa9/C,SAASigD,GAAKH,cAGxDlwD,KAAKiiH,WAAWl7F,KAAO/mB,KAAKkvD,OAC5BlvD,KAAKiiH,WAAW97E,KAAOnmC,KAAKmmC,KAE5BnmC,KAAKy9G,KAAKuG,QACVhkH,KAAKsjH,eAAY,GAKrBtjH,KAAKiiH,WAAWgC,cAAczjH,QAAKC,KAAUT,KAAKC,cAAcS,UAAUqmB,IACxE/mB,KAAKkkH,aAAen9F,GAGxB,CAEOu8F,eACL,IAAIb,EAAcziH,KAAKy9G,KAAK52F,IAAI,eAAexV,MAG7CrR,KAAKiiH,WAAWl7F,KADlB07F,EACyBziH,KAAKkvD,OAAO5+C,OAAO++C,IAASA,GAAMa,cAAgBuyD,GAClDziH,KAAKkvD,MAChC,CAEOmzD,kBACL,MAAM1yD,EAAY3vD,KAAKy9G,KAAKpsG,MAAMs+C,WAAWzwC,OACvCwjG,GAAY1iH,KAAKy9G,KAAKpsG,MAAMqxG,UAElC,IAAI37F,GAAO/mB,KAAKkkH,aAAaxzG,IAAKlD,SAC7BA,GACH4zG,UAAWsB,IAAWtxG,YAAY9N,OAAS,EAAIo/G,GAAUtxG,WAAa5D,GAAK4zG,UAC3EJ,UAAWrxD,GAAWrsD,OAAS,EAAIqsD,EAAYniD,GAAKwzG,UACpDmD,kBAAmB32G,GAAK4zG,UACxBgD,kBAAmB52G,GAAKwzG,aAG1BhhH,KAAK8iH,UAAUuB,KAAKt9F,GACtB,CAEOo5F,qBAAqBxwD,GAC1B3vD,KAAKy9G,KAAK52F,IAAI,aAAay9F,SAAS30D,EACtC,CAEO4wD,qBAAqBmC,GAC1B1iH,KAAKy9G,KAAK52F,IAAI,aAAay9F,SAAS5B,EACtC,CAEA7hH,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UAClB,CAACE,SAAAjB,KAAA,mBAAAkB,mBA7IS2hH,GAAwB5jH,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,UAAAukH,EAAAljH,IAAA,MAAxBwhH,EAAwBvhH,UAAA,uBAAAyb,UAAA,SAAApb,GAAAC,OAAA,EAAAD,SAExB6iH,IAAW,kpFDtBxBvlH,MAAA,EAAAwlH,EAAA,qBAAwExlH,MAAA,OAAA2C,GAAA67G,+VCoB3DoF,CAAwB,sQCVjC5jH,MAAA,oBAAcA,MAAA,mBAAAA,MAAAqJ,GAAA,MAAAtB,EAAA/H,MAAA,UAASA,MAAA+H,EAAA09G,cAAa,GAAuFzlH,aAA3BA,MAAA,4DAHlGA,MAAA,uBAAAA,CAA8D,aACdA,MAAA,mBAAAA,MAAA0lH,GAAA,MAAAp9G,EAAAtI,QAAA,OAASA,MAAAsI,EAAAq9G,aAAY,EAArB3lH,CAAsB,yBAAAgU,GAAAhU,MAAA0lH,GAAA,MAAA58G,EAAA9I,QAAA,OAAAA,MAAA8I,EAAAmkD,OAAAj5C,EAAA,GAApEhU,QACAA,MAAA,oBACAA,MAAA,EAAA4lH,EAAA,sBACF5lH,gCAHuEA,cAAA,UAAAK,EAAA4sD,QAEMjtD,MAAA,GAAAA,MAAA,YAAAK,EAAA4sD,iDAI3EjtD,MAAA,WAAAA,CAAyH,YAE7FA,MAAA,yBAAA6lH,EAAA7lH,MAAA2V,GAAAtS,UAAAF,EAAAnD,MAAA,UAASA,MAAAmD,EAAA2iH,gBAAAD,GAA0B,GAC3D7lH,MAAA,cACAA,MAAA,aAAAA,CAAmC,aAE/BA,MAAA,GACFA,6DAPDA,MAAA,oBAAA+lH,GAG+C/lH,MAAA,GAAAA,MAAA,UAAAiJ,EAAA+8G,oBAAAH,GAG5C7lH,MAAA,GAAAA,MAAA,IAAA6lH,EAAA9xG,KAAA,+BAPV/T,MAAA,YACEA,MAAA,EAAAimH,EAAA,cAYFjmH,8BAZ4EA,cAAA,UAAAE,EAAAgmH,2CAc5ElmH,MAAA,YAEEA,MAAA,0BACFA,+BAEAA,MAAA,YACEA,MAAA,6BACFA,SCnBK,IAAMmmH,EAAqC,MAA5C,MAAOA,EAiBXtlH,YACUC,GAAAC,KAAAD,UAPHC,KAAAksD,OAAiB,GAEhBlsD,KAAAC,YAAc,IAAIC,IAEhBF,KAAAqlH,iBAAmB,IAAItC,KAI7B,CAEJ3iH,WACEJ,KAAKD,QAAQO,OAAO2iH,MAA0CziH,QAAKC,KAAUT,KAAKC,cAAcS,UAAU2uD,IACxGrvD,KAAKilH,kBAAoB,KACzBjlH,KAAKmlH,mBAAqB91D,EAC1BrvD,KAAKslH,sBAAwBj2D,EAC7BrvD,KAAK4kH,YAAU,GAGjB5kH,KAAK4iH,UAAY5iH,KAAKD,QAAQO,OAAO2iH,MACrCjjH,KAAK+9G,WAAa/9G,KAAKD,QAAQO,OAAO2iH,MAEtCjjH,KAAKD,QAAQO,OAAOuK,MAAyCrK,QAAKC,KAAUT,KAAKC,cAAcS,UAAUwM,IACvGlN,KAAKuO,eAAiBrB,GAE1B,CAEO63G,gBAAgBpuD,GACrB32D,KAAKilH,kBAAoBtuD,EACzB32D,KAAKulH,YACP,CAEOA,aACLvlH,KAAKqlH,iBAAiBhB,OAElBrkH,KAAKilH,mBAAmBhxG,IAAMjU,KAAKuO,gBACrCvO,KAAKD,QAAQiB,SAASiiH,KAAgDjjH,KAAKuO,eAAgBvO,KAAKilH,kBAAkBhxG,IACtH,CAEO2wG,aACL5kH,KAAKmlH,mBAAqBnlH,KAAKslH,uBAAuBh1G,OAAOqmD,GACpDA,EAAU3jD,KAAK9O,cAAckM,SAASpQ,KAAKksD,OAAOhoD,eAE7D,CAEOwgH,cACL1kH,KAAKksD,OAAS,GACdlsD,KAAK4kH,YACP,CAEA/jH,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UAClB,CAACE,SAAAjB,KAAA,mBAAAkB,iBA/DSkkH,GAAqCnmH,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,UAAAwlH,EAAAnkH,IAAA,MAArC+jH,EAAqC9jH,UAAA,qCAAAmkH,QAAA,CAAAJ,iBAAA,oBAAA9jH,MAAA,GAAAC,KAAA,GAAAC,OAAA,05BAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDhBlD1C,MAAA,UAAAA,CAAoD,UAApDA,CAAoD,YAG9CA,MAAA,4BACFA,UAGFA,MAAA,EAAAymH,EAAA,6CAMAzmH,MAAA,EAAA0mH,EAAA,8BAeA1mH,MAAA,EAAA2mH,EAAA,8BAKA3mH,MAAA,GAAA4mH,EAAA,+BAKF5mH,eA/BuBA,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAA2C,EAAAghH,YAMf3jH,MAAA,GAAAA,MAAA,YAAAA,MAAA,IAAA2C,EAAAm8G,cAAA,MAAAn8G,EAAAujH,mBAAA,KAAAvjH,EAAAujH,mBAAA7hH,QAAA,GAgBHrE,MAAA,GAAAA,MAAA,kBAAA2C,EAAAujH,mBAAA,KAAAvjH,EAAAujH,mBAAA7hH,UAAA,IAAArE,MAAA,IAAA2C,EAAAm8G,aAI+D9+G,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA2C,EAAAm8G,mNCjBvDqH,CAAqC,0OCI3C,IAAMU,EAAwB,MAA/B,MAAOA,EAkBXhmH,YACUC,GAAAC,KAAAD,UAdHC,KAAA+lH,kBAA4B,EAC5B/lH,KAAAgmH,oBAA8B,EAC9BhmH,KAAAimH,gBAA0B,EAC1BjmH,KAAAkmH,qBAA+B,EAK/BlmH,KAAAC,YAAc,IAAIC,IAGlBF,KAAAmmH,UAAoB,CAIvB,CAEJ/lH,WACEJ,KAAKomH,aAAgBpmH,KAAKD,QAAQO,OAAOuN,KAC3C,CAEOw4G,eAAeC,GACpB,OAAQA,GACN,IAAK,SACCtmH,KAAKmmH,UAAY,GAA8B,GAAzBnmH,KAAK+lH,oBAC7B/lH,KAAK+lH,kBAAoB/lH,KAAK+lH,kBACJ,IAA1B/lH,KAAK+lH,iBAA6B/lH,KAAKmmH,YAAcnmH,KAAKmmH,aAE5D,MAEF,IAAK,cACCnmH,KAAKmmH,UAAY,GAAgC,GAA3BnmH,KAAKgmH,sBAC7BhmH,KAAKgmH,oBAAsBhmH,KAAKgmH,oBACJ,IAA5BhmH,KAAKgmH,mBAA+BhmH,KAAKmmH,YAAcnmH,KAAKmmH,aAE9D,MAEF,IAAK,UACCnmH,KAAKmmH,UAAY,GAA4B,GAAvBnmH,KAAKimH,kBAC7BjmH,KAAKimH,gBAAkBjmH,KAAKimH,gBACJ,IAAxBjmH,KAAKimH,eAA2BjmH,KAAKmmH,YAAcnmH,KAAKmmH,aAE1D,MAEF,IAAK,eACCnmH,KAAKmmH,UAAY,GAAiC,GAA5BnmH,KAAKkmH,uBAC7BlmH,KAAKkmH,qBAAuBlmH,KAAKkmH,qBACJ,IAA7BlmH,KAAKkmH,oBAAgClmH,KAAKmmH,YAAcnmH,KAAKmmH,aAKrE,CAEOI,uBACLvmH,KAAKmmH,UAAY,EACjBnmH,KAAK+lH,kBAAmB,EACxB/lH,KAAKgmH,oBAAqB,EAC1BhmH,KAAKimH,gBAAiB,EACtBjmH,KAAKkmH,qBAAsB,EAE3BlmH,KAAKwmH,iBAAiBC,kBACtBzmH,KAAKD,QAAQiB,SAASiiH,OACxB,CAEOyD,mBACL1mH,KAAKmmH,UAAY,EAEjBnmH,KAAK+lH,kBAAmB,EACxB/lH,KAAKgmH,oBAAqB,EAC1BhmH,KAAKimH,gBAAiB,EACtBjmH,KAAKkmH,qBAAsB,CAC7B,CAEO7D,gBAAgBsE,GACrB3mH,KAAK4mH,kBAAoBD,EAEzB3mH,KAAKmmH,UAAY,EACjBnmH,KAAK+lH,kBAAmB,EACxB/lH,KAAKgmH,oBAAqB,EAC1BhmH,KAAKimH,gBAAiB,EACtBjmH,KAAKkmH,qBAAsB,CAC7B,CAEArlH,cACEb,KAAKD,QAAQiB,SAASiiH,QAEtBjjH,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACnB,CAACE,SAAAjB,KAAA,mBAAAkB,iBA9FU4kH,GAAwB7mH,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,UAAA6mH,EAAAxlH,IAAA,MAAxBykH,EAAwBxkH,UAAA,uBAAAyb,UAAA,SAAApb,EAAAC,MAAA,EAAAD,SAExBkhH,IAAwB,QACxBiE,IAA6B,8wBCvB1C7nH,MAAA,UAAAA,CAA8E,yBAItEA,MAAA,mCAAkB2C,EAAAykH,eAAe,QAAQ,oBAGrCpnH,MAAA,2BACIA,MAAA,0CAAyB2C,EAAA2kH,sBAAsB,GAGnDtnH,UAGRA,MAAA,yBAGIA,MAAA,mCAAkB2C,EAAAykH,eAAe,aAAa,GAG1CpnH,MAAA,sCACIA,MAAA,qCAAoB2C,EAAA8kH,kBAAkB,GAG1CznH,UAGRA,MAAA,yBAGIA,MAAA,mCAAkB2C,EAAAykH,eAAe,SAAS,GAGtCpnH,MAAA,wBACIA,MAAA,qBAAAgU,GAAA,OAAarR,EAAAygH,gBAAApvG,EAAuB,GAGxChU,UAGRA,MAAA,yBAGIA,MAAA,mCAAkB2C,EAAAykH,eAAe,cAAc,GAG3CpnH,MAAA,8BAIRA,iBAhDIA,cAAA,WAAA2C,EAAAmkH,iBAAA9mH,CAA6B,QAAAA,MAAA,KAAA2C,EAAAwkH,cAA7BnnH,CAA6B,UAAAA,MAAA,GAAAI,GAAA,IAAAuC,EAAAmkH,mBAa7B9mH,MAAA,GAAAA,MAAA,WAAA2C,EAAAokH,mBAAA/mH,CAA+B,+BAA/BA,CAA+B,UAAAA,MAAA,GAAAI,GAAA,IAAAuC,EAAAokH,qBAa/B/mH,MAAA,GAAAA,MAAA,WAAA2C,EAAAqkH,eAAAhnH,CAA2B,iBAA3BA,CAA2B,UAAAA,MAAA,GAAAI,GAAA,IAAAuC,EAAAqkH,iBAa3BhnH,MAAA,GAAAA,MAAA,WAAA2C,EAAAskH,oBAAAjnH,CAAgC,wBAAhCA,CAAgC,UAAAA,MAAA,GAAAI,GAAA,IAAAuC,EAAAskH,sBAMxBjnH,cAAA,iBAAA2C,EAAAglH,+TD3BHd,CAAwB,iUEFnC7mH,MAAA,YACEA,MAAA,uBACFA,gCAIIA,MAAA,2BAAAA,CAAwF,YAEpFA,MAAA,iBACFA,qCAEFA,MAAA,qBACEA,MAAA,GACFA,oCADEA,cAAA,IAAA8nH,GAAAlgG,IAAA,YAAAxV,OAAA,sCAKFpS,MAAA,2BAAAA,CAAoE,YAEhEA,MAAA,kBACFA,kCAEFA,MAAA,oBAAAA,CAAsE,2BAElEA,MAAA,cACFA,gBAHkDA,MAAA,iDAQpDA,MAAA,2BAAAA,CAAuF,YAEnFA,MAAA,YACFA,qCAEFA,MAAA,qBACEA,MAAA,GACFA,oCADEA,cAAA,IAAA+nH,GAAAngG,IAAA,iBAAAxV,MAAA,6BAKFpS,MAAA,2BAAAA,CAAoE,YAEhEA,MAAA,iBACFA,qCAEFA,MAAA,oBAAAA,CAAsE,wBAElEA,MAAA,cACFA,kDAHkDA,MAAA,YAAAgoH,IAEdhoH,MAAA,GAAAA,MAAA,MAAAiJ,GAAA04G,mCAMtC3hH,MAAA,sEAEAA,MAAA,oBAAAA,CAAkE,oBAClDA,MAAA,yBAAAioH,EAAAjoH,MAAA85G,IAAAjxD,MAAAkxD,EAAA/5G,MAAA,UAASA,MAAA+5G,EAAAmO,gBAAAD,GAAkB,GAAwBjoH,gBAAtBA,cAAA,6CAI7CA,MAAA,YACEA,MAAA,qBACAA,MAAA,qBACFA,+BAEFA,MAAA,gDAEAA,MAAA,8CAhEFA,MAAA,sBACEA,MAAA,MACEA,MAAA,EAAAmoH,EAAA,6BAAAnoH,CAIsB,EAAAooH,EAAA,uBAIxBpoH,QAEAA,MAAA,MACEA,MAAA,EAAAqoH,EAAA,6BAAAroH,CAIsB,EAAAsoH,EAAA,uBAMxBtoH,QAEAA,MAAA,MACEA,MAAA,EAAAuoH,EAAA,6BAAAvoH,CAIsB,EAAAwoH,EAAA,uBAIxBxoH,QAEAA,MAAA,OACEA,MAAA,GAAAyoH,EAAA,6BAAAzoH,CAIsB,GAAA0oH,EAAA,uBAMxB1oH,QAEAA,MAAA,OACEA,MAAA,GAAA2oH,GAAA,6BAAA3oH,CACsB,GAAA4oH,EAAA,uBAIxB5oH,QACAA,MAAA,GAAA6oH,EAAA,qBAAA7oH,CAKc,GAAA8oH,EAAA,4BALd9oH,CAKc,GAAA+oH,EAAA,sBAMhB/oH,+BAnEeA,MAAA,aAAAE,GAAA8iH,WAAAhjH,CAAyB,gBA8DiBA,MAAA,IAAAA,MAAA,sBAAAE,GAAA+iH,SAE4BjjH,cAAA,uBAAAE,GAAA+iH,iCAKrFjjH,MAAA,YACEA,MAAA,6BACAA,MAAA,UAAMA,MAAA,+BAAyBA,WCzE5B,IAAM6nH,EAA6B,MAApC,MAAOA,EAEX,QACY3gF,CAAKA,IACXA,KAASnmC,KAAKiiH,WAAW97E,OAC3BnmC,KAAKiiH,WAAW97E,KAAOA,GAE3B,CAuCArmC,YACUC,GACA+9G,IADA99G,KAAAD,WACAC,KAAA89G,OAvCH99G,KAAAiiH,WAAa,IAAIe,KAAoC,KAC1Dj8F,KAAyC,WAAY,iBACrD,CAACA,GAAMw5C,IAAex5C,GAAKF,IAAI05C,GAAYlvD,OAGtCrR,KAAAkiH,QAAU,CACf,WACA,YACA,gBACA,YACA,cAqBKliH,KAAA4gH,UAAoBh8D,OAAO2C,iBAE3BvnD,KAAAioH,YAAsB,EAErBjoH,KAAAC,YAAc,IAAIC,GAKtB,CAEJE,WACEJ,KAAK2iH,UAAY3iH,KAAKD,QAAQO,OAAO2iH,MAErCjjH,KAAKD,QAAQO,OAAO2iH,MAAmCziH,QAAKC,KAAUT,KAAKC,cAAcS,UAAUwuD,KACjGlvD,KAAKkoH,gBAAkB,GAEvBloH,KAAKmoH,aAAa56G,QAAQe,KACxBtO,KAAKkoH,gBAAgBz3G,KAAK,CACxBmP,SAAUtR,GACV85G,OAAQl5D,IAAQ5+C,OAAO++C,IAASA,GAAMzvC,UAAYtR,IAASoC,IAAI2+C,MAE3D2xD,UAAW3xD,GAAM2xD,UACjBI,WAAY/xD,GAAM+xD,UAClB58E,QAAS6qB,GAAM7qB,YAGpB,EACF,EAGL,CAEA/1B,YAAYC,IACV,GAAIA,GAAQ25G,eAAeC,cAAchlH,OAAS,EAAG,CACnDtD,KAAKuoH,WAAa75G,GAAQ25G,eAAeC,aAGzC,IAAIE,GADSxoH,KAAKy9G,MAAMpsG,OACKf,OAAO81B,IACjCpmC,KAAKuoH,WAAW73G,IAAIw+C,GAAUA,EAAO1qB,SAASp0B,SAASg2B,EAAE5B,UAG5DxkC,KAAKy9G,KAAOz9G,KAAK89G,IAAIU,MAAM,IAE3Bx+G,KAAKuoH,WAAaC,GAAiBxoH,KAAKuoH,WAAWp0D,OAAOq0D,IAAkB95G,GAAQ25G,eAAeC,aACnGtoH,KAAKuoH,YAAYh7G,QAAQ8hD,GAASrvD,KAAKy9G,KAAKhtG,KAAKzQ,KAAKyoH,6BAA6Bp5D,KAEnFrvD,KAAKiiH,WAAWl7F,KAAO/mB,KAAKy9G,MAAMrhG,SAClCpc,KAAKiiH,WAAW97E,KAAOnmC,KAAKmmC,IAC9B,CACF,CAEOsiF,6BAA6Bp5D,IAClC,OAAOrvD,KAAK89G,IAAIzK,MAAM,CACpBR,SAAUxjD,GAAMwjD,SAChBmO,UAAW,CAAC3xD,GAAM2xD,UAAWkC,KAAWC,UACxCiB,kBAAmB/0D,GAAM+0D,kBACzBlD,cAAe7xD,GAAM6xD,cACrBE,UAAW,EAAE/xD,GAAM+xD,UAAW8B,KAAWC,UACzCgB,kBAAmB90D,GAAM80D,kBACzBN,mBAAoBx0D,GAAMw0D,mBAC1BrzD,YAAanB,GAAMmB,YACnB5wC,QAASyvC,GAAMzvC,QACf4kB,QAAS6qB,GAAM7qB,SAEnB,CAEOkkF,aACL1oH,KAAK2oH,eAAiB3oH,KAAKy9G,KAAKpsG,MAAMf,OAAO++C,IAASA,GAAM2xD,WAAW9hG,SAAWmwC,GAAM+0D,mBAAmBllG,QAAUmwC,GAAM+xD,WAAWhwG,aAAei+C,GAAM80D,mBAAmB/yG,YAC9KpR,KAAKmoH,YAAc,IAAI,IAAIS,IAAI5oH,KAAK2oH,gBAAgBj4G,IAAIlD,IAAQA,GAAKoS,WAErE5f,KAAKD,QAAQiB,SAASiiH,KAA+BjjH,KAAK2oH,iBAE1D3oH,KAAKD,QAAQiB,SAAST,UAAoB,CACxCuK,QAAS,CACPk7F,YAAa,0BACbiW,YAAa,MACb7jB,UAAWywB,YAAUC,SACrBxwB,YAAaywB,mBAAiBC,gBAE9B93G,MAAO,gBACP6V,KAAM,GAENyxE,YAAa,UACbywB,sBAAuBA,IAAMjpH,KAAKunC,OAElC2+D,cAAe,aAInBlmG,KAAKy9G,KAAKyL,gBAEZ,CAEO3hF,OACDvnC,KAAKkoH,iBAAiB5kH,OAAS,IACjCtD,KAAKD,QAAQiB,SAASiiH,IAAoCjjH,KAAKkoH,kBAC/DloH,KAAKymH,kBAET,CAEOU,gBAAgBr/D,IACrB9nD,KAAKy9G,KAAK0L,SAASrhE,IACnB9nD,KAAKiiH,WAAWl7F,KAAO/mB,KAAKy9G,MAAMrhG,QACpC,CAEOqqG,kBACLzmH,KAAKy9G,KAAO,KACZz9G,KAAKuoH,WAAa,EACpB,CAEA1nH,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UAClB,CAACE,SAAAjB,KAAA,mBAAAkB,mBA1JS4lH,GAA6B7nH,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,UAAAopH,EAAA/nH,IAAA,MAA7BylH,EAA6BxlH,UAAA,6BAAAyb,UAAA,SAAApb,GAAAC,OAAA,EAAAD,SAE7B6iH,IAAW,+0EDtBxBvlH,MAAA,UAAAA,CAAoD,UAApDA,CAAoD,UAApDA,CAAoD,YAI5CA,MAAA,qBACFA,QAEAA,MAAA,oBAA0CA,MAAA,0BAAS2C,GAAA6kH,iBAAiB,GAAExnH,UAGxEA,MAAA,UAAAA,CAAuC,cACkDA,MAAA,0BAAS2C,GAAA8mH,YAAY,oBAE1GzpH,MAAA,YACFA,YAIJA,MAAA,GAAAoqH,EAAA,+BAIApqH,MAAA,GAAAqqH,EAAA,uBAAArqH,CAmEgB,GAAAsqH,EAAA,+BAMlBtqH,gBAxFoBA,MAAA,GAAAA,MAAA,2BAINA,MAAA,GAAAA,MAAA,kBAAA2C,GAAA67G,KAAA,KAAA77G,GAAA67G,KAAA+L,UAAAvqH,MAAA,IAAA2C,GAAA+gH,aAAA,MAAA/gH,GAAA67G,KAAA,KAAA77G,GAAA67G,KAAArhG,SAAA9Y,QAAA,GAOsDrE,MAAA,GAAAA,MAAA,kBAAA2C,GAAA2mH,WAAA,KAAA3mH,GAAA2mH,WAAAjlH,UAAArE,MAAA,KAAA2C,GAAA+gH,YAIK1jH,MAAA,GAAAA,MAAA,OAAA2C,GAAA67G,MAqEjEx+G,cAAA,OAAAA,MAAA,KAAA2C,GAAA+gH,mSCvEKmE,CAA6B,8XCPlC7nH,MAAA,qBAAcA,MAAA,mBAAAA,MAAA0lH,GAAA,MAAAp9G,EAAAtI,QAAA,OAASA,MAAAsI,EAAAq9G,WAAW,IAAG,GACR3lH,aAA3BA,MAAA,6CAgBAA,MAAA,uBAAyFA,MAAA,GACzFA,kCAD+DA,MAAA,QAAAwqH,EAAApiG,UAA0BpoB,cAAA,GAAAwqH,EAAAz2G,KAAA,+BAYzF/T,MAAA,QAAAA,CAAiE,YAE7DA,MAAA,uBAEFA,8CAHKA,cAAA,gBAAAyqH,GACazqH,cAAA,YAAA0qH,6BAJ1B1qH,MAAA,YACEA,MAAA,MACIA,MAAA,EAAA2qH,EAAA,cAMF3qH,QACJA,+BATkBA,MAAA,YAAAiJ,EAAAu1G,MAEax+G,MAAA,GAAAA,MAAA,UAAAiJ,EAAAw1G,+CAHjCz+G,MAAA,GACEA,MAAA,EAAA4qH,EAAA,cAUF5qH,8BAVQA,cAAA,OAAA6F,EAAA24G,8BAYNx+G,MAAA,YACEA,MAAA,0BACFA,kCAFAA,MAAA,EAAA6qH,GAAA,qDAAqB7qH,MAAA,QAAAA,MAAA,IAAAiH,EAAA63G,oCAMvB9+G,MAAA,GACEA,MAAA,6BACFA,SCvCK,IAAM8qH,EAA0B,MAAjC,MAAOA,EAEX,gBAAoB7zE,CAAaA,GAC/Bl2C,KAAK49G,cAAgB1nE,EACrBl2C,KAAK69G,oBAAoB/8G,KAAKo1C,EAChC,CAYA,oBAAW8zE,GACT,OAAOhqH,KAAKy9G,KAAK52F,IAAI,cACvB,CACA,uBAAW62F,GACT,OAAO19G,KAAKgqH,iBAAiB5tG,QAC/B,CAgBAtc,YACUC,EACA+9G,EACAr1G,GAFAzI,KAAAD,UACAC,KAAA89G,MACA99G,KAAAyI,OAlCAzI,KAAAiqH,sBAAwB,IAAIlH,MAI9B/iH,KAAA69G,oBAAsB,IAAIpxF,IAAwB,MAEnDzsB,KAAA49G,cAAwB,GAWxB59G,KAAAC,YAAc,IAAIC,IAQlBF,KAAAkqH,iBAA2B,IAU9B,CAEJ9pH,YAEEwK,OAAc,CACZ5K,KAAKD,QAAQO,OAAOuK,MACpB7K,KAAKD,QAAQO,OAAO8a,QACnB5a,QACDC,KAAUT,KAAKC,cACfS,UAAU,EAAE6N,EAAgBic,MACxBjc,IACFvO,KAAKuO,eAAiBA,EACtBvO,KAAKkqH,iBAAmB1/F,EACxBxqB,KAAKD,QAAQiB,SAASyJ,aAA0C8D,EAAgBic,GAAkC,IAAE,GAIxHxqB,KAAK+9G,WAAa/9G,KAAKD,QAAQS,QAAKF,MAAOmK,oBAE3CzK,KAAK+9G,cAAanzG,KAAc,CAC9B5K,KAAKD,QAAQS,QAAKF,MAAOmK,oBACzBzK,KAAKD,QAAQS,QAAKF,MAAOmK,qBAEzB,CAAC0/G,EAA6BC,IAC5BD,GAA+BC,GAGnCpqH,KAAKqqH,iBAAmBrqH,KAAKD,QAAQS,QAAKF,MAAO8a,OACjDpb,KAAKqqH,iBAAiB7pH,QAAKC,KAAUT,KAAKC,cAAcS,UAAU4P,IAG9C,MADDA,EAAOQ,KAAK5D,GAAKA,EAAEma,UAAYrnB,KAAKkqH,oBAEnDlqH,KAAKkqH,iBAAmB,KACxBlqH,KAAKD,QAAQiB,SAASyJ,aAA0CzK,KAAKuO,eAAgB,IAAE,GAI3FvO,KAAK69G,oBAAoBr9G,QACvBC,KAAUT,KAAKC,cAAW,EAC1B+9G,KAAa,MACbt9G,UAAUw1C,IACVl2C,KAAKi+G,YAAY/nE,GACjBl2C,KAAKyI,KAAKkF,eAAa,IACxB,EAED/C,KAAc,CACZ5K,KAAKD,QAAQO,OAAOuN,MACpB7N,KAAKD,QAAQO,OAAOmK,iCACnBjK,QACDC,KAAUT,KAAKC,cACfS,UAAU,EAAEy9G,EAAa/nD,MACzBp2D,KAAKo2D,OAASA,EAEdp2D,KAAKsqH,YAAcnM,GAAa9sG,MAAMlP,KACtCnC,KAAKy9G,KAAOz9G,KAAK89G,IAAIzK,MAAM,CACzB8K,YAAan+G,KAAK89G,IAAIU,MAAM,CAACL,GAAaztG,IAAIosB,GAAK98B,KAAKuqH,sBAAsBztF,OAGhF98B,KAAKi+G,YAAYj+G,KAAK49G,eAEtB59G,KAAKy9G,KAAK2F,aAAa5iH,QACrBw9G,KAAa,MAAG,EAChBwM,QAAoB,EACpB/pH,KAAUT,KAAKC,cACfS,UAAU4lE,IACVtmE,KAAKyqH,gBAAc,EACpB,EAIL,CAEOF,sBAAsBz/G,GAC3B,IAAIsrD,EAASp2D,KAAKo2D,QAAQ9lD,OAAOpD,GAAKA,EAAEqB,iBAAmBzD,GAASuG,OAAOL,IAE3E,OAAOhR,KAAK89G,IAAIzK,MAAM,CACpBqL,QAAS,EAAC,GACVC,MAAO,EAAC,GACRx8G,KAAM2I,GAASuG,MAAMlP,KACrBy8G,OAAQ9zG,GAAS8zG,OACjBC,SAAU7+G,KAAK89G,IAAIU,MAAM1zG,GAAS+zG,UAAUnuG,IAAIosB,GAAK98B,KAAKuqH,sBAAsBztF,KAAO,IACvFs5B,OAAQp2D,KAAK89G,IAAIU,MAAMpoD,GAAQ1lD,IAAIosB,GAAK98B,KAAK8+G,UAAUhiF,KAAO,KAElE,CAEOgiF,UAAUrzF,GACf,OAAOzrB,KAAK89G,IAAIzK,MAAM,CACpBqL,QAAS,EAAC,GACVC,MAAO,EAAC,GACR3tG,GAAIya,EAAMza,GACV7O,KAAMspB,EAAMtpB,MAEhB,CAEA,eAAWg8G,GACT,OAAOn+G,KAAKy9G,MAAM52F,IAAI,cACxB,CAEO4jG,iBACLzqH,KAAKiqH,sBAAsB5F,OAE3B,IAAIqG,EAAM1qH,KAAKm+G,YAAYwM,GAAG,GAAGt5G,MACjCrR,KAAK4qH,iBAAmB,GAExB5qH,KAAK6qH,kBAAkBH,GAEvB1qH,KAAKD,QAAQiB,SAASiiH,KAA+BjjH,KAAK4qH,iBAAiBtnH,OAAS,EAAItD,KAAK4qH,iBAAmB,IAElH,CAEOC,kBAAkBC,GAGvB,GAAIA,GAAa10D,QAAQ9yD,OAAS,EAChC,QAASw5B,EAAI,EAAGA,EAAIguF,EAAY10D,OAAO9yD,OAAQw5B,KACR,IAAjCguF,EAAY10D,OAAOt5B,IAAI6hF,OACzB3+G,KAAK4qH,iBAAiBn6G,KAAKq6G,EAAY10D,OAAOt5B,IAAI9rB,IAMxD,GAAI85G,GAAajM,UAAUv7G,OAAS,EAClC,QAASw5B,EAAI,EAAGA,EAAIguF,EAAYjM,SAASv7G,OAAQw5B,IAC/C98B,KAAK6qH,kBAAkBC,EAAYjM,SAAS/hF,GAKlD,CAEO8nF,WAAW1uE,GAChBl2C,KAAKk2C,aAAeA,CACtB,CAKO+nE,YAAY/nE,GACZA,GAKJl2C,KAAKm+G,YAAY/hG,SAAS,GAAGyK,IAAI,YAA0BzK,UAAU7O,QAAQkxG,IAC5Ez+G,KAAKs/G,WAAWppE,EAAcuoE,EAAyB,GAGxDz+G,KAAKm+G,YAAY/hG,SAAS,GAAGyK,IAAI,UAAwBzK,UAAU7O,QAAQke,IAC1EzrB,KAAKu/G,aAAarpE,EAAczqB,EAAyB,IATzDzrB,KAAKw/G,0BAA0Bx/G,KAAKm+G,YAAY/hG,SAAS,GAW7D,CAEOojG,0BAA0Bf,GAC9BA,EAAM53F,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IACpDA,EAAM53F,IAAI,WAAWu3F,YAAW,GAChCp+G,KAAKw/G,0BAA0Bf,EAAyB,GAEzDA,EAAM53F,IAAI,UAAwBzK,SAAS7O,QAAQke,IAClDA,EAAM5E,IAAI,WAAWu3F,YAAW,EAAI,EAExC,CAGOkB,WAAWppE,EAAsBuoE,GACtC,MAAMgB,EAA0BhB,EAAM53F,IAAI,YAA0BzK,UAAU1L,IAAI+tG,IAASz+G,KAAK0/G,aAAaxpE,EAAcuoE,KAA4BruG,UAAS,GAC1JuvG,GAAwBlB,EAAM53F,IAAI,UAAwBzK,UAAU1L,IAAI+a,IAASzrB,KAAKu/G,aAAarpE,EAAczqB,KAA4Brb,UAAS,GAE5J,IAAIwvG,GAAiBH,GAAiBE,GAErClB,SAAM53F,IAAI,YAA0BzK,SAAS7O,QAAQsyG,KAChD7/G,KAAKs/G,WAAWppE,EAAc2pE,MAChCD,IAAQ,KAGPnB,EAAMptG,MAAMlP,KAAgB+B,cAAckM,SAAS8lC,EAAahyC,iBACnElE,KAAKw/G,0BAA0Bf,GAC/BmB,IAAQ,GAGVnB,EAAM53F,IAAI,WAAWu3F,WAAWwB,IACzBA,EACT,CAEOF,aAAaxpE,EAAsBuoE,GACxC,MAAMqB,EAAuBrB,EAAMptG,MAAMlP,KAAgB+B,cAAckM,SAAS8lC,EAAahyC,eAE7Fu6G,SAAM53F,IAAI,WAAWu3F,WAAW0B,GACzBA,CACT,CAEOP,aAAarpE,EAAsBzqB,GACxC,MAAMs0F,EAAuBt0F,EAAMpa,MAAMlP,KAAgB+B,cAAckM,SAAS8lC,EAAahyC,eAE7FunB,SAAM5E,IAAI,WAAWu3F,WAAW2B,GACzBA,CACT,CAEOgL,mBAAmB3gG,GAEpBpqB,KAAKuO,gBACPvO,KAAKD,QAAQiB,SAASyJ,aAA0CzK,KAAKuO,eAAgB6b,GAAsB,GAE/G,CAEO4gG,sBACLhrH,KAAKD,QAAQiB,SAAST,wBACxB,CAGO0qH,oBAAoBxN,GACzB,IAAInuF,EAAc,EACjBmuF,SAAK52F,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IACnDnvF,GAAOtvB,KAAKirH,oBAAoBxM,EAAyB,GAEnDhB,EAAK52F,IAAI,UAAwBzK,SAAS9L,OAAOmb,KAAWA,EAAM5E,IAAI,WAAWxV,OAAO/N,OAASgsB,CAC3G,CAEAzuB,cACMb,KAAKuO,iBAAmBvO,KAAKkqH,kBAC/BlqH,KAAKD,QAAQiB,SAASyJ,aAA0CzK,KAAKuO,eAAgB,IAEvFvO,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACnB,CAACE,SAAAjB,KAAA,mBAAAkB,iBA1QU6oH,GAA0B9qH,MAAAkC,MAAAlC,MAAA6S,MAAA7S,aAAA,EAAAgC,SAAAjB,KAAA,UAAAopH,EAAA/nH,IAAA,MAA1B0oH,EAA0BzoH,UAAA,0BAAA2Q,OAAA,CAAAikC,aAAA,gBAAAuvE,QAAA,CAAAwE,sBAAA,yBAAA1oH,MAAA,GAAAC,KAAA,GAAAC,OAAA,mxCAAAC,SAAA,SAAAC,EAAAC,GAAA,KAAAD,EAAA,kBDrBvC1C,MAAA,UAAAA,CAAoD,UAApDA,CAAoD,YAG9CA,MAAA,GACFA,UAGFA,MAAA,UAAAA,CAAkD,UAAlDA,CAAkD,uBAAlDA,CAAkD,eAGUA,MAAA,mBAAAA,MAAA2V,IAAA,MAAAs2G,GAAAjsH,MAAA,UAASA,MAAA2C,EAAAgjH,WAAAsG,GAAA75G,OAAwB,EAAjCpS,CAAkC,yBAAAgU,IAAA,OAAArR,EAAAg8G,cAAA3qG,EAAA,GAAxFhU,QAEAA,MAAA,oBACAA,MAAA,GAAAksH,EAAA,sBAEFlsH,UAGFA,MAAA,WAAAA,CAAkE,YAAlEA,CAAkE,cAG5DA,MAAA,uBACFA,QACAA,MAAA,aAAgFA,MAAA,0BAAS2C,EAAAopH,qBAAqB,GAC5G/rH,MAAA,mBACFA,UAEFA,MAAA,wBAAAA,CAAoB,wBACFA,MAAA,uBAAAgU,IAAA,OAAerR,EAAAmpH,mBAAA93G,GAA0B,EAAzChU,CAA0C,yBAAAgU,IAAA,OAAArR,EAAAsoH,iBAAAj3G,EAAA,GAExDhU,MAAA,GAAAmsH,EAAA,2CAEFnsH,cAONA,MAAA,GAAAosH,EAAA,sBAAApsH,CAWe,GAAAqsH,EAAA,0BAAArsH,MAXfA,CAWe,GAAAssH,EAAA,yCAWjBtsH,+CA1DMA,MAAA,GAAAA,MAAA,IAAA2C,EAAA0oH,YAAA,KAO2FrrH,MAAA,GAAAA,MAAA,UAAA2C,EAAAg8G,eAGb3+G,MAAA,GAAAA,MAAA,YAAAisH,GAAA75G,OAegBpS,MAAA,GAAAA,MAAA,eAAAA,CAAkB,UAAA2C,EAAAsoH,kBAEzEjrH,cAAA,UAAAA,MAAA,KAAA2C,EAAAyoH,mBAS5BprH,MAAA,GAAAA,MAAA,OAAA2C,EAAAqpH,oBAAArpH,EAAAu8G,YAAA/hG,SAAA,MAAAnd,CAAwD,WAAAusH,IAmBxDvsH,MAAA,GAAAA,MAAA,OAAAA,MAAA,MAAA2C,EAAAm8G,8OCrCJgM,CAA0B,qNCF7B9qH,MAAA,YACIA,MAAA,sBAEJA,yCAH4EA,MAAA,gBAAAwsH,GACxDxsH,cAAA,YAAA+H,EAAA0kH,oBAAAD,8BAHxBxsH,MAAA,EAAAA,CAAqD,MAEjDA,MAAA,EAAA0sH,EAAA,cAIF1sH,iCAJyCA,MAAA,GAAAA,MAAA,UAAA6F,EAAA8mH,2DAwB/B3sH,MAAA,WAAAA,CAEoC,UAFpCA,CAEoC,yBAG5BA,MAAA,0BAAA4sH,EAAA5sH,MAAAo5G,GAAA/1G,UAAAwpH,EAAA7sH,MAAA,GAAAqD,UAAAyS,EAAA9V,MAAA,UAAUA,MAAA8V,EAAAg3G,iBAAAh3G,EAAA0oG,KAAAqO,EAAAD,GAAyC,EAAnD5sH,CAAoD,iBAAAgU,GAAA,OAAUA,EAAA+4G,iBAAwB,GAExF/sH,QACFA,MAAA,sDACFA,QACAA,MAAA,UAEEA,MAAA,GAIFA,iEAdAA,MAAA,gBAAAgtH,GAMEhtH,MAAA,GAAAA,MAAA,IAAA4sH,EAAAx6G,MAAA2tG,eAAA,mBAAAr/G,EAAAV,MAAA,IAAA6C,EAAAoqH,yBAAA,KAAAvsH,EAAAqT,MAAA,aAAArT,EAAAV,MAAA,IAAA6C,EAAAoqH,yBAAA,KAAAvsH,EAAAk5G,MAAA,YAAAl5G,EAAAV,MAAA,IAAA6C,EAAAoqH,yBAAA,KAAAvsH,EAAAm5G,SAAA,SAEI75G,MAAA,GAAAA,MAAA,eAAA4sH,EAAAx6G,MAAA6tG,mBAAA2M,EAAAx6G,MAAA6tG,kBAAA2M,EAAAx6G,MAAA+tG,qBAAA,GAEJngH,cAAA,IAAA4sH,EAAAx6G,MAAA6tG,kBAAA2M,EAAAx6G,MAAA+tG,mBAAA,EAAAyM,EAAAx6G,MAAA6tG,kBAAA,6DAdRjgH,MAAA,EAAAA,CAA0D,MAEtDA,MAAA,EAAAktH,EAAA,eAkBFltH,sDAjB2BA,MAAA,GAAAA,MAAA,UAAAqhH,EAAA8L,wBAAAN,6CAd/B7sH,MAAA,WAAAA,CAA4H,UAA5HA,CAA4H,yBAGtHA,MAAA,oBAAAA,MAAA2W,GAAA,MAAAk2G,EAAA7sH,QAAAqD,UAAAS,EAAA9D,MAAA,UAAUA,MAAA8D,EAAAspH,oBAAAtpH,EAAA06G,KAAAqO,GAAgC,EAA1C7sH,CAA2C,iBAAAgU,GAAA,OAAUA,EAAA+4G,iBAAwB,GAE/E/sH,QACAA,MAAA,aACEA,MAAA,GACFA,UAGFA,MAAA,EAAAqtH,EAAA,sBAsBFrtH,0CAjC4CA,MAAA,mBAOtCA,MAAA,GAAAA,MAAA,IAAA6sH,EAAAz6G,MAAAlP,KAAA,KAIWlD,cAAA,cAAA6sH,EAAAz6G,MAAA6rF,YAAA,KAAA4uB,EAAAz6G,MAAA6rF,YAAA55F,QAAA,6BAbnBrE,MAAA,MAEEA,MAAA,EAAAstH,EAAA,cAkCFttH,kCAnCEA,MAAA,yBACwFA,cAAA,SAAA6sH,EAAAjlG,IAAA,WAAAxV,iCAJ9FpS,MAAA,EAAAA,CAAmD,MAE/CA,MAAA,EAAAutH,EAAA,uBAqCFvtH,iCArCkCA,MAAA,GAAAA,MAAA,UAAAiH,EAAAumH,wCAXpCxtH,MAAA,EAAAytH,EAAA,qBAAAztH,CAOe,EAAA0tH,EAAA,4CAPA1tH,MAAA,OAAAqF,EAAAm5G,KAAApsG,MAAAwtG,SAAAv7G,OAAA,GASArE,cAAA,OAAAqF,EAAAm5G,KAAApsG,MAAA+kD,OAAA9yD,OAAA,4CAvBnBrE,MAAA,wBAAAA,CAA0E,+BAA1EA,CAA0E,wBAEpDA,MAAA,iBAAAgU,GAAA,OAASA,EAAA+4G,iBAAwB,EAAjC/sH,CAAkC,oBAAAA,MAAAgE,GAAA,MAAAu2G,EAAAv6G,MAAA,UAAWA,MAAAu6G,EAAAoT,eAAApT,EAAAiE,KAAqBjE,EAAAiE,KAAA52F,IAAS,SAAQxV,OAAO,GAClFpS,QACxBA,MAAA,GACAA,MAAA,YAAgCA,MAAA,OAACA,QACjCA,MAAA,YACoEA,MAAA,GAAgCA,QACpGA,MAAA,YACEA,MAAA,GACFA,UAEJA,MAAA,GAAA4tH,EAAA,qBAqDF5tH,iCAhE2CA,cAAA,mBAGrCA,MAAA,GAAAA,MAAA,IAAAE,EAAAs+G,KAAApsG,MAAAlP,KAAA,KAGElD,MAAA,GAAAA,MAAA,UAAAE,EAAA2tH,uBAAA3tH,EAAAs+G,MAAA,sBAAkEx+G,cAAAE,EAAA2tH,uBAAA3tH,EAAAs+G,OAElEx+G,MAAA,GAAAA,MAAA,KAAAE,EAAA8rH,oBAAA9rH,EAAAs+G,MAAA,gCAXVx+G,MAAA,YAEEA,MAAA,EAAA8tH,EAAA,4BAkEF9tH,8BApEmDA,MAAA,YAAAK,EAAAm+G,MAEZx+G,cAAA,OAAAK,EAAA2rH,oBAAA3rH,EAAAm+G,MAAA,ICYhC,IAAMuP,EAAqB,MAA5B,MAAOA,EASXltH,YACUC,EACAktH,GADAjtH,KAAAD,UACAC,KAAAitH,mBALHjtH,KAAAktH,mBAAmC,GACnCltH,KAAAmtH,qBAAqC,EAKxC,CAEJ/sH,WACEJ,KAAKy9G,KAAyBz9G,KAAKitH,iBAAiB/iF,QAEpDlqC,KAAKksH,uBAAyBlsH,KAAKD,QAAQO,OAAOmK,mCAClDzK,KAAKotH,wBAA0BptH,KAAKD,QAAQO,OAAOuK,KACrD,CAEO+hH,eAAenP,EAAwBkB,GAC5C3+G,KAAKuI,OAAOk1G,EAAMkB,GAElB3+G,KAAKqtH,aAAa5P,EAAMkB,GAExB3+G,KAAKstH,mBAAmB7P,EAAMkB,GAE1BlB,EAAKpsG,MAAMutG,QACb5+G,KAAKutH,iBAAiB9P,EAAKmB,OAAOA,OAA4BD,GAEhE3+G,KAAKwtH,wBACP,CAEOH,aAAa5P,EAAwBkB,GAC1C,MAAM8O,EAAkBhQ,EAAK52F,IAAI,UAE7B4mG,EAAgBrxG,UAAU9Y,OAAS,GACrCmqH,EAAgBrxG,SAAS7O,QAAQ,CAACke,EAAOq8B,KACvC,MAAM4lE,EAAcD,EAAgB9C,GAAG7iE,GACvC9nD,KAAKuI,OAAOmlH,EAAa/O,GACzB3+G,KAAK2tH,qBAAqBD,EAAa/O,EAAK,EAGlD,CAEO2O,mBAAmB7P,EAAwBkB,GAChD,MAAMiP,EAAoBnQ,EAAK52F,IAAI,YACnC7mB,KAAKuI,OAAOk1G,EAAMkB,GAClB3+G,KAAKqtH,aAAa5P,EAAMkB,GAEpBiP,EAAkBxxG,UAAU9Y,OAAS,GACvCsqH,EAAkBxxG,SAAS7O,QAAQ,CAACkxG,EAAO32D,KACzC,MAAM4lE,EAAcE,EAAkBjD,GAAG7iE,GACzC9nD,KAAKstH,mBAAmBI,EAAiC/O,EAAK,EAIpE,CAEO4O,iBAAiB9P,EAAwBkB,GAC9C,MAAMkP,EAAsBpQ,EAAKpsG,MAAMwtG,UAAUvuG,OAAOmuG,IAAyB,IAAhBA,EAAME,OAAgBr7G,OACjFwqH,EAA2BrQ,EAAKpsG,MAAM+kD,QAAQ9lD,OAAOmb,IAAyB,IAAhBA,EAAMkzF,OAAgBr7G,OAGxFtD,KAAKuI,OAAOk1G,EADVoQ,GAAe,GAAKC,GAAoB,GAGxBnP,GAEhBlB,EAAKpsG,MAAMutG,QACb5+G,KAAKutH,iBAAiB9P,EAAKmB,OAAOA,OAA4BD,EAClE,CAEOp2G,OAAOk1G,EAAwBsQ,GACpC,MAAMC,EAAmBvQ,EAAK52F,IAAI,SAE9B42F,GAAoC,OAA5BuQ,GAAkB38G,OACxB08G,IAAYtQ,EAAK52F,IAAI,WAAWxV,OAEtC28G,GAAkB1J,SAASyJ,EAC7B,CAEO1B,oBAAoB4B,EAA+BC,GACxDluH,KAAKutH,iBAAiBU,EAAaC,EAAUrnG,IAAI,SAASxV,OAC1DrR,KAAK2tH,qBAAqBO,EAAWA,EAAUrnG,IAAI,SAASxV,OAC5DrR,KAAKwtH,wBACP,CAEOzB,iBAAiBkC,EAA+BC,EAA6BtwB,GAClF,MAAMuwB,EAA6BD,EAAU78G,MAAM6rF,YAAY5sF,OAAO2nD,IAAyB,IAAhBA,EAAM0mD,OAAgBr7G,OAAS,EAC9GtD,KAAKouH,cAAcxwB,GACnB59F,KAAKwtH,2BACDW,GAAsBvwB,EAAWvsF,MAAMstG,SAE3C3+G,KAAKutH,iBAAiBW,EAAWtwB,EAAWvsF,MAAMstG,OAClD3+G,KAAKutH,iBAAiBU,EAAaC,EAAUrnG,IAAI,SAASxV,OAC5D,CAEOs8G,qBAAqBlQ,EAAwBkB,GAClD,MAAM0P,EAAwB5Q,EAAK52F,IAAI,eACnCwnG,GAAsBjyG,UAAU9Y,OAAS,GAC3C+qH,EAAqBjyG,SAAS7O,QAAQ,CAACqwF,EAAY91C,KACjD,IAAI4lE,EAAcW,EAAqB1D,GAAG7iE,GAC1C9nD,KAAKuI,OAAOmlH,EAAiCjQ,EAAKpsG,MAAMstG,OACxD3+G,KAAKouH,cAAcxwB,EAAyB,EAGlD,CAEOwwB,cAAcE,GACnB,MAAM1wB,EAAyB,CAC7B3pF,GAAIq6G,EAAsBj9G,MAAML,GAChCgC,KAAMs7G,EAAsBj9G,MAAMlP,KAClCkoD,aAAcikE,EAAsBj9G,MAAMo2B,aAC1CurE,eAAgBsb,EAAsBj9G,MAAM2tG,eAC5C5f,0BAA2BkvB,EAAsBj9G,MAAM4tG,0BACvDE,kBAAmBmP,EAAsBj9G,MAAM6tG,kBAC/CG,mBAAoBiP,EAAsBj9G,MAAM+tG,oBAG7CkP,EAAsBj9G,MAAMstG,OAK/B3+G,KAAKktH,mBAAqB56F,OAAOsd,OAAO,GAAI5vC,KAAKktH,oBACjDltH,KAAKktH,mBAAmBz8G,KAAKmtF,KAL7B59F,KAAKmtH,qBAAuB76F,OAAOsd,OAAO,GAAI5vC,KAAKmtH,sBACnDntH,KAAKmtH,qBAAqB18G,KAAKmtF,GAMnC,CAEO4vB,yBACLxtH,KAAKktH,mBAAqBltH,KAAKktH,mBAAmB58G,OAAO,CAACutF,EAAM/1C,EAAOg2C,IAC9Dh2C,IAAUg2C,EAAKthC,UAAUohC,GAAcA,EAAW3pF,KAAO4pF,EAAK5pF,IAAM2pF,EAAWvzC,eAAiBwzC,EAAKxzC,eAG9GrqD,KAAKmtH,qBAAuBntH,KAAKmtH,qBAAqB78G,OAAO,CAACutF,EAAM/1C,EAAOg2C,IAClEh2C,IAAUg2C,EAAKthC,UAAUohC,GAAcA,EAAW3pF,KAAO4pF,EAAK5pF,IAAM2pF,EAAWvzC,eAAiBwzC,EAAKxzC,eAG9GrqD,KAAKD,QAAQiB,SAASyJ,wCAA0D,CAAEyyF,YAAal9F,KAAKktH,sBACpGltH,KAAKD,QAAQiB,SAASyJ,2CAA6D,CAAEyyF,YAAal9F,KAAKmtH,wBAEvGntH,KAAKktH,mBAAqB,GAC1BltH,KAAKmtH,qBAAuB,EAC9B,CAEOL,uBAAuBrP,GAC5B,IAAInuF,EAAc,EACjBmuF,SAAK52F,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IACnDnvF,GAAOtvB,KAAK8sH,uBAAuBrO,EAAyB,GAEtDhB,EAAK52F,IAAI,UAAwBzK,SAAS9L,OAAOmb,KAAWA,EAAM5E,IAAI,SAASxV,SAAWoa,EAAM5E,IAAI,WAAWxV,OAAO/N,OAASgsB,CACzI,CAEO27F,oBAAoBxN,GACzB,IAAInuF,EAAc,EACjBmuF,SAAK52F,IAAI,YAA0BzK,SAAS7O,QAAQkxG,IACnDnvF,GAAOtvB,KAAKirH,oBAAoBxM,EAAyB,GAEnDhB,EAAK52F,IAAI,UAAwBzK,SAAS9L,OAAOmb,KAAWA,EAAM5E,IAAI,WAAWxV,OAAO/N,OAASgsB,CAC3G,CAEA,4BAAWi/F,GACT,OAAQvuH,KAAKy9G,MAAM52F,IAAI,aAAe,EACxC,CAEO6kG,oBAAoB5jE,GACzB,OAAO9nD,KAAKuuH,yBAAyB5D,GAAG7iE,EAC1C,CAEO0mE,iBAAiB/B,GACtB,OAAOA,EAAcn8G,OAAOmb,KAAWA,EAAM5E,IAAI,WAAWxV,MAC9D,CAEA,oBAAWu6G,GACT,OAAO5rH,KAAKuuH,yBAAyBnyG,QACvC,CAEA,iBAAWqwG,GACT,OAAQzsH,KAAKy9G,KAAK52F,IAAI,UAAwBzK,QAChD,CAEOgwG,wBAAwB/Y,GAC7B,OAAQA,EAAMxsF,IAAI,eAA6BzK,QACjD,CAACnb,SAAAjB,KAAA,mBAAAkB,iBAxLU8rH,GAAqB/tH,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,UAAAggH,EAAA3+G,IAAA,MAArB2rH,EAAqB1rH,UAAA,qBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,03BAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,GDdlC1C,MAAA,EAAAwvH,EAAA,yBAAOxvH,MAAA,mBAAA2C,EAAA67G,MAAA,OAAAj+G,EAAAoC,EAAA67G,KAAA52F,IAAA,iBAAArnB,EAAA6R,6GCcM27G,EAAqBj7G,MAAA28G,OAAA,mPAArB1B,CAAqB,8ECP3B,IAAM9U,EAAkB,MAAzB,MAAOA,EAETp4G,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEGgoG,yBAAyB1oD,GAC5B,OAAOjmE,KAAK2mB,MAAMgC,KAA8B,oCAAqCs9C,EACzF,CAEO2oD,yCAAyCrgH,EAAwB8qD,GACpE,OAAOr5D,KAAK2mB,MAAME,IAAmB,mCAAmCtY,IAAkB,CACtFuN,OAAQ,CAAEu9C,sBAAuBA,EAAsBjoD,aAE/D,CAEOy9G,sBAAsB3/D,GACzB,OAAOlvD,KAAK2mB,MAAMkC,IAAY,4BAA6BqmC,EAC7D,CAACjuD,SAAAjB,KAAA,mBAAAkB,iBAlBMg3G,GAAkBj5G,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAklC,EAAApc,IAAA,OAAlBovF,EAAkBnvF,QAAlBmvF,EAAkBlvF,mBAAlBkvF,CAAkB,8JCFxB,MAAMuS,KAAiBluE,MAAa,sDACtC0pB,KAA0BA,cAElB6oD,KAAqBvyE,MAAa,2DAC1C3yB,GAAoBA,GAEZmlG,KAAwBxyE,MAAa,8DAC7CvV,KAA2CA,gBAEnCgoF,KAAkCzyE,MAAa,iCACxD,CAAChuC,EAAwB8qD,MAA6B9qD,iBAAgB8qD,2BAE7D41D,KAAsC1yE,MAAa,sCAC3D3yB,GAAoBA,GAEZslG,KAAyC3yE,MAAa,yCAC9D2S,KAA6BA,YAErBigE,KAAuB5yE,MAAa,6CAEpC6yE,KAAsB7yE,MAAa,4CAC3C2S,KAAuCA,YAE/BmgE,KAA0B9yE,MAAa,gDAC/C3yB,GAAoBA,GAEZ0lG,KAA6B/yE,MAAa,oDAE1CgzE,KAAiBhzE,MAAa,sCACtC2S,KAA6BA,8OCnB3B,IAAMhS,EAAO,MAAd,MAAOA,EACTp9C,YACYspB,EACAomG,EACAzvH,GAFAC,KAAAopB,YACAppB,KAAAwvH,sBACAxvH,KAAAD,UAGLC,KAAAyvH,8BAA6BnmG,MAChC,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmmG,OAAiC,EACxCjmG,KAAUva,GAAUlP,KAAKwvH,oBAAoBb,yBAAyBz/G,EAAO+2D,UAAUzlE,QACnFkQ,KAAI40G,GAAyBoK,KAAyCpK,KAAsB,EAC5F37F,KAAWC,MAASgB,KAAK,CACrB8kG,KAAsC9lG,GACtCrpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,iCACTk/C,UAAW,cAQ5B9+C,KAAA2vH,eAAcrmG,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmmG,OAAkD,EACzDjmG,KAAUva,GAAUlP,KAAKwvH,oBAAoBZ,yCAAyC1/G,EAAOX,eAAgBW,EAAOmqD,uBAAuB74D,QACvI2pB,KAAS+kC,GAAU,CACfwgE,KAA0DxgE,MAC7D,EACDvlC,KAAWC,MAASgB,KAAK,CACrB8kG,KAAuD9lG,GACvDrpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,6BACTk/C,UAAW,cAQ5B9+C,KAAA4vH,eAActmG,MACjB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmmG,MAAsC,EAC7CjmG,KAAUva,GAAUlP,KAAKwvH,oBAAoBX,sBAAsB3/G,EAAOggD,QAAQ1uD,QAC9E2pB,KAAS,IAAM,CACXulG,OACAnvH,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,sBACTk/C,UAAW,UAGtB,EACDn1B,KAAWC,MAASgB,KAAK,CACrB8kG,KAA2C9lG,GAC3CrpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,QACNE,QAAS,oCACTk/C,UAAW,cAQ5B9+C,KAAA6vH,sBAAqBvmG,MAAa,IAAMtpB,KAAKopB,UAAU5oB,QAC1D+oB,MAAOmmG,OAA6C,EACpDpwG,KACItf,KAAKD,QAAQO,OAAO2iH,MACpBjjH,KAAKD,QAAQO,OAAOuK,QAAwC,EAEhE4e,KAAU,EAAEwB,EAAG8a,EAAa+pF,KAEpB/pF,GAAe+pF,KACRjmG,MAAG6lG,KAAmDI,EAAgB/pF,IAE1Ezb,MAjFX,CAACrpB,SAAAjB,KAAA,mBAAAkB,iBALIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,KAAA7S,MAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,WAAAi4G,EAAAnvF,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,sOCZb,MAAMW,KAAW2+C,MAA6B,gBAExCmyB,KAA2B7wE,MACpCD,EACArjB,GAASA,EAAM8qF,uBAGNtjF,KAAY8b,MACrBD,EACArjB,GAASA,EAAM00B,QAGN6gE,KAAiBjyE,MAC1BD,EACArjB,GAASA,EAAMu1F,gBAGNC,KAAkBlyE,MAC3BD,EACArjB,GAASA,EAAMw1F,iBAGNC,KAAqBnyE,MAC9BD,EACArjB,GAASA,EAAMzP,UAGNmlG,KAAsBpyE,MAC/BD,EACArjB,GAASA,EAAMP,WAGNk2F,KAAyBryE,MAClCD,EACArjB,GAASA,EAAM41F,qBAGNC,KAAoBvyE,MAC7BD,EACArjB,GAASA,EAAM81F,gBAGNC,KAAoBzyE,MAC7BD,EACArjB,GAASA,EAAMg2F,gBAGN3F,KAAoB/sE,MAC7BD,EACArjB,GAASA,EAAMi2F,yHC/CnB,MAAMC,KAAchzE,MAChBF,OAEAG,MAAG+xE,KAAmC,CAACl1F,EAAOxrB,SACvCwrB,EACHP,WAAW,EACXw2F,iBAAkBzhH,EAAQi3D,aAC5B,EAEFtoB,MAAG+xE,KAAuC,CAACl1F,EAAO5Q,SAC3C4Q,EACHP,WAAW,EACXrQ,MAAOA,MACT,EAEF+zB,MAAG+xE,KAA0C,CAACl1F,EAAOxrB,SAC9CwrB,EACH8qF,sBAAuBt2G,EAAQg4B,WAC/Bjc,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SACT,EAEF+zB,MAAG+xE,KAAoD,CAACl1F,EAAOxrB,SACxDwrB,EACHw1F,iBAAiB,EACjBI,oBAAqBphH,EAAQqqD,0BAC/B,EAEF1b,MAAG+xE,KAAwD,CAACl1F,EAAO5Q,SAC5D4Q,EACHw1F,iBAAiB,EACjBpmG,MAAOA,MACT,EAEF+zB,MAAG+xE,KAA2D,CAACl1F,EAAOxrB,SAC/DwrB,EACH00B,OAAQlgD,EAAQkgD,OAChB8gE,iBAAiB,EACjBD,gBAAgB,EAChBnmG,MAAO,SACT,EAEF+zB,MAAG+xE,KAAyC,CAACl1F,EAAOxrB,SAC7CwrB,EACH00B,OAAQ,KACRo2D,sBAAuB,KACvBv6F,UAAU,EACVglG,gBAAgB,EAChBS,eAAgB,KAChB5mG,MAAO,SACT,EAEF+zB,MAAG+xE,IAAyCl1F,QACrCA,EACH81F,gBAAgB,MAClB,EAEF3yE,MAAG+xE,KAA4C,CAACl1F,EAAO5Q,SAChD4Q,EACH81F,gBAAgB,EAChB1mG,MAAOA,MACT,EAEF+zB,MAAG+xE,KAA+C,CAACl1F,EAAOxrB,SACnDwrB,EACH81F,gBAAgB,EAChBE,eAAgB,KAChB5mG,MAAO,SACT,EAEF+zB,MAAG+xE,KAAmC,CAACl1F,EAAOxrB,SACvCwrB,EACHg2F,eAAgBxhH,EAAQkgD,WAK1B,SAAUtR,EAAQpjB,EAA0BtrB,GAC9C,OAAOwhH,EAAYl2F,EAAOtrB,EAC9B,kDClEO,MAAMsuC,EAAsB,CAC/B8nE,sBAAuB,KACvBp2D,OAAQ,KACRj1B,WAAW,EACXlP,UAAU,EACVulG,gBAAgB,EAChBN,iBAAiB,EACjBD,gBAAgB,EAChBK,oBAAqB,KACrBI,eAAgB,KAChBC,iBAAkB,KAElB7mG,MAAO,kLC1BJ,MAAM0yB,KAAOC,MAAa,oDAEpBo0E,KAAap0E,MACxB,kDACCx2C,KAAwBA,aAGd6qH,KAAcr0E,MACzB,mDACC3yB,KAAkBA,WAGR8yB,KAAcH,MACzB,mDACCoqE,KAAsCA,eAG5BkK,KAAkBt0E,MAC7B,uCACCu0E,KAA0CA,0BAGhCC,KAAoBx0E,MAAa,uMCpBvC,MAAMy0E,KAETrmE,KAAuC,CACzCC,SAAUyE,GAASA,EAAMp7C,KAUdupC,EAAsBwzE,EAAqBlmE,gBACtD,CACE7wB,WAAW,EACXg3F,QAAQ,EACRrnG,MAAO,KACPknG,qBAAsB,OAIbI,KAAoBxzE,MAC/BF,KACAG,MAAGwzE,OAA+B32F,QAC7BA,EACHP,WAAW,MACX,EACF0jB,MAAGwzE,aAAqC32F,GAAUgjB,IAAa,EAC/DG,MAAGwzE,cAAsC,CAAC32F,GAASmsF,eAC1CqK,EAAqB/lE,OAAO07D,EAAW,IACzCnsF,EACHP,WAAW,EACXg3F,QAAQ,EACRrnG,MAAO,SAEV,EACD+zB,MAAGwzE,cAAsC,CAAC32F,GAAS5Q,YAAK,IACnD4Q,EACHP,WAAW,EACXg3F,QAAQ,EACRrnG,MAAOA,MACP,EACF+zB,MAAGwzE,kBAA0C,CAAC32F,GAASs2F,2BAAoB,IACtEt2F,EACHs2F,qBAAsBA,MACtB,EACFnzE,MAAGwzE,oBAA4C32F,QAC1CA,EACHs2F,qBAAsB,wBClCnB,MAAMjwG,EAA0C,CACrDuwG,kBAAmBvlH,GAGRwlH,KAGT70B,MAAmC,iBAE1B80B,KAAuBxzE,MAClCuzE,EACA72F,GAASA,EAAM42F,oBAIflmE,UAAWqmE,GAIT1lH,EAAuC2/C,aAAa8lE,GAE3CE,KAA0D1zE,MACrEuzE,EDgBuB72F,GAA4BA,GAASA,EAAM42F,mBAAqB52F,EAAM42F,kBAAkBxnG,OCZpG6nG,KAA2D3zE,MACtEuzE,EDe0B72F,GAAgCA,GAASA,EAAM42F,mBAAqB52F,EAAM42F,kBAAkBH,QCX3GS,KAAoD5zE,MAC/DuzE,EDYsC72F,GAAqCA,GAAO42F,mBAAmBN,sBCR1Fa,KAAkE7zE,MAC7EuzE,EACCO,GAAuBA,GAAsBA,EAAmBR,kBAAkBn3F,WAGxE43F,KAAe/zE,MAC1ByzE,EACCxqG,IACC,MAAM4G,EAAyB,GAC/B5G,SAAKxZ,QAAQke,IACXA,EAAM28F,OAAO76G,QAAQ8hD,IACfA,EAAMt+B,eAAiB4D,KAAYC,SACrCjH,EAAOld,KAAK4+C,EAAK,EAEpB,GAEI1hC,IAIEmkG,KAAiBh0E,MAC5B+zE,EACC9qG,IACC,MAAM6iC,EAAgC,GACtC7iC,SAAKxZ,QAAQ8hD,IACX,MAAM7nB,EAAaoiB,EAAY94C,KAAKuiG,GAASA,EAAM0e,kBAAoB1iE,EAAM2iE,YAAc3e,EAAM4e,aAAe5iE,EAAM6iE,WAClH1qF,EACFA,EAAW2qF,aAWXvoE,EAAYn5C,KATqB,CAC/B45C,aAAcgF,EAAM+iE,QACpBC,WAAYhjE,EAAMr+B,gBAClBmhG,WAAY,EACZF,WAAY5iE,EAAM6iE,UAClBH,gBAAiB1iE,EAAM2iE,WACvBM,WAAY,GACZvhG,aAAcs+B,EAAMt+B,cAGxB,GAEK64B,IAIEqS,KAAene,MAC1BrzC,uBACAqnH,EACA,CAAC7yF,EAAS2qB,KACR,MAAMlE,EAA8B,IAAZzmB,EAAgB,UAAY,UAC9CkrE,EAAwB,IAAZlrE,EAAgB,UAAY,UACxCosE,EAAwB,IAAZpsE,EAAgB,UAAY,SAE9C,IAAIkoB,GAAa,GAEjB,MAAMzC,EAAS,CACbhlD,KAAM,SACNyC,KAAM,QACN4kB,KAAM,IAGR,UAAWygB,KAAcoiB,EAMvBlF,EAAO39B,KAAO,IAAK29B,EAAO39B,KALR,CAChB5kB,KAAMqlC,EAAWyqF,WACjBttE,EAAGnd,EAAW2qF,WACdttE,MAAO,IAAIrd,EAAWuqF,oBAGxB5qE,GAAa,IAAIA,GAAY3f,EAAWyqF,YAG1C,MAAO,CACLxsE,MAAO,CACL/lD,KAAM,SACNgmD,gBAAiB,cACjB6sE,QAAQ,EACRC,gBAAiB,EACjBC,YAAY,GAEdvhH,MAAO,CACLgI,KAAM,IAERurC,SAAU,CACRvrC,KAAM,IAER2sC,UAAW,CACTD,SAAS,GAEXsB,MAAO,CACLxnD,KAAM,WACNynD,cACAC,OAAQ,CACNtB,MAAO,CACLC,SAAU,OACVlB,MAAOslD,IAGX7iD,cAAe,EAAI1C,OAAO2C,kBAE5BC,MAAO,CACLt2C,MAAO,CACLgI,KAAM,IAERkuC,OAAQ,CACNtB,MAAO,CACLC,SAAU,OACVqlD,WAAY,SACZvmD,MAAOslD,IAGXxiD,UAAW,EAAI/C,OAAO2C,iBACtB0pC,UAAWvrC,EACX2lD,UAAWA,GAEbrlD,OAAQ,CACNJ,SAAS,GAEXuB,cACAzC,OAAQ,CAAEA,GACVmC,QAAS,CACPC,QAAQ,EACRE,SAAS,EACTL,YAAa,EACbI,aAAc,EACd4jD,aAAc,uBACdjlD,gBAAiBA,EACjBuB,QAAQ,EACRnB,MAAO,CACLjB,MAAOslD,EACPpkD,SAAU,SAGdE,YAAa,CACXukD,IAAK,CACHjkD,UAAW,CACTC,SAAU,KAEZN,WAAY,CACVN,SAAS,GAEXa,UAAU,GAEZ/B,OAAQ,CACN4B,SAAU,SACVF,YAAa,YACbG,WAAW,EACXL,WAAY,CACVN,SAAS,KAIfD,QAAS,CACPC,SAAS,yUC9MV,MAAMqH,KAAQ1Q,MAAa,6CAErBD,KAAOC,MAAa,2CAChCxW,KAA2B/2B,QAAS,CAAE+2B,kBAE1B2sF,KAAWn2E,MAAa,gDAChCmc,KAA8B1pD,QAAS,CAAE0pD,mBAEjClc,KAAWD,MAAa,mDACjCE,SAESC,KAAcH,MAAa,sDACpCE,SCNSiO,cAAUC,GAAqC,CACxDC,SAAU5E,GAAUA,EAAOh+B,QAGlBw1B,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZL+oG,KAA0Bj1E,MAC5BF,KAEAG,MAAGi1E,EAA+B,SAC3Bp1E,MACL,EAGFG,MAAGi1E,EAA+Bp4F,QAC3BA,EACHzP,UAAU,EACVkP,WAAW,MACb,EAEF0jB,MAAGi1E,EAAmCp4F,QAC/BA,EACHzP,UAAU,EACVkP,WAAW,MACb,EAEF0jB,MAAGi1E,EAAkC,CAACp4F,GAAS5Q,YAAK,IAC7C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGi1E,EAAqC,CAACp4F,GAAS0L,aAAcwkB,EAAQO,OAAO/kB,EAAS,IACjF1L,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOyjH,EAAwBn4F,EAAOtrB,EAC1C,gBCrCO,MAAM2jH,KAA2B/0E,MAAe8V,KAAgBp5B,GAASA,EAAMy5B,mBAGlF/I,UAAWtjB,EACXujB,eAAgBrlB,EAChBslB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAaqnE,GAEZ9nG,KAAW+yB,MAAe+0E,EAA0Br4F,GAASA,EAAMzP,UACnEkP,KAAY6jB,MAAe+0E,EAA0Br4F,GAASA,EAAMP,WACpE+jB,KAAWF,MAAe+0E,EAA0Br4F,GAASA,EAAM5Q,8SCZzE,MAAM0yB,KAAOC,MAAa,oCAAsCjuC,KAAuBU,QAAS,CAAEV,cAC5FkuC,KAAWD,MAAa,4CAA0CE,SAClEC,KAAcH,MAAa,+CAA6CE,SAExEwQ,KAAQ1Q,MAAa,qDCC3B,MAAMmO,cAAUC,GAAoC,CACvDC,SAAU+L,GAAaA,EAAU3lD,KAGxBwsC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCTL2sC,KAAmB7Y,MACrBF,KAEAG,MAAGmb,EAAuB,CAACt+B,GAASxrB,cAAO,EAAO8jH,SAAM,GAAIt4F,EAAO,CAC/DstB,MAAO,CACH,CAAC94C,EAAQV,SAAU,CACf2rB,WAAW,IAGnBlP,UAAU,EACVkP,WAAW,MACb,EAEF0jB,MAAGmb,EAA2B,CAACt+B,GAAS5Q,YAAK,IACtC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGmb,EAAwBt+B,GAASkwB,EAAQiR,UAAU,IAC/CnhC,EACHwM,WAAY,SACd,EAEF2W,MAAGmb,EAA8B,CAACt+B,GAASwM,gBAAiB0jB,EAAQO,OAAOjkB,EAAY,IAChFxM,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOqnD,EAAiB/7B,EAAOtrB,EACnC,gBCrCO,MAAM6jH,KAAoBj1E,MAAe8V,KAAgBp5B,GAASA,EAAMwM,aAG3EkkB,UAAWtjB,EACXujB,eAAgB7oB,EAChB8oB,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAaunE,GAEZhoG,KAAW+yB,MAAei1E,EAAmBv4F,GAASA,EAAMzP,UAC5DkP,KAAY6jB,MAAei1E,EAAmBv4F,GAASA,EAAMP,WAC7D+jB,KAAWF,MAAei1E,EAAmBv4F,GAASA,EAAM5Q,gFCblE,MAAMwpC,KAAO7W,MAAa,kDAAmD,MAAQvtC,QAAS,CAAErO,QAAQ,MAClG0yD,KAAQ9W,MAAa,mDAAoD,MAAQvtC,QAAS,CAAErO,QAAQ,qBCCjH,MAAMqyH,KAAgCt1E,MCFH,CAC/B/8C,QAAQ,IDEV68C,EAEAG,MAAG+V,EAAoBl5B,MAAUs4F,SAAM,GAAIt4F,EAAO,CAChD75B,QAAQ,MACR,EAGFg9C,MAAG+V,EAAqBl5B,MAAUs4F,SAAM,GAAIt4F,EAAO,CACjD75B,QAAQ,MAMN,SAAUi9C,EAAQpjB,EAA0BtrB,GAChD,OAAO8jH,EAA8Bx4F,EAAOtrB,EAC9C,gBEpBO,MAAM+jH,KAAiBn1E,MAAe8V,KAAgBp5B,GAASA,EAAM04F,yBAE/DC,EAAkCr1E,MAC3Cm1E,EACAz4F,GAASA,EAAM75B,0rBCDZ,MAAM27C,KAAOC,MAAa,4CACpBC,KAAWD,MAAa,mDAAiDE,SACzEC,KAAcH,MAAa,sDACAE,SAE3B22E,KAAyB72E,MAAa,8CAClD7V,KAAmC13B,QAAS,CAAE03B,YAClC2sF,KAA6B92E,MAAa,mDACvD,CAAC7V,EAA8B9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YAC1D0pG,KAAgC/2E,MAAa,sDAC1D,CAAC7V,EAA8B+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAE3D8+D,KAAyBh3E,MAAa,8CAClD7V,KAAmC13B,QAAS,CAAE03B,YAClC8sF,KAA6Bj3E,MAAa,mDACvD,CAAC7V,EAA8B9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YAC1D6pG,KAA+Bl3E,MAAa,sDACzD,CAAC7V,EAA8B+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAE3Di/D,KAAyBn3E,MAAa,6CAClDo3E,KAA6B3kH,QAAS,CAAE2kH,oBAC5BC,KAA6Br3E,MAAa,kDACvD,CAACo3E,EAAuB/pG,MAAuB5a,QAAS,CAAE2kH,gBAAe/pG,YAC5DiqG,KAAgCt3E,MAAa,qDAC1D,CAACo3E,EAAuBl/D,MAAwBzlD,QAAS,CAAE2kH,gBAAel/D,6BCxB1E,MAAMq/D,KAAyCp2E,MAC3CF,OAEAG,MAAGo2E,EAA8Bv5F,QAC1BA,EACHP,WAAW,MACb,EAEF0jB,MAAGo2E,EAAkC,CAACv5F,GAAS5Q,YAAK,IAC7C4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGo2E,EAAqC,CAACv5F,GAASw5F,sBAAuBtpE,IAAQO,OAAO+oE,EAAkB,IACnGx5F,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO4kH,EAAuCt5F,EAAOtrB,EACzD,uLCvBO,MAAM+kH,KAA0Cn2E,MAAe8V,KAAgBp5B,GAASA,EAAM05F,oBAGjGhpE,UAAWtjB,EACXujB,eAAgBgpE,EAChB/oE,UAAWC,EACXC,YAAaC,GACbb,IAAQc,aAAayoE,GAEZlpG,KAAW+yB,MAAem2E,EAAyCz5F,GAASA,EAAMzP,UAClFkP,KAAY6jB,MAAem2E,EAAyCz5F,GAASA,EAAMP,WACnF+jB,KAAWF,MAAem2E,EAAyCz5F,GAASA,EAAM5Q,OAElFwqG,KAAiBt2E,MAC1BlW,EACA2c,GAASA,EAAMj0C,OAAOgxC,IAASA,EAAK+yE,WAAa/yE,EAAK2C,uBAG7CqwE,KAAyBx2E,MAClCs2E,EACC7vE,GAA8BA,EAAMjhD,OAAS,EAAI,CAC9C4N,MAAO,CACHgI,KAAM,SAEVurC,SAAU,CACNvrC,KAAM,UAEVwrC,OAAQ,CACJ,CACIhlD,KAAM,MACNqnB,KAAMw9B,EAAM7zC,IAAI4wC,KACZn/C,KAAMm/C,EAAKtuC,KACX2xC,EAAG,EACHE,MAAO,IAAMvD,EAAKrwB,YAI9B,8DClCD,MAAMy5B,cAAUC,GAAsC,CACzDC,SAAU+4D,GAASA,EAAM1vG,KAGhBupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,2SCbJ,MAAM2qG,KAAkBh4E,MAAa,uCAC3C7V,KAA4B13B,QAAS,CAAE03B,YAC3B8tF,KAAsBj4E,MAAa,4CAChD,CAAC7V,EAAuB9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YACnD6qG,KAAyBl4E,MAAa,+CACnD,CAAC7V,EAAuB+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAEpDigE,KAAkBn4E,MAAa,uCAC3C7V,KAA4B13B,QAAS,CAAE03B,YAC3BiuF,KAAsBp4E,MAAa,4CAChD,CAAC7V,EAAuB9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YACnDgrG,KAAwBr4E,MAAa,+CAClD,CAAC7V,EAAuB+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAEpDogE,KAAkBt4E,MAAa,sCAC3CjuC,KAAuBU,QAAS,CAAEV,cACtBwmH,KAAsBv4E,MAAa,2CAChD,CAACjuC,EAAiBsb,MAAuB5a,QAAS,CAAEV,UAASsb,YAChDmrG,KAAyBx4E,MAAa,8CACnD,CAACjuC,EAAiBmmD,MAAwBzlD,QAAS,CAAEV,UAASmmD,yLCpBvD,MAAMrB,KAAO7W,MAAa,4CAA6C,MAAQvtC,QAAS,CAAErO,QAAQ,MAC5F0yD,KAAQ9W,MAAa,6CAA8C,MAAQvtC,QAAS,CAAErO,QAAQ,MCD9F68C,EAAsB,CAC/B78C,QAAQ,kBCCZ,MAAMq0H,KAA0Bt3E,MAC9BF,KAEAG,MAAG+V,EAAoBl5B,MAAUs4F,SAAM,GAAIt4F,EAAO,CAChD75B,QAAQ,MACR,EAGFg9C,MAAG+V,EAAqBl5B,MAAUs4F,SAAM,GAAIt4F,EAAO,CACjD75B,QAAQ,MAMN,SAAUi9C,EAAQpjB,EAA0BtrB,GAChD,OAAO8lH,EAAwBx6F,EAAOtrB,EACxC,gBCpBO,MAAM+jH,KAAiBn1E,MAAe8V,KAAgBp5B,GAASA,EAAMy6F,kBAE/DC,KAA4Bp3E,MACrCm1E,EACAz4F,GAASA,EAAM75B,qTCFZ,MAAMw0H,KAAmB54E,MAAa,wCAC5C7V,KAA6B13B,QAAS,CAAE03B,YAC5B0uF,KAAuB74E,MAAa,6CACjD,CAAC7V,EAAwB9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YACpDyrG,KAA0B94E,MAAa,gDACpD,CAAC7V,EAAwB+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAErD6gE,KAAmB/4E,MAAa,wCAC5C7V,KAA6B13B,QAAS,CAAE03B,YAC5B6uF,KAAuBh5E,MAAa,6CACjD,CAAC7V,EAAwB9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YACpD4rG,KAAyBj5E,MAAa,gDACnD,CAAC7V,EAAwB+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAErDghE,KAAmBl5E,MAAa,uCAC5Cm5E,KAAuB1mH,QAAS,CAAE0mH,cACtBC,KAAuBp5E,MAAa,4CACjD,CAACm5E,EAAiB9rG,MAAuB5a,QAAS,CAAE0mH,UAAS9rG,YAChDgsG,KAA0Br5E,MAAa,+CACpD,CAACm5E,EAAiBjhE,MAAwBzlD,QAAS,CAAE0mH,UAASjhE,6aCXvD,MAAM5zC,EAAmC,CAC5Cg1G,qBAAsBC,UACtB7hE,iBAAkBqP,UAClBt8B,WAAY+uF,UACZvqG,MAAOwqG,UACPC,YAAaC,UACbjB,iBAAkBkB,UAClBjD,uBAAwBkD,KACxBlC,kBAAmBmC,wNCAvB,MAAMC,EAAU,uBAKT,IAAMC,EAAsB,MAA7B,MAAOA,EAEXz2H,YACU6mB,EACAzI,GADAle,KAAA2mB,QACA3mB,KAAAke,cACN,CAKJstF,WAEE,OAAOxrG,KAAK2mB,MAAME,IADLyvG,EAAU,SAC2B91H,QAChDkQ,KAAI8a,IACF,MAAMgrG,KAAW9rF,aAAUlf,GAC3BgrG,SAASjpH,QAAQo7F,IAAQ3oG,KAAKy2H,UAAU9tB,KACjC6tB,IAGb,CAEAE,kBAEE,OAAO12H,KAAK2mB,MAAME,IADNyvG,EAAU,eAExB,CAEAK,sBAAsBjwF,GAEpB,OAAO1mC,KAAK2mB,MAAMkC,IADLytG,EAAU,QACa5vF,EACtC,CAEAkwF,sBAAsBlwF,GAEpB,OAAO1mC,KAAK2mB,MAAMgC,KADL2tG,EAAU,QACc5vF,EACvC,CAEAmwF,sBAAsB7lH,GAEpB,OAAOhR,KAAK2mB,MAAMuB,OADLouG,EAAU,SAAStlH,IAElC,CAEQylH,UAAU9tB,GAEdA,EAAKmuB,WADY,cAAfnuB,EAAKouB,MACWjyE,IAAUkyE,IAAIxmH,MAAM,GACd,iBAAfm4F,EAAKouB,MACIjyE,IAAUmyE,OAAOzmH,MAAM,GAEvBs0C,IAAUoyE,SAAS1mH,MAAM,GAE7Cm4F,EAAKwuB,sBAAwBxuB,EAAKyuB,iBAClCzuB,EAAK0uB,oBAAsB1uB,EAAK2uB,eAChC3uB,EAAKyuB,iBAAmBzuB,EAAK4uB,uBAAyB5uB,EAAKyuB,iBAC3DzuB,EAAK2uB,eAAiB3uB,EAAK6uB,qBAAuB7uB,EAAK2uB,eACvD3uB,EAAK8uB,0BAA4B9uB,EAAK+uB,uBAAmD,IAA1B/uB,EAAKgvB,iBACpEhvB,EAAKivB,4BAA8BjvB,EAAKkvB,yBAAuD,IAA5BlvB,EAAKmvB,mBACxEnvB,EAAKovB,+BAAiCpvB,EAAKmuB,aAAehyE,IAAUkyE,IAAIxmH,MAAM,EAChF,CAKAwnH,mBAAmBtxF,GAEjB,OAAO1mC,KAAK2mB,MAAMkC,IADLytG,EAAU,aACa5vF,EACtC,CAEAuxF,mBAAmBvxF,GAEjB,OAAO1mC,KAAK2mB,MAAMgC,KADL2tG,EAAU,aACc5vF,EACvC,CAEAwxF,mBAAmBlnH,GAEjB,OAAOhR,KAAK2mB,MAAMuB,OADLouG,EAAU,cAActlH,IAEvC,CAIAmnH,gBAAgBzxF,GAEd,OAAO1mC,KAAK2mB,MAAMkC,IADLytG,EAAU,YACa5vF,EACtC,CAEA0xF,gBAAgB1xF,GAEd,OAAO1mC,KAAK2mB,MAAMgC,KADL2tG,EAAU,YACc5vF,EACvC,CAEA2xF,gBAAgBrnH,GAEd,OAAOhR,KAAK2mB,MAAMuB,OADLouG,EAAU,aAAatlH,IAEtC,CAIAsnH,sBAEE,OAAOt4H,KAAK2mB,MAAME,IADLyvG,EAAU,mBAEzB,CAEAiC,uBAAuB7xF,GAErB,OAAO1mC,KAAK2mB,MAAMkC,IADLytG,EAAU,mBACa5vF,EACtC,CAEA8xF,uBAAuB9xF,GAErB,OAAO1mC,KAAK2mB,MAAMgC,KADL2tG,EAAU,mBACc5vF,EACvC,CAEA+xF,uBAAuBznH,GAErB,OAAOhR,KAAK2mB,MAAMuB,OADLouG,EAAU,oBAAoBtlH,IAE7C,CAAC/P,SAAAjB,KAAA,mBAAAkB,iBAjHUq1H,GAAsBt3H,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAtBytG,EAAsBxtG,QAAtBwtG,EAAsBvtG,UAAAC,WAHrB,gBAGDstG,CAAsB,uLCqd5B,MAAMmC,EAAU,CAxcW,MAA5B,MAAOC,EACT74H,YAAoBspB,EACRwvG,EACA1rE,EACA2rE,GACAnwH,GACAghD,IALQ1pD,KAAAopB,YACRppB,KAAA44H,oBACA54H,KAAAktD,gBACAltD,KAAA64H,2BACA74H,KAAA0I,UACA1I,KAAA0pD,mBAGZ1pD,KAAA84H,6BAA4BxvG,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOusG,SAAoB,EAC3BrsG,KAAUva,IAAUlP,KAAK64H,wBAAwBnC,kBAAkBl2H,QAC/DkQ,KAAIizG,GAASmS,cAA4B,CAAEnS,WAAO,EAC9Ch6F,KAAWC,MAASC,MAAGisG,WAAyB,CAAElsG,iBAKlE5pB,KAAA+4H,6BAA4BzvG,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOyvG,SAAc,EACrBvvG,KAAUva,IAAUlP,KAAK64H,wBAAwBrtB,WAAWhrG,QACxDkQ,KAAIuoH,GAAwBD,cAAsB,CAAEC,0BAAsB,EACtEtvG,KAAWC,MAASC,MAAGmvG,WAAmB,CAAEpvG,iBAK5D5pB,KAAAqjE,yBAAwB/5C,MACpB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO+5C,SAAyB,EAChC75C,KAAUva,IAAUlP,KAAK44H,kBAAkB5yF,oBAAoB92B,GAAOF,QAAQ+2B,aAAavlC,QACvFkQ,KAAIw1B,GAAWo9B,cAAiC,CAAEp9B,aAAS,EACvDvc,KAAWC,MAASC,MAAGy5C,WAA8B,CAAE15C,iBAMvE5pB,KAAAk5H,6BAA4B5vG,MACxB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO+5C,aAA6B,EACpC75C,KAAUva,IAAUlP,KAAK44H,kBAAkB5yF,oBAAoB92B,GAAOF,QAAQ0pD,cAAcl4D,QACxFkQ,KAAIw1B,GAAWo9B,cAAiC,CAAEp9B,aAAS,EACvDvc,KAAWC,MAASC,MAAGy5C,WAA8B,CAAE15C,iBAKvE5pB,KAAAm5H,mBAAkB7vG,MACd,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOwsG,SAAkB,EACzBtsG,KAAUva,IAAUlP,KAAKktD,cAAc5qB,cAAcpzB,GAAOF,QAAQV,SAC/D9N,QACGipB,KAAWud,GAAe,CACtB+uF,UACAA,cAA0B,CAAE/uF,kBAC/B,EACDrd,KAAWC,MAASC,MAAGksG,WAAuB,CAAEnsG,gBAOhE5pB,KAAAo5H,0BAAyB9vG,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOyvG,0BAA+B,EACtCvvG,KAAUva,IAAUlP,KAAK64H,wBAAwBlC,sBAAsBznH,GAAOF,QAAQ03B,OACjFlmC,QACGkQ,KAAI+jD,GAAWukE,+BAAuC9pH,GAAOF,QAAQ03B,MAAO+tB,KAAQ,EACpF9qC,KAAWC,MAASC,MAAGmvG,4BAAoC9pH,GAAOF,QAAQ03B,MAAO9c,SAKjG5pB,KAAAq5H,iCAAgC/vG,MAC5B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOyvG,iCAAsC,EAC7CvvG,KAAWva,IAAW,CAClB3O,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBi3E,OAAmB7mH,GAAOF,QAAQ03B,MAAM9mB,SACxCo5G,YACH,EACDn9G,KAAI,IAAM7b,KAAK0pD,gBAAgBK,WAIvC/pD,KAAAs5H,0BAAyBhwG,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOyvG,0BAA+B,EACtCvvG,KAAUva,IAAUlP,KAAK64H,wBAAwBjC,sBAAsB1nH,GAAOF,QAAQ03B,OACjFlmC,QACGkQ,KAAI+jD,GAAWukE,+BAAuC9pH,GAAOF,QAAQ03B,MAAO+tB,KAAQ,EACpF9qC,KAAWC,MAASC,MAAGmvG,4BAAoC9pH,GAAOF,QAAQ03B,MAAO9c,SAMjG5pB,KAAAu5H,iCAAgCjwG,MAC5B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOyvG,iCAAsC,EAC7CvvG,KAAWva,IAAW,CAClB3O,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBi3E,OAAmB7mH,GAAOF,QAAQ03B,MAAM9mB,SACxCo5G,YACH,EACDn9G,KAAI,IAAM7b,KAAK0pD,gBAAgBK,WAIvC/pD,KAAAw5H,0BAAyBlwG,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOyvG,0BAA+B,EACtCvvG,KAAUva,IAAUlP,KAAK64H,wBAAwBhC,sBAAsB3nH,GAAOF,QAAQV,SACjF9N,QACGipB,KAAWgrC,GAAY,CACnBukE,+BAAuC9pH,GAAOF,QAAQV,QAASmmD,GAC/Dl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBi3E,OAAmB7mH,GAAOF,QAAQV,SAClC0qH,YACH,EACDrvG,KAAWC,MAASC,MAAGmvG,4BAAoC9pH,GAAOF,QAAQV,QAASsb,SAOnG5pB,KAAAy5H,oBAAmBnwG,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmwG,oBAA6B,EACpCjwG,KAAUva,IAAUlP,KAAK64H,wBAAwBV,gBAAgBjpH,GAAOF,QAAQ03B,OAC3ElmC,QACGipB,KAAWgrC,GAAY,CACnBilE,yBAAqCxqH,GAAOF,QAAQ03B,MAAO+tB,GAC3Dl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBr0C,eACH,EACDkf,KAAWC,MAASC,MAAG6vG,sBAAkCxqH,GAAOF,QAAQ03B,MAAO9c,SAK/F5pB,KAAA25H,oBAAmBrwG,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmwG,oBAA6B,EACpCjwG,KAAUva,IAAUlP,KAAK64H,wBAAwBT,gBAAgBlpH,GAAOF,QAAQ03B,OAC3ElmC,QACGipB,KAAWgrC,GAAY,CACnBilE,wBAAoCxqH,GAAOF,QAAQ03B,MAAO+tB,GAC1Dl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBr0C,eACH,EACDkf,KAAWC,MAASC,MAAG6vG,sBAAkCxqH,GAAOF,QAAQ03B,MAAO9c,SAK/F5pB,KAAA45H,oBAAmBtwG,MACf,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOmwG,oBAA6B,EACpCjwG,KAAUva,IAAUlP,KAAK64H,wBAAwBR,gBAAgBnpH,GAAOF,QAAQV,SAC3E9N,QACGipB,KAAWgrC,GAAY,CACnBilE,yBAAqCxqH,GAAOF,QAAQV,QAASmmD,GAC7Dl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBr0C,eACH,EACDkf,KAAWC,MAASC,MAAG6vG,sBAAkCxqH,GAAOF,QAAQV,QAASsb,SAOjG5pB,KAAA65H,qBAAoBvwG,MAChB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOuwG,qBAA+B,EACtCrwG,KAAUva,IAAUlP,KAAK64H,wBAAwBb,mBAAmB9oH,GAAOF,QAAQ03B,OAC9ElmC,QACGipB,KAAWgrC,GAAY,CACnBqlE,0BAAuC5qH,GAAOF,QAAQ03B,MAAO+tB,GAC7Dl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBq3E,UACA1rH,YACAA,eACH,EACDkf,KAAWC,MAASC,MAAGiwG,uBAAoC5qH,GAAOF,QAAQ03B,MAAO9c,SAKjG5pB,KAAA+5H,4BAA2BzwG,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOuwG,4BAAsC,EAC7Cx6G,KACItf,KAAK0I,OAAOpI,OAAOmK,iBACnBzK,KAAK0I,OAAOpI,OAAOmK,aACnBzK,KAAK0I,OAAOpI,OAAOujD,eAA4C,EAEnEhoC,KAAI,EAAE3M,GAAQ8qH,EAAmBC,EAAYC,MACzC,IAAuC,IAAnChrH,GAAOF,QAAQ03B,MAAM2tF,UAAoB,CACzC,IAAI8F,EAAoBD,EAAiB5pH,OAAOpD,GAAKA,EAAEktH,aAAatpH,KAAK5D,IAAKA,KAAMgC,GAAOF,QAAQ03B,MAAMzyB,KAErGkmH,EAAkB72H,OAAS,IAC3B62H,EAAkB5sH,QAAQL,IACtB,IAAIktH,GAAeltH,EAAEktH,aAAa9pH,OAAOpD,IAAKA,IAAKgC,GAAOF,QAAQ03B,MAAMzyB,IAWxEjU,KAAK0I,OAAO1H,SAASq5H,4BATgC,CACjDpmH,GAAI/G,EAAE+G,GACNjB,KAAM9F,EAAE8F,KACRqxC,KAAMn3C,EAAEm3C,KACRgwE,UAAWnnH,EAAEmnH,UACbiG,QAASptH,EAAEotH,QACXF,aAAwC,IAA1BltH,EAAEktH,aAAa92H,OAAe,CAAC02H,EAAkB/lH,IAAMmmH,GACrEn2E,qBAAsB/2C,EAAE+2C,uBAEmE,GAGnGjkD,KAAK0I,OAAO1H,SACRT,UAAoB,CAChBuK,QAAS,CACLstF,UAAWywB,YAAUxwB,GACrBC,YAAa/3F,sBAAgCg4F,KAC7CxxE,KAAM,oBAAsB7X,GAAOF,QAAQ03B,MAAM1zB,KAAO,mDACxD9B,MAAO,GACPsnF,YAAa,UAM7B,IAAI1L,EAAamtC,EAAW3pH,OAAOpD,GAAKA,EAAEqgF,uBAAyBr+E,GAAOF,QAAQ03B,MAAMzyB,IACpF64E,EAAWxpF,OAAS,GACpBwpF,EAAWv/E,QAAQL,IAUflN,KAAK0I,OAAO1H,SAASq5H,qBATkB,CACnCpmH,GAAI/G,EAAE+G,GACNjB,KAAM9F,EAAE8F,KACRq6E,aAAcngF,EAAE8F,KAChBs6E,gBAAiB0sC,EAAkB/lH,GACnCu5E,cAAetgF,EAAEsgF,cACjBC,qBAAsBvgF,EAAEugF,uBAG8C,EAGtF,KACH,EACD5xE,KAAI,IAAM7b,KAAK0pD,gBAAgBK,UAChC,CAAE/oD,UAAU,IAGnBhB,KAAAu6H,qBAAoBjxG,MAChB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOuwG,qBAA+B,EACtCrwG,KAAUva,IAAUlP,KAAK64H,wBAAwBZ,mBAAmB/oH,GAAOF,QAAQ03B,OAC9ElmC,QACGkQ,KAAK+jD,GAAYqlE,yBAAsC5qH,GAAOF,QAAQ03B,MAAO+tB,KAAQ,EACrF9qC,KAAWC,MAASC,MAAGiwG,uBAAoC5qH,GAAOF,QAAQ03B,MAAO9c,SAMjG5pB,KAAAw6H,4BAA2BlxG,MACvB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOuwG,2BAAqC,EAC5CrwG,KAAU,IAAM,CACZlpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBr0C,YACAA,eACH,EACDoR,KAAI,IAAM7b,KAAK0pD,gBAAgBK,WAIvC/pD,KAAAy6H,qBAAoBnxG,MAChB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAOuwG,qBAA+B,EACtCrwG,KAAUva,IAAUlP,KAAK64H,wBAAwBX,mBAAmBhpH,GAAOF,QAAQ0mH,SAC9El1H,QACGipB,KAAWgrC,GAAY,CACnBqlE,0BAAuC5qH,GAAOF,QAAQ0mH,QAASjhE,GAC/Dl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBr0C,YACAA,eACH,EACDkf,KAAWC,MAASC,MAAGiwG,uBAAoC5qH,GAAOF,QAAQ0mH,QAAS9rG,SAOnG5pB,KAAA06H,0BAAyBpxG,MACrB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8sG,SAAyB,EAChC5sG,KAAUva,IAAUlP,KAAK64H,wBAAwBP,sBAAsB93H,QACnEkQ,KAAIsjH,GAAoBqC,cAAiC,CAAErC,sBAAkB,EACzErqG,KAAWC,MAASC,MAAGwsG,WAA8B,CAAEzsG,iBAKvE5pB,KAAA26H,2BAA0BrxG,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8sG,2BAA2C,EAClD5sG,KAAUva,IAAUlP,KAAK64H,wBAAwBN,uBAAuBrpH,GAAOF,QAAQ03B,OAClFlmC,QACGkQ,KAAI+jD,GAAW4hE,gCAAmDnnH,GAAOF,QAAQ03B,MAAO+tB,KAAQ,EAChG9qC,KAAWC,MAASC,MAAGwsG,6BAAgDnnH,GAAOF,QAAQ03B,MAAO9c,SAM7G5pB,KAAA46H,kCAAiCtxG,MAC7B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8sG,kCAAkD,EACzD5sG,KAAU,IAAM,CACZlpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBs3E,OACAC,YACH,EACDx6G,KAAI,IAAM7b,KAAK0pD,gBAAgBK,WAIvC/pD,KAAA66H,2BAA0BvxG,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8sG,2BAA2C,EAClD5sG,KAAUva,IAAUlP,KAAK64H,wBAAwBL,uBAAuBtpH,GAAOF,QAAQ03B,OAClFlmC,QACGkQ,KAAI+jD,GAAW4hE,+BAAkDnnH,GAAOF,QAAQ03B,MAAO+tB,KAAQ,EAC/F9qC,KAAWC,MAASC,MAAGwsG,6BAAgDnnH,GAAOF,QAAQ03B,MAAO9c,SAM7G5pB,KAAA86H,kCAAiCxxG,MAC7B,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8sG,iCAAiD,EACxD5sG,KAAU,IAAM,CACZlpB,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBs3E,OACAC,YACH,EACDx6G,KAAI,IAAM7b,KAAK0pD,gBAAgBK,WAIvC/pD,KAAA+6H,2BAA0BzxG,MACtB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO8sG,2BAA2C,EAClD5sG,KAAUva,IAAUlP,KAAK64H,wBAAwBJ,uBAAuBvpH,GAAOF,QAAQ2kH,eAClFnzH,QACGipB,KAAWgrC,GAAY,CACnB4hE,gCAAmDnnH,GAAOF,QAAQ2kH,cAAel/D,GACjFl0D,UAAqB,CACjBuK,QAAS,CACLpL,KAAM,UACNE,QAAS,qBACTk/C,UAAW,OAGnBs3E,OACAC,YACH,EACD1sG,KAAWC,MAASC,MAAGwsG,6BAAgDnnH,GAAOF,QAAQ2kH,cAAe/pG,SAKrH5pB,KAAAg7H,wBAAuB1xG,MACnB,IAAMtpB,KAAKopB,UAAU5oB,QACjB+oB,MAAO0xG,uBAA6B,EACpCxxG,KAAUva,IAAUlP,KAAK44H,kBAAkB5yF,oBAAoB92B,GAAOF,QAAQ+2B,aAAavlC,QACvFkQ,KAAIw1B,GAAW+0F,4BAAqC/0F,IAAO,EACvDvc,KAAWC,MAASC,MAAGoxG,yBAAkCrxG,SA3brE,CAAC3oB,SAAAjB,KAAA,mBAAAkB,iBAPIy3H,GAAqB15H,MAAAkC,MAAAlC,MAAA6S,MAAA7S,MAAA6S,MAAA7S,MAAA8S,GAAA9S,MAAA2nE,MAAA3nE,MAAAi8H,MAAA,EAAAj6H,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAArB6vG,EAAqB5vG,QAArB4vG,EAAqB3vG,mBAArB2vG,CAAqB,MCxB3B,IAAMllG,EAAkB,MAAzB,MAAOA,EAAkBxyB,SAAAjB,KAAA,mBAAAkB,iBAAlBuyB,EAAkB,EAAAxyB,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAlBiO,IAAkBxyB,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAJvB9E,KAAYC,WAAW,kBAAmBC,KAC1CC,KAAcF,WAAW83G,aAGpBjlG,CAAkB,sTCVxB,MAAM6oB,KAAOC,MAAa,wCACpBC,KAAWD,MAAa,+CAA6CE,SACrEC,KAAcH,MAAa,kDACxCE,SCGaiO,cAAUC,GAAyC,CAC5DC,SAAU+4D,GAASA,EAAM1vG,KAGhBupC,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZLuxG,KAA6Bz9E,MAC/BF,KAEAG,MAAGy9E,EAAyB5gG,QACrBA,EACHP,WAAW,MACb,EAEF0jB,MAAGy9E,EAA6B,CAAC5gG,GAAS5Q,YAAK,IACxC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGy9E,EAAgC,CAAC5gG,GAASmpF,WAAYj5D,EAAQO,OAAO04D,EAAO,IACxEnpF,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAOisH,EAA2B3gG,EAAOtrB,EAC7C,gBCzBO,MAAMmsH,KAA+Bv9E,MAAe8V,KAAgBp5B,GAASA,EAAMq7F,uBAGtF3qE,UAAWtjB,EACXujB,eAAgBmwE,EAChBlwE,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAa6vE,GAEZtwG,KAAW+yB,MAAeu9E,EAA8B7gG,GAASA,EAAMzP,UACvEkP,KAAY6jB,MAAeu9E,EAA8B7gG,GAASA,EAAMP,WACxE+jB,KAAWF,MAAeu9E,EAA8B7gG,GAASA,EAAM5Q,+GCT7E,MAAMi0B,KAAW2+C,MAA6B,mBAExCgW,EAAW/mF,MAA+BqyB,MACnDh6B,KACCi8E,IACG,IAAIvjE,EAAOujE,EAAQt0E,EAAM5L,gBACzB2c,UAAwB,KAATA,EAAc,GAAK,IAC3BA,EAAKhsB,MAAM,GAAG,EAAE,GAGlB8nH,KAAsBx6E,MAC/BD,EACCp0C,GACUA,EAAOyqH,kBAAkBh6F,UAI3BqhG,KAA2Bz9E,MACpCg8E,KACAxB,EACA,CAACkD,EAAYtH,KACT,MAAMuH,EAAiD,GACvDnpG,cAAOC,KAAK2hG,GAAmBxjH,IAAIywC,IAC/B,MAAM4C,EAAcmwE,EAAkB/yE,GAChCiH,EAAUozE,EAAWlrH,OAAO+3C,GAAStE,EAAYq2E,aAAahqH,SAASi4C,EAAMp0C,KACnFwnH,EAAsBhrH,KAClB,CACIwgB,MAAO8yB,EAAY9yB,MACnBqpG,QAASv2E,EAAYu2E,QACrBF,aAAcr2E,EAAYq2E,aAC1BsB,iBAAkBtzE,EAAQ13C,IAAI23C,GAASA,EAAMr1C,MAC7CiB,GAAI8vC,EAAY9vC,GAChBogH,UAAWtwE,EAAYswE,UACvBpwE,qBAAsBF,EAAYE,qBAClCjxC,KAAM+wC,EAAY/wC,KAClBqxC,KAAMN,EAAYM,MACrB,GAEFo3E,0TCxCR,MAAMroE,KAAO7W,MAAa,gCAAiC,MAAQvtC,QAAS,CAAErO,QAAQ,MAChF0yD,KAAQ9W,MAAa,iCAAkC,MAAQvtC,QAAS,CAAErO,QAAQ,MAElFg7H,KAAqBp/E,MAAa,gDAC9CxW,KAA6B/2B,QAAS,CAAE+2B,kBAE5B61F,KAAyBr/E,MAAa,qDAClD3yB,GAAqBA,GAETiyG,KAA4Bt/E,MAAa,wDACrDrW,KAAmCA,aCRvBsX,EAAsB,CAC/B78C,QAAQ,EACRm7H,gBAAiB,KACjBC,yBAAyB,kBCL7B,MAAMC,KAAuBt+E,MAC3BF,KAEAG,MAAG+V,EAAoBl5B,MAAUs4F,SAAM,GAAIt4F,EAAO,CAChD75B,QAAQ,MACR,EAEFg9C,MAAG+V,EAAqBl5B,MAAUs4F,SAAM,GAAIt4F,EAAO,CACjD75B,QAAQ,MACR,EAEFg9C,MAAG+V,EAAwC,CAACl5B,EAAOxrB,SAC9CwrB,EACHshG,gBAAiB9sH,EAAQk3B,QACzB61F,yBAAyB,MACzB,EAEFp+E,MAAG+V,EAAkCl5B,QAChCA,EACHuhG,yBAAyB,MACzB,EAEFp+E,MAAG+V,EAAqC,CAACl5B,EAAO5Q,SAC3C4Q,EACHuhG,yBAAyB,EACzBnyG,MAAOA,MAML,SAAUg0B,EAAQpjB,EAA0BtrB,GAChD,OAAO8sH,EAAqBxhG,EAAOtrB,EACrC,gBCpCO,MAAM+jH,KAAiBn1E,MAAe8V,KAAgBp5B,GAASA,EAAMy7F,aAE/DniE,KAA2BhW,MACpCm1E,EACAz4F,GAASA,EAAM75B,QAGNs7H,KAAoBn+E,MAAem1E,EAAgBz4F,GAASA,EAAMshG,iBAElEC,KAA0Bj+E,MAAem1E,EAAgBz4F,GAASA,EAAMuhG,2mBCN9E,MAAMz/E,KAAOC,MAAa,kDACpBC,KAAWD,MAAa,wDAAsDE,SAC9EC,KAAcH,MAAa,2DACxCE,SAEawQ,KAAQ1Q,MAAa,4BAErB2/E,KAAwB3/E,MAAa,6CACjD7V,KAAsC13B,QAAS,CAAE03B,YACrCy1F,KAA4B5/E,MAAa,kDACtD,CAAC7V,EAAiC9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YAC7DwyG,KAA+B7/E,MAAa,qDACzD,CAAC7V,EAAiC+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAE9D4nE,KAAwB9/E,MAAa,6CACjD7V,KAAsC13B,QAAS,CAAE03B,YACrC41F,KAA4B//E,MAAa,kDACtD,CAAC7V,EAAiC9c,MAAsB5a,QAAS,CAAE03B,QAAO9c,YAC7D2yG,KAA+BhgF,MAAa,qDACzD,CAAC7V,EAAiC+tB,MAAuBzlD,QAAS,CAAE03B,QAAO+tB,cAE9D+nE,KAAwBjgF,MAAa,kDACjDjuC,KAAuBU,QAAS,CAAEV,cACtBmuH,KAA4BlgF,MAAa,uDACtD,CAACjuC,EAAiBsb,MAAuB5a,QAAS,CAAEV,UAASsb,YAChD8yG,KAA+BngF,MAAa,0DACzD,CAACjuC,EAAiBmmD,MAAwBzlD,QAAS,CAAEV,UAASmmD,cCrBjD/J,cAAUC,GAAyC,CAC5DC,SAAU+xE,GAAuBA,EAAoB/8G,UAG5C49B,EAAsBkN,EAAQI,gBAAgB,CACvD//B,UAAU,EACVkP,WAAW,EACXrQ,MAAO,OCZLgzG,KAAyBl/E,MAC3BF,KAEAG,MAAGk/E,EAAoBriG,GAASgjB,IAAY,EAE5CG,MAAGk/E,EAAmBriG,QACfA,EACHP,WAAW,MACb,EAEF0jB,MAAGk/E,EAAuB,CAACriG,GAAS5Q,YAAK,IAClC4Q,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,YACF,EAEF+zB,MAAGk/E,EAA0B,CAACriG,GAASy+F,0BAA2BvuE,EAAQO,OAAOguE,EAAsB,IAChGz+F,EACHzP,UAAU,EACVkP,WAAW,EACXrQ,MAAO,SAIT,SAAUg0B,EAAQpjB,EAA0BtrB,GAC9C,OAAO0tH,EAAuBpiG,EAAOtrB,EACzC,gBC3BO,MAAM4tH,KAAuBh/E,MAAe8V,KAAgBp5B,GAASA,EAAMhP,QAG9E0/B,UAAWtjB,EACXujB,eAAgB4xE,EAChB3xE,UAAWC,EACXC,YAAaC,GACbb,EAAQc,aAAasxE,GAEZ/xG,KAAW+yB,MAAeg/E,EAAsBtiG,GAASA,EAAMzP,UAC/DkP,KAAY6jB,MAAeg/E,EAAsBtiG,GAASA,EAAMP,WAChE+jB,KAAWF,MAAeg/E,EAAsBtiG,GAASA,EAAM5Q,mfCZrE,MAAM0yB,KAAOC,MAClB,0DACA,CAACjuC,EAAiB+hB,EAAgBC,EAAcC,MAA2BjiB,UAAS+hB,WAAUC,SAAQC,iBAG3FmsB,KAAcH,MACzB,+CACCvtC,KAAmCA,aAGzBwtC,KAAWD,MACtB,8CACCygF,KAA4BA,kBCRlB1gF,KAAOC,MAClB,gEACA,CAAC7qB,EAAwBpjB,MAAuBojB,iBAAgBpjB,aAGrDouC,KAAcH,MACzB,wEACC0gF,KAA+DA,gCAGrDzgF,KAAWD,MACtB,uEACC3yB,KAAgCA,WAGtBszG,KAAmC3gF,MAAa,wEAEhD4gF,KAA0C5gF,MACrD,+EACC6gF,KAAoEA,kCAG1DC,KAAuC9gF,MAClD,8EACC3yB,KAAgCA,WAGtBqjC,KAAQ1Q,MAAa,kEC9BrBD,KAAOC,MAClB,0DACC7qB,KAA8BA,oBAGpBgrB,KAAcH,MACzB,kEACC+gF,KAAoEA,mCAG1D9gF,KAAWD,MACtB,iEACC3yB,KAAgCA,WChBtB2zG,KAAyBhhF,MAAa,4DAA8Dmc,KAA8BA,+PCa/I,MAUa9a,KAAUF,MAVqB,CAC1C33C,SAAS,EACTkrH,QAAQ,EACRuM,SAAW,KACXjhE,OAAS,KACThsC,YAAa,GACbktG,iBAAkB,GAClB7zG,MAAO,KAIP4zB,EACAG,MAAGxrB,UAA8BqI,QAC5BA,EACHz0B,SAAS,MACT,EACF43C,MAAGxrB,iBAAqC,CAACqI,GAASxrB,cAAO,IACpDwrB,EACHz0B,SAAS,EACTkrH,QAAQ,EACRwM,iBAAkBzuH,EAClB4a,MAAO,OACP,EACF+zB,MAAGxrB,cAAkC,CAACqI,GAASwiG,mBAAY,IACtDxiG,EACHz0B,SAAS,EACTkrH,QAAQ,EACRz+F,WAAY,GACZ5I,MAAOozG,MChBEp/E,KAAUF,MAV+B,CACpD33C,SAAS,EACTkrH,QAAQ,EACRyM,WAAY,KACZC,qCAAqC,EACrCC,oCAAoC,EACpC3qG,SAAU,KACVrJ,MAAO,OAIP4zB,EACAG,MAAGjrB,UAAwC8H,QACtCA,EACHkjG,WAAW,KACX33H,SAAS,MACT,EACF43C,MAAGjrB,iBAA+C,CAAC8H,GAASyiG,iCAA0B,IACjFziG,EACHz0B,SAAS,EACTkrH,QAAQ,EACRyM,WAAYT,EACZrzG,MAAO,SACP,EACF+zB,MAAGjrB,cAA4C,CAAC8H,GAAS5Q,YAAK,IACzD4Q,EACHz0B,SAAS,EACTkrH,QAAQ,EACRyM,WAAY,GACZ9zG,MAAOA,MACP,EACF+zB,MAAGjrB,sCAAoE8H,QAClEA,EACHmjG,qCAAqC,MACrC,EACFhgF,MAAGjrB,6CAA2E,CAAC8H,GAAS4iG,mCAA4B,IAC/G5iG,EACHmjG,qCAAqC,EACrCC,oCAAoC,EACpC3qG,SAAUmqG,EACVxzG,MAAO,SACP,EACF+zB,MAAGjrB,0CAAwE,CAAC8H,GAAS5Q,YAAK,IACrF4Q,EACHmjG,qCAAqC,EACrCC,oCAAoC,EACpC3qG,SAAU,KACVrJ,MAAOA,MACP,EACF+zB,MAAGjrB,WAAyC8H,QACvCA,EACHz0B,SAAS,EACTkrH,QAAQ,EACRyM,WAAY,OClDH9/E,KAAUF,MAPyB,CAC9C33C,SAAS,EACTkrH,QAAQ,EACRnwF,IAAK,KACLlX,MAAO,OAIP4zB,EACAG,MAAG7qB,UAAkC0H,QAChCA,EACHz0B,SAAS,EACTkrH,QAAO,MACP,EACFtzE,MAAG7qB,iBAAyC,CAAC0H,GAAS8iG,oCAA6B,IAC9E9iG,EACHz0B,SAAS,EACTkrH,QAAQ,EACRnwF,IAAKw8F,EACL1zG,MAAO,SACP,EACF+zB,MAAG7qB,cAAsC,CAAC0H,GAAS5Q,YAAK,IACnD4Q,EACHz0B,SAAS,EACTkrH,QAAQ,EACRnwF,IAAK,KACLlX,MAAOA,MChCL4zB,EAAsD,CAC1Dkb,aAAc,MAGVi6D,KAA0Bj1E,MAC9BF,KAEAG,MAAGkgF,4BAAgE,CAACrjG,GAASk+B,mBAAY,IACpFl+B,EACHk+B,aAAcA,MCKL73C,EAAoD,CAC/D48G,iBAAkBl6D,EAClB05D,2BAA4Ba,EAC5BC,qBAAsBC,EACtBh3F,WDLI,SAAU4W,EAAQpjB,EAAQgjB,EAActuC,GAC5C,OAAOyjH,EAAwBn4F,EAAOtrB,EACxC,GCOM+uH,KAA6BzhC,MAA6C,oBAQnE0hC,KAAsBpgF,MACjCmgF,EACAzjG,GAASA,EAAMijG,kBAIJU,KAA0BrgF,MACrCogF,EACA1jG,GAASA,EAAMijG,kBAIJW,KAA6BtgF,MACxCogF,EACA1jG,GAASA,EAAMz0B,SAIJs4H,KAA4BvgF,MACvCogF,EACA1jG,GAASA,EAAMy2F,QAIJqN,KAA2BxgF,MACtCogF,EACA1jG,GAASA,EAAM5Q,OASJ20G,KAAgCzgF,MAC3CmgF,EACAzjG,GAASA,EAAMyiG,4BAIJuB,KAAoC1gF,MAC/CygF,EACA/jG,GAASA,EAAMkjG,YAIJe,KAAkC3gF,MAC7CygF,EACA/jG,GAASA,EAAMvH,UAIJyrG,KAAyC5gF,MACpDygF,EACA/jG,GAASA,EAAMmjG,qCAIJgB,KAAwC7gF,MACnDygF,EACA/jG,GAASA,EAAMojG,oCAIJgB,KAAuC9gF,MAClDygF,EACA/jG,GAASA,EAAMz0B,SAIJ84H,KAAsC/gF,MACjDygF,EACA/jG,GAASA,EAAMy2F,QAIJ6N,KAAqChhF,MAChDygF,EACA/jG,GAASA,EAAM5Q,OASJm1G,KAA0BjhF,MACrCmgF,EACAzjG,GAASA,EAAMujG,sBAIJiB,KAA8BlhF,MACzCihF,EACAvkG,GAASA,EAAMsG,KAcJm+F,KAAiCnhF,MAC5CihF,EACAvkG,GAASA,EAAMz0B,SAIJm5H,KAAgCphF,MAC3CihF,EACAvkG,GAASA,EAAMy2F,QAIJkO,KAA+BrhF,MAC1CihF,EACAvkG,GAASA,EAAM5Q,OAKJw1G,KAAgCthF,MAC3CmgF,EACAzrG,GAAcA,GAAcA,EAAWwU,YAI5Bq4F,KAAwCvhF,MACnDshF,EACAp4F,GAAcA,GAAcA,EAAW0xB,8OCzKlC,MAAMtF,KAAO7W,MAClB,uCACC+iF,KAA4BA,eAGlBjsE,KAAQ9W,MAAa,yCAErBy2B,KAAMz2B,MACjB,sCACCvtC,KAAoBA,aAGVuwH,KAA0BhjF,MACrC,6DACCijF,KAAuCA,4BAG7BC,KAAcljF,MAAa,06BChBjC,MAAMD,KAAOC,MAClB,gCACCvtC,KAAwBA,aAGd0tC,KAAcH,MACzB,wCACA,CAACjuC,EAAiByY,MAAyBzY,UAASyY,UAGzCy1B,KAAWD,MACtB,uCACCygF,KAA4BA,kBAGlB/vE,KAAQ1Q,MACnB,iCACCvtC,KAAuBA,aAGb0wH,KAAcnjF,MAAa,wCAE3BojF,KAAkBpjF,MAAa,8CAE/BqjF,KAAmBrjF,MAAa,+CAEhCsjF,KAAetjF,MAC1B,yCACA,CAACjuC,EAAiByY,MAAiBzY,UAASyY,UAGjC+4G,KAAqBvjF,MAChC,qDACA,CAACjuC,EAAiByY,MAAiBzY,UAASyY,UAGjCg5G,KAAsBxjF,MAAa,mDAEnCyjF,KAAmBzjF,MAC9B,+CACCygF,KAA4BA,kBAGlBiD,KAAc1jF,MACzB,wCACA,CAACjuC,EAAiByY,MAAiBzY,UAASyY,UAGjCm5G,KAAqB3jF,MAAa,iDAElC4jF,KAAkB5jF,MAC7B,6CACCygF,KAA4BA,kBAGlBoD,KAAqB7jF,MAChC,gDACA,CAACjuC,EAAiByY,MAAiBzY,UAASyY,UAGjCs5G,KAA4B9jF,MAAa,yDAEzC+jF,KAAyB/jF,MACpC,sDACCygF,KAA4BA,kBAGlBuD,KAAqBhkF,MAAa,iDAElCikF,KAAqBjkF,MAAa,iDAElCkkF,KAAuBlkF,MAAa,mDAEpCmkF,KAA2BnkF,MACtC,uDACCygF,KAA4BA,kBAGlB2D,KAA8BpkF,MACzC,0DACCqkF,KAA0CA,iBAGhCC,KAAuBtkF,MAClC,kDACC1qB,KAAuBA,aAGbivG,KAA2BvkF,MACtC,uDACCygF,KAA4BA,kBAGlB+D,KAA8BxkF,MAAa,2DAE3CykF,KAA8BzkF,MACzC,2DACA,CAAC1qB,EAAiBovG,MAAqCpvG,UAASovG,0BAGrDC,KAAkC3kF,MAC7C,gEACCygF,KAA4BA,kBAGlBmE,KAAqC5kF,MAChD,mEACC1qB,KAAuBA,aAGbuvG,KAAmB7kF,MAC9B,6CACA,CAAC8kF,EAA2B/yH,MAAuB+yH,oBAAmB/yH,aAG3DgzH,KAA0B/kF,MAAa,uDAEvCglF,MAAuBhlF,MAClC,mDACCygF,KAA4BA,kBAGlBwE,KAAqBjlF,MAChC,oDACC1qB,KAAuBA,8MC3G1B,MCTa4vG,EAAwD,CACnEC,sBDyBW9jF,EAAUF,MAjByB,CAC9C33C,SAAS,EACTkrH,QAAQ,EACR0Q,aAAa,EACbC,gBAAiB,GACjBvqG,WAAY,GAEZwqG,sBAAsB,EACtBC,qBAAqB,EACrBC,qBAAqB,EACrBC,oBAAoB,EACpBC,iBAAkB,KAElBr4G,MAAO,GACPs4G,SAAS,IAIT1kF,EACAG,MAAGwkF,SAAwB3nG,QACtBA,EACHz0B,SAAS,MACT,EACF43C,MAAGwkF,gBAA+B,CAAC3nG,GAASzT,WAAI,IAC3CyT,EACHz0B,SAAS,EACTkrH,QAAQ,EACR2Q,gBAAiB76G,EACjBsQ,WAAYtQ,EACZ6C,MAAO,OACP,EACF+zB,MAAGwkF,aAA4B,CAAC3nG,GAASwiG,mBAAY,IAChDxiG,EACHz0B,SAAS,EACTkrH,QAAQ,EACR55F,WAAY,GACZzN,MAAOozG,MACP,EACFr/E,MAAGwkF,gBAA+B3nG,QAC7BA,EACHmnG,aAAa,MACb,EACFhkF,MAAGwkF,UAAyB3nG,QACvBA,EACHz0B,SAAS,EACTkrH,QAAQ,EACR0Q,aAAa,EACbtqG,WAAY,GACZzN,MAAO,OACP,EACF+zB,MAAGwkF,oBAAmC3nG,QACjCA,EACH0nG,SAAS,MACT,EACFvkF,MAAGwkF,qBAAoC3nG,QAClCA,EACH0nG,SAAS,MACT,EACFvkF,MAAGwkF,uBAAsC3nG,QACpCA,EACHnD,cAAYqT,aAAUlQ,EAAMonG,gBAAgBtxH,OAAO++C,IAA8B,IAArBA,EAAMiB,iBAClE,EACF3S,MAAGwkF,uBAAsC3nG,QACpCA,EACHnD,WAAYmD,EAAMonG,oBAClB,EACFjkF,MACEwkF,gCACAA,yBACA3nG,QAAeA,EAAOunG,qBAAqB,MAAO,EAEpDpkF,MACEwkF,oCACAA,6BACA,CAAC3nG,GAASwiG,mBAAY,IACjBxiG,EACHunG,qBAAqB,EACrBC,oBAAoB,EACpBp4G,MAAOozG,MACP,EAEJr/E,MAAGwkF,gCAA+C3nG,QAC7CA,EACHunG,qBAAqB,EACrBC,oBAAoB,MACpB,EACFrkF,MAAGwkF,uCAAsD,CAAC3nG,GAAS3I,cAAO,IACrE2I,EACHunG,qBAAqB,EACrBC,oBAAoB,EACpBJ,gBAAiBpnG,EAAMonG,gBAAgBlxH,IAAI2+C,GACrCA,EAAM7qB,UAAY3S,EACb,IACFw9B,EACH+yE,oBAAqB/yE,EAAM+yE,oBAItB/yE,OAGX,EACF1R,MAAGwkF,yBAAwC3nG,QACtCA,EACHqnG,sBAAsB,MACtB,EACFlkF,MAAGwkF,6BAA4C,CAAC3nG,GAASwiG,mBAAY,IAChExiG,EACHqnG,sBAAsB,EACtBC,qBAAqB,EACrBl4G,MAAOozG,MACP,EACFr/E,MAAGwkF,gCAA+C,CAAC3nG,GAASomG,kBAAW,IAClEpmG,EACHqnG,sBAAsB,EACtBC,qBAAqB,EACrBG,iBAAkBrB,MAClB,EACFjjF,MAAGwkF,uBAAsC,CAAC3nG,GAAS3I,cAAO,IACrD2I,EACHnD,WAAYmD,EAAMnD,WAAW3mB,IAAI2+C,GAC3BA,EAAM7qB,UAAY3S,EACb,IACFw9B,EACHgzE,WAAYhzE,EAAMgzE,WAEVhzE,OCrIhBizE,kBCEW1kF,EAAUF,MAPqB,CAC1C4hF,eAAWv8F,EACXpiC,QAAQ,EACR4hI,iBAAkB,GAClB/C,wBAAwB,IAIxBhiF,EACAG,MAAG6kF,SAA8B,CAAChoG,GAAS8kG,gBAAS,IAC/C9kG,EACH75B,QAAQ,EACR4hI,iBAAkB,OAClBjD,UAAWA,MACX,EACF3hF,MAAG6kF,UAA+BhoG,QAC7BA,EACH75B,QAAQ,EACR4hI,iBAAkB,KAClBjD,eAAWv8F,MACX,EACF4a,MAAG6kF,QAA6BhoG,QAC3BA,EACH75B,QAAQ,EACR4hI,iBAAkB,UAClB,EACF5kF,MAAG6kF,gBAAqChoG,QACnCA,EACH75B,QAAQ,EACR4hI,iBAAkB,kBAClB,EACF5kF,MAAG6kF,4BAAiD,CAAChoG,GAASglG,6BAAsB,IAC/EhlG,EACHglG,uBAAwBA,ODzBf/oE,KAAiB+lC,MAAuC,cAIxDimC,KAA+B3kF,MAC1C2Y,EACAj8B,GAASA,EAAMknG,sBAIJgB,KAA2B5kF,MACtC2Y,EACAj8B,GAASA,EAAM8nG,kBAIJK,KAAgB7kF,MAC3B2kF,EACAjoG,GAASA,EAAMnD,YAGJurG,KAAqB9kF,MAChC2kF,EACAjoG,GAASA,EAAMonG,gBAAgBpxH,QAAQ21B,KAAK,CAACC,EAAGC,IAAMD,EAAE46E,UAAU98G,cAAgBmiC,EAAE26E,UAAU98G,eAAgB,EAAK,IAQxG2+H,IALAC,EAAqBhlF,MAChC6kF,EACAzzE,GAAUA,GAAUA,EAAO5rD,SAGhBu/H,EAAuB/kF,MAClC2kF,EACAjoG,GAASA,EAAMz0B,UAGJg9H,KAAsBjlF,MACjC2kF,EACAjoG,GAASA,EAAMy2F,QAGJ+R,KAAqBllF,MAChC2kF,EACAjoG,GAASA,EAAM5Q,OAGJq5G,KAA2BnlF,MACtC2kF,EACAjoG,GAASA,EAAMmnG,aAGJuB,KAAyBplF,MACpCilF,EACAC,EACA,CAAC/R,EAAQrnG,IAAUqnG,KAAYrnG,GASpBu5G,IANAC,EAA2BtlF,MACtC2kF,EACAjoG,GAASA,EAAM0nG,UAIJiB,EAAuBrlF,MAClC4kF,EACAloG,GAASA,EAAM75B,SAQJ0iI,IALAC,EAA4BxlF,MACvC4kF,EACAloG,GAASA,EAAMglG,yBAGJ6D,EAAsBvlF,MACjC4kF,EACAloG,GAASA,EAAM+nG,mBAQJgB,IALAC,EAA8B1lF,MACzC4kF,EACAloG,GAASA,EAAM8kG,YAGJiE,EAAkCzlF,MAC7C2kF,EACAjoG,GAASA,EAAMqnG,uBAGJ4B,KAAiC3lF,MAC5C2kF,EACAjoG,GAASA,EAAMunG,qBAOJ2B,IAJAC,EAAiC7lF,MAC5C2kF,EACAjoG,GAASA,EAAMsnG,sBAEJ4B,EAA2B5lF,MACtC2kF,EACAjoG,GAASA,EAAMynG,uGE5GX,SAAU2B,EAAqB/oH,GACnC,MAAO,CACLu9E,UAAW73F,eAAyBuoH,SACpCxwB,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,kBACP6V,KAAM,gDACNyxE,YAAa,MACb0N,cAAe,KAEfD,cAAe49B,mBAAgChpH,GAEnD,CAGM,SAAU4P,EAAem/C,GAC7B,MAAO,CACLlqE,KAAM,UACNE,QAAS,mCAAmCgqE,KAC5C9qB,UAAW,IAEf,uZCzBO,MAAMxC,KAAOC,MAAa,oBACpBC,KAAWD,MAAa,kCAAoC3yB,KAAuBA,WACnF8yB,KAAcH,MAAa,qCAAuCunF,KAA8BA,eAEhGC,KAAkBxnF,MAAa,qCAAsC,CAAC98B,EAAyBtY,MAA0BsY,WAAUtY,eACnI68H,KAAsBznF,MAAa,oCAAsC3yB,KAAuBA,WAChGq6G,KAAyB1nF,MAAa,uCAAyCvtC,KAA8BA,aAE7Gk1H,KAAgB3nF,MAAa,2CAA6Ct1C,KAA0BA,gBACpGk9H,KAAoB5nF,MAAa,gDAAkD3yB,KAAuBA,WAC1Gw6G,KAAuB7nF,MAAa,mDAAqDt1C,KAA0BA,gBAEnHo9H,KAAkB9nF,MAAa,qCAAuCt1C,KAA0BA,gBAChGq9H,KAAsB/nF,MAAa,oCAAsC3yB,KAAuBA,WAChG26G,KAAyBhoF,MAAa,uCAAyCt1C,KAA0BA,gBAEzGu9H,KAAiBjoF,MAAa,oCAAqC,CAAC98B,EAAyBtY,MAA0BsY,WAAUtY,eACjIs9H,KAAqBloF,MAAa,mCAAqC3yB,KAAuBA,WAC9F86G,KAAwBnoF,MAAa,sCAAwC98B,KAA+BA,imDCjBlH,MAAM68B,KAAOC,MAAa,mBACpBC,KAAWD,MAAa,uBAAyB3yB,KAAoBA,WACrE8yB,KAAcH,MAAa,0BAA4B21C,KAA6BA,eAEpFhpC,KAAO3M,MAAa,kBAAoB41C,KAA4BA,cACpEhpC,KAAW5M,MAAa,uBAAyB3yB,KAAoBA,WACrEw/B,KAAc7M,MAAa,2BAE3B8M,KAAS9M,MAAa,oBAAsBnG,KAA0BA,gBACtEkT,KAAa/M,MAAa,yBAA2B3yB,KAAoBA,WACzE2/B,KAAgBhN,MAAa,4BAA8BnG,KAA0BA,gBAErFuuF,KAAUpoF,MAAa,+BAAgC,CAAC7D,EAAuBC,MAA6BD,gBAAeC,mBAC3HisF,KAAcroF,MAAa,oCAAsC3yB,KAAoBA,WACrFi7G,KAAiBtoF,MAAa,wCAE9BuoF,KAAiBvoF,MAAa,8BAAgC41C,KAA0BA,cACxF4yC,KAAqBxoF,MAAa,mCAAqC3yB,KAAoBA,WAC3Fo7G,KAAwBzoF,MAAa,sDCrB3C,MAAM0oF,KAAc1oF,MACzB,6BACA,CAAC2oF,EAAkBl0H,MAAkBk0H,WAAUl0H,QAGpC+wE,KAAcxlC,MAAa,6BAE3B4oF,KAAkB5oF,MAAa,mCCJ/B6oF,KAAoB7oF,MAAa,6CACjC8oF,MAAwB9oF,MAAa,iDAAmD3yB,KAAgCA,WACxH07G,KAA2B/oF,MAAa,oDAAsDgpF,KAAuCA,oBAErIC,KAAsBjpF,MAAa,0CAA4Cx8B,KAAiBA,UAChG0lH,KAA2BlpF,MAAa,+CAAiDx8B,KAAiBA,UAE1GktC,KAAQ1Q,MAAa,yCCRrBD,KAAOC,MAClB,kCACChP,KAAsBA,YAGZmP,KAAcH,MACzB,0CACCmpF,KAA0DA,8BAGhDC,KAAappF,MACxB,0CACC3yB,KAAuBA,WAGbs/B,KAAO3M,MAClB,kCACA,CAAChP,EAAgBm4F,MAA0Dn4F,SAAQm4F,8BAGxEt8E,MAAc7M,MACzB,0CACA,CAAChP,EAAgBm4F,MAA0Dn4F,SAAQm4F,8BAGxEv8E,MAAW5M,MACtB,uCACC3yB,KAAoBA,WAGVg8G,MAAWrpF,MACtB,uCACCspF,KAA4EA,uCAGlEC,MAAkBvpF,MAC7B,+CACCspF,KAA4EA,uCAGlEE,KAAexpF,MAC1B,4CACC3yB,KAAoBA,WAGV4/B,KAASjN,MACpB,oCACCvU,KAA+BA,oCClD3B,MAAMg+F,KAAwBzpF,MAAa,6CACrC0pF,KAAkB1pF,MAAa,oCAAsCnuC,KAA2BA,iBAChG83H,KAAsB3pF,MAAa,yCAA2CnuC,KAA2BA,iBAEzG+3H,MAAa5pF,MAAa,+BAAiCluC,KAAsBA,YACjF+3H,MAAmB7pF,MAAa,qCAAsC,CAACwxE,EAAkB70E,MAAmB60E,UAAS70E,YACrHmtF,MAAsB9pF,MAAa,0CACnC+pF,MAAsB/pF,MAAa,yCAA2CgqF,KAA8BA,kBAC5GC,MAAiBjqF,MAAa,qCAE9BkqF,MAAiBlqF,MAAa,oCAAsCp8B,KAAwCA,WAE5G8sC,MAAQ1Q,MAAa,oDCTrBmqF,MAAiBnqF,MAAa,wCAE9BoqF,MAAwBpqF,MACnC,kDACAE,SAGWmqF,MAAwBrqF,MACnC,kDACAE,yBCXK,MAAM4M,MAAS9M,MACpB,wCACA,CAAChP,EAAgBwK,EAA0B8uF,GAAoB/sB,OAA0BvsE,SAAQwK,mBAAkB8uF,aAAW/sB,gBAGnHgtB,MAAYvqF,MACvB,6CACA,CAAChP,EAAgBusE,MAA0BvsE,SAAQusE,eAGxCvwD,MAAgBhN,MAC3B,gDACA,CAAChP,EAAgBwK,MAAgCxK,SAAQwK,sBAG9CgvF,MAAmBxqF,MAC9B,qDACChP,KAAsBA,YAGZ+b,MAAa/M,MACxB,6CACC3yB,KAAoBA,WAGVo9G,MAAgBzqF,MAC3B,kDACC3yB,KAAoBA,WCtBVyxE,MAAoB9+C,MAAa,wCAEjCg/C,MAA2Bh/C,MACtC,+CACCu/C,KAA0CA,qBAGhCR,MAAwB/+C,MACnC,4CACC3yB,KAAgCA,WAetB+xE,KAZAH,EAAqBj/C,MAChC,wCACCvrC,KAAkBA,SAGR0qF,EAA4Bn/C,MAAa,kDAEzCk/C,EAAyBl/C,MACpC,6CACC3yB,KAAgCA,YAGtB+xE,EAAqBp/C,MAAa,0CC3BlC0qF,MAA0B1qF,MAAa,kDAEvC2qF,MAAiC3qF,MAC5C,4DACAE,SAGW0qF,MAAiC5qF,MAC5C,4DACAE,wgBCTK,MAAM2qF,KAAU7qF,MAAa,yBACvB8qF,KAAS9qF,MAAa,wBAEtB+qF,KAAuB/qF,MAAa,iCAC5ChuC,KAA8BA,oBAEtBg5H,KAAgChrF,MAAa,2CACtD,CAAChuC,EAAwBstG,MAAyBttG,iBAAgBstG,cAEzD2rB,KAAyBjrF,MAAa,yCAC/C,CAAChuC,EAAwB5N,MAAuB4N,iBAAgB5N,YAEvD8mI,KAAiBlrF,MAAa,gCACvC,CAAC0pB,EAAoB41C,MAAyB51C,WAAU41C,cAE/C6rB,KAAenrF,MAAa,8BACpC1hC,KAAkBA,UAEV8sH,KAAoBprF,MAAa,oCACzC5G,KAA2BA,iBAEnBiyF,KAAqBrrF,MAAa,qCAC1CsrF,KAA8BA,mBAEtBC,KAAgBvrF,MAAa,gCACrCixB,KAA8BA,oBAEtBu6D,KAAuBxrF,MAAa,wCAC5CyrF,KAA4CA,qBAEpCC,KAAuB1rF,MAAa,uCAChDixB,KAA8BA,oBAElB06D,KAA8B3rF,MAAa,oDACnDyrF,KAA4CA,qBAEpCG,KAAqB5rF,MAAa,sCAC1C3yB,KAAqBA,WAEbw+G,KAAgB7rF,MAAa,iCAE7B8rF,KAAuB9rF,MAAa,wCAC5C5uB,KAAuBA,YAEf26G,KAAqB/rF,MAAa,sCAC1C3yB,KAAqBA,WAEb2+G,KAAkBhsF,MAAa,mCAE/BisF,KAAUjsF,MAAa,mCAC/BrD,KAAuBA,wQC/CrB,MAAMuvF,KAAgBlsF,MAAa,mCAAqC1hC,KAAkBA,UAEpF6tH,KAAiBnsF,MAAa,oCAAsChP,KAAsBA,YAC1Fo7F,KAAqBpsF,MAAa,yCAA2C3yB,KAAgCA,WAC7Gg/G,KAAwBrsF,MAAa,4CAA8C/O,KAA8BA,gBAEjHq7F,KAAiBtsF,MAAa,qCAC9BusF,KAAqBvsF,MAAa,yCAA2C3yB,KAAgCA,WAC7Gm/G,KAAwBxsF,MAAa,6CAErCysF,KAAkBzsF,MAAa,wUCNrC,MAAM0sF,KAAc1sF,MAAa,6BAE3B2sF,KAAqB3sF,MAChC,mCACCqE,KAAuBA,aAGbuoF,KAAkB5sF,MAC7B,iCACC3yB,KAAoBA,WAGVw/G,KAAS7sF,MACpB,sBACCvG,KAAiCA,aAGvBqzF,KAAgB9sF,MAC3B,8BACCqE,KAAuBA,aAGb0oF,KAAa/sF,MACxB,2BACC3yB,KAAoBA,WAGV2/G,KAAkBhtF,MAC7B,iCACC5uB,KAAoBA,YAGVu7B,KAAO3M,MAClB,oBACA,CAAChP,EAAgB1yB,MAAkB0yB,SAAQ1yB,UAGhCuuC,KAAc7M,MACzB,4BACA,CAAChP,EAAgB1yB,MAAkB0yB,SAAQ1yB,UAGhCsuC,KAAW5M,MACtB,yBACA,CAAChP,EAAgB3jB,MAAoB2jB,SAAQ3jB,WAGlC4/B,KAASjN,MACpB,sBACChP,KAAsBA,YAGZymE,KAAaz3D,MAAa,4BAE1Bw3D,KAAax3D,MAAa,6LCpDhC,IAAMitF,EAA+B,MAAtC,MAAOA,EACX1pI,YACU2pI,EACAx3G,GADAjyB,KAAAypI,kCACAzpI,KAAAiyB,WAEHjyB,KAAAo2G,WAAU9sF,MACf,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOmgH,YAA4B,EACnCjgH,KAAUva,GAAUlP,KAAKypI,gCAAgC5iH,IAAI3X,EAAOq+B,QAAQ/sC,QACxEkQ,KAAIqc,GAAY28G,iBAAoC38G,KAAS,EAC7DpD,KAAWoD,MAAYlD,MAAG6/G,gBAAmC38G,SAM9D/sB,KAAA2pI,aAAYrgH,MACjB,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOmgH,YAA4B,EACnCh5H,KAAIxB,GAAUA,IAAM,EACpBua,KAAUza,GAAWhP,KAAKypI,gCAAgCliG,KAAKv4B,EAAQu+B,OAAQv+B,EAAQ02H,0BAA0BllI,QAC7GkQ,KAAIqc,GAAY28G,iBAAoC16H,EAAQu+B,OAAQxgB,KAAS,EAC7EpD,KAAWoD,MAAYlD,MAAG6/G,cAAiC38G,SAM5D/sB,KAAA4pI,eAActgH,MACnB,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOmgH,gBAAgC,EACvCh5H,KAAIxB,GAAUA,EAAO22H,oCAAiC,EACtDp8G,KAAU4mC,GAAQrwD,KAAKypI,gCAAgC1uF,SAASsV,GAAM7vD,QAClEkQ,KAAIqc,GAAY28G,qBAAwCr5E,KAAK,EAC7D1mC,KAAWoD,MAAYlD,MAAG6/G,kBAAqC38G,SAMhE/sB,KAAA6pI,kBAAiBvgH,MACtB,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOmgH,mBAAmC,EAC1Ch5H,KAAIxB,GAAUA,IAAM,EACpBua,KAAUza,GAAW,CACnB06H,UAA6B16H,EAAQu+B,QACrChtC,UAAqB,CAAEuK,WAAS8rG,MAAuC,uBAMtE52G,KAAA8pI,sBAAqBxgH,MAC1B,IAAMtpB,KAAKiyB,SAASzxB,QAClB+oB,MAAOmgH,uBAAuC,EAC9Ch5H,KAAIxB,GAAUA,EAAO22H,oCAAiC,EACtDp8G,KAAUsgH,GAAa,CACrBxpI,UAAqB,CAAEuK,WAAS8rG,MAAuC,gBAAkBmzB,EAAU14H,YAtD3E,CAACpQ,SAAAjB,KAAA,mBAAAkB,iBAHpBsoI,GAA+BvqI,MAAAkC,KAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAgqI,EAAAlhH,IAAA,OAA/B0gH,EAA+BzgH,QAA/BygH,EAA+BxgH,UAAAC,WAF9B,gBAEDugH,CAA+B,qDCdrC,IAAKS,EAAZ,SAAYA,GACVA,WAAAC,QAAA,aACAD,IAAAE,QAAA,aACAF,IAAAG,aAAA,kBACAH,IAAAI,cAAA,mBACAJ,IAAAK,iBAAA,sBACAL,IAAAM,8BAAA,mCACAN,IAAAO,eAAA,oBACAP,IAAAQ,kBAAA,uBARUR,CASZ,CATA,CAAYA,GAAa,yxBCczB,MAAMzsF,EAAsB,CAC1BvjB,WAAW,EACXlP,UAAU,EACV2/G,aAAa,EACbC,YAAY,EACZ5jH,KAAM,GACN6C,MAAO,MAGHghH,KAAuBltF,MAC3BF,KAEAG,MAAGliC,UAAwB+e,SACtBA,GACHP,WAAW,MACX,EAEF0jB,MAAGliC,cAA2B,CAAC+e,IAAS5Q,aAAK,IACxC4Q,GACHP,WAAW,EACXlP,UAAU,EACVhE,KAAM,GACN6C,MAAOA,OACP,EAEF+zB,MAAGliC,iBAA8B,CAAC+e,IAASspG,iBAAS,IAC/CtpG,GACHP,WAAW,EACXlP,UAAU,EACVhE,KAAM+8G,GACNl6G,MAAO,SACP,EAEF+zB,MAAGliC,oBAAkC+e,SAChCA,GACHkwG,aAAa,EACbC,YAAY,MACZ,EAEFhtF,MAAGliC,wBAAsC+e,SACpCA,GACHkwG,aAAa,EACbC,YAAY,MACZ,EAEFhtF,MAAGliC,2BAAyC+e,SACvCA,GACHkwG,aAAa,EACbC,YAAY,MAIV,SAAU/sF,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAO07H,EAAqBpwG,GAAOtrB,GACrC,CAEO,MClDM27H,KAAqBntF,MAPN,CAC1B33C,SAAS,EACTkrH,QAAQ,EACRrnG,MAAO,KACPkhH,YAAa,KAIbttF,EACAG,MAAGhiC,oBAAkC6e,SAAeA,GAAOz0B,SAAS,MAAO,EAC3E43C,MAAGhiC,2BAAyC,CAAC6e,IAASswG,mBAAW,IAC5DtwG,GACHz0B,SAAS,EACTkrH,QAAQ,EACRrnG,MAAO,KACPkhH,YAAaA,OACb,EACFntF,MAAGhiC,2BAAyC,CAAC6e,IAAS5Q,aAAK,IAAa4Q,GAAO5Q,aAG3E,SAAUg0B,EAAQpjB,GAA0BtrB,IAChD,OAAO27H,EAAmBrwG,GAAOtrB,GACnC,2BChBO,MAAMw7C,KAAUC,KAA0B,CAC/CC,SAAWmgF,IAASA,GAAKjtH,OACzB+sC,cAAc,IAGVrN,EAAsBkN,EAAQI,gBAAgB,CAClD9L,WAAY,KACZgsF,eAAgB,KAEhBC,kBAAkB,EAClBC,aAAa,EACbjsF,UAAU,EACVksF,YAAY,EACZpgH,UAAU,IAGC6yB,KAAUF,MACrBF,KACAG,MAAGytF,KAA4B5wG,IAAUgjB,IAAa,EACtDG,MAAG0tF,iBAA+B7wG,SAC7BA,GACCywG,kBAAkB,EAClBjsF,WAAY,SAChB,EACFrB,MAAG0tF,qBAAmC7wG,SACjCA,GACH2wG,YAAY,EACZF,kBAAkB,EAClBlgH,UAAU,MACV,EACF4yB,MAAG0tF,wBAAsC,CAAC7wG,IAASomB,cAC1C8J,EAAQO,OAAOrK,GAAS,IAC1BpmB,GACHwwG,eAAgBpqF,GAChBqqF,kBAAkB,EAClBlgH,UAAU,MAEb,EACD4yB,MAAG0tF,YAA0B7wG,IACpBkwB,EAAQiR,UAAU,IACpBnhC,GACH0wG,aAAa,EACblsF,WAAY,SAEf,EACDrB,MAAG0tF,mBAAiC,CAAC7wG,IAASomB,cACrC8J,EAAQ8K,WAAW5U,GAAS,IAC9BpmB,GACH0wG,aAAa,MAEhB,EACDvtF,MAAG0tF,gBAA8B7wG,SAC5BA,GACH0wG,aAAa,MACb,EACFvtF,MAAG0tF,qBAAmC,CAAC7wG,IAAS7M,aACvC+8B,EAAQsqD,UAAUrnF,GAAQ,IAC5B6M,GACHwwG,eAAgB,IAAIxwG,GAAMwwG,eAAgBr9G,QAE7C,EACDgwB,MAAG0tF,UAAwB7wG,SACtBA,GACHykB,UAAU,MACV,EACFtB,MAAG0tF,cAA4B7wG,SAC1BA,GACHykB,UAAU,MACV,EACFtB,MAAG0tF,iBAA+B,CAAC7wG,IAAS3f,WACnC6vC,EAAQsqD,UAAUn6F,GAAM,IAC1B2f,GACHykB,UAAU,MAEb,EACDtB,MAAG0tF,YAA0B,CAAC7wG,IAAS+S,cAAM,IACxC/S,GACHwkB,WAAYzR,OACZ,EACFoQ,MAAG0tF,gBAA8B7wG,KAC/B,IAAIy6E,GAAqBz6E,GAAMk4B,IAAKtjD,QAAQorB,GAAMwkB,YAAc,EAChE,MAAO,IACFxkB,GACHwkB,WACEi2D,IAAWz6E,GAAMk4B,IAAIpvD,OACTk3B,GAAMk4B,IAAI,GACVl4B,GAAMk4B,IAAIuiD,QAE3B,EACDt3D,MAAG0tF,gBAA8B7wG,KAC/B,IAAI06E,GAAqB16E,GAAMk4B,IAAKtjD,QAAQorB,GAAMwkB,YAAc,EAChE,MAAO,IACFxkB,GACHwkB,WACEk2D,GAAU,EACE16E,GAAMk4B,IAAIl4B,GAAMk4B,IAAIpvD,OAAS,GAC7Bk3B,GAAMk4B,IAAIwiD,QCpGjBxqD,KAAUC,KAA8B,CACjDC,SAAU0gF,IAAYA,GAASr3H,GAC/B42C,cAAc,IAGZrN,EAAsBkN,EAAQI,gBAAgB,CAChD9L,WAAY,KAEZ/kB,WAAW,EACX8wB,YAAY,EACZ9L,UAAU,IAGRssF,KAAkB7tF,MACpBF,KAEAG,MAAG6tF,UAAuBhxG,SACnBA,GACHP,WAAW,MACb,EAEF0jB,MAAG6tF,cAA0B,CAAChxG,SAAc,IACrCA,GACHP,WAAW,MACb,EAEF0jB,MAAG6tF,iBAA6B,CAAChxG,IAAS03D,gBAAgBxnC,EAAQ8K,WAAW08B,GAAW,IACjF13D,GACHP,WAAW,MACb,EAEF0jB,MAAG6tF,YAAyBhxG,SACrBA,GACHuwB,YAAY,MACd,EAEFpN,MAAG6tF,gBAA6BhxG,SACzBA,GACHuwB,YAAY,MACd,EAEFpN,MAAG6tF,mBAA+B,CAAChxG,IAAS4b,iBAAiBsU,EAAQ1S,UAAU5B,GAAY,IACpF5b,GACHuwB,YAAY,MACd,EAEFpN,MAAG6tF,UAAuBhxG,SACnBA,GACHykB,UAAU,MACZ,EAEFtB,MAAG6tF,cAA0B,CAAChxG,SAAc,IACrCA,GACHykB,UAAU,MACZ,EAEFtB,MAAG6tF,iBAA8BhxG,SAC1BA,GACHykB,UAAU,MAIZ,SAAUrB,EAAQpjB,GAAQgjB,EAActuC,IAC1C,OAAOq8H,EAAgB/wG,GAAOtrB,GAClC,CChEA,MAUau8H,KAAmC/tF,MAVI,CAClDzjB,WAAW,EACXlP,UAAU,EACVk0B,UAAU,EACVysF,eAAe,EACf9hH,MAAO,KACPyhD,SAAS,EACT+tB,SAAU,OAIV57C,EACAG,MAAG+rF,UAA8BlvG,SAC5BA,GACHP,WAAW,MACX,EACF0jB,MAAG+rF,iBAAqC,CAAClvG,IAASkrG,gCAAwB,IACrElrG,GACH4+D,SAAUssC,GACVzrG,WAAW,EACXlP,UAAU,MACV,EACF4yB,MAAG+rF,gBAAoC,CAAClvG,IAAQ5Q,aAAK,IAChD4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,MAAOA,OAEP,EACF+zB,MAAG+rF,UAA8BlvG,SAC5BA,GACHykB,UAAU,MACV,EACFtB,MAAG+rF,cAAkClvG,SAChCA,GACHykB,UAAU,MACV,EACFtB,MAAG+rF,iBAAqClvG,SACnCA,GACHykB,UAAU,EACVosB,SAAS,MACT,EACF1tB,MAAG+rF,cAAkClvG,SAChCA,GACHkxG,eAAe,MACf,EACF/tF,MAAG+rF,kBAAsClvG,SACpCA,GACHkxG,eAAe,MACf,EACF/tF,MAAG+rF,qBAAyClvG,SACvCA,GACHkxG,eAAe,MCxDNC,KAAmCjuF,MAJM,CACpDqN,YAAY,IAIZvN,EACAG,MAAGiuF,YAA0CpxG,SACxCA,GACHuwB,YAAY,MACZ,EACFpN,MAAGiuF,mBAAiDpxG,SAC/CA,GACHuwB,YAAY,MACZ,EACFpN,MAAGiuF,gBAA8CpxG,SAC5CA,GACHuwB,YAAY,MCVHnN,MAAUF,MALK,CAC1BsB,WAAY,KACZ6sF,iBAAkB,OAIlBruF,EACAG,MAAGyT,iBAA+B,CAAC52B,IAAS0qG,YAAUl0H,UAAE,IACnDwpB,GACHqxG,iBAAkB3G,GAClBlmF,WAAYhuC,OACZ,EACF2sC,MAAGyT,iBAA+B52B,SAC7BA,GACHqxG,iBAAkB,KAClB7sF,WAAY,SCNH8sF,KAAqDnhF,KAAmC,CACnGC,SAAU75C,IAAaA,GAAUkD,GACjC42C,cAAc,IAGHrN,EAAmCsuF,EAAqBhhF,gBAAgB,CACnFihF,eAAgB,GAChB9xG,WAAW,EACXlP,UAAU,EACVnB,MAAO,OAGHoiH,KAAuBtuF,MAC3BF,KAEAG,MAAGsuF,uBAAyCzxG,SACvCA,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGsuF,2BAA4C,CAACzxG,IAAS5Q,aAAK,IACzD4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,aACA,EAEF+zB,MAAGsuF,8BAA+C,CAACzxG,IAAS+qG,qBAAqBuG,EAAqB7gF,OAAOs6E,GAAgB,IACxH/qG,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGsuF,WAA4B,IAAMzuF,IAIjC,SAAUI,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAO88H,EAAqBxxG,GAAOtrB,GACrC,CAGO,MAAQg8C,YAAWE,aAAyC0gF,EAAqBtgF,eAE3E0gF,GAAuBhhF,EACvBihF,GAA0B/gF,kBC5ChC,MAAMghF,MAA+CzhF,KAAgC,CAC1FC,SAAUyhF,IAAqBA,GAAkBvuH,OACjD+sC,cAAc,IAGHrN,EAAgC4uF,GAAkBthF,gBAAgB,CAC7EwhF,WAAY,KACZryG,WAAW,EACXlP,UAAU,EACVk0B,UAAU,EACVr1B,MAAO,OAGH2iH,KAAoB7uF,MACxBF,KAEAG,MAAGkmF,iBAAiC,CAACrpG,IAAS3f,YAAI,IAC7C2f,GACH8xG,WAAYzxH,OACZ,EAEF8iC,MAAGkmF,kBAAmCrpG,SACjCA,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGkmF,sBAAsC,CAACrpG,IAAS5Q,aAAK,IACnD4Q,GACHP,WAAW,EACXlP,UAAU,EACVk0B,UAAU,EACVr1B,aACA,EAEF+zB,MAAGkmF,yBAAyC,CAACrpG,IAASgT,iBAAiB4+F,GAAkBp3B,UAAUxnE,GAAY,IAC1GhT,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGkmF,kBAAmCrpG,SACjCA,GACHykB,UAAU,MACV,EAEFtB,MAAGkmF,sBAAsC,CAACrpG,IAAS5Q,aAAK,IACnD4Q,GACHykB,UAAU,EACVr1B,aACA,EAEF+zB,MAAGkmF,yBAA0CrpG,SACxCA,GACHykB,UAAU,MACV,EAEFtB,MAAGkmF,mBAAmC,IAAMrmF,IAIxC,SAAUI,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAOq9H,EAAkB/xG,GAAOtrB,GAClC,CAGO,MAAQk8C,UAASohF,EAAErhF,eAAcA,GAAKihF,GAAkB5gF,eAElDihF,EAAsBrhF,EACtBshF,GAAuBvhF,kBC7E7B,MAAM3N,GAAqC,CAChDh+B,WAAY,GACZW,MAAO,IAGHwsH,MAAyBjvF,MAC7BF,MAEAG,MAAGivF,qBAA0C,CAACpyG,IAASpsB,mBAAW,IAC7DosB,GACHhb,WAAYgb,GAAMhb,WAAWpP,SAAShC,IAAeosB,GAAMhb,WAAWlP,OAAOu8H,IAAoBA,KAAqBz+H,IAAe,IAAIosB,GAAMhb,WAAYpR,QAC3J,EAEFuvC,MAAGivF,gBAAqC,CAACpyG,IAASnsB,YAAYy+H,CAACz+H,IAAS4c,MAAM8hH,IAAiBvyG,GAAMra,aAChGqa,GACHra,MAAOqa,GAAMra,MAAM9R,IAAU0+H,GAAe,IAAKvyG,GAAMra,MAAO2sH,CAACz+H,IAAS,QACxE,EAEFsvC,MAAGivF,sBAA2C,CAACpyG,IAAS0e,UAAQ60E,YAAWif,MAAWtiG,cAAUlQ,OAC9FlI,OAAOC,KAAK2mB,IAAQ3rC,QAAQc,KAGtB2+H,GAAS7sH,MAAM9R,IAFfmsB,GAAMra,MAAM9R,KAES,EAAI4+H,SADvBlf,IACuBkf,EAAK94E,WAAO64E,GAAS7sH,MAAM9R,IAAS6qC,GAAO7qC,MAE3C4+H,EAAKC,eAAWF,GAAS7sH,MAAM9R,IAAS6qC,GAAO7qC,MAGjD,IAAI6qC,GAAO7qC,IAAO,GAGjD,IACK2+H,OACH,EAEFrvF,MAAGivF,yBAA8C,CAACpyG,IAAS+rG,oBAAY,IAClE/rG,GACHhb,WAAY+mH,OACZ,EAEF5oF,MAAGivF,oBAAyC,CAACpyG,IAASra,aAAK,IACtDqa,GACHra,MAAOA,OACP,EAEFw9B,MAAGivF,WAAgC,IAAMpvF,KAGrC,SAAUI,GAAQpjB,GAAQgjB,GAActuC,IAC5C,OAAOy9H,GAAuBnyG,GAAOtrB,GACvC,CCjDM,SAAU0uC,GAAQpjB,GAAOtrB,IAC7B,SAAO23D,MAAoC,CACzCsmE,gBAAiBC,EACjB5/F,WAAY6/F,EACZC,gBAAiBC,IAHnB,CAIG/yG,GAAOtrB,GACZ,6BCTM,SAAUs+H,GAA6BC,GAAoCC,GAAkC7xB,IACjH,OAAO8xB,GAAkBF,GAA0BC,GAAwB7xB,GAC7E,CAEM,SAAU+xB,GAAuBnd,GAA4Bod,GAA2BhyB,IAC5F,OAAO8xB,GAAkBld,GAAkBod,GAAiBhyB,GAC9D,CAEM,SAAUiyB,GAAkBvzF,IAChC,SAAIA,IAAeA,GAAYwzF,qBAAuBxzF,GAAYyzF,2BACb,IAA3CzzF,GAAYwzF,oBAAoBzqI,QAAgE,IAAhDi3C,GAAYyzF,yBAAyB1qI,MAGjG,CAEM,SAAU2qI,GAAuBC,GAAmC3/H,GAAwB5N,IAChG,MAAMwtI,GAAkC,IAAID,IACtCpmF,GAAQomF,GAAwB9+H,QAAQb,IAE9C,OAAI5N,KAAoB,IAAVmnD,GACZqmF,GAAgC19H,KAAKlC,KAC3B5N,KAAoB,IAAVmnD,IACpBqmF,GAAgCh9H,OAAO22C,GAAO,GAGzC,IAAIqmF,GACb,CAGA,SAASR,GAAkBS,GAAmB74C,GAAmBsmB,IAC/D,OAAiB,IAAbA,IAAa,EACRwyB,UAAMD,GAAS74C,KACA,IAAbsmB,IAAa,EACfqxB,eAAWkB,GAAS74C,IAEtB,IAAI64C,GACb,CAGM,SAAUE,GAAuB7zF,GAAmBu/C,GAA+Bu0C,IACvF,GAAoB,MAAhB9zF,GACF,OAGF,MAAM+zF,GAAqBD,IAAkC9zF,GAAY56B,eAEzE,IAAI4uH,GACJ,MAAMC,GAAY10C,GAAclpF,KAAKuiG,IAASA,GAAMriG,KAAOw9H,IAE3D,GAAIE,GAAW,CACb,MAAMC,MAAqBp5B,YAAQvb,GAAe,YAE5C40C,GAAoBC,GAAsBH,IAChDE,GAAkBE,QAAQr+H,KAAKi+H,GAAU19H,IACzC49H,GAAkBpyG,KAAOkyG,GAAUvsI,KAEnCssI,GAAO,CAAEp9H,MAAOu9H,GAAmBhwB,OAAQ,KAAMC,SAAU,IAE3DkwB,GAAUN,GAAME,GAClB,CACA,OAAOF,EACT,CAEA,SAASM,GAAUN,GAAkCE,IAEnD,MAAM9vB,GAA2B8vB,GAAmBF,GAAKp9H,MAAML,IAC3D6tG,IAAYA,GAASv7G,OAAS,GAEhCu7G,GAAStxG,QAAQkxG,KAEf,MAAMuwB,GAAgBH,GAAsBpwB,IAC5CuwB,GAAcF,QAAQr+H,QAAQg+H,GAAKp9H,MAAMy9H,QAASrwB,GAAMztG,IACxDg+H,GAAcxyG,KAAOiyG,GAAKp9H,MAAMmrB,KAAK23B,OAAO,IAAIsqD,GAAMt8G,QAGtD,MAAM8sI,GAAsC,CAC1C59H,MAAO29H,GACPpwB,OAAQ6vB,GACR5vB,SAAU,IAGZ4vB,GAAK5vB,SAASpuG,KAAKw+H,IAGnBF,GAAUE,GAASN,GAAkB,EAK3C,CAEM,SAAUO,GACdT,GACAhB,IAGA,MAAM0B,GAA2B,GAEjC1B,GAAyBlgI,QAAQgB,KAC/B,MAAM6gI,GAAuCC,GAA6BZ,GAAMlgI,IAC5E6gI,IACFE,GAA4BF,GAAUD,GAAwB,GAIlE,MAAM3gH,GAAM,IAAIo6F,IAAYumB,IAC5B,OAAO,IAAIvmB,IAAYp6F,GACzB,CAEA,SAAS8gH,GAA4Bb,GAAkCc,IACrEA,GAAgB9+H,KAAKg+H,GAAKp9H,MAAML,IAEhCy9H,GAAK5vB,SAAStxG,QAAQkxG,KACpB6wB,GAA4B7wB,GAAO8wB,GAAe,EAEtD,CAGM,SAAUC,GACdf,GACAljH,GACAtd,GACAwhI,IAGA,MAAMC,GAAkC,GAExC,GAAIjB,IAAQljH,IAAatd,IAA0BwhI,GAAgB,CAGjE,MAAME,MAAoBp6B,YAAQhqF,GAAW,kBACvC6jH,GAAuCC,GAA6BZ,GAAMxgI,IAG5EmhI,IACFQ,GAAsBF,GAAgBN,GAAUO,IAIlD,MAAME,GAAoB,IAAIjnB,IAAY6mB,IAG1CC,GAAeniI,QAAQke,KACrBA,GAAMowF,SAAWg0B,GAAkBtuF,IAAI91B,GAAMza,GAAE,EAEnD,CAEA,OAAO0+H,EACT,CAGA,SAASL,GAA6BZ,GAAkClgI,IACtE,IAAIof,GAAS,KACb,GAAI8gH,GAAM,CACR,GAAIA,GAAKp9H,MAAML,KAAOzC,GACpB,OAAOkgI,GAET,GAAIA,GAAK5vB,UAAY4vB,GAAK5vB,SAASv7G,OAAS,EAC1C,UAAWm7G,MAASgwB,GAAK5vB,SAEvB,GADAlxF,GAAS0hH,GAA6B5wB,GAAOlwG,IAC9B,OAAXof,GACF,OAAOA,EAIf,CACA,OAAOA,EACT,CAGA,SAASiiH,GACPx5E,GACAg5E,GACAO,IAEA,GAAIP,GAAU,CACZ,MAAMU,GAAgBH,GAAkBP,GAAS/9H,MAAML,IAEnD8+H,IACF15E,GAAO3lD,QAAQq/H,GAAcp/H,IAAI+a,KAC/B,MAAMskH,GAAgBC,EAAoBvkH,IAE1CskH,UAAcvzG,KAAO4yG,GAAS/9H,MAAMmrB,KACpCuzG,GAAcjB,QAAU,IAAIM,GAAS/9H,MAAMy9H,SAEpCiB,MAIPX,GAASvwB,UAAYuwB,GAASvwB,SAASv7G,OAAS,GAClD8rI,GAASvwB,SAAStxG,QAAQ0hI,KACxBW,GAAsBx5E,GAAQ64E,GAASU,GAAiB,EAG9D,CAGF,CAEM,SAAUM,GACdxB,GACAr4E,GACA1gB,GACAC,GACAu6F,GACAT,GACAU,IAEA,MAAMC,GAA2C,CAAE/+H,MAAO,KAAMutG,OAAQ,KAAMC,SAAU,IAExF,GAAI4vB,IAAQr4E,IAAU1gB,IAAcC,IAAeu6F,IAA0BT,GAAgB,CAE3F,MAAMY,GAAuB,IAAIznB,IAAYsnB,IACvCI,GAAoB,IAAI1nB,IAAY6mB,IACpCc,GAAwB,IAAI3nB,IAAYunB,IAGxCR,MAAyCp6B,YAAQn/C,GAAQ,kBAGzDo6E,GAAuB96F,GAAWC,IAElC86F,GAA4CpB,GAA6BZ,GAAM+B,IAAsBE,gBAG3G,GAAID,GAAe,CAEjB,MAAME,GAAmB9B,GAAsB4B,GAAcp/H,OAC7Ds/H,GAAiBC,UAAYP,GAAqB9uF,IAAIkvF,GAAcp/H,MAAML,IAC1E2/H,GAAiBE,SAAWN,GAAsBhvF,IAAIkvF,GAAcp/H,MAAML,IAC1E2/H,GAAiB7B,QAAU,CAAC2B,GAAcp/H,MAAML,IAChD2/H,GAAiBn0G,KAAOi0G,GAAcp/H,MAAMlP,KAC5CwuI,GAAiBv6E,OAAS06E,GAAsBL,GAAcp/H,MAAML,GAAI2+H,IAExES,GAAa/+H,MAAQs/H,GAGrBI,GAAqBJ,GAAiBv6E,OAAQk6E,IAE9CU,GAAcP,GAAeL,GAAcC,GAAsBC,GAAmBC,GAAuBZ,IAE3GsB,GAAyBb,GAAcT,IACvCuB,GAA0Bd,GAC5B,CACF,CAEA,OAAOA,EACT,CAEA,SAASW,GAAqB36E,GAAyBq5E,IACrDr5E,GAAO7oD,QAAQke,IAASA,GAAMowF,SAAW4zB,GAAeluF,IAAI91B,GAAMza,IACpE,CAEA,SAASggI,GACPvC,GACA2B,GACAC,GACAC,GACAC,GACAZ,IAEIlB,GAAK5vB,UACP4vB,GAAK5vB,SAAStxG,QAAQkxG,KAEpB,MAAM0yB,GAAetC,GAAsBpwB,GAAMptG,OACjD8/H,GAAaP,UAAYP,GAAqB9uF,IAAIk9D,GAAMptG,MAAML,IAC9DmgI,GAAaN,SAAWN,GAAsBhvF,IAAIk9D,GAAMptG,MAAML,IAC9DmgI,GAAarC,QAAU,IAAIsB,GAAa/+H,MAAMy9H,QAASrwB,GAAMptG,MAAML,IACnEmgI,GAAa30G,KAAO4zG,GAAa/+H,MAAMmrB,KAAK23B,OAAO,IAAIsqD,GAAMptG,MAAMlP,QACnEgvI,GAAa/6E,OAAS06E,GAAsBryB,GAAMptG,MAAML,GAAI2+H,IAG5D,MAAMV,GAAsC,CAC1C59H,MAAO8/H,GACPvyB,OAAQwxB,GACRvxB,SAAU,IAGZuxB,GAAavxB,SAASpuG,KAAKw+H,IAG3B8B,GAAqBI,GAAa/6E,OAAQk6E,IAG1CU,GAAcvyB,GAAOwwB,GAASoB,GAAsBC,GAAmBC,GAAuBZ,GAAiB,EAGrH,CAEA,SAASsB,GAAyBxC,GAAkCkB,IAClElB,UAAKp9H,MAAM+/H,gBAAkBzB,GAAkBlB,GAAKp9H,MAAML,IAAM2+H,GAAkBlB,GAAKp9H,MAAML,IAAI1N,OAAS,EAE1GmrI,GAAK5vB,SAAStxG,QAAQ0hI,KACpBR,GAAKp9H,MAAM+/H,gBAAkBH,GAAyBhC,GAASU,GAAiB,GAG3ElB,GAAKp9H,MAAM+/H,cACpB,CAGA,SAASF,GAA0BzC,IAGjC,OAFAA,GAAKp9H,MAAMggI,oBAAsB,GAEJ,IAAzB5C,GAAKp9H,MAAMu/H,WACbnC,GAAKp9H,MAAMggI,oBAAsB5C,GAAKp9H,MAAM+/H,eACrC3C,GAAKp9H,MAAMggI,sBAGpB5C,GAAKp9H,MAAMggI,qBAAuB5C,GAAKp9H,MAAM+kD,OAAO9lD,OAAOmb,KAA4B,IAAnBA,GAAMowF,UAAmBv4G,OAE7FmrI,GAAK5vB,SAAStxG,QAAQ0hI,KACpBR,GAAKp9H,MAAMggI,qBAAuBH,GAA0BjC,GAAO,GAG9DR,GAAKp9H,MAAMggI,oBACpB,CAEA,SAASP,GAAsBviI,GAAwBohI,IACrD,OAAOA,GAAkBphI,IACrBohI,GAAkBphI,IAAgBmC,IAAI+a,IAASukH,EAAoBvkH,KACnE,EACN,CAEA,SAASojH,GAAsBl+H,IAC7B,MAAO,IACFA,GACHylD,OAAQ,GACRw6E,WAAW,EACXC,UAAU,EACVO,eAAgB,EAChBC,oBAAqB,EACrBvC,QAAS,GACTtyG,KAAM,GAEV,CAEA,SAASwzG,EAAoBvkH,IAC3B,MAAO,IACFA,GACHmlH,WAAW,EACX/0B,UAAU,EACVizB,QAAS,GACTtyG,KAAM,GAEV,CCnUO,MAAMghB,EAAsB,CAC/Bz3C,SAAS,EACTkrH,QAAQ,EACRqgB,WAAW,EACX9jE,eAAgB,KAChB+jE,oBAAqB,KACrBtjI,uBAAwB,KACxBigI,wBAAyB,GACzBsD,2BAA4B,KAE5BC,kCAAmC,GACnCC,0BAA2B,GAE3BxB,uBAAwB,GACxBT,eAAgB,GAChB5H,eAAe,EAEf8J,mBAAmB,EACnBC,oBAAoB,GAGlBC,MAAoBn0F,MACtBF,KAEAG,MAAGm0F,WAA4Bt3G,SACxBA,GACHz0B,SAAS,EACTkrH,QAAQ,MACV,EACFtzE,MAAGm0F,UAA2Bt3G,SACvBA,GACHz0B,SAAS,EACTkrH,QAAQ,MACV,EACFtzE,MAAGm0F,wBAAwC,CAACt3G,IAASjsB,sBAAc,IAC5DisB,GACHvsB,uBAAwBM,OAC1B,EACFovC,MAAGm0F,0BAA0C,CAACt3G,IAASjsB,kBAAgB5N,cAAM,IACtE65B,GACHvsB,uBAAwBM,GACxB2/H,wBAAyB6D,GAAyCv3G,GAAM0zG,wBAAyB3/H,GAAgB5N,QACnH,EACFg9C,MAAGm0F,gBAAgC,CAACt3G,IAAS3f,YAAI,IAC1C2f,GACH82G,WAAW,EACX9jE,eAAgB3yD,GAAKiD,OACrByzH,oBAAqB12H,GAAK6/B,YAC1B82F,2BAA4B32H,GAAK22H,2BACjCtD,wBAAyB,OAC3B,EACFvwF,MAAGm0F,qBAAqC,CAACt3G,IAASmb,mBAAW,IACtDnb,GACH82G,WAAW,EACXC,oBAAqB57F,GACrB1nC,uBAAwB,SAC1B,EACF0vC,MAAGm0F,sBAAsC,CAACt3G,IAASqtG,qBAAa,IACzDrtG,GACH82G,WAAW,EACXzJ,cAAeA,OACjB,EACFlqF,MAAGm0F,wBAAwC,CAACt3G,IAASwtG,uBAAe,IAC7DxtG,GACH82G,WAAW,EACXpB,uBAAwBlI,GAAgB+F,oBACxC0B,eAAgBzH,GAAgBgG,yBAChCnG,cAAekK,GAAoC/J,IACnDkG,wBAAyB,OAE3B,EACFvwF,MAAGm0F,+BAA+C,CAACt3G,IAASwtG,uBAAe,IACpExtG,GACHi3G,kCAAmCzJ,GAAgB+F,oBACnD2D,0BAA2B1J,GAAgBgG,6BAE7C,EACFrwF,MAAGm0F,wBAAwC,CAACt3G,SAAe,IACpDA,GACH82G,WAAW,MACb,EACF3zF,MAAGm0F,iCAAiD,CAACt3G,IAASjsB,kBAAgBstG,gBAAQ,IAC/ErhF,GACH82G,WAAW,EACXpB,uBAAwB6B,GAA+Cv3G,GAAM01G,uBAAwB,CAAC3hI,IAAiBstG,QACzH,EACFl+D,MAAGm0F,kBAAkC,CAACt3G,IAASyrC,YAAU41C,gBAAQ,IAC1DrhF,GACH82G,WAAW,EACX7B,eAAgBsC,GAAyCv3G,GAAMi1G,eAAgBxpE,GAAU41C,QAC3F,EACFl+D,MAAGm0F,mBAAmC,CAACt3G,GAAOtrB,UACvCsrB,MACAgjB,MACL,EAEFG,MAAGm0F,WAA2B,CAACt3G,IAAQ0e,cAAM,IACtC1e,GACH82G,UAAWp4F,OACb,EAGFyE,MAAGm0F,iBAAkCt3G,SAC9BA,GACHo3G,oBAAoB,EACpBD,mBAAmB,MACrB,EACFh0F,MAAGm0F,wBAAyCt3G,SACrCA,GACHo3G,oBAAoB,EACpBD,mBAAmB,MACrB,EACFh0F,MAAGm0F,sBAAuCt3G,SACnCA,GACHo3G,oBAAoB,EACpBD,mBAAmB,MACrB,EACFh0F,MAAGq0F,MAAwC,CAACx3G,IAAQpQ,gBAAQ,IACrDoQ,GACHg3G,2BAA4BpnH,OAC9B,EACFuzB,MAAGq0F,MAAgDx3G,SAC5CA,GACH82G,WAAW,EACXE,2BAA4B,SAK9B,SAAU5zF,GAAQpjB,GAA0BtrB,IAC9C,OAAO2iI,GAAkBr3G,GAAOtrB,GACpC,CCnJA,MAQa+iI,MAAuBv0F,MARK,CACvC33C,SAAS,EACTkrH,QAAQ,EACRlmE,YAAY,EACZkxC,QAAS,GACTryE,MAAO,OAIP4zB,EACAG,MAAGu0F,QAAwC13G,SACtCA,GACHz0B,SAAS,MACT,EACF43C,MAAGu0F,QAA+C,CAAC13G,IAASshE,uBAAe,IACtEthE,GACHz0B,SAAS,EACTkrH,QAAQ,EACRh1B,QAASH,GACTlyE,MAAO,SACP,EACF+zB,MAAGu0F,QAA4C,CAAC13G,IAAS5Q,aAAK,IACzD4Q,GACHz0B,SAAS,EACTkrH,QAAQ,EACRh1B,QAAS,GACTryE,MAAOA,OACP,EACF+zB,MAAGu0F,QAAyC13G,SACvCA,GACHy2F,QAAQ,EACRlrH,SAAS,EACTk2F,QAAS,GACTryE,MAAO,SC1BEuoH,MAA8Bz0F,MAPf,CAC1B33C,SAAS,EACTkrH,QAAQ,EACRrnG,MAAO,KACPwoH,qBAAsB,KAItB50F,EACAG,MAAG/hC,6BAAoD4e,SAAeA,GAAOz0B,SAAS,MAAO,EAC7F43C,MAAG/hC,oCAA2D,CAAC4e,IAAS43G,4BAAoB,IACvF53G,GACHz0B,SAAS,EACTkrH,QAAQ,EACRrnG,MAAO,KACPwoH,qBAAsBA,OACtB,EACFz0F,MAAG/hC,oCAA2D,CAAC4e,IAAS5Q,aAAK,IAAa4Q,GAAO5Q,aAG7F,SAAUg0B,GAAQpjB,GAA0BtrB,IAChD,OAAOijI,GAA4B33G,GAAOtrB,GAC5C,CCKM,SAAU0uC,GAAQpjB,GAAOtrB,IAC7B,SAAO23D,MAAuB,CAC5B3a,OAAQmmF,EACRvO,UAAW1kH,EACX8yE,UAAWogD,EACX5M,yBAA0B6M,EAC1BC,WAAYC,GACZ7jD,cAAe9rE,GACf4vH,WAAYlkE,GACZmkE,gBAAiBC,EACjBC,4BAA6BC,EAC7B/3C,cAAeg4C,GACfC,0BAA2BC,IAX7B,CAYGz4G,GAAOtrB,GACZ,CACO,MAAM2uC,MAAW2+C,MAA6B,SAGxC02C,MAAqBp1F,MAChCD,GACArjB,IAASA,GAAMg4G,YAGJW,MAAsBr1F,MACjCo1F,GACA14G,MAAWA,GAAMqxG,kBAGNuH,MAA0Bt1F,MACrCo1F,GACA14G,IAASA,GAAMqxG,kBAIJwH,MAAyBv1F,MACpCD,GACArjB,IAASA,GAAM0xB,SAKff,eAAgBmoF,GAChBpoF,UAAWqoF,IAETlB,EAAmB7mF,aAAa6nF,IAEvBG,MAAgB11F,MAC3Bv9C,mBAA8B,UAC9B+yI,GACA,CAAC/lG,GAAQrT,KAAaqT,IAAUrT,GAASqT,KAG9BkmG,MAA4B31F,MACvCu1F,GACA74G,IAASA,GAAMywG,kBAGJyI,MAA2B51F,MACtCu1F,GACA74G,IAASA,GAAMzP,UAaJ4oH,KAVAC,EAAgC91F,MAC3Cu1F,GACA74G,IAASA,GAAM2wG,aAGJ0I,EAAuB/1F,MAClCu1F,GACA74G,IAASA,GAAM0wG,cAGJyI,EAA0B71F,MACrCu1F,GACA74G,IAASA,GAAMwkB,aAGJ80F,MAAwBh2F,MACnCu1F,GACCnnF,KACC,GAAIA,GAAO8+E,gBAAkB9+E,GAAO8+E,eAAe1nI,OAAS,EAC1D,OAAO4oD,GAAO8+E,iBAKP+I,MAAwBj2F,MACnCw1F,GACAK,GACA,CAACz5G,GAAU8kB,KAAeA,IAAc9kB,GAAS8kB,KAGtCg1F,MAAoBl2F,MAC/Bu1F,GACA74G,IAASA,GAAMykB,UAGJg1F,GAAe1mG,OAAmBuQ,MAC7Cw1F,GACCp5G,IAAaA,GAASqT,KAKZ2mG,MAAmCp2F,MAC9CD,GACArjB,IAASA,GAAMkrG,0BAGJyO,MAAuCr2F,MAClDo2F,GACA15G,IAASA,GAAMP,WAEJm6G,MAAmCt2F,MAC9Co2F,GACA15G,IAASA,GAAM5Q,OAGJyqH,MAAsCv2F,MACjDo2F,GACA15G,IAASA,GAAMzP,UAGJupH,MAA8Bx2F,MACzCo2F,GACA15G,IAASA,GAAM4+D,UAGJm7C,MAAsCz2F,MACjDo2F,GACA15G,IAASA,GAAMykB,UAGJu1F,MAAmC12F,MAC9Co2F,GACA15G,IAASA,GAAMkxG,eASJ+I,KANAC,EAAqC52F,MAChDo2F,GACA15G,IAASA,GAAM6wC,UAIJopE,EAAiC32F,MAC5CD,GACArjB,IAASA,GAAMq4G,8BASJ8B,KANAC,EAA2C92F,MACtD22F,GACAj6G,IAASA,GAAMuwB,aAIJ4pF,EAAe72F,MAC1BD,GACArjB,IAASA,GAAMspG,YAaJ+Q,KAVAC,EAAwBh3F,MACnC62F,GfnIyBn6G,IAAiBA,GAAMP,YeuIrC86G,EAAuBj3F,MAClC62F,GftIwBn6G,IAAiBA,GAAMzP,We0IpC8pH,EAAiB/2F,MAC5B62F,GfzI6Bn6G,IAAiBA,GAAMkwG,ce6IzCsK,MAAmBl3F,MAC9B62F,Gf1IsBn6G,IAAiBA,GAAMzT,MemJlCkuH,KALAC,EAAoBp3F,MAC/B62F,Gf7IuBn6G,IAAiBA,GAAM5Q,QeiJnCqrH,EAAgBn3F,MAC3Bk3F,GACAnqI,KACAA,KACAA,KACAA,KACA,CAACi5H,GAAW/1H,GAAqBE,GAAwBD,GAAiB1E,MACxE,MAAM6rI,IAAuBnnI,IAAmBC,KAA2B61H,GAAUhzH,KAAK2O,IACxFA,IAAUzR,GAAkB,QAAU,gBAAkB,SAAWA,IAAoCC,KACnGmnI,GAAoBD,GACxBA,GAAoB94H,WAAWvL,KAAKC,IAAaA,GAAUkD,KAAOlG,IAAuB,KAE3F,GAAIonI,IAAuBC,GAAmB,CAC5C,MAAMC,GAAiBD,GAAkBl5H,MAAMpL,KAAKiP,IAAQA,GAAK9L,KAAO3K,IAExE,OAAOA,GAAkB+rI,IAAkBA,GAAeC,WAAcF,GAAkBE,UAC5F,CAEA,OAAO,QAIEC,MAAiBz3F,MAC5Bk3F,GACAnqI,KACAA,KACAA,KACAA,KACA,CAACi5H,GAAW/1H,GAAqBE,GAAwBD,GAAiB1E,MACxE,MAAM6rI,IAAuBnnI,IAAmBC,KAA2B61H,GAAUhzH,KAAK2O,IACxFA,IAAUzR,GAAkB,QAAU,gBAAkB,SAAWA,IAAoCC,KACnGmnI,GAAoBD,GACxBA,GAAoB94H,WAAWvL,KAAKC,IAAaA,GAAUkD,KAAOlG,IAAuB,KAE3F,GAAIonI,IAAuBC,GAAmB,CAC5C,MAAMC,GAAiBD,GAAkBl5H,MAAMpL,KAAKiP,IAAQA,GAAK9L,KAAO3K,IAExE,OAAOA,GAAkB+rI,IAAkBA,GAAkBD,EAC/D,CAEA,OAAO,OAKEI,MAAmB13F,MAAeD,GAAUrjB,IAASA,GAAM03D,WAE3DujD,MAAgB33F,MAAe03F,GAAkBh7G,IAASA,GAAMuwB,YAChE2qF,MAAe53F,MAAe03F,GAAkBh7G,IAASA,GAAMP,WAC/D07G,MAAc73F,MAAe03F,GAAkBh7G,IAASA,GAAMykB,WAKzEiM,UAAW0qF,IAETtD,EAAsB9mF,aAAagqF,IAE1BK,MAA6B/3F,MAAe83F,GAAiB1jD,IAAaA,GAAU/rD,KAAK,CAACC,GAAGC,KAAMD,GAAEpzB,KAAK+uC,cAAc1b,GAAErzB,QAG1H27E,MAAwB7wC,MACnCD,GACArjB,IAASA,GAAMo0D,eAGJknD,MAAqBh4F,MAChC6wC,GACAn0D,IAASA,GAAM2yG,iBAGJ4I,MAAgBj4F,MAC3B6wC,GACAn0D,IAASA,GAAMgT,YAGJwoG,MAAqBl4F,MAChC6wC,GACAn0D,IAASA,GAAM8yG,iBAGJ2I,MAAoBn4F,MAC/Bg4F,GACAI,IAGWC,MAAuBr4F,MAClCg4F,GACAI,IAGWE,MAAgBt4F,MAC3Bi4F,GACA,EAAGzJ,iBAAiBA,IAAe,IAAKA,GAAYz1F,SAAUy1F,GAAWxxH,UAAY,IAAMwxH,GAAWvxH,WAG3Fs7H,MAAkBv4F,MAC7Bs4F,GACA57G,IAASA,IAASA,GAAM1c,QAGbw4H,MAAmBx4F,MAC9Bi4F,GACA1I,GAGWkJ,MAAsBz4F,MACjCi4F,GACA1I,IAGWmJ,MAAuB14F,MAClCi4F,GACAv7G,IAASA,GAAMP,WAGJw8G,MAAsB34F,MACjCi4F,GACAv7G,IAASA,GAAMzP,UAGJ2rH,MAAsB54F,MACjCi4F,GACAv7G,IAASA,GAAMykB,UAGJ03F,MAAsB74F,MACjCy4F,GACAF,GACA,CAACO,GAAgBppE,KAAmBopE,GAAeppE,KAQxCqpE,KALAC,EAA+Bh5F,MAC1C64F,GACAn8G,IAASA,IAASA,GAAMne,aAGbw6H,EAAiC/4F,MAC5Ck4F,GACAx7G,IAASA,GAAMhb,aAGJu3H,MAA4Bj5F,MACvCk4F,GACAx7G,IAASA,GAAMra,OAGJ62H,MAAoBl5F,MAC/Bm4F,GACAY,GACA,CAACI,GAAeC,MACd,IAAInL,GAAiB,GAErBkL,UAAc1pI,QAAQwD,KAChBmmI,GAAmB9mI,SAASW,GAAUkD,KAAOlD,IAAWmL,OAAO5Y,SACjEyoI,GAAiB,IACZA,MACAh7H,GAAUmL,OAAK,GAKjB6vH,GAAezoI,OAASyoI,GAAiB,KAIvCoL,MAAyBr5F,MACpCm4F,GACAY,GACAG,GACA,CAACC,GAAeG,GAAerL,MAE7B,IAAIsL,GAAsB,GAC1BJ,UAAc1pI,QAAQwD,KAElB,GAAIqmI,GAAchoI,QAAQ2B,GAAUkD,KAAM,EAAI,CAC5C,IAAIqjI,IAAY,EAChBvmI,IAAWmL,OAAO3O,QAAQwS,KACnBgsH,GAAel8E,KAAKmI,IAAKA,GAAE/jD,KAAO8L,GAAK9L,MAC1CqjI,IAAY,KAGZA,IAAavmI,IAAWmL,OAAO5Y,OAAS,IAC1C+zI,GAAsB,IACjBA,GACCtmI,IAGV,IAIGsmI,GAAoB/zI,UAASu8F,WAAOw3C,GAAqB,MAAQ,KAI/DE,MAAyBz5F,MACpCk5F,GACA72H,KACE,MAAMq3H,GAAoB,GAE1Br3H,UAAM5S,QAAQwS,IAAQy3H,GAAkBz3H,GAAK9L,IAAM8L,GAAK03H,YAAY/mI,IAAI+kG,IAAKA,GAAExhG,KACxEujI,KAIEE,MAAqB55F,MAChC64F,GACAX,GACA,CAAC2B,GAAOC,QACFD,KAASC,KACJ,EAACC,YAAQ,IAAIF,GAAMt7H,YAAY8pB,OAAQ,IAAIyxG,GAAOp4H,YAAY2mB,UAAW,EAAC0xG,YAAQF,GAAMz7H,MAAO07H,GAAOz3H,SAOtG23H,MAA2Bh6F,MACtCq4F,GACAU,GACA,CAACj7B,GAAWC,QAAag8B,YAAQ,IAAIj8B,IAAWz1E,OAAQ,IAAI01E,IAAU11E,SAG3D4xG,MAAsBj6F,MACjCy5F,GACAR,GACA,CAACO,GAAWz7B,QAAag8B,YAAQP,GAAWz7B,KAIjCm8B,MAAqBl6F,MAChCD,GACAo6F,IAAaA,GAAUtF,iBAGZ32F,MAAiB8B,MAC5Bk6F,GACAC,IAAaA,GAAUnN,aAQZoN,KALAC,EAAwBr6F,MACnCk6F,GACAC,IAAaA,GAAUlyI,UAGZmyI,EAAuBp6F,MAClCk6F,GACAC,IAAaA,GAAUhnB,SASZmnB,KANAC,EAAsBv6F,MACjCk6F,GACAC,IAAaA,GAAUruH,QAIZwuH,EAA8Bt6F,MACzCD,GACAo6F,IAAaA,GAAUjF,4BAGZ/2F,MAA0B6B,MACrCs6F,GACAH,IAAaA,GAAU7F,sBAQZkG,KALAC,EAAqCz6F,MAChDs6F,GACAH,IAAaA,GAAUlyI,UAGZuyI,EAAoCx6F,MAC/Cs6F,GACAH,IAAaA,GAAUhnB,SASZunB,KANAC,EAAmC36F,MAC9Cs6F,GACAH,IAAaA,GAAUruH,QAIZ4uH,EAAqB16F,MAChCD,GACArjB,IAASA,GAAMk4G,aAGJgG,MAAyB56F,MACpC06F,GACAh+G,IAASA,GAAM82G,WAGJqH,MAAuB76F,MAClC06F,GACAh+G,IAASA,GAAMz0B,SAGJ6yI,MAAsB96F,MACjC06F,GACAh+G,IAASA,GAAMy2F,QAGJ4nB,MAAsC/6F,MACjD06F,GACAh+G,IAASA,GAAMvsB,wBAGJ6qI,MAA+Bh7F,MAC1C06F,GACAh+G,IAASA,GAAM0zG,yBAGJ6K,MAAsCj7F,MACjD06F,GACAh+G,IAASA,GAAM01G,wBAGJ8I,MAAiDl7F,MAC5D06F,GACAh+G,IAASA,GAAMi3G,mCAGJwH,MAA8Bn7F,MACzC06F,GACAh+G,IAASA,GAAMi1G,gBAGJyJ,MAAyCp7F,MACpD06F,GACAh+G,IAASA,GAAMk3G,2BAGJyH,MAA8Br7F,MACzC06F,GACAh+G,IAASA,GAAMgzC,gBAGJ4rE,MAAgCt7F,MAC3C06F,GACAh+G,IAASA,GAAMg3G,4BAGJ6H,MAA2Bv7F,MACtCrzC,gBACCu/D,IAAYA,IAASwnE,2BAA6B,GAGxC8H,MAAmCx7F,MAC9C06F,GACAh+G,IAASA,GAAM+2G,qBAGJgI,MAAmBz7F,MAC9B06F,GACAh+G,IAASA,GAAMqtG,eAGJ2R,MAA8B17F,MACzC06F,GACAh+G,MAC8BA,GAAMi3G,mCAAqCj3G,GAAMi3G,kCAAkCnuI,OAAS,GAC9Fk3B,GAAMk3G,2BAA6Bl3G,GAAMk3G,0BAA0BpuI,OAAS,IAM7Fm2I,MAAiB37F,MAC5BrzC,gBACAA,YACA,CAACgwC,GAAau/C,KAAkB+3C,GAAyCt3F,GAAau/C,KAG3E0/C,MAA4B57F,MACvCrzC,gBACAA,YACAI,KACA,CAAC4vC,GAAau/C,GAAe/rF,KAA2B8jI,GAAyCt3F,GAAau/C,GAAe/rF,KAGlH0rI,MAAqB77F,MAChC47F,GACCE,IAAiBA,GAAavoI,MAAMlP,MAG1B03I,MAA8C/7F,MACzD27F,GACAV,GACA,CAACtK,GAAMhB,KAA6BsE,GAAoDtD,GAAMhB,KAGnFqM,MAAyDh8F,MACpE27F,GACAT,GACA,CAACvK,GAAMsL,KAAoChI,GAAoDtD,GAAMsL,KAI1FvK,MAAgC1xF,MAC3C27F,GACAhvI,eACAouI,GACAI,GACA,CAACxK,GAAMljH,GAAWhd,GAAgBkhI,KACzBsC,GAAgDtD,GAAMljH,GAAWhd,GAAgBkhI,KAI/EQ,MAA0BnyF,MACrC27F,GACAhvI,eACAA,iBACA6uI,GACAP,GACAE,GACAH,GACA,CAAC36B,GAAa/nD,GAAQ1gB,GAAYC,GAAau6F,GAAwBT,GAAgBU,KAC9E4B,GACL5zB,GAAa/nD,GAAQ1gB,GAAYC,GAAau6F,GAAwBT,GAAgBU,KAU/E3/F,KALAwpG,EAAoCl8F,MAC/C06F,GACAh+G,IAASA,GAAMi1G,iBAGJj/F,EAAmBsN,MAC9BD,GACArjB,IAASA,GAAMugE,gBAQJk/C,KALAC,EAAuBp8F,MAClCtN,GACAhW,IAASA,GAAMyhE,UAGJg+C,EAAwBn8F,MACnCD,GACArjB,IAASA,GAAMk4G,WAAWd,sBAGfuI,EAAuBr8F,MAClCD,GACArjB,IAASA,GAAMk4G,WAAWf,kDC9oBtB,SAAUpgF,EAA4BqY,GAC1C,MAAO,CACLlqE,KAAM,UACNE,QAAS,sBAAsBgqE,KAC/B9qB,UAAW,IAEf,CAGM,SAAUn0B,EAAYi/C,EAAmBhgD,GAC7C,MAAO,CACLlqB,KAAM,QACNE,QAAS,4BAA4BgqE,aAAqBhgD,EAAMngB,WAAWmgB,EAAMqF,aAErF,CAEM,SAAU2nF,EAAuChtC,GACrD,MAAO,CACLlqE,KAAM,UACNE,QAAS,GAAGgqE,IACZ9qB,UAAW,IAEf,sYChCO,MAAMs7F,KAAkB79F,MAAa,+BAAiCvG,KAAkFA,aAClJqkG,KAAyB99F,MAAa,uCAAyC+9F,KAA8BA,kBAC7GC,KAAsBh+F,MAAa,oCAAsC3yB,KAAuBA,WAChG4wH,KAAyBj+F,MAAa,iCAGtCk+F,KAAgBl+F,MAAa,2BAA6BvG,KAAgDA,aAC1G0kG,KAAuBn+F,MAAa,mCAAqCo+F,KAAgCA,oBACzGC,KAAoBr+F,MAAa,gCAAkC3yB,KAAqBA,WACxFixH,KAAsBt+F,MAAa,kCAAoCu+F,KAAkCA,iBACzGC,KAAqBx+F,MAAa,kCAGlCy+F,KAAyBz+F,MAAa,wCACtC0+F,KAAyB1+F,MAAa,wCAGtC2+F,KAAiB3+F,MAAa,2BAA6BpB,KAAqBA,WAChFggG,KAAqB5+F,MAAa,+BAAiC3yB,KAAuBA,WAC1FwxH,KAAwB7+F,MAAa,kCAAoCriB,KAAqCA,SAAUA,KAExHmhH,KAAiB9+F,MAAa,2BAA6BrG,KAA4BA,kBACvFolG,KAAqB/+F,MAAa,+BAAiC3yB,KAAuBA,WAC1F2xH,KAAwBh/F,MAAa,kCAAoCriB,KAAuCA,SAAUA,KAE1HshH,KAAsBj/F,MAAa,mCAAqC7F,KAAsCA,oBAC9G+kG,KAA0Bl/F,MAAa,wCAA0C3yB,KAAwBA,WACzG8xH,KAA6Bn/F,MAAa,sCAAwC1hC,KAAkBA,UAEpG8gI,KAAgBp/F,MAAa,4BAA8B7F,KAAsCA,oBACjGklG,KAAoBr/F,MAAa,iCAAmC3yB,KAAwBA,WAC5FiyH,KAAuBt/F,MAAa,oCAAsC1hC,KAAkBA,UAE5FihI,KAAuBv/F,MAAa,mCAAqC7F,KAAsCA,oBAC/GqlG,KAA2Bx/F,MAAa,wCAA0C3yB,KAAuBA,WACzGoyH,KAA8Bz/F,MAAa,2CAA6C1hC,KAAkBA,UAE1GohI,KAAqB1/F,MAAa,kCAAmC,CAACd,EAAoBC,MAAwBD,aAAYC,cAC9HwgG,KAAyB3/F,MAAa,uCAAyC3yB,KAAuBA,WACtGuyH,KAA4B5/F,MAAa,0CAA4CwuF,KAAiBA,UAEtGqR,KAAe7/F,MAAa,4BAE5B8/F,MAAqB9/F,MAAa,iCAAmCpB,KAAqBA,WAC1FmhG,KAAyB//F,MAAa,sCAAwC3yB,KAAuBA,WACrG2yH,KAA4BhgG,MAAa,0oBC5C/C,MAAMsB,KAAW2+C,MAA6B,WAExCggD,KAA0B1+F,MACrCD,EACArjB,GAASA,EAAM0wG,aAGJuR,KAAwB3+F,MACnCD,EACArjB,GAASA,EAAMkiH,oBAGJC,KAA4B7+F,MACvCrzC,iBACAgyI,EACA,CAACviH,EAAUwiH,IACFA,EAAmBp5I,OAAS,EAC/Bo5I,EAAmBhsI,IAAIM,GAAMkpB,EAASlpB,IAAKV,OAAOmlG,QAAW1yE,IAAN0yE,GACvD,IAIKmnC,KAA2B9+F,MACtCrzC,YACAA,gBACA,CAACirC,EAAY+E,KAGX,MAAMoiG,EAAgBnnG,EAAW5kC,KAAK2kG,GAAKA,EAAExhG,KAAOwmC,EAAYC,aAEhE,OAAKmiG,EAK8B,IAA5BA,EAAcC,WAAmB,IAAIpnG,GAC1C,IACKA,EACH,CACEzhC,GAAI4oI,EAAcE,cAClB/pI,KAAM6pI,EAAcC,WACpBpM,eAAgB,KAChB1wF,iBAAkB,KAClB+8F,cAAe,KACfzsF,YAAY,EACZwsF,WAAY,OAdTpnG,IAoBAsnG,KAA2Bl/F,MACtC8+F,EAA2BlnG,GAClBA,EAAWplC,OAAOpD,GAAqB,MAAhBA,EAAE4vI,aASvBG,IALAC,EAAiCp/F,MAC5CD,EACArjB,GAASA,EAAM2iH,qBAGJF,EAA+Bn/F,MAC1CD,EACArjB,GAASA,EAAM4iH,uBAGJC,KAAmCv/F,MAC9CrzC,YACAwyI,EACA,CAACjjD,EAAesjD,KAEd,GAAyB,IAArBA,EAAUh6I,OACZ,MAAO,GAIT,MAAMi6I,EAAOvjD,EAAc3qE,OAAO,CAAC3e,EAAKiX,KAASjX,EAAIiX,EAAI3W,IAAM2W,EAAKjX,GAAM,IAE1E,OAAO4sI,EAAU5sI,IAAIM,IAEnB,MAAM8pI,EAAc7vH,YAAYsyH,EAAKvsI,IAGrC,IAAI8rB,EAAI,EACR,MAAMN,GAAO,GACb,IAAI+iE,EAAWu7C,EAAYv7C,SAAWu7C,EAAYv7C,UAAW,EAE7D,KAAOA,GAAY,GAAG,CACpB,MAAMtmF,EAASskI,EAAKh+C,GAEpB/iE,GAAK/rB,KAAKwI,EAAO9W,MACjBo9F,EAAWtmF,EAAOsmF,SAAWtmF,EAAOsmF,UAAW,EAC/CziE,IAGU,IAANA,IACFyiE,GAAW,EACX/iE,GAAK/rB,KAAK,OAEd,CAEAqqI,SAAYt+G,KAAOA,GAAKghH,UAAUhzI,KAAK,KAEhCswI,GACR,GAIQ2C,KAAiC3/F,MAC5CD,EACArjB,GAASA,EAAMkjH,oBAGJC,KAAsB7/F,MACjCD,EACArjB,GAASA,EAAM6wC,SAGJuyE,KAA2B9/F,MACtCD,EACArjB,GAASA,EAAMqjH,uBAIJC,KAA4BhgG,MAAeD,EAAUrjB,GAASA,EAAMujH,wBACpEC,KAA0BlgG,MAAeD,EAAUrjB,GAASA,EAAMyjH,uBAClEC,KAA4BpgG,MAAeD,EAAUrjB,GAASA,EAAM2jH,wBACpEC,KAA0BtgG,MAAeD,EAAUrjB,GAASA,EAAM6jH,uBAClEC,KAAgCxgG,MAAesgG,EAAyBx9F,GAC5E,IAAI,IAAIiB,IAAIjB,GAASlwC,IAAIlD,GAAQ,CAACA,EAAK+wI,WAAe/wI,KAAQs0C,WAE1D08F,KAAiB1gG,MAAeD,EAAUrjB,GAASA,EAAMs6E,aACzD2pC,KAAY3gG,MAAeD,EAAUrjB,GAASA,EAAMkkH,QACpDC,KAAiB7gG,MAAeD,EAAUrjB,GAASA,EAAMokH,aACzDC,KAAuB/gG,MAAeD,EAAUrjB,GAASA,EAAMskH,gEChHrE,MAAMthG,EAAsB,CACjC0tF,aAAa,EACbwR,mBAAoB,GACpBrxE,SAAS,EACT0zE,wBAAwB,EAExBlB,sBAAuB,CACrB3nG,aAAc,KACd8oG,kBAAmB,MAIrB5B,qBAAsB,GACtBD,oBAAoB,EACpBO,mBAAoB,KAGpBK,wBAAwB,EACxBE,sBAAuB,KACvBE,wBAAwB,EACxBE,sBAAuB,GACvBvpC,aAAa,EACb4pC,OAAQ,KACRE,YAAa,KACbE,mBAAmB,mXCjDL7/I,MAAA,cAEIA,MAAA,mBAAAA,MAAA2e,IAAA,MAAAqhI,GAAAhgJ,QAAA,OAASA,MAAAggJ,GAAAhnG,qBAAoB,GAAEh5C,MAAA,gBAAUA,gCAMrDA,MAAA,GACIA,MAAA,+BACJA,gCAIQA,MAAA,GACIA,MAAA,WACIA,MAAA,qBACAA,MAAA,UAAMA,MAAA,yCAAmCA,UAEjDA,eAHsBA,MAAA,GAAAA,MAAA,sEA8BFA,MAAA,qBAEIA,MAAA,iBAAAgU,IAAAhU,MAAAy5G,IAAA,MAAAwmC,EAAAjgJ,QAAAqD,UAAA68I,EAAAlgJ,QAAAqD,UAAS88I,OAATngJ,MAAA,GAASogJ,2BAAAF,EAAAvsC,OAAAssC,GAA2DjgJ,MAAAgU,GAAA+4G,kBAAwB,GAGhG/sH,uCAFIA,MAAA,oCAAAqgJ,mEAhBZrgJ,MAAA,WAAAA,CAEkE,aACvCA,MAAA,GAA2BA,QAClDA,MAAA,aAAsBA,MAAA,GAA+BA,QAErDA,MAAA,YAAAA,CAAuD,qBAE/CA,MAAA,iBAAAgU,IAAA,MAAAisI,EAAAjgJ,MAAA2D,IAAAN,UAAA68I,EAAAlgJ,QAAAqD,UAASO,OAAT5D,MAAA,GAASsgJ,4BAAAL,EAAAlsC,eAAAksC,EAAAhsC,iBAAAgsC,EAAAjsC,kBAAAksC,EAAAtsC,UAC2C5zG,MAAAgU,GAAA+4G,kBAAwB,GAGhF/sH,QACAA,MAAA,EAAAugJ,EAAA,uBAMJvgJ,oFAlBAA,MAAA,UAAAA,MAAA,EAAAI,EAAAigJ,KAAAH,GAAArsC,UAAAxvG,OAAA,IAEuBrE,MAAA,GAAAA,MAAAigJ,GAAAlsC,gBACD/zG,MAAA,GAAAA,MAAA,GAAAigJ,GAAAjsC,kBAAA,KAMdh0G,MAAA,GAAAA,MAAA,oCAAAqgJ,IAICrgJ,cAAA,OAAAwgJ,EAAAC,mCAAAD,EAAAE,4CA1BrB1gJ,MAAA,sBAAAA,CAA6F,gCAA7FA,CAA6F,QAEjFA,MAAA,GAA8DA,QAClEA,MAAA,aACIA,MAAA,GACJA,QACAA,MAAA,aACIA,MAAA,4BACJA,UAGJA,MAAA,YACIA,MAAA,GAAA2gJ,EAAA,cAqBJ3gJ,kDA/BQA,MAAA,GAAAA,MAAA,oBAAAqhH,GAAApqG,cAAAipI,GAAAvsC,QAAAzwG,KAAA,IAEAlD,MAAA,GAAAA,MAAA,IAAAqhH,GAAApqG,cAAAipI,GAAAvsC,QAAAzwG,KAAA,KAGAlD,MAAA,GAAAA,MAAA,IAAAA,MAAA,IAAAkgJ,GAAArsC,UAAAxvG,OAAA,iBAOqBrE,MAAA,GAAAA,MAAA,UAAAkgJ,GAAArsC,qCAdjC7zG,MAAA,EAAA4gJ,GAAA,oDAA8C5gJ,MAAA,UAAAiJ,GAAA43I,cAAArtC,2CARtDxzG,MAAA,GACIA,MAAA,EAAA8gJ,EAAA,qBAAA9gJ,CAKe,EAAA+gJ,EAAA,yBAAA/gJ,OAsCnBA,4CA3CmBA,cAAA,QAAA2I,GAAAk4I,eAAA,IAAAl4I,GAAAk4I,cAAArtC,eAAAnvG,OAAArE,CAAmE,WAAAghJ,+BADtFhhJ,MAAA,EAAAihJ,EAAA,2EAAejhJ,MAAA,OAAAA,MAAA,IAAAqF,GAAAs+G,WAAA3jH,CAAuB,WAAAusH,+BAgDtCvsH,MAAA,GACIA,MAAA,GACJA,+BADIA,cAAA,IAAAkhJ,GAAAvgJ,QAAA,4BAGFX,MAAA,uEAJFA,MAAA,EAAAmhJ,EAAA,uCAGAnhJ,MAAA,EAAAohJ,EAAA,0BAAAphJ,0CAHeA,MAAA,OAAAA,MAAA,IAAAiH,GAAAo6I,QAAArhJ,CAAsB,WAAAshJ,KCzC1C,IAAMC,EAAsC,MAA7C,MAAOA,EAgBX1gJ,YACU4I,GACA2yB,IADAr7B,KAAA0I,UACA1I,KAAAq7B,yBAfDr7B,KAAA2/I,gBAA0B,EAI5B3/I,KAAA0/I,kCAAmC,EAElC1/I,KAAAC,YAAc,IAAIC,GAUtB,CAEJE,WACEJ,KAAK+9G,WAAa/9G,KAAK0I,OAAOpI,OAAOmK,gBACrCzK,KAAK4iH,UAAY5iH,KAAK0I,OAAOpI,OAAOmK,eACpCzK,KAAKsgJ,OAAStgJ,KAAK0I,OAAOpI,OAAOmK,eAEjCzK,KAAK0I,OAAO1H,SAASyJ,UAAkCzK,KAAKutC,SAE5DvtC,KAAK0/I,iCAAmC1/I,KAAKq7B,sBAAsBI,UAAU,qCAE7Ez7B,KAAK0I,OAAOlI,QACVF,MAAOmK,sBAAoC,EAC3ChK,KAAUT,KAAKC,cACjBS,UAAUwV,IAAiBlW,KAAKkW,cAAgBA,IAEhDlW,KAAK0I,OAAOpI,OAAOmK,cAAsCjK,QACvDC,KAAUT,KAAKC,cACfS,UAAUitB,KACV3tB,KAAK8/I,cAAgBnyH,IAEzB,CAEA8yH,SAASrnG,IAEP,QADiBA,GAAGsnG,aAAa,WAA2D,IAA/CtnG,GAAGsnG,aAAa,SAAStxI,QAAQ,UAEhF,CAEAuxI,QAAQx+I,IACN,OAAOA,GAAKoI,MAAM,KAAKq2I,KACzB,CAEA//I,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACnB,CAEAs+I,2BAA2BzsC,GAAgBG,IACzC/yG,KAAK0I,OAAO1H,SAAS6J,KAA8B+nG,GAAQ12F,IAAM6Z,6BAEjE/1B,KAAK0I,OAAO1H,SAASyJ,sBAA8CsoG,GAAS1oD,eAC5ErqD,KAAK0I,OAAO1H,SAASyJ,2BAAmDsoG,GAAS9hD,iBACnF,CAEAsuF,4BAA4BvgC,GAAwBjnE,GAA0B8oG,GAAsBl6C,GAClG3mG,KAAK0I,OAAO1H,SAAST,UAAoB,CAAEuK,QAAS9K,KAAK8gJ,cAAc9hC,GAAgBjnE,GAAkB8oG,GAAcl6C,KACzH,CAEA1uD,qBACEj4C,KAAK0I,OAAO1H,SAAST,UAAoB,CAAEuK,QAAS9K,KAAK+gJ,8BAC3D,CAEAD,cAAc9hC,GAAwBjnE,GAA0B8oG,GAAsBl6C,GACpF,MAAO,CACLvO,UAAW73F,eAAyBuoH,SACpCxwB,YAAa/3F,sBAAgCygJ,yBAC7C9vI,MAAO,cACP6V,KAAM,CAAEi4F,kBAAgB6hC,gBAAcl6C,YACtCnO,YAAa,UACb0N,cAAe,SACfD,cAAe2lC,YAAyC5rI,KAAKutC,OAAQwK,IAAkB,IAAO/3C,KAAK2/I,gBAEvG,CAEAoB,4BACE,MAAO,CACL3oD,UAAW73F,eAAyBuoH,SACpCxwB,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,wBACP6V,KAAM,kGACNyxE,YAAa,MACb0N,cAAe,KACfD,cAAe2lC,eAA4C5rI,KAAKutC,SAAQvtC,KAAK2/I,gBAEjF,CAAC1+I,SAAAjB,KAAA,mBAAAkB,mBA7FUs/I,GAAsCvhJ,MAAAkC,MAAAlC,MAAA6S,KAAA,EAAA7Q,SAAAjB,KAAA,UAAAi4G,EAAA52G,IAAA,MAAtCm/I,EAAsCl/I,UAAA,2CAAA2Q,OAAA,CAAAs7B,OAAA,SAAAoyG,eAAA,kBAAAp+I,MAAA,GAAAC,KAAA,EAAAC,OAAA,6gCAAAC,SAAA,SAAAC,GAAAC,OAAA,EAAAD,KDzBnD1C,MAAA,mBAAAA,CAA6B,wBAA7BA,CAA6B,UAEmEA,MAAA,qBAAeA,QACvGA,MAAA,oBAAAA,CAAiB,6BAETA,MAAA,EAAAgiJ,EAAA,gBAGJhiJ,YAGRA,MAAA,4BAEIA,MAAA,EAAAiiJ,EAAA,uCAIAjiJ,MAAA,GAAAkiJ,EAAA,yBAAAliJ,OA8Cc,GAAAmiJ,EAAA,yBAAAniJ,OAYlBA,mCAzEUA,MAAA,GAAAA,MAAA,gBAAA2C,GAAAk+I,eAAA,GAAAl+I,GAAAk+I,cAAArtC,eAAAnvG,QAIOrE,MAAA,GAAAA,MAAA,OAAA2C,GAAAk+I,eAAAl+I,GAAAk+I,cAAArtC,eAAAnvG,OAAA,GAOErE,MAAA,GAAAA,MAAA,OAAAA,MAAA,IAAA2C,GAAAm8G,YAAA9+G,CAAwB,WAAAoiJ,oeCYlCb,CAAsC,+GCF5C,IAAMc,EAAmC,MAA1C,MAAOA,EAAmCrgJ,SAAAjB,KAAA,mBAAAkB,iBAAnCogJ,EAAmC,EAAArgJ,SAAAjB,KAAA,UAAAwU,EAAAgR,IAAA,MAAnC87H,IAAmCrgJ,SAAAjB,KAAA,UAAAwU,EAAAiR,IAAA,UAbxCwG,KACAC,IACAq1H,KACAC,eAUKF,CAAmC,qSCnBzC,MAAMG,KAAkBllG,MAAa,+BAAiCvrC,KAAkBhC,QAAS,CAAEgC,SAC7F0wI,KAAanlG,MAAa,0BAA4BvrC,KAAkBA,QAExE2wI,KAASplG,MAAa,sBAEtBulC,KAAavlC,MAAa,0BAA4BvrC,KAAkBA,QACxE+wE,KAAcxlC,MAAa,4BAG3BqlG,KAAiBrlG,MAAa,gCAI9BslG,KAAqBtlG,MAAa,kCAAoCvrC,KAAkBA,QACxF8wI,KAA2BvlG,MAAa,0CACxCwlG,KAA+BxlG,MAAa,8CAAgDmiG,KAA0B1vI,QAAS0vI,KAC/HsD,KAAkCzlG,MAAa,kDAE/C0lG,KAAc1lG,MAAa,2BAA6BvrC,KAAkBA,QAE1EkxI,KAAoB3lG,MAAa,mCACjC4lG,KAAwB5lG,MAAa,uCAAyCmiG,KAA0B1vI,QAAS0vI,KACjH0D,KAA2B7lG,MAAa,2CAExC8lG,KAAqB9lG,MAAa,oCAElC+lG,KAAgB/lG,MAAa,0CAA4CluC,KAAsBA,YAE/Fk0I,KAA0BhmG,MACrC,gDACCimG,KAA4BA,kBAGlBC,KAAkBlmG,MAAa,gCAAiC,CAACjuC,EAAiBD,EAAiByN,MAAuBxN,UAAUD,SAAQyN,YAE5I4mI,KAAyBnmG,MAAa,wCAAyC,CAAChuC,EAAyBF,EAAiByN,MAAsBvN,iBAAgBF,SAAQyN,YAExK6mI,KAAmBpmG,MAC9B,kCAGWqmG,KAAmBrmG,MAC9B,kCAGWsmG,KAAiBtmG,MAC5B,+BAGWumG,KAAoBvmG,MAC/B,kCAGWwmG,KAAqBxmG,MAChC,oCAGWymG,KAAqBzmG,MAChC,oCAGW0mG,KAAgB1mG,MAAa,8BAAgC2mG,KAA0BA,2HC3DpG,MAAMC,KAAmBzlG,MACrBF,OAEAG,MAAGlzC,YAA2B+vB,GAASgjB,MAAY,EAEnDG,MAAGgB,KAAkC,CAACnkB,GAASxrB,cAAO,IAC/CwrB,EACHzsB,oBAAqBiB,EAAQgC,OAC/B,EAEF2sC,MAAGgB,KAA6B,CAACnkB,GAASxpB,SAAE,IACrCwpB,EACHlxB,eAAgB0H,MAClB,EAEF2sC,MAAGgB,IAAyBnkB,QACrBA,EACH4oH,OAAQ5oH,EAAM4oH,OAAS,MACzB,EAEFzlG,MAAGgB,KAA6B,CAACnkB,GAASxpB,SAAE,IACrCwpB,EACH6oH,eAAgBryI,MAClB,EAGF2sC,MAAGgB,KAAiCnkB,QAC7BA,EACH6oH,eAAgB,MAClB,EAEF1lG,MAAGgB,KAA8BnkB,QAC1BA,EACH6oH,eAAgB,SAClB,EAIF1lG,MAAGgB,KAA8B,CAACnkB,GAASxpB,SAAE,IACtCwpB,EACHxsB,gBAAiBgD,EACjB/C,uBAAwB+C,EAAK,KAAOwpB,EAAMvsB,uBAC1Cq1I,uBAAuB,MACzB,EAEF3lG,MAAGgB,KAAsCnkB,QAClCA,EACHxsB,gBAAiB,SACnB,EAEF2vC,MAAGgB,KAAoCnkB,QAChCA,EACH+oH,wBAAwB,MAC1B,EAEF5lG,MAAGgB,KAAwC,CAACnkB,QAAgB,IACrDA,EACH8oH,uBAAuB,EACvBC,wBAAwB,MAC1B,EAEF5lG,MAAGgB,KAA2CnkB,QACvCA,EACH8oH,uBAAuB,EACvBC,wBAAwB,MAC1B,EAEF5lG,MAAGgB,KAAqC,CAACnkB,GAASxpB,SAAE,IAC7CwpB,EACHxsB,gBAAiBgD,EAAK,KAAOwpB,EAAMxsB,gBACnCC,uBAAwB+C,MAC1B,EAEF2sC,MAAGgB,KAA2CnkB,QACvCA,EACHgpH,+BAA+B,MACjC,EAEF7lG,MAAGgB,KAA+C,CAACnkB,QAAgB,IAC5DA,EACHipH,8BAA8B,EAC9BD,+BAA+B,MACjC,EAEF7lG,MAAGgB,KAAkDnkB,QAC9CA,EACHipH,8BAA8B,EAC9BD,+BAA+B,MACjC,EAEF7lG,MAAGgB,KAAgC,CAACnkB,GAASnsB,aAAM,IAC5CmsB,EACHkpH,WAAY,CACRr1I,SACAs1I,UAAWn2H,KAAKo2H,WAEtB,EAEFjmG,MAAGgB,KAA0C,CAACnkB,GAASgoH,mBAAY,IAC5DhoH,EACHqpH,oBAAqBrB,MACvB,EAGF7kG,MAAGgB,KAAoCnkB,QAChCA,EACH/uB,gBAAgB,MAClB,EAEFkyC,MAAGgB,KAAoCnkB,QAChCA,EACH/uB,gBAAgB,MAClB,EAEFkyC,MAAGgB,KAAkCnkB,QAC9BA,EACHhvB,oBAAoB,MACtB,EAEFmyC,MAAGgB,KAAqCnkB,QACjCA,EACHhvB,oBAAoB,MACtB,EAGFmyC,MAAGgB,KAAsCnkB,QAClCA,EACHspH,kBAAkB,MACpB,EAEFnmG,MAAGgB,KAAsCnkB,QAClCA,EACHspH,kBAAkB,MACpB,EAEFnmG,MAAGgB,KAAgC,CAACnkB,GAAS0oH,iBAAU,IAChD1oH,EACH0oH,WAAYA,MAId,SAAUtlG,EAAQpjB,EAA0BtrB,GAC9C,OAAOi0I,EAAiB3oH,EAAOtrB,EACnC,qLCnIO,IAAMguC,EAAO,MAAd,MAAOA,EACTp9C,YACYq9C,EACAz0C,GADA1I,KAAAm9C,WACAn9C,KAAA0I,SAGL1I,KAAA+jJ,oBAAmBz6H,MACtB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOo1B,OAAgC,EACvCl1B,KAAUva,MAAUtE,KAAc,CAC9B5K,KAAK0I,OAAOpI,OAAOmK,qBACnBzK,KAAK0I,OAAOpI,OAAOmK,SACnBzK,KAAK0I,OAAOpI,OAAOmK,WACpBjK,QACC8d,KAAK,IAAC,EACNzC,KAAI,EAAEu6C,EAAQjE,GAAY3yC,MACtB,MAAQlR,UAASD,SAAQyN,UAAW5M,EAC9Buc,EAAQ2qC,EAAO9nD,GACfgkD,EAAYH,GAAW1mC,GAAO5a,aAEpC,GAAI4a,GAAS6mC,GAAaA,EAAU9yC,YAAc8yC,EAAU9yC,WAAWlc,OAAQ,CAG3E,IAAIyN,EACAgP,EAEJ,QAAS+c,GAAI,EAAGA,GAAItd,EAAWlc,OAAQw5B,KAAK,CACxC,MAAMknH,GAAIxkI,EAAWsd,IAIrB,IAF8Bw1B,EAAU9yC,WAAWqwC,KAAK9+C,GAAaA,EAAUC,KAAOgzI,GAAEhzI,IAGpF,SAEJ,MAAM9P,GAAI8iJ,GAAE7jI,MAAMrP,KAAKiP,GAAQA,EAAK/O,KAAO3C,GAE3C,GAAInN,GAAG,CACH6P,EAAYizI,GACZjkI,EAAO7e,GACP,KACJ,CACJ,CAEA,GAAI6P,GAAagP,EACb,OACS,IADDA,EAAKtG,aAELzZ,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,YAAawQ,EAAUC,GAAI,QAAS1C,GAAU,CAAEgB,YAAa,CAAEjB,OAAQ0R,EAAK/O,MAAO8K,WAI5H9b,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,YAAawQ,EAAUC,GAAI,QAAS1C,EAAS,aAAcyR,EAAK/O,IAAK,CAAE1B,YAAawM,KAMzI9b,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,YAAa+xD,EAAU9yC,WAAW,GAAGxO,GAAI,QAAS1C,IAE/F,OAGT,CAAEtN,UAAU,IAGZhB,KAAAikJ,2BAA0B36H,MAC7B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOo1B,OAAuC,EAE9Cl1B,KAAUva,MAAUtE,KAAc,CAC9B5K,KAAK0I,OAAOpI,OAAOmK,kBACnBzK,KAAK0I,OAAOpI,OAAOmK,SACnBzK,KAAK0I,OAAOpI,OAAOmK,WACpBjK,QACC8d,KAAK,IAAC,EACNzC,KAAI,EAAEm+E,EAAe7nC,GAAY3yC,MAC7B,MAAQjR,iBAAgBF,SAAQyN,UAAW5M,EACrCyB,EAAeqpF,EAAc9qF,EAAOX,gBACpC+jD,EAAYH,GAAWxhD,GAAcE,aAE3C,GAAIF,GAAgB2hD,GAAaA,EAAU9yC,YAAc8yC,EAAU9yC,WAAWlc,OAAQ,CAGlF,IAAIyN,EACAgP,EAEJ,QAAS+c,GAAI,EAAGA,GAAItd,EAAWlc,OAAQw5B,KAAK,CACxC,MAAMknH,GAAIxkI,EAAWsd,IAIrB,IAF8Bw1B,EAAU9yC,WAAWqwC,KAAK9+C,GAAaA,EAAUC,KAAOgzI,GAAEhzI,IAGpF,SAEJ,MAAM9P,GAAI8iJ,GAAE7jI,MAAMrP,KAAKiP,GAAQA,EAAK/O,KAAO3C,GAE3C,GAAInN,GAAG,CACH6P,EAAYizI,GACZjkI,EAAO7e,GACP,KACJ,CACJ,CAEA,GAAI6P,GAAagP,EACb,OACS,IADDA,EAAKtG,aAELzZ,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,YAAawQ,EAAUC,GAAI,eAAgBzC,GAAiB,CAAEe,YAAa,CAAEjB,OAAQ0R,EAAK/O,MAAO8K,WAI1I9b,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,YAAawQ,EAAUC,GAAI,eAAgBzC,EAAgB,aAAcwR,EAAK/O,IAAK,CAAE1B,YAAawM,KAMvJ9b,KAAK0I,OAAO1H,SAAST,QAAmB,CAAC,YAAa+xD,EAAU9yC,WAAW,GAAGxO,GAAI,eAAgBzC,IACtG,OAIT,CAAEvN,UAAU,IAGZhB,KAAAkkJ,yBAAwB56H,MAC3B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOo1B,OAAmC,EAC1CjuC,KAAIxB,GAAUwN,KAA+BxN,EAAO8B,OAIrDhR,KAAAmkJ,kBAAiB76H,MACpB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOo1B,OAA4B,EACnCr/B,KACItf,KAAK0I,OAAOpI,OAAOoc,QAA+B,EAEtDb,KAAI,EAAE3M,EAAQk1I,MACNA,IAA2Bl1I,EAAO8B,IAClChR,KAAK0I,OAAO1H,SAAS0b,KAAwBxN,EAAO8B,IAAG,IAEhE,CAAEhQ,UAAU,IAGZhB,KAAAqkJ,sBAAqB/6H,MACxB,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOo1B,OAAkC,EACzCr/B,KACItf,KAAK0I,OAAOpI,OAAOgkJ,QAAsC,EAE7Dn6H,KAAS,EAAEjb,EAAQlB,KAAsB,CACrCvD,aAA4BuD,GAC5BvD,aAAqCuD,GACrCvD,aAA4BuD,OAKjChO,KAAAukJ,0BAAyBj7H,MAC5B,IAAMtpB,KAAKm9C,SAAS38C,QAChBC,KACIT,KAAK0I,OAAOlI,QACRF,MAAOgkJ,OAAwC,EAC/Ch0I,KAAOya,GAAYA,MACtB,EAELxB,MACI9e,iBACAA,iBACAA,mBAA+B,EAEnC6T,KAAK,IAAC,EACN5N,KAAIxB,GAAUyvC,KAAuC,CAACzvC,EAAO0a,WAI9D5pB,KAAAwkJ,6BAA4Bl7H,MAC/B,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAOo1B,OAAkC,EACzCl1B,KAAUva,MAAUovE,KAChBt+E,KAAKm9C,SAAS38C,QAAK+oB,MAAO9e,sBAAkC,EAAGg6I,QAC/DzkJ,KAAKm9C,SAAS38C,QAAK+oB,MAAO9e,sBAA2C,EAAGg6I,QACxEzkJ,KAAKm9C,SAAS38C,QAAK+oB,MAAO9e,sBAAkC,EAAGg6I,SACjEjkJ,QACEkQ,KAAI,IAAMiuC,YAMf3+C,KAAA0kJ,iCAAgCp7H,MACnC,IAAMtpB,KAAKm9C,SAAS38C,QAChB+oB,MAAO9e,sCAA+C,EACtD6U,KACItf,KAAK0I,OAAOpI,OAAOgkJ,MACnBtkJ,KAAK0I,OAAOpI,OAAOgkJ,QAA6C,EAEpE5zI,KAAI,EAAExB,EAAQd,EAAaG,MAAoBhO,QAAmB,CAC9D,YAAa6N,EACb,eAAgBG,GAChB,aAAc2N,KAAMK,WACpBrN,EAAOyH,sBApMf,CAAC1V,SAAAjB,KAAA,mBAAAkB,iBAJIg8C,GAAOj+C,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAPo0B,EAAOn0B,QAAPm0B,EAAOl0B,mBAAPk0B,CAAO,KCHP1pB,EAAoB,MAA3B,MAAOA,EAAoBvyB,SAAAjB,KAAA,mBAAAkB,iBAApBsyB,EAAoB,EAAAvyB,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAApBgO,IAAoBvyB,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UANzB9E,KAAYC,WAAW,YAAag9B,GACpC98B,KAAcF,WAAW,CACrBs8B,cAIC1pB,CAAoB,29BCd1B,MAAMmxH,EAAiC,CAC5C,CACE3zI,GAAI,EACJ7O,KAAM,gBACN61D,EAAG,KACHrT,EAAG,KACHigG,KAAM,KACNC,KAAM,KACN1+I,aAAa,EACb6sD,aAAa,EACbqiD,YAAa,GACbruE,WAAY,GACZ92B,UAAW,GACX40I,eAAe,EACfphJ,KAAM,KACN+V,QAAS,EACTsrI,uBAAwB,IAE1B,CACE/zI,GAAI,GACJ7O,KAAM,YACN61D,EAAG,KACHrT,EAAG,KACHigG,KAAM,KACNC,KAAM,KACN1+I,aAAa,EACb6sD,aAAa,EACbqiD,YAAa,GACbruE,WAAY,GACZ92B,UAAW,GACX40I,eAAe,EACfphJ,KAAM,KACN+V,QAAS,EACTsrI,uBAAwB,IAE1B,CACE/zI,GAAI,GACJ7O,KAAM,kCACN61D,EAAG,KACHrT,EAAG,KACHigG,KAAM,KACNC,KAAM,KACN1+I,YAAa,EACb6sD,aAAa,EACbqiD,YAAa,GACbruE,WAAY,GACZ92B,UAAW,CAAC,KACZ40I,eAAe,EACfphJ,KAAM,KACN+V,QAAS,EACTsrI,uBAAwB,qDCnCrB,MAAMlnG,KAAW2+C,MAA6B,aAExCwoD,KAAYlnG,MAAeD,EAAUrjB,IAASA,GAAM4oH,QAEpD6B,KAAyBnnG,MACpCD,EACArjB,IAASA,IAASA,GAAMzsB,qBAGbm3I,KAA4BpnG,MACvCD,EACArjB,IAASA,GAAMvsB,wBAGJk3I,KAA0BrnG,MACrConG,EACAE,cACA,CAACn3I,GAAwBisB,KACvBjsB,IAA0BisB,IAAYA,GAASjsB,KAGtCo3I,KAA8BvnG,MACzCqnG,EACA3qH,IAASA,IAASA,GAAMr4B,MAGb8kE,KAAqBnpB,MAChCD,EACArjB,IAASA,GAAMxsB,iBAEJs3I,KAAmBxnG,MAC9BmpB,EACAs+E,cACA,CAACv3I,GAAiBksB,KAChBlsB,IAAmBksB,IAAYA,GAASlsB,KAG/Bw3I,KAAuB1nG,MAClCwnG,EACA9qH,IAASA,IAASA,GAAMr4B,MAGbsjJ,KAAkB3nG,MAC7BqnG,EACAG,EACAvlD,UACA,CAAC50F,GAAsBC,GAAe20F,KAChC50F,GAA6B40F,GAAQ50F,GAAqBo0F,UACrDn0F,GAAsB20F,GAAQ30F,GAAcmD,gBAE9C,IAIEm3I,KAAuB5nG,MAClCqnG,EACAG,EACAK,KACA,CAACh1I,GAAc8a,GAAO0mC,KAChB1mC,GAAc0mC,GAAW1mC,GAAM5a,aAC1BF,GAAqBwhD,GAAWxhD,GAAaE,aAE/C,MAIE+0I,KAAwB9nG,MACnCqnG,EACAG,EACAO,KACA,CAAC16I,GAAsBC,GAAey6I,KAChCz6I,GACKy6I,GAAuBz6I,GAAcyF,aACrC1F,GACA06I,GAAuB16I,GAAqB0F,aAE5C,IAIAi1I,KAAuBhoG,MAClCmnG,EACAW,EACAG,KACA,CAACh4I,GAAqBmpI,GAAoBtkF,KACvCskF,IAAsBA,GAAmBpmI,KAAKC,IAAaA,GAAUC,KAAOjD,KAC5E6kD,IAAqBA,GAAkB7kD,KAG/Bi4I,KAAcloG,MACzBlW,KACCpoB,KACC,IAAIymI,GAAmB,GACvBzmI,UAAWjS,QAAQwD,IAAaA,GAAUoP,MAAM5S,QAAQ4S,KACtD8lI,GAASx1I,KAAK0P,GAAK,IAEd8lI,KAyBEC,IArBAC,EAA4BroG,MACvCgoG,EACC/6I,KACC,GAAIA,IAAqBA,GAAkBoV,MAAM7c,OAAQ,CACvD,MAAMyc,GAAOhV,GAAkBoV,MAAMrP,KAAKiP,IAAmB,IAAXA,GAAKi4C,GAAsB,IAAXj4C,GAAK4kC,GAEvE,OAAI5kC,GACKA,GAAK/O,GAEPjG,GAAkBoV,MAAM,GAAGnP,EACpC,CAEA,OAAO,KAIEo1I,EAA2BtoG,MACtCgoG,EACA/0I,IAAaA,GAAU5O,OAGZ+jJ,EAA4BpoG,MACvCgoG,EACAZ,EACAj+E,EACA,CAACl2D,GAAWxC,GAAgBD,KAAYyC,IAAWoP,OAAOzP,IAAIqP,SACzDA,GACHsmI,WAAY,GAAGt1I,GAAUC,MAAMzC,IAAkBD,IAAW,WAAWyR,GAAK/O,SAC7D,KAGNs1I,KAAkCxoG,MAC7CgoG,EACAZ,EACAj+E,EACA,CAACl2D,GAAWxC,GAAgBD,KAAYyC,IAAWoP,OAAOkP,OAAO,CAACC,GAAKvP,MACrE,QAASwmI,MAAWxmI,GAAKglI,uBACnBwB,GAAQC,iBACVl3H,GAAI7e,KAAK,IACJ81I,GAAQC,gBACXH,WAAY,GAAGt1I,GAAUC,MAAMzC,IAAkBD,IAAW,WAAWi4I,GAAQE,sBAIrF,OAAOn3H,IACN,KAAiB,IAGTo3H,KAA8B5oG,MACzCooG,EACA/lI,IAASA,GAAMzP,IAAIqP,IAAQA,GAAK/O,KAGrB21I,KAAoB7oG,MAC/BD,EACArjB,IAASA,GAAMlxB,gBAQJs9I,KALAC,EAAiB/oG,MAC5B6oG,EACAr9I,MAAoBA,KAGTs9I,EAAyB9oG,MACpCD,EACCrjB,IAAUA,GAAMqpH,sBAGNiD,KAAkBhpG,MAC7B6oG,EACAT,EACA,CAAC58I,GAAgBy9I,KAEbA,GAAcj2I,KAAKiP,IAAQA,GAAK/O,KAAO1H,KACvCq7I,EAAuB7zI,KAAKiP,IAAQA,GAAK/O,KAAO1H,KAChD,MAiBO09I,IAZAC,EAAsBnpG,MACjCgpG,EACC97I,IAAiBA,IAAgBA,GAAa7I,OAUpC6kJ,EAAqBlpG,MAAelW,KAAQpoB,IACvDA,GAAWlP,OAAOS,IAAaA,GAAUE,SAAWF,GAAUoP,OAAO7c,UAG1D4jJ,KAAoBppG,MAC/BD,EACArjB,IAASA,GAAM6oH,gBAEJ//D,KAAexlC,MAC1BopG,EACA7D,MAAoBA,IAWT8D,IAPAC,EAAuBtpG,MAAeD,EAAUrjB,IAASA,GAAM6sH,oBAC/DC,EAA6BxpG,MAAeD,EAAUrjB,IAASA,GAAM+sH,0BACrEC,EAAiC1pG,MAAeD,EAAUrjB,IAASA,GAAMitH,8BACzEC,EAAmC5pG,MAAeD,EAAUrjB,IAASA,GAAMmtH,gCAC3EC,EAAiC9pG,MAAeD,EAAUrjB,IAASA,GAAMqtH,+BACzEC,EAA+BhqG,MAAeD,EAAUrjB,IAASA,GAAMutH,6BAEvEZ,EAAmBrpG,MAC9Bv9C,wBACA+iF,EACA,CAAC0kE,GAAkBC,KAAwBD,IAAoBC,KAGpDC,KAAwBpqG,MACnCD,EACArjB,IAASA,GAAMhvB,oBAGJ28I,KAAuCrqG,MAClDoqG,EACAf,EACA,CAAC37I,GAAoB48I,KAAkB58I,IAAsB48I,IAsClDC,IAnCAC,EAASxqG,MACpBgoG,EACAI,EACAY,EACA3B,EACAG,EACA,CACEv6I,GACAw9I,GACAv9I,GACAG,GACAC,OAGEgD,YAAarD,IAAqBA,GAAkBiG,GACpDw3I,cAAez9I,IAAqBA,GAAkB5I,KAEtD6d,aAAchV,IAAgBA,GAAagG,GAC3Cy3I,eAAgBz9I,IAAgBA,GAAa7I,KAE7Cge,MACEooI,IACAA,GAAuB73I,IAAIqP,MACzB/O,GAAI+O,GAAK/O,GACT7O,KAAM4d,GAAK5d,QAGfoM,eAAgBpD,IAAwBA,GAAqB6F,GAC7D03I,iBAAkBv9I,IAAwBA,GAAqBhJ,KAE/DmM,QAASlD,IAAiBA,GAAc4F,GACxCsqE,UAAWlwE,IAAiBA,GAAcjJ,SAInCkmJ,EAA0BvqG,MACrCooG,EACAj/E,EACAi+E,EACAD,EACAyB,EACA1B,EACAmD,EACA5nJ,wBACA,CACE4f,GACA7R,GACAC,GACAH,GACAu6I,GACAC,GACAC,IAEEC,aACE16I,YAAa26I,GACbz6I,QAAS06I,GACTz6I,eAAgB06I,GAChB56I,OAAQ66I,IAEV5+I,UAGEu+I,GACK,KA4Cb,SAASM,GACPJ,GACA36I,GACA66I,GACA16I,GACA26I,GACAF,GACA16I,GACAhE,GACA8+I,IAEA,OAAIL,KAAqB36I,GAgBhB,MAfH66I,KAAwB16I,IAAmB26I,MAEpCF,KAAiB16I,IAAY46I,KAGrCF,KACAE,IACD5+I,GAAI8F,SAAS,UACb9F,GAAI8F,SAAS,aAENg5I,GACEF,GACF,UADF,EAVEE,EAgBb,CAvEWD,EACJJ,GACD36I,IACC66I,GACD16I,IACC26I,IACAF,GACD16I,GACAhE,GAMN,SAAS++I,EAAoBlpI,IAC3B,MAAMmpI,MAAuBrc,WAC3Bsc,WACEppI,GACGzP,IAAIqP,MACH/Z,KAAM+Z,GAAK5Z,YACX+J,UAAW6P,GAAK7P,eAIxB,SAAOq5I,WACLD,GACG54I,IAAK84I,IACGA,GAAWt5I,UACfQ,IAAI5B,KACH,GAAIC,IAAYD,IACd,MAAO,CACL9I,KAAMwjJ,GAAWxjJ,KACjB2uG,WAAY5lG,IAAYD,OAI7BwB,OAAOm5I,SAA6B1mH,IAAf0mH,KAEzBn5I,OAAOk5I,IAAcA,GAAWlmJ,OAAS,GAEhD,CA/BM+lJ,CAAoBlpI,OAkEbmjI,MAAwBxlG,MACnCD,EACArjB,IAASA,GAAM8oH,uBAgBJoG,KAdAnG,EAAyBzlG,MACpCD,EACArjB,IAASA,GAAM+oH,yBAGJE,EAA+B3lG,MAC1CD,EACArjB,IAASA,GAAMipH,+BAEJD,EAAgC1lG,MAC3CD,EACArjB,IAASA,GAAMgpH,gCAGJkG,EAAgB5rG,MAC3BD,EACArjB,IAASA,GAAMkpH,aAGJiG,MAAoB7rG,MAC/BD,EACArjB,IAASA,GAAM/uB,gBAGJm+I,MAAsB9rG,MACjCD,EACArjB,IAASA,GAAMspH,kBAGJ+F,MAAgB/rG,MAC3BD,EACArjB,IAASA,GAAM0oH,4DChYV,MAAM1lG,EAAsB,CAC/BzvC,oBAAqB,KACrBzE,eAAgB,KAChBu6I,oBAAqB,KAErBR,eAAgB,KAEhBgE,kBAAmB,KACnBE,wBAAyB,GACzBE,4BAA6B,KAC7BE,8BAA+B,KAC/BE,6BAA8B,KAC9BE,2BAA4B,KAE5B3E,OAAQ,EAERp1I,gBAAiB,KACjBs1I,uBAAuB,EACvBC,wBAAwB,EAExBt1I,uBAAwB,KACxBw1I,8BAA8B,EAC9BD,+BAA+B,EAE/BE,WAAY,KAEZj4I,eAAgB,KAChBD,oBAAoB,EAEpBs4I,iBAAkB,KAClBZ,WAAY,gFC3DT,IAAM4G,EAAc,MAArB,MAAOA,EAEThqJ,YACY6mB,GAAA3mB,KAAA2mB,OACR,CAEG4gB,KAAKiiE,GACR,OAAIA,EAAQv1F,GAAK,EAENjU,KAAK2mB,MAAMkC,IAAY,4BAA6B2gF,GAIpDxpG,KAAK2mB,MAAMgC,KAAa,4BAA6B6gF,EAEpE,CAEOthF,OAAO6hI,GACV,OAAO/pJ,KAAK2mB,MAAMuB,OAAe,6BAA6B6hI,IAClE,CAEOC,gBACH,OAAOhqJ,KAAK2mB,MAAME,IAAwB,wCAC5C,CAAC5lB,SAAAjB,KAAA,mBAAAkB,iBAvBM4oJ,GAAc7qJ,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,WAAAklC,EAAApc,IAAA,OAAdghI,EAAc/gI,QAAd+gI,EAAc9gI,UAAAC,WAFb,gBAED6gI,CAAc,+rCCDpB,MAAMG,KAAiB1tG,MAAa,mCAC9B2tG,KAAqB3tG,MAAa,yCAA2C3yB,KAAgCA,WAC7GugI,KAAwB5tG,MAAa,0CAA4CvyB,KAA0CA,sBCL3HogI,KAAoB7tG,MAAa,uCAAyCnyB,KAAwBA,cAClGigI,KAAsB9tG,MAAa,yCAA2C+tG,KAAkDA,0BAChIC,KAAiBhuG,MAAa,kCAAoClxB,KAAyBA,aAE3F4hC,KAAQ1Q,MAAa,uCCJrBiuG,KAAUjuG,MAAa,qCAAuC9wB,KAAoBA,WAClFg/H,KAAmBluG,MAAa,sCAAwC6Z,KAAuBA,YAE/Fs0F,KAAanuG,MAAa,0CAA4CjuC,KAAuBA,aAC7Fq8I,KAAYpuG,MAAa,gDAEzBquG,KAAcruG,MAAa,+BAAiCrG,KAA4BA,kBCJxF20G,KAAmBtuG,MAAa,mCAChCuuG,KAAuBvuG,MAAa,yCAA2C3yB,KAAgCA,WAC/GmhI,KAA0BxuG,MAAa,2CAEvCyuG,KAAqBzuG,MAAa,iCAClC0uG,KAAyB1uG,MAAa,uCAAyC3yB,KAAgCA,WAC/GshI,KAA4B3uG,MAAa,yCAEzC4uG,KAA4B5uG,MAAa,uCAAyC6uG,KAAoDA,2BACtIC,KAA+B9uG,MAAa,0CAA4C+uG,KAA0BA,gBAClHC,KAAmBhvG,MAAa,+CAEhCivG,KAAgBjvG,MAAa,iCAAmC+uG,KAA0BA,gBAE1FG,MAAoBlvG,MAAa,uCCdjCD,KAAOC,MAAa,gCACpBC,KAAWD,MAAa,sCAAwC3yB,KAAgCA,WAChG8yB,KAAcH,MAAa,uCAAyC/zB,KAAsCA,iBAE1GkjI,KAAenvG,MAAa,wCAA0Cl0B,KAAwBA,cAC9FsjI,KAAmBpvG,MAAa,+CAAiD3yB,KAAgCA,WACjHgiI,KAAsBrvG,MAAa,gDAAkDsvG,KAA0CA,qBAE/HC,KAAgBvvG,MAAa,kCAE7BwvG,KAAyBxvG,MAAa,wDAA0Dj0B,KAA0BA,gBAC1H0jI,MAA4BzvG,MAAa,gDAAkD4E,KAAmBA,SCX9G7E,MAAOC,MAAa,sCACpBC,MAAWD,MAAa,4CAA8C3yB,KAAgCA,WACtG8yB,MAAcH,MAAa,6CAA+C0vG,KAA0CA,mBAEpH5iG,KAAS9M,MAAa,sCAAwC/xB,KAA8BA,oBAC5F8+B,KAAa/M,MAAa,sCAAwC3yB,KAAgCA,WAClG2/B,KAAgBhN,MAAa,+CCX7B2vG,KAAoB3vG,MAC/B,yCACCnyB,KAAwBA,cCAd+hI,KAAkB5vG,MAAa,uCAAqCE,+GCS3E,SAAU2vG,EAAqB97I,GACnC,MAAO,CACL8nF,UAAW73F,eAAyB83F,GACpCC,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,gBACP6V,KAAM,4CAA4CzW,EAAO0C,SACzDwlF,YAAa,SACbyN,cAAevqF,YAA+CpL,EAAO+W,UAEzE,CAGM,SAAUu8G,IACd,MAAO,CACLxrC,UAAW73F,eAAyBuoH,SACpCxwB,YAAa/3F,sBAAgCg4F,KAC7CrnF,MAAO,kBACP6V,KAAM,gDACNyxE,YAAa,MACb0N,cAAe,KACfD,cAAevqF,yBAEnB,CAGM,SAAU+O,EAAem/C,GAC7B,MAAO,CACLlqE,KAAM,UACNE,QAAS,2BAA2BgqE,KACpC9qB,UAAW,IAEf,CAGM,SAAUn0B,EAAYi/C,EAAmBhgD,GAC7C,MAAO,CACLlqB,KAAM,QACNE,QAAS,uBAAuBgqE,wBAAgChgD,EAAMngB,WAAWmgB,EAAMqF,aAE3F,kDCpDO,IAAKo9H,EAAZ,SAAYA,GACVA,WAAAC,WAAA,gBACAD,IAAA7kI,QAAA,aACA6kI,IAAAE,UAAA,eAHUF,CAIZ,CAJA,CAAYA,GAAa,0UCgBzB,MAAM7uG,EAAe,CACnBvjB,WAAW,EACXlP,UAAU,EACVo8B,WAAY,GACZv9B,MAAO,MAGH4iI,KAAoB9uG,MACxBF,KAEAG,MAAG5zB,oBAAmCyQ,SACjCA,GACHP,WAAW,MACX,EAEF0jB,MAAG5zB,wBAAsC,CAACyQ,IAAS5Q,aAAK,IACnD4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,aACA,EAEF+zB,MAAG5zB,2BAAyC,CAACyQ,IAASxQ,wBAAgB,IACjEwQ,GACHP,WAAW,EACXlP,UAAU,EACVo8B,WAAYn9B,GACZJ,MAAO,wBC9BJ,MAAM6iI,KAA8D9hG,KACzE,CACEC,SAAU8hG,IAAkBA,GAAetlI,YAAcslI,GAAe9kI,cAAgB,IAAM8kI,GAAe9kI,cAAgB,MAI3H41B,EAAoCivG,EAAsB3hG,gBAAgB,CAC9EwgG,WAAY,KAGRqB,KAAyBjvG,MAC7BF,KAEAG,MAAG/xB,+BAAgD,CAAC4O,IAAS4wH,4BAA4BqB,EAAsBz3C,UAAUo2C,GAAuB,IAC3I5wH,OACH,EAEFmjB,MAAG/xB,kCAAmD,CAAC4O,IAAS8wH,iBAAiBmB,EAAsBz0G,UAAUszG,GAAY,IACxH9wH,OACH,EAEFmjB,MAAG/xB,sBAAwC4O,IAAUiyH,EAAsB9wF,UAAU,IAChFnhC,OACH,EAEFmjB,MAAG/xB,mBAAoC,CAAC4O,IAAS8wH,kBAAU,IACtD9wH,GACH8wH,mBASWlgG,YAAWD,kBAAmBshG,EAAsBjhG,eCnCtDohG,KAAuDjiG,KAClE,CACAC,SAAUpiC,IAAeA,GAAYpB,YAAcoB,GAAYZ,cAAgB,IAAMY,GAAYZ,cAAgB,IACjHijC,cAAc,IAGVrN,EAAgCovG,EAAkB9hG,gBAAiB,CACvE+hG,eAAgB,KAChB5yH,WAAW,EACXlP,UAAU,IAGN+hI,KAAoBpvG,MACxBF,KAEAG,MAAGzzB,uBAAqC,CAACsQ,IAASpQ,gBAAQ,IACrDoQ,GACHP,YAAa7P,GACbW,UAAU,EACV8hI,eAAgBziI,OAChB,EAEFuzB,MAAGzzB,yBAAuC,CAACsQ,IAAS8vH,2BAA2BsC,EAAkB3hG,OAAOq/F,GAAsB,IACzH9vH,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAGzzB,WAAyB,IAAMszB,KAQrB4N,UAAS2hG,EAAE5hG,eAAc6hG,EAAE9hG,aAAc0hG,EAAkBphG,eCtC7DyhG,KAA2CtiG,OAE3CnN,EAAiCyvG,EAAmBniG,gBAAgB,CAC/EoiG,YAAa,KAGTC,KAAqBzvG,MACzBF,KAEAG,MAAGjyB,aAA4B,CAAC8O,IAAS/O,YAAYwhI,EAAmBr3D,OAAOnqE,GAAO,IACjF+O,OACH,EAEFmjB,MAAGjyB,sBAAqC,CAAC8O,IAAS47B,aAAa62F,EAAmBhiG,OAAOmL,GAAQ,IAC5F57B,OACH,EAEFmjB,MAAGjyB,gBAA+B,CAAC8O,IAASlsB,cAAc2+I,EAAmBj1G,UAAU1pC,GAAS,IAC3FksB,OACH,EAEFmjB,MAAGjyB,eAA+B8O,IAAUyyH,EAAmBtxF,UAAU,IACpEnhC,OACH,EAEFmjB,MAAGjyB,iBAAgC,CAAC8O,IAAS0b,oBAAY,IACpD1b,GACH0yH,YAAah3G,QASFkV,UAASgiG,EAAEliG,UAASA,GAAK+hG,EAAmBzhG,eAE9C6hG,EAAkBniG,EAClBoiG,EAAiBliG,ECrCjBmiG,KAAmD5iG,KAC9D,CACEC,SAAUpiC,IAAeA,GAAYpB,YAAcoB,GAAYglI,cAAgB,IAAMhlI,GAAYglI,cAAgB,IACjH3iG,cAAc,IAILrN,EAA6B+vG,EAAeziG,gBAAgB,CACvE2iG,sBAAuB,KAEvBxzH,WAAW,EACXlP,UAAU,IAGN2iI,MAAiBhwG,MACrBF,KAEAG,MAAG7yB,UAAsB0P,SACpBA,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAG7yB,cAAyB,CAAC0P,IAAS5Q,aAAK,IACtC4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,aACA,EAEF+zB,MAAG7yB,iBAA4B,CAAC0P,IAAShS,kBAAkB+kI,EAAe33D,OAAOptE,GAAa,IACzFgS,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAG7yB,kBAA8B0P,SAC5BA,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAG7yB,sBAAiC,CAAC0P,IAAS5Q,aAAK,IAC9C4Q,GACHP,WAAW,EACXlP,UAAU,EACVnB,aACA,EAEF+zB,MAAG7yB,yBAAoC,CAAC0P,IAASqxH,sBAAsB0B,EAAe33D,OAAOi2D,GAAiB,IACzGrxH,GACHP,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAG7yB,mBAA+B0P,SAC7BA,GACHzP,UAAU,MACV,EAEF4yB,MAAG7yB,4BAAuC,CAAC0P,IAASlS,kBAAU,IACzDkS,GACHizH,sBAAuBnlI,GACvB2R,WAAW,EACXlP,UAAU,MACV,EAEF4yB,MAAG7yB,+BAA0C,CAAC0P,IAAS2mB,WAAG,IACrD3mB,GACHmzH,uBAAwBxsG,QAUbiK,UAASwiG,EAAEziG,eAAc0iG,EAAE3iG,UAASA,GAAKqiG,EAAe/hG,eAE1DsiG,EAAuB1iG,EAEvB2iG,EAA4B5iG,EAE5B6iG,EAAoB9iG,ECvF3B1N,EAAkC,CACtCvjB,WAAW,EACXlP,UAAU,EACVkjI,YAAa,GACbrkI,MAAO,MAGHskI,MAAsBxwG,MAC1BF,KAEAG,MAAGn0B,UAA2BgR,SACzBA,GACHP,WAAW,MACX,EAEF0jB,MAAGn0B,cAA8B,CAACgR,IAAS5Q,aAAK,IAC3C4Q,GACHP,WAAW,EACXlP,UAAU,EACVkjI,YAAa,GACbrkI,aACA,EAEF+zB,MAAGn0B,iBAAiC,CAACgR,IAASyxH,qBAAa,IACtDzxH,GACHP,WAAW,EACXlP,UAAU,EACVkjI,YAAahC,GACbriI,MAAO,SC7BEg0B,MAAUF,MAJmB,CACxCwsE,iBAAkB,OAIlB1sE,EACAG,MAAGwwG,uBAAyC,CAAC3zH,IAASpQ,gBAAQ,IACzDoQ,GACH0vF,iBAAkB9/F,sBCJtB,MAIMgkI,KAAgB1wG,MAJD,CACnB2wG,sBAAuBhC,IAAcC,aAIrC9uG,EACAG,MAAG2wG,qBAA+B,CAAC9zH,IAAS6zH,6BAAqB,IAAa7zH,GAAO6zH,uDCehF,MAAMxtI,GAAgD,CAC3D0tI,eAAgBC,GAChBC,aHUI,SAAU7wG,GAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAOg/I,GAAoB1zH,GAAOtrB,GACpC,EGXEi4C,WRYI,SAAUvJ,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAOs9I,EAAkBhyH,GAAOtrB,GAClC,EQbEsZ,YJoDI,SAAUo1B,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAOw+I,GAAelzH,GAAOtrB,GAC/B,EIrDEw/I,gBPOI,SAAU9wG,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAOy9I,EAAuBnyH,GAAOtrB,GACvC,EOREoc,ULKI,SAAUsyB,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAOi+I,EAAmB3yH,GAAOtrB,GACnC,EKNEy/I,WNMI,SAAU/wG,EAAQpjB,GAAQgjB,EAActuC,IAC5C,OAAO49I,EAAkBtyH,GAAOtrB,GAClC,EMPE0/I,ODpBI,SAAUhxG,EAAQpjB,GAAgCtrB,IACtD,OAAOk/I,EAAc5zH,GAAOtrB,GAC9B,GCwBa2/I,MAAuBryD,MAAyC,gBAMhEsyD,MAAkBhxG,MAC7B+wG,GACAr0H,IAASA,GAAMi0H,cAIJM,MAAsBjxG,MACjCgxG,GACAt0H,IAASA,GAAMyzH,aAMXe,MAAiBlxG,MACrB+wG,GACAr0H,IAASA,GAAMo0H,QAGJK,MAAkBnxG,MAC7BkxG,GACAJ,IAAUA,GAAOP,uBAONa,MAAoBpxG,MAC/B+wG,GACAr0H,IAASA,GAAM+zH,gBAIJY,MAAsBrxG,MACjCoxG,GACA10H,IAASA,GAAM0vF,kBAIJklC,MAAuBtxG,MAClCixG,GACAI,GACA,CAACV,GAAcvkC,KAAqBukC,IAAgBA,GAAa39I,KAAKR,IAAUA,GAAO+W,WAAa6iG,KAIzFmlC,MAAwBvxG,MACnCsxG,GACA50H,IAASA,IAASA,GAAMxnB,MAObs8I,MAAqBxxG,MAChC+wG,GACAr0H,IAASA,GAAM2sB,YAIJooG,MAAsBzxG,MACjCwxG,GACA90H,IAASA,GAAMzP,UAIJykI,MAAsB1xG,MACjCwxG,GACA90H,IAASA,GAAM2sB,YAGJsoG,GAAyBz+I,OAAe8sC,MACnDwxG,GACA90H,IAASA,GAAM2sB,YAAYr2C,KAAKqW,IAAYA,GAASC,aAAepW,KAOzD0+I,MAAsB5xG,MACjC+wG,GACAr0H,IAASA,GAAMhS,aAIJmnI,MAAoB7xG,MAC/B4xG,GACAl1H,IAASA,GAAMP,WAIJ21H,MAAmB9xG,MAC9B4xG,GACAl1H,IAASA,GAAMzP,UAIJ8kI,MAAqB/xG,MAChC4xG,GACAI,GAIWC,MAAwBjyG,MACnC4xG,GACAI,GAIWE,MAA2BlyG,MACtC4xG,GACAl1H,IAASA,GAAMizH,uBAIJwC,MAAsBnyG,MACjC0xG,GACAQ,GACA,CAAC/oI,GAAiBwmI,MAChB,GAAIA,GAAuB,CACzB,MAAOnlI,GAAYC,IAAiBklI,GAAsBljJ,MAAM,KAChE,GAAI0c,IAAmBA,GAAgB3jB,OAAQ,CAC7C,MAAM4sJ,GAAiBjpI,GAAgBnW,KAAKqW,IAAYA,GAASC,aAAew9B,OAAOt8B,KACjF6nI,GAAoBD,IAAkBA,GAAeE,cACxDt/I,KAAK26E,IAAeA,GAAY7jE,gBAAkBg9B,OAAOr8B,KAE5D,MAAO,GAAG2nI,GAAiBA,GAAeG,aAAe,KAAKF,GAAoB,KAAOA,GAAkBG,gBAAkB,IAC/H,CACA,MAAO,EACT,IAKSC,MAAqBzyG,MAChC+xG,GACAG,GACA,CAACQ,GAAiB/C,KAA0B+C,GAAgB/C,KAGjDgD,MAAgB3yG,MAC3B4xG,GACAI,GAGWY,GAA0BpoI,OAAuBw1B,MAC5D2yG,GACA3lJ,IAAWA,GAAQwF,OAAOmX,IAAUA,GAAOL,aAAckB,KAW9CqoI,KANAC,EAAiB9yG,MAC5B+xG,GACAW,IAAoBx/I,IAAew/I,GAAgBx/I,MAIxC2/I,EAAiC7yG,MAC5CiyG,GACAC,GACA,CAACa,GAAkBpD,MAChBA,IAAyBoD,GAAOzgJ,SAASq9I,MAMjCqD,MAA0BhzG,MACrC+wG,GACAr0H,IAASA,GAAMk0H,iBAGJqC,KAAuBjzG,MAClCgzG,GACAE,GAGWC,KAA4BnzG,MACvCgzG,GACAE,GAGWE,MAAgBpzG,MAC3BgzG,GACAt2H,IAASA,GAAM8wH,YAGJ6F,MAAiBrzG,MAC5BmzG,EACAG,KACE,MAAMC,GAAc,GACpB/+H,cAAOC,KAAK6+H,IAAS7jJ,QAAQ4zC,KAC3BkwG,GAAYlwG,IAAOiwG,GAAQjwG,IAAK35B,QAAQlkB,OACxC,MAAOglB,GAAYgpI,IAAiBnwG,GAAI52C,MAAM,KAC1C+mJ,KACFD,GAAY/oI,IAAc+oI,GAAY/oI,KAAe+oI,GAAYlwG,IAAOkwG,GAAY/oI,IAAc+oI,GAAYlwG,IAAG,GAG9GkwG,KAIEE,MAAgBzzG,MAC3BmzG,EACApB,GACAL,GACA,CAAC9C,GAAgB8E,GAAoBrqG,MACnC,IAAIsqG,GAAa,GACjBn/H,cAAOC,KAAKm6H,IAAgBn/I,QAAQ4zC,KAClC,MAAO74B,GAAYgpI,IAAiBnwG,GAAI52C,MAAM,KACxCmnJ,GAAcvqG,GAAWr2C,KAAKqW,IAAYA,GAASC,aAAew9B,OAAOt8B,KACzEqpI,GAAkBL,IAAiBI,IACvCA,GAAYtB,cAAct/I,KAAK26E,IAAeA,GAAY7jE,gBAAkBg9B,OAAO0sG,KAC/EM,GAAoBlF,GAAevrG,IAAK35B,QAAQ9W,IAAI+W,KAExD,GAAI+pI,GAAmBrwG,IAAM,CAC3B,MAAM0wG,GAAmBL,GAAmBrwG,IAAK35B,QAAQ1W,KAAKghJ,IAAOA,GAAI/pI,WAAa68B,OAAOn9B,GAAOM,WAC9FgqI,GAAkBF,GAAiBG,WAAavqI,GAAOwqI,YAC3DJ,GAAiBG,UAAUlhJ,KAAKohJ,IAAYA,GAASj+I,KAAO2wC,OAAOn9B,GAAOwqI,aAE5E,MAAO,CACLjhJ,GAAIyW,GAAOM,SACXpkB,MAAOkuJ,IAAoBA,GAAiBM,YAC5CD,SAAUH,IAAkBA,GAAe/pI,MAC3C3W,MAAO,GAAGoW,GAAOO,QACjBtoB,KAAMmyJ,IAAoBA,GAAiBO,WAC3C51H,KAAM,GAAG2kB,MAAO15B,GAAOM,WAE3B,CACE,MAAO,KAIX0pI,GAAa,IACRA,GACH,CACEY,cAAeX,IAAeA,GAAYrB,aAC1CiC,iBAAkBX,IAAkBA,GAAerB,gBACnDl0I,SAAUw1I,IACX,GAGEH,KAOEc,MAAoBz0G,MAC/B+wG,GACAr0H,IAASA,GAAMlP,WAGJknI,MAAe10G,MAC1By0G,GACAlF,GAGWoF,MAAc30G,MACzBy0G,GACAjF,GAGWoF,MAAiB50G,MAC5By0G,GACA/3H,IAASA,GAAM0yH,aAGJyF,MAAwB70G,MACnC40G,GACAjoJ,eACA,CAACmoJ,GAAOrnI,MACN,GAAIqnI,GAAO,CACT,MAAMC,GAAcD,GAAM1uJ,cAC1B,OAAOqnB,GAAUjb,OAAOmb,IAASA,GAAMtpB,KAAK+B,cAAckM,SAASyiJ,KAAc1sH,KAAK,CAACC,GAAGC,KAAMD,GAAEjkC,KAAK4/C,cAAc1b,GAAElkC,MACzH,CACE,MAAO,KAKA2wJ,MAA2Bh1G,MACtCizG,EACAyB,GACA,CAACO,GAAmBznI,KAAcynI,GAAkBzvJ,OAAS,GAAKgoB,GAAUhoB,OAAS,GAM1E0vJ,MAAuBl1G,MAClC+wG,GACAr0H,IAASA,GAAMm0H,YAGJsE,MAAoBn1G,MAC/Bk1G,GACAx4H,IAASA,GAAMqyH,gBAGJqG,MAAmBp1G,MAC9Bk1G,GACAG,GAGWC,MAA0Bt1G,MACrCk1G,GACAG,GAQWE,KALAC,EAAmBx1G,MAC9Bk1G,GACAG,IAGWE,EAAyBv1G,MACpCk1G,GACAx4H,IAASA,GAAMP,YAIJs5H,MAAmBz1G,MAC9BiyG,GACAmD,GACA,CAACjiC,GAAkB9N,QAAuB+pB,cAAW/pB,GAAU8N,KAIpDuiC,MAAmB11G,MAC9BmzG,EACAwB,GACAW,GACAlC,GACA,CAACxE,GAAgBlhI,GAAOioI,GAAcnI,MACpC,MAAMoI,GAAaphI,OAAOC,KAAKm6H,IACzBiH,GAAYrhI,OAAOC,KAAKkhI,IAE9B,IAAKC,GAAWpwJ,SAAWkoB,GAAMloB,OAC/B,OAAO,EAET,GAAImwJ,GAAaE,GAAU,KAAOrI,KAAemI,GAAaE,GAAU,IAAIrsI,YAC1E,OAAO,EAET,MAAIuwH,WAAQ6b,GAAYC,MAAenoI,GAAMloB,OAAQ,CACnD,IAAIswJ,IAAQ,EACZ,UAAWtrI,MAAcorI,GAAY,CACnC,MAAMG,GAAkBnH,GAAepkI,IAAYd,QAC7CssI,GAAiBL,GAAanrI,IAAYd,QAEhD,GAAIqsI,GAAgBvwJ,SAAWwwJ,GAAexwJ,OAAQ,CACpDswJ,IAAQ,EACR,KACF,CAEA,UAAWG,MAAiBF,GAAiB,CAC3C,MAAMG,GAAeF,GAAehjJ,KAAK8mI,IAAUA,GAAO7vH,WAAa68B,OAAOmvG,GAAchsI,WAC5F,IAAKisI,IAAgBD,GAAc/rI,QAAU48B,OAAOovG,GAAahsI,QAC/D+rI,GAAc9B,aAAe+B,GAAa/B,WAAY,CACtD2B,IAAQ,EACR,KACF,CACF,CACF,CACA,OAAOA,EACT,CACE,QAASpoI,GAAMloB,QAAUmwJ,GAAa,KAAG,EAAK5b,WAAQ,IAAIrsH,IAAO2a,OAAQ,IAAIstH,GAAa,GAAKQ,UAAU9tH,QAAM,GAQxG+tH,MAAcp2G,MACzBmzG,EACAuB,GACAtB,GACA+B,GACA,CAACvG,GAAgBphI,GAAWggI,GAAY6I,MACtC,GAAI7oI,GAAUhoB,OACZ,MAAO,CAAC,CACN8jB,WAAY,EACZC,SAAU8sI,IAAY,EACtB7sI,YAAagkI,GACb/jI,aAAa,EACbC,QAAS,CACP,CACEO,SAAU,KACVC,MAAO,KACPosI,YAAa,KACbnC,WAAY,OAGhBgC,SAAU3oI,GAAU5a,IAAIi4F,IAAQA,GAAK33F,MAElC,CACL,MAAM6a,GAAW,GAEjByG,cAAOC,KAAKm6H,IAAgBn/I,QAAQ4zC,KAClC,MAAO/5B,GAAYQ,IAAiBu5B,GAAI52C,MAAM,KACxC8pJ,GAAsBxoI,GAAS/a,KAAK+rD,IAAOA,GAAIz1C,aAAeA,IAC9DI,GAAUklI,GAAevrG,IAAK35B,QAAQ9W,IAAI+W,MAC9CM,SAAUN,GAAOM,SACjBH,cAAeA,IAAiB,KAChCI,MAAOP,GAAOO,MACdosI,YAAa,KACbnC,WAAYxqI,GAAOwqI,cAGjBoC,GACFA,GAAoB7sI,QAAQ/W,QAAQ+W,IAEpCqE,GAASpb,KAAK,CACZ2W,cACAC,SAAU8sI,IAAY,EACtB7sI,YAAagkI,GACb/jI,aAAa,EACbC,QAASA,GACTysI,SAAU,MACX,GAGEpoI,EACT,mEC3dG,IAAMyoI,EAAgC,MAAvC,MAAOA,EACTx0J,YACW4B,GAAA1B,KAAA0B,UACP,CAACT,SAAAjB,KAAA,mBAAAkB,iBAHIozJ,GAAgCr1J,aAAA,EAAAgC,SAAAjB,KAAA,UAAAklC,EAAAqvH,IAAA,MAAhCD,EAAgChzJ,UAAA,wDAAhCgzJ,CAAgC,wGCMtC,IAAME,EAA+B,MAAtC,MAAOA,UAAuCC,KAIzCC,eAAeC,GAClB,IAAK30J,KAAK40J,YACN,OAAO,EAEX,QAAS93H,EAAI,EAAGA,EAAI98B,KAAK40J,YAAYtxJ,OAAQw5B,IACzC,GAAI63H,IAAc30J,KAAK40J,YAAY/tI,IAAIiW,IAAM98B,KAAK40J,YAAY/tI,IAAIiW,GAAG+zG,SACjE,OAAO,EAEf,OAAO8jB,EAAU9jB,QACrB,CAAC5vI,SAAAjB,KAAA,4DAbQw0J,KAA8BtzJ,GAA9BszJ,EAA8B,GAatC,GAbsCvzJ,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAA9BmzJ,EAA8BlzJ,UAAA,8BAAAuzJ,eAAA,SAAAlzJ,EAAAC,EAAAkzJ,MAAA,EAAAnzJ,WACtBozJ,IAAyB,8ICZ9C91J,MAAA,6KDWau1J,CAA+B,kFELrC,IAAMQ,EAA+B,MAAtC,MAAOA,EAA+B/zJ,SAAAjB,KAAA,mBAAAkB,iBAA/B8zJ,EAA+B,EAAA/zJ,SAAAjB,KAAA,UAAAklC,EAAA7jC,IAAA,MAA/B2zJ,EAA+B1zJ,UAAA,+BAAA2zJ,mBAAA51J,EAAAkC,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YAF7B1C,MAAA,8BAEF+1J,CAA+B,4QCApC/1J,MAAA,yCAA8BA,MAAA,OAAAK,EAAAuxI,SAAA,wEAGlC5xI,MAAA,WACIA,MAAA,KACAA,MAAA,EAAAi2J,EAAA,qBACJj2J,8BADiBA,MAAA,GAAAA,MAAA,kBAAAE,EAAAg2J,yFCUd,IAAMJ,EAA0B,MAAjC,MAAOA,UAAkCK,KAmB3C,cACWx+F,CAAWy+F,GAClBr1J,KAAKq1J,SAAWA,CACpB,CAEA,QACWC,GACP,OAAKt1J,KAAKu1J,QAGNv1J,KAAK6wI,SACE,OAAO7wI,KAAKu1J,WAEhB,OALI,SAMf,CAEA,aACWC,GACP,IAAKx1J,KAAKu1J,QACN,MAAO,UAEX,GAAIv1J,KAAKy1J,iBACL,IAAKz1J,KAAKy1J,gBAAgBf,eAAe10J,MACrC,MAAO,GAAGA,KAAKu1J,gBAAO,GACnBv1J,KAAK6wI,SACZ,MAAO,GAAG7wI,KAAKu1J,UAEvB,CAWAz1J,YAEY21J,EACAC,EACAjtJ,EACAktJ,EACA51J,GAER+7B,MAAM25H,EAAiBhtJ,EAAMitJ,GANrB11J,KAAAy1J,kBACAz1J,KAAA01J,6BACA11J,KAAAyI,OACAzI,KAAA21J,OACA31J,KAAAD,UAvDLC,KAAA41J,iBAA2B,EAG3B51J,KAAA61J,aAAuB,EAGvB71J,KAAA81J,eAAyB,EAyCxB91J,KAAAC,YAAc,IAAIC,GAW1B,CAGOE,YACCJ,KAAK+1J,UAAY/1J,KAAK41J,kBACtB51J,KAAKD,QAAQS,QAAK8d,KAAK,IAAC,EAAGhe,MAAOC,gCAA4CP,KAAK+1J,YAAYr1J,UAAU6d,IACrGve,KAAK6wI,WAAWtyH,GAAsBve,KAAK41J,gBAC3C51J,KAAKyI,KAAKqH,cAAY,GAI9B9P,KAAKg2J,eAAex1J,QAChBC,KAAUT,KAAKC,cACjBS,UAAUmwI,IACJ7wI,KAAK+1J,UAED/1J,KAAKD,QAAQiB,SADb6vI,EACsBtwI,wBAAoCP,KAAK+1J,SAAU,QAEnDx1J,4BAAwCP,KAAK+1J,UAAS,EAG5F,CAEOE,qBACCj2J,KAAKk2J,cAELl2J,KAAKm2J,OAAO31J,QACR41J,KAAU,OAAK,EACf9lJ,KAAO,IAAMtQ,KAAK6wI,WAAa7wI,KAAKm1J,SAAM,EAC1C72I,KAAK,IACP5d,UAAU,KACRV,KAAKm1J,OAAS,IAAIkB,KAAer2J,KAAKk2J,aAAax0J,SAAU1B,KAAK21J,KAAI,EAGlF,CAEOptJ,SACCvI,KAAKq1J,WAGTr1J,KAAK6wI,UAAY7wI,KAAK6wI,SAC1B,CAEO//D,OACH9wE,KAAK6wI,UAAW,CACpB,CAEO9mF,QACH/pD,KAAK6wI,UAAW,CACpB,CAAC5vI,SAAAjB,KAAA,mBAAAkB,iBAnHQ6zJ,GAAyB91J,MAAAkC,IAAA,GAAAlC,MAAA6S,MAAA7S,gCAAA8S,MAAA,EAAA9Q,SAAAjB,KAAA,UAAA2hC,EAAAtgC,IAAA,MAAzB0zJ,EAAyBzzJ,UAAA,wBAAAuzJ,eAAA,SAAAlzJ,EAAAC,EAAAkzJ,MAAA,EAAAnzJ,WAmDpB2yJ,IAAgC,82BDxElDr1J,MAAA,UAAAA,CAA0D,WAEbA,MAAA,0BAAS2C,EAAA2G,QAAQ,GACtDtJ,MAAA,WACIA,MAAA,GACJA,QACAA,MAAA,EAAAq3J,EAAA,sBACJr3J,QAEAA,MAAA,EAAAs3J,EAAA,aAIJt3J,eAZwGA,cAAA,KAAA2C,EAAAivI,UAA9D5xI,MAAA,UAAA2C,EAAAk0J,eAAAl0J,EAAAivI,SAAA,qBAK+C5xI,MAAA,GAAAA,MAAA,OAAA2C,EAAAi0J,aAG/E52J,cAAA,OAAA2C,EAAAivI,mOCYGkkB,CAA0B,yHChBH91J,MAAA,iBAK7B,IAAMu3J,EAA2B,MAAlC,MAAOA,EAPb12J,cASkBE,KAAA6kD,MAAQ,UAMzB5jD,SAAAjB,KAAA,mBAAAkB,iBARYs1J,EAA2B,EAAAv1J,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAA3Bm1J,EAA2Bl1J,UAAA,2BAAAyb,UAAA,SAAApb,EAAAC,MAAA,EAAAD,YAKP80J,+HATpB,CACT,CAAE/mI,QAASgnI,KAAcC,SAAU,aACpC1B,mBAAAxhJ,EAAAlS,MAAA,EAAAC,KAAA,EAAAC,OAAA,kBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YAHU1C,MAAA,EAAA23J,EAAA,yBAAA33J,kCAKAu3J,CAA2B,0HCNxBv3J,MAAA,4BAFRA,MAAA,GACIA,MAAA,YACIA,MAAA,EAAA43J,EAAA,sBACJ53J,QACJA,yCAHoCA,cAAA,eAAA63J,EAAAjyG,OACb5lD,cAAA,mBAAA63J,EAAAC,uCAH3B93J,MAAA,GACIA,MAAA,EAAA+3J,EAAA,sBAKJ/3J,kDALmBA,cAAA,OAAAqF,EAAA+M,MAAAylJ,EAAAzlJ,6BASPpS,MAAA,4BAFRA,MAAA,GACIA,MAAA,YACIA,MAAA,EAAAg4J,EAAA,sBACJh4J,QACJA,yCAHoCA,cAAA,eAAA63J,EAAAjyG,OACb5lD,cAAA,mBAAA63J,EAAAC,uCAH3B93J,MAAA,GACIA,MAAA,EAAAi4J,EAAA,sBAKJj4J,kDALmBA,cAAA,OAAA6F,EAAAuM,OAAAylJ,EAAAzlJ,6BASPpS,MAAA,4BAFRA,MAAA,GACIA,MAAA,YACIA,MAAA,EAAAk4J,EAAA,sBACJl4J,QACJA,yCAHoCA,cAAA,eAAA63J,EAAAjyG,OACb5lD,cAAA,mBAAA63J,EAAAC,uCAH3B93J,MAAA,GACIA,MAAA,EAAAm4J,EAAA,sBAKJn4J,kDALmBA,cAAA,OAAAiH,EAAAmL,MAAAylJ,EAAAzlJ,iCAhBvBpS,MAAA,UACIA,MAAA,EAAAo4J,EAAA,qBAAAp4J,CAMe,EAAAq4J,EAAA,qBANfr4J,CAMe,EAAAs4J,EAAA,sBAenBt4J,kCArBmBA,cAAA,YAAA63J,EAAAzmG,MAOApxD,cAAA,YAAA63J,EAAAzmG,OAAAymG,EAAAzmG,MAOApxD,cAAA,YAAA63J,EAAAzmG,OCHZ,IAAMmnG,EAAqB,MAA5B,MAAOA,EAMXp3J,WAEA,CAACa,SAAAjB,KAAA,mBAAAkB,iBARUs2J,EAAqB,EAAAv2J,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAArBm2J,EAAqBl2J,UAAA,oBAAAuzJ,eAAA,SAAAlzJ,EAAAC,EAAAkzJ,MAAA,EAAAnzJ,WAGf60J,IAA2B,uFAPjC,CACT,CAAE9mI,QAASgnI,KAAcC,SAAU,YACpCp1J,MAAA,EAAAC,KAAA,EAAAC,OAAA,sFAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDVH1C,MAAA,EAAAw4J,EAAA,mBAAyBx4J,MAAA,UAAA2C,EAAAkJ,+MCYZ0sJ,CAAqB,+JCZlCv4J,MAAA,GACEA,MAAA,GACFA,8BAGEA,MAAA,2CCEO,IAAMy4J,EAA8B,MAArC,MAAOA,UAAsCC,IAEjD73J,YAEY83J,EACVC,GAEA/7H,MAAM87H,GAHI53J,KAAA43J,QAKVC,EAASr2H,SAASo2H,EAAME,cAAe,sBACvCD,EAASr2H,SAASo2H,EAAME,cAAe,UACvCD,EAASr2H,SAASo2H,EAAME,cAAe,iBACzC,CAAC72J,SAAAjB,KAAA,mBAAAkB,iBAZUw2J,GAA6Bz4J,YAAA,GAAAA,aAAA,EAAAgC,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAA7Bq2J,EAA6Bp2J,UAAA,uCAAA4Q,SAAA,CAAAjT,OAAA84J,MAAA14J,EAAA41J,mBAAAxhJ,EAAAlS,MAAA,EAAAC,KAAA,EAAAC,OAAA,0CAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,YDP5C1C,MAAA,EAAA+4J,EAAA,qBAAA/4J,CAEe,EAAAg5J,EAAA,yBAAAh5J,8BAFAA,MAAA,QAAA2C,EAAAs2J,aAAAj5J,CAAqB,WAAAC,sDCOrBw4J,CAA8B,iKDP7Cz4J,MAAA,GACEA,MAAA,GACFA,8BAGEA,MAAA,2CEEO,IAAMk5J,EAAgC,MAAvC,MAAOA,UAAwCR,IACnD73J,YAEY83J,EACVC,GAEA/7H,MAAM87H,GAHI53J,KAAA43J,QAKVC,EAASr2H,SAASo2H,EAAME,cAAe,sBACvCD,EAASr2H,SAASo2H,EAAME,cAAe,UACvCD,EAASr2H,SAASo2H,EAAME,cAAe,mBACzC,CAAC72J,SAAAjB,KAAA,mBAAAkB,iBAXUi3J,GAA+Bl5J,YAAA,GAAAA,aAAA,EAAAgC,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAA/B82J,EAA+B72J,UAAA,yCAAA4Q,SAAA,CAAAjT,OAAA84J,MAAA14J,EAAA41J,mBAAAxhJ,EAAAlS,MAAA,EAAAC,KAAA,EAAAC,OAAA,0CAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,YFP9C1C,MAAA,EAAAm5J,EAAA,qBAAAn5J,CAEe,EAAAo5J,EAAA,yBAAAp5J,8BAFAA,MAAA,QAAA2C,EAAAs2J,aAAAj5J,CAAqB,WAAAC,sDEOrBi5J,CAAgC,sIFP/Cl5J,MAAA,GACEA,MAAA,GACFA,8BAGEA,MAAA,2CGUK,IAAM04J,EAAsB,MAA7B,MAAOA,EAIX,YACWtC,GAAa,OAAOr1J,KAAKs4J,SAAW,CAC/C,YAAWjD,CAAShkJ,GAA2BrR,KAAKs4J,aAAYC,MAAsBlnJ,EAAQ,CAK9FvR,YAEY83J,GAAA53J,KAAA43J,QAXL53J,KAAAk4J,cAAwB,EAOxBl4J,KAAAw4J,MAAgB,EAOfx4J,KAAAy4J,WAAY,CAFjB,CAGIC,kBACL14J,KAAKy4J,WAAY,CACnB,CAEOE,wBACA34J,KAAKy4J,YAGLz4J,KAAKw4J,OAASx4J,KAAK43J,MAAME,cAAcc,YAAc,IACxD54J,KAAKw4J,MAAQx4J,KAAK43J,MAAME,cAAcc,YAC1C,CAAC33J,SAAAjB,KAAA,mBAAAkB,iBA3BUy2J,GAAsB14J,YAAA,KAAAgC,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAtBs2J,EAAsBr2J,UAAA,mBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,yMAFtB,CAAE,CAAE+tB,QAASgnI,KAAcC,SAAU,aAAY1B,mBAAA51J,EAAAkC,MAAA,EAAAC,KAAA,EAAAC,OAAA,0CAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,YHb9D1C,MAAA,EAAA85J,EAAA,qBAAA95J,CAEe,EAAA+5J,EAAA,yBAAA/5J,8BAFAA,MAAA,QAAA2C,EAAAs2J,aAAAj5J,CAAqB,WAAAC,sDGevBy4J,CAAsB,6JCZ3B14J,MAAA,yCAAsGA,MAAA,SAAAK,EAAA25J,iCACtGh6J,MAAA,yCAAkEA,MAAA,SAAAE,EAAA85J,uBCK1E,IAAIv9H,EAAO,EAkCEw9H,EAAwB,MAA/B,MAAOA,EACT,MACWloJ,GAAO,OAAOhR,KAAKm5J,GAAK,CACnC,MAAWnoJ,CAAGK,GAAiBrR,KAAKm5J,IAAM9nJ,CAAO,CAkBjD,SAAWA,GAAU,OAAOrR,KAAKo5J,MAAQ,CACzC,SAAW/nJ,CAAMA,GACbrR,KAAKo5J,OAAS/nJ,EACdrR,KAAKq5J,UAAUhoJ,GACfrR,KAAKs5J,cAAcj1C,KAAKrkH,KAAKo5J,QAC7Bp5J,KAAKyI,KAAKkF,eACd,CAKA,YACW0nJ,GAA+B,OAAOr1J,KAAKs4J,SAAW,CACjE,YAAWjD,CAAShkJ,GAA2BrR,KAAKs4J,aAAYC,MAAsBlnJ,EAAQ,CAG9FvR,YACY2I,EAGDyhC,GAHClqC,KAAAyI,OAGDzI,KAAAkqC,UArCDlqC,KAAAm5J,IAAM,oBAAoBz9H,IAG7B17B,KAAAu5J,UAAoB,EAGpBv5J,KAAAw5J,eAAyB,EAMzBx5J,KAAAi5J,QAAkB,EAGjBj5J,KAAAo5J,QAAkB,EAWnBp5J,KAAAs5J,cAAgB,IAAIv2C,MAKjB/iH,KAAAs4J,WAAY,EAeZt4J,KAAAy5J,WAAY,EAoBdz5J,KAAAq5J,UAAahoJ,MAKbrR,KAAA05J,SAAW,OAhCX15J,KAAKkqC,UACLlqC,KAAKkqC,QAAQyvH,cAAgB35J,KACrC,CAEA,YACWmjH,GAAsB,OAAOnjH,KAAKy5J,SAAW,CACxD,YAAWt2C,CAAS9xG,GAAkBrR,KAAKy5J,aAAYlB,MAAsBlnJ,EAAQ,CAI9EuoJ,QAAQ32H,IACNjjC,KAAKq1J,WAAar1J,KAAKi5J,QACxBj5J,KAAKuI,OAAO06B,EAEpB,CAGO42H,UAAU52H,IACO,UAAfA,EAAM0F,MAAmC,UAAf1F,EAAM0F,QAAsB3oC,KAAKq1J,WAAar1J,KAAKi5J,QAC9Ej5J,KAAKuI,OAAO06B,EAEpB,CAEO62H,WAAWzoJ,GACdrR,KAAKo5J,OAAS/nJ,CAClB,CAGO0oJ,iBAAiBC,GACpBh6J,KAAKq5J,UAAYW,CACrB,CAGAC,kBAAkBD,GACdh6J,KAAK05J,SAAWM,CACpB,CAEOzxJ,OAAO06B,GAENjjC,KAAKqR,QADLrR,KAAKw5J,eAAiBx5J,KAAKu5J,UAA2B,OAAfv5J,KAAKqR,OAG9BrR,KAAKqR,OAEvB4xB,EAAM+oF,iBACV,CAEOkuC,iBAAiBj3H,IACfjjC,KAAKq1J,WAAar1J,KAAKi5J,QACxBj5J,KAAKuI,OAAO06B,EAEpB,CAEOk3H,iBAAiBvjG,GACpB52D,KAAKq1J,SAAWz+F,CACpB,CAAC31D,SAAAjB,KAAA,mBAAAkB,iBAjGQg4J,GAAwBj6J,mBAAAkC,KAAA,KAAAF,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAAxB63J,EAAwB53J,UAAA,uBAAAw3J,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,oCAAxBC,EAAAg4J,QAAA3mJ,EAAe,sBAAAA,GAAA,OAAfrR,EAAAi4J,UAAA5mJ,EAAiB,8NA7Bf,CACP,CAAEyc,QAAS0qI,IAAyBC,YAAanB,GACjD,CAAExpI,QAASgnI,KAAcC,SAAU,eACtC1B,mBAAA51J,EAAAkC,MAAA,EAAAC,KAAA,EAAAC,OAAA,sPAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YDjBL1C,MAAA,aAAkGA,MAAA,iBAAAgU,GAAA,OAASA,EAAA+4G,iBAAwB,GAAnI/sH,QACAA,MAAA,YAAAA,CAAkE,YAE1DA,MAAA,EAAAq7J,EAAA,qBAAAr7J,CAA6I,EAAAs7J,EAAA,sBAEjJt7J,QACAA,MAAA,YACIA,MAAA,GACJA,iBAR2CA,MAAA,KAAA2C,EAAAoP,IAAU/R,MAAA,aAAA2C,EAAAyzJ,UAAA,MACfp2J,cAAA,SAAA2C,EAAAq3J,QAAXh6J,MAAA,MAAA2C,EAAAoP,IAEK/R,MAAA,GAAAA,MAAA,SAAA2C,EAAA43J,eAAA,MAAA53J,EAAAyP,SAAAzP,EAAA23J,UAAA33J,EAAAyP,MAAAzP,EAAAyP,QACApS,cAAA,OAAA2C,EAAA43J,eAAA,MAAA53J,EAAAyP,orBCuCvB6nJ,CAAwB,yICzC7Bj6J,MAAA,UAAAA,CAAyE,UAEjEA,MAAA,GACJA,iCAFMA,cAAA,YACFA,cAAA,IAAAiH,EAAAgL,MAAA,8CAHZjS,MAAA,WAAKA,MAAA,mBAAAA,MAAAqJ,GAAA,MAAAtB,EAAA/H,QAAA,OAASA,MAAA+H,EAAAuB,SAAQ,GAClBtJ,MAAA,EAAAu7J,EAAA,aAKJv7J,gCAL8BA,cAAA,OAAAK,EAAA4R,6BAM9BjS,MAAA,uDAEIA,MAAA,yCAAuCA,MAAA,OAAAqF,EAAAm2J,SAAA,yDAEvCx7J,MAAA,yCAAsCA,MAAA,OAAA6F,EAAA21J,SAAA,+CCGvC,IAAMC,EAAyB,MAAhC,MAAOA,EAZb56J,cAsBYE,KAAA26J,WAAqB,EAEpB36J,KAAAkR,MAAgB,GAEhBlR,KAAAoqG,MAAyB,MAExBpqG,KAAA46J,eAAiB,IAAI73C,MAd/B,kBAA+B83C,GAC3B,OAAO76J,KAAKy6J,QAChB,CAEA,YACWA,GAAa,OAAOz6J,KAAK26J,SAAW,CAC/C,YAAWF,CAASppJ,GAAkBrR,KAAK26J,UAAYtpJ,CAAO,CAU9D9I,SAEIvI,KAAK46J,eAAev2C,KAAKrkH,KAAKy6J,SAClC,CAACx5J,SAAAjB,KAAA,mBAAAkB,iBArBQw5J,EAAyB,EAAAz5J,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAzBq5J,EAAyBp5J,UAAA,wBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,qmBDftC1C,MAAA,WACIA,MAAA,EAAA67J,EAAA,YAAA77J,CAMM,EAAA87J,EAAA,oBAEN97J,MAAA,WAAKA,MAAA,0BAAS2C,EAAA2G,QAAQ,GAClBtJ,MAAA,EAAA+7J,EAAA,qBAAA/7J,CACe,EAAAg8J,EAAA,sBAGnBh8J,iBAd4DA,MAAA,oBAAA2C,EAAA64J,SAAAx7J,CAAoC,UAAA2C,EAAA64J,UAA4Bx7J,MAAA,WAAA2C,EAAA64J,UAC5Ex7J,cAAA,mBAOnCA,cAAA,mBAC+BA,cAAA,gBAAA2C,EAAAwoG,OACzBnrG,cAAA,iBAAA2C,EAAAwoG,OAEAnrG,cAAA,eAAA2C,EAAAwoG,gUCLP,IACR8wD,MAAQ,YAAa,IACjB1gI,MAAM,UAAQsrB,MAAM,CAAE0yG,MAAO,WAAS,EACtCh+H,MAAM,WAASsrB,MAAM,CAAE0yG,MAAO,OAAK,EACnC2C,MAAW,oBAAkBC,MAAQ,mBAIpCV,CAAyB,udCc/B,IAAMW,EAAmC,MAA1C,MAAOA,EAKT,SACWhqJ,GACP,OAAOrR,KAAKo5J,MAChB,CAEA,SAAW/nJ,CAAMwzC,GACb7kD,KAAKo5J,OAASv0G,CAClB,CA+DA/kD,YACY2I,GAAAzI,KAAAyI,OA3EJzI,KAAAs7J,OAAS,IAAIrqI,KAEbjxB,KAAAo5J,OAA0B,MAY3Bp5J,KAAAu7J,YAAc,IAAIx4C,MAGlB/iH,KAAAw7J,cAAwB,EAGxBx7J,KAAAy7J,SAAmB,EAGnBz7J,KAAAqnC,OAA0B,OAWzBrnC,KAAA07J,gBAA6C,CAAE1jG,EAAG,EAAGrT,EAAG,GACxD3kD,KAAA27J,eAAyB,EAWzB37J,KAAA47J,aAAuB,EACvB57J,KAAA67J,YAAsB,EAWtB77J,KAAA87J,eAAyB,EACzB97J,KAAA+7J,cAAwB,EAazB/7J,KAAAg8J,SAAU,CAId,CAEItD,kBACH93J,WAAW,KACPZ,KAAKi8J,eAAiBj8J,KAAKk8J,cAAcpE,cAAcqE,WAAW,MAClEn8J,KAAKi8J,eAAeG,OAAO5D,MAAQx4J,KAAKq8J,aAAavE,cAAcc,YACnE54J,KAAKi8J,eAAeG,OAAOE,OAASt8J,KAAKq8J,aAAavE,cAAcyE,aAEpEv8J,KAAKw8J,YAAcx8J,KAAKy8J,WAAW3E,cAAcqE,WAAW,MAC5Dn8J,KAAKw8J,YAAYJ,OAAO5D,MAAQx4J,KAAK08J,UAAU5E,cAAcc,YAC7D54J,KAAKw8J,YAAYJ,OAAOE,OAASt8J,KAAK08J,UAAU5E,cAAcyE,aAE9Dv8J,KAAK28J,cAAgB38J,KAAK48J,aAAa9E,cAAcqE,WAAW,MAChEn8J,KAAK28J,cAAcP,OAAO5D,MAAQx4J,KAAK68J,YAAY/E,cAAcc,YACjE54J,KAAK28J,cAAcP,OAAOE,OAASt8J,KAAK68J,YAAY/E,cAAcyE,aAElEv8J,KAAK88J,gBAAkB98J,KAAK+8J,eAAejF,cAAcqE,WAAW,MACpEn8J,KAAK88J,gBAAgBV,OAAO5D,MAAQx4J,KAAKg9J,gBAAgBlF,cAAcc,YACvE54J,KAAK88J,gBAAgBV,OAAOE,OAASt8J,KAAKg9J,gBAAgBlF,cAAcyE,aAExEv8J,KAAKi9J,WAAWj9J,KAAKo5J,OAAQp5J,KAAKqnC,QAClCrnC,KAAKk9J,eACLl9J,KAAKm9J,YAAW,GAAM,GAEtBn9J,KAAKg8J,SAAU,EACfh8J,KAAKyI,KAAKqH,cAAY,EAG9B,CAEQmtJ,WAAW5rJ,EAAwBg2B,GACvC,OAAQA,GACJ,IAAK,OACD,IAAKrnC,KAAKs7J,OAAOv8I,MAAc1N,GAC3B,OAEJ,MAEJ,IAAK,OACD,IAAKrR,KAAKs7J,OAAOv8I,MAAe1N,EAAOwzC,OACnC,OAEJ7kD,KAAKs7J,OAAOnqE,MAAiB9/E,EAAO8/E,MAK5C,OAAAnxF,KAAK07J,gBAAgB1jG,EAAIh4D,KAAKs7J,OAAO8B,IAAIC,EAAIr9J,KAAKq8J,aAAavE,cAAcc,YAC7E54J,KAAK07J,gBAAgB/2G,GAAK,EAAI3kD,KAAKs7J,OAAO8B,IAAIlwJ,GAAKlN,KAAKq8J,aAAavE,cAAcyE,aAGnFv8J,KAAK47J,aAAgB57J,KAAKs7J,OAAO8B,IAAIE,EAAI,IAAOt9J,KAAK08J,UAAU5E,cAAcyE,aAG7Ev8J,KAAK87J,gBAAkB,EAAI97J,KAAKs7J,OAAOnqE,OAASnxF,KAAK08J,UAAU5E,cAAcyE,cAEtE,CACX,CAEQW,eACAl9J,KAAKy7J,SACLz7J,KAAKu9J,cAAczF,cAAczmJ,MAAQrR,KAAKs7J,OAAOlqJ,SAAS,MAAOpR,KAAKw7J,cAC1Ex7J,KAAKw9J,YAAY1F,cAAc2F,UAAYz9J,KAAKs7J,OAAOlqJ,SAAS,MAAOpR,KAAKw7J,gBAE5Ex7J,KAAKu9J,cAAczF,cAAczmJ,MAAQrR,KAAKs7J,OAAOlqJ,SAAS,MAAOpR,KAAKw7J,cAC1Ex7J,KAAKw9J,YAAY1F,cAAc2F,UAAYz9J,KAAKs7J,OAAOlqJ,SAAS,MAAOpR,KAAKw7J,cAEpF,CAEOkC,eACC19J,KAAKi9J,WAAWj9J,KAAKu9J,cAAczF,cAAczmJ,MAAO,UACxDrR,KAAKm9J,aAELn9J,KAAKw9J,YAAY1F,cAAc2F,UACzBz9J,KAAKs7J,OAAOlqJ,SADyBpR,KAAKy7J,QACrB,MACA,MADOz7J,KAAKw7J,cAG/C,CAEOmC,gBACH39J,KAAKy7J,SAAWz7J,KAAKy7J,QACrBz7J,KAAKk9J,cACT,CAEOzuJ,YAAYC,GACXA,EAAQm2C,QAAUn2C,EAAQm2C,MAAM+4G,aAC5B59J,KAAKi9J,WAAWvuJ,EAAQm2C,MAAMyjE,aAActoH,KAAKqnC,UACjDrnC,KAAKm9J,aACLn9J,KAAKk9J,eAGjB,CAEQC,WAAWU,GAAuB,EAAMx5C,GAAgB,GA8B5D,GA5BArkH,KAAK89J,cAAchG,cAAchyG,MAAMi4G,KAAO,GAAG/9J,KAAK07J,gBAAgB1jG,MACtEh4D,KAAK89J,cAAchG,cAAchyG,MAAMk4G,IAAM,GAAGh+J,KAAK07J,gBAAgB/2G,MACrE3kD,KAAK89J,cAAchG,cAAchyG,MAAMJ,gBAAkB1lD,KAAKs7J,OAAOlqJ,SAAS,OAAO,GAGrFpR,KAAKi+J,WAAWnG,cAAchyG,MAAMk4G,IAAM,GAAGh+J,KAAK47J,iBAClD57J,KAAKi+J,WAAWnG,cAAchyG,MAAMJ,gBAAkB1lD,KAAKs7J,OAAOlqJ,SAAS,OAAO,GAGlFpR,KAAKk+J,aAAapG,cAAchyG,MAAMk4G,IAAM,GAAGh+J,KAAK87J,mBACpD97J,KAAKk+J,aAAapG,cAAchyG,MAAMJ,gBAAkB,QAGnD1lD,KAAKw7J,cAAgBx7J,KAAKs7J,OAAOnqE,MAAQ,IAAQnxF,KAAKs7J,OAAO6C,QAC9Dn+J,KAAKg9J,gBAAgBlF,cAAcsG,UAAUC,OAAO,SAEpDr+J,KAAKg9J,gBAAgBlF,cAAcsG,UAAUE,IAAI,SAIrDt+J,KAAKu+J,UACLv+J,KAAKw+J,aACLx+J,KAAKy+J,YACLz+J,KAAK0+J,cAGL1+J,KAAKo5J,OAASp5J,KAAKw7J,aAAex7J,KAAKs7J,OAAOlqJ,SAAS,OAAO,GAAQpR,KAAKs7J,OAAOlqJ,SAAS,OAAO,GAE9FizG,EACA,OAAQrkH,KAAKqnC,QACT,IAAK,OACDrnC,KAAKu7J,YAAYl3C,KAAKrkH,KAAKo5J,QAC3B,MAEJ,IAAK,OACDp5J,KAAKu7J,YAAYl3C,KAAK,CAClBx/D,MAAO7kD,KAAKs7J,OAAOlqJ,SAAS,OAAO,GACnC+/E,MAAOnxF,KAAKs7J,OAAOnqE,QAKvC,CAEQqtE,aACJ,IAAKx+J,KAAKi8J,eACN,OAEJj8J,KAAKi8J,eAAe0C,YACpB3+J,KAAKi8J,eAAe2C,KAAK,EAAG,EAAG5+J,KAAKi8J,eAAeG,OAAO5D,MAAOx4J,KAAKi8J,eAAeG,OAAOE,QAC5Ft8J,KAAKi8J,eAAe4C,YAEpB,MAAMC,EAAgB9+J,KAAKi8J,eAAe8C,qBAAqB,EAAG,EAAG,EAAG/+J,KAAKi8J,eAAeG,OAAOE,QAEnGwC,EAAcE,aAAa,EAAG,SAC9BF,EAAcE,aAAa,EAAG,SAE9Bh/J,KAAKi8J,eAAegD,UAAYH,EAChC9+J,KAAKi8J,eAAej/F,OAEpB,MAAMkiG,EAAqBl/J,KAAKi8J,eAAe8C,qBAAqB,EAAG,EAAG/+J,KAAKi8J,eAAeG,OAAO5D,MAAO,GAE5G0G,EAAmBF,aAAa,EAAG,QAAQh/J,KAAKs7J,OAAO6D,IAAI7B,iBAC3D4B,EAAmBF,aAAa,EAAG,QAAQh/J,KAAKs7J,OAAO6D,IAAI7B,iBAE3Dt9J,KAAKi8J,eAAemD,yBAA2B,WAC/Cp/J,KAAKi8J,eAAegD,UAAYC,EAChCl/J,KAAKi8J,eAAej/F,OAEpBh9D,KAAKi8J,eAAemD,yBAA2B,aACnD,CAEQb,UACJ,IAAKv+J,KAAKw8J,YACN,OAEJx8J,KAAKw8J,YAAY6C,UAAU,EAAG,EAAGr/J,KAAKw8J,YAAYJ,OAAO5D,MAAOx4J,KAAKw8J,YAAYJ,OAAOE,QAExF,MAAMgD,EAAct/J,KAAKw8J,YAAYuC,qBAAqB,EAAG,EAAG,EAAG/+J,KAAKw8J,YAAYJ,OAAOE,QAE3FgD,EAAYN,aAAa,EAAG,kBAC5BM,EAAYN,aAAa,IAAM,oBAC/BM,EAAYN,aAAa,IAAM,kBAC/BM,EAAYN,aAAa,GAAM,oBAC/BM,EAAYN,aAAa,IAAM,kBAC/BM,EAAYN,aAAa,IAAM,oBAC/BM,EAAYN,aAAa,EAAG,iBAE5Bh/J,KAAKw8J,YAAYyC,UAAYK,EAC7Bt/J,KAAKw8J,YAAY+C,SAAS,EAAG,EAAGv/J,KAAKw8J,YAAYJ,OAAO5D,MAAOx4J,KAAKw8J,YAAYJ,OAAOE,OAC3F,CAEQmC,YACJ,IAAKz+J,KAAK28J,cACN,OAEJ38J,KAAKw/J,oBAAoBx/J,KAAK28J,cAAe,GAE7C,MAAM8C,EAAgBz/J,KAAK28J,cAAcoC,qBAAqB,EAAG,EAAG,EAAG/+J,KAAK28J,cAAcP,OAAOE,QAEjGmD,EAAcT,aAAa,EAAG,SAC9BS,EAAcT,aAAa,EAAG,uBAE9Bh/J,KAAK28J,cAAcsC,UAAYQ,EAC/Bz/J,KAAK28J,cAAc4C,SAAS,EAAG,EAAGv/J,KAAK28J,cAAcP,OAAO5D,MAAOx4J,KAAK28J,cAAcP,OAAOE,OACjG,CAEQoC,cACC1+J,KAAK88J,kBAGV98J,KAAKw/J,oBAAoBx/J,KAAK88J,gBAAiB,IAE/C98J,KAAK88J,gBAAgBmC,UAAYj/J,KAAKs7J,OAAOlqJ,SAAS,MAAOpR,KAAKw7J,cAClEx7J,KAAK88J,gBAAgByC,SAAS,EAAG,EAAGv/J,KAAK88J,gBAAgBV,OAAO5D,MAAOx4J,KAAK88J,gBAAgBV,OAAOE,QACvG,CAEQkD,oBAAoBE,EAAmCC,EAAoB,GAC/E,IAAInH,EAAQkH,EAAQtD,OAAO5D,MACvB8D,GAASoD,EAAQtD,OAAOE,OAExBzX,GAAO37D,KAAK02E,MAAMtD,GAASqD,GAC3B/a,GAAO17D,KAAK02E,MAAMpH,EAAQmH,GAE1BE,GAAaF,GAAanH,GAAS5T,GAAO+a,IAC1CG,GAAcH,GAAarD,IAAUzX,GAAO8a,IAEhDD,EAAQL,UAAU,EAAG,EAAG7G,EAAO8D,IAE/BoD,EAAQf,YAER,QAASzjG,GAAM,EAAGA,GAAM2pF,GAAM3pF,KAC1B,QAASmF,GAAM,EAAGA,GAAMukF,GAAO,IAAKvkF,GAChCq/F,EAAQd,KAAK,EAAIv+F,GAAMw/F,IAAc3kG,GAAM,EAAI,EAAI2kG,IAAa3kG,GAAM4kG,GAAaD,GAAYC,IAIvGJ,EAAQb,YAERa,EAAQT,UAAY,UACpBS,EAAQ1iG,MACZ,CAGO+iG,UAAU98H,GACTA,EAAMh0B,OAAS,IAGfg0B,EAAMhqB,SAAWjZ,KAAKq8J,aAAavE,eAAiB70H,EAAMhqB,SAAWjZ,KAAK89J,cAAchG,eACxF93J,KAAK27J,eAAgB,EACrB37J,KAAKggK,UAAU/8H,IACRA,EAAMhqB,SAAWjZ,KAAK08J,UAAU5E,eAAiB70H,EAAMhqB,SAAWjZ,KAAKi+J,WAAWnG,eACzF93J,KAAK67J,YAAa,EAClB77J,KAAKggK,UAAU/8H,KACRjjC,KAAKw7J,cAAgBv4H,EAAMhqB,SAAWjZ,KAAK68J,YAAY/E,eAAiB70H,EAAMhqB,SAAWjZ,KAAKk+J,aAAapG,iBAClH93J,KAAK+7J,cAAe,EACpB/7J,KAAKggK,UAAU/8H,IAEvB,CAGOg9H,QAAQh9H,GACXjjC,KAAK67J,YAAa,EAClB77J,KAAK+7J,cAAe,EACpB/7J,KAAK27J,eAAgB,CACzB,CAGOqE,UAAU/8H,GACb,GAAIjjC,KAAK67J,WAAY,CACjB,MAAMntI,EAAS1uB,KAAK08J,UAAU5E,cAAcoI,wBAIpClgK,KAAK47J,aAFT34H,EAAMk9H,QAAUzxI,EAAOsvI,IACnB/6H,EAAMk9H,QAAUzxI,EAAO0xI,OACHn9H,EAAMk9H,QAAUzxI,EAAOsvI,IAEvBtvI,EAAO4tI,OAGX,EAGxBt8J,KAAKs7J,OAAO8B,IAAIE,EAAKt9J,KAAK47J,aAAeltI,EAAO4tI,OAAU,IAE1Dt8J,KAAKm9J,aACLn9J,KAAKk9J,cAET,SAAWl9J,KAAK+7J,aAAc,CAC1B,MAAMrtI,EAAS1uB,KAAK68J,YAAY/E,cAAcoI,wBAItClgK,KAAK87J,eAFT74H,EAAMk9H,QAAUzxI,EAAOsvI,IACnB/6H,EAAMk9H,QAAUzxI,EAAO0xI,OACDn9H,EAAMk9H,QAAUzxI,EAAOsvI,IAEvBtvI,EAAO4tI,OAGX,EAG1Bt8J,KAAKs7J,OAAOnqE,MAAQ,EAAKnxF,KAAK87J,eAAiBptI,EAAO4tI,OAEtDt8J,KAAKm9J,aACLn9J,KAAKk9J,cAET,SAAWl9J,KAAK27J,cAAe,CAC3B,MAAMjtI,EAAS1uB,KAAKq8J,aAAavE,cAAcoI,wBAIvClgK,KAAK07J,gBAAgB/2G,EAFzB1hB,EAAMk9H,QAAUzxI,EAAOsvI,IACnB/6H,EAAMk9H,QAAUzxI,EAAO0xI,OACEn9H,EAAMk9H,QAAUzxI,EAAOsvI,IAEvBtvI,EAAO4tI,OAGX,EAKrBt8J,KAAK07J,gBAAgB1jG,EAFzB/0B,EAAMo9H,QAAU3xI,EAAOqvI,KACnB96H,EAAMo9H,QAAU3xI,EAAO4xI,MACEr9H,EAAMo9H,QAAU3xI,EAAOqvI,KAEvBrvI,EAAO8pI,MAGX,EAG7Bx4J,KAAKs7J,OAAO8B,IAAIC,EAAIr9J,KAAK07J,gBAAgB1jG,EAAItpC,EAAO8pI,MACpDx4J,KAAKs7J,OAAO8B,IAAIlwJ,EAAI,EAAKlN,KAAK07J,gBAAgB/2G,EAAIj2B,EAAO4tI,OAEzDt8J,KAAKm9J,aACLn9J,KAAKk9J,cACT,CACJ,CAACj8J,SAAAjB,KAAA,mBAAAkB,iBAtZQm6J,GAAmCp8J,aAAA,EAAAgC,SAAAjB,KAAA,UAAAulB,EAAAlkB,IAAA,MAAnCg6J,EAAmC/5J,UAAA,4BAAAyb,UAAA,SAAApb,EAAAC,MAAA,EAAAD,myBAAnCC,EAAAm+J,UAAA9sJ,GAAiB,KAAAhU,OAAA,mBAAAgU,IAAA,OAAjBrR,EAAAq+J,QAAAhtJ,GAAe,KAAAhU,OAAA,qBAAAgU,IAAA,OAAfrR,EAAAo+J,UAAA/sJ,GAAiB,KAAAhU,2gCC7B9BA,MAAA,WACIA,MAAA,GACAA,MAAA,UAAAA,CAA2B,UAA3BA,CAA2B,UAA3BA,CAA2B,UAA3BA,CAA2B,aAKPA,MAAA,aACJA,QACAA,MAAA,oBACJA,QACAA,MAAA,YAAAA,CAAuC,eAE/BA,MAAA,gBACJA,QACAA,MAAA,qBACJA,QACAA,MAAA,YAAAA,CAAkE,eAE1DA,MAAA,gBACJA,QACAA,MAAA,qBACJA,cAIZA,MAAA,aACIA,MAAA,qBACAA,MAAA,eAAAA,CAAkE,wBAAlEA,CAAkE,kBAEnBA,MAAA,0BAAS2C,EAAA87J,cAAc,GAA9Dz+J,QACAA,MAAA,sBACAA,MAAA,sBAA0BA,MAAA,0BAAS2C,EAAA+7J,eAAe,GAC9C1+J,MAAA,mBACJA,uBA3B4BA,MAAA,GAAAA,MAAA,UAAA2C,EAAAo6J,SAMA/8J,MAAA,GAAAA,MAAA,UAAA2C,EAAAo6J,SAIa/8J,MAAA,GAAAA,MAAA,UAAA2C,EAAA45J,cAEbv8J,MAAA,GAAAA,MAAA,UAAA2C,EAAAo6J,mGDU/BX,CAAmC,8CEnBxCp8J,MAAA,EAAAshK,EAAA,oDAAathK,MAAA,kBAAAoiJ,4CAVrBpiJ,MAAA,GACIA,MAAA,aACIA,MAAA,iBAAAgU,GAAAhU,aAAA0lH,GAAA1lH,QAASsJ,SAAUtJ,MAAAgU,EAAA+4G,kBAAwB,oBAI3C/sH,MAAA,GACJA,QACAA,MAAA,EAAAuhK,EAAA,qBACqCvhK,MAAA,2BAAAA,MAAA0lH,GAAA,MAAA58G,EAAA9I,QAAA,OAAiBA,MAAA8I,EAAAgiD,QAAO,GAGjE9qD,2CATQA,cAAA,mBAAAK,EAAAmhK,WAAAxhK,CAAqC,gBAAAK,EAAAohK,SAAA,OAArCzhK,CAAqC,QAAAK,EAAAohK,SAAA,KAArCzhK,CAAqC,SAAAK,EAAAohK,SAAA,KAArCzhK,CAAqC,iBAAAK,EAAA+1J,SAAA,eAFpBp2J,MAAA,SAAAA,MAAA,KAAAK,EAAAqhK,QAO2C1hK,MAAA,GAAAA,MAAA,4BAAAiU,EAAAjU,CAA4C,0BAAAK,EAAAwxE,gDASxG7xE,MAAA,EAAA2hK,EAAA,oDAAa3hK,MAAA,kBAAAoiJ,4CAHrBpiJ,MAAA,GACIA,MAAA,EAAA4hK,EAAA,qBACqC5hK,MAAA,2BAAAA,MAAAohH,GAAA,MAAAC,EAAArhH,QAAA,OAAiBA,MAAAqhH,EAAAv2D,QAAO,GAGjE9qD,gCAJoEA,cAAA,4BAAAE,EAAA2hK,OAAA7hK,CAAoC,0BAAAE,EAAA2xE,+CAYhG7xE,MAAA,WAAAA,CAAqE,eACjBA,MAAA,mBAAAA,MAAA8hK,GAAA,MAAAthB,EAAAxgJ,MAAA,UAASA,MAAAwgJ,EAAA11F,QAAO,GAAE9qD,MAAA,YAAMA,QACxEA,MAAA,eAA8CA,MAAA,mBAAAA,MAAA8hK,GAAA,MAAAx+J,EAAAtD,MAAA,UAASA,MAAAsD,EAAAjC,SAAQ,GAAErB,MAAA,YAAMA,oDAN/EA,MAAA,UAAAA,CAA0E,6BAC/BA,MAAA,uBAAAgU,GAAAhU,MAAA+hK,GAAA,MAAAC,GAAAhiK,QAAA,OAAeA,MAAAgiK,GAAAC,cAAAjuJ,GAAqB,GACvEhU,MAAA,KACJA,QACAA,MAAA,EAAAkiK,EAAA,aAIJliK,gCAP2BA,cAAA,QAAAqF,EAAAugD,MAAA5lD,CAAe,eAAAqF,EAAAk3J,aAAfv8J,CAAe,SAAAqF,EAAA+iC,QAGYpoC,MAAA,GAAAA,MAAA,QAAAqF,EAAA88J,uGCXnD,IAqBMC,EAA2B,MAAlC,MAAOA,EAoBT,YACWC,CAASjwJ,GAChBrR,KAAKuhK,WAAWzgK,KAAKuQ,EACzB,CAeA,YACWgkJ,GAAa,OAAOr1J,KAAKs4J,SAAW,CAC/C,YAAWjD,CAAShkJ,GAA2BrR,KAAKs4J,aAAYC,MAAsBlnJ,EAAQ,CAU9FvR,cAhDQE,KAAAwhK,MAAQ,eAMTxhK,KAAA2gK,MAAQ,IAAIl0I,KAAyB,GAMrCzsB,KAAA0gK,SAAmB,GAGnB1gK,KAAAu7J,YAAc,IAAIx4C,MACjB/iH,KAAAyhK,cAAgB,IAAIvhK,IAMrBF,KAAAuhK,WAAa,IAAI90I,IAAwB,GAGzCzsB,KAAAw7J,cAAwB,EAGxBx7J,KAAAqnC,OAA0B,OAG1BrnC,KAAAohK,YAAsB,EAGtBphK,KAAA8wE,MAAgB,EAQhB9wE,KAAA0hK,WAAa,IAAI3+C,MAEjB/iH,KAAA2hK,WAAa,IAAIzhK,IAKpBF,KAAKuhK,WAAW/gK,QACZipB,KAAU63I,GAAYthK,KAAKyhK,cAAcjhK,QACrCw9G,KAAasjD,MAEnB5gK,UAAU2Q,GAASrR,KAAKu7J,YAAYl3C,KAAKhzG,GAC/C,CAEOxQ,cACHb,KAAKuhK,WAAWxgK,WAChBf,KAAKyhK,cAAc1gK,WACnBf,KAAK2hK,WAAW7gK,OAChBd,KAAK2hK,WAAW5gK,UACpB,CAEO+4J,WAAWj1G,GACd7kD,KAAK6kD,MAAQA,CACjB,CAEQ+8G,UAAU/8G,GAA0B,CACrCk1G,iBAAiBC,GACpBh6J,KAAK4hK,UAAY5H,CACrB,CAEQ6H,WAAa,CACd5H,kBAAkBD,GACrBh6J,KAAK6hK,SAAW7H,CACpB,CAEOkH,cAAcr8G,GACjB7kD,KAAK8hK,eAAiBj9G,EAElB7kD,KAAKohK,aACLphK,KAAK6kD,MAAQ7kD,KAAK8hK,eAClB9hK,KAAKyhK,cAAc3gK,KAAK+jD,GACxB7kD,KAAK4hK,UAAU/8G,GAEvB,CAEOt8C,SACHvI,KAAK8wE,MAAQ9wE,KAAK8wE,KAClB9wE,KAAK0hK,WAAWr9C,KAAKrkH,KAAK8wE,KAC9B,CAEO/mB,QACH/pD,KAAK8wE,MAAO,EACZ9wE,KAAK0hK,WAAWr9C,MAAK,EACzB,CAEO/jH,SACHN,KAAK6kD,MAAQ7kD,KAAK8hK,eAClB9hK,KAAKyhK,cAAc3gK,KAAKd,KAAK6kD,OAC7B7kD,KAAK4hK,UAAU5hK,KAAK6kD,OACpB7kD,KAAK+pD,OACT,CAEO02G,WACH,OAAQzgK,KAAKqnC,QACT,IAAK,OAAQ,OAAernC,KAAK6kD,MACjC,IAAK,OAAQ,OAAgB7kD,KAAK6kD,MAAOA,MAEjD,CAEOs1G,iBAAiBvjG,GACpB52D,KAAKq1J,SAAWz+F,CACpB,CAAC31D,SAAAjB,KAAA,mBAAAkB,iBAnHQmgK,EAA2B,EAAApgK,SAAAjB,KAAA,UAAAulB,EAAAlkB,IAAA,MAA3BggK,EAA2B//J,UAAA,2BAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,gUATzB,CACP,CACI+tB,QAASqyI,KACT1H,YAAagH,EACbxxI,OAAO,GAEX,CAAEH,QAASgnI,KAAcC,SAAU,kBACtC1B,mBAAAxhJ,GAAAlS,MAAA,EAAAC,KAAA,EAAAC,OAAA,mnBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,cDnCL1C,MAAA,EAAA+iK,EAAA,sBAAA/iK,CAYe,EAAAgjK,EAAA,qBAZfhjK,CAYe,EAAAijK,GAAA,sBAAAjjK,cAZAA,MAAA,QAAA2C,EAAAk/J,QAcA7hK,cAAA,OAAA2C,EAAAk/J,wwGCuBFO,CAA2B,sDCrCjC,MAAMc,EAAO9E,GAA2B,IAAbA,EAAE/5J,OAAe,IAAI+5J,IAAMA,EAChD+E,EAASA,CAACC,EAAWC,EAAc,MAAQD,EAAI,EAAI,EAAIA,EAAIC,EAAMA,EAAMp5E,KAAKqD,MAAM81E,GAClFE,EAAWA,CAACF,EAAWC,EAAc,EAAGE,EAAyB,IAAMH,EAAI,EAAI,EAAIA,EAAIC,EAAMA,GAAOD,EAAEl+G,QAAQq+G,GCarH,MAAOvxI,EACF,aAAOwxI,GACV,OAAO,IAAIxxI,EAAM,KAAO,SAA4B,SAAhBi4D,KAAKw5E,UAAqBtxJ,SAAS,IAAIuxJ,OAAO,EAAG,GACzF,CAgBA,OAAWC,GACP,OAAO5iK,KAAK6iK,SAChB,CAEA,OAAWD,CAAIvxJ,IACVrR,KAAK8iK,KAAKC,EAAG/iK,KAAK8iK,KAAKE,EAAGhjK,KAAK8iK,KAAKz8H,GAAK,CACtC+7H,EAAO/wJ,EAAM0xJ,EAAG,KAChBX,EAAO/wJ,EAAM2xJ,EAAG,KAChBZ,EAAO/wJ,EAAMg1B,EAAG,MAGpBrmC,KAAKshD,KAAK,MACd,CAgBA,OAAW69G,GACP,OAAOn/J,KAAKijK,SAChB,CAEA,OAAW9D,CAAI9tJ,IACVrR,KAAKkjK,KAAK5F,EAAGt9J,KAAKkjK,KAAK7F,EAAGr9J,KAAKkjK,KAAKC,GAAK,CACtCZ,EAASlxJ,EAAMisJ,EAAG,KAClBiF,EAASlxJ,EAAMgsJ,EAAG,GAClBkF,EAASlxJ,EAAM8xJ,EAAG,IAGtBnjK,KAAKshD,KAAK,MACd,CAgBA,OAAW87G,GACP,OAAOp9J,KAAKojK,SAChB,CAEA,OAAWhG,CAAI/rJ,IACVrR,KAAKqjK,KAAK/F,EAAGt9J,KAAKqjK,KAAKhG,EAAGr9J,KAAKqjK,KAAKn2J,GAAK,CACtCq1J,EAASlxJ,EAAMisJ,EAAG,KAClBiF,EAASlxJ,EAAMgsJ,EAAG,GAClBkF,EAASlxJ,EAAMnE,EAAG,IAGtBlN,KAAKshD,KAAK,MACd,CAQA,SAAW6vC,GAAU,OAAOnxF,KAAKsjK,MAAQ,CACzC,SAAWnyE,CAAM9/E,GACbrR,KAAKsjK,OAASf,EAASlxJ,EAAO,EAClC,CAMA,cAAWkyJ,GACP,OAAOr6E,KAAKs6E,KACRxjK,KAAK8iK,KAAKC,EAAI/iK,KAAK8iK,KAAKC,EAAI,KAC1B/iK,KAAK8iK,KAAKE,EAAIhjK,KAAK8iK,KAAKE,EAAI,KAC5BhjK,KAAK8iK,KAAKz8H,EAAIrmC,KAAK8iK,KAAKz8H,EAAI,KAEtC,CAEA,UAAWo9H,GACP,OAAOzjK,KAAKujK,WAAa,GAC7B,CAEA,WAAWpF,GACP,OAAQn+J,KAAKyjK,MACjB,CAKA3jK,YACI+kD,GAnHI7kD,KAAA8iK,KAAa,CAAEC,EAAG,EAAGC,EAAG,EAAG38H,EAAG,GAE9BrmC,KAAA6iK,UAAY,IAAIa,MAAM1jK,KAAK8iK,KAAM,CACrCj8I,IAAKA,CAAC+7I,EAAWntG,IAAyBmtG,EAAIntG,GAC9CjnC,IAAKA,CAACo0I,EAAWntG,EAAsBpkD,KACnCuxJ,EAAIntG,GAAY2sG,EAAO/wJ,EAAO,KACvBrR,KAAKshD,KAAK,UAsBjBthD,KAAAkjK,KAAa,CAAE5F,EAAG,EAAGD,EAAG,EAAG8F,EAAG,GAE9BnjK,KAAAijK,UAAY,IAAIS,MAAM1jK,KAAKkjK,KAAM,CACrCr8I,IAAKA,CAACs4I,EAAW1pG,IAAyB0pG,EAAI1pG,GAC9CjnC,IAAKA,CAAC2wI,EAAW1pG,EAAsBpkD,KACnC8tJ,EAAI1pG,GAA+B8sG,EAASlxJ,EAAf,MAAbokD,EAAmC,IAAuB,GACnEz1D,KAAKshD,KAAK,UAsBjBthD,KAAAqjK,KAAa,CAAE/F,EAAG,EAAGD,EAAG,EAAGnwJ,EAAG,GAE9BlN,KAAAojK,UAAY,IAAIM,MAAM1jK,KAAKqjK,KAAM,CACrCx8I,IAAKA,CAACu2I,EAAW3nG,IAAyB2nG,EAAI3nG,GAC9CjnC,IAAKA,CAAC4uI,EAAW3nG,EAAsBpkD,KACnC+rJ,EAAI3nG,GAA+B8sG,EAASlxJ,EAAf,MAAbokD,EAAmC,IAAuB,GACnEz1D,KAAKshD,KAAK,UAsBjBthD,KAAAsjK,OAAiB,EAiCjBz+G,IACqB,iBAAVA,EACP7kD,KAAK+e,MAAM8lC,IAEP8+G,EAAM9+G,GACN7kD,KAAK4iK,IAAM/9G,EACJ++G,EAAM/+G,GACb7kD,KAAKm/J,IAAMt6G,EACJg/G,EAAMh/G,KACb7kD,KAAKo9J,IAAMv4G,GAGf7kD,KAAKsjK,OAAS,MAAOz+G,EAAQA,EAAMze,EAAI,GAGnD,CAEOrnB,MAAM8lC,GACJA,IACDA,EAAQ7kD,KAAK8jK,kBACjBj/G,EAAQA,EAAM3gD,cAGd,MAAM6/J,EAAQ,2lBAA2lBC,KAFzmBn/G,EAAQo/G,EAASC,SAASr/G,IAAUA,GAIpC,GAAIk/G,EAAO,CACP,GAAIA,EAAM,GACN,GAAIA,EAAM,GAAI,CAEV,MAAMI,EAAOC,SAASL,EAAM,GAAI,KACzBhB,EAAGC,EAAG38H,EAAGD,GAAK,CAAE+9H,GAAQ,GAAM,IAAOA,GAAQ,GAAM,IAAOA,GAAQ,EAAK,IAAa,IAAPA,GACpFnkK,KAAK4iK,IAAM,CAAEG,IAAGC,IAAG38H,KACnBrmC,KAAKmxF,MAAQ/qD,EAAI,GACrB,SAAW29H,EAAM,GAAI,CAEjB,MAAMnB,EAAMwB,SAASL,EAAM,GAAI,KACxBhB,EAAGC,EAAG38H,GAAK,CAAEu8H,GAAO,GAAM,IAAOA,GAAO,EAAK,IAAY,IAANA,GAC1D5iK,KAAK4iK,IAAM,CAAEG,IAAGC,IAAG38H,KACnBrmC,KAAKmxF,MAAQ,CACjB,SAAW4yE,EAAM,GAAI,CAEjB,MAAMI,EAAOC,SAASL,EAAM,GAAI,KACzBhB,EAAGC,EAAG38H,EAAGD,GAAK,CAAE+9H,GAAQ,GAAM,GAAMA,GAAQ,EAAK,GAAMA,GAAQ,EAAK,GAAY,GAAPA,GAChFnkK,KAAK4iK,IAAM,CAAEG,EAAGA,GAAKA,GAAK,GAAIC,EAAGA,GAAKA,GAAK,GAAI38H,EAAGA,GAAKA,GAAK,IAC5DrmC,KAAKmxF,MAAQ/qD,EAAI,EACrB,UAAW29H,EAAM,GAOb,MAAM,IAAI5vD,MAAM,0BAA0BtvD,KAPzB,CAEjB,MAAM+9G,EAAMwB,SAASL,EAAM,GAAI,KACxBhB,EAAGC,EAAG38H,GAAK,CAAEu8H,GAAO,EAAK,GAAMA,GAAO,EAAK,GAAW,GAANA,GACvD5iK,KAAK4iK,IAAM,CAAEG,EAAGA,GAAKA,GAAK,GAAIC,EAAGA,GAAKA,GAAK,GAAI38H,EAAGA,GAAKA,GAAK,IAC5DrmC,KAAKmxF,MAAQ,CACjB,CACqD,SAE9C4yE,EAAM,GAAI,CAEjB,MAAOhB,EAAGC,EAAG38H,EAAGD,GAAK,CAAC29H,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAC1D/jK,KAAK4iK,IAAM,CAAEG,EAAGsB,EAAatB,EAAG,KAAMC,EAAGqB,EAAarB,EAAG,KAAM38H,EAAGg+H,EAAah+H,EAAG,MAClFrmC,KAAKmxF,WAAcpuD,IAANqD,EAAkBi+H,EAAaj+H,GAAK,CACrD,SAAW29H,EAAM,IAAK,CAElB,MAAOhB,EAAGC,EAAG38H,EAAGD,GAAK,CAAC29H,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,KAC7D/jK,KAAK4iK,IAAM,CAAEG,EAAGsB,EAAatB,EAAG,KAAMC,EAAGqB,EAAarB,EAAG,KAAM38H,EAAGg+H,EAAah+H,EAAG,MAClFrmC,KAAKmxF,WAAcpuD,IAANqD,EAAkBi+H,EAAaj+H,GAAK,CACrD,SAAW29H,EAAM,IAAK,CAElB,MAAOzG,EAAGD,EAAG8F,EAAG/8H,GAAK,CAAsB,iBAAd29H,EAAM,IAAmBA,EAAM,IAAM,MAAQA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,KACjH/jK,KAAKm/J,IAAM,CAAE7B,EAAG+G,EAAa/G,GAAID,EAAGgH,EAAahH,GAAI8F,EAAGkB,EAAalB,IACrEnjK,KAAKmxF,WAAcpuD,IAANqD,EAAkBi+H,EAAaj+H,GAAK,CACrD,UAAW29H,EAAM,IAMb,MAAM,IAAI5vD,MAAM,0BAA0BtvD,KANxB,CAElB,MAAOy4G,EAAGD,EAAG8F,EAAG/8H,GAAK,CAAsB,iBAAd29H,EAAM,IAAmBA,EAAM,IAAM,MAAQA,EAAM,IAAKA,EAAM,IAAKA,EAAM,IAAKA,EAAM,KACjH/jK,KAAKm/J,IAAM,CAAE7B,EAAG+G,EAAa/G,GAAID,EAAGgH,EAAahH,GAAI8F,EAAGkB,EAAalB,IACrEnjK,KAAKmxF,WAAcpuD,IAANqD,EAAkBi+H,EAAaj+H,GAAK,CACrD,CACqD,CAGrD,OAAO,CACX,CAEA,OAAO,CACX,CAEO09H,iBAEH,IAAIj/G,EAAQ,IACZ,QAAS/nB,EAAI,EAAGA,EAAI,EAAGA,IACnB+nB,GAHY,mBAGKqkC,KAAK02E,MAAsB,GAAhB12E,KAAKw5E,WAErC,OAAO79G,CACX,CAEOzzC,SAAS1R,EAAsC,MAAO87J,GAAwB,GAGjF,OAFAA,EAAeA,GAAgBx7J,KAAKsjK,OAAS,EAErC5jK,GACJ,QACA,IAAK,MAED,MAAO,IAAMyiK,EAAIniK,KAAK8iK,KAAKC,EAAE3xJ,SAAS,KAAO+wJ,EAAIniK,KAAK8iK,KAAKE,EAAE5xJ,SAAS,KAAO+wJ,EAAIniK,KAAK8iK,KAAKz8H,EAAEj1B,SAAS,KAE1G,IAAK,MACD,OAAOoqJ,EACD,QAAQx7J,KAAK8iK,KAAKC,MAAM/iK,KAAK8iK,KAAKE,MAAMhjK,KAAK8iK,KAAKz8H,MAAMrmC,KAAKsjK,UAC7D,OAAOtjK,KAAK8iK,KAAKC,MAAM/iK,KAAK8iK,KAAKE,MAAMhjK,KAAK8iK,KAAKz8H,KAE3D,IAAK,MACD,OAAOm1H,EACD,QAAQx7J,KAAKkjK,KAAK5F,MAAMt9J,KAAKkjK,KAAK7F,OAAOr9J,KAAKkjK,KAAKC,OAAOnjK,KAAKsjK,UAC/D,OAAOtjK,KAAKkjK,KAAK5F,MAAMt9J,KAAKkjK,KAAK7F,OAAOr9J,KAAKkjK,KAAKC,MAG5D,IAAK,MACD,OAAO3H,EACD,OAAOx7J,KAAKkjK,KAAK5F,iBAAiBt9J,KAAKsjK,UACvC,OAAOtjK,KAAKkjK,KAAK5F,gBAEnC,CAMQh8G,KAAK12B,GACT,OAAQA,GACJ,IAAK,MACD5qB,KAAKskK,WACLtkK,KAAKukK,WACL,MAEJ,IAAK,MACDvkK,KAAKwkK,WACLxkK,KAAKykK,WACL,MAEJ,IAAK,MACDzkK,KAAK0kK,WACL1kK,KAAK2kK,WAIb,OAAO,CACX,CAEQJ,WACJ,IAAKxB,EAAGC,EAAG38H,GAAK,CACZrmC,KAAK8iK,KAAKC,EAAI,IACd/iK,KAAK8iK,KAAKE,EAAI,IACdhjK,KAAK8iK,KAAKz8H,EAAI,KAGdi8H,EAAMp5E,KAAKo5E,IAAIS,EAAGC,EAAG38H,GACrB8iD,EAAMD,KAAKC,IAAI45E,EAAGC,EAAG38H,GACzB,IAAI29G,EAAIse,EAAMn5E,EAEd,IAAIm0E,EAAI,EACJD,EAAY,IAARiF,EAAY,EAAIte,EAAIse,EACxBp1J,EAAIo1J,EAER,GAAIA,IAAQn5E,EAEL,CACH,OAAQm5E,GACJ,KAAKS,EAAGzF,GAAK0F,EAAI38H,GAAK29G,GAAKgf,EAAI38H,EAAI,EAAI,GAAI,MAC3C,KAAK28H,EAAG1F,GAAKj3H,EAAI08H,GAAK/e,EAAI,EAAG,MAC7B,KAAK39G,EAAGi3H,GAAKyF,EAAIC,GAAKhf,EAAI,EAG9BsZ,GAAK,CACT,EAECt9J,KAAKqjK,KAAK/F,EAAGt9J,KAAKqjK,KAAKhG,EAAGr9J,KAAKqjK,KAAKn2J,GAAK,CACtCk1J,EAAW,IAAJ9E,EAAS,KAChBiF,EAASlF,EAAG,GACZkF,EAASr1J,EAAG,GAEpB,CAEQo3J,WACJ,IAAKvB,EAAGC,EAAG38H,GAAK,CACZrmC,KAAK8iK,KAAKC,EAAI,IACd/iK,KAAK8iK,KAAKE,EAAI,IACdhjK,KAAK8iK,KAAKz8H,EAAI,KAGdi8H,EAAMp5E,KAAKo5E,IAAIS,EAAGC,EAAG38H,GACrB8iD,EAAMD,KAAKC,IAAI45E,EAAGC,EAAG38H,GAErBi3H,EAAI,EACJD,EAAI,EACJ8F,GAAKb,EAAMn5E,GAAO,EAEtB,GAAIm5E,IAAQn5E,EAEL,CACH,IAAI66D,EAAIse,EAAMn5E,EAId,OAFAk0E,EAAI8F,EAAI,GAAMnf,GAAK,EAAIse,EAAMn5E,GAAO66D,GAAKse,EAAMn5E,GAEvCm5E,GACJ,KAAKS,EAAGzF,GAAK0F,EAAI38H,GAAK29G,GAAKgf,EAAI38H,EAAI,EAAI,GAAI,MAC3C,KAAK28H,EAAG1F,GAAKj3H,EAAI08H,GAAK/e,EAAI,EAAG,MAC7B,KAAK39G,EAAGi3H,GAAKyF,EAAIC,GAAKhf,EAAI,EAG9BsZ,GAAK,CACT,EAECt9J,KAAKkjK,KAAK5F,EAAGt9J,KAAKkjK,KAAK7F,EAAGr9J,KAAKkjK,KAAKC,GAAK,CACtCf,EAAW,IAAJ9E,EAAS,KAChBiF,EAASlF,EAAG,GACZkF,EAASY,EAAG,GAEpB,CAEQuB,WACJ,IAAKpH,EAAGD,EAAGnwJ,GAAK,CACZlN,KAAKqjK,KAAK/F,EAAI,IAAM,EACpBt9J,KAAKqjK,KAAKhG,EACVr9J,KAAKqjK,KAAKn2J,GAGV4vB,EAAIosD,KAAK02E,MAAMtC,GACfsH,EAAItH,EAAIxgI,EACR24E,EAAIvoG,GAAK,EAAImwJ,GACbwH,EAAI33J,GAAK,EAAI03J,EAAIvH,GACjBn8J,EAAIgM,GAAK,GAAK,EAAI03J,GAAKvH,GACvByH,EAAMhoI,EAAI,EACVimI,EAA8B,IAA1B,CAAC71J,EAAG23J,EAAGpvD,EAAGA,EAAGv0G,EAAGgM,GAAG43J,GACvB9B,GAA8B,IAA1B,CAAC9hK,EAAGgM,EAAGA,EAAG23J,EAAGpvD,EAAGA,GAAGqvD,GACvBz+H,EAA8B,IAA1B,CAACovE,EAAGA,EAAGv0G,EAAGgM,EAAGA,EAAG23J,GAAGC,IAE1B9kK,KAAK8iK,KAAKC,EAAG/iK,KAAK8iK,KAAKE,EAAGhjK,KAAK8iK,KAAKz8H,GAAK,CACtC+7H,EAAOW,EAAG,KACVX,EAAOY,GAAG,KACVZ,EAAO/7H,EAAG,KAElB,CAEQs+H,WACJ,IAAKrH,EAAGD,EAAGnwJ,GAAK,CACZlN,KAAKqjK,KAAK/F,EACVt9J,KAAKqjK,KAAKhG,EACVr9J,KAAKqjK,KAAKn2J,GAGVi2J,GAAK,EAAI9F,GAAKnwJ,EAAI,EAEZ,IAANi2J,IAEI9F,EADM,IAAN8F,EACI,EACGA,EAAI,GACP9F,EAAInwJ,GAAS,EAAJi2J,GAET9F,EAAInwJ,GAAK,EAAQ,EAAJi2J,KAIxBnjK,KAAKkjK,KAAK5F,EAAGt9J,KAAKkjK,KAAK7F,EAAGr9J,KAAKkjK,KAAKC,GAAK,CACtC7F,EACAiF,EAASlF,EAAG,GACZkF,EAASY,EAAG,GAEpB,CAEQqB,WACJ,IAeIzB,EAAGC,EAAG38H,GAfLi3H,EAAGD,EAAG8F,GAAK,CACZnjK,KAAKkjK,KAAK5F,EAAI,IACdt9J,KAAKkjK,KAAK7F,EACVr9J,KAAKkjK,KAAKC,GAGd,SAAS4B,EAAQtvD,EAAGovD,EAAG3jK,GAGnB,OAFIA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUu0G,EAAc,GAATovD,EAAIpvD,GAASv0G,EACpCA,EAAI,GAAc2jK,EAClB3jK,EAAI,EAAI,EAAUu0G,GAAKovD,EAAIpvD,IAAM,EAAI,EAAIv0G,GAAK,EAC3Cu0G,CACX,CAIA,GAAU,IAAN4nD,EAEA0F,EAAIC,EAAI38H,EAAI88H,MACT,CACH,IAAI0B,EAAI1B,EAAI,GAAMA,GAAK,EAAI9F,GAAK8F,EAAI9F,EAAI8F,EAAI9F,EACxC5nD,EAAI,EAAI0tD,EAAI0B,EAChB9B,EAAIgC,EAAQtvD,EAAGovD,EAAGvH,EAAI,EAAI,GAC1B0F,EAAI+B,EAAQtvD,EAAGovD,EAAGvH,GAClBj3H,EAAI0+H,EAAQtvD,EAAGovD,EAAGvH,EAAI,EAAI,EAC9B,EAECt9J,KAAK8iK,KAAKC,EAAG/iK,KAAK8iK,KAAKE,EAAGhjK,KAAK8iK,KAAKz8H,GAAK,CACtC+7H,EAAW,IAAJW,EAAS,KAChBX,EAAW,IAAJY,EAAS,KAChBZ,EAAW,IAAJ/7H,EAAS,KAExB,CAEQo+H,WACJ,IAAKnH,EAAGD,EAAG8F,GAAK,CACZnjK,KAAKkjK,KAAK5F,EACVt9J,KAAKkjK,KAAK7F,EACVr9J,KAAKkjK,KAAKC,GAGd9F,GAAK8F,EAAI,GAAMA,EAAI,EAAIA,EAEvB,IAAIj2J,EAAIi2J,EAAI9F,EAEZA,EAAI,EAAIA,GAAK8F,EAAI9F,IAEhBr9J,KAAKqjK,KAAK/F,EAAGt9J,KAAKqjK,KAAKhG,EAAGr9J,KAAKqjK,KAAKn2J,GAAK,CACtCowJ,EACAiF,EAASlF,EAAG,GACZkF,EAASr1J,EAAG,GAEpB,EAqKJ,MAAM83J,EAAsB,CA7JxBC,MAAO,UACPC,OAAQ,UACRngH,KAAM,UACNogH,MAAO,UACPC,OAAQ,UACRpuC,IAAK,UACLquC,OAAQ,UACRC,QAAS,UACTp5E,MAAO,UACPq5E,KAAM,UACNC,MAAO,UACPvuC,OAAQ,UACRwuC,KAAM,UACNC,KAAM,UACNC,KAAM,UACNC,KAAM,UAKNC,OAAQ,UAKRC,UAAW,UACXC,aAAc,UACdC,WAAY,UACZC,MAAO,UACPC,MAAO,UACPC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,MAAO,UACPC,UAAW,UACXC,UAAW,UACXC,WAAY,UACZC,UAAW,UACXC,MAAO,UACPC,eAAgB,UAChBC,SAAU,UACVC,QAAS,UACTC,KAAM,UACNC,SAAU,UACVC,SAAU,UACVC,cAAe,UACfC,SAAU,UACVC,UAAW,UACXC,SAAU,UACVC,UAAW,UACXC,YAAa,UACbC,eAAgB,UAChBC,WAAY,UACZC,WAAY,UACZC,QAAS,UACTC,WAAY,UACZC,aAAc,UACdC,cAAe,UACfC,cAAe,UACfC,cAAe,UACfC,cAAe,UACfC,WAAY,UACZC,SAAU,UACVC,YAAa,UACbC,QAAS,UACTC,QAAS,UACTC,WAAY,UACZC,UAAW,UACXC,YAAa,UACbC,YAAa,UACbC,UAAW,UACXC,WAAY,UACZC,KAAM,UACNC,UAAW,UACXC,YAAa,UACbC,KAAM,UACNC,SAAU,UACVC,QAAS,UACTC,UAAW,UACXC,OAAQ,UACRC,MAAO,UACPC,MAAO,UACPC,SAAU,UACVC,cAAe,UACfC,UAAW,UACXC,aAAc,UACdC,UAAW,UACXC,WAAY,UACZC,UAAW,UACXC,qBAAsB,UACtBC,UAAW,UACXC,WAAY,UACZC,UAAW,UACXC,UAAW,UACXC,YAAa,UACbC,cAAe,UACfC,aAAc,UACdC,eAAgB,UAChBC,eAAgB,UAChBC,eAAgB,UAChBC,YAAa,UACbC,UAAW,UACXC,MAAO,UACPC,QAAS,UACTC,iBAAkB,UAClBC,WAAY,UACZC,aAAc,UACdC,aAAc,UACdC,eAAgB,UAChBC,gBAAiB,UACjBC,kBAAmB,UACnBC,gBAAiB,UACjBC,gBAAiB,UACjBC,aAAc,UACdC,UAAW,UACXC,UAAW,UACXC,SAAU,UACVC,YAAa,UACbC,QAAS,UACTC,UAAW,UACXC,UAAW,UACXC,OAAQ,UACRC,cAAe,UACfC,UAAW,UACXC,cAAe,UACfC,cAAe,UACfC,WAAY,UACZC,UAAW,UACXC,KAAM,UACNC,KAAM,UACNC,KAAM,UACNC,WAAY,UACZC,UAAW,UACXC,UAAW,UACXC,YAAa,UACbC,OAAQ,UACRC,WAAY,UACZC,SAAU,UACVC,SAAU,UACVC,OAAQ,UACRC,QAAS,UACTC,UAAW,UACXC,UAAW,UACXC,UAAW,UACXC,KAAM,UACNC,YAAa,UACbC,UAAW,UACXC,IAAK,UACLC,QAAS,UACTC,OAAQ,UACRC,UAAW,UACXC,OAAQ,UACRC,MAAO,UACPC,WAAY,UACZC,YAAa,UAKbC,cAAe,WAGN/J,EAAW,CAEpBC,SAAUc,EAGViJ,QAAS,GAITC,aAAc,CAEVC,KAAQ,GAKRC,MAAS,KAmCT,IAzBF,MAAOC,EAIT,UAAW7oH,GACP,OAAOxlD,KAAKsuK,QAChB,CAIAxuK,YAAmByuK,GAFXvuK,KAAAwuK,eAAwB,EAG5BxuK,KAAKsuK,SAAWC,EAChBvuK,KAAKyuK,QAAUn8I,OAAOC,KAAKvyB,KAAKsuK,SACpC,CAEOxtK,OAMH,OALAd,KAAKwuK,gBAKE,IAAIv9I,EAFGjxB,KAAKsuK,SADDtuK,KAAKyuK,QAAQzuK,KAAKwuK,cAAgBxuK,KAAKyuK,QAAQnrK,SAIrE,GAGqB0hK,GASlB,MAAMrB,EAAS3rG,GAAsB,MAAOA,GAAK,MAAOA,GAAK,MAAOA,EAI9D4rG,EAAS5rG,GAAsB,MAAOA,GAAK,MAAOA,GAAK,MAAOA,EAI9D6rG,EAAS7rG,GAAsB,MAAOA,GAAK,MAAOA,GAAK,MAAOA,EAQrEqsG,EAAeA,CAAChH,EAAWqR,EAAgB,KAC7C,MAAMr9J,EAAQ6yC,WAAWm5G,GAEzB,GATeA,IAAcA,GAAKA,EAAEsR,SAAS,KASzCC,CAAUvR,GAAI,CACd,MAAMwR,EAAMx9J,EAAQ,IAAMq9J,EAC1B,OAAOG,EAAM,EAAI,EAAIA,EAAMA,CAC/B,IAXWxR,IAAcA,GAAK,WAAWhtG,KAAKgtG,GAWnCyR,CAAMzR,GAAI,CACjB,MAAM0R,EAAM19J,EAAQ,IACpB,OAAOA,EAAQ,EAAI,IAAM09J,EAAMA,CACnC,IAbW1R,IAAcA,GAAK,WAAWhtG,KAAKgtG,GAanC2R,CAAM3R,GAAI,CACjB,MAAM0R,EAAO19J,GAAS,IAAM63E,KAAK+lF,IAAO,IACxC,OAAOF,EAAM,EAAI,IAAMA,EAAMA,CACjC,IAfY1R,IAAcA,GAAK,YAAYhtG,KAAKgtG,GAerC6R,CAAO7R,GAAI,CAClB,MAAM0R,EAAgB,GAAT19J,EAAuB,IACpC,OAAO09J,EAAM,EAAI,IAAMA,EAAMA,CACjC,IAjBY1R,IAAcA,GAAK,YAAYhtG,KAAKgtG,GAiBrC8R,CAAO9R,GAAI,CAClB,MAAM0R,EAAe,IAAR19J,EAAe,IAC5B,OAAO09J,EAAM,EAAI,IAAMA,EAAMA,CACjC,CACI,OAAO19J,kJCrtBXpS,MAAA,WAAmDA,MAAA,GAAaA,8BAAbA,cAAAK,EAAA8vK,kCAE/CnwK,MAAA,yCAA4DA,MAAA,QAAAE,EAAAkwK,gBAA9CpwK,MAAA,gEACdA,MAAA,YAA2DA,MAAA,wBAAAA,MAAAiU,GAAA,MAAApO,EAAA7F,QAAA,OAAAA,MAAA6F,EAAA01B,MAAoB,SAAQ,GAAEv7B,MAAA,GAAmBA,gCAAjEA,MAAA,QAAAqF,EAAAk2B,OAA8Cv7B,cAAAqF,EAAAgrK,gBCyB1F,IAAMC,EAAoB,MAA3B,MAAOA,EAmBT,iBAAWC,GACP,OAAOxvK,KAAKqvK,gBAAkBrvK,KAAKyvK,WAA2B,UAAdzvK,KAAKw6B,KACzD,CAEA16B,YAEY2I,GAAAzI,KAAAyI,OAjBZzI,KAAA0vK,aAAuB,EAGvB1vK,KAAAqvK,gBAA0B,EAG1BrvK,KAAAsvK,cAAwB,UAEjBtvK,KAAAw6B,MAAQ,SAEPx6B,KAAAyvK,WAAY,CAQhB,CAGGE,cACH3vK,KAAKyvK,WAAY,CACrB,CAGOG,aACH5vK,KAAKyvK,WAAY,CACrB,CAGO7V,QAAQ32H,GACXjjC,KAAKw6B,MAAQ,SAIb,MAAM4e,EAAKC,SAAS7Z,cAAc,YAClC4Z,EAAG/nC,MAAQrR,KAAK6vK,cAAe7vK,KAAK6vK,cAAe7vK,KAAKovK,QACxD/1H,SAAS3wB,KAAK4Y,YAAY8X,GAC1BA,EAAG94C,SACH+4C,SAASy2H,YAAY,QACrBz2H,SAAS3wB,KAAKyX,YAAYiZ,GAC1Bp5C,KAAKyI,KAAKkF,gBAEVs1B,EAAM+oF,iBACV,CAAC/qH,SAAAjB,KAAA,mBAAAkB,iBArDQquK,GAAoBtwK,aAAA,EAAAgC,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAApBkuK,EAAoBjuK,UAAA,mBAAAw3J,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,uCAApBC,EAAA+tK,aAAa,kCAAb/tK,EAAAguK,YAAY,oBAAA38J,GAAA,OAAZrR,EAAAg4J,QAAA3mJ,EAAe,qKAFb,CAAE,CAAEyc,QAASgnI,KAAcC,SAAU,WAAUp1J,MAAA,EAAAC,KAAA,EAAAC,OAAA,4MAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ID3B9D1C,MAAA,WACIA,MAAA,EAAA8wK,EAAA,aACA9wK,MAAA,WACIA,MAAA,EAAA+wK,EAAA,qBAAA/wK,CAA0G,EAAAgxK,EAAA,cAE9GhxK,iBAJgCA,cAAA,OAAA2C,EAAA8tK,aAEWzwK,MAAA,GAAAA,MAAA,OAAA2C,EAAA4tK,eAChCvwK,cAAA,OAAA2C,EAAA0tK,oYCMC,IACRpU,MAAQ,OAAQ,IACZ1gI,MAAM,YAAUsrB,MAAM,CAClBoqH,QAAS,EACTC,UAAW,0BACb,EACFhV,MAAW,cAAe,IACtBC,MAAQ,UAAQgV,MAAU,IACtBtqH,MAAM,CAAEoqH,QAAS,KAAG,EACpBpqH,MAAM,CAAEqqH,UAAW,oBAAqBD,QAAS,uBAUxDX,CAAoB,gRCTzBtwK,MAAA,YAGQA,MAAA,GACRA,8BAJgCA,MAAA,UAAAA,MAAA,EAAAI,EAAA,UAAAC,EAAA+wK,WAAA,YAAA/wK,EAAA+wK,WAAA,SAAA/wK,EAAA+wK,WAAA,UAAA/wK,EAAAymD,SAAA,WAAAzmD,EAAAymD,SAAA,UAAAzmD,EAAAymD,WAGxB9mD,cAAA,IAAAK,EAAAgxK,kBAAA,gMCXT,IAAMC,EAAwB,MAA/B,MAAOA,EANbzwK,cAQWE,KAAA+lD,SAAyB,QAGzB/lD,KAAAqwK,WAA6B,UAM7BrwK,KAAAswK,kBAAoB,GASpBtwK,KAAAwwK,WAAqB,GAGrBxwK,KAAA6yD,QAAU,GAGV7yD,KAAAs6D,WAAqB,EAE5Bm2G,8BACE,GAAKzwK,KAAK0wK,aAIV,OAAO1wK,KAAK0wK,aAAathK,QAAQ,MAAO,EAAKpP,KAAK0wK,aAAe,IAAM1wK,KAAK0wK,YAC9E,CAEAC,eACE,IAAIC,EAAoB,eAExB,OADAA,GAAqB,GAAG5wK,KAAKqwK,cACrBrwK,KAAK+lD,UACX,IAAK,QAGL,QAAS6qH,GAAqB,sBAF9B,IAAK,SAAWA,GAAqB,gBAAiB,MACtD,IAAK,QAAUA,GAAqB,gBAGtCA,UAAqB5wK,KAAKwwK,WAAa,GAAGxwK,KAAKwwK,cAAgB,GACxDI,CACT,CAAC3vK,SAAAjB,KAAA,mBAAAkB,iBA/CQqvK,EAAwB,EAAAtvK,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAxBkvK,EAAwBjvK,UAAA,wBAAA2Q,OAAA,CAAA8zC,SAAA,WAAAsqH,WAAA,aAAAh/J,MAAA,QAAAi/J,kBAAA,oBAAAI,aAAA,eAAA/sK,MAAA,QAAA6sK,WAAA,aAAA39G,QAAA,UAAAyH,UAAA,aAAApoD,SAAA,CAAAjT,MAFtB,CAAE,CAAEywB,QAASgnI,KAAcC,SAAU,eAAap1J,MAAA,GAAAC,KAAA,GAAAC,OAAA,wOAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDNjE1C,MAAA,UAAAA,CAAuE,UAAvEA,CAAuE,YAW3DA,MAAA,YACAA,MAAA,UAAMA,MAAA,GAAgCA,UAI1CA,MAAA,EAAA4xK,EAAA,cAKJ5xK,QAEAA,MAAA,UAMAA,MAAA,WACIA,MAAA,GACJA,iBArBOA,MAAA,GAAAA,MAAA,uBAPGA,MAAA,UAAAA,MAAA,GAAAwU,EAAA,UAAA7R,EAAAyuK,WAAA,YAAAzuK,EAAAyuK,WAAA,SAAAzuK,EAAAyuK,WAAA,UAAAzuK,EAAAmkD,SAAA,WAAAnkD,EAAAmkD,SAAA,UAAAnkD,EAAAmkD,WAQI9mD,cAAA,YAAA2C,EAAAyP,OAAA,IAAAzP,EAAAyP,OAAAzP,EAAA04D,UAAA14D,EAAAyP,MAAA,SAAApS,OACAA,MAAA,GAAAA,MAAA2C,EAAA04D,UAAA,cAIHr7D,cAAA,OAAA2C,EAAA0uK,mBAOPrxK,cAAA,UAAAA,MAAA,GAAA6Y,EAAA,WAAAlW,EAAAmkD,SAAA,UAAAnkD,EAAAmkD,UAAA9mD,CAIF,UAAAA,MAAA,GAAA4e,EAAAjc,EAAA6uK,gCAEGxxK,cAAA,UAAA2C,EAAA+uK,gBACD1xK,cAAA,sBAAA2C,EAAA+B,MAAA,GAAA/B,EAAA+B,MAAA,kECtBK4sK,CAAwB,qKCiB9B,IAAMO,EAA0B,MAAjC,MAAOA,EA8BXhxK,YACUixK,EACAtoK,GADAzI,KAAA+wK,oBACA/wK,KAAAyI,OA9BVzI,KAAAgxK,cAAmC,CACjC3pI,OAAQ,aACR4pI,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,MAAO,QAKOpxK,KAAAo5J,OAA2BhnI,aAElCpyB,KAAA42D,YAAa,EACb52D,KAAAqxK,KAA6C,UAS5CrxK,KAAAsxK,YAAc,IAAIvuD,MAE5B/iH,KAAAuxK,MAAQn/I,aAERpyB,KAAAC,YAAc,IAAIC,IA6DlBF,KAAAwxK,SAAgB,OAChBxxK,KAAAyxK,UAAiB,MAzDb,CAEJrxK,WACEJ,KAAK6yC,UAASigF,SAAM9yH,KAAKgxK,cAAehxK,KAAK0xK,YAEzC1xK,KAAK+wK,oBACP/wK,KAAK2xK,gBAAgB3xK,KAAK4xK,QAAS,OACnC5xK,KAAK2xK,gBAAgB3xK,KAAK6xK,QAAS,OAEvC,CAEAF,gBAAgBG,EAAqBC,GACnC,IAAKD,EACH,OAGF,IAAIE,EAAchyK,KAAK+wK,kBAAkB7mI,QAAQrjB,IAAIirJ,GAEjDE,EACFA,EAAY5uD,aAAa5iH,QACvB41J,KAAU4b,EAAY3gK,QAAK,EAC3B5Q,KAAUT,KAAKC,cACfS,UAAU2iH,IACVrjH,KAAK6yC,OAAS,IAAK7yC,KAAK6yC,QACxB7yC,KAAK6yC,OAAOk/H,GAAgB1uD,IAG9BxiF,QAAQoxI,KAAK,gCAAkCjyK,KAAK4xK,SAInC,SAAfE,IACF9xK,KAAK6yC,OAAS,IAAK7yC,KAAK6yC,QACxB7yC,KAAK6yC,OAAOk/H,GAAgB1kJ,MAEhC,CAEA,SAAIhc,GACF,OAAOrR,KAAKo5J,MACd,CAEA,SAAI/nJ,CAAMgyG,GACRrjH,KAAKo5J,OAAS/1C,EACdrjH,KAAKsxK,YAAYjtD,KAAKhB,GACtBrjH,KAAKwxK,SAASnuD,GACdrjH,KAAKyxK,WACP,CAEOS,cAAc7gK,IACdA,GAASA,EAAM8gK,OAAOnyK,KAAKo5J,UAGhCp5J,KAAKqR,MAAQA,EACf,CAMAyoJ,WAAWzoJ,IACTA,EAAQgc,IAAOhc,KAEFgc,aAAgBhc,KAAWA,EAAM8gK,OAAOnyK,KAAKo5J,UACxDp5J,KAAKo5J,OAAS/nJ,EACdrR,KAAKyI,KAAKqH,eAEd,CAEAiqJ,iBAAiBC,GACfh6J,KAAKwxK,SAAWxX,CAClB,CAEAC,kBAAkBD,GAChBh6J,KAAKyxK,UAAYzX,CACnB,CAGAG,iBAAiBvjG,GACf52D,KAAK42D,WAAaA,CACpB,CAEA/1D,cACEb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACnB,CAACE,SAAAjB,KAAA,mBAAAkB,iBArHU4vK,GAA0B7xK,MAAAkC,MAAAlC,aAAA,EAAAgC,SAAAjB,KAAA,UAAAggH,EAAA3+G,IAAA,MAA1ByvK,EAA0BxvK,UAAA,0BAAA2Q,OAAA,CAAAmnJ,OAAA,CAAAn6J,MAAAmzK,KAAA,kBAAAx7G,WAAA,aAAAy6G,KAAA,OAAAK,WAAA,aAAAE,QAAA,UAAAC,QAAA,UAAAQ,QAAA,UAAAC,QAAA,UAAAC,WAAA,cAAA9sD,QAAA,CAAA6rD,YAAA,eAAAp/J,SAAA,CAAAjT,MAd1B,CACT,CACEywB,QAASqyI,KACT1H,eAAamY,OAAW,IAAM1B,GAC9BjhJ,OAAO,GAET,CAAEH,QAASgnI,KAAcC,SAAU,WACpCp1J,MAAA,EAAAC,KAAA,EAAAC,OAAA,4GAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICtBH1C,MAAA,QAAAA,CAAyC,sBAGrCA,MAAA,yBAAAgU,GAAA,OAAiBrR,EAAAswK,cAAAj/J,EAAqB,GAMxChU,iBATGA,MAAA,iBAAA2C,EAAAg1D,YAED33D,cAAA,UAAA2C,EAAAyP,MAAApS,CAAiB,cAAA2C,EAAAyP,MAAjBpS,CAAiB,OAAA2C,EAAAyvK,KAAjBpyK,CAAiB,SAAA2C,EAAAixC,OAAjB5zC,CAAiB,WAAA2C,EAAAg1D,suDD2BRk6G,CAA0B,uHEZjC7xK,MAAA,eAAQA,MAAA,mBAAAA,MAAAiU,GAAA,MAAApO,EAAA7F,QAAA,OAASA,MAAA6F,EAAA2tK,0BAAyB,GAK1CxzK,gCAHQA,MAAA,WAAAK,EAAAozK,mEAYVzzK,MAAA,eAAQA,MAAA,mBAAAA,MAAAqJ,GAAA,MAAAtB,EAAA/H,QAAA,OAASA,MAAA+H,EAAA2rK,cAAAtuD,OAAoB,GAIrCplH,iDASEA,MAAA,eAAQA,MAAA,mBAAAA,MAAA0lH,GAAA,MAAAp9G,EAAAtI,QAAA,OAASA,MAAAsI,EAAAqrK,2BAA0B,GAK3C3zK,gCAHQA,MAAA,WAAAqF,EAAAuuK,4BC7BP,IAAMC,EAAoB,MAA3B,MAAOA,EAPbhzK,cASWE,KAAA+yK,kBAA4B,EAC5B/yK,KAAAgzK,aAAuB,EACvBhzK,KAAAizK,sBAAgC,EAChCjzK,KAAAkzK,cAAwB,EACxBlzK,KAAAmzK,uBAAiC,EACjCnzK,KAAAozK,iBAA2B,EAC3BpzK,KAAA0yK,0BAAoC,EACpC1yK,KAAAqzK,kBAA4B,EAC5BrzK,KAAA6yK,2BAAqC,EACrC7yK,KAAAszK,iBAA2B,EAG1BtzK,KAAAuzK,UAAgC,IAAIxwD,MACpC/iH,KAAAwzK,mBAAyC,IAAIzwD,MAC7C/iH,KAAAyzK,WAAiC,IAAI1wD,MACrC/iH,KAAA0zK,oBAA0C,IAAI3wD,MAC9C/iH,KAAA2zK,aAAmC,IAAI5wD,MACvC/iH,KAAA2yK,cAAoC,IAAI5vD,MAElD6wD,iBACE5zK,KAAKuzK,UAAUlvD,MACjB,CAEAouD,0BACEzyK,KAAKwzK,mBAAmBnvD,MAC1B,CAEAwvD,kBACE7zK,KAAKyzK,WAAWpvD,MAClB,CAEAuuD,2BACE5yK,KAAK0zK,oBAAoBrvD,MAC3B,CAEAyvD,eACE9zK,KAAK2zK,aAAatvD,MACpB,CAACpjH,SAAAjB,KAAA,mBAAAkB,iBAvCU4xK,EAAoB,EAAA7xK,SAAAjB,KAAA,UAAAklC,EAAA7jC,IAAA,MAApByxK,EAAoBxxK,UAAA,sBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,8gDDjBjC1C,MAAA,UAAAA,CAAuC,WAEnCA,MAAA,YAIAA,MAAA,cAAQA,MAAA,0BAAS2C,EAAAkyK,cAAc,GAM/B70K,UAGFA,MAAA,UAAAA,CAAmC,WAE/BA,MAAA,EAAA80K,EAAA,gBAMA90K,MAAA,cAAQA,MAAA,0BAAS2C,EAAAgyK,gBAAgB,GAMjC30K,UAEFA,MAAA,EAAA+0K,EAAA,gBAKA/0K,MAAA,UAAAA,CAA6C,gBACnCA,MAAA,0BAAS2C,EAAAiyK,iBAAiB,GAMlC50K,QACAA,MAAA,GAAAg1K,EAAA,iBAMFh1K,mBA/CMA,MAAA,GAAAA,MAAA,SAAA2C,EAAAmxK,iBAAA9zK,CAA2B,YAAA2C,EAAA+B,OAD3B1E,MAAA,cAAA2C,EAAAmxK,kBAME9zK,cAAA,UAAA2C,EAAAmxK,iBAAA9zK,CAA4B,YAAA2C,EAAA+B,OAD5B1E,MAAA,eAAA2C,EAAAmxK,kBAWG9zK,MAAA,GAAAA,MAAA,OAAA2C,EAAAqxK,sBAODh0K,cAAA,WAAA2C,EAAAwxK,gBAAAn0K,CAA4B,UAAA2C,EAAAoxK,aAD5B/zK,MAAA,eAAA2C,EAAAoxK,aAQD/zK,cAAA,OAAA2C,EAAA0xK,iBAOCr0K,MAAA,GAAAA,MAAA,WAAA2C,EAAAyxK,iBAAAp0K,CAA6B,UAAA2C,EAAAsxK,cAD7Bj0K,MAAA,eAAA2C,EAAAsxK,cAOCj0K,cAAA,OAAA2C,EAAAuxK,8jHC5BFL,CAAoB,kGCG1B,IAAMoB,EAAY,MAAnB,MAAOA,EACX,eAAO5S,CAAS6S,EAAgBC,GAC9B,IAAIxzI,EACJ,OAAO,WACL,MAAM8+H,EAAU1/J,KAAMq0K,EAAOC,UAC7B1zI,EAAUtvB,aAAasvB,GACvBhgC,WAAW,KACTuzK,EAAKI,MAAM7U,EAAS2U,EAAI,EACvBD,EACL,CACF,CAEAI,YAAYC,GACV,OAAO,IAAIC,MAAMD,GAAMz3G,KAAK,EAC9B,CAEA23G,gBAAgBl6G,EAA2BpzB,GACzC,OAAKozB,EAEsB,iBAATA,EACTptC,IAAOotC,EAAMpzB,GAEbozB,EAAK3sC,QAJL,IAMX,CAEA8mJ,YAAYn6G,EAAcpzB,GACxB,MAAa,KAATozB,GAIGptC,IAAOotC,EAAMpzB,GAAQ,GAAMwtI,SACpC,CAGAC,sBAAsB1mC,EACAvyB,EACAk5D,EACAnD,GACpB,GAAIxjC,EACF,OAAOA,EAAQtgH,QACV,GAAI8jJ,GAAWA,EAAQoD,QAAQ3nJ,OACpC,OAAOukJ,EAAQ9jJ,QACV,GAAIinJ,GACT,GAAIl5D,GAAYA,EAASA,EAASv4G,QAChC,OAAOu4G,EAASA,EAASv4G,QAAQwqB,aAAK,GAE/B+tF,GAAYA,EAAS,GAC9B,OAAOA,EAAS,GAAG/tF,QAGrB,OAAOT,KACT,CAGA4nJ,aAAa5jK,EAAsB0jK,GACjC,GAAIL,MAAMQ,QAAQ7jK,GAChB,KAAKA,EAAM/N,OACT,OAAO6xK,IAAeC,UACjB,GAAwB,iBAAb/jK,EAAM,GACtB,OAAO8jK,IAAeE,UACjB,GAAIhoJ,aAAgBhc,EAAM,IAC/B,OAAO8jK,IAAeC,SAJAA,KAMnB,CACL,GAAqB,iBAAV/jK,EACT,OAAO8jK,IAAeG,OACjB,GAAIjoJ,aAAgBhc,GACzB,OAAO8jK,IAAeI,MAE1B,CAEA,OAAOR,EAAmBI,IAAeC,UAAYD,IAAeI,MACtE,CAGAC,qBAAqBnkK,EACAwhC,GACnB,IAAI4iI,EACJ,OAAQz1K,KAAKi1K,aAAa5jK,EAAOwhC,EAAOkiI,mBACtC,KAAMI,IAAeG,OACnBG,EAASpkK,EAAQ,CAACgc,IAAehc,EAAOwhC,EAAOxL,QAAQ,IAAS,GAChE,MACF,KAAM8tI,IAAeE,UACnBI,EAAoBpkK,EAAOX,IAAIxD,GAAKA,EAAImgB,IAAOngB,EAAG2lC,EAAOxL,QAAQ,GAAQ,MAAM/2B,OAAOolK,SACtF,MACF,KAAMP,IAAeI,OACnBE,EAASpkK,EAAQ,CAAUA,EAAOyc,SAAW,GAC7C,MACF,KAAMqnJ,IAAeC,UACnBK,GAAoBpkK,GAAS,IAAIX,IAAIxD,GAAKA,EAAE4gB,SAC5C,MACF,QACE2nJ,EAAS,GAGb,OAAOA,CACT,CAGAE,uBAAuBtuI,EACAh2B,EACAukK,GACrB,OAAQA,GACN,KAAMT,IAAeG,OACnB,OAAOjkK,EAAM,IAAMA,EAAM,GAAGg2B,OAAOA,GACrC,KAAM8tI,IAAeE,UACnB,OAAOhkK,EAAMf,OAAOolK,SAAShlK,IAAIxD,GAAKA,EAAEm6B,OAAOA,IACjD,KAAM8tI,IAAeI,OACnB,OAAOlkK,EAAM,GAAKA,EAAM,GAAGyc,QAAUzc,EAAM,GAC7C,KAAM8jK,IAAeC,UACnB,OAAO/jK,GAAQA,EAAMX,IAAIxD,GAAKA,EAAE4gB,SAClC,QACE,OAAOzc,EAEb,CAEAwkK,gBAAgBxkK,EAAsBg2B,GACpC,IAAIyuI,EAEJ,GAAqB,iBAAVzkK,EACTykK,EAAS,CAACzkK,QAAK,GACNqjK,MAAMQ,QAAQ7jK,GAErBykK,EADEzkK,EAAM/N,OACyB+N,EAAOX,IAAKxD,GACpClN,KAAK20K,gBAAgBznK,EAAGm6B,GAAQA,OAAOA,IAG7Bh2B,WAEZgc,aAAgBhc,GAGzB,MAAO,GAFPykK,EAAS,CAACzkK,EAAMg2B,OAAOA,GAEhB,CAGT,OAAOyuI,EAAOxlK,OAAOolK,SAASlrK,KAAK,MACrC,CAGAurK,eAAkBpuJ,GAChB,OAAKA,IAIL2K,OAAOC,KAAK5K,GAAKpa,QAAS4zC,QAAsBpe,IAAbpb,EAAIw5B,WAA8Bx5B,EAAIw5B,IAClEx5B,EACT,CAEAquJ,eAAeC,EACAC,EACAz7G,EACA07G,EAA+B,OAC5C,OAAIF,EACMx7G,EAAKohD,SAETq6D,EAAkB5lK,OAAO0zI,IAAMA,EAAEmuB,OAAO13G,EAAKA,KAAM07G,IADnDD,EAAkB/hH,OAAO,CAACsG,EAAKA,OAG3BA,EAAKohD,SAAyB,GAAd,CAACphD,EAAKA,KAElC,CAEA27G,cAAc/0I,EAAsBg1I,GAClC,OAAKh1I,EAGsBA,EAAQpB,cAAco2I,IACjCr2K,KAAKo2K,cAAc/0I,EAAQi1I,cAAeD,QAHxD,CAIJ,CAEAE,SAASC,GACP,OAAOA,GAAKnpJ,aAAgBmpJ,IAAMnpJ,IAAOmpJ,EAAEnvI,OAAO,YAAa,WACjE,CAEAovI,oBAAoBC,GAClB,OAAQA,GACN,IAAK,OAEL,IAAK,UACH,MAAO,SACT,QACE,OAAOA,EAEb,CAEAC,iBAAiB/E,UAASC,UAASQ,UAASC,WAC5BjrI,EACAqvI,GACd,IAAI7B,EACAxjK,EACJ,MAAMulK,EAAa,GACbT,EAAcn2K,KAAKy2K,oBAAoBC,GAE7C,GAAI9E,EAAS,CACX,MAAMiF,EAAK72K,KAAK20K,gBAAgB/C,EAASvqI,GACzCuvI,EAAWnmK,KAAK,CACd0wC,IAAK,UACL0zH,QAASA,KACP,MAAMiC,EAAWzlK,EAAM0lK,MAAM1zD,GAAOA,EAAI2zD,cAAcH,EAAIV,IAC1DtB,WAAUA,GAAUiC,EACbA,IAGb,CAEA,GAAIjF,EAAS,CACX,MAAMgF,EAAK72K,KAAK20K,gBAAgB9C,EAASxqI,GACzCuvI,EAAWnmK,KAAK,CACd0wC,IAAK,UACL0zH,QAASA,KACP,MAAMiC,EAAWzlK,EAAM0lK,MAAM1zD,GAAOA,EAAI4zD,eAAeJ,EAAIV,IAC3DtB,WAAUA,GAAUiC,EACbA,IAGb,CAEA,GAAIzE,EAAS,CACX,MAAMwE,EAAK72K,KAAKu2K,SAASv2K,KAAK20K,gBAAgBtC,EAAShrI,IACvDuvI,EAAWnmK,KAAK,CACd0wC,IAAK,UACL0zH,QAASA,KACP,MAAMiC,EAAWzlK,EAAM0lK,MAAM1zD,GAAOrjH,KAAKu2K,SAASlzD,GAAK2zD,cAAcH,IACrEhC,WAAUA,GAAUiC,EACbA,IAGb,CAEA,GAAIxE,EAAS,CACX,MAAMuE,EAAK72K,KAAKu2K,SAASv2K,KAAK20K,gBAAgBrC,EAASjrI,IACvDuvI,EAAWnmK,KAAK,CACd0wC,IAAK,UACL0zH,QAASA,KACP,MAAMiC,EAAWzlK,EAAM0lK,MAAM1zD,GAAOrjH,KAAKu2K,SAASlzD,GAAK4zD,eAAeJ,IACtEhC,WAAUA,GAAUiC,EACbA,IAGb,CAEA,OAAQI,IAQN,GAPArC,GAAU,EAEVxjK,EAAQrR,KAAKw1K,qBAAqB0B,EAAU,CAC1C7vI,SACA0tI,kBAAkB,IACjBzkK,OAAOolK,UAELrkK,EAAM0lK,MAAM1zD,GAAOA,EAAIwxD,WAC1B,MAAO,CACLxtI,OAAQ,CACN8vI,MAAOD,IAKb,MAAMx4B,EAASk4B,EAAWvnJ,OAAO,CAAC3e,EAAKkiB,KAChCA,EAAIiiJ,YACPnkK,EAAIkiB,EAAIuuB,KAAO,CACbg2H,MAAO9lK,IAIJX,GACN,IAEH,OAAQmkK,EAAmB,KAATn2B,EAEtB,CAEA04B,yBAAyB/lK,GACvB,OAAQA,GAAS,IAAI9G,MAAM,KAAKmG,IAAI8lK,GAAKA,EAAEt3J,QAAQ5O,OAAOolK,QAC5D,CAEA2B,oBAAoBhmK,EAAeg2B,GACjC,OAAOrnC,KAAKo3K,yBAAyB/lK,GAClCf,OAAO0zI,GAAKhkJ,KAAK40K,YAAY5wB,EAAG38G,IAChC32B,IAAIszI,GAAK32H,IAAO22H,EAAG38G,GACxB,CAEAiwI,kBAAkBhE,EACAjC,EACAloF,EACAm5E,GAChB,OAAOgR,GACI,SAATjC,GACArxK,KAAKu3K,cAAclqJ,MAAU87D,EAAKm5E,EACtC,CAEAiV,cAAc98G,EAAc7vC,EAAc4sJ,GACxC,OAAO/8G,EAAKg9G,UAAU7sJ,EAAM4sJ,EAAI,MAAO,KACzC,CAEAE,qBAAqB/vJ,EAA2B0f,EAAgBoV,GAC9DA,EAAMlvC,QAASusD,IACTnyC,EAAIgwJ,eAAe79G,KACrBnyC,EAAImyC,GAAQ95D,KAAK20K,gBAAgBhtJ,EAAImyC,GAAOzyB,GAAM,EAGxD,CAEAuwI,uBAAoDC,EAAaC,GAC/D,SAAID,IAAYC,MACTD,EAAS1uF,KAAO2uF,EAAY3uF,KAEtB0uF,EAAS1uF,KAAO2uF,EAAY3uF,MAAQ0uF,EAAS1uF,IAAIgpF,OAAO2F,EAAY3uF,IAAK,OAExE0uF,EAASvV,KAAOwV,EAAYxV,QAE7BuV,EAASvV,MAAOwV,EAAYxV,KAAQuV,EAASvV,IAAI6P,OAAO2F,EAAYxV,IAAK,MAQxF,CAEAyV,iBAAiBl6E,GACf,OAAKA,EAEsB,iBAATA,EACIxkD,SAASpZ,cAAc49D,GAEpCA,EAJA,IAMX,CAAC58F,SAAAjB,KAAA,mBAAAkB,iBAxUUgzK,EAAY,EAAAjzK,SAAAjB,KAAA,WAAAoB,EAAA0nB,IAAA,OAAZorJ,EAAYnrJ,QAAZmrJ,EAAYlrJ,UAAAC,WAFX,gBAEDirJ,CAAY,qDCpBlB,IAAK8D,EAAZ,SAAYA,GACVA,WAAAC,IAAA,SACAD,IAAAE,QAAA,aACAF,IAAAG,MAAA,WACAH,IAAAI,KAAA,UAJUJ,CAKZ,CALA,CAAYA,GAAa,mDCAlB,IAAK7C,EAAZ,SAAYA,GACVA,WAAAI,OAAA,YACAJ,IAAAC,UAAA,eACAD,IAAAG,OAAA,YACAH,IAAAE,UAAA,eAJUF,CAKZ,CALA,CAAYA,GAAc,6KCWnB,IAAMkD,EAAiB,MAAxB,MAAOA,EAmBXv4K,YAAoBw4K,EACAC,GACAC,GAFAx4K,KAAAs4K,eACAt4K,KAAAu4K,qBACAv4K,KAAAw4K,yBApBXx4K,KAAAy4K,eAAqC,IAAI11D,MAC1C/iH,KAAAgxK,cAA2C,CACjDC,eAAe,EACfyH,mBAAoB,IACpBC,cAAc,EACdtxI,OAAQ,aACRuxI,aAAa,EACbC,aAAa,EACbC,YAAa,EACb5H,iBAAiB,EACjB6H,mBAAmB,EACnBC,iBAAiB,EACjBC,qBAAqB,EACrB3F,iBAAiB,EACjB4F,OAAQ7rJ,aACR8rJ,oBAAoB,EAMtB,CAGAC,UAAUvmI,EAA2Bw+H,GAAqB,WACxD,MAAMgI,EAAqC,IACtCr5K,KAAKgxK,cACR3pI,OAAQrnC,KAAKs5K,uBAAuBjI,OACjCrxK,KAAKs4K,aAAavC,eAAeljI,IAGtC,OAAA7yC,KAAKs4K,aAAaZ,qBAAqB2B,EAASA,EAAQhyI,OAAQ,CAAC,MAAO,QAEpEwL,GAAUA,EAAOkiI,uBAA6ChyI,IAAzB8P,EAAOo+H,gBAC9CoI,EAAQpI,eAAgB,GAG1B5jJ,WAAcgsJ,EAAQH,QAEfG,CACT,CAEAE,oBAAoBC,GAClB,MAAO,CACLrwF,IAAKqwF,EAAarwF,IAClBm5E,IAAKkX,EAAalX,IAClBmX,sBAAuBD,EAAaC,sBACpCC,cAAeF,EAAaE,cAC5BC,iBAAkBH,EAAaG,iBAC/BZ,kBAAmBS,EAAaT,kBAChCC,gBAAiBQ,EAAaR,gBAC9BY,eAAgBJ,EAAaI,eAC7BvyI,OAAQmyI,EAAanyI,OACrB0tI,iBAAkByE,EAAazE,iBAC/B8E,YAAaL,EAAaK,YAC1BC,eAAgBN,EAAaM,eAC7Bb,oBAAqBO,EAAaP,oBAClCc,WAAYP,EAAaO,WACzBC,cAAeR,EAAaQ,cAC5BC,aAAcT,EAAaS,aAC3BC,gBAAiBV,EAAaU,gBAC9BC,uBAAwBX,EAAaW,uBACrCC,eAAgBZ,EAAaY,eAC7BC,kBAAmBb,EAAaa,kBAChCC,yBAA0Bd,EAAac,yBACvCC,wBAAyBf,EAAae,wBACtCC,wBAAyBhB,EAAagB,wBACtCC,4BAA6BjB,EAAaiB,4BAC1CvB,OAAQM,EAAaN,OACrBwB,kBAAmBlB,EAAakB,kBAChCpH,gBAAiBkG,EAAalG,gBAC9BnC,gBAAiBqI,EAAarI,gBAC9BwJ,eAAgBnB,EAAamB,eAEjC,CAEAC,wBAAwBpB,GACtB,OAAOx5K,KAAKw4K,uBAAuBY,UAAUI,EAC/C,CAEAqB,qBAAqBrB,GACnB,OAAOx5K,KAAKu4K,kBAAkBa,UAAUI,EAC1C,CAEAsB,eACE96K,KAAKy4K,eAAep0D,MACtB,CAGA02D,sBAAsB1pK,EAAewhC,IACnCxhC,OAC8BrR,KAAKs4K,aAAalB,yBADhD/lK,EAAQA,GAAgB,IAGL0lK,MAAMt8G,GAAQz6D,KAAKs4K,aAAa1D,YAAYn6G,EAAM5nB,GAAOxL,QAC9E,CAGA2zI,+BAA+B3pK,EAAewhC,IAE5C,MAAMooI,EAAwBj7K,KAAKs4K,aAAalB,yBADhD/lK,EAAQA,GAAgB,IAGxB,OAAOrR,KAAKs4K,aAAa9C,qBAAqByF,EAAapoI,GAC7D,CAEQymI,uBAAuBjI,GAC7B,OAAQA,GACN,IAAK,MACH,MAAO,aACT,IAAK,UACH,MAAO,sBACT,IAAK,OACH,MAAO,WACT,IAAK,QACH,MAAO,YAEb,CAACpwK,SAAAjB,KAAA,mBAAAkB,mBApHUm3K,GAAiBp5K,MAAAkC,KAAAlC,MAAA6S,KAAA7S,MAAA8S,KAAA,EAAA9Q,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAAjBuvJ,EAAiBtvJ,QAAjBsvJ,EAAiBrvJ,mBAAjBqvJ,CAAiB,oBCXlB6C,qBAAZ,SAAYA,GACVA,SAAAC,MAAA,QACAD,EAAAE,UAAA,YAFUF,CAGZ,CAHA,CAAYA,GAAW,KCMhB,IAAMG,EAAS,MAAhB,MAAOA,EAEH,uBAAOC,CAAiBj6I,EAAsBk6I,GAAwBC,EAAqBpK,GACjG,MAAMqK,EAAaD,EAAOtb,wBACpBwb,EAAgBH,GAAUrb,wBAK9B7+H,EAAQykB,MAAMk4G,IADF,SAAVoT,EAHWqK,EAAWrb,OAASsb,EAAc1d,IAIjB,EAAI,KAHxByd,EAAWzd,IAAM0d,EAAc1d,IAKd,EAAI38H,EAAQs6I,aAAgB,IAE3D,CAEQ,uBAAOC,CAAiBv6I,EAAsBk6I,GAAwBC,EAAqBK,EAAsBC,GACvH,MAAML,EAAaD,EAAOtb,wBACpBwb,EAAgBH,GAAUrb,wBAC1BnC,EAAO0d,EAAW1d,KAAO2d,EAAc3d,KAG3C18H,EAAQykB,MAAMi4G,KADF,UAAV+d,EACmB/d,EAAO,KAEPA,EAAO8d,EAAQE,YAAcP,EAAOO,YAAc,IAE3E,CAEQ,kBAAOC,CAAY5iI,GACzB,MAAO4kH,QAAO5kH,EAAG8mH,wBACjB,OAAQlC,IAAO,CACjB,CAEQ,qBAAOie,CAAe7iI,GAC5B,MAAOgnH,WAAUhnH,EAAG8mH,wBACpB,OAAQE,IAAUhzJ,OAAO8uK,WAC3B,CAEQ,mBAAOC,CAAa/iI,GAC1B,MAAO2kH,SAAQ3kH,EAAG8mH,wBAClB,OAAQnC,IAAQ,CAClB,CAEQ,oBAAOqe,CAAchjI,GAC3B,MAAOknH,UAASlnH,EAAG8mH,wBACnB,OAAQI,IAASlzJ,OAAOivK,UAC1B,CAEAC,wBAAwBzpI,GACtB,MAAO0oI,aAAWl6I,WAAWwR,IAExB0oI,GAAUz1H,MAAMy2H,UAAyC,WAA7BhB,GAAUz1H,MAAMy2H,YAC/ChB,GAAUz1H,MAAMy2H,SAAW,YAGE,aAA3Bl7I,EAAQykB,MAAMy2H,WAChBl7I,EAAQykB,MAAMy2H,SAAW,YAG3Bl7I,EAAQykB,MAAM02H,WAAa,SAE3B57K,WAAW,KACTZ,KAAKy8K,mBAAmB5pI,GAExBxR,EAAQykB,MAAM02H,WAAa,WAE/B,CAEAC,oBAAoBp7I,UAASk6I,aAAWC,SAAQK,UAASzK,QAAO0K,UAC9DT,EAAUC,iBAAiBj6I,EAASk6I,GAAWC,EAAQ,QACvDH,EAAUO,iBAAiBv6I,EAASk6I,GAAWC,EAAQK,EAAS,SAElD,SAAVzK,GAA8B,OAAVA,EAClBiK,EAAUY,eAAeJ,GAC3BR,EAAUC,iBAAiBj6I,EAASk6I,GAAWC,EAAQ,QAC9CH,EAAUW,YAAYH,IAC/BR,EAAUC,iBAAiBj6I,EAASk6I,GAAWC,EAAQ,MAGzDH,EAAUC,iBAAiBj6I,EAASk6I,GAAWC,EAAQpK,GAG3C,SAAV0K,GAA8B,UAAVA,EAClBT,EAAUe,cAAcP,GAC1BR,EAAUO,iBAAiBv6I,EAASk6I,GAAWC,EAAQK,EAAS,SACvDR,EAAUc,aAAaN,IAChCR,EAAUO,iBAAiBv6I,EAASk6I,GAAWC,EAAQK,EAAS,QAGlER,EAAUO,iBAAiBv6I,EAASk6I,GAAWC,EAAQK,EAASC,EAEpE,CAAC76K,SAAAjB,KAAA,mBAAAkB,mBA1FUm6K,EAAS,EAAAp6K,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAATuyJ,EAAStyJ,QAATsyJ,EAASryJ,UAAAC,WAFR,gBAEDoyJ,CAAS,gJCchBp8K,MAAA,yBACiBA,MAAA,2BAAAA,MAAA2e,GAAA,MAAAqhI,EAAAhgJ,QAAA,OAAiBA,MAAAggJ,EAAA0zB,cAAAtuD,OAAoB,EAArCplH,CAAsC,qBAAAgU,GAAAhU,MAAA2e,GAAA,MAAAhW,EAAA3I,QAAA,OACzBA,MAAA2I,EAAA80K,eAAAzpK,GAAsB,EADnChU,CAAsC,sBAAAgU,GAAAhU,MAAA2e,GAAA,MAAA7V,EAAA9I,QAAA,OAExBA,MAAA8I,EAAA40K,gBAAA1pK,GAAuB,EAFrChU,CAAsC,oBAAAgU,GAAAhU,MAAA2e,GAAA,MAAA1V,EAAAjJ,QAAA,OAG1BA,MAAAiJ,EAAA00K,aAAA3pK,EAAqB,MAAK/K,EAAA20K,YAAAzB,WAAyB,GAAM,GAMtFn8K,gCAJiBA,MAAA,SAAAE,EAAA29K,kBAAA79K,CAA4B,cAAAE,EAAA49K,YAA5B99K,CAA4B,UAAAE,EAAA69K,UAA5B/9K,CAA4B,QAAAE,EAAAs4G,gDAM7Cx4G,MAAA,4BACmBA,MAAA,2BAAAA,MAAAohH,GAAA,MAAAC,EAAArhH,QAAA,OAAiBA,MAAAqhH,EAAAqyD,cAAAtuD,OAAoB,EAArCplH,CAAsC,qBAAAgU,GAAAhU,MAAAohH,GAAA,MAAAj+G,EAAAnD,QAAA,OACzBA,MAAAmD,EAAAs6K,eAAAzpK,GAAsB,EADnChU,CAAsC,sBAAAgU,GAAAhU,MAAAohH,GAAA,MAAAo/B,EAAAxgJ,QAAA,OAExBA,MAAAwgJ,EAAAk9B,gBAAA1pK,GAAuB,EAFrChU,CAAsC,oBAAAgU,GAAAhU,MAAAohH,GAAA,MAAAtrG,EAAA9V,QAAA,OAG1BA,MAAA8V,EAAA6nK,aAAA3pK,EAAqB,QAAO8B,EAAA8nK,YAAAzB,WAAyB,GAAM,GAM1Fn8K,gCAJmBA,MAAA,SAAAqF,EAAAw4K,kBAAA79K,CAA4B,cAAAqF,EAAAy4K,YAA5B99K,CAA4B,UAAAqF,EAAA04K,UAA5B/9K,CAA4B,QAAAqF,EAAAmzG,gDAM/Cx4G,MAAA,0BACgBA,MAAA,oBAAAgU,GAAAhU,MAAA+hK,GAAA,MAAAC,EAAAhiK,QAAA,OAAYA,MAAAgiK,EAAA2b,aAAA3pK,EAAqB,SAAQguJ,EAAA4b,YAAAzB,WAAyB,GAAK,GAKvFn8K,gCAHgBA,MAAA,SAAA6F,EAAAm4K,iBAAAh+K,CAA2B,UAAA6F,EAAAk4K,WAAAl4K,EAAAk4K,UAAA,GAA3B/9K,CAA2B,QAAA6F,EAAA2yG,gDAK3Cx4G,MAAA,gCACsBA,MAAA,oBAAAgU,GAAAhU,MAAA2W,GAAA,MAAA7S,EAAA9D,QAAA,OAAYA,MAAA8D,EAAA65K,aAAA3pK,EAAqB,SAAQlQ,EAAA85K,YAAAzB,WAAyB,GAAK,EAAvEn8K,CAAwE,2BAAAA,MAAA2W,GAAA,MAAAsnK,EAAAj+K,QAAA,OACvDA,MAAAi+K,EAAAvK,cAAAtuD,OAAoB,EADrCplH,CAAwE,qBAAAgU,GAAAhU,MAAA2W,GAAA,MAAA/S,EAAA5D,QAAA,OAE3DA,MAAA4D,EAAA65K,eAAAzpK,GAAsB,EAFnChU,CAAwE,sBAAAgU,GAAAhU,MAAA2W,GAAA,MAAAwjG,EAAAn6G,QAAA,OAG1DA,MAAAm6G,EAAAujE,gBAAA1pK,GAAuB,GAM3DhU,gCAJsBA,MAAA,SAAAiH,EAAAi3K,sBAAAl+K,CAAgC,cAAAiH,EAAA62K,YAAhC99K,CAAgC,UAAAiH,EAAA82K,WAAA92K,EAAA82K,UAAA,GAAhC/9K,CAAgC,QAAAiH,EAAAuxG,mCCoBrD,IAAM2lE,EAAmB,MAA1B,MAAOA,EAqDXt9K,YAA6Bu9K,EACAC,GACAC,EACA1lB,EACAygB,EACDkF,GALCx9K,KAAAq9K,mBACAr9K,KAAAs9K,aACAt9K,KAAAu9K,UACAv9K,KAAA63J,WACA73J,KAAAs4K,eACDt4K,KAAAw9K,KAnD5Bx9K,KAAAy9K,eAAyB,EAEhBz9K,KAAAqxK,KAAqB,MACrBrxK,KAAA09K,YAAsB,GACtB19K,KAAAq1J,UAAoB,EAOnBr1J,KAAA8wE,KAAO,IAAIiyC,MACX/iH,KAAA+pD,MAAQ,IAAIg5D,MACZ/iH,KAAAwxK,SAAW,IAAIzuD,MACf/iH,KAAA2yK,cAAoC,IAAI5vD,MACxC/iH,KAAAuzK,UAAqC,IAAIxwD,MACzC/iH,KAAAyzK,WAAsC,IAAI1wD,MAC1C/iH,KAAAmT,SAA0C,IAAI4vG,MAUxD/iH,KAAA29K,iBAA2B,EAE3B39K,KAAA49K,kBAA4B,EAM5B59K,KAAA69K,mCAAiD,GACjD79K,KAAA89K,2BAAyC,GAEzC99K,KAAA+9K,IAAuB,CACrBjtG,KAAM9wE,KAAKg+K,cAAcC,KAAKj+K,MAC9B+pD,MAAO/pD,KAAKk+K,aAAaD,KAAKj+K,MAC9Bm+K,eAAgBn+K,KAAKm+K,eAAeF,KAAKj+K,OAE3CA,KAAA68K,YAAc3B,EAmBdl7K,KAAAo+K,oBAA8B,EAyB9Bp+K,KAAAg9K,UAAsB,EAnCtB,CAEA,eAAIpE,GACF,OAAO54K,KAAKq+K,gBAAgBzF,WAC9B,CAEA,eAAIC,GACF,OAAO74K,KAAKq+K,gBAAgBxF,WAC9B,CAIA,qBAAIyF,GACF,OAAOt+K,KAAKo+K,kBACd,CAEA,qBAAIE,CAAkBjtK,GAChBA,GACFrR,KAAKu+K,uBACLv+K,KAAKs9K,UAAUhB,wBAAwB,CACrCf,UAAWv7K,KAAKw+K,gBAChBn9I,QAASrhC,KAAKy+K,gBACdjD,OAAQx7K,KAAK0+K,sBACb7C,QAAS77K,KAAK2+K,UACdvN,MAAOpxK,KAAKq+K,gBAAgBjN,MAC5B0K,MAAO97K,KAAKq+K,gBAAgBvC,UAG9B97K,KAAK4+K,sBACL5+K,KAAKq9K,iBAAiBvC,gBAGxB96K,KAAKo+K,mBAAqB/sK,CAC5B,CAIA,YAAIwqG,GACF,OAAO77G,KAAKg9K,SACd,CAEA,YAAInhE,CAASA,GACX77G,KAAKg9K,UAAYnhE,EACjB77G,KAAK6+K,kBAA+B7+K,KAAKs4K,aACtC3C,uBAAuB31K,KAAKq+K,gBAAgBh3I,OAAQw0E,EAAUs5D,IAAeE,WAC7E7qK,KAAK,OACR,MAAM64G,GAAMrjH,KAAK8+K,wBAAwBjjE,GACzC77G,KAAK++K,iBAAiB17D,IAAK,GAC3BrjH,KAAKwxK,SAASntD,KAAKhB,GACrB,CAIA,mBAAI27D,GACF,OAAOh/K,KAAKi/K,gBACd,CAEA,mBAAID,CAAgBvkH,GAClBz6D,KAAKi/K,iBAAmBxkH,EAEpBz6D,KAAKk/K,gBACPl/K,KAAKk/K,eAAef,eAAe1jH,GAGjCz6D,KAAKm/K,kBACPn/K,KAAKm/K,iBAAiBhB,eAAe1jH,GAGnCz6D,KAAKo/K,oBACPp/K,KAAKo/K,mBAAmBjB,eAAe1jH,EAE3C,CAGAm/F,UACO55J,KAAK64K,cAIL74K,KAAK49K,mBAAqB59K,KAAKq1J,WAClCr1J,KAAK29K,iBAAkB,EAClB39K,KAAKs+K,mBACRt+K,KAAKg+K,gBAGX,CAEAqB,cACMr/K,KAAKq+K,gBAAgBlF,sBAClBn5K,KAAK29K,iBAAmB39K,KAAKs+K,mBAChCt+K,KAAKk+K,eAGPl+K,KAAK29K,iBAAkB,EAE3B,CAGA2B,WACMt/K,KAAKs+K,mBACPt+K,KAAKs9K,UAAUb,mBAAmB,CAChClB,UAAWv7K,KAAKw+K,gBAChBn9I,QAASrhC,KAAKy+K,gBACdjD,OAAQx7K,KAAK0+K,sBACb7C,QAAS77K,KAAK2+K,UACdvN,MAAOpxK,KAAKq+K,gBAAgBjN,MAC5B0K,MAAO97K,KAAKq+K,gBAAgBvC,OAGlC,CAEAhiB,WAAWzoJ,GACTrR,KAAKu/K,WAAaluK,EAEdA,GAAmB,KAAVA,GACXrR,KAAK67G,SAAW77G,KAAKs4K,aAClB9C,qBAAqBnkK,EAAOrR,KAAKq+K,iBACpCr+K,KAAKw/K,QAELx/K,KAAK67G,SAAW,GAGlB77G,KAAKw9K,GAAG1tK,cACV,CAEAiqJ,iBAAiBC,GACfh6J,KAAK++K,iBAAmB/kB,CAC1B,CAEA+kB,iBAAiB9zJ,EAAQw0J,IACzB,CAEAxlB,kBAAkBD,GAChBh6J,KAAK0/K,kBAAoB1lB,CAC3B,CAEA0lB,oBACA,CAEAC,SAAS3N,GACP,OAAOhyK,KAAK4/K,WAAW5N,EAAY3gK,MACrC,CAEAytK,wBAAwBjjE,GACtB,MAAwB,iBAAbA,EACFA,EAEA77G,KAAKs4K,aAAa3C,uBACvB31K,KAAKq+K,gBAAgBh3I,OACrBw0E,EACA77G,KAAKq+K,gBAAgB3D,mBAAqB16K,KAAKs4K,aAAarD,aAAaj1K,KAAKu/K,WAAYv/K,KAAKq+K,gBAAgBtJ,kBAGrH,CAEA8K,iBACE7/K,KAAK4/K,WAAa5/K,KAAKs4K,aAAa3B,gBAClC,CACE/E,QAAS5xK,KAAK4xK,QACdC,QAAS7xK,KAAK6xK,QACdQ,QAASryK,KAAKqyK,QACdC,QAAStyK,KAAKsyK,SACbtyK,KAAKq+K,gBAAgBh3I,OAAQrnC,KAAKqxK,MAEvCrxK,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwB9+K,KAAK67G,WAAW,EACrE,CAEAz7G,WACEJ,KAAKy9K,eAAgB,EACrBz9K,KAAKw/K,MACP,CAEA/wK,YAAYC,GACN1O,KAAKy9K,eACPz9K,KAAKw/K,MAET,CAEA9mB,kBACE14J,KAAK8/K,yBACP,CAEA3lB,iBAAiBvjG,GACf52D,KAAKq1J,SAAWz+F,EAChB52D,KAAKw9K,GAAG1tK,cACV,CAEAgwK,0BACE9/K,KAAKy+K,gBAA+Bz+K,KAAK+/K,kBAAkBjoB,cAC3D93J,KAAKggL,2BACLhgL,KAAK2+K,UAAY3+K,KAAKu9K,QAAQzlB,cAAc73H,cAAc,aAC1DjgC,KAAKigL,wBAAwBjgL,KAAK2+K,WAElC,MAAOuB,YAAYlgL,KAAKq+K,gBAGpBr+K,KAAKw+K,gBAFL0B,EACsB,iBAAbA,EAC2B7mI,SAASpZ,cAAsBigJ,GAE/BA,EAGflgL,KAAKu9K,QAAQzlB,cAGtC93J,KAAKw+K,gBAAgBl9I,YAAYthC,KAAKy+K,gBACxC,CAEAuB,2BACEhgL,KAAK0+K,sBAAwB1+K,KAAKs4K,aAAaP,iBAAiB/3K,KAAKq+K,gBAAgBK,wBAChF1+K,KAAKu9K,QAAQzlB,cAAc73H,cAAc,wBACzCoZ,SAAS3wB,IAChB,CAEAu3J,wBAAwB5+I,GACtBrhC,KAAK69K,mCAAmCptK,KACtCzQ,KAAK63J,SAASsoB,OAAO9+I,EAAS,QAAS,KACrCrhC,KAAK29K,iBAAkB,IAG7B,CAEA6B,OACEx/K,KAAKq+K,gBAAkBr+K,KAAKq9K,iBAAiBjE,UAAUp5K,KAAK6yC,OAAQ7yC,KAAKqxK,MACzErxK,KAAKg/K,gBAAkBh/K,KAAK+8K,YACxB/8K,KAAKs4K,aAAa3D,gBAAgB30K,KAAK+8K,YAAa/8K,KAAKq+K,gBAAgBh3I,QAAQvZ,QACjF9tB,KAAKs4K,aACJxD,sBACC90K,KAAKg/K,gBACLh/K,KAAK67G,SACL77G,KAAKq+K,gBAAgBtJ,iBACrB/0K,KAAKq+K,gBAAgBl1F,KAE3BnpF,KAAK88K,kBAAoB98K,KAAKq9K,iBAAiB9D,oBAAoBv5K,KAAKq+K,iBACxEr+K,KAAKm9K,sBAAwBn9K,KAAKq9K,iBAAiBzC,wBAAwB56K,KAAKq+K,iBAChFr+K,KAAKi9K,iBAAmBj9K,KAAKq9K,iBAAiBxC,qBAAqB76K,KAAKq+K,iBACxEr+K,KAAK6/K,gBACP,CAEAO,eACOpgL,KAAK44K,cAIVtnK,aAAatR,KAAKqgL,2BAClBrgL,KAAK49K,kBAAmB,EACxB59K,KAAKqgL,0BAA4Bz/K,WAAW,KACrCZ,KAAKs+K,mBACRt+K,KAAKg+K,gBAGPh+K,KAAK29K,iBAAkB,EAEvB39K,KAAK49K,kBAAmB,EACxB59K,KAAKw9K,GAAG1tK,cAAY,EACnB9P,KAAKq+K,gBAAgBvF,aAC1B,CAEAwH,eACEhvK,aAAatR,KAAKqgL,2BAClBrgL,KAAK0/K,mBACP,CAEA1B,gBACEh+K,KAAK29K,iBAAkB,EACvB39K,KAAKs+K,mBAAoB,EAErBt+K,KAAKugL,eACPvgL,KAAKugL,cAAcxC,IAAIyC,gBAGzBxgL,KAAK8wE,KAAKuzC,OACVrkH,KAAKw9K,GAAG1tK,cACV,CAEAouK,eACEl+K,KAAKs+K,mBAAoB,EAErBt+K,KAAKk/K,gBACPl/K,KAAKk/K,eAAenB,IAAI0C,mBAAmBzI,IAAcC,KAG3Dj4K,KAAK+pD,MAAMs6D,OACXrkH,KAAKw9K,GAAG1tK,cACV,CAEA4wK,iBAAiBrvK,GACf,MAAMsvK,GAAStvK,EAAQrR,KAAKs4K,aAAazC,gBAAgBxkK,EAAOrR,KAAKq+K,gBAAgBh3I,QAAU,GAC3FrnC,KAAKq9K,iBAAiBtC,sBAAsB4F,GAAQ3gL,KAAKq+K,kBAC3Dr+K,KAAK67G,SAAW77G,KAAKq9K,iBAAiBrC,+BAA+B2F,GAAQ3gL,KAAKq+K,iBAClFr+K,KAAKg/K,gBAAkBh/K,KAAK67G,SAASv4G,OACjCtD,KAAKs4K,aAAaxD,sBAClB,KACA90K,KAAK67G,SACL77G,KAAKq+K,gBAAgBtJ,iBACrB/0K,KAAKq+K,gBAAgBl1F,KAErBnpF,KAAKg/K,gBAETh/K,KAAKmT,SAASkxG,KAAK,CACjB5pD,KAAMkmH,GACNjhL,KAAMw7K,EAAYC,MAClBhF,YAAa,SAGfn2K,KAAKg9K,UAAYh9K,KAAKs4K,aACnBjB,oBAAoBsJ,GAAQ3gL,KAAKq+K,gBAAgBh3I,QACpDrnC,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwB6B,KAAS,GAEhE,CAEA/D,aAAaniH,EAAa07G,GAA8Bz2K,EAAmBkhL,GACzE5gL,KAAK67G,SAAW77G,KAAKs4K,aAClBtC,eAAeh2K,KAAKq+K,gBAAgBtJ,iBAAkB/0K,KAAK67G,SAAUphD,EAAM07G,IACzEyK,GACH5gL,KAAK6gL,cAGP7gL,KAAKmT,SAASkxG,KAAK,CACjB5pD,KAAMA,EAAKA,KACX07G,eACAz2K,QAEJ,CAEAmhL,cACM7gL,KAAKq+K,gBAAgBpN,eACvBrwK,WAAWZ,KAAKk+K,aAAaD,KAAKj+K,MAAOA,KAAKq+K,gBAAgB3F,mBAElE,CAEAoI,WAAW79I,GACT,OAAQA,EAAM89I,SACZ,KAAM,EACN,KAAM,GACJ/gL,KAAKk+K,eAGX,CAEAC,eAAe1jH,GACb,MAAMumH,GAAahhL,KAAKs4K,aAAa3D,gBAAgBl6G,EAAMz6D,KAAKq+K,gBAAgBh3I,QAChFrnC,KAAKg/K,gBAAkBgC,EACzB,CAEAtE,eAAexjI,GACbl5C,KAAKuzK,UAAUlvD,KAAKnrE,EACtB,CAEAyjI,gBAAgBzjI,GACdl5C,KAAKyzK,WAAWpvD,KAAKnrE,EACvB,CAEAqlI,uBACEv+K,KAAK89K,2BAA2BrtK,KAC9BzQ,KAAK63J,SAASsoB,OAAO9mI,SAAU,UAAYtZ,IACzC//B,KAAK8gL,WAAW/gJ,EAAC,GAEnB//B,KAAK63J,SAASsoB,OAAO9mI,SAAU,SAAU,KACvCr5C,KAAKs/K,UAAQ,GAEft/K,KAAK63J,SAASsoB,OAAO9mI,SAAU,QAAS,KACtCr5C,KAAKq/K,aAAW,GAGtB,CAEAT,sBACE5+K,KAAK89K,2BAA2BvwK,QAAS0zK,GAAOA,KAChDjhL,KAAK89K,2BAA6B,EACpC,CAEAj9K,cACEb,KAAK69K,mCAAmCtwK,QAAQ0zK,GAAMA,KAElDjhL,KAAKw+K,iBACPx+K,KAAKw+K,gBAAgBr+I,YAAYngC,KAAKy+K,gBAE1C,CAACx9K,SAAAjB,KAAA,mBAAAkB,mBApbUk8K,GAAmBn+K,MAAAkC,GAAAlC,MAAA6S,GAAA7S,gCAAA8S,KAAA9S,aAAA,EAAAgC,SAAAjB,KAAA,UAAAulB,EAAAlkB,IAAA,MAAnB+7K,EAAmB97K,UAAA,qBAAAyb,UAAA,SAAApb,GAAAC,MAAA,EAAAD,4XAAnBC,EAAAg4J,SAAS,8BAATh4J,EAAA09K,UAAU,KAAArgL,wYAjBV,CACTo5K,EACA6I,IACAC,IACAC,IACA,CACE1xJ,QAASqyI,KACT1H,eAAamY,OAAW,IAAM4K,GAC9BvtJ,OAAO,GAET,CACEH,QAAS2xJ,KACThnB,eAAamY,OAAW,IAAM4K,GAC9BvtJ,OAAO,KAEV5wB,OAAAsC,MAAA,GAAAC,KAAA,GAAAC,OAAA,4zBAAAC,SAAA,SAAAC,GAAAC,GAAA,EAAAD,KD5EH1C,MAAA,UAAAA,CAAgD,UAAhDA,CAAgD,aAIrCA,MAAA,yBAAQ2C,EAAA0+K,cAAc,EAAtBrhL,CAAuB,0BACd2C,EAAAw+K,cAAc,EADvBnhL,CAAuB,kCAAA2C,EAAAy8K,gBAAA1F,cAE0B/2K,EAAAs8K,cAAc,EAF/Dj/K,CAAuB,yBAAAgU,GAAA,OAGNrR,EAAA8+K,iBAAAztK,EAAwB,GAHhDhU,UAWFA,MAAA,eAAAA,CAAgB,WAKZA,MAAA,EAAAqiL,EAAA,wBAAAriL,CAUkB,EAAAsiL,EAAA,0BAVlBtiL,CAUkB,EAAAuiL,EAAA,uBAVlBviL,CAUkB,EAAAwiL,EAAA,8BAiCpBxiL,oBA/DCA,MAAA,UAAAA,MAAA,GAAAyiL,EAAA9/K,EAAA08K,oBAEEr/K,cAAA,SAAA2C,EAAAy8K,gBAAAsD,oBADA1iL,MAAA,cAAA2C,EAAAy8K,gBAAAsD,oBAOI1iL,cAAA,WAAA2C,EAAAyzJ,SAAAp2J,CAAqB,UAAA2C,EAAAi9K,kBAArB5/K,CAAqB,cAAA2C,EAAA87K,YAArBz+K,CAAqB,WAAA2C,EAAAy8K,gBAAAnN,iBAWvBjyK,MAAA,GAAAA,MAAA,YAAA2C,EAAA61G,MAAA,IAFAx4G,MAAA,UAAA2C,EAAAw8K,mBAAAn/K,CAA8B,WAAA2C,EAAAyvK,MAD9BpyK,MAAA,eAAA2C,EAAAw8K,oBASen/K,cAAA,sBAYEA,cAAA,wBASHA,cAAA,uBAWMA,cAAA,6jBCqBhBm+K,CAAmB,2JC7D1Bn+K,MAAA,gDACMA,MAAA,YAAAqF,EAAAs9K,eAAAC,6BAKN5iL,MAAA,4CACMA,MAAA,YAAA6iL,EAAA,GAAArnH,KAAAsnH,oDAGN9iL,MAAA,eAAQA,MAAA,yBAAA+iL,EAAA/iL,MAAAghJ,GAAA39I,UAAA4F,EAAAjJ,MAAA,UAASA,MAAAiJ,EAAA+5K,WAAAD,GAAe,GAQhC/iL,+CALQA,MAAA,WAAA+iL,EAAA3sB,SAAAp2J,CAAyB,YAAAsI,EAAA26K,cAAAF,GAAzB/iL,CAAyB,UAAAsI,EAAA46K,kBAAAH,IADzB/iL,MAAA,YAAA+iL,EAAAvnH,KAAApzB,OAAA9/B,EAAA82K,gBAAAh3I,mCAPVpoC,MAAA,WACEA,MAAA,EAAAmjL,EAAA,cAAAnjL,CAGO,EAAAojL,EAAA,iBAUTpjL,6CAbSA,cAAA,OAAA6F,EAAAu5K,gBAAArF,iBAKiB/5K,cAAA,UAAA6iL,kFA5B9B7iL,MAAA,UAAAA,CAAyF,uBAEnFA,MAAA,2BAAAA,MAAAohH,GAAA,MAAAC,EAAArhH,QAAA,OAAiBA,MAAAqhH,EAAAgiE,cAAa,EAA9BrjL,CAA+B,0BAAAA,MAAAohH,GAAA,MAAAj+G,EAAAnD,QAAA,OACfA,MAAAmD,EAAAq+K,mBAAAr+K,EAAAmgL,aAAApK,OAAsC,EADtDl5K,CAA+B,uBAAAA,MAAAohH,GAAA,MAAAo/B,EAAAxgJ,QAAA,OAElBA,MAAAwgJ,EAAAi9B,iBAAgB,EAF7Bz9K,CAA+B,wBAAAA,MAAAohH,GAAA,MAAAtrG,EAAA9V,QAAA,OAGjBA,MAAA8V,EAAA4nK,kBAAiB,GAOnC19K,QAEAA,MAAA,UAAAA,CACiC,WAE7BA,MAAA,EAAAujL,EAAA,cAIFvjL,QACAA,MAAA,EAAAwjL,EAAA,aAeFxjL,kCA/BIA,cAAA,mBAAAK,EAAA++K,gBAAApF,oBAAAh6K,CAAwD,QAAAK,EAAAojL,SAAxDzjL,CAAwD,kBAAAK,EAAAqjL,mBAAxD1jL,CAAwD,cAAAK,EAAA0zK,YAAxD/zK,CAAwD,eAAAK,EAAA4zK,aAAxDj0K,CAAwD,QAAAK,EAAAm4G,OAQvDx4G,cAAA,UAAAA,MAAA,EAAAI,GAAAC,EAAA++K,gBAAAtF,oBAGyB95K,MAAA,GAAAA,MAAA,UAAAK,EAAAsjL,UAKN3jL,cAAA,UAAAK,EAAAujL,gDAkB1B5jL,MAAA,0BACIA,MAAA,qBAAAgU,GAAAhU,MAAAoD,GAAA,MAAAE,EAAAtD,QAAA,OAAaA,MAAAsD,EAAAugL,yBAAA7vK,GAAgC,EAA7ChU,CAA8C,8BAAAgU,GAAAhU,MAAAoD,GAAA,MAAA+8I,EAAAngJ,QAAA,OACxBA,MAAAmgJ,EAAA2jC,kCAAA9vK,GAAyC,EAD/DhU,CAA8C,iCAAAA,MAAAoD,GAAA,MAAAgB,EAAApE,QAAA,OAEvBA,MAAAoE,EAAAo9K,mBAAAp9K,EAAAk/K,aAAAtK,KAAoC,EAF3Dh5K,CAA8C,sBAAAgU,GAAAhU,MAAAoD,GAAA,MAAAU,EAAA9D,QAAA,OAGhCA,MAAA8D,EAAAigL,0BAAA/vK,GAAiC,EAH/ChU,CAA8C,+BAAAgU,GAAAhU,MAAAoD,GAAA,MAAA22G,EAAA/5G,QAAA,OAIvBA,MAAA+5G,EAAAiqE,mCAAAhwK,GAA0C,EAJjEhU,CAA8C,oBAAAgU,GAAAhU,MAAAoD,GAAA,MAAA66K,EAAAj+K,QAAA,OAKlCA,MAAAi+K,EAAAgG,cAAAjwK,GAAqB,GAMrChU,gCAJIA,MAAA,SAAAE,EAAAgkL,oBAAAlkL,CAA8B,cAAAE,EAAA8/K,iBAA9BhgL,CAA8B,UAAAE,EAAA69K,UAA9B/9K,CAA8B,QAAAE,EAAAs4G,QCS3B,IAAM2rE,EAAoB,MAA3B,MAAOA,EAiCXtjL,YAA4BujL,EACA/K,EACAkF,GAFAx9K,KAAAqjL,qBACArjL,KAAAs4K,eACAt4K,KAAAw9K,KA5BlBx9K,KAAAmT,SAA+B,IAAI4vG,MACnC/iH,KAAAsjL,cAAsC,IAAIvgE,MAC1C/iH,KAAAujL,oBAAmD,IAAIxgE,MACvD/iH,KAAA2yK,cAAoC,IAAI5vD,MACxC/iH,KAAAuzK,UAAqC,IAAIxwD,MACzC/iH,KAAAyzK,WAAsC,IAAI1wD,MACpD/iH,KAAAuiL,aAAevK,IACfh4K,KAAAwjL,UAAoB,EAOpBxjL,KAAAyjL,oBAAqCzL,IAAcC,IAEnDj4K,KAAA2iL,oBAA8B,EAI9B3iL,KAAA+9K,IAAM,CACJ2F,gBAAiB1jL,KAAK0jL,gBAAgBzF,KAAKj+K,MAC3Cm+K,eAAgBn+K,KAAKm+K,eAAeF,KAAKj+K,MACzCygL,mBAAoBzgL,KAAKygL,mBAAmBxC,KAAKj+K,MAMnD,CAIA,YAAI67G,GACF,OAAO77G,KAAKg9K,SACd,CAEA,YAAInhE,CAASA,GACX77G,KAAKg9K,UAAYnhE,EACjB77G,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwBjjE,GACrD,CAIA,mBAAImjE,GACF,OAAOh/K,KAAKi/K,gBACd,CAEA,mBAAID,CAAgB5wC,GAClBpuI,KAAKi/K,iBAAmB7wC,EAAQtgH,QAChC9tB,KAAK6iL,MAAQ7iL,KAAKqjL,mBACfM,mBAAmB3jL,KAAKq+K,gBAAiBr+K,KAAKi/K,iBAAkBj/K,KAAK67G,UACxE77G,KAAK0iL,SAAW1iL,KAAKqjL,mBAAmBO,eAAe5jL,KAAKq+K,gBAAiBr+K,KAAKi/K,kBAClFj/K,KAAKgzK,YAAchzK,KAAKqjL,mBAAmBQ,eAAe7jL,KAAKq+K,gBAAgBl1F,IAAKnpF,KAAKg/K,iBACzFh/K,KAAKkzK,aAAelzK,KAAKqjL,mBAAmBS,gBAAgB9jL,KAAKq+K,gBAAgB/b,IAAKtiK,KAAKg/K,gBAC7F,CAGA5+K,WACEJ,KAAKwjL,UAAW,EAChBxjL,KAAKw/K,OACLx/K,KAAK6/K,gBACP,CAEAL,OACEx/K,KAAKq+K,gBAAkBr+K,KAAKqjL,mBAAmBjK,UAAUp5K,KAAK6yC,QAC9D7yC,KAAK67G,SAAW77G,KAAK67G,UAAY,GACjC77G,KAAKg/K,gBAAkBh/K,KAAK+8K,YACxB/8K,KAAKs4K,aAAa3D,gBAAgB30K,KAAK+8K,YAAa/8K,KAAKq+K,gBAAgBh3I,QAAQvZ,QACjF9tB,KAAKs4K,aACJxD,sBACC90K,KAAKg/K,gBACLh/K,KAAK67G,SACL77G,KAAKq+K,gBAAgBtJ,iBACrB/0K,KAAKq+K,gBAAgBl1F,KAE3BnpF,KAAK4iL,SAAW5iL,KAAKqjL,mBAClBU,iBAAiB/jL,KAAKq+K,gBAAgBzE,gBACzC55K,KAAKgkL,eAAiBhkL,KAAKs4K,aAAarD,aAAaj1K,KAAKu/K,WAAYv/K,KAAKq+K,gBAAgBtJ,kBAC3F/0K,KAAKmjL,oBAAsBnjL,KAAKqjL,mBAAmBY,uBAAuBjkL,KAAKq+K,iBAC/Er+K,KAAK2iL,mBAAqB3iL,KAAKs3K,mBACjC,CAEA7oK,YAAYC,GACV,GAAI1O,KAAKwjL,SAAU,CACjB,MAAO5R,UAASC,UAASh/H,UAAUnkC,EAEnC1O,KAAKkkL,mBAAmBrxI,GACxB7yC,KAAKw/K,QAED5N,GAAWC,IACb7xK,KAAK6/K,gBAET,CACF,CAEA/lB,WAAWzoJ,GACTrR,KAAKu/K,WAAaluK,EAEdA,GACFrR,KAAK67G,SAAW77G,KAAKs4K,aAClB9C,qBAAqBnkK,EAAOrR,KAAKq+K,iBACpCr+K,KAAKgkL,eAAiBhkL,KAAKs4K,aACxBrD,aAAaj1K,KAAKu/K,WAAYv/K,KAAKq+K,gBAAgBtJ,mBAEtD/0K,KAAK67G,SAAW,GAGlB77G,KAAK6iL,MAAQ7iL,KAAKqjL,mBACfM,mBAAmB3jL,KAAKq+K,gBAAiBr+K,KAAKg/K,gBAAiBh/K,KAAK67G,UAEvE77G,KAAKw9K,GAAG1tK,cACV,CAEAiqJ,iBAAiBC,GACfh6J,KAAK++K,iBAAmB/kB,CAC1B,CAEA+kB,iBAAiB9zJ,GACjB,CAEAgvI,kBAAkBD,GAClB,CAEA2lB,SAAS3N,GACP,OAAIhyK,KAAK4xK,SAAW5xK,KAAK6xK,QAChB7xK,KAAK4/K,WAAW5N,EAAY3gK,OAE5B,IAAM,IAEjB,CAEAytK,wBAAwBztK,GACtB,OAAOrR,KAAKs4K,aAAa3C,uBACvB31K,KAAKq+K,gBAAgBh3I,OACrBh2B,EACArR,KAAKq+K,gBAAgB3D,mBAAqB16K,KAAKgkL,eAEnD,CAEAnE,iBACE7/K,KAAK4/K,WAAa5/K,KAAKs4K,aAAa3B,gBAClC,CAAC/E,QAAS5xK,KAAK4xK,QAASC,QAAS7xK,KAAK6xK,SACtC7xK,KAAKq+K,gBAAgBh3I,OACrB,OAGFrnC,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwB9+K,KAAK67G,UAC1D,CAEAomE,WAAWkC,GACLA,EAAItoE,WAAa77G,KAAKq+K,gBAAgBlN,kBAI1CnxK,KAAK67G,SAAW77G,KAAKs4K,aAClBtC,eAAeh2K,KAAKq+K,gBAAgBtJ,iBAAkB/0K,KAAK67G,SAAUsoE,GACxEnkL,KAAK6iL,MAAQ7iL,KAAKqjL,mBACfM,mBAAmB3jL,KAAKq+K,gBAAiBr+K,KAAKg/K,gBAAiBh/K,KAAK67G,UACvE77G,KAAKmT,SAASkxG,KAAK8/D,GACrB,CAEAjC,cAAciC,GACZ,OAAOnkL,KAAKqjL,mBAAmBnB,cAAcliL,KAAKq+K,gBAAiB8F,EAAI1pH,KACzE,CAEA0nH,kBAAkBgC,GAChB,MAAMC,EAAyC,CAC7C,cAAeD,EAAItoE,SACnB,mBAAoBsoE,EAAIE,aACxB,gBAAiBF,EAAIG,UACrB,gBAAiBH,EAAII,UACrB,iBAAkBJ,EAAIK,YAElBC,EAAyBzkL,KAAKqjL,mBAAmBlB,kBAAkBniL,KAAKq+K,gBAAiB8F,EAAI1pH,MACnG,OAAIgqH,IACFL,EAAWK,IAAkB,GAGxBL,CACT,CAEA1H,iBACE,MAAM9xJ,EAAO5qB,KAAKg/K,gBAAgBlxJ,QAClC9tB,KAAK0jL,gBAAgB1jL,KAAKg/K,iBAAiB,EAAI,SAC/C,MAAMxH,EAAKx3K,KAAKg/K,gBAAgBlxJ,QAChC9tB,KAAKuzK,UAAUlvD,KAAK,CAACz5F,OAAM4sJ,MAC7B,CAEAmF,kBACE,MAAM/xJ,EAAO5qB,KAAKg/K,gBAAgBlxJ,QAClC9tB,KAAK0jL,gBAAgB1jL,KAAKg/K,gBAAiB,EAAG,SAC9C,MAAMxH,EAAKx3K,KAAKg/K,gBAAgBlxJ,QAChC9tB,KAAKyzK,WAAWpvD,KAAK,CAACz5F,OAAM4sJ,MAC9B,CAEAsL,yBAAyB5pI,GACvBl5C,KAAKuzK,UAAUlvD,KAAKnrE,EACtB,CAEA8pI,0BAA0B9pI,GACxBl5C,KAAKyzK,WAAWpvD,KAAKnrE,EACvB,CAEA6pI,kCAAkC7pI,GAChCl5C,KAAKyzK,WAAWpvD,KAAKnrE,EACvB,CAEA+pI,mCAAmC/pI,GACjCl5C,KAAKuzK,UAAUlvD,KAAKnrE,EACtB,CAEA0oI,eAAe8C,GACb,OAAI1kL,KAAKq+K,gBAAgB1E,iBAChB35K,KAAKq+K,gBAAgB1E,iBAAiB+K,EAAQP,OAGhDO,EAAQr9I,OAAOrnC,KAAKq+K,gBAAgB3E,cAC7C,CAEA+G,mBAAmBpP,GACbrxK,KAAKyjL,sBAAwBpS,IAC/BrxK,KAAKyjL,oBAAsBpS,EAC3BrxK,KAAKujL,oBAAoBl/D,KAAKgtD,IAGhCrxK,KAAKw9K,GAAG1tK,cACV,CAEAozK,cAAcyB,GACZ3kL,KAAKg/K,gBAAkB2F,EAAMlqH,KAAK3sC,QAClC9tB,KAAKyjL,oBAAsBzL,IAAcC,IACzCj4K,KAAKsjL,cAAcj/D,KAAKsgE,EAC1B,CAEAjB,gBAAgBt1C,EAAiBw2C,EAAgBzO,EAA+B,SAC9En2K,KAAKg/K,gBAAkB5wC,EAAQtgH,QAAQwwI,IAAIsmB,EAAQzO,GACnDn2K,KAAKw9K,GAAG1tK,cACV,CAEAquK,eAAe3G,GACTA,IACFx3K,KAAKg/K,gBAAkBh/K,KAAKs4K,aAAa3D,gBAAgB6C,EAAIx3K,KAAKq+K,gBAAgBh3I,SAGpFrnC,KAAKw9K,GAAG1tK,cACV,CAEAwnK,oBACE,OAAOt3K,KAAKs4K,aAAahB,kBACvBt3K,KAAKq+K,gBAAgB/K,gBACrB,MACAtzK,KAAKq+K,gBAAgBl1F,IACrBnpF,KAAKq+K,gBAAgB/b,IAEzB,CAEAggB,cACEtiL,KAAKg/K,gBAAkB3xJ,MACvBrtB,KAAK2yK,cAActuD,MACrB,CAEA6/D,mBAAmBrxI,GACjB,GAAIA,EAAQ,CACV,MAAMglI,EAAuC73K,KAAKqjL,mBAAmBjK,UAAUvmI,EAAOgyI,eAChF/M,EAA0C93K,KAAKqjL,mBAAmBjK,UAAUvmI,EAAOy1E,cAErFtoH,KAAKs4K,aAAaV,uBAAuBC,EAAUC,KACrD93K,KAAKi/K,iBAAmB,MAGtBpH,EAASqB,SAAWpB,EAAYoB,SAC9Bl5K,KAAKg/K,iBACPh/K,KAAKg/K,gBAAgB9F,OAAOpB,EAAYoB,QAG1Cl5K,KAAK67G,SAAStuG,QAAQipK,GAAKA,EAAE0C,OAAOpB,EAAYoB,SAEpD,CACF,CAACj4K,SAAAjB,KAAA,mBAAAkB,iBA9RUkiL,GAAoBnkL,MAAAkC,KAAAlC,MAAA6S,KAAA7S,aAAA,EAAAgC,SAAAjB,KAAA,UAAAggH,EAAA3+G,IAAA,MAApB+hL,EAAoB9hL,UAAA,sBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,0TAdpB,CACTw/K,IACA,CACEzxJ,QAASqyI,KACT1H,eAAamY,OAAW,IAAM4Q,GAC9BvzJ,OAAO,GAET,CACEH,QAAS2xJ,KACThnB,eAAamY,OAAW,IAAM4Q,GAC9BvzJ,OAAO,KAEV5wB,OAAAsC,MAAA,EAAAC,KAAA,EAAAC,OAAA,ugCAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDvDH1C,MAAA,EAAA6lL,EAAA,aAAA7lL,CAsCM,EAAA8lL,EAAA,iCAtCA9lL,MAAA,OAAA2C,EAAA6hL,sBAAA7hL,EAAA2gL,aAAAtK,KA+CDh5K,cAAA,OAAA2C,EAAA6hL,sBAAA7hL,EAAA2gL,aAAApK,koDCUQiL,CAAoB,kGChD1B,IAAMjC,EAAkB,MAAzB,MAAOA,EAgBXrhL,YAAoBw4K,GAAAt4K,KAAAs4K,eAfXt4K,KAAAglL,eAAqC,CAC5CjM,mBAAmB,EACnBC,iBAAiB,EACjBY,eAAgB,KAChBF,cAAe,MACfryI,OAAQ,aACR0tI,kBAAkB,EAClB8E,YAAa,YACbZ,qBAAqB,EACrBC,OAAQ7rJ,aACR4sJ,aAAc,KACd9I,iBAAiB,GAEFnxK,KAAAilL,KAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAG7D,CAEA7L,UAAUvmI,GACR,MAAMwmI,EAAsC,IACvCr5K,KAAKglL,kBACLhlL,KAAKs4K,aAAavC,eAAeljI,IAGtC,OAAA7yC,KAAKs4K,aAAaZ,qBAAqB2B,EAASA,EAAQhyI,OAAQ,CAAC,MAAO,QAExEha,WAAcgsJ,EAAQH,QAEfG,CACT,CAEA6L,gBAAgBtL,GACd,MAAMuL,EAAgBnlL,KAAKilL,KAAK71K,QAAQwqK,GAExC,OADgB55K,KAAKilL,KAAKz0K,MAAM20K,EAAe,GAAGhxH,OAAOn0D,KAAKilL,KAAKz0K,MAAM,EAAG20K,IAC7D91J,OAAO,CAAC3e,EAAKyzK,EAAKr8H,KAC/Bp3C,EAAIyzK,GAAOr8H,EAEJp3C,GACmB,GAC9B,CAEAizK,mBAAmB9wI,EAAoC8xI,EAAe9oE,GACpE,IAAIupE,EAAuB,GAC3B,MAAMC,EAAsBrlL,KAAKilL,KAAK71K,QAAQyjC,EAAO+mI,gBAC/C0L,EAAkBX,EAAM72J,QAAQ+0B,QAAQ,SAE9C,KAAOyiI,EAAgBnB,QAAUkB,GAC/BC,EAAgBjzJ,SAAS,EAAG,OAG9B,MAAM+7G,EAAUk3C,EAAgBx3J,QAC1Bw2J,EAAYK,EAAM72J,QAAQuE,SAAS,EAAG,SACtCkyJ,EAAYI,EAAM72J,QAAQwwI,IAAI,EAAG,SACjCinB,EAAQl4J,MAkBdm4J,OAhB+BxlL,KAAKs4K,aAAa9D,YAAY,IAC1DnlJ,OAAQmvF,IACPA,EAAM/tG,KAAK,CACTgqD,KAAM2zE,EAAQtgH,QACd+tF,WAAYA,EAAS/qG,KAAK20K,GAAer3C,EAAQ+jC,OAAOsT,EAAa,QACrEpB,aAAcj2C,EAAQ+jC,OAAOwS,EAAO,SACpCL,UAAWl2C,EAAQ+jC,OAAOmS,EAAW,SACrCC,UAAWn2C,EAAQ+jC,OAAOoS,EAAW,SACrCC,WAAYp2C,EAAQ+jC,OAAOoT,EAAO,OAClClwB,SAAUr1J,KAAK0lL,eAAet3C,EAASv7F,KAEzCu7F,EAAQkwB,IAAI,EAAG,OAER9/C,GACN,IAEUjxG,QAAQ,CAAC42K,EAAKr8H,KAC3B,MAAM69H,EAAYz8F,KAAK02E,MAAM93G,EAAQ,GAEhCs9H,EAAWO,IACdP,EAAW30K,KAAK,IAGlB20K,EAAWO,GAAWl1K,KAAK0zK,EAAG,GAG3BtxI,EAAOkmI,oBACVqM,EAAaplL,KAAK4lL,qBAAqBjB,EAAOS,IAGzCA,CACT,CAEArB,iBAAiBnK,GACf,MAAMiM,EAAwC,CAC5CC,GAAIz4J,MAAS82J,IAAI,GACjB4B,GAAI14J,MAAS82J,IAAI,GACjB6B,GAAI34J,MAAS82J,IAAI,GACjB8B,GAAI54J,MAAS82J,IAAI,GACjB+B,GAAI74J,MAAS82J,IAAI,GACjBgC,GAAI94J,MAAS82J,IAAI,GACjBiC,GAAI/4J,MAAS82J,IAAI,IAEbvB,EAAqB,GACrByD,EAAUrmL,KAAKklL,gBAAgBtL,GAErC,UAAW0M,KAAUD,EACfA,EAAQ1O,eAAe2O,KACzB1D,EAASyD,EAAQC,IAAWT,EAAaS,IAI7C,OAAO1D,CACT,CAEA8C,eAAejrH,EAAc5nB,GAC3B,OAAIA,EAAO4mI,sBACF5mI,EAAO4mI,sBAAsBh/G,MAGlC5nB,EAAOs2C,MAAO1uB,EAAK8rH,SAAS1zI,EAAOs2C,IAAK,YAIlCt2C,EAAOyvH,MAAO7nG,EAAKu6G,QAAQniI,EAAOyvH,IAAK,OACnD,CAGAshB,eAAe/wI,EAAoC8xI,GACjD,OAAI9xI,EAAOinI,eACFjnI,EAAOinI,eAAe6K,GAGxBA,EAAMt9I,OAAOwL,EAAOgnI,YAC7B,CAGAgK,eAAe16F,EAAaq9F,GAC1B,OAAOr9F,GAAMA,EAAIo9F,SAASC,EAAkB,QAC9C,CAGA1C,gBAAgBxhB,EAAakkB,GAC3B,OAAOlkB,GAAMA,EAAI0S,QAAQwR,EAAkB,QAC7C,CAEAC,qBAAqB7M,GACnB,MAAMuL,EAAgBnlL,KAAKilL,KAAK71K,QAAQwqK,GAExC,OADgB55K,KAAKilL,KAAKz0K,MAAM20K,EAAe,GAAGhxH,OAAOn0D,KAAKilL,KAAKz0K,MAAM,EAAG20K,IAC7D91J,OAAO,CAAC3e,EAAKyzK,EAAKr8H,KAC/Bp3C,EAAIo3C,GAASq8H,EAENzzK,GACmB,GAC9B,CAEAuzK,uBAAuB5F,GACrB,OAAOr+K,KAAKs4K,aAAavC,eAAe,CACtC5sF,IAAKk1F,EAAgBl1F,IACrBm5E,IAAK+b,EAAgB/b,IACrBj7H,OAAQg3I,EAAgBh3I,OACxBq/I,yBAAyB,EACzB3R,kBAAkB,EAClBmE,OAAQmF,EAAgBnF,OACxBa,WAAYsE,EAAgBtE,WAC5BC,cAAeqE,EAAgBrE,cAC/BI,eAAgBiE,EAAgBjE,eAChCC,kBAAmBgE,EAAgBhE,kBACnCC,yBAA0B+D,EAAgB/D,yBAC1CC,wBAAyB8D,EAAgB9D,wBACzCC,wBAAyB6D,EAAgB7D,wBACzCC,4BAA6B4D,EAAgB5D,4BAC7CnH,gBAAiB+K,EAAgB/K,gBACjCqH,eAAgB0D,EAAgB1D,gBAEpC,CAEAuH,cAAcrvI,EAAoCsxI,GAChD,OAAItxI,EAAOqnI,gBACFrnI,EAAOqnI,gBAAgBiK,GAGzBA,EAAI98I,OAAOwL,EAAOonI,aAC3B,CAEAkI,kBAAkBtvI,EAAoCsxI,GACpD,OAAItxI,EAAOsnI,uBACFtnI,EAAOsnI,uBAAuBgK,GAGhC,EACT,CAEQyB,qBAAqBvB,EAAsBe,GACjD,OAAIA,EAAWA,EAAW9hL,OAAS,GAAGwN,KAAMqzK,GAAQA,EAAI1pH,KAAK03G,OAAOkS,EAAc,UACzEe,EAEAA,EAAW50K,MAAM,GAAG,EAE/B,CAACvP,SAAAjB,KAAA,mBAAAkB,iBAnMUigL,GAAkBliL,MAAAkC,KAAA,EAAAF,SAAAjB,KAAA,WAAAoB,EAAA0nB,IAAA,OAAlBq4J,EAAkBp4J,QAAlBo4J,EAAkBn4J,mBAAlBm4J,CAAkB,2JCkDxB,IAAMwF,EAAwB,MAA/B,MAAOA,EAqBX7mL,YAAmB8mL,EACAtO,EACAkF,GAFAx9K,KAAA4mL,yBACA5mL,KAAAs4K,eACAt4K,KAAAw9K,KAhBTx9K,KAAAwxK,SAAgC,IAAIzuD,MACpC/iH,KAAA2yK,cAAoC,IAAI5vD,MACxC/iH,KAAAuzK,UAAqC,IAAIxwD,MACzC/iH,KAAAyzK,WAAsC,IAAI1wD,MAEpD/iH,KAAAwjL,UAAoB,EAKpBxjL,KAAA+9K,IAAM,CACJI,eAAgBn+K,KAAKm+K,eAAeF,KAAKj+K,MAM3C,CAIA,YAAI67G,GACF,OAAO77G,KAAKg9K,SACd,CAEA,YAAInhE,CAASA,GACX77G,KAAKg9K,UAAYnhE,EACjB77G,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwBjjE,GACrD,CAGAz7G,WACEJ,KAAKwjL,UAAW,EAChBxjL,KAAKw/K,OACLx/K,KAAK6/K,gBACP,CAEAL,OACEx/K,KAAKq+K,gBAAkBr+K,KAAK4mL,uBAAuBxN,UAAUp5K,KAAK6yC,QAClE7yC,KAAKgkL,eAAiBhkL,KAAKs4K,aAAarD,aAAaj1K,KAAKu/K,YAAY,EACxE,CAEA9wK,YAAYC,GACV,GAAI1O,KAAKwjL,SAAU,CACjB,MAAO5R,UAASC,WAAWnjK,EAC3B1O,KAAKw/K,QAED5N,GAAWC,IACb7xK,KAAK6/K,gBAET,CACF,CAEA/lB,WAAWzoJ,GACTrR,KAAKu/K,WAAaluK,EAEdA,GACFrR,KAAK67G,SAAW77G,KAAKs4K,aAClB9C,qBAAqBnkK,EAAO,CAC3Bg2B,OAAQrnC,KAAKq+K,gBAAgBh3I,OAC7B0tI,kBAAkB,IACjB,GACL/0K,KAAKgkL,eAAiBhkL,KAAKs4K,aACxBrD,aAAaj1K,KAAKu/K,YAAY,IAEjCv/K,KAAK67G,SAAW,KAGlB77G,KAAKw9K,GAAG1tK,cACV,CAEAiqJ,iBAAiBC,GACfh6J,KAAK++K,iBAAmB/kB,CAC1B,CAEA+kB,iBAAiB9zJ,GACjB,CAEAgvI,kBAAkBD,GAClB,CAEA2lB,SAAS3N,GACP,OAAIhyK,KAAK4xK,SAAW5xK,KAAK6xK,QAChB7xK,KAAK4/K,WAAW5N,EAAY3gK,OAE5B,IAAM,IAEjB,CAEAytK,wBAAwBztK,GACtB,OAAOrR,KAAKs4K,aAAa3C,uBACvB31K,KAAKq+K,gBAAgBh3I,OACrB,CAACh2B,GACDrR,KAAKq+K,gBAAgB3D,mBAAqB16K,KAAKgkL,eAEnD,CAEAnE,iBACE7/K,KAAK4/K,WAAa5/K,KAAKs4K,aAAa3B,gBAClC,CACE/E,QAAS5xK,KAAK4xK,QACdC,QAAS7xK,KAAK6xK,cACb9uI,EAAW,WAEhB/iC,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwB9+K,KAAK67G,UAC1D,CAEA+gE,aAAauH,GACXnkL,KAAK67G,SAAW77G,KAAK4mL,uBAAuBC,UAAU7mL,KAAK67G,SAAUsoE,EAAI1pH,KAAMz6D,KAAK6yC,QACpF7yC,KAAK8mL,YACP,CAEAC,WAAW/1H,GACThxD,KAAK67G,SAAW77G,KAAK4mL,uBAAuBI,WAAWhnL,KAAK67G,SAAU7qD,EAAKyJ,MAC3Ez6D,KAAK8mL,YACP,CAEAA,aACE9mL,KAAKwxK,SAASntD,KAAK,CAAC5pD,KAAMz6D,KAAK67G,SAAUA,UAAU,GACrD,CAEAsiE,eAAe3G,GACTA,GACFx3K,KAAKk/K,eAAef,eAAe3G,EAEvC,CAEAkF,eAAexjI,GACbl5C,KAAKuzK,UAAUlvD,KAAKnrE,EACtB,CAEAyjI,gBAAgBzjI,GACdl5C,KAAKyzK,WAAWpvD,KAAKnrE,EACvB,CAACj4C,SAAAjB,KAAA,mBAAAkB,iBA5IUylL,GAAwB1nL,MAAAkC,KAAAlC,MAAA6S,KAAA7S,aAAA,EAAAgC,SAAAjB,KAAA,UAAAmU,EAAA9S,IAAA,MAAxBslL,EAAwBrlL,UAAA,2BAAAyb,UAAA,SAAApb,EAAAC,MAAA,EAAAD,iWAhBxB,CACTu/K,IACAC,IACAC,IACA,CACE1xJ,QAASqyI,KACT1H,eAAamY,OAAW,IAAMmU,GAC9B92J,OAAO,GAET,CACEH,QAAS2xJ,KACThnB,eAAamY,OAAW,IAAMmU,GAC9B92J,OAAO,KAEV5wB,OAAAsC,MAAA,EAAAC,KAAA,EAAAC,OAAA,kLAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICzDH1C,MAAA,yBACiBA,MAAA,kCAAiB2C,EAAA+wK,cAAAtuD,MAAoB,EAArCplH,CAAsC,qBAAAgU,GAAA,OACzBrR,EAAA86K,eAAAzpK,EAAsB,EADnChU,CAAsC,sBAAAgU,GAAA,OAExBrR,EAAA+6K,gBAAA1pK,EAAuB,EAFrChU,CAAsC,oBAAAgU,GAAA,OAG1BrR,EAAAg7K,aAAA3pK,EAAoB,GAKjDhU,QACAA,MAAA,wBACgBA,MAAA,oBAAAgU,GAAA,OAAYrR,EAAAmlL,WAAA9zK,EAAkB,GAI9ChU,eAViBA,MAAA,SAAA2C,EAAAy8K,gBAAAp/K,CAA0B,cAAA2C,EAAAm7K,YAA1B99K,CAA0B,UAAA2C,EAAAo7K,UAA1B/9K,CAA0B,QAAA2C,EAAA61G,OAO3Bx4G,MAAA,GAAAA,MAAA,SAAA2C,EAAAy8K,gBAAAp/K,CAA0B,UAAA2C,EAAAo7K,UAA1B/9K,CAA0B,QAAA2C,EAAA61G,0RD+C7BkvE,CAAwB,wHEnDrC,MAAMM,EAAa,WACbC,EAAc,WACdC,EAAkBF,EAAaC,EAG9B,IAAMhG,EAAsB,MAA7B,MAAOA,EAKXphL,YAAoBw4K,EACA+K,EACA9K,GAFAv4K,KAAAs4K,eACAt4K,KAAAqjL,qBACArjL,KAAAu4K,oBANXv4K,KAAAglL,eAAyC,CAChD9L,OAAQ7rJ,aAMV,CAEA+rJ,UAAUvmI,GACR,MAAMwmI,EAAU,IACXr5K,KAAKglL,kBACLhlL,KAAKu4K,kBAAkBa,UAAUvmI,MACjC7yC,KAAKqjL,mBAAmBjK,UAAUvmI,IAGvCxlB,kBAAcwlB,EAAOqmI,QAEdG,CACT,CAEAwN,UAAUz4C,EAAiB+1C,EAAatxI,GACtC,MAAMme,EAAOo9E,GAAoB/gH,MACjC,IAAI+5J,EAAU/5J,IAAO82J,EAAI98I,OAAO4/I,GAAcj2H,EAAK3pB,OAAO6/I,GAAcC,GAExE,GAAIt0I,EAAOs2C,IAAK,CACd,MAAMA,EAAct2C,EAAOs2C,IAC3Bi+F,EAAUj+F,EAAI6rF,QAAQoS,GAAWj+F,EAAMi+F,CACzC,CAEA,GAAIv0I,EAAOyvH,IAAK,CACd,MAAMA,EAAczvH,EAAOyvH,IAC3B8kB,EAAU9kB,EAAIikB,SAASa,GAAW9kB,EAAM8kB,CAC1C,CAEA,OAAOA,CACT,CAEAJ,WAAW54C,EAAiBp9E,GAC1B,MAAMmzH,EAAM/1C,GAAoB/gH,MAEhC,OAAOA,IAAO82J,EAAI98I,OAAO4/I,GAAcj2H,EAAK3pB,OAAO6/I,GAAcC,EACnE,CAAClmL,SAAAjB,KAAA,mBAAAkB,iBA3CUggL,GAAsBjiL,MAAAkC,KAAAlC,MAAA6S,KAAA7S,MAAA8S,KAAA,EAAA9Q,SAAAjB,KAAA,WAAAggH,EAAAl3F,IAAA,OAAtBo4J,EAAsBn4J,QAAtBm4J,EAAsBl4J,mBAAtBk4J,CAAsB,mGCJ5B,IAAMmG,EAAoB,MAA3B,MAAOA,EAcXvnL,YAAoBw4K,GAAAt4K,KAAAs4K,eAbXt4K,KAAAglL,eAA+C,CACtDjQ,kBAAkB,EAClBgF,WAAY,OACZ1yI,OAAQ,UACRq/I,yBAAyB,EACzBtM,eAAgB,MAChBlB,OAAQ7rJ,aACRmtJ,wBAAyB,GACzBC,6BAA6B,EAC7BtJ,iBAAiB,EACjBwJ,eAAgB,EAIlB,CAEAvB,UAAUvmI,GACR,MAAMwmI,EAAwC,IACzCr5K,KAAKglL,kBACLhlL,KAAKs4K,aAAavC,eAAeljI,IAGtC,OAAA7yC,KAAKsnL,eAAejO,GAEpBr5K,KAAKs4K,aAAaZ,qBAAqB2B,EAASA,EAAQhyI,OAAQ,CAAC,MAAO,QACxEha,WAAcgsJ,EAAQH,QAEfG,CACT,CAEAkO,aAAa10I,EAA8B20I,EAAc3rE,EAAqB,MAC5E,MAAM/zD,EAAQ0/H,EAAK15J,QAAQ+0B,QAAQ,QAEnC,OAAO7iD,KAAKs4K,aAAa9D,YAAY3hI,EAAO8nI,gBAAgBjqK,IAAI,IACvD1Q,KAAKs4K,aAAa9D,YAAY,GAAK3hI,EAAO8nI,gBAAgBjqK,IAAI,KACnE,MAAM+pD,EAAO3S,EAAMh6B,QACb62J,EAAQ,CACZlqH,OACAohD,WAAYA,EAAS/qG,KAAKusJ,GAAKv1G,EAAMqqH,OAAO9U,EAAG,UAC/CgnB,aAAcv8H,EAAMqqH,OAAO9kJ,MAAU,SACrCgoI,SAAUr1J,KAAKynL,gBAAgBhtH,EAAM5nB,GACrC35B,KAAMlZ,KAAK0nL,gBAAgB70I,EAAQ4nB,IAGrC3S,SAAMw2G,IAAI,EAAG,SAENqmB,IAGb,CAEA8C,gBAAgBhtH,EAAc5nB,GAC5B,OAAIA,EAAO0nI,wBACF1nI,EAAO0nI,wBAAwB9/G,MAGpC5nB,EAAOs2C,MAAO1uB,EAAK8rH,SAAS1zI,EAAOs2C,IAAK,cAIlCt2C,EAAOyvH,MAAO7nG,EAAKu6G,QAAQniI,EAAOyvH,IAAK,SACnD,CAEAuhB,eAAe16F,EAAaq9F,GAC1B,OAAOr9F,GAAMA,EAAIo9F,SAASC,EAAkB,OAC9C,CAEA1C,gBAAgBxhB,EAAakkB,GAC3B,OAAOlkB,GAAMA,EAAI0S,QAAQwR,EAAkB,OAC7C,CAEA5C,eAAe/wI,EAA8B20I,GAC3C,OAAI30I,EAAOmnI,cACFnnI,EAAOmnI,cAAcwN,GAGvBA,EAAKngJ,OAAOwL,EAAOknI,WAC5B,CAEA2N,gBAAgB70I,EAA8B8xI,GAC5C,OAAI9xI,EAAOwnI,kBACFxnI,EAAOwnI,kBAAkBsK,GAG3BA,EAAMt9I,OAAOwL,EAAOunI,eAC7B,CAEAuN,oBAAoB90I,EAA8B8xI,GAChD,OAAI9xI,EAAOynI,yBACFznI,EAAOynI,yBAAyBqK,GAGlC,EACT,CAEQ2C,eAAez0I,GACrB,GAAIA,EAAO8nI,eAAiB,GAAK9nI,EAAO8nI,eAAiB,KAAO/1H,OAAOgjI,UAAU,GAAK/0I,EAAO8nI,gBAC3F,MAAM,IAAIxmE,MAAM,mEAEpB,CAAClzG,SAAAjB,KAAA,mBAAAkB,iBApGUmmL,GAAoBpoL,MAAAkC,KAAA,EAAAF,SAAAjB,KAAA,WAAAulB,EAAAuD,IAAA,OAApBu+J,EAAoBt+J,QAApBs+J,EAAoBr+J,mBAApBq+J,CAAoB,kFCW3BpoL,MAAA,cAAQA,MAAA,yBAAA4oL,EAAA5oL,MAAAusH,GAAAlpH,UAAA4D,EAAAjH,MAAA,UAASA,MAAAiH,EAAA4hL,aAAAD,GAAmB,GAQpC5oL,+CALQA,MAAA,WAAA4oL,EAAAxyB,SAAAp2J,CAA2B,YAAA4oL,EAAA3uK,KAA3Bja,CAA2B,UAAAqF,EAAAqjL,oBAAAE,IAD3B5oL,MAAA,YAAA4oL,EAAAptH,KAAApzB,OAAA/iC,EAAA+5K,gBAAAh3I,mCAHVpoC,MAAA,WACEA,MAAA,EAAA8oL,EAAA,gBASF9oL,kCAR4BA,cAAA,UAAA+oL,ICiCzB,IAAMC,EAAsB,MAA7B,MAAOA,EA+BXnoL,YAA4BooL,EACA5P,EACAkF,GAFAx9K,KAAAkoL,uBACAloL,KAAAs4K,eACAt4K,KAAAw9K,KA1BlBx9K,KAAAmT,SAAiC,IAAI4vG,MACrC/iH,KAAAujL,oBAA0C,IAAIxgE,MAC9C/iH,KAAA2yK,cAAoC,IAAI5vD,MACxC/iH,KAAAuzK,UAAqC,IAAIxwD,MACzC/iH,KAAAyzK,WAAsC,IAAI1wD,MAC1C/iH,KAAAwzK,mBAA8C,IAAIzwD,MAClD/iH,KAAA0zK,oBAA+C,IAAI3wD,MAC7D/iH,KAAAwjL,UAAoB,EAMpBxjL,KAAA2iL,oBAA8B,EAM9B3iL,KAAA+9K,IAAM,CACJoK,eAAgBnoL,KAAKygL,mBAAmBxC,KAAKj+K,MAC7Cm+K,eAAgBn+K,KAAKm+K,eAAeF,KAAKj+K,MAM3C,CAIA,YAAI67G,GACF,OAAO77G,KAAKg9K,SACd,CAEA,YAAInhE,CAASA,GACX77G,KAAKg9K,UAAYnhE,EACjB77G,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwBjjE,GACrD,CAIA,mBAAImjE,GACF,OAAOh/K,KAAKi/K,gBACd,CAEA,mBAAID,CAAgB5wC,GAClBpuI,KAAKi/K,iBAAmB7wC,EAAQtgH,QAChC9tB,KAAKooL,WAAapoL,KAAKkoL,qBACpBX,aAAavnL,KAAKq+K,gBAAiBr+K,KAAKi/K,iBAAkBj/K,KAAK67G,UAClE77G,KAAK0iL,SAAW1iL,KAAKkoL,qBAAqBtE,eAAe5jL,KAAKq+K,gBAAiBr+K,KAAKg/K,iBACpFh/K,KAAKgzK,YAAchzK,KAAKkoL,qBAAqBrE,eAAe7jL,KAAKq+K,gBAAgBl1F,IAAKnpF,KAAKi/K,kBAC3Fj/K,KAAKkzK,aAAelzK,KAAKkoL,qBAAqBpE,gBAAgB9jL,KAAKq+K,gBAAgB/b,IAAKtiK,KAAKg/K,iBAC7Fh/K,KAAKqoL,qBAAuBroL,KAAKq+K,gBAAgB5D,6BAA+Bz6K,KAAKgzK,YACrFhzK,KAAKsoL,sBAAwBtoL,KAAKq+K,gBAAgB5D,6BAA+Bz6K,KAAKkzK,YACxF,CAEA9yK,WACEJ,KAAKwjL,UAAW,EAChBxjL,KAAKw/K,OACLx/K,KAAK6/K,gBACP,CAEApxK,YAAYC,GACV,GAAI1O,KAAKwjL,SAAU,CACjB,MAAO5R,UAASC,UAASh/H,UAAUnkC,EAEnC1O,KAAKkkL,mBAAmBrxI,GACxB7yC,KAAKw/K,QAED5N,GAAWC,IACb7xK,KAAK6/K,gBAET,CACF,CAEAL,OACEx/K,KAAKq+K,gBAAkBr+K,KAAKkoL,qBAAqB9O,UAAUp5K,KAAK6yC,QAChE7yC,KAAK67G,SAAW77G,KAAK67G,UAAY,GACjC77G,KAAKg/K,gBAAkBh/K,KAAK+8K,YACxB/8K,KAAK+8K,YACL/8K,KAAKs4K,aACJxD,sBACC90K,KAAKg/K,gBACLh/K,KAAK67G,SACL77G,KAAKq+K,gBAAgBtJ,iBACrB/0K,KAAKq+K,gBAAgBl1F,KAE3BnpF,KAAKgkL,eAAiBhkL,KAAKs4K,aAAarD,aAAaj1K,KAAKu/K,WAAYv/K,KAAKq+K,gBAAgBtJ,kBAC3F/0K,KAAK2iL,mBAAqB3iL,KAAKs3K,mBACjC,CAEAxd,WAAWzoJ,GACTrR,KAAKu/K,WAAaluK,EAEdA,GACFrR,KAAK67G,SAAW77G,KAAKs4K,aAClB9C,qBAAqBnkK,EAAOrR,KAAKq+K,iBACpCr+K,KAAKooL,WAAapoL,KAAKkoL,qBACpBX,aAAavnL,KAAKq+K,gBAAiBr+K,KAAKg/K,gBAAiBh/K,KAAK67G,UACjE77G,KAAKgkL,eAAiBhkL,KAAKs4K,aAAarD,aAAaj1K,KAAKu/K,WAAYv/K,KAAKq+K,gBAAgBtJ,oBAE3F/0K,KAAK67G,SAAW,GAChB77G,KAAKooL,WAAapoL,KAAKkoL,qBACpBX,aAAavnL,KAAKq+K,gBAAiBr+K,KAAKg/K,gBAAiBh/K,KAAK67G,WAGnE77G,KAAKw9K,GAAG1tK,cACV,CAEAiqJ,iBAAiBC,GACfh6J,KAAK++K,iBAAmB/kB,CAC1B,CAEA+kB,iBAAiB9zJ,GACjB,CAEAgvI,kBAAkBD,GAClB,CAEA2lB,SAAS3N,GACP,OAAIhyK,KAAK4xK,SAAW5xK,KAAK6xK,QAChB7xK,KAAK4/K,WAAW5N,EAAY3gK,OAE5B,IAAM,IAEjB,CAEAytK,wBAAwBztK,GACtB,OAAOrR,KAAKs4K,aAAa3C,uBACvB31K,KAAKq+K,gBAAgBh3I,OACrBh2B,EACArR,KAAKq+K,gBAAgB3D,mBAAqB16K,KAAKgkL,eAEnD,CAEAnE,iBACE7/K,KAAK4/K,WAAa5/K,KAAK4/K,WAAa5/K,KAAKs4K,aAAa3B,gBACpD,CAAC/E,QAAS5xK,KAAK4xK,QAASC,QAAS7xK,KAAK6xK,SACtC7xK,KAAKq+K,gBAAgBh3I,OACrB,SAGFrnC,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwB9+K,KAAK67G,UAC1D,CAEAisE,aAAanD,GACPA,EAAM9oE,WAAa77G,KAAKq+K,gBAAgBlN,kBAI5CnxK,KAAK67G,SAAW77G,KAAKs4K,aAClBtC,eAAeh2K,KAAKq+K,gBAAgBtJ,iBAAkB/0K,KAAK67G,SAAU8oE,EAAO,SAC/E3kL,KAAKooL,WAAapoL,KAAKkoL,qBACpBX,aAAavnL,KAAKq+K,gBAAiBr+K,KAAKg/K,gBAAiBh/K,KAAK67G,UACjE77G,KAAKmT,SAASkxG,KAAKsgE,GACrB,CAEAjI,iBACE,MAAM9xJ,EAAO5qB,KAAKg/K,gBAAgBlxJ,QAClC9tB,KAAKg/K,gBAAkBh/K,KAAKg/K,gBAAgBlxJ,QAAQuE,SAAS,EAAG,QAChE,MAAMmlJ,EAAKx3K,KAAKg/K,gBAAgBlxJ,QAChC9tB,KAAKooL,WAAapoL,KAAKkoL,qBAAqBX,aAAavnL,KAAKq+K,gBAAiBr+K,KAAKg/K,gBAAiBh/K,KAAK67G,UAC1G77G,KAAKuzK,UAAUlvD,KAAK,CAACz5F,OAAM4sJ,MAC7B,CAEA+Q,0BACE,IAAIC,EAAaxoL,KAAKq+K,gBAAgB7D,wBACfx6K,KAAKq+K,gBAAgBl1F,KAC1CnpF,KAAKg/K,gBAAgBwI,OAASxnL,KAAKq+K,gBAAgBl1F,IAAIq+F,OAASgB,IAGhEA,EAAaxoL,KAAKg/K,gBAAgBwI,OAASxnL,KAAKq+K,gBAAgBl1F,IAAIq+F,QAGtE,MAAM58J,EAAO5qB,KAAKg/K,gBAAgBlxJ,QAClC9tB,KAAKg/K,gBAAkBh/K,KAAKg/K,gBAAgBlxJ,QAAQuE,SAASm2J,EAAY,QACzE,MAAMhR,EAAKx3K,KAAKg/K,gBAAgBlxJ,QAChC9tB,KAAKwzK,mBAAmBnvD,KAAK,CAACz5F,OAAM4sJ,MACtC,CAEAmF,kBACE,MAAM/xJ,EAAO5qB,KAAKg/K,gBAAgBlxJ,QAClC9tB,KAAKg/K,gBAAkBh/K,KAAKg/K,gBAAgBlxJ,QAAQwwI,IAAI,EAAG,QAC3D,MAAMkZ,EAAKx3K,KAAKg/K,gBAAgBlxJ,QAChC9tB,KAAKyzK,WAAWpvD,KAAK,CAACz5F,OAAM4sJ,MAC9B,CAEAiR,2BACE,IAAID,EAAaxoL,KAAKq+K,gBAAgB7D,wBACfx6K,KAAKq+K,gBAAgB/b,KAC1CtiK,KAAKq+K,gBAAgB/b,IAAIklB,OAASxnL,KAAKg/K,gBAAgBwI,OAASgB,IAGhEA,EAAaxoL,KAAKq+K,gBAAgB/b,IAAIklB,OAASxnL,KAAKg/K,gBAAgBwI,QAGtE,MAAM58J,EAAO5qB,KAAKg/K,gBAAgBlxJ,QAClC9tB,KAAKg/K,gBAAkBh/K,KAAKg/K,gBAAgBlxJ,QAAQwwI,IAAIkqB,EAAY,QACpE,MAAMhR,EAAKx3K,KAAKg/K,gBAAgBlxJ,QAChC9tB,KAAK0zK,oBAAoBrvD,KAAK,CAACz5F,OAAM4sJ,MACvC,CAEAiJ,qBACEzgL,KAAKujL,oBAAoBl/D,MAC3B,CAEAsjE,oBAAoBhD,GAClB,MAAM+D,EAAuC,CAC3C,cAAe/D,EAAM9oE,SACrB,mBAAoB8oE,EAAMN,cAEtBI,EAAyBzkL,KAAKkoL,qBAAqBP,oBAAoB3nL,KAAKq+K,gBAAiBsG,EAAMlqH,MAEzG,OAAIgqH,IACFiE,EAASjE,IAAkB,GAGtBiE,CACT,CAEApR,oBACE,OAAOt3K,KAAKs4K,aAAahB,kBACvBt3K,KAAKq+K,gBAAgB/K,gBACrB,QACAtzK,KAAKq+K,gBAAgBl1F,IACrBnpF,KAAKq+K,gBAAgB/b,IAEzB,CAEAggB,cACEtiL,KAAKg/K,gBAAkB3xJ,MACvBrtB,KAAK2yK,cAActuD,MACrB,CAEA85D,eAAe3G,GACTA,IACFx3K,KAAKg/K,gBAAkBh/K,KAAKs4K,aAAa3D,gBAAgB6C,EAAIx3K,KAAKq+K,gBAAgBh3I,QAClFrnC,KAAKw9K,GAAG1tK,eAEZ,CAEAo0K,mBAAmBrxI,GACjB,GAAIA,EAAQ,CACV,MAAMglI,EAAyC73K,KAAKkoL,qBAAqB9O,UAAUvmI,EAAOgyI,eACpF/M,EAA4C93K,KAAKkoL,qBAAqB9O,UAAUvmI,EAAOy1E,cAEzFtoH,KAAKs4K,aAAaV,uBAAuBC,EAAUC,KACrD93K,KAAKi/K,iBAAmB,MAGtBpH,EAASqB,SAAWpB,EAAYoB,SAC9Bl5K,KAAKg/K,iBACPh/K,KAAKg/K,gBAAgB9F,OAAOpB,EAAYoB,SAGzCl5K,KAAK67G,UAAY,IAAItuG,QAASipK,GAAMA,EAAE0C,OAAOpB,EAAYoB,SAE9D,CACF,CAACj4K,SAAAjB,KAAA,mBAAAkB,iBA1QU+mL,GAAsBhpL,MAAAkC,GAAAlC,MAAA6S,KAAA7S,aAAA,EAAAgC,SAAAjB,KAAA,UAAAulB,EAAAlkB,IAAA,MAAtB4mL,EAAsB3mL,UAAA,wBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,8WAdtB,CACT0lL,EACA,CACE33J,QAASqyI,KACT1H,eAAamY,OAAW,IAAMyV,GAC9Bp4J,OAAO,GAET,CACEH,QAAS2xJ,KACThnB,eAAamY,OAAW,IAAMyV,GAC9Bp4J,OAAO,KAEV5wB,OAAAsC,MAAA,EAAAC,KAAA,EAAAC,OAAA,wiBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDpDH1C,MAAA,UAAAA,CAAyC,uBAEnCA,MAAA,kCAAiB2C,EAAA0gL,aAAa,EAA9BrjL,CAA+B,iCACf2C,EAAA6+K,oBAAoB,EADpCxhL,CAA+B,8BAElB2C,EAAA86K,gBAAgB,EAF7Bz9K,CAA+B,uCAGT2C,EAAA2mL,yBAAyB,EAH/CtpL,CAA+B,+BAIjB2C,EAAA+6K,iBAAiB,EAJ/B19K,CAA+B,wCAKR2C,EAAA6mL,0BAA0B,GASrDxpL,QAEAA,MAAA,WACEA,MAAA,EAAA0pL,EAAA,aAWF1pL,iBAtBIA,cAAA,mBAAA2C,EAAAy8K,gBAAAqI,wBAAAznL,CAA4D,QAAA2C,EAAA8gL,SAA5DzjL,CAA4D,kBAAA2C,EAAA01K,oBAA5Dr4K,CAA4D,cAAA2C,EAAAoxK,YAA5D/zK,CAA4D,uBAAA2C,EAAAymL,qBAA5DppL,CAA4D,eAAA2C,EAAAsxK,aAA5Dj0K,CAA4D,wBAAA2C,EAAA0mL,sBAA5DrpL,CAA4D,QAAA2C,EAAA61G,OAWpCx4G,MAAA,GAAAA,MAAA,UAAA2C,EAAAwmL,yjCCmCjBH,CAAsB,4KCLjChpL,MAAA,GACEA,MAAA,UAGAA,MAAA,UAAAA,CAAkE,cACxDA,MAAA,mBAAAA,MAAAoiJ,GAAA,MAAA/8I,EAAArF,QAAA,OAASA,MAAAqF,EAAAskL,SAAS,UAAS,GAGb3pL,QACtBA,MAAA,aAGAA,MAAA,cAAQA,MAAA,mBAAAA,MAAAoiJ,GAAA,MAAAn7I,EAAAjH,QAAA,OAASA,MAAAiH,EAAA2iL,SAAS,UAAS,GAInC5pL,UAEJA,gCAjBMA,cAAA,YAAAK,EAAA++K,gBAAAyK,eAKM7pL,MAAA,GAAAA,MAAA,YAAAK,EAAAypL,eAGF9pL,cAAA,YAAAK,EAAA0pL,SAIE/pL,cAAA,YAAAK,EAAA2pL,wDAMZhqL,MAAA,UAAAA,CAAgH,cACtGA,MAAA,mBAAAA,MAAAqJ,GAAA,MAAAtB,EAAA/H,QAAA,OAASA,MAAA+H,EAAAkiL,iBAAgB,GAIjCjqL,QACAA,MAAA,aAGAA,MAAA,cAAQA,MAAA,mBAAAA,MAAAqJ,GAAA,MAAAf,EAAAtI,QAAA,OAASA,MAAAsI,EAAA2hL,iBAAgB,GAIjCjqL,kCAXQA,cAAA,YAAAE,EAAAgqL,oBAIFlqL,cAAA,YAAAE,EAAAiqL,UAIEnqL,cAAA,YAAAE,EAAAgqL,qBCtBL,IAAME,EAAmB,MAA1B,MAAOA,EA8BXvpL,YAAmBy4K,EACAD,EACAkF,GAFAx9K,KAAAu4K,oBACAv4K,KAAAs4K,eACAt4K,KAAAw9K,KAvBTx9K,KAAAwxK,SAAgC,IAAIzuD,MAC9C/iH,KAAAwjL,UAAoB,EAgBpBxjL,KAAA+9K,IAAM,CACJyC,cAAexgL,KAAK8mL,WAAW7I,KAAKj+K,MAMtC,CAIA,YAAI67G,GACF,OAAO77G,KAAKg9K,SACd,CAEA,YAAInhE,CAASA,GACX77G,KAAKg9K,UAAYnhE,EACjB77G,KAAKspL,mBAAmBtpL,KAAK67G,UAE7B77G,KAAKupL,YAAcvpL,KAAKu4K,kBAAkBiR,mBAAmBxpL,KAAKq+K,gBAAiBr+K,KAAKg9K,UAAW,QACnGh9K,KAAKypL,cAAgBzpL,KAAKu4K,kBAAkBiR,mBAAmBxpL,KAAKq+K,gBAAiBr+K,KAAKg9K,UAAW,UACrGh9K,KAAKipL,cAAgBjpL,KAAKu4K,kBAAkBiR,mBAAmBxpL,KAAKq+K,gBAAiBr+K,KAAKg9K,UAAW,UAErGh9K,KAAK0pL,YAAc1pL,KAAKu4K,kBAAkBoR,mBAAmB3pL,KAAKq+K,gBAAiBr+K,KAAKg9K,UAAW,QACnGh9K,KAAK4pL,cAAgB5pL,KAAKu4K,kBAAkBoR,mBAAmB3pL,KAAKq+K,gBAAiBr+K,KAAKg9K,UAAW,UACrGh9K,KAAK+oL,cAAgB/oL,KAAKu4K,kBAAkBoR,mBAAmB3pL,KAAKq+K,gBAAiBr+K,KAAKg9K,UAAW,UAErGh9K,KAAKmpL,mBAAqBnpL,KAAKu4K,kBAAkBsR,yBAAyB7pL,KAAKq+K,gBAAiBr+K,KAAKg9K,WAErGh9K,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwBjjE,GACrD,CAEAz7G,WACEJ,KAAKwjL,UAAW,EAChBxjL,KAAKw/K,OACLx/K,KAAK6/K,gBACP,CAEAL,OACEx/K,KAAKq+K,gBAAkBr+K,KAAKu4K,kBAAkBa,UAAUp5K,KAAK6yC,QAC7D7yC,KAAK67G,SAAW77G,KAAK67G,UAAYxuF,MACjCrtB,KAAKgkL,eAAiBhkL,KAAKs4K,aAAarD,aAAaj1K,KAAKu/K,YAAY,EACxE,CAEA9wK,YAAYC,GACV,GAAI1O,KAAKwjL,SAAU,CACjB,MAAO5R,UAASC,UAASQ,UAASC,WAAW5jK,EAC7C1O,KAAKw/K,QAED5N,GAAWC,GAAWQ,GAAWC,IACnCtyK,KAAK6/K,iBAGP7/K,KAAKkkL,mBAAmBx1K,EAAQmkC,OAClC,CACF,CAEAinH,WAAWzoJ,GAGT,GAFArR,KAAKu/K,WAAaluK,EAEdA,EAAO,CACT,MAAMy4K,EAAc9pL,KAAKs4K,aACtB9C,qBAAqBnkK,EAAO,CAC3B0jK,kBAAkB,EAClB1tI,OAAQrnC,KAAKu4K,kBAAkBwR,cAAc/pL,KAAKq+K,mBACjD,GACDyL,EAAYjV,YACd70K,KAAK67G,SAAWiuE,EAChB9pL,KAAKgkL,eAAiBhkL,KAAKs4K,aACxBrD,aAAaj1K,KAAKu/K,YAAY,GAErC,CAEAv/K,KAAKw9K,GAAG1tK,cACV,CAEAiqJ,iBAAiBC,GACfh6J,KAAK++K,iBAAmB/kB,CAC1B,CAEA+kB,iBAAiB9zJ,GACjB,CAEAgvI,kBAAkBD,GAClB,CAEA2lB,SAAS3N,GACP,OAAIhyK,KAAK4xK,SAAW5xK,KAAK6xK,SAAW7xK,KAAKqyK,SAAWryK,KAAKsyK,QAChDtyK,KAAK4/K,WAAW5N,EAAY3gK,OAE5B,IAAM,IAEjB,CAEAytK,wBAAwBztK,GACtB,OAAOrR,KAAKs4K,aAAa3C,uBACvB31K,KAAKu4K,kBAAkBwR,cAAc/pL,KAAKq+K,iBAC1C,CAAChtK,GACDrR,KAAKq+K,gBAAgB3D,mBAAqB16K,KAAKgkL,eAEnD,CAEAnE,iBACE7/K,KAAK4/K,WAAa5/K,KAAKs4K,aAAa3B,gBAClC,CACE/E,QAAS5xK,KAAK4xK,QACdC,QAAS7xK,KAAK6xK,QACdQ,QAASryK,KAAKqyK,QACdC,QAAStyK,KAAKsyK,cACbvvI,EAAW,OAEhB/iC,KAAK++K,iBAAiB/+K,KAAK8+K,wBAAwB9+K,KAAK67G,UAC1D,CAEAgtE,SAASlgF,GACP3oG,KAAK67G,SAAW77G,KAAKu4K,kBAAkBsQ,SAAS7oL,KAAKq+K,gBAAiBr+K,KAAK67G,SAAUlT,GACrF3oG,KAAK8mL,YACP,CAEA8B,SAASjgF,GACP3oG,KAAK67G,SAAW77G,KAAKu4K,kBAAkBqQ,SAAS5oL,KAAKq+K,gBAAiBr+K,KAAK67G,SAAUlT,GACrF3oG,KAAK8mL,YACP,CAEAkD,cAAc/mJ,GAGZjjC,KAAK67G,SAAW77G,KAAKu4K,kBAAkB0R,QAF3BhnJ,EAAMhqB,OAAO5H,MAE6BrR,KAAK67G,SADtC,UAErB77G,KAAK8mL,YACP,CAEAoD,YAAYjnJ,GAGVjjC,KAAK67G,SAAW77G,KAAKu4K,kBAAkB0R,QAF3BhnJ,EAAMhqB,OAAO5H,MAE6BrR,KAAK67G,SADtC,QAErB77G,KAAK8mL,YACP,CAEAoC,iBACElpL,KAAK67G,SAAW77G,KAAKu4K,kBAAkB2Q,eAAelpL,KAAK67G,UAC3D77G,KAAK8mL,YACP,CAEAA,aACE9mL,KAAKwxK,SAASntD,KAAK,CAAC5pD,KAAMz6D,KAAK67G,SAAUA,UAAU,IACnD77G,KAAKw9K,GAAG1tK,cACV,CAEAw5K,mBAAmBt4H,GACjBhxD,KAAKmqL,MAAQnqL,KAAKu4K,kBAAkB9rF,SAASzsF,KAAKq+K,gBAAiBrtH,GACnEhxD,KAAKoqL,QAAUpqL,KAAKu4K,kBAAkB8R,WAAWrqL,KAAKq+K,gBAAiBrtH,GACvEhxD,KAAKgpL,QAAUhpL,KAAKu4K,kBAAkB+R,WAAWtqL,KAAKq+K,gBAAiBrtH,GACvEhxD,KAAKopL,SAAWppL,KAAKu4K,kBAAkBgS,YAAYvqL,KAAKq+K,gBAAiBrtH,EAE3E,CAGQkzH,mBAAmBrxI,GACzB,GAAIA,EAAQ,CACV,MAAMglI,EAAuC73K,KAAKu4K,kBAAkBa,UAAUvmI,EAAOgyI,eAC/E/M,EAA0C93K,KAAKu4K,kBAAkBa,UAAUvmI,EAAOy1E,cAEpFuvD,EAASqB,SAAWpB,EAAYoB,SAClCl5K,KAAK67G,SAAW77G,KAAK67G,SAAS/tF,QAAQorJ,OAAOpB,EAAYoB,QAE7D,CACF,CAACj4K,SAAAjB,KAAA,mBAAAkB,iBAhMUmoL,GAAmBpqL,MAAAkC,KAAAlC,MAAA6S,KAAA7S,aAAA,EAAAgC,SAAAjB,KAAA,UAAA2hC,EAAAtgC,IAAA,MAAnBgoL,EAAmB/nL,UAAA,qBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,0MAdnB,CACTy/K,IACA,CACE1xJ,QAASqyI,KACT1H,eAAamY,OAAW,IAAM6W,GAC9Bx5J,OAAO,GAET,CACEH,QAAS2xJ,KACThnB,eAAamY,OAAW,IAAM6W,GAC9Bx5J,OAAO,KAEV5wB,OAAAsC,MAAA,GAAAC,KAAA,EAAAC,OAAA,6qCAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDtDH1C,MAAA,SAAAA,CAAoC,SAApCA,CAAoC,cAExBA,MAAA,0BAAS2C,EAAAgnL,SAAS,OAAO,GAIjC3pL,QAIAA,MAAA,aAMIA,MAAA,oBAAAgU,GAAA,OAAYrR,EAAAsoL,YAAAj3K,EAAmB,GANnChU,QASAA,MAAA,cAAQA,MAAA,0BAAS2C,EAAAinL,SAAS,OAAO,GAIjC5pL,UAEFA,MAAA,UAGAA,MAAA,SAAAA,CAAkE,cACxDA,MAAA,0BAAS2C,EAAAgnL,SAAS,SAAS,GAGb3pL,QAItBA,MAAA,aAOIA,MAAA,oBAAAgU,GAAA,OAAYrR,EAAAooL,cAAA/2K,EAAqB,GAPrChU,QAQAA,MAAA,cAAQA,MAAA,0BAAS2C,EAAAinL,SAAS,SAAS,GAGnC5pL,UAEFA,MAAA,GAAAurL,EAAA,qBAAAvrL,CAkBe,GAAAwrL,EAAA,YAgBjBxrL,eAhFYA,MAAA,GAAAA,MAAA,YAAA2C,EAAA8nL,aAYJzqL,cAAA,UAAA2C,EAAAuoL,OAKIlrL,cAAA,YAAA2C,EAAA2nL,aAKNtqL,cAAA,YAAA2C,EAAAy8K,gBAAAyK,eAKM7pL,MAAA,GAAAA,MAAA,YAAA2C,EAAAgoL,eAWJ3qL,cAAA,UAAA2C,EAAAwoL,SAIInrL,cAAA,YAAA2C,EAAA6nL,eAIKxqL,cAAA,OAAA2C,EAAAy8K,gBAAAqM,aAmBVzrL,cAAA,QAAA2C,EAAAy8K,gBAAAsM,ykDCZMtB,CAAmB,mGC7CzB,IAAMjI,EAAiB,MAAxB,MAAOA,EAeXthL,YAA6Bw4K,GAAAt4K,KAAAs4K,eAdpBt4K,KAAAglL,eAA4C,CACnD4F,cAAe,KACfC,cAAe,KACfC,eAAgB,IAChBC,cAAe,KACfC,gBAAiB,EACjBC,cAAe,KACfC,gBAAiB,EACjBR,aAAa,EACbC,qBAAqB,EACrB7B,cAAe,IACf5P,OAAQ7rJ,aAIV,CAEA+rJ,UAAUvmI,GACR,MAAMs4I,EAAc,CAClB7Y,QAAStyK,KAAKs4K,aAAa/B,SAAS1jI,GAAUA,EAAOy/H,SACrDD,QAASryK,KAAKs4K,aAAa/B,SAAS1jI,GAAUA,EAAOw/H,UAGjDgH,EAAqC,IACtCr5K,KAAKglL,kBACLhlL,KAAKs4K,aAAavC,eAAeljI,MACjCs4I,GAGL99J,kBAAcgsJ,EAAQH,QAEfG,CACT,CAEA0Q,cAAcl3I,GACZ,OAAQA,EAAO83I,oBAAsB93I,EAAOg4I,cAAgBh4I,EAAO+3I,eAC/D/3I,EAAOi2I,cAAgBj2I,EAAOk4I,eAC7Bl4I,EAAO63I,YAAe73I,EAAOi2I,cAAgBj2I,EAAOo4I,cAAiB,KACrEp4I,EAAO83I,oBAAsB,GAAK,IAAM93I,EAAOi4I,eACtD,CAEAr+F,SAAS55C,EAAmC3xC,GAC1C,MAAM8vD,EAAO9vD,GAAKmsB,MAClB,OAAO2jC,GAAQA,EAAK3pB,OAAOwL,EAAO83I,oBAAsB93I,EAAOg4I,cAAgBh4I,EAAO+3I,cACxF,CAEAP,WAAWx3I,EAAmC3xC,GAC5C,MAAM8vD,EAAO9vD,GAAKmsB,MAClB,OAAO2jC,GAAQA,EAAK3pB,OAAOwL,EAAOk4I,cACpC,CAEAT,WAAWz3I,EAAmC3xC,GAC5C,MAAM8vD,EAAO9vD,GAAKmsB,MAClB,OAAO2jC,GAAQA,EAAK3pB,OAAOwL,EAAOo4I,cACpC,CAEAV,YAAY13I,EAAmCme,GAC7C,OAAOA,GAAQA,EAAK3pB,OAAOwL,EAAOi4I,eACpC,CAEAjC,SAASh2I,EAAmCme,EAAc23C,GACxD,IAAIi8E,EAAiB,EACrB,OAAQj8E,GACN,IAAK,SACHi8E,EAAS/xI,EAAOm4I,gBAChB,MACF,IAAK,SACHpG,EAAS/xI,EAAOq4I,gBAGpB,OAAOl6H,EAAKljC,QAAQuE,SAASuyJ,EAAQj8E,EACvC,CAEAigF,SAAS/1I,EAAmCme,EAAc23C,GACxD,IAAIi8E,EAAiB,EACrB,OAAQj8E,GACN,IAAK,SACHi8E,EAAS/xI,EAAOm4I,gBAChB,MACF,IAAK,SACHpG,EAAS/xI,EAAOq4I,gBAGpB,OAAOl6H,EAAKljC,QAAQwwI,IAAIsmB,EAAQj8E,EAClC,CAEAshF,QAAQ54K,EAAc2/C,EAAc23C,GAClC,OAAO33C,EAAKljC,QAAQU,IAAIm6E,EAAKt3F,EAC/B,CAEA63K,eAAel4H,GACb,OAAIA,EAAKm5H,QA/FgB,GAgGhBn5H,EAAKljC,QAAQwwI,IAAI,GAAI,QAErBttG,EAAKljC,QAAQuE,SAAS,GAAI,OAErC,CAEAm3J,mBAAmB32I,EAAmCme,EAAc23C,GAClE,IAAK91D,EAAOs2C,MAAQt2C,EAAOw/H,QACzB,OAAO,EAET,MAAM+Y,EAAUprL,KAAK6oL,SAASh2I,EAAQme,EAAM23C,GAE5C,QAAS91D,EAAOs2C,KAAOt2C,EAAOs2C,IAAI8tF,eAAemU,OAC1Cv4I,EAAOw/H,SAAWx/H,EAAOw/H,QAAQ4E,eAAej3K,KAAKs4K,aAAa/B,SAAS6U,IACpF,CAEAzB,mBAAmB92I,EAAmCme,EAAc23C,GAClE,IAAK91D,EAAOyvH,MAAQzvH,EAAOy/H,QACzB,OAAO,EAET,MAAM8Y,EAAUprL,KAAK4oL,SAAS/1I,EAAQme,EAAM23C,GAE5C,QAAS91D,EAAOyvH,KAAOzvH,EAAOyvH,IAAI0U,cAAcoU,OACzCv4I,EAAOy/H,SAAWz/H,EAAOy/H,QAAQ0E,cAAch3K,KAAKs4K,aAAa/B,SAAS6U,IACnF,CAEAvB,yBAAyBh3I,EAAmCme,GAC1D,KAAKne,EAAOs2C,KAAQt2C,EAAOyvH,KAAQzvH,EAAOw/H,SAAYx/H,EAAOy/H,SAC3D,OAAO,EAET,MAAM8Y,EAAUprL,KAAKkpL,eAAel4H,GACpC,QAASne,EAAOyvH,KAAOzvH,EAAOyvH,IAAI0U,cAAcoU,OACzCv4I,EAAOs2C,KAAOt2C,EAAOs2C,IAAI8tF,eAAemU,OACxCv4I,EAAOy/H,SAAWz/H,EAAOy/H,QAAQ0E,cAAch3K,KAAKs4K,aAAa/B,SAAS6U,QAC1Ev4I,EAAOw/H,SAAWx/H,EAAOw/H,QAAQ4E,eAAej3K,KAAKs4K,aAAa/B,SAAS6U,IACpF,CAACnqL,SAAAjB,KAAA,mBAAAkB,iBAhIUkgL,GAAiBniL,MAAAkC,KAAA,EAAAF,SAAAjB,KAAA,WAAAoB,EAAA0nB,IAAA,OAAjBs4J,EAAiBr4J,QAAjBq4J,EAAiBp4J,mBAAjBo4J,CAAiB,wNCS1BniL,MAAA,oBAIoBA,MAAA,mBAAAA,MAAAC,GAAA,MAAAC,EAAAF,QAAA,OAASA,MAAAE,EAAAksL,gBAAe,GAC5CpsL,gCAJIA,MAAA,gBAAAK,EAAAyG,SACA9G,MAAA,WAAAK,EAAAyG,UCPR,MAAMulL,EAAmBj+J,MAASw1B,QAAQ,OAAOxwB,SAAS,EAAG,SACvDk5J,EAAiBl+J,MAUhB,IAAMm+J,EAAyB,MAAhC,MAAOA,EAsBT,UAAW34I,GACP,MAAO,CACHxL,OAAQrnC,KAAKqnC,OAErB,CAEA,aACWlF,CAAU9wB,GACbA,IACAA,EAAQgc,aAAgBhc,GAASA,EAAQgc,IAAOhc,EAAOrR,KAAKqnC,QAC5DrnC,KAAKy9G,KAAK52F,IAAI,aAAau3F,WAAW/sG,EAAO,CAAEo6K,WAAW,IAElE,CAKA,gBACWC,CAAar6K,GACpBrR,KAAKy9G,KAAK52F,IAAI,gBAAgBu3F,WAAW/sG,EAAQgc,aAAgBhc,GAASA,EAAQgc,IAAOhc,EAAOrR,KAAKqnC,QAAU,KACnH,CAEA,gBACWskJ,CAAat6K,GACtBrR,KAAKy9G,KAAK52F,IAAI,gBAAgBu3F,WAAW/sG,EAAQgc,aAAgBhc,GAASA,EAAQgc,IAAOhc,EAAOrR,KAAKqnC,QAAU,KACjH,CAEA,WACWjF,CAAQ/wB,GACXA,IACAA,EAAQgc,aAAgBhc,GAASA,EAAQgc,IAAOhc,EAAOrR,KAAKqnC,QAC5DrnC,KAAKy9G,KAAK52F,IAAI,WAAWu3F,WAAW/sG,EAAO,CAAEo6K,WAAW,IAEhE,CAgBA3rL,YACYg+G,GAAA99G,KAAA89G,MAvEL99G,KAAAy9G,KAAOz9G,KAAK89G,IAAIzK,MAAM,CACzBlxE,UAAW,CAACmpJ,GACZlpJ,QAAS,CAACmpJ,GAEVG,aAAc,CAAC,MACfC,aAAc,CAACJ,GAEfK,WAAY,CAACN,KAGRtrL,KAAA42D,YAAa,EACb52D,KAAA+F,SAAU,EACV/F,KAAA6rL,UAAoB,EACpB7rL,KAAA0D,KAAe,gBAEf1D,KAAAqnC,OAAiB,aAEjBrnC,KAAAqxK,KAA6C,MAE7CrxK,KAAAw4J,MAAgB,IAiBlBx4J,KAAA8rL,gBAAkB,IAAI/oE,MAqBtB/iH,KAAA+rL,cAAgB,IAAIhpE,MAGpB/iH,KAAA4rL,WAAqB,KAGrB5rL,KAAAgsL,gBAAkB,IAAIjpE,MAGtB/iH,KAAAisL,cAAgB,IAAIlpE,MAEnB/iH,KAAAC,YAAc,IAAIC,IAMtBF,KAAKy9G,KAAK52F,IAAI,aAAau8F,aAAa5iH,QACpCC,KAAUT,KAAKC,cACjBS,UAAUyhC,IACRniC,KAAKksL,cAAc/pJ,GACnBniC,KAAK8rL,gBAAgBznE,KAAKliF,EAAUkF,OAAOrnC,KAAKqnC,SAChDrnC,KAAKgsL,gBAAgB3nE,KAAK,CACtBliF,YACAC,QAASpiC,KAAKy9G,KAAK52F,IAAI,WAAWxV,OACrC,GAGLrR,KAAKy9G,KAAK52F,IAAI,WAAWu8F,aAAa5iH,QAClCC,KAAUT,KAAKC,cACjBS,UAAU0hC,IACRpiC,KAAKmsL,gBAAgB/pJ,GACrBpiC,KAAK+rL,cAAc1nE,KAAKjiF,EAAQiF,OAAOrnC,KAAKqnC,SAC5CrnC,KAAKgsL,gBAAgB3nE,KAAK,CACtBliF,UAAWniC,KAAKy9G,KAAK52F,IAAI,aAAaxV,MACtC+wB,WACH,EAET,CAEOvhC,cACHb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACrB,CAEO0N,YAAYC,GACX,iBAAkBA,GAClB1O,KAAKmsL,gBAAgBnsL,KAAKy9G,KAAK52F,IAAI,WAAWxV,OAE9C,eAAgB3C,GAChB1O,KAAKksL,cAAclsL,KAAKy9G,KAAK52F,IAAI,aAAaxV,MACtD,CAEOg6K,iBACkB,IAAjBrrL,KAAK+F,SACL/F,KAAKisL,cAAc5nE,KAAK,CACpBliF,UAAWniC,KAAKy9G,KAAK52F,IAAI,aAAaxV,MACtC+wB,QAASpiC,KAAKy9G,KAAK52F,IAAI,WAAWxV,OAG9C,CAEQ86K,gBAAgB/pJ,GACpB,IAAIkgI,EAAMlgI,EAEV,GAAIpiC,KAAK2rL,aAAc,CACnB,IAAIA,EAAet+J,IAAOrtB,KAAK2rL,aAAc3rL,KAAKqnC,QAE9CjF,EAAUupJ,IACVrpB,EAAMqpB,EACd,CAEA3rL,KAAKy9G,KAAK52F,IAAI,gBAAgBu3F,WAAWkkD,EAC7C,CAEQ4pB,cAAc/pJ,GAClB,IAAIgnD,EAAMhnD,EAEV,GAAIniC,KAAK4rL,WAAY,CACjB,IAAIA,EAAav+J,IAAOrtB,KAAK4rL,WAAY5rL,KAAKqnC,QAE1ClF,EAAYypJ,IACZziG,EAAMyiG,EACd,CAEA5rL,KAAKy9G,KAAK52F,IAAI,cAAcu3F,WAAWj1B,EAC3C,CAACloF,SAAAjB,KAAA,mBAAAkB,iBAhJQsqL,GAAyBvsL,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,UAAAggH,EAAA3+G,IAAA,MAAzBmqL,EAAyBlqL,UAAA,yBAAA2Q,OAAA,CAAA2kD,WAAA,aAAA7wD,QAAA,UAAA8lL,SAAA,WAAAnoL,KAAA,OAAA2jC,OAAA,SAAAgqI,KAAA,OAAA7Y,MAAA,QAAAr2H,UAAA,YAAAupJ,aAAA,eAAAC,aAAA,eAAAvpJ,QAAA,UAAAwpJ,WAAA,cAAAnmE,QAAA,CAAAqmE,gBAAA,kBAAAC,cAAA,gBAAAC,gBAAA,kBAAAC,cAAA,iBAAA/5K,SAAA,CAAAjT,MALvB,CACP,CAAEywB,QAASgnI,KAAcC,SAAU,eACtC13J,OAAAsC,MAAA,EAAAC,KAAA,GAAAC,OAAA,ubAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDvBL1C,MAAA,WACIA,MAAA,0BAAAA,CAQsB,2BAWtBA,MAAA,EAAAmtL,EAAA,sBAMJntL,eA1BoBA,MAAA,YAAA2C,EAAA67G,MAGdx+G,cAAA,QAAA2C,EAAA42J,MAAA,MACAv5J,MAAA,OAAA2C,EAAAyvK,KAAApyK,CAAa,aAAA2C,EAAAixC,QASb5zC,cAAA,QAAA2C,EAAA42J,MAAA,MACAv5J,MAAA,OAAA2C,EAAAyvK,KAAApyK,CAAa,aAAA2C,EAAAixC,QAMA5zC,cAAA,OAAA2C,EAAAiqL,sQCMNL,CAAyB,oGCrB/B,MAAM90B,EAAe,IAAI21B,MAAuB,UAEjD,MAAgBC,GA4Cf,IAAMC,EAAiB,MAAxB,MAAOA,UAAyBD,EAClCrrL,SACejB,KAAAwsL,OAEX,GAwBJ,UAAWC,GAAW,OAAOzsL,KAAK0sL,OAAS,CAE3C,WAAW9mI,GACP,SAAK5lD,KAAKke,aAAa2gB,UAEb7+B,KAAK2sL,iBAEL3sL,KAAKN,OAASM,KAAK4sL,aAAU5sL,KAAKgR,GAIhD,CAEAlR,YACYoe,EAGA2uK,EAGAD,GAER9wJ,QARQ97B,KAAAke,eAGAle,KAAA6sL,UAGA7sL,KAAA4sL,QArCL5sL,KAAAgR,GAA6B,KAQ7BhR,KAAAN,KAAsB,KAMtBM,KAAA2sL,gBAA0B,EAEzB3sL,KAAA0sL,QAAyB,IAwBjC,CAEOtsL,WACHJ,KAAKm9J,YACT,CAEO1uJ,YAAYC,GACX,OAAQA,IAAYA,EAAQsC,GAAG4sJ,aAC/B59J,KAAKm9J,aACL,YAAazuJ,IAAYA,EAAQk3C,QAAQg4G,aACzC59J,KAAKm9J,YACb,CAEOt8J,cACCb,KAAK0sL,SAAWH,EAAiBC,OAAOxsL,KAAK0sL,WAAa1sL,aACnDusL,EAAiBC,OAAOxsL,KAAK0sL,QAC5C,CAEQvvB,aAKJ,IAAI3hI,EAHAx7B,KAAK0sL,SAAWH,EAAiBC,OAAOxsL,KAAK0sL,WAAa1sL,aACnDusL,EAAiBC,OAAOxsL,KAAK0sL,SAIpC1sL,KAAKN,KACL87B,EAAMx7B,KAAKN,KACNM,KAAK4sL,QACVpxJ,EAAMx7B,KAAK4sL,OAEX5sL,WAAKgR,KACLwqB,EAAMA,EAAMA,EAAM,IAAMvQ,YAAYjrB,KAAKgR,GAAGI,YAAc6Z,YAAYjrB,KAAKgR,GAAGI,aAElFpR,KAAK0sL,QAAU1sL,KAAK6sL,QAAU7sL,KAAK6sL,QAAQJ,OAAS,IAAMjxJ,EAAMA,EAE3Dx7B,KAAK4lD,UAGL2mI,EAAiBC,OAAOxsL,KAAK0sL,SAEvBH,EAAiBC,OAAOxsL,KAAK0sL,WAAa1sL,MACjD6gC,QAAQoxI,KAAK,+BAA+BjyK,KAAK0sL,WAFnDH,EAAiBC,OAAOxsL,KAAK0sL,SAAW1sL,KAI9C,CAACiB,SAAAjB,KAAA,mBAAAkB,iBA9FQqrL,GAAgBttL,MAAAkC,MAAAlC,MA4CbqtL,EAAoB,IAAArtL,MAGpBy3J,EAAY,MAAAz1J,SAAAjB,KAAA,UAAAoB,EAAAmzJ,IAAA,MA/Cfg4B,EAAgBjrL,UAAA,oBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,mMAFd,CAAE,CAAE+tB,QAAS48J,EAAsBjyB,eAAamY,OAAW,IAAM+Z,MAAqBttL,sBAExFstL,CAAiB,0FC/BvB,IAAMO,EAAsB,MAA7B,MAAOA,EAAsB7rL,SAAAjB,KAAA,mBAAAkB,iBAAtB4rL,EAAsB,EAAA7rL,SAAAjB,KAAA,UAAAwU,EAAAgR,IAAA,MAAtBsnK,IAAsB7rL,SAAAjB,KAAA,UAAAwU,EAAAiR,IAAA,UAZ/BwG,KACA8gK,cAWSD,CAAsB,mICnB/B7tL,MAAA,2BAEIA,MAAA,wBAAAA,MAAA,IAAAqF,EAAA0oL,SAAA,2BAKJ/tL,MAAA,iBCUG,IAAMguL,EAAwB,MAA/B,MAAOA,EACT,YAAID,GACA,OAAOhtL,KAAKqhC,QAAQy2H,cAAc2F,SACtC,CAEA,eAAIyvB,GACA,OAAOltL,KAAKqhC,QAAQy2H,aACxB,CAMAh4J,YACY2I,GAAAzI,KAAAyI,OALLzI,KAAAmtL,UAAoB,CAMvB,CAEG/sL,WACH,CAGGs4J,kBACH14J,KAAKotL,eACT,CAEOC,WACHrtL,KAAKotL,eACT,CAEQA,gBACJ,MAAMj1H,EAAOn4D,KAAKmtL,SAElBntL,KAAKmtL,SAAWntL,KAAKqhC,QAAQy2H,cAAcw1B,aAAettL,KAAKqhC,QAAQy2H,cAAc6jB,cAC9E37K,KAAKqhC,QAAQy2H,cAAcikB,YAAc/7K,KAAKqhC,QAAQy2H,cAAcy1B,YAEvEp1H,IAASn4D,KAAKmtL,UACdntL,KAAKyI,KAAKkF,eAClB,CAAC1M,SAAAjB,KAAA,mBAAAkB,iBArCQ+rL,GAAwBhuL,aAAA,EAAAgC,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAxB4rL,EAAwB3rL,UAAA,kDAAAyb,UAAA,SAAApb,EAAAC,MAAA,EAAAD,qTDlBrC1C,MAAA,aAAwEA,MAAA,2BAAiB2C,EAAAyrL,UAAU,KAAApuL,OAC/FA,MAAA,EAAAuuL,EAAA,qBAAAvuL,CAAyD,EAAAwuL,EAAA,qBAI7DxuL,QAEAA,MAAA,EAAAyuL,EAAA,yBAAAzuL,8BAP6BA,MAAA,0BAAA2C,EAAAurL,UAAwEluL,MAAA,0BAAA2C,EAAAurL,UAClFluL,MAAA,GAAAA,MAAA,mBAAAiU,+RCiBN+5K,CAAwB,qJCVrC,IAcaU,EAA8B,MAArC,MAAOA,EAOT,SACWt8K,GAAU,OAAOrR,KAAKo5J,MAAQ,CACzC,SAAW/nJ,CAAMA,GACRA,IACDrR,KAAKo5J,OAAS,MAEd/nJ,IAAUrR,KAAKo5J,SACfp5J,KAAKo5J,OAAS/nJ,EAEtB,CAQA,YACWgkJ,GAA+B,OAAOr1J,KAAKs4J,SAAW,CACjE,YAAWjD,CAAShkJ,GAA2BrR,KAAKs4J,aAAYC,MAAsBlnJ,EAAQ,CAG9F,YACW8xG,GAA+B,OAAOnjH,KAAKy5J,SAAW,CACjE,YAAWt2C,CAAS9xG,GAA2BrR,KAAKy5J,aAAYlB,MAAsBlnJ,EAAQ,CAkB9F,YAAWu8K,GACP,OAAO5tL,KAAK2/D,YAAc3/D,KAAKkqC,QAAQA,QAAQw0G,MACnD,CAEA5+I,YAEWoqC,GAAAlqC,KAAAkqC,UApDJlqC,KAAAgR,GAAa,4BAEVhR,KAAAo5J,OAAiB,KAcpBp5J,KAAAsxK,YAAc,IAAIvuD,MAGlB/iH,KAAAiS,OAAsD,GAKnDjS,KAAAs4J,WAAY,EAKZt4J,KAAAy5J,WAAY,EAGdz5J,KAAA6tL,cAAgB,IAAI9qE,MAUpB/iH,KAAAC,YAAc,IAAIC,IAEnBF,KAAA2/D,YAAa,EA6Cb3/D,KAAA8tL,YAAe7qJ,IAElBjjC,KAAKqR,MAAQrR,KAAK+tL,QAAQj2B,cAAc2F,UACxCz9J,KAAKwxK,SAASxxK,KAAKqR,OAGnBrR,KAAKkC,WAAS,EA+EXlC,KAAAwxK,SAAqB,OAKrBxxK,KAAAguL,QAAoB,OA7HnBhuL,KAAKkqC,UACLlqC,KAAKkqC,QAAQyvH,cAAgB35J,KACrC,CAGOI,WACP,CAEOs4J,kBACH14J,KAAK+tL,QAAQj2B,cAAc2F,UAAYz9J,KAAKo5J,OAE5Cp5J,KAAK+tL,QAAQj2B,cAAcr2H,iBAAiB,SAAU,IAAMzhC,KAAKiuL,gBACjEjuL,KAAK+tL,QAAQj2B,cAAcr2H,iBAAiB,QAAS,IAAMzhC,KAAKiuL,gBAChEjuL,KAAK+tL,QAAQj2B,cAAcr2H,iBAAiB,QAAUxuB,GAAWjT,KAAK8tL,YAAY76K,IAClFjT,KAAK+tL,QAAQj2B,cAAcr2H,iBAAiB,QAASwB,IACjDA,EAAMirJ,iBACN70I,SAASy2H,YAAY,cAAc,EAAO7sI,EAAMkrJ,cAAc3uI,QAAQ,cAAa,GAGvFx/C,KAAKiuL,cACT,CAEOx/K,YAAYC,GACXA,EAAQuD,QACRjS,KAAKkC,WAEb,CAEOrB,cACHb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACrB,CAEOm5J,iBAAiBj3H,GAA2B,CAc3C/gC,YAEJ,MAAMksL,EAAO/0I,SAAS7Z,cAAc,QACpC4uJ,EAAK3wB,UAAYz9J,KAAKqR,MACtB,MAAMg9K,EAAOD,EAAK7sJ,UAElBvhC,KAAKsuL,SAASx2B,cAAcv2H,UAAYvhC,KAAK+e,MAAMsvK,GAAM,GACzDruL,KAAK6tL,cAAcxpE,KAAKrkH,KAAK+e,MAAMsvK,GACvC,CAKQJ,eACJjuL,KAAKsuL,SAASx2B,cAAcy2B,SAASvuL,KAAK+tL,QAAQj2B,cAAc02B,WAAYxuL,KAAK+tL,QAAQj2B,cAAc22B,UAC3G,CAQQ1vK,MAAM2vK,EAAuBC,GAAwB,GACzD,IAAKD,EACD,MAAO,GAEX,MAAME,EAAuBF,EAAc3qB,MAAM,cACjD,IAAK6qB,GAAsBtrL,OACvB,OAAOorL,EAEX,IAAIG,EAAcH,EAEdI,GAAW,EAEfF,SAAqBrhL,QAAQwhL,IACzB,MAAMC,EAAQhvL,KAAKiS,QAAQnB,KAAKk+K,GAASD,EAAc3+K,SAAS,IAAK4+K,EAAMlnI,WAC3EinI,EAAgBA,EAAc5qL,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAE5D,MAAM8qL,EAAS,IAAIC,OAAO,MAAOH,OAAqB,KAChDI,EAAQR,EAAe,IAAM,GACnC,GAAKK,EAGE,CACH,MAAMI,EAAgBJ,EAAM7sL,MAAQwsL,EAAeK,EAAM7sL,KAAO6sL,EAAMlnI,MACjEknI,EAAM7sL,KAIP0sL,EAAcA,EAAY1qL,QAAQ8qL,EAAQ,GAAGE,6BAAkCC,YAAuBD,MAHtGL,GAAW,EACXD,EAAcA,EAAY1qL,QAAQ8qL,EAAQ,GAAGE,uBAA4BC,YAAuBD,KAIxG,MAVIL,GAAW,EACXD,EAAcA,EAAY1qL,QAAQ8qL,EAAQ,GAAGE,uBAA4BJ,YAAyBI,IAStG,GAGJnvL,KAAK2/D,WAAamvH,EAEXD,CACX,CAMO/0B,WAAWz2C,GACTA,IACDA,EAAM,IAEVrjH,KAAKqR,MAAQgyG,EACbrjH,KAAK+tL,QAAQj2B,cAAc2F,UAAYz9J,KAAKqR,MAC5CrR,KAAKkC,WACT,CAGO63J,iBAAiBC,GACpBh6J,KAAKwxK,SAAWxX,CACpB,CAGOC,kBAAkBD,GACrBh6J,KAAKguL,QAAUh0B,CACnB,CAEOG,iBAAiBvjG,GACpB52D,KAAKs4J,UAAY1hG,CACrB,CAAC31D,SAAAjB,KAAA,mBAAAkB,iBA7LQysL,GAA8B1uL,MAAAkC,KAAA,KAAAF,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAA9BssL,EAA8BrsL,UAAA,8BAAAyb,UAAA,SAAApb,EAAAC,MAAA,EAAAD,4RAJ5B,CACP,CAAE+tB,QAAS0qI,IAAyBC,YAAaszB,KACpD1uL,OAAAsC,MAAA,EAAAC,KAAA,EAAAC,OAAA,4IAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IAPG1C,MAAA,WACIA,MAAA,YAAAA,CAAoC,aAExCA,cAHqCA,MAAA,eAAA2C,EAAAgsL,SAAA3uL,CAA+B,gBAAA2C,EAAAgsL,WAAA,MAAAhsL,EAAAsoC,QAAA,KAAAtoC,EAAAsoC,gBAAA0pH,s0BAS/D+5B,CAA8B,qGCApC,IAAM0B,EAA2B,MAAlC,MAAOA,EAA2BpuL,SAAAjB,KAAA,mBAAAkB,iBAA3BmuL,EAA2B,EAAApuL,SAAAjB,KAAA,UAAAklC,EAAA1f,IAAA,MAA3B6pK,IAA2BpuL,SAAAjB,KAAA,UAAAklC,EAAAzf,IAAA,UAZhCwG,KACAE,KACAC,KACAkjK,cASKD,CAA2B,iIChBpCpwL,MAAA,2CACAA,MAAA,GACIA,MAAA,cAAyFA,MAAA,mBAAAA,MAAAqJ,GAAA,MAAAtB,EAAA/H,MAAA,UAASA,MAAA+H,EAAAuoL,WAAU,GACxGtwL,MAAA,oBAAsEA,MAAA,iBAC1EA,QACJA,iCAH6CA,cAAA,mBAAA6F,EAAAiiB,MAAAjiB,EAAAiiB,KAAAzjB,QAAArE,CAA0B,6DAS/DA,MAAA,4BAAoDA,MAAA,yBAAAuwL,EAAAvwL,MAAA8e,GAAAzb,UAAAyF,EAAA9I,MAAA,UAASA,MAAA8I,EAAAwnL,SAAAC,GAAgB,GACzEvwL,MAAA,GACJA,oCAF+EA,MAAA,UAAAuwL,GAC3EvwL,cAAA,IAAAuwL,EAAAC,cAAA,+BANZxwL,MAAA,GACIA,MAAA,iBAAAA,CAAc,cAENA,MAAA,oBAAsEA,MAAA,iBAC1EA,QACAA,MAAA,EAAAywL,EAAA,6BAGJzwL,QACJA,+BAPiDA,MAAA,GAAAA,MAAA,mBAAAA,CAAoB,mBAAAiH,EAAA6gB,MAAA7gB,EAAA6gB,KAAAzjB,SAGrBrE,MAAA,GAAAA,MAAA,UAAAiH,EAAAypL,mCAbpD1wL,MAAA,KACIA,MAAA,mBACAA,MAAA,EAAA2wL,EAAA,qBAAA3wL,CAA+C,EAAA4wL,EAAA,qBAA/C5wL,CAA+C,EAAA6wL,EAAA,sBAgBnD7wL,8BAlBcA,MAAA,WAAAE,EAAAwwL,QAAAlb,MACVx1K,cAAA,IAAAA,MAAA,IAAAE,EAAAwwL,QAAAI,SAAA,KACe9wL,MAAA,GAAAA,MAAA,kBACAA,cAAA,iCC2BZ,IAAM+wL,EAAsB,MAA7B,MAAOA,EAJblwL,cAaoBE,KAAA2vL,QAA+B,IAAI/mE,IAAI,CAAC,MAAO,SAYxD5oH,KAAAiwL,SAAmB,sBAGnBjwL,KAAAkwL,mBAAoB,EAvB3B,OACWC,GAAQ,OAAOnwL,KAAK2vL,QAAQpuI,IAAI,MAAQ,CACnD,OAAW4uI,CAAI9+K,GAAkBA,EAAQrR,KAAK2vL,QAAQrxB,IAAI,OAASt+J,KAAK2vL,QAAQznK,OAAO,MAAQ,CAE/F,QACWkoK,GAAS,OAAOpwL,KAAK2vL,QAAQpuI,IAAI,OAAS,CACrD,QAAW6uI,CAAK/+K,GAAkBA,EAAQrR,KAAK2vL,QAAQrxB,IAAI,QAAUt+J,KAAK2vL,QAAQznK,OAAO,OAAS,CAmB3FqnK,SAASloJ,IACPA,GAAUrnC,KAAK2vL,QAAQlb,QACvBptI,GAAUrnC,KAAK2vL,SAEftoJ,IAGLrnC,KAAKuP,SACCvP,KAAKuP,WAAW7O,UAAUqmB,GAAQ/mB,KAAKqwL,QAAQhpJ,EAAQtgB,IACvD/mB,KAAKqwL,QAAQhpJ,EAAQrnC,KAAK+mB,MACpC,CAEQspK,QAAQhpJ,EAAwBtgB,GACpC,IAAKA,GAAMzjB,OACP,OAEJ,MAAM4+G,EAAUliH,KAAKkiH,SAAW5vF,OAAOC,KAAKxL,EAAK,IAAIrW,IAAIywC,KAAU5xB,OAAQ4xB,EAAKA,IAAKA,KAErF,OAAQ9Z,GACJ,IAAK,MAAOrnC,KAAKswL,UAAUpuE,EAASn7F,GAAO,MAC3C,IAAK,OAAQ/mB,KAAKuwL,WAAWruE,EAASn7F,GAE9C,CAEQupK,UAAUpuE,EAAmCn7F,GACjD,MAAM8jF,EAAax5F,IACf,GAAqC,MAAVA,EACvB,MAAO,GAEX,GAAIA,aAAiBmc,MAA0B,iBAAVnc,GAAsBgc,IAAOhc,EAAOgc,cAAiBwnJ,UACtF,OAAOxnJ,IAAOhc,GAAOg2B,OAAO,yBAEhC,cAAeh2B,GACX,IAAK,SACL,IAAK,SAAU,OAAOA,EACtB,IAAK,SAAU,MAAO,IAAIA,EAAMlN,QAAQ,KAAM,SAC9C,IAAK,SAAU,MAAO,IAAI2a,KAAK+pB,UAAUx3B,GAAOlN,QAAQ,KAAM,SAC9D,IAAK,UAAW,OAAOkN,EAAQ,OAAS,QACxC,QAAS,MAAO,GACpB,EASE8+K,EAAM,IALZjuE,EAAUA,EAAQ5xG,OAAO+1C,IAAWA,EAAO67D,UAEpBxxG,IAAI21C,GAAUwkD,EAAUxkD,EAAO92B,SAAS/kB,KAAK,WACvDuc,EAAKrW,IAAIwqD,GAAOgnD,EAAQxxG,IAAI21C,GAAUwkD,EAAU7qG,KAAKwwL,SAASt1H,EAAK7U,KAAU77C,KAAK,MAE9DA,KAAK,UAChCimL,EAAO,IAAIC,KAAK,CAACP,GAAM,CAAEzwL,KAAM,cAErC8mE,YAAOiqH,EAAM,GAAGzwL,KAAKiwL,eACzB,CAEQM,WAAWruE,EAAmCn7F,GAClD,MAAM4pK,EAAWP,KAAWQ,WAEtBC,EAAa7wL,KAAK8wL,iBAAiB5uE,EAASn7F,EAAM/mB,KAAKiwL,UAEzDjwL,KAAKkwL,mBACLW,EAAWE,QAGf,QAASC,KAAMH,EAAW,CAExB,IAAI1uL,EAAO6uL,EAAG7uL,KAAKqO,MAAM,EAAG,IAE5B,MAAMygL,EAAQJ,EAAWvgL,OAAO4gL,GAASA,EAAM/uL,OAAS6uL,EAAG7uL,MAClC,IAAtB8uL,EAAM7hL,QAAQ4hL,KACf7uL,EAAOA,EAAO,IAAM8uL,EAAM7hL,QAAQ4hL,GAAM,KAE1CZ,KAAWe,kBAAkBR,EAAUK,EAAGI,UAAWjvL,EACvD,CAEAiuL,KAAeO,EAAU,GAAG3wL,KAAKiwL,gBACrC,CAEQa,iBAAiB5uE,EAAmCn7F,EAAW5kB,EAAcy8G,GACjF,IAAIiyE,EAGE,GAEN,MAAMhsC,EAAO99H,EAAKrW,IAAIwqD,GAAOgnD,EAAQ7yF,OAAO,CAACC,EAAK+2B,KAC9C,IAAIh1C,EAAarR,KAAKwwL,SAASt1H,EAAK7U,EAAQu4D,GAE5C,GAAIv4D,EAAO67D,QACP,GAAIwyD,MAAMQ,QAAQ7jK,GAAQ,CACtB,IAAIlP,EACAkvL,EAAYn2H,EAAI7U,EAAO92B,QACfptB,EAAZkvL,EAAmBA,EAAUjgL,WAAoBi1C,EAAO92B,OAAOne,WAC/Dy/K,EAAaA,EAAW18H,OAAOn0D,KAAK8wL,iBAAiBzqI,EAAO67D,QAAS7wG,EAAOlP,EAAM+4D,GACtF,MACIr6B,QAAQoxI,KAAK,6DAEd,CAEH,GAAqC,MAAV5gK,EACvBA,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAG,SAAE,GAChBmE,aAAiBmc,MAA0B,iBAAVnc,GAAsBgc,IAAOhc,EAAOgc,cAAiBwnJ,UAC7FxjK,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAGmgB,IAAOhc,EAAOgc,cAAiBkvC,SAASnmD,iBAAkBk7K,EAAG,kCAElF,cAAejgL,GACX,IAAK,SACL,IAAK,SAAUA,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAGmE,GAAS,MAC7C,IAAK,SACDA,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAGmE,GAEjBA,EAAMnE,EAAE5J,OAAS,QACjB+N,EAAMnE,EAAImE,EAAMnE,EAAEsD,MAAM,EAAG,OAAc,mBAE7C,MAEJ,IAAK,SACDa,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAG4R,KAAK+pB,UAAUx3B,IAEhCA,EAAMnE,EAAE5J,OAAS,QACjB+N,EAAMnE,EAAImE,EAAMnE,EAAEsD,MAAM,EAAG,OAAc,mBAE7C,MAEJ,IAAK,UAAWa,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAGmE,EAAQ,OAAS,SAAW,MACjE,QAASA,EAAQ,CAAEnQ,EAAG,IAAKgM,EAAG,IAItCoiB,EAAI+2B,EAAO92B,QAAUle,CACzB,CAEA,OAAOie,GACR,KAEG8hK,EAAYhB,KAAWmB,cAAc1sC,GAC3CgsC,SAAW5wF,QAAQ,CAAE99F,OAAMivL,cAEpBP,CACX,CAEQL,SAASt1H,EAAQ7U,EAAgCu4D,GACrD,OAAOv4D,EAAOmrI,SACRnrI,EAAOmrI,SAASt2H,EAAK0jD,GACrB1jD,EAAI7U,EAAOlF,IACrB,CAAClgD,SAAAjB,KAAA,mBAAAkB,iBAxKQ8uL,EAAsB,EAAA/uL,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAAtB2uL,EAAsB1uL,UAAA,qBAAA2Q,OAAA,CAAAk+K,IAAA,MAAAC,KAAA,OAAAluE,QAAA,UAAAn7F,KAAA,OAAAxX,SAAA,WAAA0gL,SAAA,WAAAC,kBAAA,qBAAAj7B,mBAAA51J,EAAAkC,MAAA,EAAAC,KAAA,EAAAC,OAAA,8UAAAC,SAAA,SAAAC,EAAAC,MAAA,EAAAD,YDlCnC1C,MAAA,aAAcA,MAAA,0BAAS2C,EAAA2tL,SAAS,OAAO,GACnCtwL,MAAA,GACJA,QAEAA,MAAA,EAAAwyL,EAAA,6CAAyCxyL,MAAA,GAAAA,MAAA,QAAAisH,EAAArM,SAAAv7G,mCC8B5B0sL,CAAsB,2OCrBX/wL,MAAA,qDAAqCA,MAAA,OAAAyyL,EAAAhuL,+CADzCzE,MAAA,WAAIA,MAAA,mBAAAA,MAAAghJ,GAAA,MAAAyxC,EAAAzyL,MAAA,GAAAqD,UAAAyF,EAAA9I,MAAA,UAASA,MAAA8I,EAAA4pL,GAAAD,EAAA1gL,IAAgB,GACzB/R,MAAA,EAAA2yL,EAAA,uBAEA3yL,MAAA,aACIA,MAAA,GACJA,6CAJeA,cAAA,OAAAyyL,EAAAhuL,MAGXzE,MAAA,GAAAA,MAAA,IAAAyyL,EAAAvvL,KAAA,8CAUJlD,MAAA,WACAA,MAAA,yBAAA4yL,EAAA5yL,MAAAoD,GAAAC,UAAAovL,EAAAzyL,MAAA,GAAAqD,UAAAyS,EAAA9V,MAAA,UAASA,MAAA8V,EAAA+8K,WAAAJ,EAAA1gL,GAAyB+D,EAAAg9K,QAAAF,EAAAG,mBAAkC,GAEhE/yL,MAAA,qBACAA,MAAA,aACIA,MAAA,oBAEAA,uDAJUA,cAAA,OAAA4yL,EAAAI,aAEVhzL,MAAA,GAAAA,MAAA,YAAAU,EAAAV,MAAA,IAAAmD,EAAA8vL,eAAAL,EAAAM,aAAA,KAAAxyL,EAAAyyL,cAAAhwL,EAAA2vL,QAAAF,EAAAG,kBAAA7vL,KAAA,8CAZZlD,MAAA,GACIA,MAAA,WAAsCA,MAAA,yBAAAozL,EAAApzL,MAAAy5G,GAAAp2G,UAAAovL,EAAAzyL,MAAA,GAAAqD,UAAA88I,EAAAngJ,MAAA,UAASA,MAAAmgJ,EAAA0yC,WAAAJ,EAAA1gL,GAAAqhL,GAA8B,GACzEpzL,MAAA,qBACAA,MAAA,aACIA,MAAA,GACJA,UAEJA,MAAA,EAAAqzL,EAAA,aASJrzL,oEAdsBA,MAAA,GAAAA,MAAA,OAAAozL,EAAA3uL,MAEVzE,MAAA,GAAAA,MAAA,IAAAozL,EAAAlwL,KAAA,KAGgBlD,cAAA,UAAAggJ,EAAAszC,qBAAAF,EAAAttC,uBAAA2sC,EAAAvxK,iDAhBpClhB,MAAA,WAAmBA,MAAA,wBAAAA,MAAAuzL,GAAA,MAAAtV,EAAAj+K,MAAA,UAAcA,MAAAi+K,EAAAuV,eAAc,EAA5BxzL,CAA6B,wBAAAA,MAAAuzL,GAAA,MAAAd,EAAAzyL,QAAAqD,UAAA82G,EAAAn6G,MAAA,UAAeA,MAAAm6G,EAAAs5E,aAAAhB,EAAA1gL,IAA0B,GACrF/R,MAAA,UACIA,MAAA,EAAA0zL,EAAA,WAAA1zL,CAMK,EAAA2zL,EAAA,sBAkBT3zL,4CAxBoCA,MAAA,GAAAA,MAAA,OAAAyyL,EAAAvxK,MAAA7c,OAAA,GAODrE,cAAA,UAAAyyL,EAAAvxK,gDAlB/ClhB,MAAA,QAAAA,CAAmD,aAC1CA,MAAA,yBAAAyyL,EAAAzyL,MAAA8hH,GAAAz+G,UAAA2T,EAAAhX,MAAA,UAASA,MAAAgX,EAAA07K,GAAAD,EAAA1gL,IAAgB,EAAzB/R,CAA0B,wBAAAA,MAAA8hH,GAAA,MAAA/pG,EAAA/X,MAAA,UAAgBA,MAAA+X,EAAAy7K,eAAc,EAAxDxzL,CAA0B,8BAAAyyL,EAAAzyL,MAAA8hH,GAAAz+G,UAAAyT,EAAA9W,MAAA,UAA8CA,MAAA8W,EAAA28K,aAAAhB,EAAA1gL,IAA0B,GAEnG/R,MAAA,oBAEJA,QACAA,MAAA,EAAA4zL,EAAA,qBAgCJ5zL,0DAnCsCA,MAAA,GAAAA,MAAA,OAAAyyL,EAAAhuL,MAGDzE,cAAA,4BAAAoiJ,EAAApiJ,CAAoC,0BAAAE,EAAA2zL,WAAA3zL,EAAA6R,IAAA7R,EAAA4zL,UAAArB,EAAA1gL,GAApC/R,CAAoC,+BAAAE,EAAA6zL,4CAP7E/zL,MAAA,WACIA,MAAA,EAAAg0L,EAAA,8BADJh0L,8BAC+BA,cAAA,UAAAA,MAAA,IAAAK,EAAA4zL,eCkBxB,IAAMC,EAA0B,MAAjC,MAAOA,EAA0BlyL,SACrBjB,KAAA8yL,SAAmB,KAEjC,eACWjiL,GAAgB,OAAO7Q,KAAKozL,cAAc/hL,KAAO,CAC5D,eAAWR,CAAYQ,GAAiBrR,KAAKozL,cAActyL,KAAKuQ,EAAQ,CAaxE,YAAWyhL,GAAa,OAAOK,EAA2BL,QAAU,CAqBpEhzL,YACYC,GAAAC,KAAAD,UAjCJC,KAAAozL,cAAgB,IAAI3mK,IAAwB,MAC5CzsB,KAAAC,YAAc,IAAIC,IAYnBF,KAAA+yL,QAAkB,KAElB/yL,KAAAqzL,UAAW,EACXrzL,KAAA4gC,QAA0B,KAE1B5gC,KAAAgzL,iBAAmB,CACtB,IAAIM,KAAuB,CAAEC,QAAS,QAASC,QAAS,UAAY,CAAEC,SAAU,QAASC,SAAU,QACnG,IAAIJ,KAAuB,CAAEC,QAAS,QAASC,QAAS,OAAS,CAAEC,SAAU,QAASC,SAAU,WAChG,IAAIJ,KAAuB,CAAEC,QAAS,MAAOC,QAAS,OAAS,CAAEC,SAAU,MAAOC,SAAU,WAC5F,IAAIJ,KAAuB,CAAEC,QAAS,MAAOC,QAAS,UAAY,CAAEC,SAAU,MAAOC,SAAU,SAG5F1zL,KAAAkzL,eAActoL,KAAc,CAC/B5K,KAAKD,QAAQO,OAAOmK,SACpBzK,KAAKozL,gBACN5yL,QACCkQ,KAAI,EAAErF,EAAewF,KAAiBxF,EAAcwF,IAKpD,CAEG8gL,GAAGvjL,GACNpO,KAAKD,QAAQS,QACTF,MAAOmK,UAA+B,EACtC6T,KAAK,IAAC,EACN5N,KAAIyhD,GAAc5xD,QAAmB,CACjC,YACA6N,EACA+jD,EAAWnyD,KAAKozL,cAAc/hL,OAAOkhD,mBAAqB,eAAiB,QAC3EvyD,KAAKgR,IACN,CAAE1B,YAAatP,KAAKsP,gBACzB5O,UAAUV,KAAKD,QACrB,CAEA+xL,WAAW1jL,EAAqB2R,GAC5B,GAAIA,GAAsB,mBAAdA,EAAK5d,MACI,mBAAd4d,EAAK5d,MACS,sBAAd4d,EAAK5d,KACR,OAAOnC,KAAK2xL,GAAGvjL,GAGnBpO,KAAKD,QAAQS,QACTF,MAAOmK,UAA+B,EACtC6T,KAAK,IAAC,EACN5N,KAAIyhD,IACA,GAAIpyC,GAAQA,EAAKizC,YAEb,IACS,IADDjzC,EAAKtG,QAEL,OAAOlZ,QACH,CAAC,YAAa6N,EAAa+jD,EAAWnyD,KAAKozL,cAAc/hL,OAAOkhD,mBAAqB,eAAiB,QAASvyD,KAAKgR,IAAK,CAAE1B,YAAa,CAAEjB,OAAQ0R,EAAK/O,MAG/J,CAEI,IAAI3C,EAKJ,OAH6BA,EADrB0R,EAAK/O,KACJkL,KAAMkc,aAAuBlc,KAAMC,SACtB4D,EAAK/O,GAEpBzQ,QACH,CAAC,YAAa6N,EAAa+jD,EAAWnyD,KAAKozL,cAAc/hL,OAAOkhD,mBAAqB,eAAiB,QAASvyD,KAAKgR,GAAI,aAAc3C,GAR9I,CAUJ,KAIV3N,UAAUV,KAAKD,QACrB,CAEAwyL,qBAAqBxtC,EAAiD5kI,GAClE,OAAK4kI,EAAuBzhJ,QAAU6c,EAAM7c,OACjC,GAEJyhJ,EAAuBz0I,OAAOqjL,IACjCxzK,EAAMrP,KAAKiP,GAAQA,EAAKs1F,YAAYvkG,KAAKioC,GAAcA,EAAW9kC,KAAO0/K,EAAQ3B,kBAAiB,EAE1G,CAEAE,eAAenlF,GACX,OAAO/sG,KAAKD,QAAQO,OAAOmK,oBAAiCsiG,GAChE,CAEAglF,QAAQ6B,GACJ,OAAO5zL,KAAKmgB,MAAMrP,KAAKiP,GAAQA,EAAKs1F,YAAYxlD,KAAKgkI,GAAQA,EAAK5/K,KAAO2/K,GAC7E,CAEA/yL,cACIb,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACrB,CAEA2xL,aAAatkL,GACT+kL,EAA2BL,SAAW9yL,KAAKgR,GAE3ChR,KAAKqzL,UAAW,EAEZrzL,KAAK+yL,QACL/yL,KAAK+yL,QAAU3kL,EAEfxN,WAAW,KACPZ,KAAK+yL,QAAU3kL,GAChB,IAEX,CAGAqkL,eACIzyL,KAAKqzL,UAAW,EAEZrzL,KAAK4gC,SACLtvB,aAAatR,KAAK4gC,SAGtB5gC,KAAK4gC,QAAUhgC,WAAW,KACjBZ,KAAKqzL,WACNrzL,KAAK+yL,QAAU,OACpB,IACP,CAAC9xL,SAAAjB,KAAA,mBAAAkB,iBA5IQiyL,GAA0Bl0L,MAAAkC,MAAA,EAAAF,SAAAjB,KAAA,UAAAggH,EAAA3+G,IAAA,MAA1B8xL,EAA0B7xL,UAAA,0BAAA2Q,OAAA,CAAApB,YAAA,cAAAG,GAAA,KAAA1B,YAAA,eAAA/N,MAAA,EAAAC,KAAA,EAAAC,OAAA,4qBAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GDnBvC1C,MAAA,EAAA60L,EAAA,kBAAqB70L,MAAA,OAAA2C,EAAAoP,43BCmBRmiL,CAA0B,wIClBvCl0L,MAAA,yCAA8EA,MAAA,OAAAK,EAAAy0L,SAAA90L,CAAiB,yBCGlF+0L,EAAgB,IAAI3H,MAAsC,gBAEvE,IAAI3wJ,EAAO,EAcEu4J,EAAqB,MAA5B,MAAOA,EAUTn0L,YAA+Bo0L,GAAAl0L,KAAAk0L,YARxBl0L,KAAAgR,GAAa,iBAAiB0qB,IAG9B17B,KAAA6rL,UAAoB,EAGpB7rL,KAAA+zL,SAAmB,cAE4C,CAAC9yL,SAAAjB,KAAA,mBAAAkB,iBAV9D+yL,GAAqBh1L,MAAAkC,IAAA,KAAAF,SAAAjB,KAAA,UAAA2hC,EAAAtgC,IAAA,MAArB4yL,EAAqB3yL,UAAA,oBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,8FALnB,CACP,CAAE+tB,QAASskK,EAAe35B,YAAa45B,GACvC,CAAEvkK,QAASgnI,KAAcC,SAAU,YACtC1B,mBAAA51J,EAAAkC,MAAA,EAAAC,KAAA,EAAAC,OAAA,qFAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YDjBL1C,MAAA,EAAAk1L,EAAA,sBACAl1L,MAAA,UACIA,MAAA,GACJA,eAHeA,MAAA,QAAA2C,EAAAsyL,aAAAtyL,EAAAsyL,UAAAE,WACTn1L,cAAA,OAAA2C,EAAAsyL,aAAAtyL,EAAAsyL,UAAAE,8ICkBOH,CAAqB,qDCjB5B,MAAgB75B,+LCDdn7J,MAAA,cACIA,MAAA,KACJA,8BAF0BA,MAAA,iBAAAK,EAAA4qC,QAAA,KAAA5qC,EAAA4qC,QAAAi5E,UAAqClkH,MAAA,KAAAK,EAAA+0L,SAAep1L,MAAA,YAAAK,EAAA4qC,QAAA,KAAA5qC,EAAA4qC,QAAAl5B,2BAK1E/R,MAAA,YACIA,MAAA,KACJA,8BASoBA,MAAA,2BAAAA,MAAA,EAAAq1L,EAAA,uDAAer1L,MAAA,mBAAAusH,0BAH3BvsH,MAAA,GACIA,MAAA,qBACIA,MAAA,EAAAs1L,EAAA,sBAGJt1L,QACJA,8BAIYA,MAAA,wBACAA,MAAA,2BADAA,MAAA,EAAAu1L,EAAA,sBAAAv1L,CAA2D,EAAAw1L,EAAA,mEAA5Cx1L,MAAA,mBAAA2e,GACA3e,cAAA,mBAAAy1L,0BAJ3Bz1L,MAAA,GACIA,MAAA,qBACIA,MAAA,EAAA01L,EAAA,sBAIJ11L,QACJA,8BACAA,MAAA,sDAjBRA,MAAA,WAAAA,CAAiF,qBAEzEA,MAAA,EAAA21L,EAAA,sBAAA31L,CAMe,EAAA41L,EAAA,sBANf51L,CAMe,EAAA61L,EAAA,qBAUnB71L,gCAjBcA,cAAA,WAAAqF,EAAAywL,sBAAA,IACK91L,cAAA,wBAOAA,cAAA,6CAgBvBA,MAAA,4BADJA,MAAA,SACIA,MAAA,EAAA+1L,EAAA,uBACJ/1L,yCADmBA,cAAA,mBAAAusH,yBAGfvsH,MAAA,wBAEAA,MAAA,4BAHJA,MAAA,YACIA,MAAA,EAAAg2L,EAAA,uBACAh2L,MAAA,YACAA,MAAA,EAAAi2L,EAAA,uBACJj2L,qDAHmBA,cAAA,mBAAA2e,GAEA3e,MAAA,GAAAA,MAAA,mBAAAy1L,6BAPvBz1L,MAAA,YACIA,MAAA,EAAAk2L,EAAA,aAAAl2L,CAEM,EAAAm2L,EAAA,cAMVn2L,8BAToEA,MAAA,WAAA6F,EAAAiwL,sBAAA,IAC1D91L,cAAA,wBAGAA,cAAA,6CASVA,MAAA,0BAIAA,MAAA,0BAIAA,MAAA,gUC5CJ,IAAIy8B,EAAO,EAoBJ,MAAM25J,EAAqB,IAAIhJ,MAA0C,oBAYzE,IAAMiJ,EAAyB,MAAhC,MAAOA,EA2BT,WAAWprJ,GACP,OAAOlqC,KAAKu1L,mBAAqBv1L,KAAKw1L,cAC1C,CAEA11L,YACY2I,GAAAzI,KAAAyI,OA/BIzI,KAAAq0L,QAAU,4BAA4B34J,IAG/C17B,KAAAo0L,WAAY,EAGZp0L,KAAAy1L,WAAY,CA0Bf,CAEGC,oBACH,OAAO11L,KAAK21L,iBAAmB31L,KAAK21L,gBAAgBryL,OAAS,CACjE,CAEOsyL,oBACH,OAAO51L,KAAK61L,iBAAmB71L,KAAK61L,gBAAgBvyL,OAAS,CACjE,CAEOyxL,qBAAqBX,GACxB,OAAIA,IAAcp0L,KAAKo0L,UACZ,KAEJp0L,KAAK81L,gBAAgBxyL,OAAS,EAAI,QAAUtD,KAAK+1L,eAAezyL,OAAS,EAAI,OAAS,IACjG,CAEO2yJ,qBACHj2J,KAAKkqC,SAAS8rJ,cAAcx1L,QACxB41J,KAAU,OACZ11J,UAAU,KACRV,KAAKyI,KAAKqH,cAAY,EAE9B,CAAC7O,SAAAjB,KAAA,mBAAAkB,iBAxDQo0L,GAAyBr2L,aAAA,EAAAgC,SAAAjB,KAAA,UAAAogB,EAAA/e,IAAA,MAAzBi0L,EAAyBh0L,UAAA,yBAAAuzJ,eAAA,SAAAlzJ,EAAAC,EAAAkzJ,OAAA,EAAAnzJ,aASpBy4J,IAAuB,YAGvBA,IAAuB,YAGpB65B,IAAqB,YAGrBgC,IAAoB,YAGpBC,IAAsB,YAGtBA,IAAsB,2XA7B5B,CACP,CAAExmK,QAAS2lK,EAAoBh7B,YAAai7B,GAC5C,CAAE5lK,QAASgnI,KAAcC,SAAU,YACtC1B,mBAAAxhJ,GAAAlS,MAAA,GAAAC,KAAA,EAAAC,OAAA,u4BAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,aD3CL1C,MAAA,UAAAA,CAAwC,WACCA,MAAA,iBAAAgU,IAAA,aAAArR,EAAAsoC,QAAA,KAAAtoC,EAAAsoC,QAAAgwH,oBAAA,MAAAt4J,EAAAsoC,QAAA,KAAsCtoC,EAAAsoC,QAAAgwH,iBAAAjnJ,IAAiC,GACxGhU,MAAA,EAAAk3L,EAAA,eAIAl3L,MAAA,WACIA,MAAA,EAAAm3L,EAAA,aAGAn3L,MAAA,WACIA,MAAA,GACJA,QACAA,MAAA,EAAAo3L,EAAA,aAoBJp3L,UAGJA,MAAA,EAAAq3L,EAAA,aAUJr3L,QAEAA,MAAA,EAAAs3L,EAAA,yBAAAt3L,OAEc,GAAAu3L,EAAA,yBAAAv3L,MAFdA,CAEc,GAAAw3L,EAAA,0BAAAx3L,cAhDEA,MAAA,GAAAA,MAAA,QAAA2C,EAAA6zL,WAKoCx2L,MAAA,GAAAA,MAAA,OAAA2C,EAAA8zL,qBAMAz2L,MAAA,GAAAA,MAAA,OAAA2C,EAAAg0L,sBAAAh0L,EAAAwyL,WAuBGn1L,cAAA,OAAA2C,EAAAwyL,6pBCS1CkB,CAAyB,+EC3CtC,IAAI55J,EAAO,EAgBEu6J,EAAoB,MAA3B,MAAOA,EAdbn2L,cAgBWE,KAAAoqG,MAAyB,QAGzBpqG,KAAAgR,GAAa,gBAAgB0qB,IACvCz6B,SAAAjB,KAAA,mBAAAkB,iBANY+0L,EAAoB,EAAAh1L,SAAAjB,KAAA,UAAAwU,EAAA+/I,IAAA,MAApB0hC,EAAoB30L,UAAA,mBAAAo1L,UAAA,WAAA79B,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,qHAJlB,CACP,CAAE+tB,QAASgnI,KAAcC,SAAU,oBAG9Bs/B,CAAoB,+ECT1B,IAAMU,EAAqB,MAA5B,MAAOA,EAAqB11L,SAAAjB,KAAA,mBAAAkB,iBAArBy1L,EAAqB,EAAA11L,SAAAjB,KAAA,UAAAwU,EAAA+/I,IAAA,MAArBoiC,EAAqBr1L,UAAA,oBAAA4Q,SAAA,CAAAjT,MAJnB,CACP,CAAEywB,QAASgnI,KAAcC,SAAU,qBAG9BggC,CAAqB,+ECA3B,IAAMT,EAAsB,MAA7B,MAAOA,EAAsBj1L,SAAAjB,KAAA,mBAAAkB,iBAAtBg1L,EAAsB,EAAAj1L,SAAAjB,KAAA,UAAAwU,EAAA+/I,IAAA,MAAtB2hC,EAAsB50L,UAAA,0BAAA4Q,SAAA,CAAAjT,MAJpB,CACP,CAAEywB,QAASgnI,KAAcC,SAAU,sBAG9Bu/B,CAAsB,+ECA5B,IAAMU,EAAsB,MAA7B,MAAOA,EAAsB31L,SAAAjB,KAAA,mBAAAkB,iBAAtB01L,EAAsB,EAAA31L,SAAAjB,KAAA,UAAAwU,EAAA+/I,IAAA,MAAtBqiC,EAAsBt1L,UAAA,0BAAA4Q,SAAA,CAAAjT,MAJpB,CACP,CAAEywB,QAASgnI,KAAcC,SAAU,sBAG9BigC,CAAsB,8JCTnC33L,MAAA,2DACIA,MAAA,aAAAK,EAAAu3L,WAAA53L,CAAyB,UAAA63L,EAAzB73L,CAAyB,mBAAAK,EAAAy3L,eAAzB93L,CAAyB,uBAAzBA,CAAyB,gBCWtB,IAAM+3L,EAAyB,MAAhC,MAAOA,EA6BT,YAAcC,GACV,MAAO,EACX,CAOA,SAAWxxI,GAAU,OAAOzlD,KAAKk3L,MAAQ,CASzCp3L,YACcq3L,GAAAn3L,KAAAm3L,UA/CEn3L,KAAA62L,WAAgCA,EAEzC72L,KAAAo3L,UAAoB,EAGpBp3L,KAAA0vC,KAAO,IAAIqzE,MAGD/iH,KAAAq3L,aAAmC,CAChD5xI,MAAO,CACHC,gBAAiB,cACjBI,MAAO,CACLslD,WAAY,UAEdmnB,QAAQ,GAEZ+kE,cAAe,CACX1xI,SAAS,GAEbC,UAAW,CACPD,SAAS,GAEbD,QAAS,CACLC,SAAS,IAgBA5lD,KAAAu3L,UAAY,IAAI9qK,IAAoC,MACrDzsB,KAAAP,SAAWO,KAAKu3L,UAAUC,eAAeh3L,QACrD8P,KAAOxF,KAAWA,EAAQ45C,QAAS55C,EAAQ45C,OAAOphD,OAAS,IAGvDtD,KAAAC,YAAc,IAAIC,IAqBVF,KAAA+2L,gBAAmBtxI,IAC/BzlD,KAAKm3L,QAAQM,IAAI,KACbz3L,KAAKk3L,OAASzxI,EACdzlD,KAAK0vC,KAAK20E,MAAI,EAEtB,GAAG45D,KAAKj+K,KAtBJ,CAEGyO,YAAYC,GACf1O,KAAKu3L,UAAUz2L,KAAKd,KAAK03L,UAAU,GAAI13L,KAAKq3L,aAAcr3L,KAAKi3L,SAAUj3L,KAAK8K,SAClF,CAEO4tJ,kBACH14J,KAAKo3L,UAAW,CACpB,CAEOv2L,cACHb,KAAKu3L,UAAUx2L,WAEff,KAAKC,YAAYa,OACjBd,KAAKC,YAAYc,UACrB,CAUQ22L,UAAUz+K,KAA+B0+K,GAC7C,IAAKA,EAAQr0L,OACT,OAAO2V,EAEX,MAAM2+K,EAASD,EAAQ5G,QAEvB,GAAI/wL,KAAK63L,SAAS5+K,IAAWjZ,KAAK63L,SAASD,GACvC,UAAWz2I,KAAOy2I,EACV53L,KAAK63L,SAASD,EAAOz2I,KAASy2I,EAAOz2I,KAASnhD,MACzCiZ,EAAOkoC,IACR7uB,OAAOsd,OAAO32B,EAAQ,CAAE0rC,CAACxD,GAAO,KAEpCnhD,KAAK03L,UAAUz+K,EAAOkoC,GAAMy2I,EAAOz2I,KAEnC7uB,OAAOsd,OAAO32B,EAAQ,CAAE0rC,CAACxD,GAAMy2I,EAAOz2I,KAKlD,OAAOnhD,KAAK03L,UAAUz+K,KAAW0+K,EACrC,CAEQE,SAASxmL,GACb,OAAOA,GAA0B,iBAAVA,IAAuBqjK,MAAMQ,QAAQ7jK,EAChE,CAACpQ,SAAAjB,KAAA,mBAAAkB,iBAlGQ81L,GAAyB/3L,aAAA,EAAAgC,SAAAjB,KAAA,UAAAwU,EAAAnT,IAAA,MAAzB21L,EAAyB11L,UAAA,wBAAA2Q,OAAA,CAAAnH,QAAA,WAAA26G,QAAA,CAAA/1E,KAAA,QAAAx9B,SAAA,CAAAjT,OAAAsC,MAAA,EAAAC,KAAA,EAAAC,OAAA,iNAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDZtC1C,MAAA,EAAA64L,EAAA,iDAAmB74L,MAAA,OAAAA,MAAA,IAAA2C,EAAAw1L,UAAAx1L,EAAAnC,0JCYNu3L,CAAyB,uMCZtC/3L,cAAA,WACIA,MAAA,SACJA,4CAFKA,MAAA,UAAAA,MAAA,EAAAI,EAAAC,EAAAy4L,YAAAz4L,EAAAulD,MAAAvlD,EAAA04L,UAAA/4L,CAA4C,UAAAA,MAAA,EAAAwU,EAAAnU,EAAAyxF,YACxC9xF,cAAA,OAAAg5L,EAAA,6BCgBF,IAAMC,EAAoB,MAA3B,MAAOA,EAUT,SACWrzI,CAAOxzC,GACdrR,KAAKs7J,OAASjqJ,CAClB,CACA,SAAWwzC,GACP,OAAO7kD,KAAKq1J,SAAW,YAAcr1J,KAAKs7J,MAC9C,CAWA,QACWmZ,GAAiB,OAAOz0K,KAAKm4L,KAAO,CAC/C,QAAW1jB,CAAKpjK,GAEZrR,KAAKm4L,MAAQ9mL,EAAQ,EAAI,EAAIA,EAAQ,GAAK,GAAKA,EAAQ,GAAM,GAAMA,EAAQ63E,KAAKkvG,MAAM/mL,EAC1F,CAEAvR,YACYszF,GAAApzF,KAAAozF,eAjCLpzF,KAAAmC,KAAe,KAGfnC,KAAA2oC,KAAe,KAGf3oC,KAAA+wF,UAAoB,KAUnB/wF,KAAAs7J,OAAS,mBAIVt7J,KAAAg4L,SAAmB,GAgBhBh4L,KAAAm4L,MAAgB,GAFvB,CAIH,eAAWJ,GACP,MAAO,KAAK/3L,KAAKy0K,UAAUz0K,KAAKy0K,MACpC,CAEA,aAAW4jB,GACP,OAAOr4L,KAAKozF,aAAaklG,SAAS93L,QAC9B8P,KAAOioL,KAAaA,IAAO,EAC3Bj5K,KAAetf,KAAKozF,aAAaolG,cAAcx4L,KAAK2oC,QAAK,EACzDj4B,KAAI,EAAE6nL,EAAS70L,KAAUA,EAAO,GAAG60L,KAAW70L,EAAK+0L,WAAa,GAAGF,KAAWv4L,KAAKmC,QAE3F,CAAClB,SAAAjB,KAAA,mBAAAkB,iBAlDQg3L,GAAoBj5L,MAAAkC,KAAA,EAAAF,SAAAjB,KAAA,UAAAoB,EAAAC,IAAA,MAApB62L,EAAoB52L,UAAA,mBAAAu3J,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,gNAFlB,CAAE,CAAE+tB,QAASgnI,KAAcC,SAAU,WAAU1B,mBAAAn9I,EAAAvW,MAAA,EAAAC,KAAA,EAAAC,OAAA,2DAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,YDf9D1C,MAAA,EAAAy5L,EAAA,8BAIAz5L,MAAA,SAJiFA,MAAA,OAAAA,MAAA,IAAA2C,EAAAy2L,yECiBpEH,CAAoB,+ECD1B,IAAMS,EAAiB,MAAxB,MAAOA,EAAiB13L,SAAAjB,KAAA,mBAAAkB,iBAAjBy3L,EAAiB,EAAA13L,SAAAjB,KAAA,UAAAklC,EAAA1f,IAAA,MAAjBmzK,IAAiB13L,SAAAjB,KAAA,UAAAklC,EAAAzf,IAAA,UANtBwG,eAMK0sK,CAAiB,gJCP9B,IAAIC,OAAUprK,MAAO+O,UAUR+R,EAAW,MAAlB,MAAOA,EAKTxuC,YACY6mB,EACAje,GADA1I,KAAA2mB,QACA3mB,KAAA0I,SANI1I,KAAAs4L,SAAW,IAAI7rK,IAAwB,MAQnDzsB,KAAK2mB,MAAME,IAAI,+BAA+B+xK,IAAO,CAAEl1J,aAAc,SAAUhjC,UAAU+vL,IAEjFzjK,IAAY6rK,gBACZpI,EAAKv3K,OAAO2jB,KAAKi8J,IACb,MAAM9nL,EAAK,oBAIX,IAAI+nL,EACJ,IAHA/4L,KAAKg5L,SAAW,GAGTD,EAAU/nL,EAAGgzJ,KAAK80B,IACrB94L,KAAKg5L,SAASvoL,KAAKsoL,EAAQ,GAAE,GAKzC/4L,KAAKs4L,SAASx3L,KAAKunG,IAAI4wF,gBAAgBxI,GAAK,EAEpD,CAEO+H,cAAc7vJ,GACjB,OAAO3oC,KAAK0I,OAAOlI,QACfF,MAAOmK,QAA0B,CAAEk+B,UAAM,EACzCrpB,KAAetf,KAAK0I,OAAOpI,OAAOmK,0BAAuC,EACzEiG,KAAI,EAAEhN,EAAMu7B,KAAav7B,EAAQ,IAC1BA,EACH+0L,SAAU/0L,EAAK+0L,SAASt0L,QAAQ,aAEnB,IADD86B,EAEO,OAGA,UAGlB,MAEb,CAACh+B,SAAAjB,KAAA,mBAAAkB,iBA7CQotC,GAAWrvC,MAAAkC,MAAAlC,MAAA6S,MAAA,EAAA7Q,SAAAjB,KAAA,WAAAogB,EAAA0I,IAAA,OAAXwlB,EAAWvlB,QAAXulB,EAAWtlB,UAAAC,WAFR,gBAEHqlB,CAAW,0FCjBjB,MAAM4qJ,EAA+B,IAAI7M,MAA+B,0DCM/E,IAAI3wJ,EAAO,EAmBEy9J,EAAqB,MAA5B,MAAOA,EAKT,MACWnoL,GAAO,OAAOhR,KAAKm5J,GAAK,CACnC,MAAWnoJ,CAAGK,GAAiBrR,KAAKm5J,IAAM9nJ,GAASrR,KAAKo5L,IAAM,CAG9D,SACW/nL,GAAU,OAAOrR,KAAKq5L,oBAAoBhoL,KAAO,CAC5D,SAAWA,CAAMA,GACTA,IAAUrR,KAAKqR,QACfrR,KAAKq5L,oBAAoBhoL,MAAQA,EAEzC,CAEA,YACWgkJ,GACP,OAAIr1J,KAAKkqC,SAAqC,OAA1BlqC,KAAKkqC,QAAQmrH,SACtBr1J,KAAKkqC,QAAQmrH,SAEjBr1J,KAAKs4J,SAChB,CACA,YAAWjD,CAAShkJ,GAChBrR,KAAKs4J,YAAcjnJ,CACvB,CAGA,YACW8xG,GAA+B,OAAOnjH,KAAKy5J,SAAW,CACjE,YAAWt2C,CAAS9xG,GAA2BrR,KAAKy5J,aAAYlB,MAAsBlnJ,EAAQ,CAG9FvR,YACcw5L,EAGHpvJ,EAGPqvJ,GANUv5L,KAAAs5L,cAGHt5L,KAAAkqC,UAtCHlqC,KAAAo5L,KAAO,iBAAiB19J,IA2BtB17B,KAAAs4J,WAAY,EAKZt4J,KAAAy5J,WAAY,EAWlBz5J,KAAKq5L,oBAAsBE,GAAsBv5L,KAAKs5L,YAAYxhC,cAGlE93J,KAAKgR,GAAKhR,KAAKgR,EACnB,CAAC/P,SAAAjB,KAAA,mBAAAkB,iBAhDQi4L,GAAqBl6L,mBAAAkC,KAAA,IAAAlC,MAyCEi6L,EAA4B,MAAAj4L,SAAAjB,KAAA,UAAAulB,EAAAgvI,IAAA,MAzCnD4kC,EAAqB73L,UAAA,6DAAAo1L,UAAA,YAAA79B,SAAA,EAAAC,aAAA,SAAAn3J,EAAAC,GAAA,EAAAD,4LALnB,CACP,CAAE+tB,QAAS0qI,IAAyBC,YAAa8+B,GACjD,CAAEzpK,QAASgnI,KAAcC,SAAU,qBAG9BwiC,CAAqB,oECf3B,IAAM7J,EAAkB,MAAzB,MAAOA,EAAkBruL,SAAAjB,KAAA,mBAAAkB,iBAAlBouL,EAAkB,EAAAruL,SAAAjB,KAAA,UAAAklC,EAAA1f,IAAA,MAAlB8pK,IAAkBruL,SAAAjB,KAAA,UAAAklC,EAAAzf,IAAA,WAAlB6pK,CAAkB,w2BCkBSrwL,MAAA,qBACIA,MAAA,+BACJA,eAFwEA,MAAA,gDAQxEA,MAAA,qBACIA,MAAA,0BACJA,eAF8EA,MAAA,iDAO9EA,MAAA,qBACIA,MAAA,2BACJA,eAFqEA,MAAA,+CAGrEA,MAAA,qBACIA,MAAA,2BACJA,eAFiEA,MAAA,2CAGjEA,MAAA,qBACIA,MAAA,2BACJA,eAFiEA,MAAA,8DAkCrEA,MAAA,8BAAqFA,MAAA,uBAAAgU,IAAAhU,MAAAgE,IAAA,MAAAu2G,GAAAv6G,MAAA,UAAAA,MAAAu6G,GAAAggF,gBAAAvmL,GAAA,GACjFhU,MAAA,8BAAuDA,MAAA,UAAIA,QAC3DA,MAAA,8BAA+DA,MAAA,cAAQA,qCAFnCA,MAAA,uBAAAA,CAAwB,QAAAwgJ,GAAA+5C,iBACxBv6L,cAAA,kBACIA,MAAA,GAAAA,MAAA,oDAOpCA,MAAA,uBAAyFA,MAAA,GAAiBA,qCAA3DA,MAAA,QAAAw6L,GAAAzoL,GAAA/R,CAAmB,UAAAw6L,GAAAzoL,IAAuB/R,cAAAw6L,GAAAt3L,gCAE7FlD,MAAA,qBACIA,MAAA,+BACJA,eAFkEA,MAAA,kDAQ9DA,MAAA,uBAAiKA,MAAA,GAAiBA,qCAAjEA,MAAA,QAAAy6L,GAAAroL,MAAApS,CAAsB,UAAAy6L,GAAAroL,OAA0BpS,cAAAy6L,GAAAv3L,iCAErKlD,MAAA,qBACIA,MAAA,+BACJA,eAFkEA,MAAA,gDA+BlEA,MAAA,qBACIA,MAAA,0BACJA,eAFyEA,MAAA,8CAUzEA,MAAA,qBACIA,MAAA,iEACJA,eAF8DA,MAAA,mEAoB9DA,MAAA,qBAA+FA,MAAA,mBAAAA,MAAA06L,IAAA,MAAA5jL,GAAA9W,MAAA,UAASA,MAAA8W,GAAA0nG,KAAA52F,IAAS,gBAAeu3F,WAAY,MAAK,GAAgCn/G,cAA7IA,MAAA,6CAUpCA,MAAA,mBACIA,MAAA,+BACJA,mCAEIA,MAAA,GACIA,MAAA,+BACJA,sCACAA,MAAA,GACIA,MAAA,uBAAgBA,MAAA,UAAOA,MAAA,GAAgCA,QAC3DA,iCAD2BA,MAAA,GAAAA,MAAA,UAAA46G,GAAA4D,KAAAihC,OAAA,KAAA7kC,GAAA4D,KAAAihC,OAAAk7C,eAAA,mCAL/B36L,MAAA,mBACIA,MAAA,EAAA46L,GAAA,sBAAA56L,CAEe,EAAA66L,GAAA,uBAInB76L,iCANmBA,cAAA,OAAAm6G,GAAAqE,KAAAihC,OAAAv7B,UAGAlkH,cAAA,aAAAm6G,GAAAqE,KAAAihC,OAAA,KAAAtlC,GAAAqE,KAAAihC,OAAAk7C,2CAMvB36L,MAAA,eAAkDA,MAAA,cAAQA,4EA7K9EA,MAAA,MACIA,MAAA,WAAAA,CAA0C,WAA1CA,CAA0C,WAA1CA,CAA0C,QAG1BA,MAAA,YAAMA,QACVA,MAAA,WAAAA,CAAiC,0BAAjCA,CAAiC,qBAEAA,MAAA,iBAAWA,QACpCA,MAAA,eACJA,QACAA,MAAA,2BAAAA,CAAoF,sBACvDA,MAAA,qBAAcA,QACvCA,MAAA,eACAA,MAAA,GAAA86L,GAAA,wBAGJ96L,QACAA,MAAA,2BAAAA,CAAqF,sBACxDA,MAAA,iBAAUA,QACnCA,MAAA,kBACAA,MAAA,sBAA0BA,MAAA,IAA6BA,QACvDA,MAAA,GAAA+6L,GAAA,wBAGJ/6L,QACAA,MAAA,2BAAAA,CAAkF,sBACrDA,MAAA,wBAAuBA,QAChDA,MAAA,eACAA,MAAA,GAAAg7L,GAAA,uBAAAh7L,CAEgB,GAAAi7L,GAAA,uBAFhBj7L,CAEgB,GAAAk7L,GAAA,wBAOpBl7L,QACAA,MAAA,2BAAAA,CAAoF,sBACvDA,MAAA,qBAAcA,QACvCA,MAAA,eACJA,UAGJA,MAAA,aAEAA,MAAA,SAAIA,MAAA,iBAAUA,QACdA,MAAA,YAAAA,CAA6D,0BACiEA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAA9rG,GAAArX,QAAA,OAAiBA,MAAAqX,GAAA8jL,iBAAAnnL,IAAwB,GAA0BhU,MAAA,iBAAUA,QACvMA,MAAA,0BAA+DA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAi4E,GAAAp7L,QAAA,OAAAA,MAAAo7L,GAAAC,WAAwB,GAACrnL,GAAA,GAAqBhU,MAAA,UAAGA,QAChHA,MAAA,0BAA+DA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAv+G,GAAA5E,QAAA,OAAAA,MAAA4E,GAAAy2L,WAAwB,GAACrnL,GAAA,GAAqBhU,MAAA,UAAGA,QAChHA,MAAA,0BAA+DA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAm4E,GAAAt7L,QAAA,OAAAA,MAAAs7L,GAAAD,WAAwB,GAACrnL,GAAA,GAAuBhU,MAAA,YAAKA,UAExHA,MAAA,YAAAA,CAAiC,0BAC4FA,MAAA,eAAQA,QACjIA,MAAA,0BAA+DA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAo4E,GAAAv7L,QAAA,OAAAA,MAAAu7L,GAAAC,iBAAAxnL,GAAA,GAAwEhU,MAAA,IAAqCA,UAGhLA,MAAA,aAEAA,MAAA,SAAIA,MAAA,aAAMA,QACVA,MAAA,YAAAA,CAAiC,0BACoFA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAA3rG,GAAAxX,QAAA,OAAiBA,MAAAwX,GAAAikL,iBAAAznL,IAAwB,GAAEhU,MAAA,gBAASA,QACrKA,MAAA,0BAA8FA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAA19G,GAAAzF,QAAA,OAAAA,MAAAyF,GAAAi2L,aAAA1nL,GAAA,GAA2BhU,MAAA,kBAAWA,QACpIA,MAAA,0BAA6FA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAA/H,GAAAp7G,QAAA,OAAAA,MAAAo7G,GAAAugF,UAAA3nL,GAAA,GAAwBhU,MAAA,iBAAUA,UAEnIA,MAAA,YAAAA,CAA4B,0BACqCA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAv8G,GAAA5G,QAAA,OAAAA,MAAA4G,GAAAg1L,YAAA5nL,GAAA,GAA0BhU,MAAA,oBAAaA,QACpGA,MAAA,GAAA67L,GAAA,gCAIJ77L,QACAA,MAAA,YAAAA,CAAiC,2BAAjCA,CAAiC,oBAEVA,MAAA,wBAAiBA,QAChCA,MAAA,wBACIA,MAAA,GAAA87L,GAAA,yBACJ97L,QACAA,MAAA,GAAA+7L,EAAA,wBAGA/7L,MAAA,mBAAcA,MAAA,qBAAmDA,UAErEA,MAAA,2BAAAA,CAAmF,oBAChEA,MAAA,8BAAuBA,QACtCA,MAAA,wBACIA,MAAA,GAAAg8L,EAAA,yBACJh8L,QACAA,MAAA,GAAAi8L,GAAA,wBAGAj8L,MAAA,mBAAcA,MAAA,qBAAmDA,YAIzEA,MAAA,aAEAA,MAAA,SAAIA,MAAA,cAAOA,QACXA,MAAA,YAAAA,CAA8C,+BAC2BA,MAAA,oBAAaA,QAClFA,MAAA,+BAAoGA,MAAA,sBAAeA,QAEnHA,MAAA,8BAAAA,CAA2F,+BAC9BA,MAAA,eAAQA,QACjEA,MAAA,+BAAyDA,MAAA,eAAQA,QACjEA,MAAA,+BAAyDA,MAAA,eAAQA,cAK7EA,MAAA,aAAAA,CAAgC,UACxBA,MAAA,mBAAWA,QAEfA,MAAA,aAAAA,CAAiC,4BAAjCA,CAAiC,qBAEVA,MAAA,iBAASA,QACxBA,MAAA,sBAEAA,MAAA,uBAA+CA,MAAA,KAAgCA,QAC/EA,MAAA,IAAAk8L,GAAA,wBAGJl8L,UAGJA,MAAA,aAAAA,CAAuC,4BAAvCA,CAAuC,qBAEhBA,MAAA,oBAAYA,QAC3BA,MAAA,gBACAA,MAAA,IAAAm8L,GAAA,wBAGAn8L,MAAA,sBACIA,MAAA,eAAMA,MAAA,cAAQA,MAAA,YAAIA,QAAUA,MAAA,cAAKA,MAAA,UAAIA,MAAA,YAAIA,QAAMA,MAAA,eACnDA,QACAA,MAAA,sBAAAA,CAA8C,YACLA,MAAA,mBAAAA,MAAAmjH,IAAA,MAAAi5E,GAAAp8L,QAAA,OAASA,MAAAo8L,GAAAC,YAAW,GAAEr8L,MAAA,qBAAaA,QAAKA,MAAA,mBAC7EA,MAAA,YAAqCA,MAAA,mBAAAA,MAAAmjH,IAAA,MAAAm5E,GAAAt8L,QAAA,OAASA,MAAAs8L,GAAAC,WAAU,GAAEv8L,MAAA,4BAAoBA,QAAKA,MAAA,mBACnFA,MAAA,YAAqCA,MAAA,mBAAAA,MAAAmjH,IAAA,MAAA/8G,GAAApG,QAAA,OAASA,MAAAoG,GAAAo2L,iBAAgB,GAAEx8L,MAAA,2BAAmBA,QAAKA,MAAA,mBACxFA,MAAA,YAAqCA,MAAA,mBAAAA,MAAAmjH,IAAA,MAAAn9G,GAAAhG,QAAA,OAASA,MAAAgG,GAAAy2L,sBAAqB,GAAEz8L,MAAA,uBAAeA,cAKhGA,MAAA,aAAAA,CAAiC,4BAAjCA,CAAiC,qBAEVA,MAAA,uBAAeA,QAC9BA,MAAA,eAAAA,CAAkG,uBAElGA,MAAA,IAAA08L,GAAA,uBACJ18L,UAGJA,MAAA,cAEAA,MAAA,UAAIA,MAAA,uBAAeA,QACnBA,MAAA,aAAAA,CAAuC,4BAAvCA,CAAuC,kCAENA,MAAA,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAw5E,GAAA38L,QAAA,OAAiBA,MAAA28L,GAAA/hC,UAAA5mJ,IAAiB,EAAlChU,CAAmC,yBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAh9G,GAAAnG,QAAA,OAAAA,MAAAmG,GAAAy2L,gBAAA5oL,GAAA,GAA4GhU,QACxKA,MAAA,IAAA68L,GAAA,uBAAA78L,CAEgB,IAAA88L,GAAA,wBAShB98L,MAAA,uBAA0BA,MAAA,uBAAyBA,UAEvDA,MAAA,IAAA+8L,GAAA,iBAAoE/8L,MAAA,cACxEA,QAEAA,MAAA,cAEAA,MAAA,UAAIA,MAAA,eAAOA,QASXA,MAAA,aAAAA,CAA0D,iBACqCA,MAAA,KAA2CA,QACtIA,MAAA,iBAAsHA,MAAA,KAAoDA,QAC1KA,MAAA,iBAAuFA,MAAA,iBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAAhrG,GAAAnY,QAAA,OAASA,MAAAmY,GAAA6kL,cAAAhpL,IAAqB,GAA6BhU,MAAA,uBAAyCA,MAAA,KAAyCA,QACpOA,MAAA,iBAAgGA,MAAA,iBAAAgU,IAAAhU,MAAAmjH,IAAA,MAAA18G,GAAAzG,QAAA,OAASA,MAAAyG,GAAAu2L,cAAAhpL,IAAqB,GAAoBhU,MAAA,uBAAyCA,MAAA,KAAkDA,gBAKjQA,oEApM8CA,MAAA,YAAAK,GAAAm+G,MACnBx+G,cAAA,kBAKiDA,MAAA,GAAAA,MAAA,wBAIAA,MAAA,GAAAA,MAAA,2BAEwBA,MAAA,GAAAA,MAAA,eAC5DA,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,mBAAA+mK,SAAA,aAIoC3uL,cAAA,4BAG1BA,MAAA,GAAAA,MAAA,GAAA8e,GAAA1M,MAAA/N,OAAA,SACVrE,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,wBAAA+mK,SAAA,cAIoC3uL,cAAA,yBAGpCA,MAAA,GAAAA,MAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,iBAAA+mK,SAAA,YAGA3uL,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,iBAAA+mK,SAAA,QAGA3uL,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,iBAAA+mK,SAAA,QAIoC3uL,cAAA,2BAS3BA,MAAA,GAAAA,MAAA,2BACkCA,cAAA,mBAAAA,CAAsB,UAAAK,GAAA48L,wBAAtBj9L,CAAsB,uBACtBA,MAAA,GAAAA,MAAA,UAAAK,GAAAg7L,WAAA,GAAAr7L,CAA2B,iBAC3BA,MAAA,GAAAA,MAAA,UAAAK,GAAAg7L,WAAA,GAAAr7L,CAA2B,iBAC3BA,MAAA,GAAAA,MAAA,UAAAK,GAAAg7L,WAAA,GAAAr7L,CAA2B,mBAG3BA,MAAA,GAAAA,MAAA,aAAAA,CAAgB,cAAhBA,CAAgB,sBAChBA,MAAA,GAAAA,MAAA,UAAAK,GAAAm7L,iBAAAx7L,CAA8B,cAA9BA,CAA8B,sBAA0CA,cAAA,iBAAAK,GAAAm7L,iBAAA,KAOxEx7L,MAAA,GAAAA,MAAA,2BAAAA,CAA4B,UAAAK,GAAA+1J,UAC5Bp2J,MAAA,GAAAA,MAAA,6BAAAA,CAA8B,UAAAK,GAAAq7L,cAC9B17L,MAAA,GAAAA,MAAA,4BAAAA,CAA6B,UAAAK,GAAAs7L,WAGzD37L,MAAA,GAAAA,MAAA,wBAAAA,CAAyB,UAAAK,GAAAu7L,aACM57L,MAAA,GAAAA,MAAA,OAAAK,GAAAu7L,aAMnB57L,MAAA,GAAAA,MAAA,8BAEWA,MAAA,GAAAA,MAAA,eAAAK,GAAAq7L,aAAA17L,CAA6B,YAAAK,GAAAs7L,UAA7B37L,CAA6B,WAAAK,GAAAu7L,YAA7B57L,CAA6B,YAAAK,GAAAk6L,iBAC5Cv6L,cAAA,UAAAK,GAAAwL,SAEvB7L,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,aAAA+mK,SAAA,aAGF3uL,MAAA,GAAAA,MAAA,cAAAA,MAAA,MAAAK,GAAAm+G,KAAA52F,IAAA,aAAAxV,OAAA,IAE6BpS,MAAA,GAAAA,MAAA,mCAEWA,MAAA,GAAAA,MAAA,eAAAK,GAAAq7L,aAAA17L,CAA6B,YAAAK,GAAAs7L,UAA7B37L,CAA6B,WAAAK,GAAAu7L,YAA7B57L,CAA6B,YAAAK,GAAAk6L,iBAChCv6L,cAAA,0BAAAK,GAAA68L,WAAAl9L,CAAqB,+BAAAA,MAAA,IAAAI,IAArBJ,CAAqB,sCAExDA,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,aAAA+mK,SAAA,aAGF3uL,MAAA,GAAAA,MAAA,cAAAA,MAAA,MAAAK,GAAAm+G,KAAA52F,IAAA,aAAAxV,OAAA,IASKpS,MAAA,GAAAA,MAAA,qBAAAA,CAAsB,eAGlBA,MAAA,GAAAA,MAAA,oBAAAA,CAAqB,WACrBA,MAAA,GAAAA,MAAA,oBAAAA,CAAqB,WACrBA,MAAA,GAAAA,MAAA,oBAAAA,CAAqB,WASVA,MAAA,GAAAA,MAAA,2BAIRA,MAAA,GAAAA,MAAA,oBAAqBA,cAAA,GAAAm9L,GAAA/qL,MAAA/N,OAAA,SAC/BrE,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,mBAAA+mK,SAAA,cAOkB3uL,MAAA,GAAAA,MAAA,wBAGlBA,MAAA,GAAAA,MAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,SAAA+mK,SAAA,aAGF3uL,cAAA,kBAGYA,MAAA,GAAAA,MAAA,mBAUiBA,MAAA,IAAAA,MAAA,+BAGfA,MAAA,GAAAA,MAAA,oBAC6BA,cAAA,OAAAK,GAAAm+G,KAAA52F,IAAA,gBAAAxV,OAS4CpS,MAAA,GAAAA,MAAA,SAAAK,GAAA+8L,cACrFp9L,cAAA,cAAAq9L,GAAAh9L,GAAAm+G,KAAA52F,IAAA,kBAAAy1K,GAAA1O,SAAA,aAGA3uL,cAAA,eAAAK,GAAAm+G,OAAAn+G,GAAAm+G,KAAAihC,SAQUz/I,MAAA,GAAAA,YAAA,OAAAK,GAAA+8L,eAEHp9L,MAAA,GAAAA,MAAA,OAAAK,GAAAu8L,iBAA4E58L,cAAA,YAAAK,GAAAu8L,gBAAA58L,OAepCA,MAAA,GAAAA,MAAA,uBAAwBA,cAAAK,GAAAm+G,KAAA52F,IAAA,uBAAAxV,OACxBpS,cAAA,+BAAAA,CAAgC,eAAmBA,cAAA,YAAAK,GAAAm+G,KAAA52F,IAAA,uBAAAxV,MAAA,IACrDpS,cAAA,oBAAAA,CAAqB,eAAAK,GAAA26B,WAAqGh7B,MAAA,GAAAA,MAAAK,GAAAm+G,KAAA52F,IAAA,qBAAAxV,OAC1HpS,cAAA,6BAAAA,CAA8B,eAA4FA,MAAA,GAAAA,MAAA,YAAAK,GAAAm+G,KAAA52F,IAAA,qBAAAxV,MAAA,kDAO/MpS,MAAA,GACIA,MAAA,WAAAA,CAAkE,QAC1DA,MAAA,WAAKA,QACTA,MAAA,WAAAA,CAAuC,qBAAvCA,CAAuC,6BAEsBA,MAAA,QAAEA,QACvDA,MAAA,6BAAkDA,MAAA,QAAEA,QACpDA,MAAA,8BAAoDA,MAAA,SAAEA,UAE1DA,MAAA,sBAAAA,CAAyC,8BACgBA,MAAA,SAAEA,QACvDA,MAAA,8BAAkDA,MAAA,SAAEA,QACpDA,MAAA,8BAAoDA,MAAA,SAAEA,UAE1DA,MAAA,sBAAAA,CAAyC,8BACgBA,MAAA,SAAEA,QACvDA,MAAA,8BAAkDA,MAAA,SAAEA,QACpDA,MAAA,8BAAoDA,MAAA,SAAEA,YAG9DA,MAAA,SAAIA,MAAA,kBAAWA,QACfA,MAAA,YAAAA,CAAoE,YAApEA,CAAoE,eAE1BA,MAAA,yBAAAgU,IAAAhU,MAAAs9L,IAAA,MAAA7kL,GAAAzY,QAAA,OAAAA,MAAAyY,GAAA8kL,gBAAAvpL,GAAA,GAAlChU,UAEJA,MAAA,sBAAAA,CAA6D,8BACSA,MAAA,IAAmBA,QACrFA,MAAA,8BAAmEA,MAAA,IAAmBA,QACtFA,MAAA,8BAAgEA,MAAA,IAAmBA,YAG3FA,MAAA,aAEAA,MAAA,YAAAA,CAAoE,SAC5DA,MAAA,mBAAYA,QAChBA,MAAA,0BAAkBA,MAAA,yBAAAgU,IAAAhU,MAAAs9L,IAAA,MAAAtiL,GAAAhb,QAAA,OAAAA,MAAAgb,GAAAwiL,WAAAxpL,GAAA,GAAyBhU,MAAA,qBAAcA,UAG7DA,MAAA,YAAAA,CAAoE,8BAC1CA,MAAA,uBAAAgU,IAAAhU,MAAAs9L,IAAA,MAAAG,GAAAz9L,QAAA,OAAAA,MAAAy9L,GAAA73I,MAAA5xC,GAAA,GAA6EhU,QACnGA,MAAA,WAAMA,MAAA,qBAA8BA,UAExCA,MAAA,YAAAA,CAAoE,8BAC1CA,MAAA,uBAAAgU,IAAAhU,MAAAs9L,IAAA,MAAAI,GAAA19L,QAAA,OAAAA,MAAA09L,GAAAC,UAAA3pL,GAAA,GAAiFhU,QACvGA,MAAA,WAAMA,MAAA,qBAAkCA,UAE5CA,MAAA,aAEAA,MAAA,SAAIA,MAAA,oBAAaA,QACjBA,MAAA,6BAAAA,CAA4E,6BAA5EA,CAA4E,6BAA5EA,CAA4E,aAK5EA,MAAA,SAAIA,MAAA,kBAAWA,QACfA,MAAA,4BAAAA,CAAsE,aAGtEA,MAAA,SAAIA,MAAA,YAAKA,QACTA,MAAA,YAAAA,CAAoE,kBAApEA,CAAoE,eAApEA,CAAoE,WAGlDA,MAAA,WAAIA,QACVA,MAAA,sBACJA,QACAA,MAAA,0BAAqBA,MAAA,eAAQA,QAC7BA,MAAA,0BAAqBA,MAAA,eAAQA,QAC7BA,MAAA,0BAAqBA,MAAA,eAAQA,UAEjCA,MAAA,mBACIA,MAAA,sBACAA,MAAA,0BAAqBA,MAAA,WAAIA,QACzBA,MAAA,0BAAqBA,MAAA,eAAQA,QAC7BA,MAAA,0BAAqBA,MAAA,eAAQA,QAC7BA,MAAA,0BAAqBA,MAAA,eAAQA,cAKzCA,MAAA,YAAAA,CAAsD,SAC9CA,MAAA,iBAAUA,UAEtBA,kCA9E2BA,MAAA,GAAAA,MAAA,eACWA,cAAA,UAAAA,CAAW,kBACXA,MAAA,GAAAA,MAAA,UAAAA,CAAW,eACXA,MAAA,GAAAA,MAAA,UAAAA,CAAW,iBAEtBA,MAAA,GAAAA,MAAA,eACWA,cAAA,UAAAA,CAAW,kBACXA,MAAA,GAAAA,MAAA,UAAAA,CAAW,eACXA,MAAA,GAAAA,MAAA,UAAAA,CAAW,iBAEtBA,MAAA,GAAAA,MAAA,eACWA,cAAA,UAAAA,CAAW,kBACXA,MAAA,GAAAA,MAAA,UAAAA,CAAW,eACXA,MAAA,GAAAA,MAAA,UAAAA,CAAW,iBAMCA,MAAA,GAAAA,MAAA,UAAAE,GAAAq9L,iBAEvBv9L,cAAA,kBAAAA,CAAmB,QAAAE,GAAAq9L,iBACRv9L,cAAA,WAAAA,CAAY,UAAZA,CAAY,iBAAgCA,cAAAE,GAAAq9L,iBAC5Cv9L,cAAA,WAAAA,CAAY,UAAZA,CAAY,kBAAiCA,cAAAE,GAAAq9L,iBAC7Cv9L,cAAA,WAAAA,CAAY,UAAZA,CAAY,eAA8BA,cAAAE,GAAAq9L,iBAOlDv9L,MAAA,GAAAA,MAAA,UAAAE,GAAAs9L,YAIIx9L,MAAA,GAAAA,MAAA,QAAAE,GAAA0lD,MAAA5lD,CAAiB,eAAjBA,CAAiB,eAAAE,GAAAs9L,YACjCx9L,MAAA,GAAAA,MAAA,eAAAA,MAAA,MAAAE,GAAA0lD,OAAA,IAGgB5lD,MAAA,GAAAA,MAAA,QAAAE,GAAAy9L,UAAA39L,CAAqB,eAArBA,CAAqB,eAAAE,GAAAs9L,YACrCx9L,MAAA,GAAAA,MAAA,eAAAA,MAAA,MAAAE,GAAAy9L,WAAA,IAK2B39L,MAAA,GAAAA,MAAA,eACaA,cAAA,eACEA,cAAA,eAI/BA,MAAA,GAAAA,MAAA,gBAAAA,CAAiB,kCA4C9BA,MAAA,uDACAA,MAAA,sBACIA,MAAA,sBACJA,kCAIAA,MAAA,0EAIAA,MAAA,qBAAAA,CAA4E,yBACtDA,MAAA,yBAAAgU,IAAA,MAAA4pL,GAAA59L,MAAA69L,IAAAx6L,UAAAy6L,GAAA99L,MAAA,UAAiBA,MAAA89L,GAAAx0L,OAAA0K,GAAA4pL,IAAmB,GACtD59L,qDADwDA,cAAA,UAAAsa,GAAAyjL,UAAAC,WAAAJ,gCAM5D59L,MAAA,6BAA+DA,MAAA,WAAKA,kCAIhEA,MAAA,+CACAA,MAAA,mEAJJA,MAAA,sBAAyEA,MAAA,yBAAAi+L,GAAAj+L,MAAAk+L,IAAA76L,UAAA,OAASrD,MAAAi+L,GAAA30L,SAAc,GAE5FtJ,MAAA,UAAMA,MAAA,GAA0DA,QAChEA,MAAA,EAAAm+L,GAAA,uBAAAn+L,CAAwE,EAAAo+L,GAAA,wBAE5Ep+L,uCAHUA,MAAA,GAAAA,MAAA,SAAAi+L,GAAAI,SAAA,KAAAJ,GAAAr4C,KAAAvhJ,OAAA,WAC2BrE,cAAA,OAAAi+L,GAAAK,YACEt+L,cAAA,QAAAi+L,GAAAK,sCAKvCt+L,MAAA,0DACAA,MAAA,sBACIA,MAAA,aACJA,qCAD2BA,cAAA,mBAAAu+L,GAAA34I,kCAK3B5lD,MAAA,4BAAAA,CAAsD,wBAAtDA,CAAsD,UACvBA,MAAA,QAAEA,0DAEjCA,MAAA,sBAEIA,MAAA,GAAkBA,MAAA,cAAmBA,MAAA,GAAyBA,QAC9DA,MAAA,sBACIA,MAAA,yBAAAw+L,GAAAx+L,MAAAy+L,IAAAC,WAAA,OAAS1+L,MAAAw+L,GAAW,UAAS,GAAkBx+L,6DAFnDA,cAAA,IAAA2+L,GAAA5sL,GAAA,QAAqC/R,MAAA,GAAAA,MAAA,IAAA2+L,GAAAC,OAAAv6L,OAAA,KACvBrE,cAAA,OAAA6+L,GAAA,kEAMlB7+L,MAAA,4BAAAA,CAAsD,wBAAtDA,CAAsD,0BAAtDA,CAAsD,UAGpCA,MAAA,WAAKA,4CAIvBA,MAAA,sBACIA,MAAA,GACJA,qCADIA,cAAA,IAAA8+L,GAAA1qF,MAAA,mCASQp0G,MAAA,GACIA,MAAA,sBACJA,qCADkBA,cAAA,OAAA++L,GAAA3sL,MAAA,gBAAApS,CAAsC,QAAA++L,GAAA3sL,MAAA,oDALpEpS,MAAA,4BAAAA,CAAsD,wBAAtDA,CAAsD,0BAAtDA,CAAsD,UAGpCA,MAAA,UAAIA,QACVA,MAAA,EAAAg/L,GAAA,wBAGJh/L,0CAGRA,MAAA,sBACIA,MAAA,sBACJA,qCADkBA,cAAA,OAAAi/L,GAAAx6L,KAAA,gBAAAzE,CAAkC,QAAAi/L,GAAAx6L,KAAA,oDAIpDzE,MAAA,4BAAAA,CAAuD,wBAAvDA,CAAuD,0BAAvDA,CAAuD,UAGrCA,MAAA,UAAIA,4CAItBA,MAAA,sBACIA,MAAA,GACJA,qCADIA,cAAA,IAAAk/L,GAAAh8L,KAAA,gCAKJlD,MAAA,4BAAAA,CAAsD,wBAAtDA,CAAsD,+BAG1CA,MAAA,YACJA,0CAGRA,MAAA,qBAAAA,CAA4E,cACrDA,MAAA,sBAAwBA,uCAAxBA,MAAA,GAAAA,YAAA,IAAAm/L,GAAA3jI,kCAKvBx7D,MAAA,4BAAAA,CAA4F,wBAA5FA,CAA4F,8BAA5FA,CAA4F,YAA5FA,CAA4F,UAItEA,MAAA,WAAKA,QACXA,MAAA,sBACJA,4CAIZA,MAAA,qBAAAA,CAAwF,4BAEhFA,MAAA,eACJA,uCAF2BA,cAAA,eAAAA,CAAmB,gBACtBA,cAAA,QAAAo/L,GAAAhtL,kCAM5BpS,MAAA,4BAAAA,CACsD,UAC5CA,MAAA,YAAMA,wCAMJA,MAAA,wBAAmEA,MAAA,GAAiBA,qCAArCA,MAAA,QAAAq/L,GAAAttL,IAAoB/R,cAAAq/L,GAAAn8L,oCAJ/ElD,MAAA,sBACIA,MAAA,4BACAA,MAAA,2BAAAA,CAAkE,wBAE1DA,MAAA,EAAAs/L,GAAA,0BACJt/L,qCAJiBA,cAAA,gBAAAA,CAAiB,QACXA,cAAA,eAAAA,CAAmB,gBAC1BA,cAAA,eAAAu/L,GAAA7D,aAAA17L,CAA6B,YAAAu/L,GAAA5D,UAA7B37L,CAA6B,WAAAu/L,GAAA3D,YAA7B57L,CAA6B,YAAAu/L,GAAAhF,iBACNv6L,cAAA,UAAAu/L,GAAA1zL,oCAO/C7L,MAAA,aACIA,MAAA,sBAAkDA,MAAA,qBACtDA,kCAGJA,MAAA,8BAA2HA,MAAA,2CAG3HA,MAAA,0CAEAA,MAAA,8CAMYA,MAAA,uDACAA,MAAA,sBACIA,MAAA,sBACJA,kCAIAA,MAAA,0DACAA,MAAA,sBACIA,MAAA,aACJA,qCAD2BA,cAAA,mBAAAw/L,GAAA55I,kCAK3B5lD,MAAA,6BAA2EA,MAAA,gBAC3EA,sDACAA,MAAA,sBAEIA,MAAA,GACAA,MAAA,sBACIA,MAAA,yBAAAy/L,GAAAz/L,MAAA0/L,IAAAhB,WAAA,OAAS1+L,MAAAy/L,GAAW,eAAc,GAAkBz/L,6DAFxDA,cAAA,IAAA2/L,GAAA5tL,GAAA,KACc/R,cAAA,OAAA4/L,GAAA,uEAMlB5/L,MAAA,6BAA2EA,MAAA,kBAC3EA,sCACAA,MAAA,qBAAAA,CAAoD,4BAE5CA,MAAA,eACJA,uCADwBA,MAAA,GAAAA,MAAA,QAAA6/L,GAAA38L,iCAM5BlD,MAAA,4BAAAA,CACsD,UAC5CA,MAAA,kBAAYA,QAClBA,MAAA,sBACJA,kCAKIA,MAAA,mDAJJA,MAAA,qBAAAA,CAAwF,4BAEhFA,MAAA,eACJA,QACAA,MAAA,EAAA8/L,GAAA,wBACJ9/L,qCAH4BA,MAAA,GAAAA,MAAA,QAAA+/L,GAAA3tL,OAEuBpS,cAAA,OAAA+/L,GAAA3tL,MAAA,+BAMnDpS,MAAA,4BAAAA,CAAsF,UAE9EA,MAAA,gBACJA,QACAA,MAAA,cACIA,MAAA,eACJA,qCAKJA,MAAA,6BAAuDA,MAAA,cAAQA,mCAI/DA,MAAA,6BAAuDA,MAAA,cAAQA,kCAI/DA,MAAA,sDACAA,MAAA,+CAGJA,MAAA,iDACAA,MAAA,iDACAA,MAAA,iDAGAA,MAAA,2CAKIA,MAAA,aACIA,MAAA,sBAAkDA,MAAA,4BACtDA,kCAOQA,MAAA,0DACAA,MAAA,sBACIA,MAAA,aACJA,qCAD2BA,cAAA,mBAAAggM,GAAAp6I,kCAK3B5lD,MAAA,6BAA2EA,MAAA,qBAC3EA,sCACAA,MAAA,sBACIA,MAAA,GACJA,qCADIA,cAAA,IAAAigM,GAAAluL,GAAA,gCAKJ/R,MAAA,6BAA2EA,MAAA,uBAC3EA,sCACAA,MAAA,qBAAAA,CAAoD,4BAE5CA,MAAA,eACJA,uCAF4BA,cAAA,gBACJA,cAAA,QAAAkgM,GAAAh9L,iCAM5BlD,MAAA,4BAAAA,CACyB,UACfA,MAAA,uBAAiBA,QACvBA,MAAA,sBACJA,kCAKIA,MAAA,mDAJJA,MAAA,qBAAAA,CAAwF,4BAEhFA,MAAA,eACJA,QACAA,MAAA,EAAAmgM,GAAA,wBACJngM,qCAJoCA,cAAA,gBACRA,cAAA,QAAAogM,GAAAhuL,OAEuBpS,cAAA,OAAAogM,GAAAhuL,MAAA,+BAKnDpS,MAAA,sBACIA,MAAA,sBAAkDA,MAAA,iCACtDA,kCAGJA,MAAA,iDAEAA,MAAA,0CAEAA,MAAA,gHApDRA,MAAA,GAEIA,MAAA,uBACIA,MAAA,OACIA,MAAA,EAAAqgM,GAAA,8BAAArgM,CAA4E,EAAAsgM,GAAA,wBAIhFtgM,QAEAA,MAAA,OACIA,MAAA,EAAAugM,GAAA,8BAAAvgM,CACsB,EAAAwgM,GAAA,wBAI1BxgM,QAEAA,MAAA,OACIA,MAAA,EAAAygM,GAAA,8BAAAzgM,CACsB,GAAA0gM,GAAA,wBAM1B1gM,QAEAA,MAAA,QACIA,MAAA,GAAA2gM,GAAA,8BAAA3gM,CAIsB,GAAA4gM,GAAA,wBAO1B5gM,QAEAA,MAAA,QACIA,MAAA,GAAA6gM,GAAA,wBAGJ7gM,QAEAA,MAAA,GAAA8gM,GAAA,6BAAA9gM,CACqB,GAAA+gM,GAAA,sBADrB/gM,CACqB,GAAAghM,GAAA,uBAIzBhhM,QACJA,qCApDmBA,cAAA,aAAAihM,GAAAjhM,CAAyB,wBAAAihM,IA8CfjhM,MAAA,IAAAA,MAAA,sBAAAA,MAAA,EAAAwU,KAEiBxU,cAAA,uBAAAA,MAAA,EAAAwU,KAExBxU,cAAA,sBAAAA,MAAA,EAAA6Y,sJA/I9B7Y,MAAA,GACIA,MAAA,uBACIA,MAAA,OACIA,MAAA,EAAAkhM,GAAA,8BAAAlhM,CAA4E,EAAAmhM,GAAA,wBAIhFnhM,QAEAA,MAAA,OACIA,MAAA,EAAAohM,GAAA,8BAAAphM,CAA4E,EAAAqhM,GAAA,wBAIhFrhM,QAEAA,MAAA,OACIA,MAAA,EAAAshM,GAAA,8BAAAthM,CACsB,GAAAuhM,GAAA,wBAO1BvhM,QAEAA,MAAA,QACIA,MAAA,GAAAwhM,GAAA,8BAAAxhM,CACsB,GAAAyhM,GAAA,wBAM1BzhM,QAEAA,MAAA,QACIA,MAAA,GAAA0hM,GAAA,8BAAA1hM,CAIsB,GAAA2hM,GAAA,wBAO1B3hM,QAGAA,MAAA,QACIA,MAAA,GAAA4hM,GAAA,+BAQJ5hM,QAEAA,MAAA,QACIA,MAAA,GAAA6hM,GAAA,+BACJ7hM,QAEAA,MAAA,QACIA,MAAA,GAAA8hM,GAAA,+BACJ9hM,QAEAA,MAAA,QACIA,MAAA,GAAA+hM,GAAA,8BAAA/hM,CAAuF,GAAAgiM,GAAA,wBAE3FhiM,QAEAA,MAAA,GAAAiiM,GAAA,6BAAAjiM,CAA4E,GAAAkiM,GAAA,6BAA5EliM,CAA4E,GAAAmiM,GAAA,6BAA5EniM,CAA4E,GAAAoiM,GAAA,sBAA5EpiM,CAA4E,GAAAqiM,GAAA,sBAA5EriM,CAA4E,GAAAsiM,GAAA,yBAsEhFtiM,QACJA,iDAlJmBA,cAAA,aAAAuiM,GAAAviM,CAAyB,wBAAAuiM,IA2EfviM,MAAA,IAAAA,MAAA,sBAAAA,MAAA,EAAA4e,KACA5e,cAAA,sBAAAA,MAAA,EAAAwiM,KACAxiM,cAAA,sBAAAA,MAAA,GAAAyiL,KAIQziL,cAAA,uBAAAA,MAAA,GAAAyiL,KAUQziL,MAAA,GAAAA,MAAA,kCAAAyiM,GAAAC,uBAAA1iM,CAA2C,4LA9PpGA,MAAA,GAGIA,MAAA,WAAAA,CAA8B,qBAA9BA,CAA8B,qBAGlBA,MAAA,iCAAAA,CAAiF,+BAEjFA,MAAA,6BAAAA,CAA0B,yCACyBA,MAAA,WAAKA,UAExDA,MAAA,wCACJA,QAEAA,MAAA,QACIA,MAAA,GAAA2iM,GAAA,8BAAA3iM,CAA4E,GAAA4iM,GAAA,wBAIhF5iM,QAEAA,MAAA,QACIA,MAAA,GAAA6iM,GAAA,8BAAA7iM,CAGsB,GAAA8iM,GAAA,wBAK1B9iM,QAEAA,MAAA,QACIA,MAAA,GAAA+iM,GAAA,8BAAA/iM,CAA0F,GAAAgjM,GAAA,wBAO9FhjM,QAEAA,MAAA,QACIA,MAAA,GAAAijM,GAAA,8BAAAjjM,CAA4E,GAAAkjM,GAAA,wBAIhFljM,QAEAA,MAAA,QACIA,MAAA,GAAAmjM,GAAA,8BAAAnjM,CAEsB,GAAAojM,GAAA,wBAO1BpjM,QAEAA,MAAA,QACIA,MAAA,GAAAqjM,GAAA,8BAAArjM,CAMsB,GAAAsjM,GAAA,wBAI1BtjM,QAEAA,MAAA,QACIA,MAAA,GAAAujM,GAAA,8BAAAvjM,CASsB,GAAAwjM,GAAA,wBAI1BxjM,QACAA,MAAA,QACIA,MAAA,GAAAyjM,GAAA,8BAAAzjM,CAMsB,GAAA0jM,GAAA,wBAI1B1jM,QAEAA,MAAA,QACIA,MAAA,GAAA2jM,GAAA,8BAAA3jM,CAMsB,GAAA4jM,GAAA,wBAI1B5jM,QAEAA,MAAA,QACIA,MAAA,GAAA6jM,GAAA,8BAAA7jM,CASsB,GAAA8jM,GAAA,wBAM1B9jM,QAEAA,MAAA,QACIA,MAAA,GAAA+jM,GAAA,8BAAA/jM,CAGsB,GAAAgkM,GAAA,wBAS1BhkM,QAEAA,MAAA,GAAAikM,GAAA,sBAAAjkM,CAIc,GAAAkkM,GAAA,6BAJdlkM,CAIc,GAAAmkM,GAAA,sBAJdnkM,CAIc,GAAAokM,GAAA,sBAJdpkM,CAIc,GAAAqkM,GAAA,0BA8JlBrkM,UAERA,gCApTuBA,MAAA,GAAAA,MAAA,aAAAqF,GAAA29G,WAAAhjH,CAAyB,wBAAAqF,GAAA29G,WAAzBhjH,CAAyB,0BAAAqF,GAAA29G,WAAzBhjH,CAAyB,eAAzBA,CAAyB,wBAELA,MAAA,GAAAA,MAAA,UAAAqF,GAAAi/L,eAoBwBtkM,MAAA,IAAAA,MAAA,4BAAAqF,GAAA29G,YAQJhjH,MAAA,GAAAA,MAAA,iCAAAqF,GAAA29G,YAoBjBhjH,MAAA,GAAAA,MAAA,4BAAAqF,GAAA29G,YAwDqBhjH,MAAA,IAAAA,MAAA,4BAAAqF,GAAA29G,YA4ClChjH,MAAA,GAAAA,MAAA,sBAAAA,MAAA,GAAAukM,KAGiBvkM,cAAA,2BAAAqF,GAAA29G,WAAAhjH,CAAyB,uBAAAA,MAAA,GAAAukM,IAAzBvkM,CAAyB,qBAAAA,MAAA,GAAAwkM,KAEpBxkM,cAAA,gCAAAqF,GAAA29G,WAAAhjH,CAAyB,4BAAAA,MAAA,GAAAykM,KAGrBzkM,cAAA,kCAAAqF,GAAAq9L,uBAAA1iM,CAA2C,6EA8JtFA,MAAA,sBAAqEA,MAAA,mBAAAA,MAAA0kM,IAAA,MAAAC,GAAA3kM,MAAA,UAAAA,MAAA2kM,GAAAC,WAAsB,KAAI,GAAkB5kM,sCAKjHA,MAAA,aACIA,MAAA,sBACAA,MAAA,UAAMA,MAAA,GAAUA,uCADFA,cAAA,OAAA6kM,GAAA7kM,CAAa,UACrBA,MAAA,GAAAA,MAAA6kM,kCAHd7kM,MAAA,YACIA,MAAA,EAAA8kM,GAAA,eAIJ9kM,qCAL8EA,MAAA,mBACJA,cAAA,UAAA+kM,kDAXtF/kM,MAAA,GACIA,MAAA,YAAAA,CAA6D,YAA7DA,CAA6D,uBAA7DA,CAA6D,eAGfA,MAAA,yBAAAgU,IAAAhU,MAAAglM,IAAA,MAAAC,GAAAjlM,QAAA,OAAAA,MAAAilM,GAAAL,WAAA5wL,GAAA,GAAlChU,QACAA,MAAA,sBACAA,MAAA,EAAAklM,GAAA,wBACJllM,UAEJA,MAAA,qCACIA,MAAA,EAAAmlM,GAAA,eAMJnlM,UAERA,kCAdkDA,MAAA,GAAAA,MAAA,UAAA6F,GAAA++L,YAEiB5kM,MAAA,GAAAA,MAAA,OAAA6F,GAAA++L,YAG9B5kM,cAAA,gBACwCA,cAAA,kBAAA6F,GAAAk0L,qCAU7E/5L,MAAA,GACIA,MAAA,YAAAA,CAAyB,YAAzBA,CAAyB,YAAzBA,CAAyB,QAGTA,MAAA,oBAAcA,UAEtBA,MAAA,YAAAA,CAAkD,OAC3CA,MAAA,q0BAA+zBA,QACl0BA,MAAA,OAAGA,MAAA,gbAAyaA,QAC5aA,MAAA,QAAGA,MAAA,+zBAAwzBA,YAGn0BA,MAAA,aAAAA,CAAkD,aAAlDA,CAAkD,SAEtCA,MAAA,qCAA8BA,UAEtCA,MAAA,aAAAA,CAAgE,QACzDA,MAAA,s0BAA+zBA,QACl0BA,MAAA,QAAGA,MAAA,gbAAyaA,QAC5aA,MAAA,QAAGA,MAAA,+zBAAwzBA,YAGn0BA,MAAA,aAAAA,CAAwD,aAAxDA,CAAwD,SAE5CA,MAAA,yBAAkBA,UAE1BA,MAAA,aAAAA,CAAgE,QACzDA,MAAA,s0BAA+zBA,QACl0BA,MAAA,QAAGA,MAAA,gbAAyaA,QAC5aA,MAAA,QAAGA,MAAA,+zBAAwzBA,cAI30BA,sDAwCgBA,MAAA,6BAGIA,MAAA,yBAAAolM,GAAAplM,MAAAqlM,IAAAx8I,MAAAy8I,GAAAtlM,QAAA6oD,MAAA08I,GAAAvlM,MAAA,GAAAulM,UAAAC,aAAAJ,GAAAplM,MAAAulM,GAAAE,iBAAAH,GAAA,GACAtlM,MAAA,YAAAA,CAAgE,cAExDA,MAAA,4BACAA,MAAA,UACIA,MAAA,GACJA,UAEJA,MAAA,cACIA,MAAA,sBAEJA,oFAbJA,MAAA,eAAAolM,GAAAplM,CAA4B,SAAA0lM,GAAAF,eAAAJ,IAAAM,GAAAD,mBAAAH,IAOhBtlM,MAAA,GAAAA,MAAA,SAAAolM,GAAA,KAI4BplM,MAAA,GAAAA,MAAA,cAAA2lM,GAAA,wFApBhD3lM,MAAA,gCAAAA,CACsE,oCAE9DA,MAAA,4BACAA,MAAA,UACIA,MAAA,GACJA,UAEJA,MAAA,EAAA4lM,GAAA,+BAiBJ5lM,iCAzByBA,MAAA,yBAGGA,MAAA,GAAAA,MAAA,aAEhBA,MAAA,GAAAA,MAAA,aAAAslM,GAAA,KAG8BtlM,cAAA,UAAAA,MAAA,EAAA6lM,mCA4BtC7lM,MAAA,0BAAAA,CAA0D,aAElDA,MAAA,cAAAA,CAAoE,eAExEA,QACAA,MAAA,4BACAA,MAAA,GACJA,qCALeA,MAAA,GAAAA,MAAA,cAIXA,MAAA,GAAAA,MAAA,SAAA8lM,GAAA,4DAZR9lM,MAAA,yBACIA,MAAA,4BACAA,MAAA,cAA4BA,MAAA,GAAuCA,QACnEA,MAAA,cAA+BA,MAAA,iHACaA,QAC5CA,MAAA,cAAyBA,MAAA,cAAQA,QACjCA,MAAA,EAAA+lM,GAAA,iCAQJ/lM,iCAZgCA,MAAA,GAAAA,MAAA,GAAAgmM,GAAA,gCAIchmM,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAAimM,4DAlE1DjmM,MAAA,GACIA,MAAA,YAAkBA,MAAA,qBAAeA,QACjCA,MAAA,YAAAA,CAAgD,uBAAhDA,CAAgD,8BAAhDA,CAAgD,YAAhDA,CAAgD,WAAhDA,CAAgD,cAMxBA,MAAA,wBACJA,QACAA,MAAA,WACIA,MAAA,gBACJA,UAEJA,MAAA,YAAAA,CAA8B,eAEtBA,MAAA,aACJA,QACAA,MAAA,WACIA,MAAA,mBACJA,YAGRA,MAAA,aAAAA,CAA0C,eACzBA,MAAA,qBAAcA,QAC3BA,MAAA,+BAEJA,UAGJA,MAAA,GAAAkmM,GAAA,mCA0BJlmM,QACAA,MAAA,wBAAAA,CAAuB,aACIA,MAAA,mBAAYA,QAEnCA,MAAA,GAAAmmM,GAAA,+BAeAnmM,MAAA,aAAAA,CAAsE,iBAE9DA,MAAA,gBACJA,cAKhBA,gBA1D6EA,MAAA,IAAAA,MAAA,gBAMxCA,cAAA,UAAAA,MAAA,EAAAomM,KA6BapmM,MAAA,GAAAA,MAAA,UAAAA,MAAA,EAAAimM,gCAmC1DjmM,MAAA,cACIA,MAAA,qBACJA,sDAQAA,MAAA,8DChwBFqmM,GAAiB,CACnB,CACI9oK,KAAM,UACN+oK,UAAW,OACXniK,UC4B+B,MAAjC,MAAOoiK,GAqCFC,YAAYp0L,IACfrR,KAAK0I,OAAO1H,SAASyJ,cAA8B4G,GAAQ,EAAI,GACnE,CAQO4qL,cAAch5J,IACjBpC,QAAQC,IAAI,WAAYmC,IACxBjjC,KAAKi6B,WAAY,EACjBr5B,WAAW,KAAQZ,KAAKi6B,WAAY,GAAU,IAClD,CAGOuhK,WAEHx7L,KAAK0I,OAAO1H,SAASyJ,YAA0B,EAAG,yCAA6CyR,IAAMsa,uBAAuB,GAChI,CAEO8kK,YAEHt7L,KAAK0I,OAAO1H,SAASyJ,YAA0B,EAAG,qCAA6CyR,IAAMsa,uBAAuB,GAChI,CAEOilK,iBAEHz7L,KAAK0I,OAAO1H,SAASyJ,YAA0B,EAAG,oCAA6CyR,IAAMmb,cAAc,GACvH,CAEOqkK,sBAEH17L,KAAK0I,OAAO1H,SAASyJ,YAA0B,EAAG,iCAAgD,GAEtG,CAsEOk3L,uBAAuB56K,IAC1B,OAAO,IAAIi8F,KAAkBj8F,GAAK82K,OACtC,CAiDO3B,wBACH,QAAOl8L,KAAKs6L,WAAWvjB,MAAM1lK,IAASA,OAEhCrR,KAAKs6L,WAAWzqI,KAAKx+C,IAASA,KAC1B,IAEd,CAEO+oL,iBAAiB/oL,IACpBrR,KAAKs6L,WAAa,CAACjpL,GAAOA,GAAOA,GACrC,CAkCOqpL,iBAAiBrlC,IACpBr1J,KAAKq1J,SAAWA,GACZA,IACAr1J,KAAKy9G,KAAK52F,IAAI,aAAa6+K,UAC3B1lM,KAAKy9G,KAAK52F,IAAI,aAAa6+K,YAE3B1lM,KAAKy9G,KAAK52F,IAAI,aAAa8+K,SAC3B3lM,KAAKy9G,KAAK52F,IAAI,aAAa8+K,SAEnC,CAMA7lM,YACYg+G,GACAr1G,GACA2qF,GACA1qF,GACAghD,IAJA1pD,KAAA89G,OACA99G,KAAAyI,QACAzI,KAAAozF,gBACApzF,KAAA0I,UACA1I,KAAA0pD,mBAjQL1pD,KAAA4lM,gBAAkC,CACrCC,YAAaC,KAAYC,iBACzBC,YAAaC,KAAY7zB,KAGzB8zB,UAAW,CAAEtgJ,SAAS,GAEtBugJ,QAAS,EACTC,QAAS,GAETC,QAAS,EACTC,QAAS,GAETC,iBAAkB,IAClBC,yBAAyB,EAEzBC,aAAa,EAEbC,UAAW,CAAE9gJ,SAAS,GAEtB+gJ,yBAAyB,GAGtB3mM,KAAAw8L,gBAA0B,EAE1Bx8L,KAAA4mM,KAAe,CAClB,CAAE51L,GAAI,eAAgB7O,KAAM,iBAC5B,CAAE6O,GAAI,aAAc7O,KAAM,cAC1B,CAAE6O,GAAI,QAAS7O,KAAM,SACrB,CAAE6O,GAAI,QAAS7O,KAAM,SACrB,CAAE6O,GAAI,OAAQ7O,KAAM,SAEjBnC,KAAA6mM,UAAoB,gBAEpB7mM,KAAA8mM,UAAY9mM,KAAK0I,OAAOpI,OAAOmK,iBAU/BzK,KAAAi6B,WAAqB,EAkCrBj6B,KAAAwlD,OAAmB,CAAC,OAAQ,OAAQ,SAAU,QAAS,MAAO,SAAU,UAEvExlD,KAAA+mM,aAAe15K,MAEhBrtB,KAAA+mB,KACH,IAAI2tJ,MAAM,KAAM13G,KAAK,MAAMtsD,IAAI,CAACsnD,GAAGl7B,OAC/B9rB,GAAI,GAAG8rB,KACP+nB,MAAO7kD,KAAKwlD,OAAO1oB,GAAI98B,KAAKwlD,OAAOliD,QACnC+vG,MAAO,SAAS,EAAInqB,KAAKqD,MAAsB,GAAhBrD,KAAKw5E,YACpCvgK,KAAM,cAAc,EAAI+mF,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,YACxCjoG,KAAMz6D,KAAK+mM,aAAaj5K,QAAQuE,SAAyB,GAAhB62D,KAAKw5E,SAAe,KAAKnmG,SAClE74D,KAAOwlF,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,UAAgB,GAAM,EAC7CrxJ,MAAO63E,KAAKqD,MAAsB,GAAhBrD,KAAKw5E,UAAiB99G,OAAOskC,KAAKw5E,SAASv+G,QAAQ,GAAG3zC,MAAM,EAAG,IACjFw2L,MAAOlqK,GAGP+gK,OAAQ,IAAInpB,MAAMxrF,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,WAAe1lG,KAAK,MAAMtsD,IAAI,CAACsnD,GAAGz3B,OAChEvvB,GAAI,GAAG8rB,GAAI,KAAKyD,GAAI,IACpBskB,MAAO7kD,KAAKwlD,OAAO1oB,GAAI98B,KAAKwlD,OAAOliD,QACnC+vG,MAAO,SAAS,EAAInqB,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,YACpCvgK,KAAM,cAAc,EAAI+mF,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,YAExCrxJ,MAAO63E,KAAKqD,MAAsB,GAAhBrD,KAAKw5E,UAAiB99G,OAAOskC,KAAKw5E,SAASv+G,QAAQ,GAAG3zC,MAAM,EAAG,IACjFw2L,MAAOzmK,GAEPs9J,OAAQ,IAAInpB,MAAMxrF,KAAKqD,MAAsB,GAAhBrD,KAAKw5E,WAAgB1lG,KAAK,MAAMtsD,IAAI,CAACsnD,GAAGivI,OACjEj2L,GAAI,GAAG8rB,GAAI,KAAKyD,GAAI,KAAK0mK,GAAI,IAC7BpiJ,MAAO7kD,KAAKwlD,OAAO1oB,GAAI98B,KAAKwlD,OAAOliD,QAEnCnB,KAAM,mBAAmB,EAAI+mF,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,YAC7Ch/J,KAAOwlF,KAAKqD,MAAsB,EAAhBrD,KAAKw5E,UAAgB,GAAM,EAC7CrxJ,MAAO63E,KAAKqD,MAAsB,GAAhBrD,KAAKw5E,UAAiB99G,OAAOskC,KAAKw5E,SAASv+G,QAAQ,GAAG3zC,MAAM,EAAG,IACjFw2L,MAAOC,YAMhBjnM,KAAAiiH,WAAa,IAAIe,KAAyBhjH,KAAK+mB,MAE/C/mB,KAAAujM,cAA8C,CACjD,CAAEh0K,OAAQ,KAAM4xB,IAAK,MACrB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,OAAQ4xB,IAAK,QACvB,CACI5xB,OAAQ,OAAQ4xB,IAAK,SAAU+gE,QAAS,CACpC,CAAE3yF,OAAQ,KAAM4xB,IAAK,MACrB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,OAAQ4xB,IAAK,QACvB,CACI5xB,OAAQ,OAAQ4xB,IAAK,SAAU+gE,QAAS,CACpC,CAAE3yF,OAAQ,KAAM4xB,IAAK,MACrB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,QAAS4xB,IAAK,SACxB,CAAE5xB,OAAQ,OAAQ4xB,IAAK,aAWpCnhD,KAAAg9L,UAAY,IAAIkK,MAAsB,EAAM,IAQ5ClnM,KAAAy9G,KAAOz9G,KAAK89G,IAAIzK,MAAM,CACzBnpE,QAAS,CAAC,MACVi9J,gBAAiB,CAAC,KAAM,CAACjkF,KAAWC,WACpCikF,qBAAsB,CAAC,KAAM,CAAClkF,KAAWmkF,UAAU,MACnDC,gBAAiB,CAAC,KAAM,CAACpkF,KAAWqkF,UAAU,GAAIrkF,KAAWmkF,UAAU,MACvEG,MAAO,CAAC,2CAA4C,CAACtkF,KAAWC,WAChEskF,gBAAiB,CAAC,CAAEp2L,MAAO,gBAAiBgkJ,UAAU,IACtDqyC,cAAe,CAAC,EAAG,CAACxkF,KAAWykF,QAAQ,0BAA2BzkF,KAAW/5B,IAAI,GAAI+5B,KAAWo/C,IAAI,KACpGslC,oBAAqB,CAAC,MACtBC,SAAU,CAAC,MACXC,UAAW,CAAC,MACZC,UAAW,CAAC,MACZC,SAAU,CAAC,MACXC,aAAc,CAAC,MACfC,kBAAmB,CAAC,kBACpBC,oBAAqB,CAAC,oBACtBC,aAAc,CAAC,KAGZpoM,KAAAq8L,aAAe,CAClB,CACIv0I,MAAO,EACP3lD,KAAM,gBAEV,CACI2lD,MAAO,EACP3lD,KAAM,wBAUPnC,KAAAs6L,WAAa,EAAC,GAAO,GAAO,GAC5Bt6L,KAAAy6L,kBAAmB,EAkBnBz6L,KAAA8K,QAAU,CACb,CAAEkG,GAAI,EAAG7O,KAAM,cACf,CAAE6O,GAAI,EAAG7O,KAAM,QACf,CAAE6O,GAAI,EAAG7O,KAAM,SACf,CAAE6O,GAAI,EAAG7O,KAAM,SACf,CAAE6O,GAAI,EAAG7O,KAAM,SACf,CAAE6O,GAAI,EAAG7O,KAAM,SACf,CAAE6O,GAAI,EAAG7O,KAAM,SACf,CAAE6O,GAAI,EAAG7O,KAAM,UACf,CAAE6O,GAAI,EAAG7O,KAAM,UACf,CAAE6O,GAAI,EAAG7O,KAAM,eACf,CAAE6O,GAAI,GAAI7O,KAAM,aAChB,CAAE6O,GAAI,GAAI7O,KAAM,aAChB,CAAE6O,GAAI,GAAI7O,KAAM,QAChB,CAAE6O,GAAI,GAAI7O,KAAM,WAChB,CAAE6O,GAAI,GAAI7O,KAAM,cAChB,CAAE6O,GAAI,GAAI7O,KAAM,UAChB,CAAE6O,GAAI,GAAI7O,KAAM,cAGbnC,KAAAm8L,WAAa,IAAIznB,MAAM,KAAM13G,KAAK,MAAMtsD,IAAI,CAACsnD,GAAGl7B,OAAS36B,KAAM,UAAU26B,KAAKzrB,MAAOyrB,MAErF98B,KAAAq1J,UAAW,EACXr1J,KAAA26L,cAAe,EACf36L,KAAA46L,WAAY,EACZ56L,KAAA66L,aAAc,EACd76L,KAAAw5L,gBAAuC,OAavCx5L,KAAAy8L,YAAsB,EACtBz8L,KAAA48L,UAA6B,CAAE/3I,MAAO,UAAWssC,MAAO,GACxDnxF,KAAA6kD,MAAyB,UAqDzB7kD,KAAAykM,aAAuB,EACvBzkM,KAAA0kM,iBAA2B,EA7C9B1kM,KAAKy9G,KAAK52F,IAAI,mBAAmB6+K,SACrC,CAGA,YAAW1M,GACP,OAAOh5L,KAAKozF,aAAa4lG,SAAS1oL,OAAO5M,KAAQ1D,KAAK6jM,aAA6D,IAAhDngM,GAAK0L,QAAQpP,KAAK6jM,WAAW3/L,gBAA8BmrB,OAAO,CAACC,GAAK5rB,GAAMo5B,MACzIA,GAAI,GAAM,GACVxN,GAAI7e,KAAK,IAEb6e,GAAIA,GAAIhsB,OAAS,GAAGmN,KAAK/M,IAElB4rB,IACR,GACP,CAEO+4K,aAAaziJ,IACZA,GACA5lD,KAAK+mB,KAAKxZ,QAAQwZ,IAAQ/mB,KAAKg9L,UAAU18L,OAAOymB,KAEhD/mB,KAAKg9L,UAAU1+E,OACvB,CAEA,iBAAWgqF,GACP,QAAOtoM,KAAK+mB,KAAKgwJ,MAAMhwJ,IAAQ/mB,KAAKg9L,UAAUC,WAAWl2K,QAEnD/mB,KAAK+mB,KAAK8oC,KAAK9oC,IAAQ/mB,KAAKg9L,UAAUC,WAAWl2K,MAC7C,IAEd,CAEOxe,OAAO0K,GAAQioD,IAClBl7D,KAAKg9L,UAAUz0L,OAAO2yD,IACtBl7D,KAAKyI,KAAKkF,eACd,CAEAvN,WAEA,CAEOy5J,UAAU52H,IACbA,GAAMirJ,gBACV,CAMOqa,aACHvoM,KAAK0pD,gBAAgBonB,KAAK,mBAC9B,CAAC7vE,SAAAjB,KAAA,mBAAAkB,mBArTQskM,IAA0BvmM,MAAAkC,MAAAlC,mBAAA6S,KAAA7S,MAAA8S,MAAA9S,MAAA2nE,KAAA,EAAA3lE,SAAAjB,KAAA,UAAAulB,EAAAlkB,IAAA,MAA1BmkM,GAA0BlkM,UAAA,yBAAAC,MAAA,GAAAC,KAAA,GAAAC,OAAA,s3XAAAC,SAAA,SAAAC,GAAAC,IAAA,EAAAD,KFrCvC1C,MAAA,eAAAA,CAAuD,oBAAvDA,CAAuD,mBAAvDA,CAAuD,yBAKvCA,MAAA,qCAEAA,MAAA,UAAAA,CAAoE,UAC1DA,MAAA,wBAAkBA,QACxBA,MAAA,6BAAmDA,MAAA,uBAAAgU,IAAA,OAAerR,GAAA6jM,YAAAxyL,GAAmB,qBAAEhU,MAAA,gBAASA,QAChGA,MAAA,eAAyCA,MAAA,0BAAS2C,GAAA2mM,YAAY,GAAEtpM,MAAA,kBAAWA,UAG/EA,MAAA,iCAA4CA,MAAA,oBAAAgU,IAAA,OAAArR,GAAAilM,UAAA5zL,GAAA9Q,IAAA,GAC5ClD,UAEJA,MAAA,6BACIA,MAAA,GAAAupM,GAAA,yBAAAvpM,CAoMe,GAAAwpM,GAAA,wBApMfxpM,CAoMe,GAAAypM,GAAA,wBApMfzpM,CAoMe,GAAA0pM,GAAA,sBApMf1pM,CAoMe,GAAA2pM,GAAA,uBApMf3pM,CAoMe,GAAA4pM,GAAA,wBA+hBnB5pM,cAKZA,MAAA,yBACIA,MAAA,GAAA6pM,GAAA,qBAAA7pM,CAIc,GAAA8pM,GAAA,qBAJd9pM,CAIc,GAAA+pM,GAAA,sBASlB/pM,gBAvwBUA,MAAA,UAAA2C,GAAAgkM,iBACS3mM,cAAA,OAAAA,MAAA,GAAAgqM,KAEGhqM,cAAA,wBAEQA,MAAA,GAAAA,MAAA,OAAAA,MAAA,KAAA2C,GAAAklM,WAAA,0CAIa7nM,MAAA,GAAAA,MAAA,QAAAA,MAAA,MAAA2C,GAAAklM,YAOoB7nM,MAAA,GAAAA,MAAA,WAAA2C,GAAAilM,WAChC5nM,cAAA,gCAsMAA,cAAA,6BAoFAA,cAAA,wBA0TAA,cAAA,wBAoBAA,cAAA,uBAmCAA,cAAA,kBA6FdA,cAAA,WAAAA,CAAY,+5BEptBhBumM,EAA0B,ODnBhC,IAAM0D,GAAmB,MAA1B,MAAOA,GAAmBjoM,SAAAjB,KAAA,mBAAAkB,mBAAnBgoM,GAAmB,EAAAjoM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAnB0jL,KAAmBjoM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAHxB+7H,KAAa2nD,SAAS7D,cAGjB4D,EAAmB,6CE0BzB,IAAME,GAAsB,MAA7B,MAAOA,GAAsBnoM,SAAAjB,KAAA,mBAAAkB,mBAAtBkoM,GAAsB,EAAAnoM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAtB4jL,KAAsBnoM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAhB3BwG,MACA0sK,KACA5L,KACAD,eAaKsc,EAAsB,iCCV5B,IAAMC,GAAsB,MAA7B,MAAOA,GAAsBpoM,SAAAjB,KAAA,mBAAAkB,mBAAtBmoM,GAAsB,EAAApoM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAtB6jL,KAAsBpoM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAb3BwG,MACAs1H,MACA+nD,MAEA3Q,eASK0Q,EAAsB,KCftBE,GAAkB,MAAzB,MAAOA,GAAkBtoM,SAAAjB,KAAA,mBAAAkB,mBAAlBqoM,GAAkB,EAAAtoM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAlB+jL,KAAkBtoM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAXvBwG,gBAWKs9K,EAAkB,qBCMxB,IAAMC,GAAmB,MAA1B,MAAOA,GAAmBvoM,SAAAjB,KAAA,mBAAAkB,mBAAnBsoM,GAAmB,EAAAvoM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAnBgkL,KAAmBvoM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UATxBwG,MACAs1H,MACAkoD,eAOKD,EAAmB,KCInBE,GAAqB,MAA5B,MAAOA,GAAqBzoM,SAAAjB,KAAA,mBAAAkB,mBAArBwoM,GAAqB,EAAAzoM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAArBkkL,KAAqBzoM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAlB1BwG,MACAs1H,gBAiBKmoD,EAAqB,KCLrBC,GAAqB,MAA5B,MAAOA,GAAqB1oM,SAAAjB,KAAA,mBAAAkB,mBAArByoM,GAAqB,EAAA1oM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAArBmkL,KAAqB1oM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAV1BwG,MACAG,KAEAusK,KACA7L,eAMK6c,EAAqB,KCDrBC,GAA6B,MAApC,MAAOA,GAA6B3oM,SAAAjB,KAAA,mBAAAkB,mBAA7B0oM,GAA6B,EAAA3oM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAA7BokL,KAA6B3oM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAZlCwG,MACAs1H,MAEAo3C,eASKiR,EAA6B,iCCenC,IAAMC,GAAwB,MAA/B,MAAOA,GAAwB5oM,SAAAjB,KAAA,mBAAAkB,mBAAxB2oM,GAAwB,EAAA5oM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAxBqkL,KAAwB5oM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UArB7BwG,MACAs1H,MAEAuoD,MACAR,MAEA3Q,KACArJ,KACA8Z,aAaKS,EAAwB,KCfxBE,GAAiB,MAAxB,MAAOA,GAAiB9oM,SAAAjB,KAAA,mBAAAkB,mBAAjB6oM,GAAiB,EAAA9oM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAjBukL,KAAiB9oM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAbtBwG,MACA0sK,KACAp3C,gBAWKwoD,EAAiB,KCLjBC,GAAqB,MAA5B,MAAOA,GAAqB/oM,SAAAjB,KAAA,mBAAAkB,mBAArB8oM,GAAqB,EAAA/oM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAArBwkL,KAAqB/oM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAV1BwG,MACAs1H,gBASKyoD,EAAqB,sGCb3B,ICuCMC,GAAuB,MAA9B,MAAOA,GAAuBhpM,SAAAjB,KAAA,mBAAAkB,mBAAvB+oM,GAAuB,EAAAhpM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAvBykL,KAAuBhpM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAbhCwG,MACAG,eAYS69K,EAAuB,WAvBhC7sB,KAAmB,CAAAj8K,kBAAA2Q,eAEnBsxK,KACA6E,KAEAoB,KACA1C,MAAwB,UAJxBvD,KAAoB,CAAAjiL,kBAAA2Q,UACpBm2K,KACAnV,MAAoB,UAEpB6T,KAAwB,CAAA70K,UAJxBsxK,KAGAiG,MAAmB,UAEnBvY,KAA0B,CAAAh/J,UAP1BsrK,MAAmB,ICDhB,IAAM8sB,GAAyB,MAAhC,MAAOA,GAAyBjpM,SAAAjB,KAAA,mBAAAkB,mBAAzBgpM,GAAyB,EAAAjpM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAzB0kL,KAAyBjpM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAX9BwG,gBAWKi+K,EAAyB,KCQzBC,GAAsB,MAA7B,MAAOA,GAAsBlpM,SAAAjB,KAAA,mBAAAkB,mBAAtBipM,GAAsB,EAAAlpM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAtB2kL,KAAsBlpM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAhB3BwG,MACAs1H,MACAo3C,KACAvsK,KACAD,KACA89K,aAWKE,EAAsB,qBCA5B,IAAMC,GAAuB,MAA9B,MAAOA,GAAuBnpM,SAAAjB,KAAA,mBAAAkB,mBAAvBkpM,GAAuB,EAAAnpM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAvB4kL,KAAuBnpM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAX5BwG,MACAs1H,MACAo3C,KACA5L,KACAvrC,KACAsoD,gBAMKM,EAAuB,6CCR7B,IAAMC,GAAuB,MAA9B,MAAOA,GAAuBppM,SAAAjB,KAAA,mBAAAkB,mBAAvBmpM,GAAuB,EAAAppM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAvB6kL,KAAuBppM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAX5BwG,MACAs1H,MACA+oD,eASKD,EAAuB,6FCL9BE,GAAgBC,IAEhBC,GAAiBD,IAEjBE,GAAuBF,IAEvBG,GAAsBH,IAEtBI,GAAiBJ,IAGjBK,GAAkBC,IAClBD,GAAkBL,IAClBO,GAAkBD,IAwBjB,IAAME,GAAuB,MAA9B,MAAOA,GACTlrM,cACI0qM,cAAsB,CAClBS,KAAM,CACFC,aAAgB,OAGxBJ,cAAqB,CACjBG,KAAM,CACFC,aAAgB,MAG5B,CAACjqM,SAAAjB,KAAA,mBAAAkB,mBAZQ8pM,GAAuB,EAAA/pM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAvBwlL,KAAuB/pM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UArB5B6kL,KACAD,GACAp+K,MAgBAq+K,eAGKU,EAAuB,KC7BvBG,GAAkB,MAAzB,MAAOA,GAAkBlqM,SAAAjB,KAAA,mBAAAkB,mBAAlBiqM,GAAkB,EAAAlqM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAlB2lL,KAAkBlqM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAZvBwG,MACAs1H,MACAyoD,GACAgB,aASKG,EAAkB,qBCExB,IAAMC,GAAiB,MAAxB,MAAOA,GAAiBnqM,SAAAjB,KAAA,mBAAAkB,mBAAjBkqM,GAAiB,EAAAnqM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAjB4lL,KAAiBnqM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAhBtBqkL,MACAnR,eAeKyS,EAAiB,qBCPvB,IAAMC,GAAwB,MAA/B,MAAOA,GAAwBpqM,SAAAjB,KAAA,mBAAAkB,mBAAxBmqM,GAAwB,EAAApqM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAxB6lL,KAAwBpqM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAV7BwG,MACAs1H,gBASK8pD,EAAwB,KC0BxBC,GAAmB,MAA1B,MAAOA,GAAmBrqM,SAAAjB,KAAA,mBAAAkB,mBAAnBoqM,GAAmB,EAAArqM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAnB8lL,KAAmBrqM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAlBxBwG,MACAs1H,MACAuoD,MACA39K,KACAo/K,MAEAnC,GACAO,GACAhR,eAUK2S,EAAmB,KChBnBE,GAAoB,MAA3B,MAAOA,GAAoBvqM,SAAAjB,KAAA,mBAAAkB,mBAApBsqM,GAAoB,EAAAvqM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAApBgmL,KAAoBvqM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAP7BwG,MACA69K,MACAR,MACA3Q,eAIS6S,EAAoB,4CCjB3B,SAAUC,KACd,OAAOC,IACT,CAmBO,IAAMC,GAA2B,MAAlC,MAAOA,GAA2B1qM,SAAAjB,KAAA,mBAAAkB,mBAA3ByqM,GAA2B,EAAA1qM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAA3BmmL,KAA2B1qM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAXpCwG,MACA2/K,MAAalrL,QAAQ,CAAEgrL,OAAQD,eAUtBE,EAA2B,KCnB3BE,GAAsB,MAA7B,MAAOA,GAAsB5qM,SAAAjB,KAAA,mBAAAkB,mBAAtB2qM,GAAsB,EAAA5qM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAtBqmL,KAAsB5qM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,WAAtBomL,EAAsB,KCoGtBC,GAAkB,MAAzB,MAAOA,GAAkB7qM,SAAAjB,KAAA,mBAAAkB,mBAAlB4qM,GAAkB,EAAA7qM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAlBsmL,KAAkB7qM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAtFvBwG,MACAs1H,MACAgqD,MACAn/K,KAEAusK,KACAgR,GACAyB,GACAhC,GACA9Z,KACA6a,GACArd,KACAC,eA0EK+e,EAAkB,sMC3FxB,IAAMC,GAAiB,MAAxB,MAAOA,GAAiB9qM,SAAAjB,KAAA,mBAAAkB,mBAAjB6qM,GAAiB,EAAA9qM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAjBumL,KAAiB9qM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAf1BwG,gBAeS8/K,EAAiB,KCkBjBC,GAAiB,MAAxB,MAAOA,GAAiB/qM,SAAAjB,KAAA,mBAAAkB,mBAAjB8qM,GAAiB,EAAA/qM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAjBwmL,KAAiB/qM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAftBwG,MACAs1H,MACAo3C,KACAyS,GACAW,GACAzC,gBAUK0C,EAAiB,KClBjBC,GAAyB,MAAhC,MAAOA,GAAyBhrM,SAAAjB,KAAA,mBAAAkB,mBAAzB+qM,GAAyB,EAAAhrM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAzBymL,KAAyBhrM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAd9BwG,MACAG,eAaK6/K,EAAyB,KCHzBC,GAAyB,MAAhC,MAAOA,GAAyBjrM,SAAAjB,KAAA,mBAAAkB,mBAAzBgrM,GAAyB,EAAAjrM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAzB0mL,KAAyBjrM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAX9BwG,MACAG,KACAD,eASK+/K,EAAyB,qBCQ/B,IAAMC,GAAmB,MAA1B,MAAOA,GAAmBlrM,SAAAjB,KAAA,mBAAAkB,mBAAnBirM,GAAmB,EAAAlrM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAnB2mL,KAAmBlrM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAhBxBwG,MACAs1H,MAEAo3C,KACAyS,GACAte,eAWKqf,EAAmB,WAPxBnc,KAAsB,CAAA7uL,8BAAA2Q,IAAAC,UAAA60D,MAAA,CAAAzlE,QCoEvB,IAAMirM,GAAoB,MAA3B,MAAOA,GAAoBnrM,SAAAjB,KAAA,mBAAAkB,mBAApBkrM,GAAoB,EAAAnrM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAApB4mL,KAAoBnrM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAlDzBwG,MACAs1H,MACAn1H,KACA09K,MACAR,MACAn9K,KAEAw9K,GACAP,GACAzQ,KACArJ,KACA6c,GACAf,GACAE,GACAO,GACAC,GACA/e,KACAD,eAiCKsf,EAAoB,KCtDpBC,GAAiB,MAAxB,MAAOA,GAAiBprM,SAAAjB,KAAA,mBAAAkB,mBAAjBmrM,GAAiB,EAAAprM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAjB6mL,KAAiBprM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAtBtBwG,MACAs1H,MACA+nD,MACAiC,MAEA5S,eAiBK0T,EAAiB,KCMjBC,GAAmB,MAA1B,MAAOA,GAAmBrrM,SAAAjB,KAAA,mBAAAkB,mBAAnBorM,GAAmB,EAAArrM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAnB8mL,KAAmBrrM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UAvBxB4lL,GACA9pD,MACAo3C,KACA1sK,MACAo9K,aAmBKiD,EAAmB,KCJnBC,GAAmB,MAA1B,MAAOA,GAAmBtrM,SAAAjB,KAAA,mBAAAkB,mBAAnBqrM,GAAmB,EAAAtrM,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAnB+mL,KAAmBtrM,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UA1BxB87H,MACAt1H,gBAyBKsgL,EAAmB,qBCqIzB,IAAMp0F,GAAa,MAApB,MAAOA,GAAal3G,SAAAjB,KAAA,mBAAAkB,mBAAbi3G,GAAa,EAAAl3G,SAAAjB,KAAA,UAAAulB,EAAAC,IAAA,MAAb2yF,KAAal3G,SAAAjB,KAAA,UAAAulB,EAAAE,IAAA,UArGlByjL,GACAsD,MACA1f,KAEAsc,GAEAC,GACAE,GACAC,GACAE,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,GACA9a,KACA8c,GACA/B,GACAe,GACAH,GACArS,KACArJ,KACAma,KACAgD,KACArB,GACAsB,KACArB,GACAA,GACAkB,GACAjB,GACAE,GACAG,GACAA,GACAtB,GACAwB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,GACArf,KACAsf,GACAC,GAGArgL,MACAs1H,MACAn1H,KACAD,KACAwgL,KACApB,MAGAze,KAEAsc,GAEAC,GACAE,GACAC,GACAE,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,GACAgC,GACA/B,GACAe,GACAH,GACArS,KACArJ,KACAma,KACAgD,KACArB,GACAsB,KACArB,GACAkB,GACAjB,GACAE,GACAG,GACAtB,GACAwB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,GACArf,KACAsf,GACAC,aAGKn0F,EAAa,oECjKnB,IAAMy0F,EAAuB,MAA9B,MAAOA,EAEX9sM,cAAgB,CAACmB,SAAAjB,KAAA,mBAAAkB,iBAFN0rM,EAAuB,EAAA3rM,SAAAjB,KAAA,UAAAklC,EAAA7jC,IAAA,MAAvBurM,EAAuBtrM,UAAA,8BAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,2DAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICRpC1C,MAAA,WACEA,MAAA,UAAAA,CAAyC,UAAzCA,CAAyC,WAG3CA,wKDIa2tM,CAAuB,+EEC7B,IAAMnD,EAA2B,MAAlC,MAAOA,EAA2BxoM,SAAAjB,KAAA,mBAAAkB,iBAA3BuoM,EAA2B,EAAAxoM,SAAAjB,KAAA,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AE,GACNue,EAAIve,EAAE,GACNs3T,EAAKr3T,EAAE,GAAK2xB,EACZ2lS,EAAKt3T,EAAE,GAAKse,EAEhB,GAAW,IAAP+4S,GAAmB,IAAPC,EAAU,CAEtB,IAAIz8V,IAAMs8V,EAAKxlS,GAAK0lS,GAAMD,EAAK94S,GAAKg5S,IAAOD,EAAKA,EAAKC,EAAKA,GAEtDz8V,EAAI,GACJ82D,EAAI3xB,EAAE,GACNse,EAAIte,EAAE,IAECnlC,EAAI,IACX82D,GAAK0lS,EAAKx8V,EACVyjD,GAAKg5S,EAAKz8V,EAElB,CAEAw8V,SAAKF,EAAKxlS,GAGE0lS,GAFZC,EAAKF,EAAK94S,GAEYg5S,CAC1B,CA/JI3B,EAAMjtE,UAASitE,EAAQA,EAAMjtE,SAEjCorC,GAAOyjC,QAAU74I,EACjBo1G,mBAAyBp1G,oBCPzB,IAAAr0M,EAAA,CACA,aACA,gBACA,YACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,mBACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,aACA,gBACA,YACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,YACA,gBACA,mBACA,gBACA,mBACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,sBACA,kBACA,qBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,iBACA,oBACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,gBACA,mBACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,gBACA,mBACA,eACA,aACA,gBACA,iBACA,oBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,cACA,iBACA,aACA,gBACA,cACA,iBACA,cACA,mBACA,sBACA,iBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,mBACA,sBACA,aACA,gBACA,gBACA,mBACA,eACA,kBACA,gBACA,mBACA,gBACA,oBAIA,SAAAmtV,EAAA9tU,GACA,IAAA/e,EAAA8sV,EAAA/tU,GACA,OAAAmqS,EAAAlpT,EACA,CACA,SAAA8sV,EAAA/tU,GACA,IAAAmqS,EAAAx8N,EAAAhtF,EAAAqf,GAAA,CACA,IAAAgQ,EAAA,IAAAo0E,MAAA,uBAAApkF,EAAA,KACA,MAAAgQ,EAAA4I,KAAA,mBACA5I,CACA,CACA,OAAArvB,EAAAqf,EACA,CACA8tU,EAAAtrU,KAAA,WACA,OAAAD,OAAAC,KAAA7hB,EACA,EACAmtV,EAAAl+T,QAAAm+T,EACA3jC,GAAAyjC,QAAAC,EACAA,EAAA7sV,GAAA","names":["i0","_r2","ctx_r1","closeBanner","_c0","ctx_r0","isBannerOpen","tmp_0_0","options$","type","tmp_1_0","message","BannerComponent","constructor","_store$","this","_destroyed$","Subject","bannerAnimDelayMs","ngOnInit","isOpen$","select","fromRoot","pipe","takeUntil","subscribe","isOpen","setTimeout","ngOnDestroy","next","complete","dispatch","static","t","i1","_angular_core__WEBPACK_IMPORTED_MODULE_2__","Xpm","selectors","decls","vars","consts","template","rf","ctx","BannerComponent_ng_container_0_Template","ctx_r13","isUrlEqualToLink","item_r12","link","highlight","name","ctx_r14","_r18","$implicit","ctx_r17","onItemClick","BreadcrumbToolbarComponent_li_4_span_1_Template","BreadcrumbToolbarComponent_li_4_span_2_Template","option_r23","_r25","ctx_r24","BreadcrumbToolbarComponent_ng_container_8_li_1_involve_menu_1_involve_menu_button_6_Template","ctx_r21","itemsExcludingHighlight","_r28","item_r19","ctx_r26","BreadcrumbToolbarComponent_ng_container_8_li_1_involve_menu_1_Template","ctx_r20","length","BreadcrumbToolbarComponent_ng_container_8_li_1_Template","button_r31","iconCode","icon","label","_r39","ctx_r38","dropdownButtonClick","BreadcrumbToolbarComponent_ng_container_9_button_3_involve_icon_1_Template","BreadcrumbToolbarComponent_ng_container_9_button_3_app_svg_icon_2_Template","BreadcrumbToolbarComponent_ng_container_9_button_3_span_4_Template","toLowerCase","replace","tooltipTag","BreadcrumbToolbarComponent_ng_container_9_button_3_Template","ctx_r2","dropdownOptions","button_r41","_r43","ctx_r42","buttonClick","classes","BreadcrumbToolbarComponent_ng_container_12_button_1_Template","ctx_r3","buttonsForHeader","_r49","ctx_r48","toggleReloadActiveState","_r51","ctx_r50","ctx_r47","timeLeft","BreadcrumbToolbarComponent_ng_container_15_section_1_app_svg_icon_1_Template","BreadcrumbToolbarComponent_ng_container_15_section_1_app_svg_icon_2_Template","_r53","ctx_r52","onRefreshIconClick","BreadcrumbToolbarComponent_ng_container_15_section_1_div_5_Template","ctx_r44","reloadActivated","loading","rate","BreadcrumbToolbarComponent_ng_container_15_section_1_Template","ctx_r4","refreshRate","_r61","ctx_r60","onToggleHome","_r63","ctx_r62","_r65","ctx_r64","onToggleFavorite","BreadcrumbToolbarComponent_ng_container_16_app_svg_icon_2_Template","BreadcrumbToolbarComponent_ng_container_16_ng_template_3_Template","BreadcrumbToolbarComponent_ng_container_16_app_svg_icon_5_Template","BreadcrumbToolbarComponent_ng_container_16_ng_template_6_Template","ctx_r5","favoriteId","_r56","isDefault","_r59","_r67","ctx_r66","ctx_r7","ctx_r68","_r70","ctx_r69","BreadcrumbToolbarComponent_involve_menu_button_21_span_4_Template","ctx_r8","_r72","ctx_r71","ctx_r9","_r74","ctx_r73","ctx_r10","option_r75","_r77","ctx_r76","_r6","toggle","BreadcrumbToolbarComponent","_cdr","_store","_tileHeaderButtons","_route","showSelectedPath","maxPath","showSelectedDashboard","showSelectedTile","showSelectedSitemapGroup","showSelectedAsset","canReload","isReloading","canFavorite","selectedTileId","currentRefreshRate","pollColor","status","refreshActionIds","isTileLoading","hideReload","hideFavorite","_refresh$","_excludedFsWithNoRefresh","_excludedFsWithManualRefresh","refreshAnimationLength","timeStep","_loading","favoriteObject","fromRouter","url","split","join","fromCore","buttons","createHeaderButtons","combineLatest","fromDashboard","options","selectedDashboard","selectedTile","root","selectedPath","selectedSitemapGroup","selectedAsset","getDashboards","drawerOpen","formUpdated","reloadDisactivated","isReloadHidden","initRefresh","createBreadcrumbItems","PresentAlarmsIsLoading$","fromPresentAlarms","RuntimeMetricsIsLoading$","fromRuntimeMetrics","SystemEventDiagnosticsTileIsLoading$","fromSystemEventDiagnosticTile","AlarmsTileIsLoading$","fromAlarmsTile","UnitInfoIsLoading$","fromUnitInfo","ReportHistoryIsLoading$","fromCreatedReports","ReportSchedulesIsLoading$","fromReports","presentAlarmsTileLoading","runtimeMetricsTileLoading","systemEventDiagnosticsTileIsLoading","alarmsTileLoading","unitInfoTileLoading","reportHistoryTileLoading","reportSchedulesTileLoading","setLoading","v","ADRUM","window","virtualPageName","items","forEach","item","command","isDisactivated","detectChanges","setTimerProps","fromUser","favoriteObj","selectedDashboardId","selectedAssetId","selectedSitemapGroupId","currentDashboardId","IsDefault","dashboardId","tileId","assetId","sitemapGroupId","clearTimer","ngOnChanges","changes","onBack","onReload","reloadFullscreen","actionId","loadActions","payload","button","action","routerLink","indexOf","relativeTo","queryParams","callback","selectFromCommandState","fromDataTile","commandState","isCommandStateLoading","getPollStatusColor","getStatus","markForCheck","onReloadActiveStateUpdated","reloadState","setRefreshTimer","actionIds","setRefreshRate","includes","mobileDropdownOptions","filter","hideFromMobile","slice","push","map","sitemapGroup","availableDashboards","assetTypeId","find","dashboard","id","isAdmin","title","splice","toString","value","clearTimeout","refreshTimeout","startRefreshAnimation","startTimer","interval","setInterval","clearInterval","userFavoriteActions","i2","i3","_angular_core__WEBPACK_IMPORTED_MODULE_20__","inputs","features","BreadcrumbToolbarComponent_li_4_Template","BreadcrumbToolbarComponent_ng_container_8_Template","BreadcrumbToolbarComponent_ng_container_9_Template","BreadcrumbToolbarComponent_ng_container_12_Template","BreadcrumbToolbarComponent_ng_container_15_Template","BreadcrumbToolbarComponent_ng_container_16_Template","BreadcrumbToolbarComponent_involve_menu_button_20_Template","BreadcrumbToolbarComponent_involve_menu_button_21_Template","BreadcrumbToolbarComponent_involve_menu_button_22_Template","BreadcrumbToolbarComponent_involve_menu_button_23_Template","BreadcrumbToolbarComponent_involve_menu_button_24_Template","hideButtons","customer_r2","Name","$event","_r4","onSelect","CustomerAccessComponent_section_0_involve_option_10_Template","customerLogoPath$","platformName","selectedCustomer$","customers$","_c1","CustomerAccessComponent","router","_appSettingsService","isFullScreenMode","getPlatformName","customer","isReportEmailLink","Id","customerName","_angular_core__WEBPACK_IMPORTED_MODULE_5__","CustomerAccessComponent_section_0_Template","oneTrustService","showSettings","FooterComponent","_angular_core__WEBPACK_IMPORTED_MODULE_1__","FooterComponent_a_2_Template","otEnabled","customer_r13","_r15","HeaderComponent_ng_container_12_involve_option_4_Template","HeaderComponent_ng_container_13_div_6_span_1_Template","ctx_r16","selectedFilterName$","HeaderComponent_ng_container_13_div_6_Template","selectedTile$","selectedDashboard$","showFilter$","customer_r18","count_r19","notificationAcknowledgeAll","count_r23","HeaderComponent_involve_menu_button_26_span_1_Template","HeaderComponent_involve_menu_button_26_ng_template_3_Template","unacknowledgedNotificationCount$","_r22","_r33","notification_r26","ctx_r31","goToUnitData","ctx_r28","assetEntities","timestamp","toLocaleString","_r37","ctx_r35","goToUnitControls","ctx_r29","ctx_r41","rebootDevice","unitCreationLogId","_r46","goToHardwareConfig","HeaderComponent_involve_menu_button_30_ng_container_7_ng_container_9_Template","HeaderComponent_involve_menu_button_30_ng_container_7_ng_container_10_Template","ctx_r30","isComplete","isFailed","_r52","ctx_r51","notificationAcknowledge","HeaderComponent_involve_menu_button_30_div_3_Template","HeaderComponent_involve_menu_button_30_ng_container_5_Template","HeaderComponent_involve_menu_button_30_ng_container_6_Template","HeaderComponent_involve_menu_button_30_ng_container_7_Template","ctx_r53","notificationDeleteClick","acknowledged","dashboard_r54","_c2","customer_r56","HelpContactPhone","HeaderComponent_ng_template_50_ng_container_0_div_5_strong_1_Template","HelpContactPhoneIntl","ctx_r59","helpLinkLabel","HelpContactEmail","helpLinkName","eula_r67","EulaFileName","PrivacyFileName","CookieFileName","HeaderComponent_ng_template_50_ng_container_0_ng_container_7_strong_3_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_7_a_4_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_7_a_5_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_7_a_6_Template","link_r76","uri","target","text","HeaderComponent_ng_template_50_ng_container_0_ng_container_9_ng_container_2_a_1_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_9_ng_container_2_a_2_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_9_ng_container_2_span_3_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_9_ng_container_2_Template","ctx_r61","links","version","HeaderComponent_ng_template_50_ng_container_0_div_4_Template","HeaderComponent_ng_template_50_ng_container_0_div_5_Template","HeaderComponent_ng_template_50_ng_container_0_div_6_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_7_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_9_Template","HeaderComponent_ng_template_50_ng_container_0_ng_container_10_Template","HelpContactName","ctx_r55","eula$","HeaderComponent_ng_template_50_ng_container_0_Template","ctx_r11","customer$","HeaderComponent","adminDashboards$","isMainMenuOpen$","customerLogo$","themeId$","user$","fullName$","user","FirstName","LastName","initials$","sortedNotifications$","notificationCount$","supportOverlayOpen","fromGlobalFilter","getLinks","getVersion","getHelpLinkLabel","getHelpLinkName","FavoritesActions","globalFilterActions","ColorThemeActions","AssetNamePreferenceActions","tap","params","toggleSideNav","notificationId","_notificationsMenu","Tiles","unitData","controls","Dashboards","SupportSuite","addNewUnit","supportModal","getAssetName","fromSitemap","handleLogout","handleFilters","handleRedirectingStorage","_angular_core__WEBPACK_IMPORTED_MODULE_15__","viewQuery","HeaderComponent_ng_container_12_Template","HeaderComponent_ng_container_13_Template","HeaderComponent_involve_option_18_Template","HeaderComponent_div_23_Template","HeaderComponent_involve_menu_button_26_Template","HeaderComponent_ng_template_28_Template","HeaderComponent_involve_menu_button_30_Template","HeaderComponent_involve_menu_button_42_Template","HeaderComponent_ng_template_50_Template","tmp_2_0","tmp_3_0","PlatformName","_r7","_c3","UserId","_r10","platformName_r1","HomeComponent","_appSettings","componentActive","homeBlurb","getHomeBlurb","take","localStorage","sitemapGroupdId","isNaN","RedirectSitemapGroupId","RedirectAssetId","RedirectTileId","RedirectParams","JSON","parse","customerName$","platformName$","trim","favoritesData$","fromFavorites","takeWhile","withLatestFrom","favoritesData","dashboards","favorite","home","dash","AssetId","SitemapGroupId","tileHome","tile","fullscreenId","tileVersion","db","tiles","_angular_core__WEBPACK_IMPORTED_MODULE_6__","HomeComponent_ng_container_5_Template","NoAccessComponent","OfflineComponent","Page404Component","CoreStoreModule","forRoot","StoreModule","forFeature","reducers","EffectsModule","fromAggregateAlarmHistory","fromAggregateFleetVitals","fromAggregateRuntime","fromAlarmGroups","fromAlarmStates","fromAlarmTests","fromAlarmTypes","fromAlertSchedules","fromAlertScheduleTimes","fromAlarmSuppression","fromApplications","fromAssets","fromAssetTypes","fromAuth","fromCellularProviders","fromCommLoss","fromCommLossTypes","fromCompanies","fromControlAdmin","fromCountries","fromCustomers","fromCustomerUserAccessFilter","fromDashboards","fromDatapoints","fromDealers","fromDerivedDataPoints","fromDeviceSearchResults","fromECMSerialNumberSuffixes","fromEMO","fromEventCodes","fromEventParties","fromFeatureAccess","fromFleetVitals","fromGaugeTypes","fromGeofences","fromGlobalColors","fromGlobalJobTitles","fromGlobalTimezones","fromGPSConfig","fromIcons","fromIndustries","fromLocationGPSHistory","fromNotificationTypes","fromOnboardingEventLogs","fromOnboardingQueue","fromPlatFormServiceSettings","fromSerialNumberPrefixes","fromSitemapGroups","fromStreamingTemplates","fromStreamingTemplateConfig","fromSupport","fromSystemEventDiagnostics","fromSystemStatus","fromTiles","fromTimeIntervalDropdowns","fromToolTips","fromTripConfig","fromTripSummary","fromUnitsOfMeasure","fromUnitStates","fromUserAlertRecipients","fromUserGlobalFilterDataPointGroup","fromUserGroups","fromUserPermissions","fromUserSession","fromVIM","fromDealerVim","fromUnitsOfMeasureConversions","deviceControls","fromUnitControl","fromControlHistory","fromBrands","core","oAB","cJS","SupportStoreModule","fromNavigation","fromUnitCreation","fromDeviceInfo","fromCommTypeInfoForm","fromCommsLossSettingsForm","fromAssignDataPointsForm","fromHardwareConfigurationForm","fromServerUIConfigurationForm","fromRuntimeForm","fromUnitData","fromAlarmsForm","fromUnitValidation","fromUnitReview","fromLegendEditor","fromCreateFromExistingAsset","GlobalFilterService","_http","loadSavedGlobalFilters","get","loadSavedFilter","data","mapSavedFilter","categoriesArray","newSavedFilter","category","CategoryId","FilterId","FilterLabel","IsTemporary","Options","option","subCategoryObj","obj","SubcategoryId","firstOption","subOption","OptionId","Value","deleteSavedGlobalFilter","delete","loadFilterCategories","loadOptionsList","mergedId","categoryId","subCategoryId","optionsList","saveNewGlobalFilter","body","post","updateGlobalFilter","put","Yz7","factory","ɵfac","providedIn","GlobalFilterEffects","_globalFilterService","_actions$","LoadSavedGlobalFilters$","createEffect","ofType","SavedFiltersActions","switchMap","savedGlobalFilters","catchError","error","of","LoadFilterCategories$","CategoriesActions","filterCategories","LoadSavedFilter$","EditFilterActions","mergeMap","filterId","savedFilter","EMPTY","DeleteSavedGlobalFilter$","globalFilterId","successPayload","actions","failPayload","from","SetSelectedOptionsList$","OptionsActions","isLoaded","LoadSelectedOptionsList$","_","optionList","LoadRequiredOptionsList$","SetEditedUnits$","unitIds","unitsList","allAssets","units","asset","FilterUnitsActions","SaveNewFilter$","GeneralFilterActions","postData","UpdateNewFilter$","ClearGlobalFilter$","GlobalFilterModule","CommonModule","SharedModule","ReactiveFormsModule","FormsModule","AuthInterceptor","_authService","_refreshTokenInProgress","_refreshTokenSubject$","BehaviorSubject","intercept","request","startsWith","getAuthServiceUri","handle","response","environment","production","throwError","isAuthenticated","token","moment","expiration","diff","Date","HttpErrorResponse","addAuthenticationToken","result","newToken","refreshToken","clone","setHeaders","Authorization","accessToken","CustomerIdentityInterceptor","selectedCustomerId","CustomerId","GlobalFilterIdInterceptor","filterRequest","headers","set","TimezoneOffsetInterceptor","offset","getTimezoneOffset","TimeZoneOffset","ResponseInterceptor","HttpResponse","isApiError","statusCode","statusText","RequestInterceptor","getEndpointUrl","getHeaders","reduce","acc","header","getApiBaseUri","INTERCEPTORS","provide","HTTP_INTERCEPTORS","useClass","multi","CacheInterceptor","req","authReq","UnitAlertsService","http","alarmStates$","loadUnitAlertHistory","dateFrom","dateTo","topNRecords","HttpParams","alerts","alarmStates","alert","AcknowledgeState","AcknowledgeUserId","AlarmStateName","AlarmStateId","AlarmStateColor","Color","AlarmValueWithUnit","AlarmValue","Units","AlarmThresholdWithUnit","AlarmThreshold","IsSuppressed","SuppressedCount","loadUnitAlertsRecipients","alertHistoryId","loadUserListNotificationRecipients","loadUnitAlertsLogs","alarmId","UnitAlarmHistoryEffects","unitAlertsService","store$","actions$","loadUnitAlertHistory$","unitAlarmHistoryActions","DateUtils","subtract","Object","keys","unitAlerts","loadUnitAlertRecipients$","unitAlarmHistoryRecipientsActions","alertRecipients","err","loadUnitAlertLogs$","unitAlarmHistoryLogsActions","alertLogs","load$","userList","UnitAlarmHistoryStoreModule","CoreModule","imports","HttpClientModule","ModalModule","SitemapModule","DashboardStoreModule","RuntimeStoreModule","SystemVitals","Utilization","Optimize","Notifications","Analytics","Troubleshoot","RemoteServices","Reports","Maintenance","UnitVitals","AdminSettings","Activity","Performance","RailVitals","FleetView","Support","Trends","AlarmStates","Present","Cleared","Invalid","Reset","Industry","Misc","OilAndGas","DemandGenerator","WasteWater","Rail","Marine","alarmHistory","siteEditor","configurationManager","controlAdmin","pressuresTemperatures","aggregatedFleetVitals","compressorDriver","unitFlow","unitNotificationRecipients","alarmSuppression","eventFrequencies","eventsDiagnostics","logFiles","operationsHistory","preventativeMaintenance","remoteServices","repeatFaultCodes","assetRuntimeMetrics","aggregateRuntimeMetrics","supportTicketHistory","trendsV1","ACM","unitInfo","workOrders","systemStatus","systemEventDiagnostics","presentAlarms","adminUserList","adminCommLoss","adminRuntime","unitAlarms","requestReport","scheduledReports","reportHistory","adminNotificationSettings","horsepower","fleetVolume","fuelConsumption","emissions","fleetOpportunity","pockets","unitOpportunity","siteVisualizations","fuel","CO2Emmissions","priorityData","fleetEditor","unitConfigQueue","utilization","unitAlarmsNotifications","platformSupport","rawData","onboarding","catInspect","alarmEditor","catInspectUnit","systemStatusv2","historicalTracking","aggregateUtilization","emo","fleetVitals","aggregateAlarmHistory","trendsV2","dealerVims","tripReports","controlHistory","derivedDataPoints","unitAlarmsEdit","UserStatusIds","Expired","Warning","Disabled","AssetExistsGuard","canActivate","isLoading","entities","AuthGuard","appSettings","route","routerState","isAuthenticating","state","atob","accessCode","stateParam","fromB2C","redirectToCWS","codeVerifier","seed","redirectUrl","canActivateChild","DashboardExistsGuard","SitemapGroupExistsGuard","FullscreenAccessGuard","userPermissionService","tileFullscreenTag","initialize","tag","hasAccess","__id","Notification","DemandPollStatusNotification","commandId","super","UnitControlStatusNotification","RebootDeviceNotification","AppSettingsService","_document","rendererFactory","_renderer","createRenderer","loadEnvironmentConfig","getTime","path","location","protocol","host","firstValueFrom","then","i","Environment","DomainNames","_environment","loadVersion","_version","getCustomerTemplate","CustomerTemplate","getCwsRedirectUri","CwsRedirectUri","ApiBaseUri","AuthServiceUri","HelpLinkLabel","HelpLinkName","getB2CDomain","B2CDomain","getB2CRedirectUri","B2CRedirectUri","getApplication","Application","getLogoutUri","LogoutUri","getCwsAdapter","CwsAdapter","Links","getScripts","Scripts","script","requiresConsent","getConsentRequiredScripts","HomeBlurb","cypress","Cypress","Headers","setAppColorTheme","themeId","_this","_asyncToGenerator","themePath","headEl","head","linkEl","createElement","setAttribute","Promise","resolve","reject","onload","onerror","e","insertBefore","querySelector","_themeLink","removeChild","loadScripts","scripts","_this2","j","injectScript","scriptType","className","onLoad","timeout","console","log","src","loadConsentRequiredScripts","_this3","_this4","targetEl","getElementsByTagName","element","appendChild","innerHTML","addClass","addEventListener","DOCUMENT","_angular_core__WEBPACK_IMPORTED_MODULE_3__","appSettingsInitFn","AssetService","loadUnitToEdit","getEntities","getAlarms","getAlarmGroupAlertScheduleRecipients","getAlarmHistoryCounts","startDate","endDate","getAlertHistoryRecipientCount","getDatapoints","getDatapointsHistorical","toISOString","getDatapointsHistoricalMostRecent","limit","mostRecent","getDatapointSettings","getTypes","getEventsDiagnostics","undefined","getCDSSISUrl","event","serialNumber","mId","component","failure","createDemandPollCommand","pollUnitData","customOverride","createSnapshotPoll","responseType","downloadSnapshotFile","snapShotFile","getSnapshotFileDatapoints","getGlobalFilterAssetIds","getDeviceInfo","getTargetAssets","sourceCustId","sourceSectionId","destCustId","destSectionId","moveAsset","getSuppressingAlarms","createSuppressingAlarm","AlarmId","deleteSuppressingAlarm","suppressionSetId","updateSuppressingAlarm","getSuppresseeAlarms","suppressorId","createSuppresseeAlarms","suppresseeAlarmIds","deleteSuppresseeAlarms","alarmIds","_angular_core__WEBPACK_IMPORTED_MODULE_0__","DatapointsService","getIdentifiers","getIdentifierDefaults","saveIdentifierDefaults","defaults","getCustomerIdentifiers","getDisplayGroups","addDisplayGroup","displayGroup","saveDisplayGroups","displayGroups","getDatapointLegend","datapointId","getDatapointLegends","dataPointIdsCsv","legends","sort","a","b","getDatapointDisplayProperty","includeED","includeDisabled","saveDatapointDisplayProperty","model","HttpHeaders","disableDatapoint","addPriorityDataPointIdentifier","dataPointIdentifierModelList","enableDataPoints","datapoints","hideDataPoints","AggregateAlarmHistoryService","getAggregateAlarmHistory","alarmstateId","format","AlarmGroupService","save","alarmGroup","alarmGroupId","newAlarmGroupId","AlarmStateService","getAll","AlarmTestService","AlertScheduleService","alertSchedule","alertScheduleId","newAlertScheduleId","getTimes","saveTime","alertScheduleTime","deleteTime","alertScheduleTimeId","ApplicationService","AssetTypeService","AuthService","forceRefresh","code","btoa","stringify","codeChallenge","href","getDebugToken","cwsLoginId","getAccessToken","revokeToken","logout","CelluarProviderService","CommLossTypeService","CommLossStatusService","siteMapGroupId","update","getComms","deivceId","CompanyService","getAllCompanies","company","ControlAdminService","getControlDatapoints","saveControlDatapoint","control","CountryService","CustomerService","getAggregationSettings","getTileDefaults","TileActions","DashboardService","newDashboards","cloneDeep","DealerService","DerivedDataPointsService","getItems","dataPointId","derivedDataPoint","create","validateFormula","validationrequest","evaluateFormula","evaluationrequest","getEvaluationTypes","getItemTypes","getLegendItems","DeviceSearchResultService","searchStr","searchBy","searchType","httpOptions","EmoService","getOverhaul","getOverhaulTypes","getOverhaulIntervals","createOverhaul","assetOverhaul","saveOverhaul","deleteOverhaul","emoAssetOverhaulId","getAssessments","createNonOverhaulAssessment","nonOverhaulAssessment","saveAssessment","emoAssetAssessmentId","saveAssessmentRecommendedHours","recommendedHours","standardHours","saveAssessmentItems","saveCatInspectRisks","getAssessmentCategories","getEMORiskLevels","getEMOOverview","FeatureAccessService","loadAllUserDashboards","loadAllUserDashboardsTileAccess","loadUserAccess","userId","userAccess","saveUserAccess","access","FleetVitalsService","getFleetVitals","utc","getAggregateFleetVitals","actionListItems","GaugeTypeService","GeofenceService","geofence","geofenceId","GlobalColorService","GlobalTimezoneService","IconService","IndustryService","LocationService","getAssetGPSHistory","MachineInfoService","getMachineComponents","getMachineInfo","addMachineInfoComponent","ParentUnitMachineAssetComponentId","MachineComponentId","MachineComponentItems","deleteMachineInfoComponent","unitMachineAssetComponentId","saveMachineInfo","machineInfo","UnitCreationLogId","NotificationTypeService","OnboardingQueueService","loadAll","loadEventLogs","load","append","assign","make","customerId","resume","restart","PlatFormServiceSettings","getPlatFormServiceSettings","RawDataService","end","msgId","MsgId","UserSchedulesService","getUserSchedules","deleteScheduleReport","reportCustomerSettingRecipientId","SitemapGroupService","getDatapointValues","dpIdentifierCsv","getAlarmCountsByGroupAndSchedule","alarmGroupIdsCsv","saveBatchAlertRecipients","rootSitemapId","userIds","notificationTypeIds","alarmDetails","SupportService","getUnitCreationTypes","getUnitCreationLogs","createUnitCreationLog","unitCreationTypeId","getDataPointOccurrences","putDataPointOccurrences","occurrences","getEndpointTypes","getLogTypes","getUserLogs","scope","searchUserIds","searchAssetIds","endpointIds","getUserLog","logId","SystemStatusService","TileService","TimeIntervalDropdownService","ToolTipService","TripReportsService","getGPSConfig","configArray","config","assetGPS","gpsComponent","gpsSourceSortRank","isTripTrackingDisabled","primaryAssetId","latitude","longitude","gpsValiditySortRank","saveSitemapPrimaryAsset","primaryAsset","getTripConfig","createTripConfig","trip","saveTripConfig","deleteTripConfig","tripId","createTripAssignment","deleteTripAssignment","tripAssignmentId","getTripSummary","getTripSummaryByDate","UnitControlService","getUnitControl","getControlHistory","UnitInfoService","getUnitInfo","saveUnitInfo","getPerkinsInfo","engineModelId","panelManufacturerId","panelModelId","UnitStateService","UnitsOfMeasureService","customerUserAccessFilterService","saveUnitInfoFilter","UserFilter","getAssetIdsForFilter","customerUserAccessFilterId","applyCustomerUserAccessFilterToUser","deleteFilter","getCustomerUserAccessFilterUnitInfoItems","UserGroupService","insert","userGroup","userGroups","userGroupId","UserService","searchInitialLoad","changeDatesToMoment","searchUsers","filters","queryString","searchString","encodeURI","jobTitleId","userStatusId","filterOutDisabled","getSessionUser","changeUserDatesToMoment","updatePreferences","newUserRequest","dataArray","ExpirationDate","fullName","UtilizationService","getUtilization","approximate","getAggregateUtilization","UserAlertRecipientService","UserGlobalFilterDataPointGroupService","dataPointGroup","dataPointGroupId","DealerVimService","SHA1","DOutEnabled","UnitsOfMeasureConversionsService","DeviceCommandService","createDemandPoll","createUnitControlCommand","getCommandStatus","AssetNotificationRecipientService","alertRecipientId","removeOne","deleteAllRecipient","JobTitleService","getGlobalJobTitles","saveJobTitle","jobtitle","saveJobTitles","jobtitles","deleteJobTitle","replaceJobTitle","newJobTitleId","oldJobTitleId","OneTrustService","activeGroups","OnetrustActiveGroups","permission","OneTrust","OnConsentChanged","change","detail","el","document","getElementsByClassName","click","SerialNumberService","getPrefixes","getSuffixes","StreamingTemplateService","includeAll","assignStreamingTemplate","unassignStreamingTemplate","getStreamingTemplateForVims","snPrefix","deleteStreamingConfig","templateId","UnitAccessService","users$","sessionUser$","loadUserFleet","fleetAccess","users","sessionUser","UserGroupId","saveUserFleet","fleet","UserNotificationSettingsService","notificationSettings","sendTest","param","UserOnboardService","searchRfvUsers","cwsId","searchCwsUsers","createRfvUser","customerTemplate","customerTemplatePath","copyUserPermissions","fromUserId","toUserId","linkExistingCwsUser","addCustomerAccess","resendWelcomeEmail","CWSLoginId","UserPreferencesService","getColorThemes","getAssetNamePreferences","VimService","getVimsAssets","approveVims","Desc","Load","createAction","LoadFail","props","LoadSuccess","Online","Offline","SetBreadcrumbOptions","SetBreadcrumbButtons","LoadAggregateAlarmHistory","LoadAggregateAlarmHistoryFail","LoadAggregateAlarmHistorySuccess","Effects","_actions","_aggregateAlarmHistoryService","getGPSHistory$","EntityActions","entity","initialState","entityReducer","createReducer","on","reducer","getState","createSelector","getFeatureState","getError","LoadAggregateFleetVitals","LoadAggregateFleetVitalsFail","LoadAggregateFleetVitalsSuccess","ActionListItems","successMessage","failMessage","ActionListItemsFail","ActionListItemsSuccess","_fleetVitalsService","LoadAggregateFleetVitals$","DashboardActions","ActionListItems$","ActionListItemsSuccess$","autoClose","ActionListItemsFail$","selectedId","isSaving","sitemapFleetVitalsData","sitemapColumnConfig","assetColumnConfig","calculationResults","parentConfigs","aggregateFleetVitals","getData","getMapMarkers","unitStatesSelectors","sitemaps","states","sitemap","iconId","StatusId","SitemapGroupName","color1","color2","priorityOrder","Latitude","Longitude","markers","AssetFleetVitalsData","AssetName","getCalculationResults","mappedResults","getCalculations","results","calculations","CalculationId","SitemapCalculationResults","assetCalculations","AssetCalculationResults","getColumnConfigs","key","getSitemapColumns","mappedColumn","calc","has","CalculationName","displayOrder","DisplayOrder","calculationTypeId","CalculationTypeId","Map","values","localeCompare","getAssetColumns","mappedAssetColumns","LoadAggregateRuntime","LoadAggregateRuntimeFail","LoadAggregateRuntimeSuccess","SetupDateFrom","SetupDateTo","AggregateRuntimeApiService","getAggregateRuntime","aggregateRuntimeService","store","loadAggregateRuntime$","AggregateRuntimeActions","startOf","endOf","runtime","loadAggregateRuntimeFailed$","aggregateRuntimeReducer","getAggregateRuntimeState","aggregateRuntime","getAggregateRuntimeIsLoading","getAggregateRuntimeIsLoaded","getAggregateRuntimeError","getAggregateRuntimeData","getAggregateRuntimeDateFrom","getAggregateRuntimeDateTo","getAggregateRuntimeCalculations","getAggregateRuntimeTabIndex","tabIndex","fromRuntimeSettings","Calculations","calculation","Result","IsPercentCalculation","parseFloat","toFixed","Abbreviation","Abbr","getAggregateRuntimeOverallCalcs","calcs","getAggregateRuntimeOverallCharts","subtitle","series","y","Number","color","AppColors","gray","white_d3","getAggregateRuntimeEvents","Events","getNonZeroEvents","events","Count","TotalSeconds","getEventsColumnChart","colors","chart","backgroundColor","credits","enabled","exporting","style","fontSize","legend","plotOptions","dataLabels","allowOverlap","borderColor","column","stacking","animation","duration","grouping","pointPlacement","borderWidth","maxPointWidth","tooltip","shared","borderRadius","useHTML","shadow","xAxis","categories","labels","minRange","gridLineWidth","MAX_SAFE_INTEGER","yAxis","endOnTick","gridLineColor","lineWidth","minTickInterval","valueDecimals","index","getEventsPieChart","pointFormat","getAggregateRuntimeParties","Parties","getNonZeroParties","parties","party","getPartiesColumnChart","textOverflow","getPartiesPieChart","getAggregateRuntimeResults","Results","getAggregateRuntimeRunningTime","RunningTime","getAggregateRuntimeStoppedTime","StoppedTime","getAggregateRuntimeInvalidTime","InvalidTime","eventPageIndex","Save","SaveFail","SaveSuccess","Delete","DeleteFail","DeleteSuccess","Select","_alarmGroupService","_sidebarService","AlarmGroupActions","alarmGroups","save$","saveSuccess$","close","deleteFail$","HasAlarms","HasAlertRecipients","ModalActions","selectedAlarmGroupId","AlarmGroupId","deleteSuccess$","delete$","IsSuccess","ApiError","adapter","createEntityAdapter","selectId","sortComparer","getInitialState","isDeleting","alarmGroupsReducer","setAll","selectAll","selectEntities","selectIds","getIds","selectTotal","getTotal","getSelectors","getSelectedId","getSelected","_alarmStateService","AlarmStateActions","alarmState","Priority","alarmStatesReducer","getAlarmStates","SearchSuppressee","search","SearchAvailable","suppressingAlarms","Create","CreateFail","CreateSuccess","Update","UpdateFail","UpdateSuccess","CreateSuppressee","CreateSuppresseeFail","CreateSuppresseeSuccess","DeleteSuppressee","DeleteSuppresseeFail","DeleteSuppresseeSuccess","Clear","_assetService","Load$","AlarmSuppressionActions","SuppressionSetId","LoadFail$","Create$","CreateFail$","CreateSuccess$","Delete$","DeleteFail$","DeleteSuccess$","Update$","UpdateFail$","UpdateSuccess$","CreateSuppressee$","CreateSuppresseeFail$","CreateSuppresseeSuccess$","DeleteSuppressee$","DeleteSuppresseeFail$","DeleteSuppresseeSuccess$","alarmSuppressor","selectedIndex","suppresseeSearch","availableSearch","isSuppressorLoaded","isSuppressorLoading","alarmSuppressionReducer","getAvailableSearch","getSuppresseeSearch","getSelectedSuppressionSetIndex","suppressionSets","getAvailableAlarms","alarms","suppressors","selectedSuppressor","alarm","suppresseeIds","SuppresseeAlarms","suppressee","suppressorIds","suppressor","alarmName","getDropdownAlarms","some","_alarmTestService","AlarmTestActions","alarmTests","alarmTest","AlarmTestId","alarmTestsReducer","getEnabledAlarmTest","test","IsDisabled","alarmTypes","AlarmTypeId","getEnabledAlarmTypes","_alertScheduleService","AlertScheduleTimeActions","alertScheduleTimes","alertScheduleTimeReducer","getAllByAlertScheduleId","times","time","AlertScheduleId","AlertScheduleActions","alertSchedules","UserDrawerActions","AlertScheduleTimesActions","Banner","successAlertSchedulePayload","saveFail$","HasAlertRecipientsOrAlarmGroups","selectedAlertScheduleId","alertScheduleReducer","applications","_applicationService","ApplicationActions","application","applicationReducer","_assetTypeService","AssetTypesActions","assetTypes","assetTypesReducer","getAssetAssetTypes","assetType","isSitemapGroupType","getSitemapGroupAssetTypes","_getDashboards","ids","assetTypeEntities","dashboardEntities","codeTag","isMobile","allowMobile","hasFullMode","allowMobileFullMode","getFirstDashboard","getFirstDashboardId","Open","Close","OpenDataPointSettingsDrawer","isDataPointSettingsDrawerOpen","CloseDataPointSettingsDrawer","datapointDrawerReducer","DrawerAction","getDatapointDrawerState","getParentState","datapointDrawer","getDatapointDrawerIsOpen","getIsDataPointSettingsDrawerOpen","getAssetsState","datapointLegends","getLegends","concat","getLegendsById","displayProperties","UpdateDatapointDisplayProperty","UpdateDatapointDisplayPropertyFail","UpdateDatapointDisplayPropertySuccess","success","EnableDataPoints","dataPoints","EnableDataPointsSuccess","EnableDataPointsFail","HideDataPoints","HideDataPointsSuccess","HideDataPointsFail","displayProperty","DataPointId","isUpdating","isUpdatingDisabledFlag","isUpdatingVisibility","displayPropertiesReducer","Actions","upsertMany","property","getDisplayPropertyState","datapointDisplayProperty","_getEntities","getIsUpdating","getIsUpdatingDisabledFlag","getIsUpdatingVisibility","_getIndex","dictionary","assetsReducer","AssetActions","assets","getEntitiesState","getSortedAssets","datapointReducer","AlarmActions","getAlarmsState","eo","datapoint","isDisabled","alarmStateId","getAlarmsCount","alarmGroupAlertScheduleRecipients","AlarmGroupAlertScheduleRecipientsActions","getAlarmGroupAlertScheduleRecipientsState","alarmHistoryCounts","SelectDateRange","range","selectedDateRange","AlarmHistoryCountActions","setHours","setDate","getDate","getAlarmHistoryCountsState","getSelectedDateRange","getStartDate","getEndDate","getAlarmHistoryCountsWithColors","counts","x","count","getTotalAssetHistoryCount","prev","getSelectedAssetHistoryChart","totalCount","alertHistoryRecipientCount","AlertHistoryRecipientCountActions","getAlertHistoryRecipientCountState","getAlertHistoryRecipientCountWithLabel","datapointIds","legendsReducer","propertyKey","LoadMostRecent","DatapointActions","he","getDatapointsState","datapointHistorical","getAsset","datapointSettings","getByDatapointIdentifierId","datapointIdentifierId","DataPointIdentifierId","getLegendsByDatapointId","Legends","getAllLegendsByAssetId","dp","getEnabledDatapoints","getAllDatapointsNoED","properties","prop","DisableDatapoint","DisableDatapointFail","DisableDatapointSuccess","datapointValues","getInvalid","statusEntities","datapointStatusId","isInvalid","getInvalidCount","getLastSampleTime","date","sampleTime","getLastUpdateWithNoAISData","getEngineRunHours","getSelectedAssetIndex","getSelectedAssetDataPoints","SetDateRange","CreateSnapshotPoll","DownloadSnapshotFile","row","DownloadSnapshotFileSuccess","DownloadSnapshotFileFail","GoToSnapshotTrends","trendsDashboardId","GoToSnapshotTrendsSuccess","GoToSnapshotTrendsFail","eventDiagnostic","eventsDiagnosticsReducer","removeAll","isSnapshotFileDownloading","isSnapshotFileDownloaded","isSnapshotDatapointsLoading","isSnapshotDatapointsLoaded","getEventsDiagnosticsState","getChartData","totals","recordNumber","description","groupedEventsDiagnostics","filteredEventsDiagnostics","toDate","findIndex","frequency","severity","severityLabel","existingCats","cat","serie","filler","fill","getDateRange","LoadComponents","LoadComponentsFail","LoadComponentsSuccess","components","LoadMachineInfo","LoadMachineInfoFail","LoadMachineInfoSuccess","SaveMachineInfo","SaveMachineInfoFail","SaveMachineInfoSuccess","DeleteMachineInfoComponent","DeleteMachineInfoComponentFail","DeleteMachineInfoComponentSuccess","AddMachineInfoComponent","parentUnitMachineAssetComponentId","AddMachineInfoComponentFail","AddMachineInfoComponentSuccess","machineComponents","isMachineComponentsLoading","isMachineComponentsLoaded","machineComponentsError","isMachineInfoLoading","isMachineInfoLoaded","machineInfoError","isAddingComponent","iSDeletingComponent","isMachineInfoSaving","machineInfoSaveError","runtimeFormReducer","MachineInfoActions","isComponentsLoading","getMachineComponentsError","getMachineInfoError","Parse","ParseFail","ParseSuccess","parsedDataAdapter","parseData","rawDataReducer","isParsing","isParsed","parseError","setOne","getParseData","getParsedEntities","getDataPointResults","parsedResults","Data","wasParsed","getColumnDefinition","ColumnDefinitions","col","getColumnDefinitionName","columnName","statusReducer","StatusActions","unitInfoReducer","UnitInfoActions","getAssetDetailUtilization","AssetDetailUtilizationList","getTimeBasedUtilization","TimeGroupedUtilization","globalFilterAssetIds","GlobalFilterAssetsIdsActions","getGlobalFilterAssets","globalfilterAssetIds","deviceInfo","deviceInfoReducer","DeviceInfoActions","getAllowDemandPolls","AllowDemandPolls","getAllowAlarmCreation","AllowAlarmCreation","targetAssets","MoveAsset","MoveAssetFail","MoveAssetSuccess","isAssetMoving","isAssetMoved","assetMoveReducer","AssetMoveActions","getAssetMoveState","_datapointsService","_unitInfoService","_machineInfoService","_rawDataService","_utilizationService","loadEntities$","fromEntities","loadAlarms$","fromAlarms","loadDeviceInfo$","loadAlarmHistoryCounts$","fromAlarmHistoryCounts","fromAlertHistoryRecipientCount","alarmHistoryCount","loadAlarmGroupAlertScheduleRecipients$","fromAlarmGroupAlertScheduleRecipients","loadAlertHistoryRecipientCount$","loadDatapointLegends$","fromDatapointLegends","fromUnitAlarmHistory","datapointLegendsIds","loadDatapointHistorical$","fromDatapointHistorical","loadDatapointHistoricalMostRecent$","loadDatapointValues$","fromDatapointValues","loadDatapointSettings$","fromDatapointSettings","loadStatus$","fromStatus","loadDisplayProperties$","fromDisplayProperty","enableDataPoints$","hideDataPoints$","updateDataPointSettingsSuccess$","updateDataPointSettingFail$","loadEventsDiagnostics$","fromEventsDiagnostics","dateRange","saveDatapointDisplayProperty$","disableDatapoint$","loadUnitInfo$","saveUnitInfo$","fromUnitInfoTile","SupportNavActions","loadMachineComponents$","fromMachineInfo","loadMachineInfo$","addMachineInfoComponent$","addMachineInfoComponentSuccess$","deleteMachineInfoComponent$","deleteMachineInfoComponentSuccess$","saveMachineInfo$","loadRawData$","fromRawData","messageParse$","createSnapshotPoll$","loadUtilization$","fromUtilization","loadGlobalFilterAssetIds$","fromGlobalFilterAssetIds","assetIds","loadTargetAssets$","fromAssetMove","moveAsset$","downloadSnapshotFile$","res","downloadSnapshotFileSuccess$","saveAs","goToSnapshotTrends$","dataPointIds","confirm","i4","combineReducers","fromDatapointDisplayProperty","fromDatapointDrawer","getSelectedAssetStatus","getSelectedAssetId","Login","LoginFail","LoginSuccess","GetToken","GetTokenFail","GetTokenSuccess","RefreshToken","RefreshTokenFail","RefreshTokenSuccess","Logout","LogoutFail","LogoutSuccess","GetDebugToken","getToken$","AuthActions","getTokenSuccess$","CustomerActions","refreshToken$","logout$","logoutSuccess$","getDebugToken$","isRefreshing","authReducer","auth","getToken","brands","BrandService","getBrands","_brandService","getBrands$","_cellularProviderService","CellularProviderActions","cellularProviders","cellularProviderReducer","_commLossTypeService","CommLossTypeActions","commLossTypes","commLossTypesReducer","LoadSelectedDeviceComms","deviceId","LoadSelectedDeviceCommsFail","LoadSelectedDeviceCommsSuccess","operation","_commLossService","CommLossActions","getSession","session","CommLossStatus","loadTileEventsAndDiagnosticsSuccess$","loadDeviceComms$","comms","update$","isLoadingSelectedDeviceComms","isSaved","selectedDeviceDetails","commLossReducer","commLoss","isBusy","getSelectedDeviceComms","LoadAllCompanies","LoadAllCompaniesFail","LoadAllCompaniesSuccess","companyId","_companyService","CompanyActions","loadAll$","companiesReducer","isDirty","companies","getSelectedCompany","getAllOrderByName","LoadControlAdmin","LoadControlAdminFail","LoadControlAdminSuccess","controlDatapoint","SaveControlDatapoint","SaveControlDatapointFail","SaveControlDatapointSuccess","_controlAdminService","getControlDatapoints$","saveSitemapPrimaryAsset$","isControlDatapointSaving","isControlDatapointSaved","startTime","endTime","_unitControlService","loadHistory$","UnitControlActions","entitySelectors","controlHistoryReducer","ControlHistoryActions","_countryService","CountryActions","country","countriesReducer","countries","countryId","getCountriesWithAllowAlerts","c","AllowAlerts","customerUserAccessFilter","UserAccessFilter","selectedUserId","getAssetIdsForFilterFail","getAssetIdsForFilterSuccess","applyFilterToUser","applyFilterToUserFail","applyFilterToUserSuccess","deleteFilterFail","deleteFilterSuccess","getFilterUnitInfoItem","getFilterUnitInfoItemFail","getFilterUnitInfoItemSuccess","filterItemInfo","_customerUserAccessFilterService","UserAccessFilterActions","SaveSuccess$","applyFilterSuccess$","fromUnitAccess","applyFilter$","fromUserActions","loadAssetIdsForFilter$","deleteFilter$","loadFilterItem$","isCreating","customerUserAccessFilterUnitInfo","isLoadingFilterUnitInfo","customerUserAccessFilterReducer","UnitsOfMeasureActions","getAssetIds","getFilterUnitInfo","LoadAccess","LoadAccessFail","LoadAccessSuccess","customers","Switch","newTab","SwitchAndNavigateToAsset","SwitchAndNavigateToSitemapGroup","LoadAggregationSettings","LoadAggregationSettingsFail","LoadAggregationSettingsSuccess","customersSettings","LoadTileDefaults","LoadTileDefaultsSuccess","LoadTileDefaultsFail","_customerService","loadAccess$","loadAccessSuccess$","localCustomerId","sessionCustomerId","queryCustomerId","savedCustomerId","switch$","currentCustomerId","currentCustomer","open","pathname","switchAndNavigateToAsset$","stringParams","fromActions","switchAndNavigateToSitemapGroup$","select$","UserSessionActions","EulaAction","CoreActions","loadAggregationSettings$","loadTileDefaults$","isAccessLoaded","isAccessLoading","aggregationSettings","isAggregationSettingsLoaded","isAggregationSettingsLoading","aggregationError","tileDefaults","isTileDefaultsLoading","isTileDefaultsLoaded","tileDefaultsError","customerReducer","updateOne","getAllTileDefaults","industryId","tileDefault","PrimaryIndustryId","_dashboardService","DashboardsActions","dashboardsReducer","LoadDefaults","LoadDefaultsFail","LoadDefaultsSuccess","Add","AddFail","AddSuccess","displayGroupId","globalDisplayGroups","isAdded","isAdding","displayGroupReducer","getGlobalDisplayGroups","getDisplayGroupNameById","identifiers","LoadCustomerDataPointIdentifiers","LoadCustomerDataPointIdentifiersFail","LoadCustomerDataPointIdentifiersSuccess","customerIdentifiers","AddPriorityDataPointIdentifier","AddPriorityDataPointIdentifierFail","AddPriorityDataPointIdentifierSuccess","identifier","isDeleted","identifierReducer","getDataPointIdentifierByGroupId","groupId","getAlarmsDataPointIdentifier","allowForAlarms","getRuntimeDataPointIdentifier","allowForRuntime","getSelectedPoints","dataPointIdentifierAliasId","prioritySet","getAvailablePoints","getCustomerIdentifierIds","getCustomerFilteredPoints","points","point","dataPointIdentifierId","dataPointIdentifierDefaultsReducer","getStatusById","statusId","loadDisplayGroups$","fromDisplayGroups","loadDefaultDisplayGroups$","addDisplayGroups$","saveDisplayGroups$","isSuccess","loadIdentifiers$","fromIdentifiers","loadCustomerIdentifiers$","loadIdentifierDefaults$","fromDefaults","saveIdentifierDefaults$","saveIdentifierDefaultsSuccess$","saveIdentifierDefaultsFail$","addPriorityData$","datapointsReducer","AddVim","AddVimFail","AddVimSuccess","UpdateVimDOut","UpdateVimDOutFail","UpdateVimDOutSuccess","_dealerVimService","VimActions","vimsKnownGood","add$","addSuccess$","addFail$","updateDOut$","updateDOutSuccess$","updateDOutFail$","vimKnownGood","vimReducer","dealerVim","_dealerService","DealersActions","dealers","dealer","dealersReducer","LoadAll","LoadAllFail","LoadAllSuccess","list","LoadDDPsByAssetId","LoadDDPsByAssetIdFail","LoadDDPsByAssetIdSuccess","ValidateEquation","validationRequest","ValidateEquationFail","ValidateEquationSuccess","derivedValidationResult","EvaluateEquation","evaluationRequest","EvaluateEquationFail","EvaluateEquationSuccess","SelectDDP","ClearSelectedDDP","DerivedDataPointId","isValidating","modalDDPList","modalListLoading","selectedDDP","isValidated","getSelectedDDP","getModalList","isModalListLoading","getResult","evaluationTypes","evalTypes","itemTypes","legendItems","legendReducer","_derivedDataPointService","DerivedDatapointActions","LoadDDPByAssetId$","InternalDescription","LoadDDPByAssetIdFail$","loadEvalTypes$","EvaluationTypesActions","loadItemTypes$","ItemTypesActions","loadLegendItems$","LegendItemsActions","validateEquation$","evaluateEquation$","saveDerivedDatapoint","createDerivedDatapoint","saveDerivedDataPointFail","saveDerivedDataPointSuccess","derivedDatapointsReducer","fromEvaluationTypes","fromItemTypes","fromEvaluationItems","fromLegendItems","SendDemandPoll","assetName","viewAction","SendDemandPollSuccess","SendUnitControl","SendUnitControlSuccess","commandName","SendCommandFail","CheckCommandStatus","previousStatusId","timesPolled","CheckCommandStatusFail","CheckCommandStatusSuccess","isSending","deviceControlReducer","ControlActions","deviceCommands","_deviceCommandService","sendDemandPoll$","deviceCommandActions","sendDemandPollSuccess$","notification","notificationActions","sendUnitControl$","sendUnitControlSuccess$","sendCommandSuccess$","sendCommandFail$","checkCommandStatus$","checkCommandSuccess$","notificationSelectors","notifications","deviceCommandTransferStatusId","timer","checkCommandFail$","_deviceSearchResultService","DeviceSearchResultActions","DeviceId","deviceSearchResultReducer","deviceSearchResults","_serialNumberService","SerialNumberSuffixActions","suffixes","suffix","serialNumberSuffixReducer","ecmSerialNumberSuffixes","loadSplitter$","loadFailAggregator$","CoreSelectors","loadSuccessAggregator$","zip","_angular_core__WEBPACK_IMPORTED_MODULE_34__","LoadEMOAssetOverhaul","LoadEMOAssetOverhaulFail","LoadEMOAssetOverhaulSuccess","overhaul","LoadEMOAssetOverhaulTypes","LoadEMOAssetOverhaulTypesFail","LoadEMOAssetOverhaulTypesSuccess","overhaulTypes","LoadEMOAssetOverhaulIntervals","LoadEMOAssetOverhaulIntervalsFail","LoadEMOAssetOverhaulIntervalsSuccess","intervals","CreateEMOAssetOverhaul","CreateEMOAssetOverhaulFail","CreateEMOAssetOverhaulSuccess","SaveEMOAssetOverhaul","SaveEMOAssetOverhaulFail","SaveEMOAssetOverhaulSuccess","DeleteEMOAssetOverhaul","DeleteEMOAssetOverhaulFail","DeleteEMOAssetOverhaulSuccess","LoadEMOAssetAssessments","LoadEMOAssetAssessmentsFail","LoadEMOAssetAssessmentsSuccess","assessments","CreateEMONonOverhaulAssessment","CreateEMONonOverhaulAssessmentFail","CreateEMONonOverhaulAssessmentSuccess","SaveEMOAssetAssessment","SaveEMOAssetAssessmentFail","SaveEMOAssetAssessmentSuccess","SaveEMOAssetAssessmentRecommendedHours","SaveEMOAssetAssessmentRecommendedHoursFail","SaveEMOAssetAssessmentRecommendedHoursSuccess","SaveEMOAssetAssessmentItems","SaveEMOAssetAssessmentItemsFail","SaveEMOAssetAssessmentItemsSuccess","SaveEMOAssessmentCatInspectRisk","SaveEMOAssessmentCatInspectRiskFail","SaveEMOAssessmentCatInspectRiskSuccess","catInspectParsingDetails","LoadEMOAssessmentCategories","LoadEMOAssessmentCategoriesFail","LoadEMOAssessmentCategoriesSuccess","LoadEMORiskLevels","LoadEMORiskLevelsFail","LoadEMORiskLevelsSuccess","riskLevels","LoadEMOOverview","LoadEMOOverviewFail","LoadEMOOverviewSuccess","overview","SaveSelectedInspection","CatInspection","OpenDrawer","CloseDrawer","UpdateCatInspectParsingDetails","_emoService","loadEMOAssetOverhaul$","loadEMOAssetOverhaulTypes$","loadEMOAssetOverhaulIntervals$","createEMOAssetOverhauls$","saveEMOAssetOverhauls$","deleteEMOAssetOverhauls$","loadEMOAssetAssessments$","createEMONonOverhaulAssessment$","saveEMOAssetAssessment$","saveEMOAssetAssessmentRecommendedHours$","assessment","saveEMOAssetAssessmentItems$","saveAssessmentCatInspectRisk$","loadEMOAssessmentCategories$","loadEMORiskLevels$","loadEMOOverview$","assetOverhauls","overhaulReasons","availableIntervals","upcomingIntervals","isDrawerOpen","isOverhaulLoading","isOverhaulLoaded","isOverhaulTypesLoading","isOverhaulTypesLoaded","isOverhaulIntervalsLoading","isOverhaulIntervalsLoaded","isAssessmentsLoading","isAssessmentsLoaded","isAssessmentCategoriesLoading","isAssessmentCategoriesLoaded","isRiskLevelsLoading","isRiskLevelsLoaded","isOverviewLoading","isOverviewLoaded","isOverhaulCreating","isOverhaulCreated","isAssessmentCreating","isAssessmentCreated","isOverhaulSaving","isOverhaulSaved","isAssessmentSaving","isAssessmentSaved","isRecommendedHoursSaving","isRecommendedHoursSaved","isAssessmentItemsSaving","isAssessmentItemsSaved","isOverhaulDeleting","isOverhaulDeleted","isOVerhaulIntervalsLoaded","getOverview","parentName","currentHours","totalRiskPercent","riskName","riskColor","recOverhaulDate","upcomingOverhaulRecDate","formattedRecOverhaulDate","formatDate","overhaulHistory","prevOverhaulId","upcomingOverhaulIntervalId","prevOverhaulHours","prevOverhaulRecHours","prevOverhaulTotRecHours","getPrevOverhaulTotRecHours","prevOverhaulDate","prevOverhaulReason","prevOverhaulNextIntervalStdHours","prevAssessmentNextIntervalStdHours","prevOverhaulNextRecDate","calculatePrevOverhaulNextRecDate","prevOverhaulType","upcomingOverhaul","upcomingOverhaulHours","upcomingOverhaulScheduledHours","upcomingOverhaulTypeId","upcomingOverhaulStandardDate","calculateStandardOverhaulDate","formattedNextOverhaulDate","assessmentHistory","prevAssessmentId","upcomingAssessmentIntervalId","prevAssessmentHours","prevAssessmentRecHours","prevAssessmentTotRecHours","getPrevAssessmentTotRecHours","prevAssessmentDate","prevAssessmentType","prevAssessmentNextRecDate","calculatePrevAssessmentNextRecDate","upcomingAssessment","upcomingAssessmentHours","upcomingAssessmentScheduledHours","upcomingAssessmentDate","calculateUpcomingRecommendedAssessmentDate","upcomingAssessmentTypeId","upcomingAssessmentStandardDate","calculateStandardAssessmentDate","systemRatings","addSystemRatingsAsKeys","getOverhaulState","getAssetOverhauls","formattedOverhaulDate","overhaulDate","getAssetAssessments","riskLevelIds","assetAssessmentItems","emoRiskLevelId","highestPriorityOrder","riskLevel","Math","min","addCategoriesAsKeys","formattedAssessmentDate","overallAssessmentRating","ratingColor","isCertified","certifiedBy","getSelectedAssessment","assessmentId","getItemsByCategoryId","emoCategoryId","emoSubCategoryId","getMaintenanceOverhaulTypes","isMaintenance","getNonMaintenanceOverhaulTypes","getOverhaulReasons","getChartConfigs","stripes","getChartConfigColorByTypeId","typeId","configs","getOverhaulAvailableIntervals","exceptionIntervalId","maintenanceOverhaulTypes","overhauls","takenIntervalIds","emoOverhaulIntervalId","emoOverhaulTypeId","getAssessmentAvailableIntervals","nonMaintenanceOverhaulTypes","isIncomplete","isConfirmed","completeItems","totalItems","categoryItems","completedItemsLength","subCategoryIds","assessmentSubCategories","subcategory","percentageComplete","calculatePercentage","highRiskLevel","totalProgress","statusColor","yellow_l","isClosed","black_l2","green","ratings","rating","emoCategory","total","round","resultDateTime","getHours","prevOverhaulStdHours","prevAssessmentStdHours","currentDate","SaveEventCodes","eventCodes","SaveEventCodesFail","SaveEventCodesSuccess","EventCodesService","getEventCode","saveEventCodes","eventCodesModel","OriginalName","AssignedPartyId","AssignedEventPartyId","IncludeEvents","MinimumTimeThreshold","eventCodeService","EventCodeActions","saveEventCodes$","eventCode","eventCodeReducer","getEventCodesWithColor","codes","partyColor","defaultParty","AssignedEventParty","EventPartiesService","loadEventParties","evPartiesSrv","EventPartiesActions","eventParties","eventPartiesReducer","getDefault","getFeatureAccessState","featureAccess","getDashboardsState","_featureAccessService","loadDashboards$","userFeatureAccessReducer","LoadFleetVital","LoadFleetVitalFail","LoadFleetVitalSuccess","getFleetVitals$","columnConfigs","getFleetVitalsTable","sitemapEntities","ConnectivityStatus","IsOnline","TimeSinceLastPost","DatapointLastpost","fromNow","LastpostSearch","AssetTypeId","getSitemapDynamicColumns","_gaugeTypeService","GaugeTypeActions","gaugeType","gaugeTypesReducer","gaugeTypes","successCallback","_geofenceService","GeofenceActions","geofences","getSelectedMany","selectedIds","getMapGeoFences","geo","geoFence","ref","fillColor","FillColor","lineColor","LineColor","alpha","Alpha","vertices","GeoFencePoints","lat","lng","hideMarkers","_globalColorService","globalColors","globalColor","globalColorsReducer","GlobalColorActions","globalJobTitles","_JobTitleService","JobTitlesActions","jobTitles","jobTitle","_globalTimezoneService","globalTimezones","GlobalTimezone","globalTimezonesReducer","GlobalTimezoneActions","LoadGPSConfig","LoadGPSConfigFail","LoadGPSConfigSuccess","gpsConfig","SaveSitemapPrimaryAsset","SaveSitemapPrimaryAssetFail","SaveSitemapPrimaryAssetSuccess","_tripReportsService","getGPSConfig$","isPrimaryAssetSaving","isPrimaryAssetSaved","_iconService","IconActions","iconsReducer","icons","getByCode","CodeTag","industries","_industryService","IndustryActions","industry","industryReducer","LoadGPSHistoryByAssetId","LoadGPSHistoryByAssetIdFail","LoadGPSHistoryByAssetIdSuccess","gpsHistory","LoadGPSHistory","LoadGPSHistoryFail","LoadGPSHistorySuccess","_locationService","getGPSHistoryByAssetId$","locationGPSHistory","getGPSHistory","getFilteredGPSHistory","PresentAlarmCount","LatitudeSampleTime","trackBy","getFleetVitalsFileName","fromCustomer","_notificationTypeService","NotificationTypesActions","notificationTypes","notificationType","notificationTypesReducer","Acknowledge","AcknowledgeAll","changed","Complete","Failed","notificationReducer","NotificationActions","addOne","updateMany","getUnacknowledged","getAcknowledged","getUnacknowledgedCount","getSorted","loadFail","loadSuccess","OnboardingEventLog","_onboardingQueueService","loadEventLogs$","OnboardingQueueActions","onboardingEventLogsReducer","onboardingEventLogs","LoadOnboardingQueueAssetList","LoadOnboardingQueueAssetListFail","LoadOnboardingQueueAssetListSuccess","onboardingQueueAssets","AssignToCustomer","AssignToCustomerFail","AssignToCustomerSuccess","Resume","ResumeFail","ResumeSuccess","Restart","RestartFail","RestartSuccess","NavigateToUnit","stepId","getOnboardingQueueAssetList$","assignToCustomer$","assignToCustomerSuccess$","assignToCustomerFail$","resume$","resumeSuccess$","UnitCreationActions","restart$","restartSuccess$","navigateToUnit$","RootSitemapGroupId","modalType","Ok","contentType","Text","primaryText","isLoadingAll","isLoadedAll","onboardingReducer","onboardingQueue","getOnboardingQueueAsset","getByUnitCreationLogId","getOnboardingQueue","OnboardingStatusColor","OnboardingStatusId","platformServiceSettings","_platformSettings","settings","getPlatFormSettings","getPlatFormSettingsByName","platFormSettings","setting","routerNavigatedAction","navStack","isOnline","breadcrumbOptions","breadcrumbButtons","fromUserAccessFilter","serialNumberPrefixes","sitemapGroups","streamingTemplates","streamingTemplateConfig","support","timeIntervalDropDowns","toolTips","tripConfig","tripSummary","unitControl","unitsOfMeasure","unitStates","userAlertRecipients","userGlobalFilterDataPointGroup","fromUserGroup","userPermissons","userSchedules","userSession","vim","unitsOfMeasureConversions","fromDeviceCommands","fromNotifications","LoadUserSchedules","LoadUserSchedulesFail","LoadUserSchedulesSuccess","DeleteUserSchedule","DeleteUserScheduleFail","DeleteUserScheduleSuccess","ClearUserSchedules","_userSchedulesService","ReportSchedulesActions","reportSchedules","reportSchedule","ReportCustomerSettingRecipientId","allData","userSchedulesReducer","selectAllData","fromSitemapGroup","getPathString","extendedScheduleData","SitemapPathString","createFeatureSelector","getBreadcrumbOptions","getBreadcrumbButtons","SerialNumberPrefixActions","serialNumberPrefix","serialNumberPrefixReducer","SetAlertSchedule","ClearSelectedAlarmCounts","AddMultipleAlarmCounts","DeleteMultipleAlarmCounts","alarmCounts","selectedAlertSchedule","selectedAlarmCounts","alarmCountReducer","AlarmCountActions","removeDuplicates","alarmCountsToDelete","common","o","toAdd","alarmCount","elem","self","getSitemapGroupsState","getAlertSchedule","getSelectedAlarmCounts","getAlarmCounts","alarmsReducer","getPresent","getPresentCount","invalidDatapoints","dpIdentifierIds","entitiesReducer","getTotalUtilization","TotalUtilizationList","getSitemapUtilization","SitemapUtilizationList","getAssetUtilization","AssetUtilizationList","_sitemapGroupService","LoadAggregateUtilization$","loadAlarmCounts$","fromAlarmCounts","saveAlarmCounts$","AlarmGroupAlertScheduleId","sitemapGroupsReducer","getRoot","parentId","getSitemapGrousWithoutChildren","getAllAssets","allSitemapGroups","allSItemapGroupIds","uniqueSitemapGroupIds","uniqBy","pullAll","getPath","include","unshift","getPathByAssetId","includeAsset","sitemapGroupEntities","pathArr","foundAsset","foundSitemapGroup","LoadPerkinsMachineInfo","LoadPerkinsMachineInfoFail","LoadPerkinsMachineInfoSuccess","perkinsMachineInfo","_streamingTemplateService","StreamingTemplateConfigActions","TextLeft","getPerkinsInfo$","streamingTemplate","perkinsAdapter","engine","engineModels","panelModels","panelManufacturer","streamingTemplateConfigReducer","EngineModels","PanelModels","PanelManufacturers","getEngineModelState","getPanelModelsState","getPanelManufacturerState","getEngineEntities","getAllEngineModels","getPanelModelsEntities","getAllPanelmodels","getPanelManufacturerEntities","getAllPanelManufacturer","getPanelManufacturers","getPanelModels","LoadEndpointTypesFail","DeleteStreamingTemplate","DeleteStreamingTemplateSuccess","DeleteStreamingTemplateFail","StreamingTemplateActions","isStreamingTemplateAssigned","isStreamingTemplateAssigning","streamingTemplateReducer","templates","Info","DataPointsToUpdate","occurrence","DataPointName","isUpdated","dataPointsToUpdate","getSupportState","datapointOccurrences","getDataPointsToUpdate","LoadEndpointTypes","LoadEndpointTypesSuccess","endpointTypes","LoadLogTypes","LoadLogTypesFail","LoadLogTypesSuccess","logTypes","LoadUserLogs","LoadUserLogsFail","LoadUserLogsSuccess","userLogs","LoadUserLog","LoadUserLogFail","LoadUserLogSuccess","userLog","Cancel","searchAssetId","searchUserId","isUserLogsLoading","isUserLogsLoaded","isUserLogLoading","siteLogs","getUserlog","isUserlogLoading","_supportService","createUnitCreationLog$","fromUnitCreationLogs","loadUnitCreationLogs$","logs","loadUnitCreationTypes$","fromUnitCreationTypes","types","loadDatapointOccurrences$","fromDatapointOccurrences","updateDatapointOccurrences$","loadEndpointTypes$","fromSiteLogs","loadUserLogTypes$","loadUserLogs$","loadUserLog$","loadUserLogsFailed$","customClass","primaryAction","secondaryText","secondaryAction","supportReducer","unitCreationLogs","unitCreationTypes","getConfigQueue","creationTypeEntities","unitCreationType","UnitCreationTypeId","unitName","creator","lastUpdatedBy","LastUpdateLastName","LastUpdateFirstName","queued","Queued","lastSaved","LastSave","progress","RequiredCompleteStepCount","RequiredStepCount","IsComplete","completedBy","CompletedByLastName","CompletedByFirstName","completedOn","CompletedOn","getCompleteConfigQueue","queue","getIncompleteConfigQueue","getDisabledUnits","getUnitCreationLogByAssetId","getEnabledUnitCreationTypes","timeSpanLabel","SystemEventDiagnosticService","URL","getSystemEventDiagnosticsTile","_eventDataService","dateFormat","fromSystemEventDiagnosticsTile","LoadSuccess$","unit","eventItems","getSystemEventDiagnostics","getColumnCharts","chartLevel","columnCount","seriesClickCallback","assetArray","sectionArray","severityItems","totalHighs","totalMeds","totalLows","section","severityItem","SeverityLabel","centerInCategory","BackgroundColor","custom","SeverityValue","aggEvent","aggEvents","dataSorting","sortKey","textColor","align","verticalAlign","floating","itemStyle","bar","minPointLength","cursor","headerFormat","showEmpty","formatter","tick","axis","ticks","pos","onclick","call","fontFamily","tickColor","_systemStatusService","get$","getUnits","firstDashboard","aggregateState","AggregateRuntimeStatusId","SampleTimeForExport","SampleTime","StateName","Color1","Color2","PriorityOrder","AggregateColor","AggregateStateName","isAggregation","_tileService","tileReducer","_timeIntervalDropdownService","TimeIntervalDropdownActions","timeIntervalDropdown","_toolTipService","ToolTipActions","toolTip","toolTipsReducer","getToolTipById","toolTipId","getToolTipByTag","toolTipTag","LoadTripConfig","LoadTripConfigFail","LoadTripConfigSuccess","CreateTripConfig","CreateTripConfigFail","CreateTripConfigSuccess","SaveTripConfig","SaveTripConfigFail","SaveTripConfigSuccess","DeleteTripConfig","tripName","DeleteTripConfigFail","DeleteTripConfigSuccess","CreateTripAssignment","tripAssignment","CreateTripAssignmentFail","CreateTripAssignmentSuccess","DeleteTripAssignment","DeleteTripAssignmentFail","DeleteTripAssignmentSuccess","getTripConfig$","createTripConfig$","saveTripConfig$","deleteTripConfig$","createTripAssignment$","deleteTripAssignment$","isTripConfigCreating","isTripConfigCreated","isTripConfigSaving","isTripConfigSaved","isTripConfigDeleting","isTripConfigDeleted","isTripAssignmentCreating","isTripAssignmentCreated","isTripAssignmentDeleting","isTripAssignmentDeleted","LoadTripSummary","LoadTripSummaryFail","LoadTripSummarySuccess","LoadTripSummaryByDate","LoadTripSummaryByDateFail","LoadTripSummaryByDateSuccess","tripDetails","clearTripDetails","downloadTripReport","downloadTripReportSuccess","downloadTripReportFail","_reportService","generateReport","isLoadedByDate","isLoadingByDate","getTripDetails","getSelectedTripSummary","details","getTripSummaryData","UoM","tripData","distance","distanceUnitOfMeasureId","fuelUsed","fuelUsedUnitOfMeasureId","eventCount","getTripAssetAndDate","unitControls","UnitControl","isCreatingDeviceCommand","unitControlSetupReducer","UnitControlSetupActions","getApprovedControls","isApproved","_unitStateService","UnitStateActions","unitStatesReducer","unitState","_unitsOfMeasureConversionsService","UnitsOfMeasureConversionsActions","unitsOfMeasureReducer","_unitsOfMeasureService","AlarmGroupChange","AlertScheduleIdChange","alarmScheduleId","_userAlertRecipientService","UserAlertRecipientActions","selectedScheduleId","userAlertRecipientReducer","UserAlertRecipientsActions","getList","RecipientsList","pathString","unitIndex","UnitId","UnitName","Schedules","schedule","AlarmGroupName","AlertScheduleName","AlertRecipientId","getAlarmGroupId","getAlarmScheduleId","group","_service","UserGlobalFilterDataPointGroupActions","datapointGroups","create$","userGlobalFilterDataPointGroupReducer","UserGroupActionsTypes","Insert","InsertSuccess","InsertFail","SelectNext","SelectPrev","BannerMessageTypesEnum","Success","Error","BannerMessagesEnum","_userGroupService","UserGroupActions","insertSuccess$","insert$","showBannerAfterFailOrSuccessRequest$","showBanner","actionType","messageType","messageName","isInserting","userGroupsReducer","upsertOne","nextIdx","prevIdx","getSelectedUserGroup","permissions$","permissions","permissionsByTag","groupBy","permissionIdsByTag","p","UserPermissionActions","userPermission","userPermissionsReducer","SavePreferences","SavePreferencesFail","SavePreferencesSuccess","SetTheme","SetDefaultTheme","ResetPreferencesForm","_userService","onLoad$","onLoadFail$","onLoadSuccess$","ThemeId","onSavePreferences$","onResetPreferencesForm$","resetForm","onPreferencesSaveSuccess$","successUserNotificationSettingsPayload","onSetDefaultTheme$","onSetTheme$","userSettingsReducer","getSessionUserId","getUserSessionFullName","getRootUserGroup","getSessionThemeId","localStorageThemeId","isDarkMode","getSelectedCustomerLogoPath","customerLogo","Logo","theme","ApproveVims","desc","ApproveVimsFail","ApproveVimsSuccess","_vimService","approveVIM$","AlarmEditorModule","_angular_core__WEBPACK_IMPORTED_MODULE_13__","AlarmEditorService","InvolveModule","alarmGroup_r13","_r17","selectAlarmGroup","odd_r15","isAlarmGroupChecked","alertSchedule_r18","_r21","selectAlertSchedule","odd_r19","Code","DSTCode","_r23","ctx_r22","unitSearchString","notificationType_r24","_r26","ctx_r25","checkType","isChecked","Type","ctx_r27","searchUser","user_r30","ctx_r32","selectUser","ctx_r34","openModal","odd_r31","Email","RecipientsEditorComponent_div_64_ng_container_1_Template","selectedUsersDisplayed","user_r39","_r42","ctx_r43","odd_r40","RecipientsEditorComponent_ng_template_73_div_0_ng_container_1_Template","RecipientsEditorComponent_ng_template_73_ng_template_2_div_0_Template","ctx_r36","RecipientsEditorComponent_ng_template_73_div_0_Template","RecipientsEditorComponent_ng_template_73_ng_template_2_Template","RecipientsEditorComponent","selectedAlarmGroups","selectedUsers","_selectedUsersFilter$","_searchUsersFilter$","isEmailChecked","isTextChecked","selectedNotificationTypeIds","alarmGroups$","alertSchedules$","notificationTypes$","IsVoice","Enabled","isUsersLoading$","selectedAlarmCountLength","schedules","available","selected","getUserSearchResults","loadAlarmCounts","userSearchString","customWidth","NoButtons","UserRecipients","title2","zindex","clearSelectedUsersAndUnits","isSaveDisabled","checkedTypeId","RecipientsEditorComponent_ng_container_13_Template","RecipientsEditorComponent_ng_container_24_Template","RecipientsEditorComponent_involve_icon_36_Template","RecipientsEditorComponent_recipients_unit_list_39_Template","RecipientsEditorComponent_span_40_Template","RecipientsEditorComponent_div_48_Template","_r45","RecipientsEditorComponent_involve_icon_59_Template","RecipientsEditorComponent_div_64_Template","RecipientsEditorComponent_div_65_Template","RecipientsEditorComponent_ng_container_71_Template","RecipientsEditorComponent_ng_template_73_Template","_r12","i_r4","sitemap_r3","RecipientsUnitListComponent_div_1_ng_container_2_Template","form","sitemapTreeControls","RecipientsUnitListComponent","_searchString","_searchUnitsFilter$","_fb","isLoading$","debounceTime","searchUnits","selectedCounts","sitemapTree","patchValue","deselectAll","clear","mapSitemapGroups","array","child","visible","check","parent","children","mapAssets","mapAlarmCounts","alarmGroupName","alarmGroupAlertScheduleId","enabledAlarmCount","EnabledAlarmCount","disabledAlarmCount","DisabledAlarmCount","examineAll","examineAsset","turnChildAndAssetsVisible","childrenMatch","examineChild","assetsMatch","found","childControl","childMatch","assetMatch","_angular_core__WEBPACK_IMPORTED_MODULE_4__","RecipientsUnitListComponent_div_1_Template","RecipientsUnitListComponent_div_2_Template","handleAlarmNameClick","tests_r11","_r13","ctx_r12","handleThresholdClick","ThresholdAlarmsComponent_div_0_div_7_involve_icon_8_Template","ThresholdAlarmsComponent_div_0_div_7_involve_option_14_Template","ThresholdAlarmsComponent_div_0_div_7_involve_icon_21_Template","filteredAlarmTests","maxNumber","row_r26","row_r27","_r29","AlarmName","row_r30","AlarmTestName","row_r31","Threshold","ThresholdAndUnitsOfMeasure","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_header_cell_2_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_cell_3_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_header_cell_5_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_cell_6_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_header_cell_8_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_cell_9_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_header_cell_11_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_cell_12_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_ng_template_13_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_header_row_14_Template","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_involve_row_15_Template","dataSource","columns","ThresholdAlarmsComponent_div_0_ng_container_9_involve_table_1_Template","_r36","handleAddToList","ThresholdAlarmsComponent_div_0_div_7_Template","ThresholdAlarmsComponent_div_0_ng_container_9_Template","ThresholdAlarmsComponent_div_0_div_11_Template","alarmTestId","threshold","isSaving$","isLoaded$","ThresholdAlarmsComponent","addToList","EventEmitter","InvolveDataSource","fromAlarmEditor","Validators","required","valueChanges","val","filterAlarms","alarms$","alarmTests$","unitsOfMeasure$","selectedAssetIds$","tests","unitOfMeasures","UnitsOfMeasureName","uom","UnitsOfMeasureId","reset","filteredData$","filteredData","PreviousThreshold","PreviousAlarmName","emit","setValue","_angular_core__WEBPACK_IMPORTED_MODULE_17__","InvolveSort","ThresholdAlarmsComponent_div_0_Template","clearSearch","_r8","searchData","ThresholdAvailableDatapointsComponent_involve_form_field_4_involve_icon_3_Template","datapoint_r11","selectDatapoint","odd_r13","selectedDatapoint","ThresholdAvailableDatapointsComponent_div_6_div_1_Template","filteredDatapoints","ThresholdAvailableDatapointsComponent","loadAlarmClicked","alarmEditorDatapoints","LoadAlarms","_angular_core__WEBPACK_IMPORTED_MODULE_7__","outputs","ThresholdAvailableDatapointsComponent_involve_form_field_4_Template","ThresholdAvailableDatapointsComponent_div_6_Template","ThresholdAvailableDatapointsComponent_div_8_Template","ThresholdAvailableDatapointsComponent_div_10_Template","ThresholdEditorComponent","unitListCollapse","datapointsCollapse","alarmsCollapse","previewSaveCollapse","maxPanels","siteMapName$","handleCollapse","panelName","handleLoadDatapoints","previewSavePanel","handleRemoveAll","handleLoadAlarms","alarmList","alarmListToUpdate","_angular_core__WEBPACK_IMPORTED_MODULE_8__","ThresholdPreviewSaveComponent","row_r16","row_r18","row_r19","i_r21","removeFromArray","ThresholdPreviewSaveComponent_involve_table_12_involve_header_cell_2_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_cell_3_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_header_cell_5_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_cell_6_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_header_cell_8_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_cell_9_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_header_cell_11_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_cell_12_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_header_cell_14_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_cell_15_Template","ThresholdPreviewSaveComponent_involve_table_12_ng_template_16_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_header_row_17_Template","ThresholdPreviewSaveComponent_involve_table_12_involve_row_18_Template","hasChanges","thresholdAlarms","assetIdList","Alarms","selectedAlarms","currentValue","alarmsList","filteredAlarms","mapOptionsToUntypedFormGroup","handleSave","alarmsForModal","Set","ModalType","OkCancel","ModalContentType","ThresholdEditor","primaryActionCallback","markAsPristine","removeAt","_angular_core__WEBPACK_IMPORTED_MODULE_14__","ThresholdPreviewSaveComponent_div_10_Template","ThresholdPreviewSaveComponent_involve_table_12_Template","ThresholdPreviewSaveComponent_div_13_Template","invalid","filter_r9","i_r13","sitemap_r12","ThresholdUnitListComponent_ng_container_21_div_1_div_2_Template","ThresholdUnitListComponent_ng_container_21_div_1_Template","ThresholdUnitListComponent_ng_template_22_div_0_Template","ThresholdUnitListComponent","sitemapTreeArray","loadDatapointsClicked","selectedFilterId","isGlobalFilterAssetsLoading","isAssetsLoading","allSavedFilters$","siteMapName","mapOptionsToFormGroup","distinctUntilChanged","LoadDatapoints","smt","at","selectedAssetsId","getSelectedAssets","siteMapTree","handleFilterChange","onCreateFilterClick","getTotalAssetCounts","_r0","ThresholdUnitListComponent_involve_icon_10_Template","ThresholdUnitListComponent_involve_option_19_Template","ThresholdUnitListComponent_ng_container_21_Template","ThresholdUnitListComponent_ng_template_22_Template","ThresholdUnitListComponent_ng_container_24_Template","_r5","j_r7","sitemapTreeChildren","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_0_div_2_Template","childrenControls","alarmCount_r14","asset_r9","toggleAlarmCount","stopPropagation","alarmCountIndex_r15","selectedAlertSchedule$","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_1_ng_container_2_div_1_ng_container_5_div_2_Template","assetAlarmCountControls","toggleAssetCheckBox","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_1_ng_container_2_div_1_ng_container_5_Template","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_1_ng_container_2_div_1_Template","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_1_ng_container_2_Template","assetControls","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_0_Template","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_ng_container_1_Template","toggleCheckBox","UnitListItemComponent_form_0_involve_accordion_1_ng_template_10_Template","getSelectedAssetCounts","UnitListItemComponent_form_0_involve_accordion_1_Template","UnitListItemComponent","controlContainer","checkedAlarmCounts","uncheckedAlarmCounts","selectedSitemapGroupId$","toggleAssets","toggleChildrenTree","toggleParentTree","addMultipleAlarmCounts","assetsFormArray","subTreeForm","toggleAllAlarmCounts","childrenFormArray","checkParent","checkParentAsset","checked","checkFormControl","sitemapForm","assetForm","atLeastOneChecked","addAlarmCount","alarmCountsFormArray","alarmCountFormControl","sitemapTreeChildrenArray","getVisibleAssets","UnitListItemComponent_form_0_Template","styles","getAlarmEditorDatapoints","GetAlarmsBySitemapAndDataPointIdentifier","updateThresholdAlarms","LoadDatapointsFail","LoadDatapointsSuccess","LoadAlarmsBySitemapAndDatapoint","LoadAlarmsBySitemapAndDatapointFail","LoadAlarmsBySitemapAndDatapointSuccess","ClearThresholdEditor","SaveThresholdAlarms","SaveThresholdAlarmsFail","SaveThresholdAlarmsSuccess","AlarmsToUpdate","_AlarmEditorService","LoadAlarmEditorDatapoints$","AlarmEditorActions","LoadAlarms$","SaveAlarms$","SaveAlarmsSuccess$","sitemapgroupId","isAlarmsLoaded","isAlarmsLoading","isLoadedDatapoints","isLoadingDatapoints","getSelectedDatapointId","selectedDatapointId","getIsSavingAlarms","isSavingAlarms","getAlarmsToUpdate","alarmsToUpdate","selectedAssetIds","eulaReducer","SetLoading","LoadFailure","SetPresentAlarm","selectedPresentAlarm","ClearPresentAlarm","presentAlarmsAdapter","loaded","alarmsDataReducer","PresentAlarmsDataActions","presentAlarmsData","getPresentAlarmsState","getPresentAlarmsData","selectAllPresentAlarms","selectPresentAlarmsError","selectPresentAlarmsLoaded","selectPresentAlarm","selectPresentAlarmsIsLoading","presentAlarmsState","getAllAlarms","getAlarmGroups","AlarmGroupColor","GroupColor","AlarmGroup","GroupName","AlarmCount","GroupId","AlarmColor","AlarmState","reflow","plotBorderWidth","plotShadow","LoadMany","datapointLegendsReducer","DatapointLegendsActions","getDatapointLegendsState","merge","getDatapointState","eventCalculationDrawerReducer","getDrawerState","eventCalculationDrawer","getEventCalculationDrawerIsOpen","UpdateEventCalculation","UpdateEventCalculationFail","UpdateEventCalculationSuccess","CreateEventCalculation","CreateEventCalculationFail","CreatEventCalculationSuccess","DeleteEventCalculation","calculationId","DeleteEventCalculationFail","DeleteEventCalculationSuccess","runtimeSettingsEventCalculationReducer","EventCalculationActions","eventCalculation","getRuntimeSettingsEventCalculationState","eventCalculations","getEventCalculations","getSampleCalcs","IsDisable","getSampleEventPieChart","UpdateEventCode","UpdateEventCodeFail","UpdateEventCodeSuccess","CreateEventCode","CreateEventCodeFail","CreatEventCodeSuccess","DeleteEventCode","DeleteEventCodeFail","DeleteEventCodeSuccess","eventPartyDrawerReducer","eventPartyDrawer","getEventPartyDrawerIsOpen","UpdateEventParty","UpdateEventPartyFail","UpdateEventPartySuccess","CreateEventParty","CreateEventPartyFail","CreatEventPartySuccess","DeleteEventParty","partyId","DeleteEventPartyFail","DeleteEventPartySuccess","runtimeSettingsTests","fromRuntimeTest","fromDatapoint","fromRuntimeUnits","unitsDrawer","fromRuntimeDrawer","fromEventPartyDrawer","fromEventCalculationDrawer","fromEventCalculation","rootUrl","RuntimeSettingsService","newUnits","setValues","getRuntimeTests","updateRuntimeSettings","createRuntimeSettings","deleteRuntimeSettings","StateColor","State","red","yellow","black_l3","RuntimeThresholdValue","RuntimeThreshold","EventThresholdValue","EventThreshold","RuntimeThresholdLabel","EventThresholdLabel","EventDatapointInvalidIcon","EventDatapointInvalid","EventDataPointId","RuntimeDatapointInvalidIcon","RuntimeDatapointInvalid","RuntimeDataPointId","AvailableDatapointsInvalidIcon","updateEventParties","createEventParties","deleteEventParties","updateEventCode","createEventCode","deleteEventCode","getEventCalculation","updateEventCalculation","createEventCalculation","deleteEventCalculation","EFFECTS","RuntimeSettingsEffect","_datapointService","_runtimeSettingsService","loadRuntimeSettingsTests$","loadRuntimeSettingsUnits$","fromUnits","runtimeSettingsUnits","loadDatapointLegendsMany$","loadDatapoints$","updateRuntimeSettings$","updateRuntimeSettingsSuccess$","createRuntimeSettings$","createRuntimeSettingsSuccess$","deleteRuntimeSettings$","updateEventCode$","fromEventCode","createEventCode$","deleteEventCode$","updateEventParty$","fromEventParty","updateEventPartySuccess$","defaultEventParty","EventCodes","EventCalculation","EventCalculations","EventParties","fromRuntime","ColorId","createEventParty$","createEventPartySuccess$","deleteEventParty$","loadEventCalculations$","updateEventCalculation$","updateEventCalculationSuccess$","createEventCalculation$","createEventCalculationSuccess$","deleteEventCalculation$","loadDatapointLegend$","fromDrawer","i5","runtimeSettingsTestReducer","RuntimeTestActions","getRuntimeSettingsTestsState","getRuntimeSettingsTests","getEventCalculationTable","eventParty","eventCalculationTable","EventPartiesName","LoadRuntimeLegends","LoadRuntimeLegendsFail","LoadRuntimeLegendsSuccess","dataPointLegend","isLoadingRuntimeLegends","runtimeDrawerReducer","getRuntimeLegends","UpdateRuntimeSettings","UpdateRuntimeSettingsFail","UpdateRuntimeSettingsSuccess","CreateRuntimeSettings","CreateRuntimeSettingsFail","CreateRuntimeSettingsSuccess","DeleteRuntimeSettings","DeleteRuntimeSettingsFail","DeleteRuntimeSettingsSuccess","runtimeSettingsUnit","runtimeSettingsReducer","UnitsActions","getRuntimeUnitsState","getRuntimeSettingsUnits","errorMessage","unitAlarmHistoryRecipients","LoadUserListNotificationSettings","LoadUserListNotificationSettingsSuccess","userListNotificationSettings","LoadUserListNotificationSettingsFail","unitAlarmHistoryMessageAndLog","SaveDatapointLegendIds","fromDate","unitAlarmHistory","recipients","userListNotificationSettingsLoading","userListNotificationSettingsLoaded","unitAlarmHistoryDatapointLegendsActions","fromUnitAlarmHistoryRecipients","unitAlarmHistoryLogs","fromUnitAlarmHistoryLogs","getUnitAlarmHistoryFeature","getUnitAlarmHistory","getUnitAlarmHistoryData","getUnitAlarmHistoryLoading","getUnitAlarmHistoryLoaded","getUnitAlarmHistoryError","getUnitAlarmHistoryRecipients","getUnitAlarmHistoryRecipientsData","getUserListNotificationSettings","getUserListNotificationSettingsLoading","getUserListNotificationSettingsLoaded","getUnitAlarmHistoryRecipientsLoading","getUnitAlarmHistoryRecipientsLoaded","getUnitAlarmHistoryRecipientsError","getUnitAlarmHistoryLogs","getUnitAlarmHistoryLogsData","getUnitAlarmHistoryLogsLoading","getUnitAlarmHistoryLogsLoaded","getUnitAlarmHistoryLogsError","getUnitAlarmHistoryDatapoints","getUnitAlarmHistoryDatapointLegendIds","unitAlarm","SetLookupValueThreshold","isLookupValueThreshold","Suppression","Initialized","RefreshTurnedOn","RefreshTurnedOff","UpdateAlarms","UpdateServerAlarms","UpdateAlarmsSuccess","UpdateAlarmsFail","CreateAlarm","CreateAlarmSuccess","CreateAlarmFail","CreateAnotherAlarm","CreateAnotherAlarmSuccess","CreateAnotherAlarmFail","HideDisabledAlarms","ShowDisabledAlarms","LoadAlarmSuppression","LoadAlarmSuppressionFail","LoadAlarmSuppressionSuccess","suppression","SaveAlarmSuppression","SaveAlarmSuppressionFail","SaveAlarmSuppressionSuccess","SaveAlarmSuppressionEnabled","isSuppressionEnabled","SaveAlarmSuppressionEnabledFail","SaveAlarmSuppressionEnabledSuccess","AcknowledgeAlarm","alarmHistoricalId","AcknowledgeAlarmSuccess","AcknowledgeAlarmFail","ToggleAlarmSuccess","alarmReducers","unitAlarmsFullscreen","initialized","savedUnitAlarms","isSuppressionLoading","isSuppressionLoaded","isSuppressionSaving","isSuppressionSaved","alertSuppression","refresh","unitAlarmsActions","SuppressionEnabled","IsEnabled","unitAlarmsDrawer","activeDrawerType","unitAlarmsDrawerActions","getUnitAlarmsFullscreenState","getUnitAlarmsDrawerState","getUnitAlarms","getSavedUnitAlarms","getUnitAlarmsLoading","getTotalUnitAlarms","getUnitAlarmsLoaded","getUnitAlarmsError","getUnitAlarmsInitialized","getUnitAlarmsFirstLoad","getAlarmDrawerIsOpen","getUnitAlarmsAutoRefresh","getActiveDrawerType","getIsLookUpValueThreshold","getAssetAlertSuppressionLoading","getAlarmDrawerSelectedAlarm","getAssetAlertSuppressionSaving","getAssetAlertSuppression","getAssetAlertSuppressionLoaded","cancelChangesPayload","UserAccessActions","favorites","CreateFavorites","CreateFavoritesFail","CreateFavoritesSuccess","ToggleSetHome","ToggleSetHomeFail","ToggleSetHomeSuccess","DeleteFavorites","DeleteFavoritesFail","DeleteFavoritesSuccess","CreateHomePage","CreateHomePageFail","CreateHomePageSuccess","Replace","ReplaceFail","ReplaceSuccess","CreateJobTitle","CreateJobTitleFail","CreateJobTitleSuccess","SetDrawerId","drawerId","SetDrawerIdFail","LoadAllDashboards","LoadAllDashboardsFail","LoadAllDashboardsSuccess","userDashboards","AddToDisplayedTiles","RemoveFromDisplayedTiles","userNotificationSettings","LoadFailed","SendTest","userNotificationSettingsRecipient","SendTestSuccess","SendTestFail","ResetEditedUserAccess","DashboardToggle","HomeDashboardToggle","TileToggle","PermissionToggle","AllDashboardsToggle","ModifyAllDashboards","dashboardIds","AllTilesToggle","ModifyAllTiles","loadColorTheme","loadColorThemeSuccess","loadColorThemeFailure","deleteOne","DeleteAll","DeleteAllSuccess","DeleteAllFail","LoadAssetNamePreference","LoadAssetNamePreferenceSuccess","LoadAssetNamePreferenceFailure","Loading","Loaded","SitemapGroupSelected","SitemapGroupPerpetualSelected","SitemapAccordionToggle","AssetsSelected","UserSelected","UserGroupSelected","FullAccessSelected","hasFullAccess","UserFleetLoad","UserFleetLoadSuccess","userFleetAccess","SessionUserFleetLoad","SessionUserFleetLoadSuccess","UserFleetLoadError","UserFleetSave","UserFleetSaveSuccess","UserFleetSaveError","ClearUnitAccess","Changes","SetEditedUser","LoadUserAccess","LoadUserAccessFail","LoadUserAccessSuccess","SaveUserAccess","SaveUserAccessFail","SaveUserAccessSuccess","ClearEditedUser","InitialLoad","InitialLoadSuccess","InitialLoadFail","Search","SearchSuccess","SearchFail","AddSearchResult","UserNotificationSettingsEffects","userNotificationSettingsService","UserNotificationActions","onUpdate$","onSendTest$","onSaveSuccess$","onSendTestSuccess$","recipient","_angular_core__WEBPACK_IMPORTED_MODULE_9__","DrawerTypeIds","Profile","NewUser","NewUserGroup","NewAlarmGroup","NewAlertSchedule","EditUserGroupRootSitemapGroup","EditAlarmGroup","EditAlertSchedule","isAssigning","isAssigned","userFavoritesReducer","colorThemesReducer","colorThemes","User","initialResults","isInitialLoading","isSearching","isLoadFail","CoreCustomerActions","UserSearchActions","JobTitle","jobTitleReducer","JobTitleActions","UserNotificationSettingseReducer","isSendingTest","AssetNotificationSettingsReducer","AssetNotificationRecipientActions","selectedDrawerId","featureAccessAdapter","displayedTiles","featureAccessReducer","FeatureAccessActions","selectUserDashboards","selectUserDashboardsIds","userAccessAdapter","accessPermissions","editedUser","editedUserReducer","edited_user_reducer_selectIds","selectLoadedUserIds","selectAccessEntities","currentlyEditedReducer","FeatureAccessEditActions","stateDashboardId","be","updatedTiles","newState","uniq","difference","availableAccess","fromAvailableFeatureAccess","fromEditedUser","currentlyEdited","fromFeatureAccessEdit","processSitemapGroupSelection","perpetualSitemapGroupIds","changedSitemapGroupIds","processSelections","processAssetsSelection","changedAssetIds","hasUserFullAccess","perpetualAccessList","perpetualAssetAccessList","processAccordionToggle","expandedSitemapGroupIds","modifiedExpandedSitemapGroupIds","current","union","createSitemapGroupTree","currentSitemap","rootSitemapGroupId","tree","rootGroup","sitemapsByParentId","rootGroupExtended","createSitemapExtended","pathIds","buildTree","childExtended","subTree","getPerpetualChildrenSitemapGroups","collectedSitemapGroupIds","treeNode","findSitemapGroupTreeNodeById","collectChildSitemapGroupIds","sitemapGroupIds","getSitemapGroupChildrenAssets","selectedAssets","childrenAssets","assetsBySitemapId","collectChildrenAssets","selectedAssetsMap","sitemapAssets","assetExtended","createAssetExtended","getUserSitemapGroupTree","perpetualSitemapGroups","expandedAccordions","treeExtended","perpetualSitemapsSet","selectedAssetsSet","expandedAccordionsSet","userGroupRootSitemap","userGroupTree","SiteMapGroupId","rootSitemapGroup","perpetual","expanded","getSitemapGroupAssets","selectSelectedAssets","buildUserTree","calculateTreeAssetCounts","culateSelectedAssetCounts","childSitemap","allAssetsCount","selectedAssetsCount","isChanged","selectedUserGroupId","CustomerUserAccessFilterId","sessionUserPerpetualSitemapGroups","sessionUserSelectedAssets","isUserFleetLoaded","isUserFleetLoading","unitAccessReducer","UnitAccessActions","unitAccessHelpers","CustomerUserAccessActions","UserSchedulesReducer","UserSchedulesActions","assetNamePreferencesReducer","assetNamePreferences","fromSearch","fromJobTitles","fromUserNotificationSettings","userDrawer","fromUserDrawer","unitAccess","userPreferences","fromColorTheme","assetNotificationRecipients","fromAssetNotificationRecipients","fromUserSchedules","assetNamePreferencesState","fromAssetNamePreferences","getUserDrawerState","getIsUserDrawerOpen","getUserDrawerSelectedId","getSearchEntitiesState","getSearchUserEntities","getAllSearchResults","getRoutedUser","getIsSearchInitialLoading","getIsSearchInitialLoaded","getSearchSelectedUserId","getIsSearchInitialLoadingFail","getIsSearchSearching","getInitialUserResults","getSearchSelectedUser","getIsSearchSaving","getUserById","getUserNotificationSettingsState","getIsUserNotificationSettingsLoading","getUserNotificationSettingsError","getIsUserNotificationSettingsLoaded","getUserNotificationSettings","getIsUserNotificationSettingsSaving","getIsUserNotificationSendingTest","getAssetNotificationRecipients","getIsUserNotificationSettingsDirty","getFavorites","getAssetNotificationRecipientsIsDeleting","getIsAssigning","getFavoritesIsLoading","getFavoritesIsLoaded","getFavoritesData","getFavoriteId","getFavoritesError","favoriteAssetObject","favoriteDashboard","dashboardTiles","FavoriteId","getFavoriteObj","getJobTitleState","getIsDeleting","getIsLoading","getIsSaving","getAllJobTitles","getAllJobTitlesOrderByName","getAvailableAccess","getUserAccess","getCurrentlyEdited","getUserDashboards","fromAvailableAccess","getUserDashboardsIds","getEditedUser","getEditedUserId","getLoadedUserIds","getAllUsersEntities","getUserAccessLoading","getUserAccessLoaded","getUserAccessSaving","getEditedUserAccess","allUsersAccess","getEditedUserCurrentDashboards","getEditedUserSavedDashboards","getEditedUserCurrentTiles","getDisplayedTiles","allDashboards","selectedDashboards","getDisplayedDashboards","dashboardsIds","displayedDashboards","displayed","getDisplayedTilesAsObj","allDisplayedTiles","Permissions","getIsChangedAccess","saved","edited","isEqual","getAllDashboardsSelected","getAllTilesSelected","getUserPreferences","userState","getColorThemesLoaded","getColorThemesLoading","getAssetNamePreferenceState","getColorThemesError","getUserAssetNamePreferencesLoaded","getUserAssetNamePreferencesLoading","getUnitAccessState","getUserAssetNamePreferencesError","getIsUnitAccessChanged","getUnitAccessLoading","getUnitAccessLoaded","getUnitAccessSelectedSitemapGroupId","getExpandedAccordionSitemaps","getUnitAccessPerpetualSitemapGroups","getUnitAccessSessionUserPerpetualSitemapGroups","getUnitAccessSelectedAssets","getUnitAccessSessionUserSelectedAssets","getUnitAccessSelectedUserId","getCustomerUserAccessFilterId","getIsCurrentUserFiltered","getUnitAccessSelectedUserGroupId","getHasFullAccess","getSessionUserHasFullAccess","getSitemapTree","getAlarmEditorSitemapTree","getSitemapTreeName","siteMapeTree","getUnitAccessPerpetualChildrenSitemapGroups","getUnitAccessSessionUserPerpetualChildrenSitemapGroups","sessionPerpetualSitemapGroupIds","getUnitAccessUserSitemapGroupTree","getIsUserFleetLoading","getUserSchedulesData","getIsUserFleetLoaded","SearchUserGroup","SearchUserGroupSuccess","userGroupIds","SearchUserGroupFail","SearchUserGroupRefresh","SitemapSearch","SitemapSearchSuccess","sitemapItemIds","SitemapSearchFail","SitemapSearchSelect","sitemapItem","SitemapSearchClear","MarkUserGroupFormDirty","MarkUserGroupFormClean","SearchRfvUsers","SearchRfvUsersFail","SearchRfvUsersSuccess","SearchCwsUsers","SearchCwsUsersFail","SearchCwsUsersSuccess","LinkExistingCwsUser","LinkExistingCwsUserFail","LinkExistingCwsUserSuccess","CreateRfvUser","CreateRfvUserFail","CreateRfvUserSuccess","CreateCustomerAccess","CreateCustomerAccessFail","CreateCustomerAccessSuccess","CopyUserPermisions","CopyUserPermisionsFail","CopyUserPermisionsSuccess","ClearNewUser","ResendWelcomeEmail","ResendWelcomeEmailFail","ResendWelcomeEmailSuccess","getIsUserGroupSearching","getUserGroupSearchIds","searchUserGroupIds","getUserGroupSearchResults","getAllUserGroupsWithRoot","rootUserGroup","ParentName","ParentGroupId","getFilteredAllUserGroups","getUserGroupSitemapSearchIds","getIsUserGroupSitemapSearching","isSitemapSearching","searchSitemapItemIds","getUserGroupSitemapSearchResults","searchIds","dict","reverse","getUserGroupSitemapSearchError","searchSitemapError","getIsUserGroupDirty","getUserGroupSearchFilter","userGroupSearchFilter","getIsSearchingForRfvUsers","isSearchingForRfvUsers","getSearchRfvUserResults","searchRfvUsersResults","getIsSearchingForCwsUsers","isSearchingForCwsUsers","getSearchCwsUserResults","searchCwsUsersResults","getUniqueSearchCwsUserResults","CwsLoginId","getIsInserting","getErrors","errors","getCreatedUser","createdUser","getIsSearchCompleted","isSearchCompleted","copyingUserPermissions","parentUserGroupId","ctx_r6","schedule_r16","recipientUnit_r13","ctx_r19","goToNotificationRecipients","i_r17","deleteNotificationRecipient","UserNotificationRecipientListComponent_ng_template_10_ng_container_0_ng_template_2_involve_accordion_0_div_10_involve_icon_7_Template","ctx_r15","notificationRecipientsPermission","hideViewAlarms","UserNotificationRecipientListComponent_ng_template_10_ng_container_0_ng_template_2_involve_accordion_0_div_10_Template","UserNotificationRecipientListComponent_ng_template_10_ng_container_0_ng_template_2_involve_accordion_0_Template","recipientList","UserNotificationRecipientListComponent_ng_template_10_ng_container_0_ng_container_1_Template","UserNotificationRecipientListComponent_ng_template_10_ng_container_0_ng_template_2_Template","_r11","UserNotificationRecipientListComponent_ng_template_10_ng_container_0_Template","error_r31","UserNotificationRecipientListComponent_ng_template_12_ng_container_0_Template","UserNotificationRecipientListComponent_ng_template_12_ng_template_2_Template","error$","_r30","UserNotificationRecipientListComponent","isActive","getAttribute","getName","pop","scheduleName","confirmDelete","confirmDeleteAllRecipient","UnsubscribeAlertSchedule","UserNotificationRecipientListComponent_button_6_Template","UserNotificationRecipientListComponent_ng_container_8_Template","UserNotificationRecipientListComponent_ng_template_10_Template","UserNotificationRecipientListComponent_ng_template_12_Template","_r3","UserNotificationRecipientListModule","FlexLayoutModule","RouterModule","SelectDashboard","SelectTile","Reload","OpenSiteDrawer","SelectSitemapGroup","LoadSelectedSitemapGroup","LoadSelectedSitemapGroupFail","LoadSelectedSitemapGroupSuccess","SelectAsset","LoadSelectedAsset","LoadSelectedAssetFail","LoadSelectedAssetSuccess","ClearSelectedAsset","SaveTimeStamp","SaveIdOnTileHeaderClick","tileHeaderId","NavigateToAsset","NavigateToSitemapGroup","HideReloadButton","ShowReloadButton","activateReload","disactivateReload","HideFavoriteButton","ShowFavoriteButton","setActiveTabs","activeTabs","dashboardReducer","reload","activeDrawerId","isSelectedAssetLoaded","isSelectedAssetLoading","isSelectedSitemapGroupLoading","isSelectedSitemapGroupLoaded","lastReload","timeStamp","now","currentTileHeaderId","isFavoriteHidden","navigateToAsset$","d","navigateToSitemapGroup$","onSelectSitemapGroup$","onSelectAsset$","selectedSitemapAssetId","loadSelectedAsset$","DashboardSelectors","loadSelectedAssetFail$","loadSelectedAssetSuccess$","first","createUnitCreationLogSuccess$","TilesWithoutDashboards","cols","rows","alwaysEnabled","tileNavigationMappings","getReload","getSelectedDashboardId","getSelectedSitemapGroupId","getSelectedSitemapGroup","getSitemapEntities","getSelectedSitemapGroupName","getSelectedAsset","getAssetEntities","getSelectedAssetName","getSelectedPath","getSelectedAssetType","getAssetTypesEntities","getSelectedDashboards","getAssetTypeDashboards","getSelectedDashboard","getDashboardEntities","getAllTiles","allTiles","getSelectedDashboardTiles","getFirstTileIdOnTheScreen","getSelectedDashboardName","gridsterId","getSelectedDashboardHiddenTiles","mapping","DestinationTile","DestinationTileID","getSelectedDashboardTileIds","getSelectedTileId","getCurrentHeaderTileId","isTileSelected","getSelectedTile","selectedTiles","getAdminDashboards","getSelectedTileName","getActiveDrawerId","getAnyDrawerOpen","getSiteVisualization","siteVisualization","getSiteVisualizationAssets","siteVisualizationAssets","getSiteVisualizationDataPoints","siteVisualizationDatapoints","getSiteVisualizationSelectedLink","siteVisualizationSelectedLink","getDeleteSiteVisualizationLink","siteVisualizationDeletedLink","getSaveSiteVisualizationLink","siteVisualizationSavedLink","layoutDrawerOpen","dashboardDrawerOpen","getReloadDisactivated","getReloadDisactivatedOrAnyDrawerOpen","anyDrawerOpen","getCurrentActionRateObj","getLog","selectedDashboardTiles","dashboardName","fullscreenName","sitemapGroupName","selectedDashboardTileIds","reloadCount","reloadDisactivatedOrAnyDrawerOpen","routeParams","routeDashboardId","routeAssetId","routeSitemapGroupId","routeFullscreenId","getActionRateObject","actionRateObj","createActionRateObj","selectedRefreshRates","flatten","refreshObj","actionRate","getLastReload","getIsReloadHidden","getIsFavoriteHidden","getActiveTabs","SectionService","sectionId","getAssetTypes","LoadCategories","LoadCategoriesFail","LoadCategoriesSuccess","SetEditedFilterId","SetEditedFilterData","filterPostCategories","SetEditedUnits","AddUnit","AddMultipleUnits","RemoveUnit","RemoveAll","SearchUnits","SaveGlobalFilter","SaveGlobalFilterFail","SaveGlobalFilterSuccess","UpdateGlobalFilter","UpdateGlobalFilterFail","UpdateGlobalFilterSuccess","AddAppliedOptionsCategory","appliedFilterCategory","RemoveAppliedOptionsCategory","filterName","RemoveAllApplied","SetFilterName","ClearGlobalFilter","LoadRequired","LoadRequiredFail","LoadRequiredSuccess","requiredOptions","OptionsLoaded","SetSelectedOptionsList","SetRequiredOptionsListKey","globalFilters","SetSelectedFilter","setMobileScreen","deleteConfirmPayload","FilterScreens","Categories","Selection","categoriesReducer","appliedOptionsAdapter","appliedOptions","changedControlsReducer","editFilterAdapter","editedFilterId","editFilterReducer","edit_filter_reducer_selectIds","edit_filter_reducer_selectEntities","filterUnitsAdapter","searchQuery","filterUnitsReducer","filter_units_reducer_selectIds","selectUnitsList","selectUnitsIds","optionsAdapter","SubCategoryId","selectedOptionsListId","optionsReducer","requiredOptionsListKey","options_reducer_selectIds","options_reducer_selectEntities","selectOptionsListIds","selectOptionsListEntities","selectAllEntities","userFilters","savedFiltersReducer","SelectedFilterActions","layoutReducer","displayedMobileScreen","LayoutActions","selectedFilter","fromSelectedFilter","savedFilters","changedControls","editFilter","layout","getGlobalFilterState","getSavedFilters","getUserSavedFilters","getLayoutSlice","getMobileScreen","getSelectedFilter","getSelectedFilterId","getSelectedFilterObj","getSelectedFilterName","getCategoriesState","getCategoriesLoaded","getFilterCategories","getFilterCategoryById","getOptionsListState","getOptionsLoading","getOptionsLoaded","getOptionsEntities","fromOptionsList","getAllOptionsListsIds","getSelectedOptionsListId","getOptionsListLabel","categoryObject","subCategoryObject","Subcategories","CategoryName","SubcategoryName","getSelectedOptions","optionsEntities","getAllOptions","getOptionsByCategoryId","getIsSelectedOptionsListLoaded","getOptionsById","allIds","getChangedControlsState","getAppliedOptionsIds","fromChangedControls","getAppliedOptionsEntities","getFilterName","getBadgesCount","applied","badgesCount","subcategoryId","getSelections","optionsDefinitions","selections","categoryObj","subcategoryObj","selectionControls","optionDefinition","opt","optionOperator","Operators","OperatorId","operator","OptionLabel","OptionType","categoryLabel","subcategoryLabel","getUnitsListState","getUnitsList","getUnitsIds","getSearchQuery","getUnitsSearchResults","query","matchString","getIsSelectionsDisplayed","appliedOptionsIds","getEditedFilterState","getEditedFilterId","getEditFilterIds","fromEditFilter","getEditedFilterEntities","getEditedFilterLoading","getEditFilterAll","getIdsToDownload","getIsFilterDirty","editedFilter","appliedIds","editedIds","dirty","categoryApplied","categoryEdited","appliedOption","editedOption","AssetIds","getPostData","editedId","LegendValue","existingCategoryObj","InvolveAccordionContentDirective","lG2","InvolveAccordionGroupComponent","CdkAccordion","isOnlyExpanded","accordion","_accordions","contentQueries","dirIndex","InvolveAccordionComponent","InvolveAccordionHeaderComponent","ngContentSelectors","InvolveAccordionComponent_div_5_ng_template_2_Template","portal","CdkAccordionItem","disabled","flex","maxFlex","maxHeight","_accordionGroup","_uniqueSelectionDispatcher","_vcr","defaultExpanded","showChevron","activeStyling","stateKey","expandedChange","ngAfterContentInit","_lazyContent","opened","startWith","TemplatePortal","InvolveAccordionComponent_involve_icon_4_Template","InvolveAccordionComponent_div_5_Template","InvolveBadgeOptionComponent","TemplateRef","DATA_CY_TYPE","useValue","InvolveBadgeOptionComponent_ng_template_0_Template","InvolveBadgeComponent_span_0_ng_container_1_ng_container_1_ng_container_2_Template","option_r1","templateRef","InvolveBadgeComponent_span_0_ng_container_1_ng_container_1_Template","InvolveBadgeComponent_span_0_ng_container_2_ng_container_1_ng_container_2_Template","InvolveBadgeComponent_span_0_ng_container_2_ng_container_1_Template","InvolveBadgeComponent_span_0_ng_container_3_ng_container_1_ng_container_2_Template","InvolveBadgeComponent_span_0_ng_container_3_ng_container_1_Template","InvolveBadgeComponent_span_0_ng_container_1_Template","InvolveBadgeComponent_span_0_ng_container_2_Template","InvolveBadgeComponent_span_0_ng_container_3_Template","InvolveBadgeComponent","InvolveBadgeComponent_span_0_Template","InvolvePrimaryButtonComponent","InvolveButtonComponent","_host","renderer","nativeElement","attrs","InvolvePrimaryButtonComponent_ng_container_0_Template","InvolvePrimaryButtonComponent_ng_template_1_Template","isProcessing","InvolveSecondaryButtonComponent","InvolveSecondaryButtonComponent_ng_container_0_Template","InvolveSecondaryButtonComponent_ng_template_1_Template","_disabled","coerceBooleanProperty","width","_viewInit","ngAfterViewInit","ngAfterContentChecked","clientWidth","hostVars","hostBindings","InvolveButtonComponent_ng_container_0_Template","InvolveButtonComponent_ng_template_1_Template","pseudo","InvolveCheckboxComponent","_id","_value","_onChange","checkedChange","inverted","indeterminate","_required","_onTouch","valueAccessor","onClick","onKeydown","writeValue","registerOnChange","fn","registerOnTouched","onContainerClick","setDisabledState","InvolveFormFieldControl","useExisting","InvolveCheckboxComponent_involve_icon_3_Template","InvolveCheckboxComponent_involve_icon_4_Template","CollapsiblePanelComponent_div_1_div_1_Template","collapse","CollapsiblePanelComponent","_collapse","collapseChange","animationState","CollapsiblePanelComponent_div_1_Template","CollapsiblePanelComponent_ng_content_2_Template","CollapsiblePanelComponent_involve_icon_4_Template","CollapsiblePanelComponent_involve_icon_5_Template","trigger","transition","animate","InvolveColorPickerSelectorComponent","_color","colorChange","alphaChannel","hexMode","_swatchPosition","_swatchMoving","_huePosition","_hueMoving","_alphaPosition","_alphaMoving","hasInit","_swatchContext","_swatchCanvas","getContext","canvas","_swatchFrame","height","clientHeight","_hueContext","_hueCanvas","_hueFrame","_alphaContext","_alphaCanvas","_alphaFrame","_previewContext","_previewCanvas","_inputContainer","parseColor","colorToInput","invalidate","hsv","s","h","_inputElement","_intputHint","innerText","inputToColor","toggleHexMode","firstChange","updateInput","_swatchCursor","left","top","_hueSlider","_alphaSlider","isLight","classList","remove","add","drawHue","drawSwatch","drawAlpha","drawPreview","beginPath","rect","closePath","valueGradient","createLinearGradient","addColorStop","fillStyle","saturationGradient","hsl","globalCompositeOperation","clearRect","hueGradient","fillRect","drawAlphaBackground","alphaGradient","context","blockSize","floor","blockWidth","blockHeight","mousedown","mousemove","mouseup","getBoundingClientRect","clientY","bottom","clientX","right","InvolveColorPickerComponent_ng_container_0_ng_template_5_ng_template_0_Template","InvolveColorPickerComponent_ng_container_0_ng_template_5_Template","getColor","iconSize","hide$","InvolveColorPickerComponent_ng_container_1_ng_template_1_ng_template_0_Template","InvolveColorPickerComponent_ng_container_1_ng_template_1_Template","origin","_r16","_r19","ctx_r18","onColorChange","InvolveColorPickerComponent_ng_template_2_div_3_Template","autoSelect","InvolveColorPickerComponent","debounce","_debounce$","class","_colorChange$","openChange","destroyed$","_onchange","_ontouch","_selectedColor","NG_VALUE_ACCESSOR","InvolveColorPickerComponent_ng_container_0_Template","InvolveColorPickerComponent_ng_container_1_Template","InvolveColorPickerComponent_ng_template_2_Template","pad","pinInt","n","max","pinFloat","fractionDigits","Random","random","substr","rgb","_rgbProxy","_rgb","r","g","_hslProxy","_hsl","l","_hsvProxy","_hsv","_alpha","brightness","sqrt","isDark","Proxy","isRgb","isHsl","isHsv","getRandomColor","match","exec","Palettes","standard","rgba","parseInt","parseCssUnit","rgbToHsl","rgbToHsv","hslToRgb","hslToHsv","hsvToRgb","hsvToHsl","f","q","mod","hue2rgb","CSS4","black","silver","white","maroon","purple","fuchsia","lime","olive","navy","blue","teal","aqua","orange","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","gainsboro","ghostwhite","gold","goldenrod","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","rebeccapurple","pastels","highContrast","dark","light","ColorPalette","_palette","palette","_currentIndex","_colors","scale","endsWith","isPercent","pct","isDeg","deg","isRad","PI","isGrad","isTurn","content","alwaysShowIcon","copiedMessage","InvolveCopyComponent","isIconVisible","_hovering","showContent","onMouseover","onMouseout","messageToCopy","execCommand","InvolveCopyComponent_div_1_Template","InvolveCopyComponent_involve_icon_3_Template","InvolveCopyComponent_span_4_Template","opacity","transform","keyframes","fontWeight","unitOfMeasurement","InvolveDataItemComponent","labelClass","normalizeDividerColorFormat","dividerColor","labelClasses","labelStyleClasses","InvolveDataItemComponent_span_6_Template","InvolveDatePickerComponent","_controlContainer","defaultConfig","closeOnSelect","disableKeypress","unSelectOnClick","drops","mode","valueChange","_test","onChange","onTouched","userConfig","subscribeToDate","minDate","maxDate","controlName","propertyName","formControl","warn","onModelChange","isSame","None","minTime","maxTime","stepMinute","forwardRef","leftSecondaryNavClicked","leftSecondaryNavDisabled","onGoToCurrent","rightSecondaryNavClicked","rightSecondaryNavDisabled","CalendarNavComponent","isLabelClickable","showLeftNav","showLeftSecondaryNav","showRightNav","showRightSecondaryNav","leftNavDisabled","rightNavDisabled","showGoToCurrent","onLeftNav","onLeftSecondaryNav","onRightNav","onRightSecondaryNav","onLabelClick","leftNavClicked","rightNavClicked","labelClicked","CalendarNavComponent_button_6_Template","CalendarNavComponent_button_8_Template","CalendarNavComponent_button_11_Template","UtilsService","func","wait","args","arguments","apply","createArray","size","Array","convertToMoment","isDateValid","isValid","getDefaultDisplayDate","allowMultiSelect","isAfter","getInputType","isArray","ECalendarValue","MomentArr","StringArr","String","Moment","convertToMomentArray","retVal","Boolean","convertFromMomentArray","convertTo","convertToString","tmpVal","clearUndefined","updateSelected","isMultiple","currentlySelected","granularity","closestParent","selector","parentElement","onlyTime","m","granularityFromType","calendarType","createValidator","validators","md","_isValid","every","isSameOrAfter","isSameOrBefore","inputVal","given","datesStringToStringArray","getValidMomentArray","shouldShowCurrent","isDateInRange","to","isBetween","convertPropsToMoment","hasOwnProperty","shouldResetCurrentView","prevConf","currentConf","getNativeElement","ECalendarMode","Day","DayTime","Month","Time","DatePickerService","utilsService","timeSelectService","daytimeCalendarService","onPickerClosed","closeOnSelectDelay","closeOnEnter","openOnFocus","openOnClick","onOpenDelay","showNearMonthDays","showWeekNumbers","enableMonthSelector","locale","hideOnOutsideClick","getConfig","_config","getDefaultFormatByMode","getDayConfigService","pickerConfig","isDayDisabledCallback","weekDayFormat","weekDayFormatter","firstDayOfWeek","monthFormat","monthFormatter","yearFormat","yearFormatter","dayBtnFormat","dayBtnFormatter","dayBtnCssClassCallback","monthBtnFormat","monthBtnFormatter","monthBtnCssClassCallback","isMonthDisabledCallback","multipleYearsNavigateBy","showMultipleYearsNavigation","returnedValueType","numOfMonthRows","getDayTimeConfigService","getTimeConfigService","pickerClosed","isValidInputDateValue","convertInputValueToMomentArray","datesStrArr","SelectEvent","INPUT","SELECTION","DomHelper","setYAxisPosition","container","anchor","anchorRect","containerRect","scrollHeight","setXAxisPosition","dimElem","opens","offsetWidth","isTopInView","isBottomInView","innerHeight","isLeftInView","isRightInView","innerWidth","appendElementToPosition","position","visibility","setElementPosition","onLeftNavClick","onRightNavClick","dateSelected","selectEvent","dayCalendarConfig","displayDate","_selected","timeSelectConfig","ctx_r23","dayTimeCalendarConfig","DatePickerComponent","dayPickerService","domHelper","elemRef","cd","isInitialized","placeholder","hideStateHelper","isFocusedTrigger","handleInnerElementClickUnlisteners","globalListenersUnlisteners","api","showCalendars","bind","hideCalendar","moveCalendarTo","_areCalendarsShown","componentConfig","areCalendarsShown","startGlobalListeners","appendToElement","calendarWrapper","inputElementContainer","popupElem","stopGlobalListeners","inputElementValue","processOnChangeCallback","onChangeCallback","currentDateView","_currentDateView","dayCalendarRef","monthCalendarRef","dayTimeCalendarRef","onBodyClick","onScroll","inputValue","init","changedByInput","onTouchedCallback","validate","validateFn","initValidators","setElementPositionInDom","calendarContainer","setInputElementContainer","handleInnerElementClick","appendTo","listen","inputFocused","onOpenDelayTimeoutHandler","inputBlurred","timeSelectRef","triggerChange","toggleCalendarMode","onViewDateChange","strVal","ignoreClose","onDateClick","onKeyPress","keyCode","momentDate","ul","DayTimeCalendarService","DayCalendarService","TimeSelectService","NG_VALIDATORS","DatePickerComponent_dp_day_calendar_6_Template","DatePickerComponent_dp_month_calendar_7_Template","DatePickerComponent_dp_time_select_8_Template","DatePickerComponent_dp_day_time_calendar_9_Template","_c5","hideInputContainer","getWeekdayName","weekday_r4","week_r5","isoWeek","day_r9","dayClicked","getDayBtnText","getDayBtnCssClass","DayCalendarComponent_div_0_div_5_span_1_Template","DayCalendarComponent_div_0_div_5_button_2_Template","goToCurrent","CalendarMode","DayCalendarComponent_div_0_span_4_Template","DayCalendarComponent_div_0_div_5_Template","navLabel","_shouldShowCurrent","weekdays","weeks","onMonthCalendarLeftClick","onMonthCalendarSecondaryLeftClick","onMonthCalendarRightClick","onMonthCalendarSecondaryRightClick","monthSelected","monthCalendarConfig","DayCalendarComponent","dayCalendarService","onMonthSelect","onNavHeaderBtnClick","isInited","currentCalendarMode","moveCalendarsBy","generateMonthArray","getHeaderLabel","shouldShowLeft","shouldShowRight","generateWeekdays","inputValueType","getMonthCalendarConfig","handleConfigChange","day","cssClasses","currentMonth","prevMonth","nextMonth","currentDay","customCssClass","weekday","month","amount","previousValue","DayCalendarComponent_div_0_Template","DayCalendarComponent_dp_month_calendar_1_Template","DEFAULT_CONFIG","DAYS","generateDaysMap","firstDayIndex","monthArray","firstDayOfWeekIndex","firstDayOfBoard","today","daysOfCalendar","selectedDay","isDateDisabled","weekIndex","removeNearMonthWeeks","weekdayNames","su","mo","tu","we","th","fr","sa","daysMap","dayKey","isBefore","currentMonthView","generateDaysIndexMap","isNavHeaderBtnClickable","DayTimeCalendarComponent","dayTimeCalendarService","updateDay","emitChange","timeChange","updateTime","DAY_FORMAT","TIME_FORMAT","COMBINED_FORMAT","updated","MonthCalendarService","validateConfig","generateYear","year","isMonthDisabled","getMonthBtnText","getMonthBtnCssClass","isInteger","month_r3","monthClicked","MonthCalendarComponent_div_3_button_1_Template","monthRow_r1","MonthCalendarComponent","monthCalendarService","toggleCalendar","yearMonths","showSecondaryLeftNav","showSecondaryRightNav","onLeftSecondaryNavClick","navigateBy","onRightSecondaryNavClick","cssClass","MonthCalendarComponent_div_3_Template","increase","decrease","timeSeparator","showIncSecond","seconds","showDecSecond","toggleMeridiem","showToggleMeridiem","meridiem","TimeSelectComponent","calculateTimeParts","showDecHour","shouldShowDecrease","showDecMinute","showIncHour","shouldShowIncrease","showIncMinute","shouldShowToggleMeridiem","momentValue","getTimeFormat","minutesChange","setTime","hoursChange","hours","minutes","getMinutes","getSeconds","getMeridiem","TimeSelectComponent_ng_container_10_Template","TimeSelectComponent_li_11_Template","showSeconds","showTwentyFourHours","hours12Format","hours24Format","meridiemFormat","minutesFormat","minutesInterval","secondsFormat","secondsInterval","timeConfigs","newTime","onReloadClick","defaultStartDate","defaultEndDate","InvolveDateRangeComponent","emitEvent","startDateMin","startDateMax","endDateMin","showIcon","startDateChange","endDateChange","dateRangeChange","reloadClicked","setEndDateMin","setStartDateMax","InvolveDateRangeComponent_involve_icon_3_Template","InjectionToken","CypressValueAccessor","CypressDirective","__tags","dataCy","_dataCy","cypressEnabled","_type","_parent","InvolveDirectiveModule","InvolveTooltipModule","htmlText","InvolveOverflowDirective","htmlElement","overflow","checkOverflow","onResize","offsetHeight","scrollWidth","InvolveOverflowDirective_ng_container_2_Template","InvolveOverflowDirective_ng_template_3_Template","InvolveOverflowDirective_ng_template_4_Template","InvolveEquationEditorComponent","hasError","summaryChange","handleInput","_textEl","onTouch","scrollMirror","preventDefault","clipboardData","span","html","_display","scrollTo","scrollLeft","scrollTop","originalValue","allowReplace","allKeysFoundInString","parsedValue","hadError","foundInString","input","regexp","RegExp","space","replacement","InvolveEquationEditorModule","InvolveInputModule","onExport","format_r8","toUpperCase","InvolveExportComponent_ng_container_3_ng_container_5_involve_menu_button_5_Template","formats","InvolveExportComponent_ng_container_3_ng_container_3_Template","InvolveExportComponent_ng_container_3_ng_container_4_Template","InvolveExportComponent_ng_container_3_ng_container_5_Template","entries","InvolveExportComponent","fileName","includeNestedOnly","csv","xlsx","_export","exportCsv","exportXlsx","getValue","blob","Blob","workbook","book_new","worksheets","createWorksheets","shift","ws","dupes","sheet","book_append_sheet","worksheet","nameValue","z","json_to_sheet","accessor","InvolveExportComponent_ng_container_3_Template","dashboard_r2","go","InvolveFeatureBarComponent_div_0_div_1_ng_template_4_li_2_involve_icon_1_Template","subtile_r15","goToScreen","getTile","TilePermissionId","IconCodeTag","getTileTooltip","ToolTipId","ToolTipText","tile_r13","InvolveFeatureBarComponent_div_0_div_1_ng_template_4_ng_container_3_li_5_Template","filterTileNavigation","_r24","onMouseLeave","onMouseHover","InvolveFeatureBarComponent_div_0_div_1_ng_template_4_li_2_Template","InvolveFeatureBarComponent_div_0_div_1_ng_template_4_ng_container_3_Template","InvolveFeatureBarComponent_div_0_div_1_ng_template_4_Template","activeId","hoverId","overlayPositions","InvolveFeatureBarComponent_div_0_div_1_Template","dashboards$","InvolveFeatureBarComponent","_assetTypeId$","hasMouse","ConnectionPositionPair","originX","originY","overlayX","overlayY","subtile","tilePermissionId","perm","InvolveFeatureBarComponent_div_0_Template","iconName","INVOLVE_ERROR","InvolveErrorComponent","formField","InvolveErrorComponent_involve_icon_0_Template","subscript","labelId","InvolveFormFieldComponent_div_7_ng_container_2_ng_template_2_ng_container_0_Template","InvolveFormFieldComponent_div_7_ng_container_2_ng_template_2_Template","InvolveFormFieldComponent_div_7_ng_container_3_ng_template_2_ng_container_0_Template","InvolveFormFieldComponent_div_7_ng_container_3_ng_template_2_ng_container_1_Template","_r9","InvolveFormFieldComponent_div_7_ng_container_3_ng_template_2_Template","InvolveFormFieldComponent_div_7_ng_container_2_Template","InvolveFormFieldComponent_div_7_ng_container_3_Template","InvolveFormFieldComponent_div_7_ng_content_4_Template","getDisplayedMessages","InvolveFormFieldComponent_div_8_div_1_ng_container_1_Template","InvolveFormFieldComponent_div_8_div_2_ng_container_1_Template","InvolveFormFieldComponent_div_8_div_2_ng_container_3_Template","InvolveFormFieldComponent_div_8_div_1_Template","InvolveFormFieldComponent_div_8_div_2_Template","INVOLVE_FORM_FIELD","InvolveFormFieldComponent","_controlNonStatic","_controlStatic","hideLabel","hasPrefixChildren","_prefixChildren","hasSuffixChildren","_suffixChildren","_errorChildren","_hintChildren","stateChanges","InvolveHintDirective","InvolvePrefixDirective","InvolveFormFieldComponent_label_2_Template","InvolveFormFieldComponent_div_4_Template","InvolveFormFieldComponent_div_7_Template","InvolveFormFieldComponent_div_8_Template","InvolveFormFieldComponent_ng_template_9_Template","InvolveFormFieldComponent_ng_template_11_Template","InvolveFormFieldComponent_ng_template_13_Template","hostAttrs","InvolveLabelDirective","InvolveSuffixDirective","highcharts","options_r1","onChartCreated","InvolveHighChartComponent","_options","_chart","_ngZone","viewInit","_baseOptions","accessibility","_options$","asObservable","run","mergeDeep","sources","source","isObject","InvolveHighChartComponent_highcharts_chart_0_Template","sizeClasses","svgClass","iconPath_r1","InvolveIconComponent","_size","trunc","iconPath$","baseUrl$","baseUrl","getIconByCode","IconName","InvolveIconComponent__svg_svg_0_Template","InvolveIconModule","__t","iconPlayground","svg","matches","iconList","createObjectURL","INVOLVE_INPUT_VALUE_ACCESSOR","InvolveInputDirective","_uid","_inputValueAccessor","_elementRef","inputValueAccessor","multiSelectMode","option_r29","option_r30","_r32","missingIndexes","InvolvePlaygroundComponent_ng_container_16_involve_error_152_ng_container_1_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_152_ng_container_2_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_15_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_23_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_28_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_29_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_30_Template","updateCheckboxes","ctx_r37","checkboxes","ctx_r39","ctx_r40","invertedCheckbox","disableDropdowns","autoComplete","clearable","multiSelect","InvolvePlaygroundComponent_ng_container_16_involve_toggle_button_65_Template","InvolvePlaygroundComponent_ng_container_16_involve_option_71_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_72_Template","InvolvePlaygroundComponent_ng_container_16_involve_option_80_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_81_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_111_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_117_Template","ctx_r45","demoClick","ctx_r46","rfvClick","marineDevClick","clientServicesClick","InvolvePlaygroundComponent_ng_container_16_involve_icon_144_Template","ctx_r49","equationSummary","InvolvePlaygroundComponent_ng_container_16_involve_error_151_Template","InvolvePlaygroundComponent_ng_container_16_involve_error_152_Template","InvolvePlaygroundComponent_ng_container_16_strong_156_Template","buttonClicked","getIndeterminateState","bigOptions","_r20","equationData","tmp_78_0","_r54","badgeRangeValue","colorAlpha","ctx_r56","ctx_r57","colorJson","row_r86","_r88","ctx_r87","selection","isSelected","group_r89","_r93","InvolvePlaygroundComponent_ng_container_18_involve_cell_18_involve_icon_3_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_18_involve_icon_4_Template","groupKey","isExpanded","row_r94","toggleView_r96","_r99","toggleView","row_r95","nested","isViewVisible_r97","row_r100","filter_r102","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_29_ng_container_5_Template","row_r103","row_r104","row_r105","row_r106","option_r109","InvolvePlaygroundComponent_ng_container_18_involve_cell_42_involve_option_4_Template","ctx_r79","row_r135","toggleView_r137","_r140","row_r136","isViewVisible_r138","row_r141","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_16_involve_icon_3_Template","row_r142","row_r158","row_r159","row_r160","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_cell_13_involve_icon_3_Template","row_r161","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_header_cell_3_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_cell_4_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_header_cell_6_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_cell_7_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_header_cell_9_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_cell_10_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_header_cell_12_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_cell_13_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_cell_15_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_header_row_16_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_row_17_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_involve_row_18_Template","dataSource_r145","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_3_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_4_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_6_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_7_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_9_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_10_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_12_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_13_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_15_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_16_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_18_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_20_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_22_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_cell_24_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_cell_25_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_row_26_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_row_27_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_header_row_28_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_involve_row_29_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_template_30_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_ng_container_31_Template","dataSource_r112","_c4","ctx_r84","createNestedDataSource","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_11_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_12_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_14_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_15_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_17_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_18_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_20_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_21_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_23_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_24_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_26_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_27_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_29_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_30_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_32_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_33_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_35_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_36_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_38_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_39_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_cell_41_Template","InvolvePlaygroundComponent_ng_container_18_involve_cell_42_Template","InvolvePlaygroundComponent_ng_container_18_ng_template_43_Template","InvolvePlaygroundComponent_ng_container_18_involve_header_row_44_Template","InvolvePlaygroundComponent_ng_container_18_involve_row_45_Template","InvolvePlaygroundComponent_ng_container_18_involve_row_46_Template","InvolvePlaygroundComponent_ng_container_18_ng_container_47_Template","exportColumns","_c6","_c7","_c8","_r167","ctx_r166","iconFilter","icon_r170","InvolvePlaygroundComponent_ng_container_19_div_8_div_1_Template","icons_r168","_r172","ctx_r171","InvolvePlaygroundComponent_ng_container_19_involve_icon_6_Template","InvolvePlaygroundComponent_ng_container_19_div_8_Template","stepIndex_r179","_r181","categoryIndex_r176","ctx_r180","selectedStep","selectedCategory","ctx_r177","step_r178","InvolvePlaygroundComponent_ng_container_21_involve_wizard_category_21_involve_wizard_step_5_Template","_c9","option_r187","InvolvePlaygroundComponent_ng_container_21_involve_rating_item_25_involve_rating_option_8_Template","index_r185","_c10","InvolvePlaygroundComponent_ng_container_21_involve_wizard_category_21_Template","InvolvePlaygroundComponent_ng_container_21_involve_rating_item_25_Template","_c11","routes","pathMatch","InvolvePlaygroundComponent","setDarkMode","disable","enable","gridsterOptions","compactType","CompactType","CompactLeftAndUp","displayGrid","DisplayGrid","draggable","minCols","maxCols","minRows","maxRows","mobileBreakpoint","keepFixedHeightInMobile","outerMargin","resizable","useTransformPositioning","tabs","activeTab","darkMode$","_currentDate","order","k","SelectionModel","requiredControl","controlWithMaxLength","maxLength","textAreaControl","minLength","hints","disabledControl","numberControl","pattern","prefixesAndSuffixes","textarea","dropdown1","dropdown2","equation","prefixSuffix","primaryButtonText","secondaryButtonText","toggleButton","masterToggle","masterChecked","openDrawer","InvolvePlaygroundComponent_ng_container_16_Template","InvolvePlaygroundComponent_ng_container_17_Template","InvolvePlaygroundComponent_ng_container_18_Template","InvolvePlaygroundComponent_ng_container_19_Template","InvolvePlaygroundComponent_ng_container_20_Template","InvolvePlaygroundComponent_ng_container_21_Template","InvolvePlaygroundComponent_ng_template_23_Template","InvolvePlaygroundComponent_ng_template_24_Template","InvolvePlaygroundComponent_ng_template_25_Template","_c12","InvolveRouterModule","forChild","InvolveFormFieldModule","InvolveAccordionModule","PortalModule","InvolveBadgeModule","InvolveButtonModule","InvolveLoadingCirclesModule","InvolveCarouselModule","InvolveCheckboxModule","InvolveCollapsiblePanelModule","InvolveColorPickerModule","OverlayModule","InvolveCopyModule","InvolveDataItemModule","InvolveDatePickerModule","InvolveDateRangeBarModule","InvolveDateRangeModule","InvolveFeatureBarModule","InvolveSparkChartModule","HighchartsChartModule","HighchartsMore","Highcharts","HighchartsBoost","HighchartsPatternFill","HighchartsSolidGauge","HighchartsStock","HighchartsXrange","Highstock","HighchartsExport","InvolveHighchartsModule","lang","thousandsSep","InvolveGaugeModule","InvolveMenuModule","InvolveProgressBarModule","InvolveSelectModule","ScrollingModule","InvolveSideBarModule","playerFactory","player","InvolveSmartContainerModule","LottieModule","InvolveStatusBarModule","InvolveTableModule","InvolveTabsModule","InvolveTileModule","InvolveToggleButtonModule","InvolveToggleSwitchModule","InvolveExportModule","InvolveToolbarModule","InvolveTreeModule","InvolveWizardModule","InvolveRatingModule","DragDropModule","InvolveMapModule","InvolvePipesModule","GridsterModule","LoadingCirclesComponent","ControlStub","stub","_stub","onAdd","onRemove","FullscreenControl","azmaps","_fullscreenCss","hideIfUnsupported","_darkColor","_toggleFullscreen","_container","isFullscreen","webkitCancelFullScreen","cancelFullScreen","mozCancelFullScreen","msExitFullscreen","exitFullscreen","requestFullscreen","webkitRequestFullScreen","requestFullScreen","mozRequestFullScreen","msRequestFullscreen","_mapStyleChanged","_button","_hclStyle","_getColorFromMapStyle","dispose","_map","getOptions","isSupported","mcl","getMapContainer","contains","resx","_getTranslations","getStyle","language","_resource","bc","flexDirection","_btnContainer","changeEventName","_updateBtn","fullscreenEnabled","fullscreenchange","setOptions","getElementById","HTMLElement","fullscreenElement","msFullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenEnabled","mozFullScreenEnabled","webkitFullscreenEnabled","removeClass","ariaLabel","_invokeEvent","btn","substring","_translations","en","af","ar","eu","bg","zh","hr","cs","da","nl","et","fi","gl","de","hi","hu","it","ja","kk","ko","es","lv","lt","ms","nb","pl","pt","ro","ru","sr","sk","sl","sv","tr","uk","vi","HtmlMarkerLayer","BubbleLayer","minZoom","maxZoom","updateWhileMoving","markerCallback","cluster","point_count_abbreviated","_markers","_markerIds","_markerCache","_supportedEvents","_mapMoved","_updateMarkers","_sourceUpdated","_getSourceClass","getId","_timer","_sourceUpdater","_clearCache","zoom","getCamera","getSource","sourceId","shapes","querySourceFeatures","sourceLayer","newMarkers","newMarkerIds","shape","feature","marker","len","getType","getCoordinates","getProperties","geometry","coordinates","cluster_id","_getMarker","_eventsAttached","_addEvents","_wrappedEvent","invoke","radius","strokeWidth","newBaseOptions","cc","mapEvents","getById","Source","_removeEvents","markerCache","PieChartMarker","_moreColors","strokeColor","innerRadius","_total","htmlContent","pixelOffset","getTotalValue","getSliceValue","idx","vals","getSlicePercentage","rerender","tooltipCallback","textClassName","_render","startAngle","angle","moreColors","mIdx","maskId","ttc","ratio","_createSlice","cx","cy","pi","mask","sin","cos","x1","y1","x2","y2","big","AzureService","getClientId","InvolveMapComponent","clusters","_clusters","autoCluster","invalidateMarkers","enableMarkers","_enableMarkers","trackingMarkers","_trackingMarkers","invalidateTracking","enableTracking","_enableTracking","markerIcons","_markerIcons","invalidateImageSprites","_geoFences","invalidateGeoFences","tooltipTemplateRef","_contentTooltip","drawMode","_drawingManager","mapReady","_mapReady","hasPerformance","_hasPerformance","invalidating","_invalidatingMarkerIcons","_invalidatingMarkers","_invalidatingGeoFences","_invalidatingTracking","_app","_injector","_componentFactoryResolver","_overlay","_viewContainerRef","_rootStore","_zone","_azureService","clusterOn","clusterColor","geofenceChange","mapInit","mapLoad","geofenceEditMode","canEditGeoFences","geofenceEditModeChange","showToolbar","showClusteringButton","showGeoFenceButton","showGeoFencePolygonTooltips","showHeatmapButton","enableClustering","showGeoFences","enableHeatmap","keepTemplateMarkerAlive","_popupId","_selectedGeofenceRef","_token","_mapInit","_markersInit","_geoFencesInit","_drawingManagerInit","_trackingInit","_popup","_toolbarOutlet","hasAttached","detach","_popupOverlayRef","attachToolbar","detachToolbar","canEditGeofences","_toolbarComponentRef","instance","canEdit","editMode","clientId","atlas","authOptions","authType","anonymous","autoResize","center","showBuildingModels","showFeedbackLink","showLogo","view","_toolbarStub","TopLeft","CompassControl","auto","rotationDegreesDelta","BottomRight","PitchControl","pitchDegreesDelta","ZoomControl","zoomDelta","StyleControl","mapStyles","closeButton","showPointer","hasBackdrop","_popupPortal","ComponentPortal","InvolveMapTooltipComponent","closePopup","mouseMove","getMarkersInProximity","geoFences","tracking","openPopup","_popupComponentRef","changeDetectorRef","_clusterLayer","_markerLayer","_heatmapLayer","getCanvas","resize","DomPortalOutlet","attachComponentPortal","InvolveMapToolbarComponent","enableClusteringChange","toggleClustering","showGeoFencesChange","toggleGeoFences","enableHeatmapChange","toggleHeatmap","editModeChange","setEditMode","drawModeChange","setDrawMode","initTracking","_trackingDataSource","DataSource","_trackingMarkerLayer","createMarkerLayer","_trackingLineLayer","LineLayer","strokeDashArray","_trackingLineSymbolLayer","SymbolLayer","placement","iconOptions","image","layers","groups","markersToShapes","LineString","imageSprite","tasks","createFromTemplate","markerIcon","createMarkerSvg","topColor","bottomColor","diameter","all","initMarkers","_dataSource","toggleDataSourceClustering","createClusterLayer","createHeatmapLayer","clusterRadius","clusterProperties","initGeoFences","_geofenceDataSource","buffer","tolerance","_geofenceClusterLayer","_geofenceMarkerLayer","_geofencePolygonLineLayer","_geofencePolygonLayer","PolygonLayer","fillOpacity","initDrawingManager","drawing","DrawingManager","interactionType","DrawingInteractionType","shapeRotationEnabled","setDrawingColor","addProperty","_drawingColor","emitGeofenceChangeEvent","DrawingMode","editGeometry","getShapes","geofenceRef","coords","vertex","toggleGeofence","selectGeofence","hasImage","Point","clusterValue","shapeToMarker","shapesToMarkers","clusterMap","Position","polylabel","geofenceMarker","point_count","polygon","showGeoFencedMarker","updateGeofenceGemoetry","setCoordinates","idle","edit","Polygon","setCamera","bounds","getBounds","padding","geofenceColorChange","setProperties","coord","drawingLayers","getLayers","lineLayer","polygonLayer","polygonOutlineLayer","boundsTo","boundingBox","BoundingBox","fromLatLngs","boundsToMarkers","zoomTo","isValidPosition","zoomToMarker","moveTo","moveToMarker","HeatMapLayer","getProximityRange","mapBounds","exists","clustered","destination","getDistanceTo","pointInPolygon","leaves","getClusterLeaves","Infinity","leaf","markerSortPredicate","keepAlive","popupStub","ElementRef","updatePositionStrategy","flexibleConnectedTo","withPositions","attach","force","hasEntered","hasFocus","numeric","hoverTrackingMarker","oddNodes","yLng","yLat","xLng","xLat","InvolveMapTooltipDirective","InvolveMapComponent_div_5_Template","InvolveMapComponent_div_6_Template","InvolveMapComponent_div_7_Template","InvolveMapComponent_div_8_Template","InvolveMapComponent_div_9_Template","svgCache","hash","innerDiameter","textRadius","toggleDrawMode","InvolveMapToolbarComponent_div_0_ng_container_2_button_1_Template","InvolveMapToolbarComponent_div_0_ng_container_2_button_2_Template","drawPolygon","drawRectangle","InvolveMapToolbarComponent_div_0_ng_container_3_ng_container_1_Template","InvolveMapToolbarComponent_div_0_ng_container_3_ng_container_2_Template","InvolveMapToolbarComponent_div_0_ng_container_3_ng_container_3_Template","InvolveMapToolbarComponent_div_0_ng_container_2_Template","InvolveMapToolbarComponent_div_0_ng_container_3_Template","InvolveMapToolbarComponent_div_0_ng_container_4_Template","InvolveMapToolbarComponent_div_0_ng_container_5_Template","InvolveMapToolbarComponent_div_0_ng_container_6_Template","themeId_r1","heatmapPermission","draw","heatmapPermission$","toggleEditMode","toggleExpand","InvolveMapToolbarComponent_div_0_Template","ngTemplateContextGuard","dir","markerType","geoFenceType","trackingType","exportAs","_hasEntered","_hasFocus","onEnter","onLeave","InvolveMapTooltipComponent_ng_container_0_Template","InvolveMenuHeaderComponent","pointerEvents","InvolveMenuButtonComponent","active","InvolveMenuComponent","_menuButtonChildren","childComponent","InvolveMenuComponent_ng_template_3_Template","RfvDateTimePipe","InvolvePluralPipe","output","Yjl","pure","DatePipe","RfvDatePipe","RfvTimePipe","InvolveProgressBarComponent","hideText","setStyle","barElement","InvolveProgressBarComponent_div_5_Template","InvolveRatingItemComponent","InvolveRatingOptionComponent","InvolveRatingOptionRadioButtonDirective","InvolveRatingComponent","InvolveRatingTitleDirective","InvolveRatingSubTitleDirective","InvolveRatingDescriptionDirective","InvolveRatingLabelDirective","InvolveRatingActionBarDirective","InvolveOptionGroupComponent","InvolveOptionComponent_ng_container_1_ng_container_2_Template","InvolveOptionDef","rebuildFilteredOptions","_filteredOptions","searchPredicate","resetOptions","initializeSelection","filteredOptions","selectedOptions","availableOptions","multiple","multiMode","highlitableOptions","setActiveStyles","activeValue","setInactiveStyles","valueField","getByValue","searchFields","InvolveOptionComponent","optionDef","isFiltered","_active","deselect","elementRef","textContent","checkbox","onMouseEnter","setActiveValue","InvolveOptionComponent_ng_container_1_Template","InvolveOptionComponent_ng_template_2_Template","InvolveSelectComponent_ng_container_3_ng_container_3_involve_icon_3_Template","InvolveSelectComponent_ng_container_3_ng_container_4_involve_icon_3_Template","pillPlaceholder","option_r19","InvolveSelectComponent_ng_container_3_ng_template_5_li_3_involve_icon_3_Template","InvolveSelectComponent_ng_container_3_ng_template_5_li_3_Template","togglePill","InvolveSelectComponent_ng_container_3_ng_container_3_Template","InvolveSelectComponent_ng_container_3_ng_container_4_Template","InvolveSelectComponent_ng_container_3_ng_template_5_Template","pillOpen","_r31","dropdownOpen","closeDropdown","openDropdown","InvolveSelectComponent_ng_container_6_involve_icon_1_Template","InvolveSelectComponent_ng_container_6_ng_template_2_Template","hasValue","_r27","InvolveSelectComponent_ng_template_7_ng_container_2_cdk_virtual_scroll_viewport_1_ng_container_2_ng_container_1_Template","option_r44","_r47","handleOpenKeydown","InvolveSelectComponent_ng_template_7_ng_container_2_cdk_virtual_scroll_viewport_1_ng_container_2_Template","InvolveSelectComponent_ng_template_7_ng_container_2_cdk_virtual_scroll_viewport_1_Template","InvolveSelectComponent_ng_template_7_ng_container_2_ng_container_2_Template","ctx_r33","InvolveSelectComponent_ng_template_7_ng_template_3_ng_container_3_ng_container_1_Template","InvolveSelectComponent_ng_template_7_ng_template_3_ng_container_3_Template","InvolveSelectComponent_ng_template_7_ng_template_3_ng_container_4_Template","visibleOptions","InvolveSelectComponent_ng_template_7_ng_container_2_Template","InvolveSelectComponent_ng_template_7_ng_template_3_Template","InvolveSelectComponent_ng_template_7_ng_template_5_Template","InvolveSelectComponent_ng_template_7_ng_template_7_Template","_r35","InvolveSelectComponent_div_8_div_2_ng_container_1_Template","option_r56","InvolveSelectComponent_div_8_div_2_Template","InvolveSelectChange","InvolveSelectComponent","_placeholder","valuePlaceholder","_csv","_multiple","_selectionModel","setSelectionByValue","propagateChanges","_dropdownOpen","_pillOpen","isEmpty","_selectedVirtualOptionsContainer","selectionChange","allowEmpty","_keyManagerActive","_onTouched","runOutsideAngular","fromEvent","capture","_dropdownEl","_pillEl","closePill","initKeyManager","_keyManager","setFirstItemActive","setActiveItem","destroy","focus","isMetaKey","isArrowKey","isNavKey","shiftKey","isInteractionKey","ActiveDescendantKeyManager","skipPredicate","withVerticalOrientation","withHomeAndEnd","withWrap","_viewport","getViewportSize","start","measureScrollOffset","ceil","renderIndex","scrollToIndex","_dropdownScroll","dropdown","toArray","offsetTop","tabOut","activeItem","activeItemIndex","toggleDropdown","handleClosedKeydown","isBackspace","altKey","setNextItemActive","dropdownAttach","openPill","activeElement","_input","CdkConnectedOverlay","InvolveSelectComponent_ng_container_3_Template","InvolveSelectComponent_ng_container_6_Template","InvolveSelectComponent_ng_template_7_Template","InvolveSelectComponent_div_8_Template","pristine","changeDetection","SidebarService","_activeId","SidebarComponent_ng_template_0_div_11_ng_container_1_Template","sideBarFooter","SidebarComponent_ng_template_0_ng_container_4_Template","closeDrawer","SidebarComponent_ng_template_0_ng_container_9_Template","SidebarComponent_ng_template_0_div_10_Template","SidebarComponent_ng_template_0_div_11_Template","mobile$","sideBarHeader","sideBarContent","SidebarHeaderDirective","SidebarContentDirective","SidebarFooterDirective","SidebarComponent","__usedIds","onKeydownHandler","stringId","_breakpointObserver","observe","breakpoint","CdkOverlayOrigin","SidebarComponent_ng_template_0_Template","SmartContainerComponent_ng_template_3_ng_container_0_Template","SmartContainerComponent_ng_template_5_ng_container_0_Template","SmartContainerComponent","SmartContainerComponent_ng_container_2_Template","SmartContainerComponent_ng_template_3_Template","SmartContainerComponent_ng_template_5_Template","SpinnerComponent","margin","lottieConfig$","getSpinnerJson","autoplay","loop","InvolveStatusBarComponent","tab_r3","setActiveTab","TabGroupComponent_div_0_ng_container_1_div_1_ng_template_1_Template","selectedTabId","tileHeaderTabs","TabGroupComponent_div_0_ng_container_1_div_1_Template","TabGroupComponent_div_0_ng_container_1_Template","getAlignmentStyle","TabGroupComponent_ng_container_1_div_1_ng_template_1_Template","selectedTab","TabGroupComponent_ng_container_1_div_1_Template","tab_r10","TabGroupComponent","_params","hasHeader","headerAlignment","tabChange","snapshot","queryParamMap","defaultTabId","tab","tabId","filteredParams","fromEntries","getCurrentNavigation","asapScheduler","navigate","queryParamsHandling","replaceUrl","nav","TabComponent","TabGroupComponent_div_0_Template","TabGroupComponent_ng_container_1_Template","TabContentDirective","TabHeaderDirective","InvolveBaseCellDef","table","INVOLVE_TABLE","InvolveCellDef","useTypeFrom","InvolveGroupCellDef","InvolveHeaderCellDef","InvolveFooterCellDef","InvolveColumnDef","_name","columnCssClassName","INVOLVE_COLUMN_DEF","BaseInvolveCell","columnDef","InvolveHeaderCell","InvolveCell","InvolveCellOutlet","mostRecentCellOutlet","viewContainerRef","pause","signal","comparator","windowToggle","InvolveDataSourceFilterRangeItem","searchedCount","_range","InvolveDataSourceFilterDateRangeItem","InvolveDataSourceAccessor","addChild","subscription","_search","_children","unsubscribe","_data","data$","_groupBy","toggleGroup","_groups","R","expand","collapseAll","accumulator","expandAll","isAllExpanded","isAnyExpanded","_filters","addFilter","filterItems$","_filterItems","_sort","paginator","_paginator","initialData","_columnAccessor","_valueAccessor","defaultGroupExpanded","_isSearching","isSearching$","_firstSearch","_search$","_searchedData","searchedData$","searchedDataCount$","searchedData","filterSelection","_pauseSignal","_filterRanges","filterSelectionChange$","filterRangeChange$","filterRanges","sortedData$","_rowCount","rowCount$","_allFilterCount","allFilterCount$","_renderRows","renderData","_renderSubscription","Subscription","getSearchString","sortData","direction","defaultSortComparator","sortingDataAccessor","sortHeaderId","moveItem","originalIndex","newIndex","insertItem","removeItem","removed","isObservable","rows$","_searchCache","WeakMap","shareReplay","searchedRows$","filteredRows","_filteredRows$","valueSelections","rangeSelections","filterItem","isFilterValueItem","prevRanges","valueFilters","rangeFilters","isDataSourceFilterValue","isFilterRange","isFilterDateRange","filterItems","display","filterChange","rangeChange","searchedRows","globalFilterItems","selectedGlobalFilterItems","cascade","cascadingFilterItems","cascadingFilters","availableFilterItems","globalFilterMap","globalFilteredRows","allFilterCount","cascadingFilteredRows","includeValue","includeRange","includedOnPreviousFilter","filteredDataCount$","connect","collectionView","disconnect","sortedRows$","sortChange","sortedData","pagedRows$","pageChange","pageIndex","lastPageIndex","pageSize","newPageIndex","startIndex","groupedRows$","string","valueA","valueB","valueAType","valueBType","sensitivity","getItem","isFilterRangeItem","isFilterDateRangeItem","activeFilterCount_r5","InvolveFilterHeader_ng_container_2_ng_container_4_div_1_Template","InvolveFilterHeader_ng_container_2_ng_container_4_div_2_Template","InvolveFilterHeader_ng_container_2_involve_menu_button_10_ng_container_2_ng_container_1_Template","templateDef","filterItem_r9","toggleFilterItem","InvolveFilterHeader_ng_container_2_involve_menu_button_10_ng_container_2_Template","InvolveFilterHeader_ng_container_2_involve_menu_button_10_ng_template_3_Template","InvolveFilterHeader_ng_container_2_ng_container_4_Template","selectAllFilterValueItems","InvolveFilterHeader_ng_container_2_involve_menu_button_10_Template","activeFilterCount$","indeterminateState$","filterValueItems$","trackByFilterId","filterItem_r23","updateMinValue","minValue","updateMaxValue","maxValue","InvolveFilterHeader_ng_container_3_involve_menu_button_6_involve_icon_7_Template","InvolveFilterHeader_ng_container_3_involve_menu_button_6_involve_icon_13_Template","InvolveFilterHeader_ng_container_3_ng_container_4_Template","InvolveFilterHeader_ng_container_3_involve_menu_button_6_Template","filterRangeItems$","filterItem_r42","dateRangeClear","InvolveFilterHeader_ng_container_4_ng_container_4_Template","InvolveFilterHeader_ng_container_4_involve_menu_button_6_Template","filterDateRangeItems$","InvolveFilterHeaderTemplate","InvolveFilterHeader","selectedFilters","_filter","_table","_columnDef","typeofA","toMoment","endDateMax","ngModel","InvolveFilterHeader_ng_container_2_Template","InvolveFilterHeader_ng_container_3_Template","InvolveFilterHeader_ng_container_4_Template","InvolveFilter","InvolveRenderDef","differs","InvolveHeaderRowOutlet","InvolveFooterRowOutlet","InvolveDataRowOutlet","InvolveNoDataRowOutlet","InvolveBaseRowDef","_columnsDiffer","getColumnsDiff","extractCellTemplate","InvolveHeaderRowDef","headerCell","InvolveFooterRowDef","footerCell","InvolveRowDef","cell","InvolveRowGroupDef","groupCell","InvolveNoDataRowDef","InvolveLoadingRowDef","when","_viewsDiffer","views","getViewsDiff","InvolveHeaderRow","isNested","rowHeight$","rowHeight","RendererStyleFlags2","Important","InvolveFooterRow","InvolveRowGroup","InvolveRow","InvolveRow_div_1_Template","showHint","InvolveSortHeader","isSorted","_showHint","_changeDetectorRef","disableClear","defaultSort","register","deregister","InvolveSortHeader_involve_icon_3_Template","InvolveSortHeader_involve_icon_4_Template","sortables","sortable","getNextSortDirection","cycle","getSortDirectionCycle","InvolveTableVirtualScrollStrategy","scrolledIndexChange","_indexChange","_rowHeight","viewport","rowHeightSubscription","onContentScrolled","updateContent","onDataLengthChanged","onContentRendered","onRenderedOffsetChanged","behavior","scrollToOffset","skip","setRenderedContentOffset","setRenderedRange","_r14","InvolveTable_div_0_div_6_involve_icon_1_Template","InvolveTable_div_0_div_6_involve_icon_2_Template","InvolveTable_div_0_div_6_Template","InvolveTable_div_0_ng_container_10_Template","hasHeaderRow","InvolveTable","_trackByFn","_headerRowDefs","ngZone","injector","renderView","allowNestedSearch","_columnDefsByName","_defaultColumnDefsByName","_viewDefsByName","noDataRow","loadingRow","_renderDefsCache","_dirty","_renderSignal","_trackByCache","_renderItemsDiffer","createRenderItemsDiffer","isInvolveRenderRow","markForRender","viewChange","renderedRangeStream","_renderRange","render","_headerRenderRows","getOwnDefs","def","_footerRenderRows","_footerRowDefs","_noDataRowDef","_noDataRenderRow","_defaultNoDataRowDef","_loadingRowDef","_loadingRenderRow","_defaultLoadingRowDef","renderHeaderRows","renderFooterRows","_defaultColumnDefs","_columnDefs","_viewDefs","viewDef","columnsDiffReducer","rowDef","dataColumnsChanged","_rowDefs","headerColumnsChanged","footerColumnsChanged","_dataRowOutlet","getElementRef","checkViewportSize","_noDataRowOutlet","_headerRowOutlet","_footerRowOutlet","_dataSubscription","scan","renderCalls","pairwise","curr","renderRow","toRender","allRenderItems","getAllRenderItems","renderItem","isInvolveRenderView","setTotalContentSize","_renderItems","viewRef","runGuarded","forEachOperation","record","previousIndex","currentIndex","move","isInvolveRenderRowGroup","createEmbeddedView","last","even","odd","nestedLevel","getNestedLevel","isViewVisible","getColumnDef","Injector","providers","INVOLVE_RENDER_VIEW","getRenderItems","_renderItemsCache","renderItems","prevTrackByCache","prevRenderRowsCache","rowDefs","rowGroupDefs","_rowGroupDefs","isInvolveDataSourceRowGroup","prevTrackBySubject","prevRenderRowCache","renderRows","cache","getViewDef","isVisible","renderRowCache","subject","expandViews","showView","dataSourceFactory","catch","hideView","InvolveViewDef","CdkVirtualScrollViewport","VIRTUAL_SCROLL_STRATEGY","InvolveTable_div_0_Template","InvolveTable_ng_template_1_Template","InvolveTable_involve_cell_4_Template","InvolveTable_involve_cell_6_Template","InvolveTable_involve_row_7_Template","InvolveTable_involve_row_8_Template","defaultVisible","_dataSourceFactory","InvolveTileContentComponent","InvolveTileHeaderTabsComponent_For_4_ng_template_1_Template","tab_r12","InvolveTileHeaderTabsComponent_ng_container_5_involve_menu_button_4_Template","InvolveTileHeaderTabsComponent","shouldDisplayKebabMenu","checkWindowSize","_tabs","selectTab","InvolveTileHeaderTabsComponent_For_4_Template","InvolveTileHeaderTabsComponent_ng_container_5_Template","InvolveTileHeaderComponent","InvolveTileComponent","INVOLVE_TOGGLE_BUTTON_ACCESSOR","InvolveToggleButtonComponent","InvolveToggleOptionComponent","toggleButtonAccessor","InvolveToggleSwitchComponent","_firstChange","InvolveDataSourceExportComponent_ng_container_3_ng_container_5_involve_menu_button_5_Template","InvolveDataSourceExportComponent_ng_container_3_ng_container_3_Template","InvolveDataSourceExportComponent_ng_container_3_ng_container_4_Template","InvolveDataSourceExportComponent_ng_container_3_ng_container_5_Template","InvolveDataSourceExportComponent","_dataSourceAccessor","_subscription","InvolveDataSourceExportComponent_ng_container_3_Template","menuTitle","item_r20","InvolveDataSourceAutoFilterComponent_ng_template_15_involve_menu_header_5_Template","InvolveDataSourceAutoFilterComponent_ng_template_15_involve_menu_button_6_Template","InvolveDataSourceAutoFilterComponent_ng_template_15_involve_menu_button_7_Template","showAllFilter","item_r29","InvolveDataSourceAutoFilterComponent_ng_template_17_ng_container_2_involve_datasource_filter_item_1_Template","InvolveDataSourceAutoFilterComponent_ng_template_17_involve_datasource_filter_item_1_Template","InvolveDataSourceAutoFilterComponent_ng_template_17_ng_container_2_Template","selectedFilterItems$","item_r37","InvolveDataSourceAutoFilterComponent_ng_template_19_ng_container_2_involve_datasource_filter_item_1_Template","InvolveDataSourceAutoFilterComponent_ng_template_19_involve_datasource_filter_item_1_Template","InvolveDataSourceAutoFilterComponent_ng_template_19_ng_container_2_Template","InvolveDataSourceAutoFilterComponent","_values","_mediaObserver","_select","isMobile$","media","selectedTemplate","large","_largeTemplate","medium","_mediumTemplate","_smallTemplate","InvolveDataSourceAutoFilterComponent_ng_container_2_Template","InvolveDataSourceAutoFilterComponent_ng_container_8_Template","InvolveDataSourceAutoFilterComponent_ng_container_11_Template","InvolveDataSourceAutoFilterComponent_ng_container_14_Template","InvolveDataSourceAutoFilterComponent_ng_template_15_Template","InvolveDataSourceAutoFilterComponent_ng_template_17_Template","InvolveDataSourceAutoFilterComponent_ng_template_19_Template","InvolveDataSourceFilterItemComponent_span_5_ng_container_1_Template","InvolveDataSourceFilterItemComponent_span_5_ng_template_2_Template","InvolveDataSourceFilterItemComponent","showName","InvolveDataSourceFilterItemComponent_span_2_Template","InvolveDataSourceFilterItemComponent_span_4_Template","InvolveDataSourceFilterItemComponent_span_5_Template","InvolveDataSourceGroupOptionComponent","InvolveDataSourceGroupOptionComponent_ng_template_0_Template","InvolveDataSourceGroupComponent_involve_option_2_ng_container_1_Template","InvolveDataSourceGroupComponent","allowUngroup","placeHolder","InvolveDataSourceGroupComponent_involve_option_2_Template","InvolveDataSourceSearchComponent_involve_form_field_0_involve_icon_4_Template","_r1","InvolveDataSourceSearchComponent","InvolveDataSourceSearchComponent_involve_form_field_0_Template","InvolveToolbarActionsDirective","InvolveToolbarComponent_ng_container_2_ng_container_1_Template","InvolveToolbarComponent_ng_container_2_ng_container_2_Template","InvolveToolbarComponent_ng_container_2_ng_container_3_Template","InvolveToolbarComponent_ng_container_2_ng_container_4_Template","InvolveToolbarComponent_ng_container_2_ng_container_5_Template","InvolveToolbarComponent_div_4_ng_container_3_Template","InvolveToolbarComponent_div_4_ng_container_5_Template","InvolveToolbarComponent_div_4_ng_container_6_Template","InvolveToolbarComponent_div_4_ng_container_8_Template","InvolveToolbarComponent","showDropdownFilter","InvolveToolbarComponent_ng_container_2_Template","InvolveToolbarComponent_div_4_Template","InvolveToolbarComponent_ng_template_8_Template","InvolveToolbarComponent_ng_template_10_Template","InvolveToolbarComponent_ng_template_12_Template","InvolveToolbarComponent_ng_template_14_Template","InvolveToolbarComponent_ng_template_16_Template","InvolveTooltipComponent_ng_container_3_ng_container_1_Template","involveTooltipAnimations","tooltipState","passiveListenerOptions","normalizePassiveListenerOptions","passive","INVOLVE_TOOLTIP_SCROLL_STRATEGY","INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","deps","Overlay","useFactory","INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY","overlay","scrollStrategies","reposition","scrollThrottle","INVOLVE_TOOLTIP_DEFAULT_OPTIONS","INVOLVE_TOOLTIP_DEFAULT_OPTIONS_FACTORY","showDelay","hideDelay","touchendHideDelay","InvolveTooltipContent","InvolveTooltipDirective","_position","_overlayRef","_updatePosition","_tooltipInstance","show","updatePosition","hide","_setupPointerEnterEventsIfNeeded","_message","_ariaDescriber","removeDescription","_isTooltipVisible","_updateTooltipMessage","describe","tooltipClass","_tooltipClass","_setTooltipClass","_scrollDispatcher","_platform","_focusMonitor","scrollStrategy","_dir","_defaultOptions","_viewInitialized","_pointerExitEventsInitialized","involveTooltipTag","touchGestures","_passiveListeners","_destroyed","_handleKeydown","ESCAPE","hasModifierKey","domElement","_scrollStrategy","tooltips","monitor","_touchstartTimeout","removeEventListener","listener","stopMonitoring","delay","tooltipContent","_showTimeoutId","_hideTimeoutId","overlayRef","_createOverlay","_detach","_portal","InvolveTooltipComponent","afterHidden","scrollableAncestors","getAncestorScrollContainers","strategy","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withScrollableContainers","positionChanges","scrollableViewProperties","isOverlayClipped","positionStrategy","panelClass","detachments","_getOrigin","_getOverlayPosition","main","fallback","isLtr","originPosition","_invertPosition","overlayPosition","_markForCheck","onMicrotaskEmpty","_platformSupportsMouseEvents","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","_addListeners","exitListeners","_wheelListener","touchendListener","listeners","IOS","ANDROID","elementUnderPointer","elementFromPoint","gestures","nodeName","userSelect","msUserSelect","webkitUserSelect","MozUserSelect","webkitUserDrag","touchAction","i6","_visibility","_closeOnInteraction","_onHide","_isHandset","Breakpoints","Handset","_animationStart","_animationDone","toState","_handleBodyInteraction","i7","InvolveTooltipComponent_ng_container_3_Template","InvolveWizardCategoryHeaderComponent","InvolveWizardCategoryComponent","_steps","step","setActive","InvolveWizardStepComponent","InvolveWizardCategoryComponent_ng_template_6_Template","InvolveWizardHeaderComponent","InvolveWizardComponent","copyUserPermissionsModel","ToUser","CopyUserPermissions","confirmCopyModel","toUser","fromUserUI","replaceJobTitleModel","ReplaceJobTitle","confirmReplaceModel","newJobTitle","oldJobTitle","numberOfUsers","YesNoCancel","GenerateReport","reportRequest","GenerateScheduleReport","scheduledReportRequest","GenerateReportFail","GenerateReportSuccess","RetryReportRequest","pendingReportId","RetryReportRequestFail","RetryReportRequestSuccess","LoadReportGroups","LoadReportGroupsFail","LoadReportGroupsSuccess","reportGroup","LoadReportElements","reportGroups","LoadReportElementsFail","LoadReportElementsSuccess","reportElements","SetReportType","report","SetScheduledRunNowReportType","ClearReportTypes","SetSelectedReportCustomerSettingId","reportCustomerSettingId","timeZones","SelectTimeZone","timeZone","ClearTimeZones","dateRanges","AddSchedule","frequencyId","SetTimeRange","timeRange","SetStart","SetEnd","SetNoon","ClearDateRanges","SetScheduleSetting","scheduleSettingId","SetDeliveryTime","deliveryTimes","AddDeliveryTime","deliveryTime","UpdateDeliveryTime","RemoveDeliveryTime","deliveryTimeIdx","ClearDeliveryTimes","createdReports","SetSelectedDateRange","dateRangeId","AddCreateReportRequest","createReportRequest","reportId","fileTypes","SetFileType","fileType","SaveNote","note","ClearFileTypes","SetSelectedSchedulesUsers","SetSelectedScheduleId","SetSelectedRunHour","hour","SetSelectedRunMinute","minute","DeleteScheduleTimeReport","runHour","runMinute","DeleteScheduleTimeReportFail","DeleteScheduleTimeReportSuccess","DeleteScheduleReport","DeleteScheduleReportFail","DeleteScheduleReportSuccess","UpdateAllScheduleDeliveryTimes","scheduleId","UpdateAllScheduleDeliveryTimesFailure","UpdateAllScheduleDeliveryTimesSuccess","UpdateScheduleDeliveryTime","UpdateScheduleDeliveryTimeFailure","UpdateScheduleDeliveryTimeSuccess","LoadScheduledReportDetails","reportSettingId","LoadScheduledReportDetailsFailure","LoadScheduledReportDetailsSuccess","reportScheduleDetails","LoadScheduledReportSettingId","LoadScheduledReportSettingIdFailure","LoadScheduledReportSettingIdSuccess","reportSettings","AddScheduledReport","LoadUserScheduledReports","RunScheduledReport","runReportRequest","RunScheduledReportFailure","RunScheduledReportSuccess","AddFilter","RemoveFilter","SetRecipients","recipientIds","AddRecipient","recipientId","RemoveRecipient","RemoveAllRecipients","SetReport","reportKind","ClearReportKind","selectedTimeZone","timeZoneReducer","TimeZonesActionTypes","selectedFrequency","setTimeRange","setStart","setEnd","DeliveryTimes","setNoon","selectedSettingId","dateRangeReducer","DateRangesActionTypes","setScheduleSetting","reportHistoryReducer","ReportHistoryActions","PendingReportId","selectedUsersTab","selectedReportScheduleId","reportSchedulesReducer","reportFilterReducer","ReportFilterActionTypes","userAdapter","recipientsReducer","ReportRecipientActionTypes","kind","reportKindReducer","ReportActionKind","reportElementReducer","ReportTypesActions","selectedReportType","selectedScheduledReportType","selectedReportCustomerSettingId","reportTypesReducer","selectedFileType","savedNote","fileTypesReducer","ReportFileTypes","reportTypes","fromReportHistory","reportFilter","reportRecipients","reportHistoryTab","reportElement","getReports","getReportElements","getRequestReportsTypes","getRequestReportsTypesData","getRequestReportsTypesLoading","getRequestReportsTypesLoaded","getReportType","getReportTypeNote","Notes","getScheduledReportType","getReportDateRangeSettings","ReportCustomerSettings","getReportCustomerSettingId","getReportTypeName","getReportTypeId","getTimeZones","getScheduledReportTypeId","getScheduleReportTypeMaxDeliveryTimes","MaxSchedules","Description","getTimeZonesData","selectedTimeZoneId","getTimeZonesDataWithExtendedFormat","tz","ExtendedName","HourOffset","getTimeZoneId","getFileTypeId","getAdditionalNotes","getTimeZonesIsLoaded","getDateRanges","getDateRangeId","DateRangeSettingId","DateRangeSettingDescription","getDeliveryTimes","selectedTimeRange","DateRange","getReportScheduleSetting","ExportTypeId","getSelectedSettingId","getReportTime","getSelectedScheduleDetails","getSelectedScheduleSettingId","StartDate","EndDate","getReportFileTypes","getDateRangesData","getReportFileTypesData","getFilterId","getReportFileTypeId","Extension","getReportFileType","ShortName","getSelectedReportFileTypeId","getFilter","getRecipientsState","getRecipientsIds","fromReportRecipient","getRecipients","getKindOfReport","getSettingState","getReportHistory","getReportHistoryLoading","getReportHistoryLoaded","getSelectedTab","getSelectedTabReportHistory","reportHistoryData","QueueDate","getReportSchedulesLoading","getReportSchedulesLoaded","getReportSchedulesError","getSelectedReportSchedulesTab","getAllReportSchedules","getSelectedReportScheduleId","getReportScheduleDataById","getSelectedTabReportSchedulesFiltered","reportSchedulesData","getSelectedTabReportSchedules","reportSchedulesDataRet","newElement","SitemapGroup","getAllReportSchedulesState","getSelectedReportSchedulesById","UserNotes","getReportScheduleDefaultRunHourByReportName","allReportSchedules","selectedReportName","ReportName","RunHour","getReportScheduleDefaultRunMinuteByReportName","RunMinute","getReportScheduleDefaultRunHourById","getReportScheduleDefaultRunMinuteById","getReportSchedulesById","ScheduleTimes","getTimeInfo","getAllReportSchedulesData","getReportScheduleUserNotes","getReportTypeInfo","ReportTime","GlobalFilterId","FileTypeId","TimeZoneId","deliveryTimes12h","Hour","Meridiem","Minute","getSettingsData","ReportStartDate","ReportEndDate","ReportId","ReportSettingId","Recipients","SettingsData","getSchedulePostData","TimeInfo","SelectedSettingId","getFormIsValid","timeZoneId","ReportService","loadReportGroups","loadTimeZones","loadDateRange","loadFileTypes","loadReportHistory","loadReportSchedules","getUserReportSchedules","getReportSettingId","getReportRecipientsInfo","getReportFile","regenerateReport","generateScheduleReport","deleteScheduleTimeReport","updateScheduledReportTime","oldRunHour","oldRunMinute","updateReportSchedule","updateData","fileTypeId","UserGlobalFilterDataPointGroupId","userGlobalFilterDataPointGroupId","notes","ReportCustomerSettingId","updateBulkScheduledReportTime","ReportScheduleTimeModels","runScheduledReport","loadReportElements","assetFilter","datapointFilter","setSchedule","setTimezone","UsesDateRange","setDeliveryTime","exportOption","additionalNotes","editedAlarm","SharedAlarmDrawerComponent_ng_container_0_section_1_ng_container_2_Template","SharedAlarmDrawerComponent_ng_container_0_section_1_ng_container_3_Template","isNew","alarmTypeName","option_r32","formMessages","datapoint_r33","test_r34","legend_r36","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_select_39_involve_option_1_Template","sortLegends","SharedAlarmDrawerComponent_ng_container_0_section_2_ng_template_40_involve_error_1_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_ng_template_40_involve_error_2_Template","option_r39","SharedAlarmDrawerComponent_ng_container_0_section_2_div_3_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_option_9_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_11_Template","_r41","datapointChanged","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_option_17_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_19_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_25_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_26_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_27_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_option_33_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_select_39_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_ng_template_40_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_57_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_option_63_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_64_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_70_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_involve_error_76_Template","onAllowSequentialPresentChanged","assetDatapoints","alertEveryOptions","SharedAlarmDrawerComponent_ng_container_0_section_1_Template","SharedAlarmDrawerComponent_ng_container_0_section_2_Template","hideActionButtons","SharedAlarmDrawerComponent_ng_template_2_app_spinner_0_Template","SharedAlarmDrawerComponent","onAddButtonClick","onApplyButtonClick","onDeleteButtonClick","onCancelButtonClick","onResetButtonClick","selectedAlarm","alertEveryDropdownOptions","Tag","alarmTypeId","addAnother","valid","getDatapoint","selectedDataPointId","allowSequential","alertRepeatIntervalFormControl","AllowSequentialPresentFormControl","alertRepeatInterval","_angular_core__WEBPACK_IMPORTED_MODULE_11__","SharedAlarmDrawerComponent_ng_container_0_Template","SharedAlarmDrawerComponent_ng_template_2_Template","ToggleButtonComponent","_mapToString","toggleButtonId","CarouselContentComponent","_positionIndex","positionState","translateSlideComplete$","_onCentering","_onCentered","_beforeCentering","_afterLeavingCenter","animationDuration","fromState","isCenterPosition","onTranslateSlideStarted","isCentering","CdkPortalOutlet","CarouselContentComponent_ng_template_2_Template","CarouselContentPortal","encapsulation","minHeight","componentFactoryResolver","CarouselIndicatorComponent","CarouselSlideComponent","_contentPortal","_content","CarouselSlideComponent_ng_template_0_Template","onSwipeLeft","onSwipeRight","i_r7","slide_r6","i_r15","CarouselComponent_div_5_rfv_carousel_indicator_1_Template","slides","SlideChangeEvent","slide","CarouselComponent","_selectedIndex","_indexToSelect","selectedIndexChange","selectedSlideChange","_clampSlideIndex","indexToSelect","isFirstRun","CarouselComponent_div_2_Template","CarouselComponent_rfv_carousel_content_3_Template","CarouselComponent_div_4_Template","CarouselComponent_div_5_Template","CollapsableSectionComponent","CollapsableSectionComponent_app_svg_icon_4_Template","CollapsableSectionComponent_app_svg_icon_5_Template","CollapsableSectionComponent_ng_container_6_Template","ColorPickerComponent","setColorValue","valueObj","colorObj","vcRef","cpService","outputFormat","onEventLog","eventName","colorValue","presetColors","DataItemComponent_dynamic_tooltip_0_ng_container_1_Template","DataItemComponent","DataItemComponent_dynamic_tooltip_0_Template","DataItemComponent_ng_template_1_Template","row_r15","sha1","communicationMethod","row_r17","commercialType","softwarePartNumber","PleTableComponent_ng_template_5_involve_header_cell_2_Template","PleTableComponent_ng_template_5_involve_cell_3_Template","PleTableComponent_ng_template_5_involve_header_cell_5_Template","PleTableComponent_ng_template_5_involve_cell_6_Template","PleTableComponent_ng_template_5_involve_header_cell_8_Template","PleTableComponent_ng_template_5_involve_cell_9_Template","PleTableComponent_ng_template_5_involve_header_cell_11_Template","PleTableComponent_ng_template_5_involve_cell_12_Template","PleTableComponent_ng_template_5_involve_header_cell_14_Template","PleTableComponent_ng_template_5_involve_cell_15_Template","PleTableComponent_ng_template_5_involve_header_row_16_Template","PleTableComponent_ng_template_5_involve_row_17_Template","deviceColumns","row_r37","row_r38","hardwarePartNumber","row_r39","imei","row_r40","meid","row_r41","row_r42","iccid","row_r43","PleTableComponent_ng_template_10_involve_header_cell_2_Template","PleTableComponent_ng_template_10_involve_cell_3_Template","PleTableComponent_ng_template_10_involve_header_cell_5_Template","PleTableComponent_ng_template_10_involve_cell_6_Template","PleTableComponent_ng_template_10_involve_header_cell_8_Template","PleTableComponent_ng_template_10_involve_cell_9_Template","PleTableComponent_ng_template_10_involve_header_cell_11_Template","PleTableComponent_ng_template_10_involve_cell_12_Template","PleTableComponent_ng_template_10_involve_header_cell_14_Template","PleTableComponent_ng_template_10_involve_cell_15_Template","PleTableComponent_ng_template_10_involve_header_cell_17_Template","PleTableComponent_ng_template_10_involve_cell_18_Template","PleTableComponent_ng_template_10_involve_header_cell_20_Template","PleTableComponent_ng_template_10_involve_cell_21_Template","PleTableComponent_ng_template_10_involve_header_row_22_Template","PleTableComponent_ng_template_10_involve_row_23_Template","radioInfo","radioColumns","row_r63","row_r64","ecuId","row_r65","row_r66","row_r67","row_r68","row_r69","syncClockEnabled","row_r70","syncClockMaster","PleTableComponent_ng_template_15_involve_header_cell_2_Template","PleTableComponent_ng_template_15_involve_cell_3_Template","PleTableComponent_ng_template_15_involve_header_cell_5_Template","PleTableComponent_ng_template_15_involve_cell_6_Template","PleTableComponent_ng_template_15_involve_header_cell_8_Template","PleTableComponent_ng_template_15_involve_cell_9_Template","PleTableComponent_ng_template_15_involve_header_cell_11_Template","PleTableComponent_ng_template_15_involve_cell_12_Template","PleTableComponent_ng_template_15_involve_header_cell_14_Template","PleTableComponent_ng_template_15_involve_cell_15_Template","PleTableComponent_ng_template_15_involve_header_cell_17_Template","PleTableComponent_ng_template_15_involve_cell_18_Template","PleTableComponent_ng_template_15_involve_header_cell_20_Template","PleTableComponent_ng_template_15_involve_cell_21_Template","PleTableComponent_ng_template_15_involve_header_cell_23_Template","PleTableComponent_ng_template_15_involve_cell_24_Template","PleTableComponent_ng_template_15_involve_header_row_25_Template","PleTableComponent_ng_template_15_involve_row_26_Template","ecmsInfo","ecmsColumns","PleTableComponent","PleTableComponent_ng_template_5_Template","PleTableComponent_ng_template_10_Template","PleTableComponent_ng_template_15_Template","deviceInformationForm_r3","loadDspItems","isUnassociated$","item_r13","DisplayText","DeviceInfoPleComponent_ng_container_0_div_1_div_12_div_9_Template","DeviceInfoPleComponent_ng_container_0_div_1_div_12_involve_option_13_Template","HeadingText","SetupText","editDevicePermission","selectedDeviceControl","dspItems$","tmp_7_0","selectedDspItem$","M2M","GatewayId","tmp_8_0","SerialNumber","DeviceInfoPleComponent_ng_container_0_div_1_div_10_Template","DeviceInfoPleComponent_ng_container_0_div_1_div_12_Template","DeviceInfoPleComponent_ng_container_0_div_1_ple_table_14_Template","Image","isSelectedDeviceInfoLoaded$","disableSave","isLocked$","DeviceInfoPleComponent_ng_container_0_div_1_Template","deviceInformationForm$","DeviceInfoPleComponent_div_2_span_4_Template","DeviceInfoPleComponent_div_2_span_6_Template","DeviceInfoPleComponent_div_2_span_8_Template","DeviceInfoPleComponent_div_2_span_10_Template","isDevicesLoading$","isSelectedDeviceLoading$","isSelectedDeviceInfoLoading$","isSelectedDeviceSaving$","DeviceInfoPleComponent","_userPermissionService","syncAssetName","FormControl","isDevicesLoaded$","isSelectedDeviceLoaded$","navigation","_unitCreationLogId","isSelectedDeviceLoaded","selectedDevice","Make","dspItems","dspItem","selectedDspItem","currentDspItem","displayText","device","radio","ecms","unassociated","DeviceInfoPleComponent_ng_container_0_Template","DeviceInfoPleComponent_div_2_Template","DeviceInfoRmsComponent_ng_container_0_ng_container_1_form_1_ng_container_3_involve_checkbox_21_Template","formConfig_r4","AcknowledgeText","isEdit","cancel","DeviceInfoRmsComponent_ng_container_0_ng_container_1_form_1_ng_container_3_Template","DeviceInfoRmsComponent_ng_container_0_ng_container_1_form_1_div_25_Template","DeviceInfoRmsComponent_ng_container_0_ng_container_1_form_1_ng_container_26_Template","readOnly","hardwareTypes$","parseTypes$","DeviceInfoRmsComponent_ng_container_0_ng_container_1_form_1_Template","DeviceInfoRmsComponent_ng_container_0_ng_container_1_Template","formConfig$","DeviceInfoRmsComponent","_reset$","initializeForm","unitCreationLog","IsAcknowledged","updateValueAndValidity","info","clearValidators","setValidators","_regex","SNRegex","requiredTrue","HardwareTypeId","ParseTypeId","PostsInGMT","ClearSerialNumber","DeviceInfoClear","DeviceInfoRmsComponent_ng_container_0_Template","DeviceInfoRmsComponent_ng_template_2_Template","DynamicTooltipComponent","onMouseELeave","baseClasses","customClasses","alignment","tooltipClasses","positions","DynamicTooltipComponent_ng_template_3_Template","ErrorComponent","iconMssgPosition","getErrMssgClasses","getErrContainerClasses","getErrorContentClasses","FilterGroupButtonComponent","filterGroupClicked","onFilterButtonClicked","separator","FilterGroupButtonComponent_span_2_Template","FilterGroupButtonComponent_span_5_Template","FilterGroupButtonComponent_span_6_Template","FormValidationErrorComponent","chartOptions","displayValue","StatusInvalid","UnitsOfMeasure","FIRST_LAST_FUNCTION","isLast","isFirst","InvolveGaugeComponent","datapointIdentifiers","_themeId","_datapointIdentifiers","_gaugeTypes","_unitsOfMeasure","createChart","setSize","DisplaySetting","gaugeTypeId","dpi","GaugeTypeId","labelColor","marker1opacity","marker2opacity","marker3opacity","json","MinValue","MaxValue","AlarmLowestHigh","AlarmHighestLow","baseJson","BaseTemplateJSON","gaugeJson","base","gauge","expandFunctions","object","InvolveGaugeComponent_highcharts_chart_0_Template","InvolveGaugeComponent_div_1_Template","InvolveSparkChartComponent","domSanitizer","highestLow","lowestHigh","datapointMin","datapointMax","alarmColor","alarmThresholds","getTooltipFormat","getAlarmThresholdsTooltip","getPointTooltip","sanitize","SecurityContext","HTML","tickLength","maxPadding","minPadding","startOnTick","plotLines","alarmThreshold","dashStyle","outside","footerFormat","enableMouseTracking","mouseOver","mouseOut","hover","zoneAxis","zones","InvolveSparkChartComponent_highcharts_chart_0_Template","group_r9","RfvGaugeViewComponent_ng_template_3_ng_container_0_Template","groups$","RfvGaugeViewComponent_ng_template_5_involve_accordion_1_ng_template_4_ng_container_0_Template","group_r11","RfvGaugeViewComponent_ng_template_5_involve_accordion_1_ng_template_4_Template","RfvGaugeViewComponent_ng_template_5_involve_accordion_1_Template","trackByGroupName","datapoint_r17","DisplayGroup","sparkValue$","spark_r23","presentAlarmColor","showRunning$","Running24HrMin","Last24HrMin","Running24HrMax","Last24HrMax","Running24HrAvg","Last24HrAvg","RfvGaugeViewComponent_ng_template_7_div_1_ng_container_9_ng_container_1_Template","RfvGaugeViewComponent_ng_template_7_div_1_ng_container_9_span_2_Template","RfvGaugeViewComponent_ng_template_7_div_1_span_2_Template","RfvGaugeViewComponent_ng_template_7_div_1_strong_3_Template","RfvGaugeViewComponent_ng_template_7_div_1_ng_container_9_Template","showGroups","getSpark$","RfvGaugeViewComponent_ng_template_7_div_1_Template","datapoints_r15","RfvGaugeViewComponent","displayGroups$","filter$","groupBy$","unitDataPoints","unitDataPoints$","showRunning","_sparks","getAlarmTestName","assetAlarms","assetAlarm","searchedRowValues","searchStringNames","propertyFilter","propertyNames","propertyValues","groupA","DisplayGroupId","groupB","gp","historical","isRunning","DecimalPlaces","spark$","RfvGaugeViewComponent_ng_container_1_Template","RfvGaugeViewComponent_ng_container_2_Template","RfvGaugeViewComponent_ng_template_3_Template","RfvGaugeViewComponent_ng_template_5_Template","RfvGaugeViewComponent_ng_template_7_Template","title_r1","JobTitleDrawerComponent","JobTitleId","JobTitleDrawerComponent_involve_option_14_Template","machineComponents_r15","machineComponents_r6","ngIf","componentChanged","MachineInfoComponent_ng_container_0_div_1_ng_container_6_involve_option_3_Template","UnitMachineAssetComponents","componentIndex_r21","component_r20","storeComponentName","editComponentName","childComponent_r41","_r44","addComponent","MachineInfoComponent_ng_container_0_div_1_div_11_ng_container_8_involve_icon_1_Template","editPermission","deleteComponent","machineInfoItem_r57","MachineInfoComponent_ng_container_0_div_1_div_11_ng_template_11_div_2_involve_select_5_involve_option_1_Template","MachineComponentItem_r51","MachineInfoComponentItemLegends","MachineInfoComponent_ng_container_0_div_1_div_11_ng_template_11_div_2_involve_select_5_Template","MachineInfoComponent_ng_container_0_div_1_div_11_ng_template_11_div_2_ng_template_6_Template","MachineComponentItemIndex_r52","IsRequired","HasLegend","_r55","MachineInfoComponent_ng_container_0_div_1_div_11_ng_template_11_div_2_Template","machineInfoAsset$","MachineInfoComponent_ng_container_0_div_1_div_11_ng_container_5_Template","MachineInfoComponent_ng_container_0_div_1_div_11_ng_container_6_Template","MachineInfoComponent_ng_container_0_div_1_div_11_ng_container_7_Template","MachineInfoComponent_ng_container_0_div_1_div_11_ng_container_8_Template","MachineInfoComponent_ng_container_0_div_1_div_11_involve_icon_10_Template","MachineInfoComponent_ng_container_0_div_1_div_11_ng_template_11_Template","canEditName","saveAndContinue","ctx_r63","MachineInfoComponent_ng_container_0_div_1_div_13_span_2_Template","MachineInfoComponent_ng_container_0_div_1_div_13_button_3_Template","MachineInfoComponent_ng_container_0_div_1_div_13_button_4_Template","MachineInfoComponent_ng_container_0_div_1_div_4_Template","MachineInfoComponent_ng_container_0_div_1_ng_container_6_Template","MachineInfoComponent_ng_container_0_div_1_div_11_Template","MachineInfoComponent_ng_container_0_div_1_div_13_Template","saveTopRight","MachineInfoComponent_ng_container_0_div_1_Template","machineComponents$","MachineInfoComponent_ng_template_2_ng_container_0_ng_container_4_Template","MachineInfoComponent_ng_template_2_ng_container_0_ng_container_6_Template","MachineInfoComponent_ng_template_2_ng_container_0_ng_container_8_Template","MachineInfoComponent_ng_template_2_ng_container_0_ng_container_10_Template","MachineInfoComponent_ng_template_2_ng_container_0_ng_container_12_Template","machineComponentsLoading$","machineInfoLoading$","isAddingComponent$","iSDeletingComponent$","isMachineInfoSaving$","MachineInfoComponent_ng_template_2_ng_container_0_Template","isBusy$","ctx_r74","machineInfoError$","MachineInfoComponent_ng_template_4_app_error_0_Template","MachineInfoComponent","machineInfoLoaded$","machineComponentsLoaded$","_selectedComponentId","populateUnitMachineAssetComponents","unitMachineAssetComponentsArray","UnitMachineAssetComponent","UnitMachineAssetComponentGroup","_canEditName","populateMachineComponentItems","parentGroup","machineComponentItemsArray","MachineComponentItem","MachineComponentItemGroup","UnitMachineInfoId","MachineComponentItemId","HelpText","valueControl","addControl","componentIndex","confirmDeleteComponent","componentId","isLocked","comp","MachineInfoComponent_ng_container_0_Template","MachineInfoComponent_ng_template_2_Template","MachineInfoComponent_ng_template_4_Template","tooltipTextField","tooltipIcon","secondRowField","InvolveErrorField","restoredCtx","idx_r2","onOptionSelect","MultiSelectComponent_li_2_span_4_Template","MultiSelectComponent_li_2_span_5_Template","MultiSelectComponent_li_2_involve_error_6_Template","selectedField","textField","tooltipField","MultiSelectComponent","showCheckbox","optionSelected","optionDeselected","clickedOption","MultiSelectComponent_li_2_Template","OverlayBackdropComponent","onBackdropClick","OverlaySpinnerComponent","ProgressBarComponent","ReloadIndicatorComponent","group_r17","ReportScheduleListComponent_involve_table_0_involve_cell_3_involve_icon_7_Template","ReportScheduleListComponent_involve_table_0_involve_cell_3_involve_icon_8_Template","report_r22","time_r26","ReportScheduleListComponent_involve_table_0_involve_cell_9_div_5_li_2_Template","report_r23","ReportScheduleListComponent_involve_table_0_involve_cell_9_div_5_Template","DateRangeName","report_r28","FileType","report_r29","report_r30","onScheduleRunNowClick","onScheduleEditClick","onScheduleDeleteClick","onScheduleCopySettingsClick","ReportScheduleListComponent_involve_table_0_involve_header_cell_2_Template","ReportScheduleListComponent_involve_table_0_involve_cell_3_Template","ReportScheduleListComponent_involve_table_0_involve_header_cell_5_Template","ReportScheduleListComponent_involve_table_0_involve_cell_6_Template","ReportScheduleListComponent_involve_table_0_involve_header_cell_8_Template","ReportScheduleListComponent_involve_table_0_involve_cell_9_Template","ReportScheduleListComponent_involve_table_0_involve_header_cell_11_Template","ReportScheduleListComponent_involve_table_0_involve_cell_12_Template","ReportScheduleListComponent_involve_table_0_involve_header_cell_14_Template","ReportScheduleListComponent_involve_table_0_involve_cell_15_Template","ReportScheduleListComponent_involve_table_0_involve_header_cell_17_Template","ReportScheduleListComponent_involve_table_0_involve_cell_18_Template","ReportScheduleListComponent_involve_table_0_ng_template_19_Template","ReportScheduleListComponent_involve_table_0_involve_header_row_20_Template","ReportScheduleListComponent_involve_table_0_involve_row_21_Template","ReportScheduleListComponent_involve_table_0_involve_row_22_Template","ReportScheduleListComponent","displayFormat","userGlobalFilterDataPointGroups","onRunScheduledReport","onEditScheduledReport","onDeleteScheduledReport","onCopyScheduledReport","rs","sg","arr","reportSchedulesFiltered","GlobalFilterName","filterNames","dpFilter","ReportScheduleListComponent_involve_table_0_Template","onClearSearch","RfvFilterInputComponent","searchChanged","onFilterInput","RfvFilterInputComponent_app_svg_icon_4_Template","RfvFilterInputComponent_ng_template_5_Template","RfvIconComponent","icon$","foundIcon","RfvIconComponent_app_svg_icon_0_Template","SampleTimeFooterComponent","dateDescription","dateTime","dateTimeStr","displayedText","getSelectedName","selectedOptionName","option_r12","itemClick","SelectComponent_ng_template_6_ng_container_1_ng_container_1_ng_container_1_li_1_Template","SelectComponent_ng_template_6_ng_container_1_ng_container_1_ng_container_1_Template","SelectComponent_ng_template_6_ng_container_1_ng_container_2_li_1_span_1_Template","formatDropdown","SelectComponent_ng_template_6_ng_container_1_ng_container_2_li_1_Template","SelectComponent_ng_template_6_ng_container_1_ng_container_1_Template","SelectComponent_ng_template_6_ng_container_1_ng_container_2_Template","nestedOption_r29","SelectComponent_ng_template_6_ng_container_2_li_1_li_4_Template","SelectComponent_ng_template_6_ng_container_2_li_1_hr_5_Template","group_r25","nestedPropertyName","last_r26","SelectComponent_ng_template_6_ng_container_2_li_1_Template","specialButtonClick","specialButtonText","SelectComponent_ng_template_6_ng_container_1_Template","SelectComponent_ng_template_6_ng_container_2_Template","SelectComponent_ng_template_6_ng_container_3_Template","withGrouping","SelectComponent","getDisplayText","specialButtonClicked","_isVisible","validateInputs","dataPointValue","ngDoCheck","newVal","SelectComponent_div_3_Template","SelectComponent_div_4_Template","SelectComponent_app_svg_icon_5_Template","SelectComponent_ng_template_6_Template","SimpleDrawerHeaderComponent","subtitle1","subtitle2","cancelIconClicked","onCancelIconClicked","headerTitle","headerSubtitle1","headerSubtitle2","SimpleDrawerComponent_ng_template_2_app_simple_drawer_header_2_Template","isDrawerActive","hasOwnHeader","contentIsScrollable","SimpleDrawerComponent","handleIsActive","drawerOrigin","cdr","backdropClicked","isOverlayActive","animDelayMs","timeOutIds","setCdkOverlayOrigin","drawer","handleDrawerToggle","SimpleDrawerComponent_ng_template_2_Template","SvgIconComponent","iconColor","testId","baseIconPath","iconSpritePath","TabItemComponent","tabsComponent","addTabItem","tabTitle","tabData","TabsSliderDirective","ren2","elRef","onHover","ev","closest","updateTabSliderPosition","slider","offsetLeft","tab_r1","selectTabItem","TabsComponent","tabsAreClickable","withBorders","tabChanged","tabItems","TabsComponent_div_1_Template","ShowHideButtonsDirective","tooltipAndLabel","buttonsTabsOptionsContainer","headerList","unfoldButton","handleWindowResize","resizeSubscription$","initElementsAndWidths","showHideActionElementsOnResize","resizeObservable$","headerWidth","handleHeaderWidthChange","alwaysVisibleHeaderElsWidth","squashHeaderElements","isMobileOrTabView","querySelectorAll","unfoldButtonWidth","tooltipAndLabelWidth","buttonsTabsOptionsContainerWidth","navigator","userAgent","TileHeaderButtonComponent","TileHeaderButtonComponent_div_1_Template","TileHeaderButtonComponent_div_2_Template","tabClick","idx_r8","tab_r7","TileHeaderContentWrapperComponent_div_11_ng_container_1_Template","headerTabs","button_r11","option_r15","optionClick","TileHeaderContentWrapperComponent_ng_container_14_involve_menu_button_3_Template","button_r21","onListItemButtonClick","idx_r25","isDropdownOpen","tab_r24","option_r28","TileHeaderContentWrapperComponent_ng_container_16_involve_menu_button_3_Template","TileHeaderContentWrapperComponent_ng_container_16_involve_menu_button_4_Template","TileHeaderContentWrapperComponent_ng_container_16_involve_menu_button_5_Template","allButtons","selectView","nextViewMode","TileHeaderContentWrapperComponent_div_17_involve_icon_1_Template","TileHeaderContentWrapperComponent","specialtyButtonIcons","guageViewButton","_isDropdownOpen","selectedViewMode","_viewMode","viewMode","viewModeChange","viewModes","tooltipTextLines","allowScroll","displayDateRange","lastTileHeaderId","lastReload$","currentHeaderTileId$","setTooltipText","onHeaderClick","calendar","TileHeaderContentWrapperComponent_div_11_Template","TileHeaderContentWrapperComponent_button_13_Template","TileHeaderContentWrapperComponent_ng_container_14_Template","TileHeaderContentWrapperComponent_ng_container_16_Template","TileHeaderContentWrapperComponent_div_17_Template","TileHeaderContentWrapperComponent_button_18_Template","dropdownLabel","TileHeaderListItemComponent","TileHeaderListItemComponent_ng_container_1_Template","TileHeaderListItemComponent_ng_container_2_Template","TileHeaderTabComponent","headerTab","tabClicked","TileHeaderTitleComponent","TileHeaderButtons","_permissionService","headerButtonKeys","fullscreenRoute","adminFullscreenRoute","sitemapGroupRoot","sitemapGroupRootId","selectedAssetType","dashboardEntites","_viewAction","tags","callingTileId","headerButtons","getHeaderButton","pick","createAdminButton","excludeFromDropdown","Function","routerPath","_angular_core__WEBPACK_IMPORTED_MODULE_10__","TileContentComponent","TileHeaderComponent","TileComponent","UnitInfoEditorComponent_ng_template_0_span_4_Template","UnitInfoEditorComponent_div_6_button_1_Template","UnitInfoEditorComponent_div_6_button_2_Template","legendValue_r20","UnitInfoEditorComponent_div_8_ng_template_7_div_1_involve_select_4_involve_option_1_Template","item_r15","Legend","UnitInfoEditorComponent_div_8_ng_template_7_div_1_involve_select_4_Template","UnitInfoEditorComponent_div_8_ng_template_7_div_1_ng_template_5_Template","hasLegend","UnitInfoEditorComponent_div_8_ng_template_7_div_1_Template","displayGroup_r11","Items","UnitInfoEditorComponent_div_8_ng_template_7_Template","UnitInfoEditorComponent_div_10_button_1_Template","UnitInfoEditorComponent_div_10_button_2_Template","UnitInfoEditorComponent","unitInfo$","unitInfoRequest","UnitInfoItems","_angular_core__WEBPACK_IMPORTED_MODULE_12__","UnitInfoEditorComponent_ng_template_0_Template","UnitInfoEditorComponent_div_6_Template","UnitInfoEditorComponent_div_8_Template","UnitInfoEditorComponent_div_10_Template","UtilizationChartComponent","export","utilizationData","UoMId","FuelUoMId","UnitOfMeasureName","alignTicks","contextButton","menuItems","Frequency","foregroundColor","crop","textOutline","MaxDate","autoRotation","tickWidth","allowDecimals","opposite","tickInterval","defaultFormatter","IsApproximated","HoursError","stack","Hex","IdleFuelUsed","getEntityColorPattern","FuelUsed","IdleHours","StoppedHours","WorkHours","baseColor","UtilizationChartComponent_ng_container_0_Template","UtilizationChartComponent_ng_template_1_Template","DrawerOriginDirective","HoverClassDirective","hoverClass","MachineInfoComponentDirective","accClasses","second","third","fourth","ToggleAccordionDirective","isInitiallyOpen","accordionEl","inactive","toggleAccordionActive","accState","FilterDisabledDatapointsPipe","FilterMachineComponent","field","RoundNumberPipe","decimals","roundIfNecessary","EPSILON","numSign","pow","UserPermissionService","serviceActive","Init","userPermissions$","userPermissions","getPermissions","idsByTag","TableGroupService","_notifyHeader","_notifyGroups","notifyHeaderObservable$","notifyGroupsObservable$","notifyHeader","notifyGroups","ColorPickerModule","white_d","white_d2","white_d4","material_grey","black_l5","black_l4","black_l","green_l","yellow_l2","yellow_l3","blue_l","red_l","default","normal","shutdown","commloss","present","cleared","Running","Shutdown","CommsLoss","_rollupMoment","_moment","_rollupMomentTimezone","MomentUtils","isMidnightTime","SitemapStoreModule","autoSelectDashboard","SaveSitemap","sitemapChanges","SaveSitemapFail","SaveSitemapSuccess","SaveSection","SaveSectionFail","SaveSectionSuccess","LoadUnitToEdit","LoadUnitToEditFail","LoadUnitToEditSuccess","ClearUnitToEdit","SaveUnit","SaveUnitFail","SaveUnitSuccess","AddSection","Section","AddSectionFail","AddSectionSuccess","DeleteSection","DeleteSectionFail","DeleteSectionSuccess","SitemapService","saveSitemap","saveSection","saveUnit","_sitemapService","_sectionService","getSelectedAssetToEdit$","SitemapActions","onSelectSitemap$","onCoreLoad$","onSelectDashboard$","SitemapSelectors","onSelectTile$","saveSitemap$","savesSitemapSuccess$","savesSitemapFail$","saveSection$","fromLayout","deleteSection$","saveUnit$","addUnit$","sitemapReducer","isSavingSitemap","selectedUnitToEdit","isAssetsLoaded","isSitemapGroupsLoaded","getSelectedPathString","getAllSelectedSitemapGroupAssets","sitemapGroupChildren","getSitemapGroupChildren","childSitemapGroups","getQuery","getSelectedUnitToEdit","isGlobalFilterDisabled","isGlobalFilterActive","getGlobalFilterTooltip","showAssetsOnly","SupportDeviceInfoService","getForm","getMaxCommsAllowed","getPleDevices","isUnassociated","getPleDeviceInformation","getPleDeviceAssocation","savePleDeviceAssociation","getRmsDeviceInfo","saveRmsDeviceInfo","SupportHardwareConfigService","getPleHardwareConfigGroups","env","getPleVimsConfigurations","getPleHardwareConfigStatus","getPleHardwareConfigStatusByAssetId","savePleVimsConfig","pleReboot","pleComplete","SupportUnitCreationService","getUnitCreation","saveUnitCreation","saveUnitStates","updateUnitCreationLock","LoadAlarmsForm","LoadAlarmsFormFail","LoadAlarmsFormSuccess","AddAlarmToArray","SaveAlarms","SaveAlarmsFail","SaveAlarmsSuccess","SaveAlarm","SaveAlarmFail","SaveAlarmSuccess","AddAlarm","AddAlarmFail","AddAlarmSuccess","DeleteAlarm","DeleteAlarmFail","DeleteAlarmSuccess","PollAlarmDeploymentStatus","attempt","PollAlarmDeploymentStatusByAssetId","StopPollAlarmDeploymentStatus","LoadCurrentStatusFail","CancelCommand","SupportAlarmService","getAlarmsForm","saveAlarms","saveAlarm","createAlarm","deleteAlarm","_alarmService","_hardwareConfigService","_maxAttempts","_timer$","getAlarmsForm$","AlarmsFormActions","alarmsForm","saveAlarms$","NavigationActions","saveAlarm$","startTimer$","StreamingConfig","StatusTypeId","startTimerAssetId$","Status","pollingModal$","pollingModalByAssetId$","stopTimer$","cancelCommand$","alarmsFormReducer","AlarmsFormsActions","getAssetAlarms","LoadAssignDataPointsForm","LoadAssignDataPointsFormFail","LoadAssignDataPointsFormSuccess","assignDataPointsForm","LoadDataPoints","LoadDataPointsFail","LoadDataPointsSuccess","CreateDataPoint","orphanLegends","CreateDataPointFail","CreateDataPointSuccess","dpId","DeleteDataPoint","DeleteDataPointFail","DeleteDataPointSuccess","UpdateDataPoint","UpdateDataPointFail","UpdateDataPointSuccess","UpdateAllDataPoints","UpdateAllDataPointsFail","UpdateAllDataPointsSuccess","SupportAssignDataPointsService","getAssignDataPointForm","getDataPoints","createDataPoint","deleteDataPoint","updateDataPoint","updateAllDataPoints","_assignDataPointsService","getAssignDataPointsForm$","AssignDataPointsFormActions","getDataPoints$","createDataPoints$","createDataPointSuccess$","LegendActions","updateDatapoint$","updateAllDatapoints$","deleteDataPoint$","isCreatingDatapoints","assignDataPointsFormReducer","getAssignDataPointsForm","getDataPointIdentifiers","DataPointIdentifiers","getUnitsOfMeasure","LoadCommsLossSettingsForm","LoadCommsLossSettingsFormFail","LoadCommsLossSettingsFormSuccess","commsLossSettingsForm","LoadCommsLossSettings","LoadCommsLossSettingsFail","LoadCommsLossSettingsSuccess","commsLoss","SaveCommsLossSettings","SaveCommsLossSettingsFail","SaveCommsLossSettingsSuccess","SupportCommsLossService","getCommsLossSettingsForm","getCommsLossSettings","saveCommsLossSettings","_commsLossService","getCommsLossForm$","CommsLossSettingsActions","loadCommsLoss$","saveCommsLoss$","isLoadingForm","isLoadedForm","commsLossSettingsFormReducer","CommsLossActions","getCommsLossSettingsFormId","getCommsLoss","LoadCommTypeInfoForm","LoadCommTypeInfoFormFail","LoadCommTypeInfoFormSuccess","commTypeInfoForm","LoadDeviceCommTypeInfo","LoadDeviceCommTypeInfoFail","LoadDeviceCommTypeInfoSuccess","deviceCommType","LoadMaxCommsAllowed","LoadMaxCommsAllowedFail","LoadMaxCommsAllowedSuccess","maxCommsAllowed","AddDeviceCommType","AddDeviceCommTypeFail","AddDeviceCommTypeSuccess","AddDeviceCommTypes","AddDeviceCommTypesFail","AddDeviceCommTypesSuccess","SaveAllDeviceCommTypes","deviceCommTypes","SaveAllDeviceCommTypesFail","SaveAllDeviceCommTypesSuccess","DeleteDeviceCommTypeInfo","deviceCommsId","DeleteDeviceCommTypeInfoFail","DeleteDeviceCommTypeInfoSuccess","SupportCommTypeInfoService","getCommTypeInfoForm","getDeviceCommType","addDeviceCommType","addAllDeviceCommType","saveAllDeviceCommTypes","deleteDeviceCommType","deviceCommTypeId","_commTypeInfoService","_deviceInfoService","getCommsTypeInfoForm$","CommTypeInfoFormActions","commsInfoForm","getDeviceCommType$","getMaxCommsAllowed$","addDeviceCommType$","addAllDeviceCommType$","saveAllDeviceCommType$","deleteDeviceCommType$","deviceCommTypeInfo","maxComms","commTypeInfoFormReducer","CommsTypeInfoFormActions","getDeviceCommTypeInfo","getCommTypeInfoFormId","getCommTypes","CommTypes","getProviderTypes","ProviderTypes","CreateFromExistingAsset","CreateFromExistingAssetFail","CreateFromExistingAssetSuccess","stepIds","LoadUnitCreationLog","LoadUnitCreationLogFail","LoadUnitCreationLogSuccess","SupportCreateFromExistingAssetService","createFromExistingAsset","_createFromExistingAssetService","_unitCreationService","CreateFromExistingAssetActions","userSuppliedUnitCreationStepIds","copyFail$","copySuccess$","fromAssignDataPointsFormActions","fromAssignUnitDataActions","getUnitCreationLog$","getLogToCopyFrom","logToCopyFrom","getIsLogLoaded","isLogLoaded","getIsCreating","getIsCreated","isCreated","createFromExistingAssetReducer","isLogLoading","LoadForm","LoadFormFail","LoadFormSuccess","deviceInfoForm","LoadDspAssociationItems","LoadDspAssociationItemsFail","LoadDspAssociationItemsSuccess","dspAssociationItems","LoadPleDeviceInformation","LoadPleDeviceInformationFail","LoadPleDeviceInformationSuccess","LoadPleDeviceAssociation","LoadPleDeviceAssociationFail","LoadPleDeviceAssociationSuccess","SavePleDeviceAssociation","SavePleDeviceAssociationFail","SavePleDeviceAssociationSuccess","LoadRMSDeviceInfo","LoadRMSDeviceInfoFail","LoadRMSDeviceInfoSuccess","SaveRMSDeviceInfo","SaveRMSDeviceInfoFail","SaveRMSDeviceInfoSuccess","getForm$","getPleDevices$","dspAssociatedItems","getPleDeviceInformation$","loadPleDeviceAssociation$","savePleDeviceAssociation$","loadRmsDeviceInfo$","saveRMSDeviceInfo$","isFormLoading","isFormLoaded","formError","isDspAssociationItemsLoaded","isDspAssociationItemsLoading","isSelectedDeviceLoading","isSelectedDeviceSaving","selectedDeviceInfo","isSelectedDeviceInfoLoaded","isSelectedDeviceInfoLoading","rmsDeviceInfo","rmsDeviceInfoError","isRmsDeviceInfoLoaded","isRmsDeviceInfoLoading","isRmsDeviceInfoSaving","deviceInformationFormReducer","DeviceInformationFormActions","getFormId","getFormParseTypes","ParseTypes","getFormHardwareTypes","HardwareTypes","getDPSAssociationItems","getSelectedDevice","getSelectedDeviceInformation","deviceInformation","devices","baseConfig","vimsConfiguration","partNumber","baseConfigDate","modifiedTime","radios","getRadioInfo","getEcmsInfo","getFormError","getAssociationFilter","getRmsDeviceError","LoadCurrentStatus","LoadCurrentStatusSuccess","LoadConfigGroups","LoadConfigGroupsFail","LoadConfigGroupsSuccess","configGroups","LoadAvailableVimsConfig","LoadAvailableVimsConfigFail","LoadAvailableVimsConfigSuccess","availableVimsConfigs","RebootDevice","RebootDeviceFail","RebootDeviceSuccess","rebootResult","PushVimsConfig","PushVimsConfigFail","PushVimsConfigSuccess","vimsPushResult","PollVimsStatus","StopPollVimsStatus","PLECompleteHardwareConfig","CancelVIMSCommand","PollOnboardingStatus","StopPollOnboardingStatus","ReadIdpConfig","ReadIdpConfigFail","ReadIdpConfigSuccess","PollCommandStatus","PollCommandStatusStop","LoadIdpVersion","LoadIdpVersionFail","LoadIdpVersionSuccess","LoadIdpConfigHistory","LoadIdpConfigHistoryFail","LoadIdpConfigHistorySuccess","configHistory","LoadIdpTemplate","versionId","LoadIdpTemplateFail","LoadIdpTemplateSuccess","LoadIdpSettings","LoadIdpSettingsFail","LoadIdpSettingsSuccess","SaveIdpSettings","SaveIdpSettingsFail","SaveIdpSettingsSuccess","ContinueWithoutSending","ContinueWithoutSendingFail","ContinueWithoutSendingSuccess","SupportIdpService","getTemplate","getConfigHistory","getSettings","saveSettings","skipSend","readConfig","_idpService","_onboardingService","getStatus$","HardwareConfigurationFormActions","getConfigGroup$","getAvailableVimsConfig$","rebootDevice$","updateDeviceConfig$","pollStatus$","VimsConfig","stopPollingVims$","cancelVimsCommand$","pleCompleteHardwareConfig$","canComplete","handleActions","getTemplate$","getVersion$","getConfigHistory$","getSettings$","saveSettingsModal$","saveSettings$","ContinueWithoutSending$","readConfigModal$","readConfig$","pollCommandStatus$","pollingCommandModal$","stopPollingCommand$","currentStatus","currentStatusError","isCurrentStatusLoading","isCurrentStatusLoaded","configGroupsError","isConfigGroupsLoading","isConfigGroupsLoaded","availableVimsConfigsError","isAvailableVimsConfigsLoading","isAvailableVimsConfigsLoaded","vimsPushError","isVimsPushing","rebootError","isRebooting","idpVersion","isIdpVersionLoading","isIdpVersionLoaded","idpVersionError","idpConfigHistory","isIdpConfigHistoryLoading","isIdpConfigHistoryLoaded","idpConfigHistoryError","idpTemplate","isIdpTemplateLoading","isIdpTemplateLoaded","idpTemplateError","idpSettings","isIdpSettingsLoading","isIdpSettingsLoaded","isIdpSettingsSaving","idpSettingsError","hardwareConfigFormReducer","HardwareConfigFormActions","hardwareConfigurationForm","getCurrentStatus","getCurrentStatusError","getConfigGroups","getConfigGroupsError","getAvailableVimsConfigs","getAvailableVimsConfigsError","getVimsPushResult","getVimsPushError","getRebootResult","getRebootError","getIdpTemplate","getIdpTemplateError","getIdpVersion","getIdpVersionError","getIdpConfigHistory","getIdpConfigHistoryError","getIdpSettings","getIdpSettingsError","StoreDataPointId","CopyDataPoints","dataPointLegends","SaveLegends","SaveLegendsFail","SaveLegendsSuccess","AddLegends","AddLegendsFail","AddLegendsSuccess","DeleteLegend","dataPointValues","DeleteLegendFail","DeleteLegendSuccess","LoadUserAssets","LoadUserAssetsFail","LoadUserAssetsSuccess","LoadAssetDataPoints","LoadAssetDataPointsFail","LoadAssetDataPointsSuccess","LoadDataPointLegends","dpIds","LoadDataPointLegendsFail","LoadDataPointLegendsSuccess","legendEditor","getSelectedDataPointId","getAssets","assetsToCopy","isAssetsToCopyLoading","isAssetsToCopyLoaded","dataPointsToCopy","isDataPointsLoading","isDataPointsToCopyLoading","isDataPointsLoaded","isDataPointsToCopyLoaded","getDataPointLegends","isLegendsLoading","isLegendsLoaded","getDataPointLegendsToCopy","legendsToCopy","isLegendsToCopyLoading","isLegendsToCopyLoaded","getSelectedDataPointLegends","selectedLegendsToCopy","isLegendsSaving","isLegendsDeleting","isLegendsAdding","LegendEditorService","saveDataPointLegends","deleteDataPointLegend","addDataPointLegends","getUserAssets","getDataPointsByAssetId","_legendEditorService","_dataPointService","userId$","dpId$","LegendEditorSelectors","saveDataPointLegends$","LegendEditorActions","deleteDataPointLegends$","addDataPointLegends$","getUserAssets$","getDataPointsByAssetIds$","dps","getDataPointLegends$","isLegendsSaved","isLegendsDeleted","isLegendsAdded","CreateNavigation","CreateNavigationFail","CreateNavigationSuccess","LoadNavigation","LoadNavigationFail","LoadNavigationSuccess","SelectStep","GotoStep","NextStep","getNavigation","getAssetId","getUnitIsLocked","IsLocked","getNavigationGroups","Groups","getDeviceId","getAllNavigationSteps","Steps","getLastCompletedStepId","steps","lastCompletedStepIndex","lastIndexOf","StepId","getCurrentStepId","currentStepId","getUnitCreationTypeId","getUnitCreationType","UnitCreationTypes","getUnitCreationLogId","getBrandName","BrandName","getCurrentGroup","getCurrentStep","getNextStep","currentStep","nextStep","nextGroup","isRestartResumeDisabled","isOnboardingVerified","SupportNavigationService","_navigationService","loadNavigation$","navigationFailed$","gotoStep$","NavigationSelectors","nextStep$","navigationReducer","unitCreation","serverUIConfigurationForm","runtimeForm","unitValidation","unitReview","LoadRuntimeForm","LoadRuntimeFormFail","LoadRuntimeFormSuccess","SaveRuntimeForm","isCreate","SaveRuntimeFormFail","SaveRuntimeFormSuccess","selectRuntimeDatapointId","selectEventDatapointId","selectRuntimeTest","selectEventTest","selectRuntimeThreshold","selectEventThreshold","LoadRuntimeDatapointLegends","LoadRuntimeDatapointLegendsFail","LoadRuntimeDatapointLegendsSuccess","LoadEventDatapointLegends","LoadEventDatapointLegendsFail","LoadEventDatapointLegendsSuccess","SupportRuntimeSettings","getRuntimeSettings","saveRuntimeSettings","loadRuntimeForm$","RuntimeFormActions","saveRuntimeForm$","selectRuntimeDatapointId$","selectEventDatapointId$","loadRuntimeDatapointId$","loadEventDatapointId$","runtimeLegends","eventLegends","selectedRuntimeDataPointId","selectedEventDataPointId","selectedEventTestId","selectedRuntimeTestId","selectedEventThreshold","selectedRuntimeThreshold","isRuntimeLegendsLoading","isRuntimeLegendsLoaded","RuntimeDatapointLegendsError","isEventLegendsLoading","isEventLegendsLoaded","EventDatapointLegendsError","RuntimeTestId","EventTestId","getRuntimeForm","getDownLabel","DownLabel","getUpLabel","UpLabel","getRuntimeDataPointLegends","isRuntimeDataPointLegendsLoading","isRuntimeDataPointLegendsLoaded","getRuntimeDataPointLegendsError","getSelectedRuntimeDataPointId","getSelectedRuntimeDataTestId","getSelectedRuntimeThreshold","getEventDataPointLegends","isEventDataPointLegendsLoading","isEventDataPointLegendsLoaded","getEventDataPointLegendsError","getSelectedEventDataPointId","getSelectedEventTestId","getSelectedEventThreshold","LoadServerUIConfigurationForm","LoadServerUIConfigurationFormFail","LoadServerUIConfigurationFormSuccess","LoadPLETemplates","LoadPLETemplatesFail","LoadPLETemplatesSuccess","pleTemplates","UpdateStreamingConfigTemplate","templateName","channels","UpdateStreamingConfigTemplateFail","UpdateStreamingConfigTemplateSuccess","streamingConfigSetup","SavePLETemplateConfigurableChannels","isSetupDevice","SavePLETemplateConfigurableChannelsBySHA1","toDisableChannels","lockedByCustomerId","SavePLETemplateConfigurableChannelsFail","SavePLETemplateConfigurableChannelsSuccess","SaveConfigurableChannelsSuccessSHA1","LoadConfigurableChannels","LoadConfigurableChannelsBySHA1","LoadConfigurableChannelsFail","LoadConfigurableChannelsSuccess","configurableChannels","SaveConfigurableChannels","SaveConfigurableChannelsFail","SaveConfigurableChannelsSuccess","PollStreamingStatus","StopPollStreamingStatus","ClearUpdatedTemplateId","LoadDeviceMessagesDefinitionDataTypes","LoadDeviceMessagesDefinitionDataTypesFail","LoadDeviceMessagesDefinitionDataTypesSuccess","dataTypes","LoadDeviceMessagesDefinitions","LoadDeviceMessagesDefinitionsFail","LoadDeviceMessagesDefinitionsSuccess","deviceMessagesDefinitions","LoadDeviceMessages","LoadDeviceMessagesFail","LoadDeviceMessagesSuccess","DeviceMessages","SaveDeviceDataPointDefinition","DeviceMessagesDefinition","SaveDeviceDataPointDefinitionFail","SaveDeviceDataPointDefinitionSuccess","UpdateAllDeviceDataPointDefinitions","DeviceMessagesDefinitions","UpdateAllDeviceDataPointDefinitionsFail","UpdateAllDeviceDataPointDefinitionsSuccess","RemoveDeviceDataPointDefinition","RemoveDeviceDataPointDefinitionFail","RemoveDeviceDataPointDefinitionSuccess","StatusCode","Response","SupportServerConfigService","getServerConfigPleForm","getServerConfigPleChannels","elapsed","getServerConfigPleChannelsBySHA1","saveServerConfigPleChannels","saveServerConfigPleChannelsBySHA1","getDeviceMessagesDefinitionDataTypes","getDeviceMessagesDefinitions","getDeviceMessages","messages","getServerConfigPleTemplates","updateStreamingConfigTemplate","_serverConfigService","getServerUIConfigurationForm$","ServerUIConfigurationFormActions","ServerUIConfigurationForm","loadPLETemplates$","updateStreamingConfigTemplate$","savePLETemplateConfigurableChannels$","savePLETemplateConfigurableChannelsBySHA1$","SaveConfigurableChannelsSuccessSHA1$","loadConfigurableChannels$","LoadConfigurableChannelsFail$","Message","saveConfigurableChannels$","openModalForSendingConfig$","loadDeviceMessagesDefinitionDataTypes$","loadDeviceMessagesDefinitions$","loadDeviceMessages$","saveDeviceMessagesDefinitions$","updateAllDeviceMessagesDefinitions$","removeDeviceMessagesDefinitions$","PLESetup","isChannelsLoading","isChannelsLoaded","channelsError","updatedTemplateId","isTemplatesLoading","isTemplatesLoaded","deviceMessagesDefinitionDataTypes","isLoadingDeviceMessagesDefinitionDataTypes","deviceMessages","isLoadingDeviceMessages","isLoadingDeviceMessagesDefinitions","serverUIConfigurationFormReducer","templatesError","getServerUIConfigurationForm","getConfigurableChannels","getPLETemplates","getConfigParameters","ConfigParameters","getUpdatedTemplateID","getStreamingCommunicationDatas","StreamingCommunicationsDatas","getFilteredCommunicationDatas","CommunicationMethodId","getStreamingIntervals","StreamingIntervals","getChannelsError","isPLELoading","isPLELoaded","sendDeviceConfigurationYesNo","getTitle","hardwareAction","sendDeviceConfiguration","sendConfigurationFail","sendStreamingFail","serverAction","rebootFail","readConfigFail","readConfigSuccess","pushConfig","pushConfigFail","pushConfigSuccess","sha1IsInvalid","ShaValidationMessage","rebootDeviceYesNo","restartOnboardingYesNo","OnboardingQueue","LongerThanExpected","hasStatus","Status84","CheckingStatus","closeAction","DemandPollStatus","DemandPollStatusAlarm","sendConfigurationError","LoadUnitCreation","LoadUnitCreationFail","LoadUnitCreationSuccess","SaveUnitCreation","SaveUnitCreationFail","SaveUnitCreationSuccess","SaveUnitStates","unitCreationState","SaveUnitStatesFail","SaveUnitStatesSuccess","UpdateLock","UpdateLockSuccess","UpdateLockFail","loadUnitCreation$","saveUnitCreation$","saveUnitStates$","updateLock$","unitCreationReducer","SaveDrawer","SaveDrawerFail","SaveDrawerSuccess","SaveMetricToImperial","SaveMetricToImperialFail","SaveMetricToImperialSuccess","SaveImperialToAsPosted","SaveImperialToAsPostedFail","SaveImperialToAsPostedSuccess","SaveImperialToMetric","SaveImperialToMetricFail","SaveImperialToMetricSuccess","SupportUnitDataService","getUnitData","saveUnitData","_unitDataService","UnitDataActions","unitDataSetup","saveDrawer$","unitcreationId","saveDrawerReloadTable$","SaveMetricToImperial$","SaveImperialToAsPosted$","SaveImperialToMetric$","isDrawerSaving","unitDataSetupReducer","UnitDataSetupActions","FinishSetup","FinishSetupFail","FinishSetupSuccess","LoadUnitReviewInfo","LoadUnitReviewInfoFail","LoadUnitReviewInfoSuccess","review","SupportUnitReviewService","finishSetup","loadUnitReviewInfo","UnitReviewActions","finishSetup$","unitReviewReducer","unitReviewActions","getUnitReviewInfo","applicationId","getSitemapGroup","getAssetType","getTimezone","Timezone","CreateDemandPoll","CreateDemandPollFail","CreateDemandPollSuccess","LoadPLEDemandPollStatus","LoadPLEDemandPollStatusFail","LoadPLEDemandPollStatusSuccess","deviceStatus","PollUnitValidationStatus","LoadAllUnitValidation","statusLabel","FinishUnitValidation","FinishUnitValidationFail","FinishUnitValidationSuccess","SupportUnitValidationService","getPLEDemandPollStatus","finishUnitValidation","_unitValidationService","createDemandPoll$","UnitValidationActions","loadPLEDemandPollStatus$","loadAllUnitValidation$","fromUnitValidationReducer","stopPollStreamingStatus$","finishUnitValidation$","unitValidationReducer","getDeviceStatus","getCommandId","getViewAction","geError","SetSelectedDataPoint","ClearSelectedDataPoint","allAlarmsTileData","LoadUserCount","LoadUserCountSuccess","userCounts","LoadUserCountFail","InitLoadUserExpiry","LoadUserExpiry","LoadUserExpirySuccess","expiringUsers","LoadUserExpiryFailure","LoadUnitNotSetupCount","LoadUnitNotSetupCountSuccess","LoadUnitNotSetupCountFail","siteVisualizationId","CreateMarker","creatingMarker","updateSuccess","UpdateStateVisualization","UpdateSelectedLink","selectedLink","UpdateStateAssetDatapoints","TriggerSave","TriggerLinkDelete","linkToDelete","TriggerLinkDeleteComplete","emailConfig","SetSelectedAssetId","dateRangeIndex","LoadByCustomerId","LoadByCustomerIdFail","LoadByCustomerIdSuccess","LoadAccessUsers","LoadAccessUsersFail","LoadAccessUsersSuccess","defaultUserGroupId","SaveAccessUsers","editableAccessUsers","selectedUsersIds","SaveAccessUsersFail","SaveAccessUsersSuccess","RemoveAccessUser","inspectionItems","commTypes","notificationSubscriptionTypeId","subscriptionItems","subscriptionTypes","systemAlarmsTileActions","unitAlarmsTileActions","getTilesState","getAllData","alarmsTile","getLoading","getLoaded","getErrorMessage","getTotalAlarmsCount","currentCount","dataPoint","unitsOfMeasureId","selectedDataPoint","dataPointsEditorActions","dataPointsEditor","getSelectedDataPoint","runtimeMetricsTileReducer","runtimeMetricsTileActions","getTilesFeature","getTileRuntimeMetricsState","runtimeMetrics","getRuntimeMetricsData","getSelectedDateRangeIndex","runtimeData","Label","getSelectedDateRangeString","getSelectedCharts","Charts","getSelectedChartsData","charts","themeID","createChartData","dimmedColor","getTileResult","isCommandStateLoaded","unitDataActions","getTileUnitData","getUnitDataLoading","assetState","getUnitDataLoaded","getCommandStateLoading","getUnitDataError","getCommandStateLoaded","getCommandState","unitDataStatus","StatusLabel","titleText","DeviceStatusLabel","subtitleText","pie","endAngle","getSampleTime","Event","getEventData","createEventData","dataEvent","LabelValue","getDataItems","DataItems","unitInfoActions","getTileUnitInfo","getUnitInfoLoading","getUnitInfoLoaded","getUnitInfoError","getUnitInfoData","getUnitInfoComponents","unitInfoData","Components","getUnitInfoUnitInformation","UnitInformation","getUnitInfoMap","mapData","statusName","runStatus","unitStateId","Show","Hide","bannerReducer","BannerActions","LoadEula","LoadEulaFail","LoadEulaSuccess","eulaSettings","SaveEula","eulaId","SaveEulaFail","SaveEulaSuccess","EulaService","loadEula","saveEula","_eulaService","getEula$","EulaActions","saveEula$","getEulaSettings","getEulaPdf","getEulaAccepted","isAccepted","isEulaLoading","ToggleMobile","OpenMainMenu","CloseMainMenu","ToggleMainMenu","OpenSitemap","CloseSitemap","ToggleSitemap","OpenFavorites","CloseFavorites","ToggleFavorites","OpenGlobalFilter","CloseGlobalFilter","ToggleGlobalFilter","ToggleDrawer","MarkFormAsPristine","MarkFormAsDirty","isMainMenuOpen","isSitemapOpen","isFavoritesOpen","isGlobalFilterOpen","isAnyMenuOpen","getSelectedDrawerId","getDrawerOpenState","drawerIsOpen","getFormUpdateState","formValueUpdated","_media","autoCloseDefaultTimeMs","toggleMobile$","mqAlias","toggleMainMenu$","LayoutSelectors","toggleFavorites$","toggleGlobalFilter$","toggleSitemap$","showBanner$","delayWhen","isSearchVisible","CloseAlarmGroupDelete","OpenAlarmGroupDelete","CloseAlarmGroupScheduleDelete","OpenAlarmGroupScheduleDelete","isAlarmGroupDeleteOpen","isAlarmGroupScheduleDeleteOpen","modalReducer","AlarmUpdate","ReportScheduleUpdate","ReportScheduleDelete","TroubleShootingLinks","DeviceComms","UserUnitAccess","EventCode","AssignDataPointDelete","DataPointOccurrenceEditor","DataPointEditor","AssessmentRecommendation","AssessmentImport","AssociateStreamingConfig","ViewVimsAssets","CreateVims","CreateDealerVims","RemoveDealerVims","UserLog","DeleteSuppressingAlarm","CopyDerivedDatapoint","MarineAssetModifyRuntimeEvent","ControlConfirm","ConsentChanged","consentChanged$","onetrustActions","hasFunctional","_wfx_destroy","hasStrictlyNecessary","Go","extras","Url","Home","Back","Forward","GoToAssetTile","Params","fullscreen","GoToSitemapTile","selectCurrentRoute","getCurrentRoute","selectQueryParams","getQueryParams","selectQueryParam","getQueryParam","selectRouteParams","getRouteParams","selectRouteParam","getRouteParam","selectRouteData","getRouteData","selectUrl","getUrl","getAllRouterParams","currentRoute","routeData","SaveToLocalStorage","RemoveFromLocalStorage","SaveToSessionStorage","RemoveFromSessionStorage","saveToLocalStorage$","storageActions","setItem","removeFromLocalStorage$","saveToSessionStorage$","sessionStorage","removeFromSessionStorage$","clearStorage$","local","storageReducer","updatedData","getLocalStorage","getSessionStorage","getStringFromLocalStorage","storage","getNumberFromLocalStorage","getBooleanFromLocalStorage","getObjectFromLocalStorage","getStringFromSessionStorage","getNumberFromSessionStorage","getBooleanFromSessionStorage","getObjectFromSessionStorage","logActions","ngrxDevTools","loadChildren","__webpack_require__","module","B2CModule","DashboardModule","UserProfileModule","matcher","adminTilesMatcher","valueOf","consumed","posParams","UrlSegment","UserAdminModule","EmailAttachmentModule","UnsubscribeModule","AppRoutingModule","vpView","NavigationEnd","debug","markViewChangeEnd","markViewDOMLoaded","markXhrRequestsCompleted","markViewResourcesLoaded","NavigationStart","VPageView","markViewChangeStart","paramsInheritanceStrategy","fromStorage","banner","fromBanner","modal","fromModal","eula","fromEula","onetrust","fromOneTrust","metaReducers","logger","_router","_location","go$","RouterActions","url$","navigateByUrl","home$","back$","back","forward$","forward","reload$","GoToSitemapTile$","GoToAssetTile$","trackRouteChange$","customerEntites","selectedHiddenTiles","selectedCustomer","industryName","maximizedTileId","tileName","sitemapId","sitemapName","dataLayer","AppStoreModule","runtimeChecks","strictActionImmutability","StoreRouterConnectingModule","StoreDevtoolsModule","instrument","maxAge","fromOnetrust","ControlTypes","Radio","Range","categoryCount_r7","subcategoryCount_r11","subcategory_r9","category_r1","categoryClicked","FilterCategoriesComponent_section_3_div_1_article_7_li_2_div_4_Template","FilterCategoriesComponent_section_3_div_1_article_7_li_2_Template","FilterCategoriesComponent_section_3_div_1_app_svg_icon_4_Template","FilterCategoriesComponent_section_3_div_1_div_6_Template","FilterCategoriesComponent_section_3_div_1_article_7_Template","categoryCount_r24","subcategoryCount_r28","subcategory_r26","FilterCategoriesComponent_section_3_div_2_article_7_li_2_div_4_Template","FilterCategoriesComponent_section_3_div_2_article_7_li_2_Template","FilterCategoriesComponent_section_3_div_2_app_svg_icon_4_Template","FilterCategoriesComponent_section_3_div_2_div_6_Template","FilterCategoriesComponent_section_3_div_2_article_7_Template","FilterCategoriesComponent_section_3_div_1_Template","FilterCategoriesComponent_section_3_div_2_Template","unitsSelected","freshFilter","FilterCategoriesComponent","FilterCategoriesComponent_section_3_Template","stopSearch","unit_r10","onSearchUnitClick","AddUnitsComponent_ul_9_li_1_Template","searchResults$","unit_r14","onSelectedUnitClick","AddUnitsComponent_ul_10_li_1_Template","unitsList$","AddUnitsComponent","searching","startSearch","AddUnitsComponent_app_svg_icon_4_Template","AddUnitsComponent_app_svg_icon_5_Template","AddUnitsComponent_span_6_Template","AddUnitsComponent_span_7_Template","AddUnitsComponent_ul_9_Template","AddUnitsComponent_ul_10_Template","value_r1","FilterCheckboxComponent","touched","radioButton","onCheckBoxClick","FilterCheckboxComponent_div_10_Template","Values","optionsListLabel","option_r7","parentFormGroup","operator_r14","FilterOptionsListComponent_section_0_div_2_div_1_ng_container_2_involve_option_6_Template","item_r18","FilterOptionsListComponent_section_0_div_2_div_1_ng_container_4_involve_option_6_Template","FilterOptionsListComponent_section_0_div_2_div_1_app_filter_checkbox_1_Template","FilterOptionsListComponent_section_0_div_2_div_1_ng_container_2_Template","FilterOptionsListComponent_section_0_div_2_div_1_ng_container_3_Template","FilterOptionsListComponent_section_0_div_2_div_1_ng_container_4_Template","FilterOptionsListComponent_section_0_div_2_div_1_Template","FilterOptionsListComponent_section_0_div_1_Template","FilterOptionsListComponent_section_0_div_2_Template","FilterOptionsListComponent_section_0_ng_template_3_Template","showAddUnits","FilterOptionsListComponent","_resetValue","_parentFormGroup","FilterOptionsListComponent_section_0_Template","FilterOptionsListComponent_div_1_Template","name_r12","control_r6","FilterSelectionsComponent_div_5_section_1_ul_6_li_1_ng_container_3_ng_container_1_Template","FilterSelectionsComponent_div_5_section_1_ul_6_li_1_ng_container_3_ng_template_2_Template","getNameById","value_r8","FilterSelectionsComponent_div_5_section_1_ul_6_li_1_ng_container_3_Template","onControlClick","transformIntoIntArray","FilterSelectionsComponent_div_5_section_1_ul_6_li_1_Template","optionsList_r3","FilterSelectionsComponent_div_5_section_1_ul_6_Template","FilterSelectionsComponent_div_5_section_1_Template","onResetAllClick","unit_r21","onRemoveUnitsClick","FilterSelectionsComponent_div_6_li_8_Template","FilterSelectionsComponent","currentOptionsList","onAllUnitsRemove","resetAllClicked","onControlRemove","controlPath","controlType","valueId","foundValue","parentForm","FilterSelectionsComponent_div_5_Template","FilterSelectionsComponent_div_6_Template","handleCloseFilter","resetMobileScreen","handleResetAll","globalFilterForm","handleGoToSelection","GlobalFilterComponent_section_12_button_3_Template","GlobalFilterComponent_section_12_button_5_Template","GlobalFilterComponent_section_12_button_7_Template","GlobalFilterComponent_section_12_section_9_Template","mobileScreen$","screens","isSmallScreen","handleCategoryClick","categories$","badgesCount$","selectedOptionsListId$","isFilterDirty","isOptionsListLoading$","isEditedFilterLoading$","isOptionsListLoaded$","currentOptionsList$","selectedFormGroup","resetMobile","optionsListLabel$","unitsCategoryId","handleControlRemove","handleAllUnitsRemove","selections$","allOptionsList$","GlobalFilterComponent","closeGlobalFilter","_editingFilter","isSelectionsDisplayed$","UntypedFormGroup","optionsListChange","unitList","idsToDownload","requiredId","formFromEdited","createAppliedOptions","combinedId","existingUntypedFormGroup","createOrPatchUntypedFormGroup","newUntypedFormGroup","categoryDefinitions","groupWithControls","controlOptions","controlsGroup","formGroup","categoryAppliedOptions","abstractName","groupOrControl","FormGroup","handleSaveFilter","resetAll","markAsTouched","handleGoToCategories","removeControl","GlobalFilterComponent_app_svg_icon_4_Template","GlobalFilterComponent_app_svg_icon_6_Template","GlobalFilterComponent_section_12_Template","GlobalFilterComponent_app_filter_categories_15_Template","GlobalFilterComponent_div_17_Template","GlobalFilterComponent_app_filter_selections_20_Template","InvolveTreeDataSource","nodeAccessor","leafAccessor","_state","_stateChanged$","searchNodePredicate","searchLeafPredicate","_nodes$","_nodes","searchedNodes$","nodes","searchTree","_renderItems$","collectionViewer","walk","level","prevState","node","leafs","countLeaves","_findNode","predicate","_findLeafPath","findNodePath","findNode","findLeafPath","findLeaf","expandNode","expandToLeaf","collapseNode","hasChildren","InvolveBaseTreeDef","InvolveTreeNodeDirective","InvolveTreeNodeDef","InvolveTreeLeafDirective","InvolveTreeLeafDef","indentSize","shouldFocus","item_r7","level_r13","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_2_div_2_Template","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_2_involve_icon_4_Template","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_2_ng_container_6_Template","focusItem","level_r25","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_3_div_2_Template","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_3_ng_container_4_Template","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_2_Template","InvolveTree_ng_container_0_ng_container_1_ng_container_2_ng_container_3_Template","isRenderNode","InvolveTree_ng_container_0_ng_container_1_ng_container_2_Template","itemSize","InvolveTree_ng_container_0_ng_container_1_Template","InvolveTree","showEmptyNodes","_showEmptyNodes","_renderChangeSubscription","isNode","_nodeDef","_leafDef","updateViewport","scrollToNode","scrollToIndexCentered","scrollToLeaf","focusNode","getParentNodeAtLevel","InvolveTree_ng_container_0_Template","InvolveTree_ng_template_1_Template","InvolveTree_ng_template_3_Template","sitemapDataSource","node_r15","selectSitemapGroup","leaf_r18","selectAsset","MyFleetComponent_ng_template_6_involve_icon_6_Template","MyFleetComponent_ng_template_6_involve_icon_8_Template","MyFleetComponent_ng_template_6_involve_icon_9_Template","MyFleetComponent_ng_template_6_involve_tree_node_13_Template","MyFleetComponent_ng_template_6_involve_tree_leaf_14_Template","defaultAssetNamePref","node_r26","selectDashboard","leaf_r29","selectTile","MyFleetComponent_ng_container_7_ng_template_6_involve_tree_node_3_Template","MyFleetComponent_ng_container_7_ng_template_6_involve_tree_leaf_4_Template","dashboardDataSource","accordionChange","MyFleetComponent_ng_container_7_ng_template_6_Template","MyFleetComponent","originalName","preferences","PreferenceName","AssetNamePreferenceId","_sitemapTree","_scrolledSitemapGroupId","_scrolledAssetId","scrollToSelectedSitemap","_dashboardTree","_scrolledTileId","_scrolledDashboardId","scrollToSelectedDashboard","MyFleetComponent_ng_template_6_Template","MyFleetComponent_ng_container_7_Template","dashboard_r5","tile_r17","group_r1","setDefault","FavoritesComponent_involve_accordion_0_ng_template_9_involve_accordion_0_ng_template_15_div_1_Template","FavoritesComponent_involve_accordion_0_ng_template_9_involve_accordion_0_involve_icon_5_Template","FavoritesComponent_involve_accordion_0_ng_template_9_involve_accordion_0_involve_icon_12_Template","FavoritesComponent_involve_accordion_0_ng_template_9_involve_accordion_0_ng_template_13_Template","FavoritesComponent_involve_accordion_0_ng_template_9_involve_accordion_0_ng_template_15_Template","FavoritesComponent_involve_accordion_0_ng_template_9_involve_accordion_0_Template","FavoritesComponent_involve_accordion_0_ng_template_9_Template","FavoritesComponent","favorites$","fav","favoriteActions","FavoritesComponent_involve_accordion_0_Template","filter_r4","selectedFilterId$","FilterComponent_ng_container_0_li_13_Template","globalFilters$","FilterComponent","fromGlobalFilterActions","FilterComponent_ng_container_0_Template","FilterComponent_ng_template_2_Template","nav_r6","first_r7","tile_r3","SideNavItemComponent_ng_template_3_ng_container_6_li_6_Template","first_r4","getTileNavigation","SideNavItemComponent_ng_template_3_ng_container_6_Template","SideNavItemComponent","_timeout","tileNavigation","SideNavItemComponent_ng_template_3_Template","tab_r2","SideNavComponent_ng_container_2_a_1_involve_icon_5_Template","filterDisabled$","filterActive$","filterTooltip$","SideNavComponent_ng_container_2_a_1_Template","SideNavComponent_ng_container_2_a_2_Template","SideNavComponent","SideNavComponent_ng_container_2_Template","SideNavComponent_side_nav_item_4_Template","tab_r6","SitemapComponent_div_1_ng_container_2_div_1_Template","SitemapComponent_div_1_ng_container_2_div_2_Template","selectedAssetId$","SitemapComponent_div_1_ng_container_2_Template","SitemapComponent_div_1_my_fleet_6_Template","SitemapComponent_div_1_favorites_7_Template","SitemapComponent_div_1_filter_8_Template","toggleMainMenu","tabs$","SitemapComponent","contentVisible","onExpandCollapseStart","onExpandCollapseDone","SitemapComponent_div_1_Template","SitemapComponent_div_2_Template","alarm_r3","AlarmProperty","DisplayOrigVal","DisplayNewVal","UnitAlarmsModalContentComponent_ng_container_10_div_6_Template","UnitAlarmsModalContentComponent","alarmChanges","alarmCopy","NewValue","OriginalValue","UnitAlarmsModalContentComponent_ng_container_10_Template","link_r2","EventsDiagnosticsModalContentComponent_div_6_div_1_Template","link_r5","EventsDiagnosticsModalContentComponent_div_10_div_1_Template","EventsDiagnosticsModalContentComponent","componentDestroyed$","modalOptions$","modalOptions","eventRow","copy","sisLinks","EventsDiagnosticsModalContentComponent_div_6_Template","EventsDiagnosticsModalContentComponent_div_10_Template","DeviceSearchModalContentComponent_div_1_involve_icon_21_Template","comm_r1","CommType","CommSerialNumber","CommIP","ProviderType","AssetDisabled","ExpectedPostRate","DeviceSearchModalContentComponent","tableColumns","flexGrow","minWidth","commsRow","DeviceSearchModalContentComponent_div_1_Template","user_r3","CopyUserPermissionsModalComponent_div_1_involve_option_2_Template","CopyUserPermissionsModalComponent","cancelClicked","copyUser","CopyUserPermissionsModalComponent_div_1_Template","CopyUserPermissionsModalComponent_div_3_Template","title_r3","ReplaceJobtitleModalComponent_div_1_involve_option_4_Template","jobTitles$","ReplaceJobtitleModalComponent","oldJobtitle","ReplaceJobtitleModalComponent_div_1_Template","ReplaceJobtitleModalComponent_div_3_Template","option_r17","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_accordion_4_ng_template_3_ng_container_1_ng_container_1_ng_container_1_involve_option_5_Template","inputConfig_r14","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_accordion_4_ng_template_3_ng_container_1_ng_container_1_ng_container_1_Template","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_accordion_4_ng_template_3_ng_container_1_ng_container_1_Template","subcategoryConfig_r12","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_accordion_4_ng_template_3_ng_container_1_Template","filterOptionsList","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_accordion_4_ng_template_3_Template","sub_r20","option_r25","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_div_14_ng_container_1_ng_container_1_ng_container_1_span_1_Template","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_div_14_ng_container_1_ng_container_1_ng_container_1_span_2_Template","i_r29","stringValue_r28","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_div_14_ng_container_1_ng_container_1_ng_container_1_Template","getSelectedFilters","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_div_14_ng_container_1_ng_container_1_Template","subcategoryConfig_r23","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_div_14_ng_container_1_Template","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_accordion_4_Template","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_involve_error_13_Template","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_div_14_Template","category_r4","subcategories$","tmp_4_0","UserAccessUnitModalComponent_ng_container_1_ng_container_1_div_1_Template","handleCancel","handleConfirm","UserAccessUnitModalComponent_ng_container_1_ng_container_1_Template","category$","UserAccessUnitModalComponent","subcat","subcategories","optionAcc","optionValue","populateForm","UnitInfoCustomerItemId","CustomerUserAccessFilterUnitInfoItems","selectedValues","legendValue","dvalue","unitInfoCustomerItemId","userAccessFilter","optionId","formValue","selectedOption","UserAccessUnitModalComponent_ng_container_1_Template","UserAccessUnitModalComponent_ng_template_3_Template","UserRecipientsModalComponent","AlarmPreviewItemComponent_ng_template_5_div_10_span_5_Template","AlarmPreviewItemComponent_ng_template_5_div_10_span_6_Template","AlarmPreviewItemComponent_ng_template_5_div_10_div_8_Template","AlarmPreviewItemComponent_ng_template_5_div_10_div_9_Template","even_r6","AlarmPreviewItemComponent_ng_template_5_div_10_Template","AlarmPreviewItemComponent","removeAlarm","AlarmPreviewItemComponent_span_0_Template","AlarmPreviewItemComponent_ng_template_5_Template","handleRemove","ThresholdEditorPreviewModalComponent_ng_container_1_div_2_alarm_preview_item_1_Template","ThresholdEditorPreviewModalComponent_ng_container_1_div_2_Template","ThresholdEditorPreviewModalComponent","alarmsWithChanges","ThresholdEditorPreviewModalComponent_ng_container_1_Template","ThresholdEditorPreviewModalComponent_div_2_Template","eventCode_r4","OriginalAssignedEventParty","EventCodePreviewModalComponent_ng_container_1_div_10_span_5_Template","EventCodePreviewModalComponent_ng_container_1_div_10_span_6_Template","EventCodePreviewModalComponent_ng_container_1_div_10_div_8_Template","EventCodePreviewModalComponent_ng_container_1_div_10_div_9_Template","EventCodePreviewModalComponent_ng_container_1_div_10_Template","eventCodeFormGroups","EventCodePreviewModalComponent","EventCodePreviewModalComponent_ng_container_1_Template","EventCodePreviewModalComponent_ng_template_2_Template","DatapointOccurrencePreviewItemComponent","DataPointUpdateModel","OldDataPointIdentifierName","NewDataPointIdentifierName","removeUpdateModel","odd_r4","dataPoint_r3","DatapointOccurrenceEditorModalComponent_ng_container_1_div_13_Template","DatapointOccurrenceEditorModalComponent","oldIdentifier","OldDataPointIdentifierId","newIdentifier","NewDataPointIdentifierId","DatapointOccurrenceEditorModalComponent_ng_container_1_Template","DatapointOccurrenceEditorModalComponent_div_2_Template","dataPointToUpdate","OldDataPointName","NewDataPointName","DisplayGroupName","DataPointEditorModalComponent","fromDataPointsEditor","selectDataPoint","DataPointEditorModalComponent_ng_container_1_Template","AssessmentRecModalComponent_ng_container_4_ng_container_56_involve_icon_4_Template","first_r5","assessment_r4","emoAssessmentType","AssessmentRecModalComponent_ng_container_4_involve_error_25_Template","AssessmentRecModalComponent_ng_container_4_ng_container_56_Template","selectedPreviousAssessment","engineHours","isAssessmentHistoryAvailable","selectedNextAssessment","StandardDateForAssessment","selectedAssessment","estimatedDate","getStandardSchedule","assessmentHistory$","AssessmentRecModalComponent","_maxLength","assessmentList","assess","totalRecommendedHours","calculateRecommendedDate","recommendedHoursValue","recHrField","pastAssessments","topService","certifiedAssessments","isOverhaulHistoryAvailable","upcomingDate","nextStandardDate","getUtilizationRate","standardDate","utilizationRate","AssessmentRecModalComponent_ng_container_4_Template","row_r20","InspectionId","row_r21","row_r22","row_r23","InspectionTypeName","row_r24","FormName","row_r25","CompletedDate","ActionSeverity","MonitorSeverity","NormalSeverity","NoneSeverity","group_r27","AssessmentImportModalComponent_involve_cell_30_span_2_Template","AssessmentImportModalComponent_involve_cell_30_involve_icon_5_Template","AssessmentImportModalComponent_involve_cell_30_involve_icon_6_Template","row_r34","rowSelect","HighlightRow","AssessmentImportModalComponent","dataViewTable","CatInpsectionItems","AssessmentId","parsingDetails","fromSessionUser","onAssetClick","selectedCatInspectionId","isRowSelected","onConfirm","mapAssessmentCatInspectRiskToItem","onCancel","clearCatInspectParsingDetails","inspectionId","AssessmentImportModalComponent_involve_header_cell_8_Template","AssessmentImportModalComponent_involve_cell_9_Template","AssessmentImportModalComponent_involve_header_cell_11_Template","AssessmentImportModalComponent_involve_cell_12_Template","AssessmentImportModalComponent_involve_header_cell_14_Template","AssessmentImportModalComponent_involve_cell_15_Template","AssessmentImportModalComponent_involve_header_cell_17_Template","AssessmentImportModalComponent_involve_cell_18_Template","AssessmentImportModalComponent_involve_header_cell_20_Template","AssessmentImportModalComponent_involve_cell_21_Template","AssessmentImportModalComponent_involve_header_cell_23_Template","AssessmentImportModalComponent_involve_cell_24_Template","AssessmentImportModalComponent_involve_header_cell_26_Template","AssessmentImportModalComponent_involve_cell_27_Template","AssessmentImportModalComponent_involve_header_cell_29_Template","AssessmentImportModalComponent_involve_cell_30_Template","AssessmentImportModalComponent_ng_template_31_Template","AssessmentImportModalComponent_involve_header_row_32_Template","AssessmentImportModalComponent_involve_row_33_Template","AssessmentImportModalComponent_involve_row_34_Template","row_r8","row_r9","row_r10","AssociateStreamingConfigModalComponent","configModel","AssociateStreamingConfigModalComponent_involve_header_cell_3_Template","AssociateStreamingConfigModalComponent_involve_cell_4_Template","AssociateStreamingConfigModalComponent_involve_header_cell_6_Template","AssociateStreamingConfigModalComponent_involve_cell_7_Template","AssociateStreamingConfigModalComponent_involve_header_cell_9_Template","AssociateStreamingConfigModalComponent_involve_cell_10_Template","AssociateStreamingConfigModalComponent_involve_header_row_11_Template","AssociateStreamingConfigModalComponent_involve_row_12_Template","CustomerName","ViewVimsAssetsModalComponent_involve_table_1_involve_header_cell_2_Template","ViewVimsAssetsModalComponent_involve_table_1_involve_cell_3_Template","ViewVimsAssetsModalComponent_involve_table_1_involve_header_cell_5_Template","ViewVimsAssetsModalComponent_involve_table_1_involve_cell_6_Template","ViewVimsAssetsModalComponent_involve_table_1_involve_header_row_7_Template","ViewVimsAssetsModalComponent_involve_table_1_involve_row_8_Template","ViewVimsAssetsModalComponent","ViewVimsAssetsModalComponent_involve_table_1_Template","ViewVimsAssetsModalComponent_div_2_Template","CreateVimsModalComponent_div_1_div_3_Template","CreateVimsModalComponent_div_1_involve_error_6_Template","CreateVimsModalComponent_div_1_involve_error_7_Template","sha1Exists","CreateVimsModalComponent","knownGoodVims","isAvailableVimsConfigsLoaded$","isAvailableVimsConfigsLoading$","knownGood","validateSHA1Exists","CreateVimsModalComponent_div_1_Template","CreateVimsModalComponent_div_3_Template","CreateDealerVimsModalComponent","DOut","DealerVimActions","CreateDealerVimsModalComponent_involve_error_9_Template","CreateDealerVimsModalComponent_involve_error_10_Template","RemoveDealerVimsModalComponent","stepName","failureReason","OnboardingEventLogComponent_involve_table_1_involve_cell_12_involve_copy_1_Template","OnboardingEventLogComponent_involve_table_1_involve_cell_12_div_2_Template","getContent","OnboardingEventLogComponent_involve_table_1_involve_header_cell_2_Template","OnboardingEventLogComponent_involve_table_1_involve_cell_3_Template","OnboardingEventLogComponent_involve_table_1_involve_header_cell_5_Template","OnboardingEventLogComponent_involve_table_1_involve_cell_6_Template","OnboardingEventLogComponent_involve_table_1_involve_header_cell_8_Template","OnboardingEventLogComponent_involve_table_1_involve_cell_9_Template","OnboardingEventLogComponent_involve_table_1_involve_header_cell_11_Template","OnboardingEventLogComponent_involve_table_1_involve_cell_12_Template","OnboardingEventLogComponent_involve_table_1_involve_header_cell_14_Template","OnboardingEventLogComponent_involve_table_1_involve_cell_15_Template","OnboardingEventLogComponent_involve_table_1_ng_template_16_Template","OnboardingEventLogComponent_involve_table_1_involve_header_row_17_Template","OnboardingEventLogComponent_involve_table_1_involve_row_18_Template","modalDataSource","modalColumns","OnboardingEventLogComponent","eventLogs","OnboardingEventLogComponent_involve_table_1_Template","OnboardingEventLogComponent_ng_container_3_Template","userLogs$","jsonLog","jsonRequest","jsonResponse","UserLogModalComponent_involve_accordion_group_1_ng_template_7_Template","UserLogModalComponent_involve_accordion_group_1_ng_template_14_Template","UserLogModalComponent_involve_accordion_group_1_ng_template_21_Template","tmp_6_0","tmp_10_0","UserLogModalComponent","UserLogModalComponent_involve_accordion_group_1_Template","UserLogModalComponent_app_spinner_3_Template","DeleteSuppressingAlarmModalComponent","suppressingAlarmName","DeleteSectionModalComponent","sectionName","asset_r2","ddp_r3","CopyDerivedDatapointModalComponent","derivedDataPoints$","isModalListLoading$","fromAsset","copyDatapoint","datapoints$","assets$","assetList","ddp","DerivedEvaluationTypeId","Evaluation","DataPointStatusId","DataPointStatus","IsInvalid","EvaluationItems","copyEvalItems","evalItem","evalItemCopy","handleAssetChange","CopyDerivedDatapointModalComponent_involve_option_9_Template","CopyDerivedDatapointModalComponent_involve_option_16_Template","UnsubscribeAlertScheduleModalComponent","modifiedRuntimeEvent_r1","eventStartDate","eventEndDate","runtimeEventParty","MarineAssetRuntimeEventModifyModalContentComponent","modifiedMarineRuntimeEventsData","MarineAssetRuntimeEventModifyModalContentComponent_ng_container_11_Template","unit_r42","ModalComponent_ng_template_2_div_13_ng_container_1_tr_3_Template","ModalComponent_ng_template_2_div_13_ng_container_1_Template","ModalComponent_ng_template_2_div_13_span_2_Template","handleSecondaryClick","_r48","closeModal","_r50","handleTertiaryClick","tertiaryText","handlePrimaryClick","handleClickActions","_r58","ModalComponent_ng_template_2_div_10_Template","ModalComponent_ng_template_2_div_11_Template","ModalComponent_ng_template_2_div_12_Template","ModalComponent_ng_template_2_div_13_Template","ModalComponent_ng_template_2_div_14_Template","ModalComponent_ng_template_2_div_15_Template","ModalComponent_ng_template_2_div_16_Template","ModalComponent_ng_template_2_div_17_Template","ModalComponent_ng_template_2_div_18_Template","ModalComponent_ng_template_2_div_19_Template","ModalComponent_ng_template_2_div_20_Template","ModalComponent_ng_template_2_div_21_Template","ModalComponent_ng_template_2_div_22_Template","ModalComponent_ng_template_2_div_23_Template","ModalComponent_ng_template_2_div_24_Template","ModalComponent_ng_template_2_div_25_Template","ModalComponent_ng_template_2_div_26_Template","ModalComponent_ng_template_2_div_27_Template","ModalComponent_ng_template_2_div_28_Template","ModalComponent_ng_template_2_div_29_Template","ModalComponent_ng_template_2_div_30_Template","ModalComponent_ng_template_2_div_31_Template","ModalComponent_ng_template_2_div_32_Template","ModalComponent_ng_template_2_div_33_Template","ModalComponent_ng_template_2_div_34_Template","ModalComponent_ng_template_2_div_35_Template","ModalComponent_ng_template_2_div_36_Template","ModalComponent_ng_template_2_div_37_Template","ModalComponent_ng_template_2_div_38_Template","ModalComponent_ng_template_2_div_39_Template","ModalComponent_ng_template_2_div_40_Template","ModalComponent_ng_template_2_app_spinner_41_Template","ModalComponent_ng_template_2_hr_42_Template","ModalComponent_ng_template_2_button_44_Template","ModalComponent_ng_template_2_button_45_Template","ModalComponent_ng_template_2_button_46_Template","ModalComponent_ng_template_2_button_47_Template","ModalComponent","secondaryActionCallback","tertiaryAction","ModalComponent_ng_template_2_Template","privacyPolicy$","EulaComponent_div_0_ng_template_6_iframe_0_Template","privacyPolicy","cookie","EulaComponent_div_0_iframe_4_Template","EulaComponent_div_0_ng_template_6_Template","EulaComponent_div_0_div_9_Template","EulaComponent_div_0_div_10_Template","EulaComponent_div_0_div_11_Template","agree","disagree","checkDisable","EulaComponent","sanitizer","eulaPdf","bypassSecurityTrustResourceUrl","policy","EulaId","numberOfTerms","EulaComponent_div_0_Template","closeMenu","AppComponent_ng_container_0_ng_template_3_ng_container_0_ng_container_1_ng_container_1_ng_container_2_app_global_filter_2_Template","isGlobalFilterOpen$","AppComponent_ng_container_0_ng_template_3_ng_container_0_ng_container_1_ng_container_1_ng_container_2_Template","AppComponent_ng_container_0_ng_template_3_ng_container_0_ng_container_1_ng_container_1_Template","isCoreLoaded$","AppComponent_ng_container_0_ng_template_3_ng_container_0_ng_container_1_Template","isCustomerAndSessionLoaded$","AppComponent_ng_container_0_ng_template_3_ng_container_0_Template","isAuthenticated$","AppComponent_ng_container_0_ng_template_7_ng_container_0_app_no_access_2_Template","hasUserSessionError$","AppComponent_ng_container_0_ng_template_7_ng_container_0_Template","AppComponent_ng_container_0_ng_container_1_Template","AppComponent_ng_container_0_ng_template_3_Template","AppComponent_ng_container_0_ng_template_5_Template","AppComponent_ng_container_0_ng_template_7_Template","AppComponent_ng_container_0_ng_template_9_Template","AppComponent_ng_container_0_ng_template_11_Template","AppComponent_ng_container_0_ng_template_13_Template","AppComponent","titleService","token$","isEulaLoading$","isAuthenticating$","setTitle","isCustomersLoaded$","isCustomersLoading$","isUserSessionLoaded$","isUserSessionLoading$","isCustomerLoaded","isUserSessionLoaded","isCoreLoading$","isCustomersLoading","isUserSettingsLoading","isCoreLoading","isAnyMenuOpen$","isSitemapOpen$","isFavoritesOpen$","themeLoaded$","millisecondsToDispatch","gaDecodeToken","jwt","pushToDatalayer","sha256","_x","_sha","hashBuffer","crypto","subtle","digest","Buffer","Uint8Array","padStart","isStringDefined","str","prototype","claims","fragment","AffiliationOrgCode","catafltnorgcode","AffiliationOrgName","ucid","HEM","email_address","loginID","catloginid","catRecId","catrecid","affClass","catafltnclass","affCode","catafltncode","B2CdealerCode","topLvlOrgCode","cattoplevelorgcode","B2CObjectID","aud","B2CUserType","tn","OneTrustLoadedCheck","dispatchEvent","AppComponent_ng_container_0_Template","JobTitleEffects","DeleteJobTitle$","ReplaceJobTitle$","SaveJobTitle$","FavoritesService","loadFavorites","createFavorites","favoritesObj","deleteFavorite","setFavoriteAsHome","createHomePage","FavoritesEffects","_favoritesService","userData","CreateFavorites$","DeleteFavorites$","ToggleSetHome$","CreateHomePage$","UserSearchEffects","onInitialLoad$","userSearchActions","onSearch$","onSaveUser$","UserDrawerEffects","onDrawerSelect$","onDrawerClose$","onAlarmGroupSaveSuccess$","onAlarmGroupSaveFail$","onAlarmGroupDeleteSuccess$","onAlarmGroupDeleteFail$","FeatureAccessEffect","LoadUserDashboards$","SetEditedUser$","loadedIds","LoadUserAccess$","ReloadDashboard$","ResetUserAccess$","SaveUserAccess$","ToggleAllDashboards$","allAvailableDashboards","ToggleAllTiles$","RemoveTiles$","currentDashboards","currentTiles","toggleTiles","toggleTile","existingTile","UserPreferencesEffect","userPrefSvc","appSettingsSvc","loadColorTheme$","themes","updateColorThemeAfterLoadUserSuccess$","pluck","updateColorThemeAfterColorThemeChange$","loadAssetNamePreference$","namePreference","UnitAccessEffects","_unitAccessService","selectedUserId$","selectedUserGroupId$","perpetualSitemapGroups$","selectedAssets$","hasFullAccess$","onUserFleetLoad$","onUserFleetSave$","PerpetualAccess","PerpetualAssetAccess","AssetNotificationRecipientEffects","_assetNotificationRecipientService","onDelete$","fromUsers","onDeleteAll$","onDeleteSuccess$","onDeleteAllSuccess$","userUIReducer","UserUIActions","createUser","_userOnboardService","search$","filteredGroups","refresh$","intialLoad$","sitemapSearch$","searchRfvUsers$","rfvUsers","searchCwsUsers$","cwsUsers","linkExistingCwsUser$","linkExistingCwsUserFail$","createRfvUser$","createRfvUserSuccess$","createRfvUserFail$","resendWelcomeEmail$","resendWelcomeEmailSuccess$","resendWelcomeEmailFail$","copyUserPermissions$","any","addCustomerAccess$","addCustomerAccessFail$","UserUIStoreModule","UserStoreModule","ReportEffects","LoadScheduleReportDetails$","ReportSchedulesActionTypes","scheduleDetails","LoadScheduleReportSettingId$","LoadReportTypes$","LoadReportElements$","LoadReportTimeZone$","LoadDateRange$","LoadreportHistory","createdReportData","LoadReportHistorySuccess$","LoadFileTypes$","LoadReportSchedules$","LoadReportSchedulesSuccess$","LoadUserReportSchedules$","GenerateReport$","requestData","createdReportRequest","handleRunReportResponse","RetryGenerateReport$","DeleteScheduleTimeReport$","DeleteScheduleReport$","UpdateBulkScheduleReport$","GenerateScheduleReport$","reportScheduleList","RunScheduledReport$","createdReport","ReportHistoryActionTypes","GenerateReportSuccess$","ReportStoreModule","AppModule","bootstrap","Title","APP_INITIALIZER","OverlayContainer","FullscreenOverlayContainer","BrowserModule","BrowserAnimationsModule","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","Queue","require","precision","minX","minY","maxX","maxY","cellSize","degeneratePoleOfInaccessibility","cellQueue","compareMax","Cell","bestCell","getCentroidCell","area","bboxCell","numProbes","poleOfInaccessibility","pointToPolygonDist","inside","minDistSq","ring","getSegDistSq","SQRT2","px","py","dx","dy","exports","webpackContext","webpackContextResolve"],"sourceRoot":"webpack:///","sources":["./src/app/modules/core/components/banner/banner.component.html","./src/app/modules/core/components/banner/banner.component.ts","./src/app/modules/core/components/breadcrumb-toolbar/breadcrumb-toolbar.component.html","./src/app/modules/core/components/breadcrumb-toolbar/breadcrumb-toolbar.component.ts","./src/app/modules/core/components/customer-access/customer-access.component.html","./src/app/modules/core/components/customer-access/customer-access.component.ts","./src/app/modules/core/components/footer/footer.component.html","./src/app/modules/core/components/footer/footer.component.ts","./src/app/modules/core/components/header/header.component.html","./src/app/modules/core/components/header/header.component.ts","./src/app/modules/core/components/home/home.component.html","./src/app/modules/core/components/home/home.component.ts","./src/app/modules/core/components/no-access/no-access.component.ts","./src/app/modules/core/components/no-access/no-access.component.html","./src/app/modules/core/components/offline/offline.component.ts","./src/app/modules/core/components/offline/offline.component.html","./src/app/modules/core/components/page404/page404.component.ts","./src/app/modules/core/components/page404/page404.component.html","./src/app/modules/core/store/core-store.module.ts","./src/app/modules/support/store/support-store.module.ts","./src/app/modules/global-filter/global-filter.service.ts","./src/app/modules/global-filter/effects/global-filter.effect.ts","./src/app/modules/global-filter/global-filter.module.ts","./src/app/modules/core/interceptors/auth.interceptor.ts","./src/app/modules/core/interceptors/customer.interceptor.ts","./src/app/modules/core/interceptors/global-filter.interceptor.ts","./src/app/modules/core/interceptors/timezone-offset.interceptor.ts","./src/app/modules/core/interceptors/response.interceptor.ts","./src/app/modules/core/interceptors/request.interceptor.ts","./src/app/modules/core/interceptors/index.ts","./src/app/modules/core/interceptors/cache.interceptor.ts","./src/app/modules/dashboard/modules/unit-alarm-history/services/unit-alarm-history.service.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/effects/unit-alarm-history.effects.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/unit-alarm-history-store.module.ts","./src/app/modules/core/core.module.ts","./src/app/modules/core/enums/dashboards.ts","./src/app/modules/core/enums/alarm-states.ts","./src/app/modules/core/enums/industry.ts","./src/app/modules/core/enums/tiles.ts","./src/app/modules/core/enums/user-status-ids.ts","./src/app/modules/core/guards/asset-exists.guard.ts","./src/app/modules/core/guards/auth.guard.ts","./src/app/modules/core/guards/dashboard-exists.guard.ts","./src/app/modules/core/guards/sitemap-group-exists.guard.ts","./src/app/modules/core/guards/fullscreen-access.guard.ts","./src/app/modules/core/models/telemetry-event.ts","./src/app/modules/core/models/notifications.ts","./src/app/modules/core/services/app-settings.service.ts","./src/app/modules/core/services/asset.service.ts","./src/app/modules/core/services/datapoints.service.ts","./src/app/modules/core/services/aggregate-alarm-history.service.ts","./src/app/modules/core/services/alarm-group.service.ts","./src/app/modules/core/services/alarm-state.service.ts","./src/app/modules/core/services/alarm-test.service.ts","./src/app/modules/core/services/alert-schedule.service.ts","./src/app/modules/core/services/application.service.ts","./src/app/modules/core/services/asset-type.service.ts","./src/app/modules/core/services/auth.service.ts","./src/app/modules/core/services/cellular-provider.service.ts","./src/app/modules/core/services/comm-loss-type.service.ts","./src/app/modules/core/services/comm-loss.service.ts","./src/app/modules/core/services/company.service.ts","./src/app/modules/core/services/controls-admin.service.ts","./src/app/modules/core/services/country.service.ts","./src/app/modules/core/services/customer.service.ts","./src/app/modules/dashboard/lookups/tile-actions.ts","./src/app/modules/core/services/dashboard.service.ts","./src/app/modules/core/services/dealer.service.ts","./src/app/modules/core/services/derived-data-points.service.ts","./src/app/modules/core/services/device-search-result.service.ts","./src/app/modules/core/services/emo.service.ts","./src/app/modules/core/services/feature-access.service.ts","./src/app/modules/core/services/FleetVitals.service.ts","./src/app/modules/core/services/gauge-type.service.ts","./src/app/modules/core/services/geofence.service.ts","./src/app/modules/core/services/global-color.service.ts","./src/app/modules/core/services/global-timezone.service.ts","./src/app/modules/core/services/icon.service.ts","./src/app/modules/core/services/industry.service.ts","./src/app/modules/core/services/location.service.ts","./src/app/modules/core/services/machine-info.service.ts","./src/app/modules/core/services/notification-type.service.ts","./src/app/modules/core/services/onboarding-queue.service.ts","./src/app/modules/core/services/platformServiceSettings.service.ts","./src/app/modules/core/services/raw-data.service.ts","./src/app/modules/core/services/report-schedules.service.ts","./src/app/modules/core/services/sitemap-group.service.ts","./src/app/modules/core/services/support.service.ts","./src/app/modules/core/services/system-status.service.ts","./src/app/modules/core/services/tile.service.ts","./src/app/modules/core/services/time-interval-dropdown-service.ts","./src/app/modules/core/services/tool-tip.service.ts","./src/app/modules/core/services/trip-reports.service.ts","./src/app/modules/core/services/unit-control.service.ts","./src/app/modules/core/services/unit-info.service.ts","./src/app/modules/core/services/unit-state.service.ts","./src/app/modules/core/services/units-of-measure.service.ts","./src/app/modules/core/services/user-access-filter.service.ts","./src/app/modules/core/services/user-group.service.ts","./src/app/modules/core/services/user-service.ts","./src/app/modules/core/services/utilization.service.ts","./src/app/modules/core/services/user-alert-recipient.service.ts","./src/app/modules/core/services/user-global-filter-data-point-group.service.ts","./src/app/modules/core/services/dealerVim.service.ts","./src/app/modules/core/services/units-of-measure-conversions.service.ts","./src/app/modules/core/services/device-command.service.ts","./src/app/modules/core/services/asset-notification-recipient.service.ts","./src/app/modules/core/services/job-title.service.ts","./src/app/modules/core/services/onetrust.service.ts","./src/app/modules/core/services/serial-number-service.ts","./src/app/modules/core/services/streaming-template.service.ts","./src/app/modules/core/services/unit-access.service.ts","./src/app/modules/core/services/user-notification-settings.service.ts","./src/app/modules/core/services/user-onboard.service.ts","./src/app/modules/core/services/user-preferences.service.ts","./src/app/modules/core/services/vim.service.ts","./src/app/modules/core/store/actions.ts","./src/app/modules/core/store/aggregate-Alarm-History/actions.ts","./src/app/modules/core/store/aggregate-Alarm-History/effects.ts","./src/app/modules/core/store/aggregate-Alarm-History/state.ts","./src/app/modules/core/store/aggregate-Alarm-History/reducer.ts","./src/app/modules/core/store/aggregate-Alarm-History/selectors.ts","./src/app/modules/core/store/aggregate-fleet-vitals/actions.ts","./src/app/modules/core/store/aggregate-fleet-vitals/effects.ts","./src/app/modules/core/store/aggregate-fleet-vitals/state.ts","./src/app/modules/core/store/aggregate-fleet-vitals/reducer.ts","./src/app/modules/core/store/aggregate-fleet-vitals/selectors.ts","./src/app/modules/core/store/aggregate-runtime/actions.ts","./src/app/modules/core/services/aggregate-runtime-api.service.ts","./src/app/modules/core/store/aggregate-runtime/effects.ts","./src/app/modules/core/store/aggregate-runtime/reducer.ts","./src/app/modules/core/store/aggregate-runtime/selectors.ts","./src/app/modules/core/store/aggregate-runtime/state.ts","./src/app/modules/core/store/alarm-groups/actions.ts","./src/app/modules/core/store/alarm-groups/effects.ts","./src/app/modules/core/store/alarm-groups/state.ts","./src/app/modules/core/store/alarm-groups/reducer.ts","./src/app/modules/core/store/alarm-groups/selectors.ts","./src/app/modules/core/store/alarm-states/actions.ts","./src/app/modules/core/store/alarm-states/effects.ts","./src/app/modules/core/store/alarm-states/state.ts","./src/app/modules/core/store/alarm-states/reducer.ts","./src/app/modules/core/store/alarm-states/selectors.ts","./src/app/modules/core/store/alarm-suppression/actions.ts","./src/app/modules/core/store/alarm-suppression/effects.ts","./src/app/modules/core/store/alarm-suppression/state.ts","./src/app/modules/core/store/alarm-suppression/reducer.ts","./src/app/modules/core/store/alarm-suppression/selectors.ts","./src/app/modules/core/store/alarm-tests/actions.ts","./src/app/modules/core/store/alarm-tests/effects.ts","./src/app/modules/core/store/alarm-tests/state.ts","./src/app/modules/core/store/alarm-tests/reducer.ts","./src/app/modules/core/store/alarm-tests/selectors.ts","./src/app/modules/core/store/alarm-types/actions.ts","./src/app/modules/core/store/alarm-types/effects.ts","./src/app/modules/core/store/alarm-types/state.ts","./src/app/modules/core/store/alarm-types/reducer.ts","./src/app/modules/core/store/alarm-types/selectors.ts","./src/app/modules/core/store/alert-schedules-times/actions.ts","./src/app/modules/core/store/alert-schedules-times/effects.ts","./src/app/modules/core/store/alert-schedules-times/state.ts","./src/app/modules/core/store/alert-schedules-times/reducer.ts","./src/app/modules/core/store/alert-schedules-times/selectors.ts","./src/app/modules/core/store/alert-schedules/actions.ts","./src/app/modules/core/store/alert-schedules/effects.ts","./src/app/modules/core/store/alert-schedules/state.ts","./src/app/modules/core/store/alert-schedules/reducer.ts","./src/app/modules/core/store/alert-schedules/selectors.ts","./src/app/modules/core/store/applications/actions.ts","./src/app/modules/core/store/applications/effects.ts","./src/app/modules/core/store/applications/state.ts","./src/app/modules/core/store/applications/reducer.ts","./src/app/modules/core/store/applications/selectors.ts","./src/app/modules/core/store/assetTypes/actions.ts","./src/app/modules/core/store/assetTypes/effects.ts","./src/app/modules/core/store/assetTypes/reducer.ts","./src/app/modules/core/store/assetTypes/selectors.ts","./src/app/modules/core/store/assetTypes/state.ts","./src/app/modules/core/store/assets/datapoint-drawer/actions.ts","./src/app/modules/core/store/assets/datapoint-drawer/reducer.ts","./src/app/modules/core/store/assets/datapoint-drawer/state.ts","./src/app/modules/core/store/assets/datapoint-drawer/selectors.ts","./src/app/modules/core/store/assets/datapoint-legends/selectors.ts","./src/app/modules/core/store/assets/display-property/actions.ts","./src/app/modules/core/store/assets/display-property/state.ts","./src/app/modules/core/store/assets/display-property/reducer.ts","./src/app/modules/core/store/assets/display-property/selectors.ts","./src/app/modules/core/store/assets/entities/actions.ts","./src/app/modules/core/store/assets/entities/reducer.ts","./src/app/modules/core/store/assets/entities/selectors.ts","./src/app/modules/core/store/assets/entities/state.ts","./src/app/modules/core/store/assets/alarms/actions.ts","./src/app/modules/core/store/assets/alarms/state.ts","./src/app/modules/core/store/assets/alarms/reducer.ts","./src/app/modules/core/store/assets/alarms/selectors.ts","./src/app/modules/core/store/assets/alarm-group-alert-schedule-recipients/actions.ts","./src/app/modules/core/store/assets/alarm-group-alert-schedule-recipients/state.ts","./src/app/modules/core/store/assets/alarm-group-alert-schedule-recipients/reducer.ts","./src/app/modules/core/store/assets/alarm-group-alert-schedule-recipients/selectors.ts","./src/app/modules/core/store/assets/alarm-history-counts/actions.ts","./src/app/modules/core/store/assets/alarm-history-counts/state.ts","./src/app/modules/core/store/assets/alarm-history-counts/reducer.ts","./src/app/modules/core/store/assets/alarm-history-counts/selectors.ts","./src/app/modules/core/store/assets/alert-history-recipient-count/actions.ts","./src/app/modules/core/store/assets/alert-history-recipient-count/state.ts","./src/app/modules/core/store/assets/alert-history-recipient-count/reducer.ts","./src/app/modules/core/store/assets/alert-history-recipient-count/selectors.ts","./src/app/modules/core/store/assets/datapoint-legends/actions.ts","./src/app/modules/core/store/assets/datapoint-legends/state.ts","./src/app/modules/core/store/assets/datapoint-legends/reducer.ts","./src/app/modules/core/store/assets/datapoint-historical/actions.ts","./src/app/modules/core/store/assets/datapoint-historical/state.ts","./src/app/modules/core/store/assets/datapoint-historical/reducer.ts","./src/app/modules/core/store/assets/datapoint-historical/selectors.ts","./src/app/modules/core/store/assets/datapoint-settings/actions.ts","./src/app/modules/core/store/assets/datapoint-settings/state.ts","./src/app/modules/core/store/assets/datapoint-settings/reducer.ts","./src/app/modules/core/store/assets/datapoint-settings/selectors.ts","./src/app/modules/core/store/assets/datapoint-values/actions.ts","./src/app/modules/core/store/assets/datapoint-values/state.ts","./src/app/modules/core/store/assets/datapoint-values/reducer.ts","./src/app/modules/core/store/assets/datapoint-values/selectors.ts","./src/app/modules/core/store/assets/events-diagnostics/actions.ts","./src/app/modules/core/store/assets/events-diagnostics/state.ts","./src/app/modules/core/store/assets/events-diagnostics/reducer.ts","./src/app/modules/core/store/assets/events-diagnostics/selectors.ts","./src/app/modules/core/store/assets/machine-info/actions.ts","./src/app/modules/core/store/assets/machine-info/state.ts","./src/app/modules/core/store/assets/machine-info/reducer.ts","./src/app/modules/core/store/assets/machine-info/selectors.ts","./src/app/modules/core/store/assets/raw-data/actions.ts","./src/app/modules/core/store/assets/raw-data/state.ts","./src/app/modules/core/store/assets/raw-data/reducer.ts","./src/app/modules/core/store/assets/raw-data/selectors.ts","./src/app/modules/core/store/assets/status/actions.ts","./src/app/modules/core/store/assets/status/state.ts","./src/app/modules/core/store/assets/status/reducer.ts","./src/app/modules/core/store/assets/unit-info/actions.ts","./src/app/modules/core/store/assets/unit-info/state.ts","./src/app/modules/core/store/assets/unit-info/reducer.ts","./src/app/modules/core/store/assets/unit-info/selectors.ts","./src/app/modules/core/store/assets/utilization/actions.ts","./src/app/modules/core/store/assets/utilization/state.ts","./src/app/modules/core/store/assets/utilization/reducer.ts","./src/app/modules/core/store/assets/utilization/selectors.ts","./src/app/modules/core/store/assets/global-filter-asset-ids/actions.ts","./src/app/modules/core/store/assets/global-filter-asset-ids/state.ts","./src/app/modules/core/store/assets/global-filter-asset-ids/reducer.ts","./src/app/modules/core/store/assets/global-filter-asset-ids/selectors.ts","./src/app/modules/core/store/assets/device-info/actions.ts","./src/app/modules/core/store/assets/device-info/state.ts","./src/app/modules/core/store/assets/device-info/reducer.ts","./src/app/modules/core/store/assets/device-info/selectors.ts","./src/app/modules/core/store/assets/asset-move/actions.ts","./src/app/modules/core/store/assets/asset-move/state.ts","./src/app/modules/core/store/assets/asset-move/reducer.ts","./src/app/modules/core/store/assets/asset-move/selectors.ts","./src/app/modules/core/store/assets/effects.ts","./src/app/modules/core/store/assets/reducer.ts","./src/app/modules/core/store/assets/selectors.ts","./src/app/modules/core/store/assets/status/selectors.ts","./src/app/modules/core/store/auth/actions.ts","./src/app/modules/core/store/auth/effects.ts","./src/app/modules/core/store/auth/state.ts","./src/app/modules/core/store/auth/reducer.ts","./src/app/modules/core/store/auth/selectors.ts","./src/app/modules/core/store/brands/actions.ts","./src/app/modules/core/services/brand.service.ts","./src/app/modules/core/store/brands/effects.ts","./src/app/modules/core/store/brands/state.ts","./src/app/modules/core/store/brands/reducer.ts","./src/app/modules/core/store/brands/selectors.ts","./src/app/modules/core/store/cellular-providers/actions.ts","./src/app/modules/core/store/cellular-providers/effects.ts","./src/app/modules/core/store/cellular-providers/state.ts","./src/app/modules/core/store/cellular-providers/reducer.ts","./src/app/modules/core/store/cellular-providers/selectors.ts","./src/app/modules/core/store/comm-loss-types/actions.ts","./src/app/modules/core/store/comm-loss-types/effects.ts","./src/app/modules/core/store/comm-loss-types/state.ts","./src/app/modules/core/store/comm-loss-types/reducer.ts","./src/app/modules/core/store/comm-loss-types/selectors.ts","./src/app/modules/core/store/comm-loss/actions.ts","./src/app/modules/dashboard/modules/admin-comms-loss/admin-comms-loss-fullscreen/comm-loss-banner-messages.ts","./src/app/modules/core/store/comm-loss/effects.ts","./src/app/modules/core/store/comm-loss/state.ts","./src/app/modules/core/store/comm-loss/reducer.ts","./src/app/modules/core/store/comm-loss/selectors.ts","./src/app/modules/core/store/companies/actions.ts","./src/app/modules/core/store/companies/effects.ts","./src/app/modules/core/store/companies/state.ts","./src/app/modules/core/store/companies/reducer.ts","./src/app/modules/core/store/companies/selectors.ts","./src/app/modules/core/store/control-admin/actions.ts","./src/app/modules/core/store/control-admin/effects.ts","./src/app/modules/core/store/control-admin/state.ts","./src/app/modules/core/store/control-admin/reducer.ts","./src/app/modules/core/store/control-admin/selectors.ts","./src/app/modules/core/store/control-history/actions.ts","./src/app/modules/core/store/control-history/state.ts","./src/app/modules/core/store/control-history/selectors.ts","./src/app/modules/core/store/control-history/effects.ts","./src/app/modules/core/store/control-history/reducer.ts","./src/app/modules/core/store/countries/actions.ts","./src/app/modules/core/store/countries/effects.ts","./src/app/modules/core/store/countries/state.ts","./src/app/modules/core/store/countries/reducer.ts","./src/app/modules/core/store/countries/selectors.ts","./src/app/modules/core/store/customer-user-access-filters/actions.ts","./src/app/modules/core/store/customer-user-access-filters/effects.ts","./src/app/modules/core/store/customer-user-access-filters/state.ts","./src/app/modules/core/store/customer-user-access-filters/reducer.ts","./src/app/modules/core/store/customer-user-access-filters/selectors.ts","./src/app/modules/core/store/customers/actions.ts","./src/app/modules/core/store/customers/effects.ts","./src/app/modules/core/store/customers/state.ts","./src/app/modules/core/store/customers/reducer.ts","./src/app/modules/core/store/customers/selectors.ts","./src/app/modules/core/store/dashboards/actions.ts","./src/app/modules/core/store/dashboards/effects.ts","./src/app/modules/core/store/dashboards/state.ts","./src/app/modules/core/store/dashboards/reducer.ts","./src/app/modules/core/store/dashboards/selectors.ts","./src/app/modules/core/store/datapoints/display-groups/actions.ts","./src/app/modules/core/store/datapoints/display-groups/state.ts","./src/app/modules/core/store/datapoints/display-groups/reducer.ts","./src/app/modules/core/store/datapoints/selectors.ts","./src/app/modules/core/store/datapoints/display-groups/selectors.ts","./src/app/modules/core/store/datapoints/identifiers/actions.ts","./src/app/modules/core/store/datapoints/identifiers/state.ts","./src/app/modules/core/store/datapoints/identifiers/reducer.ts","./src/app/modules/core/store/datapoints/identifiers/selectors.ts","./src/app/modules/core/store/datapoints/defaults/actions.ts","./src/app/modules/core/store/datapoints/defaults/state.ts","./src/app/modules/core/store/datapoints/defaults/reducer.ts","./src/app/modules/core/store/datapoints/defaults/selectors.ts","./src/app/modules/core/store/datapoints/status/actions.ts","./src/app/modules/core/store/datapoints/status/state.ts","./src/app/modules/core/store/datapoints/status/reducer.ts","./src/app/modules/core/store/datapoints/status/selectors.ts","./src/app/modules/core/store/datapoints/effects.ts","./src/app/modules/core/store/datapoints/reducer.ts","./src/app/modules/core/store/dealerVim/actions.ts","./src/app/modules/core/store/dealerVim/effects.ts","./src/app/modules/core/store/dealerVim/state.ts","./src/app/modules/core/store/dealerVim/reducer.ts","./src/app/modules/core/store/dealerVim/selectors.ts","./src/app/modules/core/store/dealers/actions.ts","./src/app/modules/core/store/dealers/effects.ts","./src/app/modules/core/store/dealers/state.ts","./src/app/modules/core/store/dealers/reducer.ts","./src/app/modules/core/store/dealers/selectors.ts","./src/app/modules/core/store/derived-data-points/evaluation-items/actions.ts","./src/app/modules/core/store/derived-data-points/evaluation-items/state.ts","./src/app/modules/core/store/derived-data-points/evaluation-items/reducer.ts","./src/app/modules/core/store/derived-data-points/selectors.ts","./src/app/modules/core/store/derived-data-points/evaluation-items/selectors.ts","./src/app/modules/core/store/derived-data-points/evaluation-types/actions.ts","./src/app/modules/core/store/derived-data-points/evaluation-types/state.ts","./src/app/modules/core/store/derived-data-points/evaluation-types/reducer.ts","./src/app/modules/core/store/derived-data-points/evaluation-types/selectors.ts","./src/app/modules/core/store/derived-data-points/item-types/actions.ts","./src/app/modules/core/store/derived-data-points/item-types/state.ts","./src/app/modules/core/store/derived-data-points/item-types/reducer.ts","./src/app/modules/core/store/derived-data-points/item-types/selectors.ts","./src/app/modules/core/store/derived-data-points/legend-items/actions.ts","./src/app/modules/core/store/derived-data-points/legend-items/state.ts","./src/app/modules/core/store/derived-data-points/legend-items/reducer.ts","./src/app/modules/core/store/derived-data-points/legend-items/selectors.ts","./src/app/modules/core/store/derived-data-points/effects.ts","./src/app/modules/core/store/derived-data-points/reducer.ts","./src/app/modules/core/store/device-commands/actions.ts","./src/app/modules/core/store/device-commands/state.ts","./src/app/modules/core/store/device-commands/reducer.ts","./src/app/modules/core/store/device-commands/selectors.ts","./src/app/modules/core/store/device-commands/effects.ts","./src/app/modules/core/store/device-search-results/actions.ts","./src/app/modules/core/store/device-search-results/effects.ts","./src/app/modules/core/store/device-search-results/state.ts","./src/app/modules/core/store/device-search-results/reducer.ts","./src/app/modules/core/store/device-search-results/selectors.ts","./src/app/modules/core/store/ecm-serial-number-suffix/actions.ts","./src/app/modules/core/store/ecm-serial-number-suffix/effects.ts","./src/app/modules/core/store/ecm-serial-number-suffix/state.ts","./src/app/modules/core/store/ecm-serial-number-suffix/reducer.ts","./src/app/modules/core/store/ecm-serial-number-suffix/selectors.ts","./src/app/modules/core/store/effects.ts","./src/app/modules/core/store/emo/actions.ts","./src/app/modules/core/store/emo/effects.ts","./src/app/modules/core/store/emo/state.ts","./src/app/modules/core/store/emo/reducer.ts","./src/app/modules/core/store/emo/selectors.ts","./src/app/modules/core/store/event-code/actions.ts","./src/app/modules/core/services/event-codes.service.ts","./src/app/modules/core/store/event-code/effects.ts","./src/app/modules/core/store/event-code/state.ts","./src/app/modules/core/store/event-code/reducer.ts","./src/app/modules/core/store/event-code/selectors.ts","./src/app/modules/core/store/event-parties/actions.ts","./src/app/modules/core/services/event-parties.service.ts","./src/app/modules/core/store/event-parties/effects.ts","./src/app/modules/core/store/event-parties/reducer.ts","./src/app/modules/core/store/event-parties/selectors.ts","./src/app/modules/core/store/event-parties/state.ts","./src/app/modules/core/store/feature-access/dashboards/actions.ts","./src/app/modules/core/store/feature-access/dashboards/state.ts","./src/app/modules/core/store/feature-access/dashboards/reducer.ts","./src/app/modules/core/store/feature-access/selectors.ts","./src/app/modules/core/store/feature-access/dashboards/selectors.ts","./src/app/modules/core/store/feature-access/effects.ts","./src/app/modules/core/store/feature-access/reducer.ts","./src/app/modules/core/store/fleet-vitals/actions.ts","./src/app/modules/core/store/fleet-vitals/effects.ts","./src/app/modules/core/store/fleet-vitals/state.ts","./src/app/modules/core/store/fleet-vitals/reducer.ts","./src/app/modules/core/store/fleet-vitals/selectors.ts","./src/app/modules/core/store/gauge-types/actions.ts","./src/app/modules/core/store/gauge-types/effects.ts","./src/app/modules/core/store/gauge-types/state.ts","./src/app/modules/core/store/gauge-types/reducer.ts","./src/app/modules/core/store/gauge-types/selectors.ts","./src/app/modules/core/store/geofences/actions.ts","./src/app/modules/core/store/geofences/effects.ts","./src/app/modules/core/store/geofences/state.ts","./src/app/modules/core/store/geofences/reducer.ts","./src/app/modules/core/store/geofences/selectors.ts","./src/app/modules/core/store/global-colors/actions.ts","./src/app/modules/core/store/global-colors/effects.ts","./src/app/modules/core/store/global-colors/state.ts","./src/app/modules/core/store/global-colors/reducer.ts","./src/app/modules/core/store/global-colors/selectors.ts","./src/app/modules/core/store/global-job-titles/actions.ts","./src/app/modules/core/store/global-job-titles/effects.ts","./src/app/modules/core/store/global-job-titles/state.ts","./src/app/modules/core/store/global-job-titles/reducer.ts","./src/app/modules/core/store/global-job-titles/selectors.ts","./src/app/modules/core/store/global-timezones/actions.ts","./src/app/modules/core/store/global-timezones/effects.ts","./src/app/modules/core/store/global-timezones/state.ts","./src/app/modules/core/store/global-timezones/reducer.ts","./src/app/modules/core/store/global-timezones/selectors.ts","./src/app/modules/core/store/gps-config/actions.ts","./src/app/modules/core/store/gps-config/effects.ts","./src/app/modules/core/store/gps-config/state.ts","./src/app/modules/core/store/gps-config/reducer.ts","./src/app/modules/core/store/gps-config/selectors.ts","./src/app/modules/core/store/icons/actions.ts","./src/app/modules/core/store/icons/effects.ts","./src/app/modules/core/store/icons/state.ts","./src/app/modules/core/store/icons/reducer.ts","./src/app/modules/core/store/icons/selectors.ts","./src/app/modules/core/store/industries/actions.ts","./src/app/modules/core/store/industries/effects.ts","./src/app/modules/core/store/industries/state.ts","./src/app/modules/core/store/industries/reducer.ts","./src/app/modules/core/store/industries/selectors.ts","./src/app/modules/core/store/location/actions.ts","./src/app/modules/core/store/location/effects.ts","./src/app/modules/core/store/location/state.ts","./src/app/modules/core/store/location/reducer.ts","./src/app/modules/core/store/location/selectors.ts","./src/app/modules/core/store/notification-types/actions.ts","./src/app/modules/core/store/notification-types/effects.ts","./src/app/modules/core/store/notification-types/state.ts","./src/app/modules/core/store/notification-types/reducer.ts","./src/app/modules/core/store/notification-types/selectors.ts","./src/app/modules/core/store/notifications/actions.ts","./src/app/modules/core/store/notifications/reducer.ts","./src/app/modules/core/store/notifications/selectors.ts","./src/app/modules/core/store/notifications/state.ts","./src/app/modules/core/store/onboarding-event-logs/actions.ts","./src/app/modules/core/store/onboarding-event-logs/effects.ts","./src/app/modules/core/store/onboarding-event-logs/state.ts","./src/app/modules/core/store/onboarding-event-logs/reducer.ts","./src/app/modules/core/store/onboarding-event-logs/selectors.ts","./src/app/modules/core/store/onboarding-queue/actions.ts","./src/app/modules/core/store/onboarding-queue/effects.ts","./src/app/modules/core/store/onboarding-queue/state.ts","./src/app/modules/core/store/onboarding-queue/reducer.ts","./src/app/modules/core/store/onboarding-queue/selectors.ts","./src/app/modules/core/store/platformServiceSettings/actions.ts","./src/app/modules/core/store/platformServiceSettings/effects.ts","./src/app/modules/core/store/platformServiceSettings/state.ts","./src/app/modules/core/store/platformServiceSettings/reducer.ts","./src/app/modules/core/store/platformServiceSettings/selectors.ts","./src/app/modules/core/store/reducers.ts","./src/app/modules/core/store/reports/actions.ts","./src/app/modules/core/store/reports/effects.ts","./src/app/modules/core/store/reports/state.ts","./src/app/modules/core/store/reports/reducer.ts","./src/app/modules/core/store/reports/selectors.ts","./src/app/modules/core/store/selectors.ts","./src/app/modules/core/store/serial-number-prefix/actions.ts","./src/app/modules/core/store/serial-number-prefix/effects.ts","./src/app/modules/core/store/serial-number-prefix/state.ts","./src/app/modules/core/store/serial-number-prefix/reducer.ts","./src/app/modules/core/store/serial-number-prefix/selectors.ts","./src/app/modules/core/store/sitemap-groups/actions.ts","./src/app/modules/core/store/sitemap-groups/alarm-counts/actions.ts","./src/app/modules/core/store/sitemap-groups/alarm-counts/state.ts","./src/app/modules/core/store/sitemap-groups/alarm-counts/reducer.ts","./src/app/modules/core/store/sitemap-groups/alarm-counts/selectors.ts","./src/app/modules/core/store/sitemap-groups/alarms/actions.ts","./src/app/modules/core/store/sitemap-groups/alarms/state.ts","./src/app/modules/core/store/sitemap-groups/alarms/reducer.ts","./src/app/modules/core/store/sitemap-groups/alarms/selectors.ts","./src/app/modules/core/store/sitemap-groups/datapoint-settings/actions.ts","./src/app/modules/core/store/sitemap-groups/datapoint-settings/state.ts","./src/app/modules/core/store/sitemap-groups/datapoint-settings/reducer.ts","./src/app/modules/core/store/sitemap-groups/datapoint-settings/selectors.ts","./src/app/modules/core/store/sitemap-groups/datapoint-values/actions.ts","./src/app/modules/core/store/sitemap-groups/datapoint-values/state.ts","./src/app/modules/core/store/sitemap-groups/datapoint-values/reducer.ts","./src/app/modules/core/store/sitemap-groups/datapoint-values/selectors.ts","./src/app/modules/core/store/sitemap-groups/status/actions.ts","./src/app/modules/core/store/sitemap-groups/status/state.ts","./src/app/modules/core/store/sitemap-groups/status/reducer.ts","./src/app/modules/core/store/sitemap-groups/status/selectors.ts","./src/app/modules/core/store/sitemap-groups/utilization/actions.ts","./src/app/modules/core/store/sitemap-groups/utilization/state.ts","./src/app/modules/core/store/sitemap-groups/utilization/reducer.ts","./src/app/modules/core/store/sitemap-groups/utilization/selectors.ts","./src/app/modules/core/store/sitemap-groups/effects.ts","./src/app/modules/core/store/sitemap-groups/reducer.ts","./src/app/modules/core/store/sitemap-groups/selectors.ts","./src/app/modules/core/store/sitemap-groups/state.ts","./src/app/modules/core/store/state.ts","./src/app/modules/core/store/streaming-template-config/actions.ts","./src/app/modules/core/store/streaming-template-config/effects.ts","./src/app/modules/core/store/streaming-template-config/state.ts","./src/app/modules/core/store/streaming-template-config/reducer.ts","./src/app/modules/core/store/streaming-template-config/selectors.ts","./src/app/modules/core/store/streaming-template/actions.ts","./src/app/modules/core/store/streaming-template/effects.ts","./src/app/modules/core/store/streaming-template/state.ts","./src/app/modules/core/store/streaming-template/reducer.ts","./src/app/modules/core/store/streaming-template/selectors.ts","./src/app/modules/core/store/support/datapoint-occurrences/actions.ts","./src/app/modules/core/store/support/datapoint-occurrences/state.ts","./src/app/modules/core/store/support/datapoint-occurrences/reducer.ts","./src/app/modules/core/store/support/datapoint-occurrences/selectors.ts","./src/app/modules/core/store/support/site-logs/actions.ts","./src/app/modules/core/store/support/site-logs/state.ts","./src/app/modules/core/store/support/site-logs/reducer.ts","./src/app/modules/core/store/support/site-logs/selectors.ts","./src/app/modules/core/store/support/effects.ts","./src/app/modules/core/store/support/reducer.ts","./src/app/modules/core/store/support/selectors.ts","./src/app/modules/core/store/support/unit-creation-logs/actions.ts","./src/app/modules/core/store/support/unit-creation-logs/state.ts","./src/app/modules/core/store/support/unit-creation-logs/reducer.ts","./src/app/modules/core/store/support/unit-creation-logs/selectors.ts","./src/app/modules/core/store/support/unit-creation-types/actions.ts","./src/app/modules/core/store/support/unit-creation-types/state.ts","./src/app/modules/core/store/support/unit-creation-types/reducer.ts","./src/app/modules/core/store/support/unit-creation-types/selectors.ts","./src/app/modules/core/store/system-event-diagnostics/actions.ts","./src/app/modules/core/services/system-event-diagnostic.service.ts","./src/app/modules/core/store/system-event-diagnostics/effects.ts","./src/app/modules/core/store/system-event-diagnostics/state.ts","./src/app/modules/core/store/system-event-diagnostics/reducer.ts","./src/app/modules/core/store/system-event-diagnostics/selectors.ts","./src/app/modules/core/store/system-status/actions.ts","./src/app/modules/core/store/system-status/effects.ts","./src/app/modules/core/store/system-status/state.ts","./src/app/modules/core/store/system-status/reducer.ts","./src/app/modules/core/store/system-status/selectors.ts","./src/app/modules/core/store/tiles/actions.ts","./src/app/modules/core/store/tiles/effects.ts","./src/app/modules/core/store/tiles/state.ts","./src/app/modules/core/store/tiles/reducer.ts","./src/app/modules/core/store/tiles/selectors.ts","./src/app/modules/core/store/time-interval-dropdowns/actions.ts","./src/app/modules/core/store/time-interval-dropdowns/effects.ts","./src/app/modules/core/store/time-interval-dropdowns/state.ts","./src/app/modules/core/store/time-interval-dropdowns/reducer.ts","./src/app/modules/core/store/time-interval-dropdowns/selectors.ts","./src/app/modules/core/store/tool-tips/actions.ts","./src/app/modules/core/store/tool-tips/effects.ts","./src/app/modules/core/store/tool-tips/state.ts","./src/app/modules/core/store/tool-tips/reducer.ts","./src/app/modules/core/store/tool-tips/selectors.ts","./src/app/modules/core/store/trip-config/actions.ts","./src/app/modules/core/store/trip-config/effects.ts","./src/app/modules/core/store/trip-config/state.ts","./src/app/modules/core/store/trip-config/reducer.ts","./src/app/modules/core/store/trip-config/selectors.ts","./src/app/modules/core/store/trip-summary/actions.ts","./src/app/modules/core/store/trip-summary/effects.ts","./src/app/modules/core/store/trip-summary/state.ts","./src/app/modules/core/store/trip-summary/reducer.ts","./src/app/modules/core/store/trip-summary/selectors.ts","./src/app/modules/core/store/unit-control/actions.ts","./src/app/modules/core/store/unit-control/effects.ts","./src/app/modules/core/store/unit-control/state.ts","./src/app/modules/core/store/unit-control/reducer.ts","./src/app/modules/core/store/unit-control/selectors.ts","./src/app/modules/core/store/unit-states/actions.ts","./src/app/modules/core/store/unit-states/effects.ts","./src/app/modules/core/store/unit-states/reducer.ts","./src/app/modules/core/store/unit-states/selectors.ts","./src/app/modules/core/store/unit-states/state.ts","./src/app/modules/core/store/units-of-measure-conversions/actions.ts","./src/app/modules/core/store/units-of-measure-conversions/effects.ts","./src/app/modules/core/store/units-of-measure-conversions/state.ts","./src/app/modules/core/store/units-of-measure-conversions/reducer.ts","./src/app/modules/core/store/units-of-measure-conversions/selectors.ts","./src/app/modules/core/store/units-of-measure/actions.ts","./src/app/modules/core/store/units-of-measure/effects.ts","./src/app/modules/core/store/units-of-measure/state.ts","./src/app/modules/core/store/units-of-measure/reducer.ts","./src/app/modules/core/store/units-of-measure/selectors.ts","./src/app/modules/core/store/user-alert-recipients/actions.ts","./src/app/modules/core/store/user-alert-recipients/effects.ts","./src/app/modules/core/store/user-alert-recipients/state.ts","./src/app/modules/core/store/user-alert-recipients/reducer.ts","./src/app/modules/core/store/user-alert-recipients/selectors.ts","./src/app/modules/core/store/user-global-filter-data-point-group/actions.ts","./src/app/modules/core/store/user-global-filter-data-point-group/effects.ts","./src/app/modules/core/store/user-global-filter-data-point-group/state.ts","./src/app/modules/core/store/user-global-filter-data-point-group/reducer.ts","./src/app/modules/core/store/user-global-filter-data-point-group/selectors.ts","./src/app/modules/core/store/user-groups/actions.ts","./src/app/modules/shared/types/banner-message-types.ts","./src/app/modules/shared/types/banner-messages.ts","./src/app/modules/core/store/user-groups/effects.ts","./src/app/modules/core/store/user-groups/state.ts","./src/app/modules/core/store/user-groups/reducer.ts","./src/app/modules/core/store/user-groups/selectors.ts","./src/app/modules/core/store/user-permissions/actions.ts","./src/app/modules/core/store/user-permissions/effects.ts","./src/app/modules/core/store/user-permissions/state.ts","./src/app/modules/core/store/user-permissions/reducer.ts","./src/app/modules/core/store/user-permissions/selectors.ts","./src/app/modules/core/store/user-session/actions.ts","./src/app/modules/core/store/user-session/effects.ts","./src/app/modules/core/store/user-session/state.ts","./src/app/modules/core/store/user-session/reducer.ts","./src/app/modules/core/store/user-session/selectors.ts","./src/app/modules/core/store/vim/actions.ts","./src/app/modules/core/store/vim/effects.ts","./src/app/modules/core/store/vim/state.ts","./src/app/modules/core/store/vim/reducer.ts","./src/app/modules/core/store/vim/selectors.ts","./src/app/modules/dashboard/lookups/load-actions.ts","./src/app/modules/dashboard/modules/alarm-editor/alarm-editor.module.ts","./src/app/modules/dashboard/modules/alarm-editor/components/recipients-editor/recipients-editor.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/recipients-editor/recipients-editor.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/recipients-unit-list/recipients-unit-list.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/recipients-unit-list/recipients-unit-list.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-alarms/threshold-alarms.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-alarms/threshold-alarms.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-available-datapoints/threshold-available-datapoints.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-available-datapoints/threshold-available-datapoints.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-editor/threshold-editor.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-editor/threshold-editor.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-preview-save/threshold-preview-save.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-preview-save/threshold-preview-save.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-unit-list/threshold-unit-list.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/threshold-unit-list/threshold-unit-list.component.ts","./src/app/modules/dashboard/modules/alarm-editor/components/unit-list-item/unit-list-item.component.html","./src/app/modules/dashboard/modules/alarm-editor/components/unit-list-item/unit-list-item.component.ts","./src/app/modules/dashboard/modules/alarm-editor/services/alarm-editor.service.ts","./src/app/modules/dashboard/modules/alarm-editor/store/actions.ts","./src/app/modules/dashboard/modules/alarm-editor/store/effects.ts","./src/app/modules/dashboard/modules/alarm-editor/store/selectors.ts","./src/app/modules/dashboard/modules/alarm-editor/store/reducer.ts","./src/app/modules/dashboard/modules/alarm-editor/store/state.ts","./src/app/modules/dashboard/modules/current-present-alarms/actions/present-alarms-data.actions.ts","./src/app/modules/dashboard/modules/current-present-alarms/reducers/present-alarms.reducer.ts","./src/app/modules/dashboard/modules/current-present-alarms/reducers/index.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint-legends/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint-legends/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint-legends/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint-legends/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/datapoint/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation-drawer/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation-drawer/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation-drawer/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation-drawer/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-calculation/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-code/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-party-drawer/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-party-drawer/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-party-drawer/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-party-drawer/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/event-party/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/reducers.ts","./src/app/modules/dashboard/modules/runtime-settings/services/runtime-settings.service.ts","./src/app/modules/dashboard/modules/runtime-settings/store/effects.ts","./src/app/modules/dashboard/modules/runtime-settings/store/runtime-store.module.ts","./src/app/modules/dashboard/modules/runtime-settings/store/runtimeTest/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/runtimeTest/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/runtimeTest/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/runtimeTest/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-drawer/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-drawer/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-drawer/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-drawer/selectors.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-table/actions.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-table/state.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-table/reducer.ts","./src/app/modules/dashboard/modules/runtime-settings/store/units-table/selectors.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/actions/unit-alarm-history.actions.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/actions/unit-alarm-history-recipients.actions.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/actions/unit-alarm-history-logs.actions.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/actions/datapoint-legends.actions.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/reducers/unit-alarm-history.reducer.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/reducers/unit-alarm-history-recipients.reducer.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/reducers/unit-alarm-history-logs.reducer.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/reducers/datapoint-legends.reducer.ts","./src/app/modules/dashboard/modules/unit-alarm-history/store/reducers/index.ts","./src/app/modules/dashboard/modules/unit-alarms/store/actions/unit-alarms-drawer.actions.ts","./src/app/modules/dashboard/modules/unit-alarms/store/actions/unit-alarms.actions.ts","./src/app/modules/dashboard/modules/unit-alarms/store/reducers/unit-alarms.reducer.ts","./src/app/modules/dashboard/modules/unit-alarms/store/reducers/index.ts","./src/app/modules/dashboard/modules/unit-alarms/store/reducers/unit-alarms-drawer.reducer.ts","./src/app/modules/dashboard/modules/user-admin/containers/user-feature-access-page/banner-messages.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/favorites.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/job-title.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/user-drawer.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/feature-access.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/user-notification-settings.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/feature-access-edit.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/color-theme.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/asset-notification-recipient.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/user-schedules.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/asset-name-preference.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/unit-access.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/user-access.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/actions/user-search-page.actions.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/user-notification-settings.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/enums/drawer-type-ids.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/favorites.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/color-themes.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/user-search.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/job-titles.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/user-notification-settings.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/asset-notification-recipients.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/user-drawer.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/feature-access/available-feature-access.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/feature-access/edited-user.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/feature-access/currently-edited.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/feature-access/index.ts","./src/app/modules/dashboard/modules/user-admin/store/unit-access.helpers.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/unit-access.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/user-schedules.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/asset-name-preferences.reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/reducers/index.ts","./src/app/modules/dashboard/modules/user-admin/store/user-banner-messages.ts","./src/app/modules/dashboard/modules/user-admin/store/user-ui-store/actions.ts","./src/app/modules/dashboard/modules/user-admin/store/user-ui-store/selectors.ts","./src/app/modules/dashboard/modules/user-admin/store/user-ui-store/state.ts","./src/app/modules/dashboard/modules/user-profile/components/user-notification-recipient-list/user-notification-recipient-list.component.html","./src/app/modules/dashboard/modules/user-profile/components/user-notification-recipient-list/user-notification-recipient-list.component.ts","./src/app/modules/dashboard/modules/user-profile/components/user-notification-recipient-list/user-notification-recipient-list.module.ts","./src/app/modules/dashboard/store/actions.ts","./src/app/modules/dashboard/store/reducer.ts","./src/app/modules/dashboard/store/effects.ts","./src/app/modules/dashboard/store/dashboard-store.module.ts","./src/app/modules/dashboard/store/tiles-without-dashboards.ts","./src/app/modules/dashboard/store/selectors.ts","./src/app/modules/dashboard/store/state.ts","./src/app/modules/drawers/services/section.service.ts","./src/app/modules/global-filter/actions/categories.actions.ts","./src/app/modules/global-filter/actions/edit-filter.actions.ts","./src/app/modules/global-filter/actions/filter-units.action.ts","./src/app/modules/global-filter/actions/general-filter.actions.ts","./src/app/modules/global-filter/actions/options.actions.ts","./src/app/modules/global-filter/actions/saved-filters.actions.ts","./src/app/modules/global-filter/actions/selected-filter.actions.ts","./src/app/modules/global-filter/actions/layout.actions.ts","./src/app/modules/global-filter/banner-confirm-messages.ts","./src/app/modules/global-filter/enums/filter-screens.enum.ts","./src/app/modules/global-filter/reducers/categories.reducer.ts","./src/app/modules/global-filter/reducers/changed-controls.reducer.ts","./src/app/modules/global-filter/reducers/edit-filter.reducer.ts","./src/app/modules/global-filter/reducers/filter-units.reducer.ts","./src/app/modules/global-filter/reducers/options.reducer.ts","./src/app/modules/global-filter/reducers/saved-filters.reducer.ts","./src/app/modules/global-filter/reducers/selected-filter.reducer.ts","./src/app/modules/global-filter/reducers/layout.reducer.ts","./src/app/modules/global-filter/reducers/index.ts","./src/app/modules/involve/accordion/accordion-content.component.ts","./src/app/modules/involve/accordion/accordion-group.component.ts","./src/app/modules/involve/accordion/accordion-group.component.html","./src/app/modules/involve/accordion/accordion-header.component.ts","./src/app/modules/involve/accordion/accordion.component.html","./src/app/modules/involve/accordion/accordion.component.ts","./src/app/modules/involve/badge/badge-option.component.ts","./src/app/modules/involve/badge/badge.component.html","./src/app/modules/involve/badge/badge.component.ts","./src/app/modules/involve/button/button.component.html","./src/app/modules/involve/button/button-primary.component.ts","./src/app/modules/involve/button/button-secondary.component.ts","./src/app/modules/involve/button/button.component.ts","./src/app/modules/involve/checkbox/checkbox.component.html","./src/app/modules/involve/checkbox/checkbox.component.ts","./src/app/modules/involve/collapsible-panel/collapsible-panel.component.html","./src/app/modules/involve/collapsible-panel/collapsible-panel.component.ts","./src/app/modules/involve/color-picker/color-picker-selector.component.ts","./src/app/modules/involve/color-picker/color-picker-selector.component.html","./src/app/modules/involve/color-picker/color-picker.component.html","./src/app/modules/involve/color-picker/color-picker.component.ts","./src/app/modules/involve/color-picker/misc.ts","./src/app/modules/involve/color-picker/color.ts","./src/app/modules/involve/copy/copy.component.html","./src/app/modules/involve/copy/copy.component.ts","./src/app/modules/involve/data-item/data-item.component.html","./src/app/modules/involve/data-item/data-item.component.ts","./src/app/modules/involve/date-picker/date-picker.component.ts","./src/app/modules/involve/date-picker/date-picker.component.html","./src/app/modules/involve/date-picker/lib/calendar-nav/calendar-nav.component.html","./src/app/modules/involve/date-picker/lib/calendar-nav/calendar-nav.component.ts","./src/app/modules/involve/date-picker/lib/common/services/utils/utils.service.ts","./src/app/modules/involve/date-picker/lib/common/types/calendar-mode-enum.ts","./src/app/modules/involve/date-picker/lib/common/types/calendar-value-enum.ts","./src/app/modules/involve/date-picker/lib/date-picker/date-picker.service.ts","./src/app/modules/involve/date-picker/lib/common/types/selection-event.enum.ts","./src/app/modules/involve/date-picker/lib/common/services/dom-appender/dom-appender.service.ts","./src/app/modules/involve/date-picker/lib/date-picker/date-picker.component.html","./src/app/modules/involve/date-picker/lib/date-picker/date-picker.component.ts","./src/app/modules/involve/date-picker/lib/day-calendar/day-calendar.component.html","./src/app/modules/involve/date-picker/lib/day-calendar/day-calendar.component.ts","./src/app/modules/involve/date-picker/lib/day-calendar/day-calendar.service.ts","./src/app/modules/involve/date-picker/lib/day-time-calendar/day-time-calendar.component.ts","./src/app/modules/involve/date-picker/lib/day-time-calendar/day-time-calendar.component.html","./src/app/modules/involve/date-picker/lib/day-time-calendar/day-time-calendar.service.ts","./src/app/modules/involve/date-picker/lib/month-calendar/month-calendar.service.ts","./src/app/modules/involve/date-picker/lib/month-calendar/month-calendar.component.html","./src/app/modules/involve/date-picker/lib/month-calendar/month-calendar.component.ts","./src/app/modules/involve/date-picker/lib/time-select/time-select.component.html","./src/app/modules/involve/date-picker/lib/time-select/time-select.component.ts","./src/app/modules/involve/date-picker/lib/time-select/time-select.service.ts","./src/app/modules/involve/date-range/date-range.component.html","./src/app/modules/involve/date-range/date-range.component.ts","./src/app/modules/involve/directive/cypress.directive.ts","./src/app/modules/involve/directive/directive.module.ts","./src/app/modules/involve/directive/involve-overflow.html","./src/app/modules/involve/directive/involve-overflow.directive.ts","./src/app/modules/involve/equation-editor/equation-editor.component.ts","./src/app/modules/involve/equation-editor/equation-editor.module.ts","./src/app/modules/involve/export/export.component.html","./src/app/modules/involve/export/export.component.ts","./src/app/modules/involve/feature-bar/feature-bar.component.html","./src/app/modules/involve/feature-bar/feature-bar.component.ts","./src/app/modules/involve/form-field/error.component.html","./src/app/modules/involve/form-field/error.component.ts","./src/app/modules/involve/form-field/form-field-control.ts","./src/app/modules/involve/form-field/form-field.component.html","./src/app/modules/involve/form-field/form-field.component.ts","./src/app/modules/involve/form-field/hint.directive.ts","./src/app/modules/involve/form-field/label.directive.ts","./src/app/modules/involve/form-field/prefix.directive.ts","./src/app/modules/involve/form-field/suffix.directive.ts","./src/app/modules/involve/highcharts/template.html","./src/app/modules/involve/highcharts/highchart.component.ts","./src/app/modules/involve/icon/icon.component.html","./src/app/modules/involve/icon/icon.component.ts","./src/app/modules/involve/icon/icon.module.ts","./src/app/modules/involve/icon/icon.service.ts","./src/app/modules/involve/input/input-value-accessor.ts","./src/app/modules/involve/input/input.directive.ts","./src/app/modules/involve/input/input.module.ts","./src/app/modules/involve/playground.component.html","./src/app/modules/involve/involve-router.module.ts","./src/app/modules/involve/playground.component.ts","./src/app/modules/involve/form-field/form-field.module.ts","./src/app/modules/involve/accordion/accordion.module.ts","./src/app/modules/involve/badge/badge.module.ts","./src/app/modules/involve/button/button.module.ts","./src/app/modules/involve/carousel/carousel.module.ts","./src/app/modules/involve/checkbox/checkbox.module.ts","./src/app/modules/involve/collapsible-panel/module.ts","./src/app/modules/involve/color-picker/color-picker.module.ts","./src/app/modules/involve/copy/copy.module.ts","./src/app/modules/involve/data-item/data-item.module.ts","./src/app/modules/involve/date-picker/lib/date-picker/date-picker-directive.service.ts","./src/app/modules/involve/date-picker/lib/date-picker.module.ts","./src/app/modules/involve/date-range-bar/date-range-bar.module.ts","./src/app/modules/involve/date-range/date-range.module.ts","./src/app/modules/involve/feature-bar/feature-bar.module.ts","./src/app/modules/involve/spark-chart/spark-chart.module.ts","./src/app/modules/involve/highcharts/highcharts.module.ts","./src/app/modules/involve/gauge/gauge.module.ts","./src/app/modules/involve/menu/menu.module.ts","./src/app/modules/involve/progress-bar/progress-bar.module.ts","./src/app/modules/involve/select/select.module.ts","./src/app/modules/involve/side-bar/side-bar.module.ts","./src/app/modules/involve/smart-container/smart-container.module.ts","./src/app/modules/involve/status-bar/status-bar.module.ts","./src/app/modules/involve/table/module.ts","./src/app/modules/involve/tab/tab.module.ts","./src/app/modules/involve/tile/tile.module.ts","./src/app/modules/involve/toggle-button/module.ts","./src/app/modules/involve/toggle-switch/module.ts","./src/app/modules/involve/export/export.module.ts","./src/app/modules/involve/toolbar/toolbar.module.ts","./src/app/modules/involve/tree/module.ts","./src/app/modules/involve/wizard/wizard.module.ts","./src/app/modules/involve/rating/rating.module.ts","./src/app/modules/involve/involve.module.ts","./src/app/modules/involve/loading-circles/loading-circles.component.ts","./src/app/modules/involve/loading-circles/loading-circles.component.html","./src/app/modules/involve/loading-circles/loading-circles.module.ts","./src/app/modules/involve/map/extensions/ControlStub.ts","./src/app/modules/involve/map/extensions/FullScreenControl.ts","./src/app/modules/involve/map/extensions/HtmlMarkerLayer.ts","./src/app/modules/involve/map/extensions/PieChartMarker.ts","./src/app/modules/core/services/azure.service.ts","./src/app/modules/involve/map/map.component.html","./src/app/modules/involve/map/map.component.ts","./src/app/modules/involve/map/map.module.ts","./src/app/modules/involve/map/marker.ts","./src/app/modules/involve/map/toolbar.component.html","./src/app/modules/involve/map/toolbar.component.ts","./src/app/modules/involve/map/tooltip.component.ts","./src/app/modules/involve/menu/menu.component.html","./src/app/modules/involve/menu/menu.component.ts","./src/app/modules/involve/pipes/pipes.module.ts","./src/app/modules/involve/pipes/plural.pipe.ts","./src/app/modules/involve/pipes/rfv-date-time.pipe.ts","./src/app/modules/involve/pipes/rfv-date.pipe.ts","./src/app/modules/involve/pipes/rfv-time.pipe.ts","./src/app/modules/involve/progress-bar/progress.component.html","./src/app/modules/involve/progress-bar/progress.component.ts","./src/app/modules/involve/rating/rating-item.component.ts","./src/app/modules/involve/rating/rating-option.component.ts","./src/app/modules/involve/rating/rating.component.ts","./src/app/modules/involve/rating/rating.component.html","./src/app/modules/involve/select/option-group.component.ts","./src/app/modules/involve/select/option-group.component.html","./src/app/modules/involve/select/option.component.html","./src/app/modules/involve/select/option.component.ts","./src/app/modules/involve/select/select.component.html","./src/app/modules/involve/select/select.component.ts","./src/app/modules/involve/side-bar/services/side-bar-service.service.ts","./src/app/modules/involve/side-bar/side-bar.component.html","./src/app/modules/involve/side-bar/side-bar.component.ts","./src/app/modules/involve/smart-container/smart-container.component.html","./src/app/modules/involve/smart-container/smart-container.component.ts","./src/app/modules/involve/spinner/spinner.component.ts","./src/app/modules/involve/status-bar/status-bar.component.ts","./src/app/modules/involve/status-bar/status-bar.component.html","./src/app/modules/involve/tab/tab-group.component.html","./src/app/modules/involve/tab/tab-group.component.ts","./src/app/modules/involve/tab/tab.component.ts","./src/app/modules/involve/table/cell.ts","./src/app/modules/involve/table/data-source.ts","./src/app/modules/involve/table/filter-header.html","./src/app/modules/involve/table/filter-header.ts","./src/app/modules/involve/table/filter.ts","./src/app/modules/involve/table/render.ts","./src/app/modules/involve/table/row.ts","./src/app/modules/involve/table/sort-header.html","./src/app/modules/involve/table/sort-header.ts","./src/app/modules/involve/table/sort.ts","./src/app/modules/involve/table/virtual-scroll-strategy.ts","./src/app/modules/involve/table/table.html","./src/app/modules/involve/table/table.ts","./src/app/modules/involve/table/tokens.ts","./src/app/modules/involve/table/view.ts","./src/app/modules/involve/tile/tile-content.component.ts","./src/app/modules/involve/tile/tile-header-tabs.component.html","./src/app/modules/involve/tile/tile-header-tabs.component.ts","./src/app/modules/involve/tile/tile-header.component.ts","./src/app/modules/involve/tile/tile.component.ts","./src/app/modules/involve/tile/tile.component.html","./src/app/modules/involve/toggle-button/toggle-button-accessor.ts","./src/app/modules/involve/toggle-button/toggle-button.component.ts","./src/app/modules/involve/toggle-button/toggle-button.component.html","./src/app/modules/involve/toggle-button/toggle-option.component.ts","./src/app/modules/involve/toggle-button/toggle-option.component.html","./src/app/modules/involve/toggle-switch/toggle-switch.component.ts","./src/app/modules/involve/toggle-switch/toggle-switch.component.html","./src/app/modules/involve/toolbar/components/export/export.component.ts","./src/app/modules/involve/toolbar/components/filter/auto-filter.component.html","./src/app/modules/involve/toolbar/components/filter/auto-filter.component.ts","./src/app/modules/involve/toolbar/components/filter/filter-item.component.html","./src/app/modules/involve/toolbar/components/filter/filter-item.component.ts","./src/app/modules/involve/toolbar/components/group/group-option.component.ts","./src/app/modules/involve/toolbar/components/group/group.component.html","./src/app/modules/involve/toolbar/components/group/group.component.ts","./src/app/modules/involve/toolbar/components/search/search.component.html","./src/app/modules/involve/toolbar/components/search/search.component.ts","./src/app/modules/involve/toolbar/toolbar-actions.directive.ts","./src/app/modules/involve/toolbar/toolbar.component.html","./src/app/modules/involve/toolbar/toolbar.component.ts","./src/app/modules/involve/tooltip/tooltip.html","./src/app/modules/involve/tooltip/tooltip.directive.ts","./src/app/modules/involve/tooltip/tooltip.module.ts","./src/app/modules/involve/wizard/wizard-category-header.component.ts","./src/app/modules/involve/wizard/wizard-category.component.ts","./src/app/modules/involve/wizard/wizard-header.component.ts","./src/app/modules/involve/wizard/wizard-step.component.ts","./src/app/modules/involve/wizard/wizard.component.ts","./src/app/modules/involve/wizard/wizard.component.html","./src/app/modules/modal/components/copy-user-permissions/copy-user-messages.ts","./src/app/modules/modal/components/replace-job-title/replace-job-title-message.ts","./src/app/modules/modal/modal.module.ts","./src/app/modules/modal/models/modal.model.ts","./src/app/modules/report/actions/report-types.actions.ts","./src/app/modules/report/actions/time-zones.actions.ts","./src/app/modules/report/actions/date-ranges.actions.ts","./src/app/modules/report/actions/report-history.actions.ts","./src/app/modules/report/actions/file-types.actions.ts","./src/app/modules/report/actions/report-schedules.actions.ts","./src/app/modules/report/actions/report-filter.actions.ts","./src/app/modules/report/actions/recipients.actions.ts","./src/app/modules/report/actions/report-kind.actions.ts","./src/app/modules/report/reducers/time-zones.reducer.ts","./src/app/modules/report/reducers/frequency.reducers.ts","./src/app/modules/report/reducers/report-history.reducer.ts","./src/app/modules/report/reducers/report-schedules.reducer.ts","./src/app/modules/report/reducers/report-filter.reducer.ts","./src/app/modules/report/reducers/recipients.reducer.ts","./src/app/modules/report/reducers/report-kind.reducer.ts","./src/app/modules/report/reducers/report-element.reducer.ts","./src/app/modules/report/reducers/report-types.reducer.ts","./src/app/modules/report/reducers/file-types.reducer.ts","./src/app/modules/report/reducers/index.ts","./src/app/modules/report/report-banner-messages.ts","./src/app/modules/report/report.service.ts","./src/app/modules/shared/components/alarms-drawer/alarms-drawer.component.html","./src/app/modules/shared/components/alarms-drawer/alarms-drawer.component.ts","./src/app/modules/shared/components/buttons/toggle-button/toggle-button.component.ts","./src/app/modules/shared/components/carousel/carousel-content.ts","./src/app/modules/shared/components/carousel/carousel-content.html","./src/app/modules/shared/components/carousel/carousel-indicator.ts","./src/app/modules/shared/components/carousel/carousel-indicator.html","./src/app/modules/shared/components/carousel/carousel-slide.html","./src/app/modules/shared/components/carousel/carousel-slide.ts","./src/app/modules/shared/components/carousel/carousel.html","./src/app/modules/shared/components/carousel/carousel.ts","./src/app/modules/shared/components/collapsable-section/collapsable-section.component.html","./src/app/modules/shared/components/collapsable-section/collapsable-section.component.ts","./src/app/modules/shared/components/color-picker/color-picker.component.ts","./src/app/modules/shared/components/data-item/data-item.component.html","./src/app/modules/shared/components/data-item/data-item.component.ts","./src/app/modules/shared/components/device-info/ple-table/ple-table.component.html","./src/app/modules/shared/components/device-info/ple-table/ple-table.component.ts","./src/app/modules/shared/components/device-info/ple/ple.component.html","./src/app/modules/shared/components/device-info/ple/ple.component.ts","./src/app/modules/shared/components/device-info/rms/rms.component.html","./src/app/modules/shared/components/device-info/rms/rms.component.ts","./src/app/modules/shared/components/dynamic-tooltip/dynamic-tooltip.component.html","./src/app/modules/shared/components/dynamic-tooltip/dynamic-tooltip.component.ts","./src/app/modules/shared/components/error/error.component.ts","./src/app/modules/shared/components/error/error.component.html","./src/app/modules/shared/components/filter-group-button/filter-group-button.component.html","./src/app/modules/shared/components/filter-group-button/filter-group-button.component.ts","./src/app/modules/shared/components/form-validation-error/form-errors.ts","./src/app/modules/shared/components/form-validation-error/form-validation-error.component.ts","./src/app/modules/shared/components/form-validation-error/form-validation-error.component.html","./src/app/modules/involve/gauge/gauge.component.html","./src/app/modules/involve/gauge/gauge.component.ts","./src/app/modules/involve/spark-chart/spark-chart.component.html","./src/app/modules/involve/spark-chart/spark-chart.component.ts","./src/app/modules/shared/components/gauge-view/gauge-view.component.html","./src/app/modules/shared/components/gauge-view/gauge-view.component.ts","./src/app/modules/shared/components/job-title-drawer/job-title-drawer.component.html","./src/app/modules/shared/components/job-title-drawer/job-title-drawer.component.ts","./src/app/modules/shared/components/machine-info/machine-info.component.html","./src/app/modules/shared/components/machine-info/machine-info.component.ts","./src/app/modules/shared/components/multi-select/multi-select.component.html","./src/app/modules/shared/components/multi-select/multi-select.component.ts","./src/app/modules/shared/components/overlay/overlay-backdrop.component.ts","./src/app/modules/shared/components/overlay/overlay-spinner.component.ts","./src/app/modules/shared/components/overlay/overlay-spinner.component.html","./src/app/modules/shared/components/progress-bar/progress-bar.component.ts","./src/app/modules/shared/components/progress-bar/progress-bar.component.html","./src/app/modules/shared/components/reload-indicator/reload-indicator.component.ts","./src/app/modules/shared/components/reload-indicator/reload-indicator.component.html","./src/app/modules/shared/components/report-schedule-list/report-schedule-list.component.html","./src/app/modules/shared/components/report-schedule-list/report-schedule-list.component.ts","./src/app/modules/shared/components/rfv-filter-input/rfv-filter-input.component.html","./src/app/modules/shared/components/rfv-filter-input/rfv-filter-input.component.ts","./src/app/modules/shared/components/rfv-icon/rfv-icon.component.ts","./src/app/modules/shared/components/sample-time-footer/sample-time-footer.component.ts","./src/app/modules/shared/components/select/select.component.html","./src/app/modules/shared/components/select/select.component.ts","./src/app/modules/shared/components/simple-drawer/simple-drawer-header/simple-drawer-header.component.ts","./src/app/modules/shared/components/simple-drawer/simple-drawer-header/simple-drawer-header.component.html","./src/app/modules/shared/components/simple-drawer/simple-drawer.component.html","./src/app/modules/shared/components/simple-drawer/simple-drawer.component.ts","./src/app/modules/shared/components/svg-icon/svg-icon.component.ts","./src/app/modules/shared/components/tabs/tab-item.component.ts","./src/app/modules/shared/components/tabs/tabs-slider.directive.ts","./src/app/modules/shared/components/tabs/tabs.component.ts","./src/app/modules/shared/components/tile-header/show-hide-buttons.directive.ts","./src/app/modules/shared/components/tile-header/tile-header-button/tile-header-button.component.html","./src/app/modules/shared/components/tile-header/tile-header-button/tile-header-button.component.ts","./src/app/modules/shared/components/tile-header/tile-header-content-wrapper.component.html","./src/app/modules/shared/components/tile-header/tile-header-content-wrapper.component.ts","./src/app/modules/shared/components/tile-header/tile-header-list-item/tile-header-list-item.component.html","./src/app/modules/shared/components/tile-header/tile-header-list-item/tile-header-list-item.component.ts","./src/app/modules/shared/components/tile-header/tile-header-tab/tile-header-tab.component.ts","./src/app/modules/shared/components/tile-header/tile-header-tab/tile-header-tab.component.html","./src/app/modules/shared/components/tile-header/tile-header-title/tile-header-title.component.ts","./src/app/modules/shared/components/tile-header/tile-header-title/tile-header-title.component.html","./src/app/modules/shared/components/tile-header/tile-header.buttons.ts","./src/app/modules/shared/components/tile/tile-content.component.ts","./src/app/modules/shared/components/tile/tile-header.component.ts","./src/app/modules/shared/components/tile/tile.component.ts","./src/app/modules/shared/components/unit-info-editor/unit-info-editor.component.html","./src/app/modules/shared/components/unit-info-editor/unit-info-editor.component.ts","./src/app/modules/shared/components/utilization-chart/utilization-chart.component.html","./src/app/modules/shared/components/utilization-chart/utilization-chart.component.ts","./src/app/modules/shared/directives/drawer-origin.directive.ts","./src/app/modules/shared/directives/hover-class.directive.ts","./src/app/modules/shared/directives/machine-info-component.ts","./src/app/modules/shared/directives/toggle-accordion.directive.ts","./src/app/modules/shared/pipes/filter-disabled-datapoints.pipe.ts","./src/app/modules/shared/pipes/filter-machine-component.ts","./src/app/modules/shared/pipes/round-number.pipe.ts","./src/app/modules/shared/services/user-permission.service.ts","./src/app/modules/shared/services/table-group.service.ts","./src/app/modules/shared/shared.module.ts","./src/app/modules/shared/types/app-colors.ts","./src/app/modules/shared/utils/moment.ts","./src/app/modules/sitemap/store/sitemap-store.module.ts","./src/app/modules/sitemap/sitemap.module.ts","./src/app/modules/sitemap/store/actions.ts","./src/app/modules/core/services/sitemap.service.ts","./src/app/modules/sitemap/store/effects.ts","./src/app/modules/sitemap/store/reducer.ts","./src/app/modules/sitemap/store/selectors.ts","./src/app/modules/sitemap/store/state.ts","./src/app/modules/support/services/device-info.service.ts","./src/app/modules/support/services/hardware-config.service.ts","./src/app/modules/support/services/unit-creation.service.ts","./src/app/modules/support/store/alarms-form/actions.ts","./src/app/modules/support/services/alarm.service.ts","./src/app/modules/support/store/alarms-form/effects.ts","./src/app/modules/support/store/alarms-form/state.ts","./src/app/modules/support/store/alarms-form/reducer.ts","./src/app/modules/support/store/alarms-form/selectors.ts","./src/app/modules/support/store/assign-datapoints-form/actions.ts","./src/app/modules/support/services/assign-datapoints.service.ts","./src/app/modules/support/store/assign-datapoints-form/effects.ts","./src/app/modules/support/store/assign-datapoints-form/state.ts","./src/app/modules/support/store/assign-datapoints-form/reducer.ts","./src/app/modules/support/store/assign-datapoints-form/selectors.ts","./src/app/modules/support/store/comms-loss-settings-form/actions.ts","./src/app/modules/support/services/comms-loss-settings.service.ts","./src/app/modules/support/store/comms-loss-settings-form/effects.ts","./src/app/modules/support/store/comms-loss-settings-form/state.ts","./src/app/modules/support/store/comms-loss-settings-form/reducer.ts","./src/app/modules/support/store/comms-loss-settings-form/selectors.ts","./src/app/modules/support/store/comms-type-info-form/actions.ts","./src/app/modules/support/services/comm-type-info.service.ts","./src/app/modules/support/store/comms-type-info-form/effects.ts","./src/app/modules/support/store/comms-type-info-form/state.ts","./src/app/modules/support/store/comms-type-info-form/reducer.ts","./src/app/modules/support/store/comms-type-info-form/selectors.ts","./src/app/modules/support/store/create-from-existing-asset/actions.ts","./src/app/modules/support/services/create-from-existing-asset.service.ts","./src/app/modules/support/store/create-from-existing-asset/effects.ts","./src/app/modules/support/store/create-from-existing-asset/selectors.ts","./src/app/modules/support/store/create-from-existing-asset/reducer.ts","./src/app/modules/support/store/create-from-existing-asset/state.ts","./src/app/modules/support/store/device-info/actions.ts","./src/app/modules/support/store/device-info/effects.ts","./src/app/modules/support/store/device-info/state.ts","./src/app/modules/support/store/device-info/reducer.ts","./src/app/modules/support/store/device-info/selectors.ts","./src/app/modules/support/store/hardware-config-form/actions.ts","./src/app/modules/support/services/idp.service.ts","./src/app/modules/support/store/hardware-config-form/effects.ts","./src/app/modules/support/store/hardware-config-form/state.ts","./src/app/modules/support/store/hardware-config-form/reducer.ts","./src/app/modules/support/store/hardware-config-form/selectors.ts","./src/app/modules/support/store/legend-editor/actions.ts","./src/app/modules/support/store/legend-editor/selectors.ts","./src/app/modules/support/services/legend-editor.service.ts","./src/app/modules/support/store/legend-editor/effects.ts","./src/app/modules/support/store/legend-editor/state.ts","./src/app/modules/support/store/legend-editor/reducer.ts","./src/app/modules/support/store/navigation/actions.ts","./src/app/modules/support/store/navigation/selectors.ts","./src/app/modules/support/services/navigation.service.ts","./src/app/modules/support/store/navigation/effects.ts","./src/app/modules/support/store/navigation/state.ts","./src/app/modules/support/store/navigation/reducer.ts","./src/app/modules/support/store/reducers.ts","./src/app/modules/support/store/runtime-form/actions.ts","./src/app/modules/support/services/runtime-settings.service.ts","./src/app/modules/support/store/runtime-form/effects.ts","./src/app/modules/support/store/runtime-form/state.ts","./src/app/modules/support/store/runtime-form/reducer.ts","./src/app/modules/support/store/runtime-form/selectors.ts","./src/app/modules/support/store/selectors.ts","./src/app/modules/support/store/server-ui-config-form/actions.ts","./src/app/modules/support/modules/server-config/utils/ple-banner-messages.ts","./src/app/modules/support/services/server-config.service.ts","./src/app/modules/support/store/server-ui-config-form/effects.ts","./src/app/modules/support/store/server-ui-config-form/state.ts","./src/app/modules/support/store/server-ui-config-form/reducer.ts","./src/app/modules/support/store/server-ui-config-form/selectors.ts","./src/app/modules/support/store/support-modal-messages.ts","./src/app/modules/support/store/unit-creation/actions.ts","./src/app/modules/support/store/unit-creation/effects.ts","./src/app/modules/support/store/unit-creation/state.ts","./src/app/modules/support/store/unit-creation/reducer.ts","./src/app/modules/support/store/unit-creation/selectors.ts","./src/app/modules/support/store/unit-data/actions.ts","./src/app/modules/support/services/unit-data.service.ts","./src/app/modules/support/store/unit-data/effects.ts","./src/app/modules/support/store/unit-data/state.ts","./src/app/modules/support/store/unit-data/reducer.ts","./src/app/modules/support/store/unit-data/selectors.ts","./src/app/modules/support/store/unit-review/actions.ts","./src/app/modules/support/services/unit-review.service.ts","./src/app/modules/support/store/unit-review/effects.ts","./src/app/modules/support/store/unit-review/state.ts","./src/app/modules/support/store/unit-review/reducer.ts","./src/app/modules/support/store/unit-review/selectors.ts","./src/app/modules/support/store/unit-validation/actions.ts","./src/app/modules/support/services/unit-validation.service.ts","./src/app/modules/support/store/unit-validation/effects.ts","./src/app/modules/support/store/unit-validation/state.ts","./src/app/modules/support/store/unit-validation/reducer.ts","./src/app/modules/support/store/unit-validation/selectors.ts","./src/app/modules/tiles/actions/data-points-editor.actions.ts","./src/app/modules/tiles/actions/system-alarms-tile.actions.ts","./src/app/modules/tiles/actions/unit-alarms-tile.actions.ts","./src/app/modules/tiles/actions/admin-notifications-tile.actions.ts","./src/app/modules/tiles/actions/admin-user-list-tile.actions.ts","./src/app/modules/tiles/actions/admin-runtime-tile.actions.ts","./src/app/modules/tiles/actions/site-visualization-tile.actions.ts","./src/app/modules/tiles/actions/system-notification-email-config.actions.ts","./src/app/modules/tiles/actions/runtime-metrics.actions.ts","./src/app/modules/tiles/actions/site-editor.actions.ts","./src/app/modules/tiles/actions/system-cat-inspection-tile.actions.ts","./src/app/modules/tiles/actions/system-notification-comm-type.actions.ts","./src/app/modules/tiles/actions/system-notification-subscription-item.actions.ts","./src/app/modules/tiles/actions/system-notification-subscription-type.actions.ts","./src/app/modules/tiles/actions/system-notification-user.actions.ts","./src/app/modules/tiles/actions/unit-data.actions.ts","./src/app/modules/tiles/actions/unit-info.actions.ts","./src/app/modules/tiles/reducers/alarms-tile.reducer.ts","./src/app/modules/tiles/reducers/data-points-editor.reducer.ts","./src/app/modules/tiles/reducers/runtime-metrics.reducer.ts","./src/app/modules/tiles/reducers/unit-data.reducer.ts","./src/app/modules/tiles/reducers/unit-info.reducer.ts","./src/app/store/banner/actions.ts","./src/app/store/banner/effects.ts","./src/app/store/banner/state.ts","./src/app/store/banner/reducer.ts","./src/app/store/banner/selectors.ts","./src/app/store/eula/actions.ts","./src/app/modules/core/services/eula.service.ts","./src/app/store/eula/effects.ts","./src/app/store/eula/state.ts","./src/app/store/eula/reducer.ts","./src/app/store/eula/selectors.ts","./src/app/store/layout/actions.ts","./src/app/store/layout/selectors.ts","./src/app/store/layout/effects.ts","./src/app/store/layout/state.ts","./src/app/store/layout/reducer.ts","./src/app/store/modal/actions.ts","./src/app/store/modal/state.ts","./src/app/store/modal/reducer.ts","./src/app/store/modal/selectors.ts","./src/app/store/modal/options.ts","./src/app/store/onetrust/actions.ts","./src/app/store/onetrust/effects.ts","./src/app/store/onetrust/state.ts","./src/app/store/onetrust/reducer.ts","./src/app/store/onetrust/selectors.ts","./src/app/store/router/actions.ts","./src/app/store/router/reducer.ts","./src/app/store/router/selectors.ts","./src/app/store/storage/actions.ts","./src/app/store/storage/effects.ts","./src/app/store/storage/state.ts","./src/app/store/storage/reducer.ts","./src/app/store/storage/selectors.ts","./src/environments/environment.dev.ts","./src/app/app-routing.module.ts","./src/app/store/reducers.ts","./src/app/store/meta-reducers.ts","./src/app/store/effects.ts","./src/app/store/router/effects.ts","./src/app/store/app-store.module.ts","./src/app/modules/global-filter/enums/filter-control-types.ts","./src/app/modules/global-filter/components/filter-categories/filter-categories.component.html","./src/app/modules/global-filter/components/filter-categories/filter-categories.component.ts","./src/app/modules/global-filter/components/filter-units/add-units.component.html","./src/app/modules/global-filter/components/filter-units/add-units.component.ts","./src/app/modules/global-filter/components/filter-controls/filter-checkbox/filter-checkbox.component.html","./src/app/modules/global-filter/components/filter-controls/filter-checkbox/filter-checkbox.component.ts","./src/app/modules/global-filter/components/filter-options-list/filter-options-list.component.html","./src/app/modules/global-filter/components/filter-options-list/filter-options-list.component.ts","./src/app/modules/global-filter/components/filter-selections/filter-selections.component.html","./src/app/modules/global-filter/components/filter-selections/filter-selections.component.ts","./src/app/modules/global-filter/containers/global-filter.component.html","./src/app/modules/global-filter/containers/global-filter.component.ts","./src/app/modules/involve/tree/data-source.ts","./src/app/modules/involve/tree/node.ts","./src/app/modules/involve/tree/tree.html","./src/app/modules/involve/tree/tree.ts","./src/app/modules/sitemap/my-fleet.component.html","./src/app/modules/sitemap/my-fleet.component.ts","./src/app/modules/sitemap/favorites.component.html","./src/app/modules/sitemap/favorites.component.ts","./src/app/modules/sitemap/filter.component.html","./src/app/modules/sitemap/filter.component.ts","./src/app/modules/sitemap/side-nav-item.component.html","./src/app/modules/sitemap/side-nav-item.component.ts","./src/app/modules/sitemap/side-nav.component.html","./src/app/modules/sitemap/side-nav.component.ts","./src/app/modules/sitemap/sitemap.component.html","./src/app/modules/sitemap/sitemap.component.ts","./src/app/modules/modal/components/unit-alarms-modal-content/unit-alarms-modal-content.component.html","./src/app/modules/modal/components/unit-alarms-modal-content/unit-alarms-modal-content.component.ts","./src/app/modules/modal/components/events-diagnostics-modal-content/events-diagnostics-modal-content.component.html","./src/app/modules/modal/components/events-diagnostics-modal-content/events-diagnostics-modal-content.component.ts","./src/app/modules/modal/components/device-search-modal-content/device-search-modal-content.component.html","./src/app/modules/modal/components/device-search-modal-content/device-search-modal-content.component.ts","./src/app/modules/modal/components/copy-user-permissions/copy-user-permissions.component.html","./src/app/modules/modal/components/copy-user-permissions/copy-user-permissions.component.ts","./src/app/modules/modal/components/replace-job-title/replace-job-title.component.html","./src/app/modules/modal/components/replace-job-title/replace-job-title.component.ts","./src/app/modules/modal/components/user-access-unit-model/user-access-unit-modal.component.html","./src/app/modules/modal/components/user-access-unit-model/user-access-unit-modal.component.ts","./src/app/modules/modal/components/user-recipients-modal/user-recipients-modal.component.ts","./src/app/modules/modal/components/user-recipients-modal/user-recipients-modal.component.html","./src/app/modules/modal/components/threshold-editor-preview-modal/alarm-preview-item/alarm-preview-item.component.html","./src/app/modules/modal/components/threshold-editor-preview-modal/alarm-preview-item/alarm-preview-item.component.ts","./src/app/modules/modal/components/threshold-editor-preview-modal/threshold-editor-preview-modal.component.html","./src/app/modules/modal/components/threshold-editor-preview-modal/threshold-editor-preview-modal.component.ts","./src/app/modules/modal/components/event-code-preview-modal/event-code-preview-modal.component.html","./src/app/modules/modal/components/event-code-preview-modal/event-code-preview-modal.component.ts","./src/app/modules/modal/components/datapoint-occurrence-editor-modal/datapoint-occurrence-preview-item/datapoint-occurrence-preview-item.component.ts","./src/app/modules/modal/components/datapoint-occurrence-editor-modal/datapoint-occurrence-preview-item/datapoint-occurrence-preview-item.component.html","./src/app/modules/modal/components/datapoint-occurrence-editor-modal/datapoint-occurrence-editor-modal.component.html","./src/app/modules/modal/components/datapoint-occurrence-editor-modal/datapoint-occurrence-editor-modal.component.ts","./src/app/modules/modal/components/data-point-editor-modal/data-point-editor-modal.component.html","./src/app/modules/modal/components/data-point-editor-modal/data-point-editor-modal.component.ts","./src/app/modules/modal/components/assessment-recommendation/assessment-recommendation.component.html","./src/app/modules/modal/components/assessment-recommendation/assessment-recommendation.component.ts","./src/app/modules/modal/components/assessment-import/assessment-import.component.html","./src/app/modules/modal/components/assessment-import/assessment-import.component.ts","./src/app/modules/modal/components/associate-streaming-config-modal/associate-streaming-config-modal.component.html","./src/app/modules/modal/components/associate-streaming-config-modal/associate-streaming-config-modal.component.ts","./src/app/modules/modal/components/view-vims-assets-modal/view-vims-assets-modal.component.html","./src/app/modules/modal/components/view-vims-assets-modal/view-vims-assets-modal.component.ts","./src/app/modules/modal/components/create-vims-modal/create-vims-modal.component.html","./src/app/modules/modal/components/create-vims-modal/create-vims-modal.component.ts","./src/app/modules/modal/components/create-dealer-vims-modal/create-dealer-vims-modal.component.html","./src/app/modules/modal/components/create-dealer-vims-modal/create-dealer-vims-modal.component.ts","./src/app/modules/modal/components/remove-dealer-vims-modal/remove-dealer-vims-modal.component.ts","./src/app/modules/modal/components/remove-dealer-vims-modal/remove-dealer-vims-modal.component.html","./src/app/modules/modal/components/onboarding-event-log/onboarding-event-log.component.html","./src/app/modules/modal/components/onboarding-event-log/onboarding-event-log.component.ts","./src/app/modules/modal/components/user-log/user-log.component.html","./src/app/modules/modal/components/user-log/user-log.component.ts","./src/app/modules/modal/components/delete-suppressing-alarm-modal/delete-suppressing-alarm-modal.component.ts","./src/app/modules/modal/components/delete-suppressing-alarm-modal/delete-suppressing-alarm-modal.component.html","./src/app/modules/modal/components/delete-section-modal/delete-section-modal.component.ts","./src/app/modules/modal/components/delete-section-modal/delete-section-modal.component.html","./src/app/modules/modal/components/copy-derived-datapoint/copy-derived-datapoint.component.html","./src/app/modules/modal/components/copy-derived-datapoint/copy-derived-datapoint.component.ts","./src/app/modules/modal/components/unsubscribe-alert-schedule/unsubscribe-alert-schedule.component.ts","./src/app/modules/modal/components/unsubscribe-alert-schedule/unsubscribe-alert-schedule.component.html","./src/app/modules/modal/components/marine-asset-runtime-modify-modal/marine-asset-runtime-modify-modal-content.component.html","./src/app/modules/modal/components/marine-asset-runtime-modify-modal/marine-asset-runtime-modify-modal-content.component.ts","./src/app/modules/modal/components/modal/modal.component.html","./src/app/modules/modal/components/modal/modal.component.ts","./src/app/components/eula/eula.component.html","./src/app/components/eula/eula.component.ts","./src/app/components/app.component.html","./src/app/components/app.component.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/job-title.ts","./src/app/modules/core/services/favorites.service.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/favorites.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/user-search.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/user-drawer.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/feature-access.effect.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/user-preferences.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/unit-access.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/index.ts","./src/app/modules/dashboard/modules/user-admin/store/effects/asset-notification-recipient.effects.ts","./src/app/modules/dashboard/modules/user-admin/store/user-ui-store/reducer.ts","./src/app/modules/dashboard/modules/user-admin/store/user-ui-store/effects.ts","./src/app/modules/dashboard/modules/user-admin/store/user-ui-store/user-ui-store.module.ts","./src/app/modules/dashboard/modules/user-admin/store/user-store.module.ts","./src/app/modules/report/effects/report.effect.ts","./src/app/modules/report/report-store.module.ts","./src/app/app.module.ts","./src/main.ts","./src/app/modules/involve/map/polylabel.js","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["\r\n \r\n
{{ (options$ | async)?.message }}
\r\n \r\n \r\n \r\n \r\n
\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\n\r\nimport { Observable, Subject, combineLatest } from 'rxjs';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-banner',\r\n templateUrl: 'banner.component.html',\r\n styleUrls: ['banner.component.scss']\r\n})\r\nexport class BannerComponent implements OnInit, OnDestroy {\r\n private _destroyed$ = new Subject();\r\n\r\n isOpen$: Observable;\r\n options$: Observable;\r\n\r\n // animation delay time for banner. Banner animation need to be delayed,\r\n // because drawer closing animation must finish first\r\n private readonly bannerAnimDelayMs = 500;\r\n isBannerOpen = false;\r\n\r\n constructor(\r\n private _store$: Store\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.isOpen$ = this._store$.select(fromRoot.Banner.isOpen);\r\n this.options$ = this._store$.select(fromRoot.Banner.getOptions);\r\n\r\n this.isOpen$.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe((isOpen) => {\r\n if (!isOpen) {\r\n this.isBannerOpen = false;\r\n } else {\r\n setTimeout(() => {\r\n this.isBannerOpen = true;\r\n }, this.bannerAnimDelayMs);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n closeBanner() {\r\n this._store$.dispatch(fromRoot.Banner.Hide());\r\n }\r\n}\r\n","
\r\n \r\n
    \r\n
  1. \r\n \r\n
  2. \r\n \r\n
  3. \r\n \r\n \r\n {{ item.name }}\r\n \r\n \r\n \r\n \r\n {{ item.name }}\r\n \r\n \r\n
  4. \r\n
\r\n\r\n \r\n
    \r\n
  1. \r\n \r\n
  2. \r\n \r\n \r\n
  3. \r\n \r\n \r\n .../\r\n \r\n \r\n {{option.name}}\r\n \r\n \r\n {{ item.name }}\r\n
  4. \r\n
    \r\n
\r\n\r\n \r\n 0 && dropdownOptions[0].hideButtons? false : true\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n 0\">\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
{{ timeLeft }}s
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{reloadActivated ? 'Disable Refresh' : 'Enable Refresh' }}\r\n \r\n \r\n \r\n \r\n \r\n Refresh\r\n {{ timeLeft }}s\r\n \r\n \r\n\r\n \r\n \r\n \r\n Favorite\r\n \r\n\r\n \r\n \r\n Home\r\n \r\n\r\n \r\n \r\n \r\n {{option.label}}\r\n \r\n \r\n
","import { Action } from '@ngrx/store';\r\nimport {\r\n Component,\r\n Input,\r\n OnInit,\r\n OnDestroy,\r\n OnChanges,\r\n SimpleChanges,\r\n ChangeDetectorRef,\r\n} from '@angular/core';\r\n\r\n\r\nimport { combineLatest, Subject, Observable } from 'rxjs';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromRouter from '@rfv/store/router';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport * as fromDataTile from '@rfv/modules/tiles/reducers/unit-data.reducer';\r\n\r\nimport * as fromPresentAlarms from '@rfv/modules/dashboard/modules/current-present-alarms/reducers';\r\nimport * as fromRuntimeMetrics from '@rfv/modules/tiles/reducers/runtime-metrics.reducer';\r\nimport * as fromSystemEventDiagnosticTile from '@rfv/modules/core/store/system-event-diagnostics/selectors';\r\nimport * as fromAlarmsTile from '@rfv/modules/tiles/reducers/alarms-tile.reducer';\r\nimport * as fromUnitInfo from '@rfv/modules/tiles/reducers/unit-info.reducer';\r\nimport * as fromCreatedReports from '@rfv/modules/report/reducers';\r\nimport * as fromReports from '@rfv/modules/report/reducers';\r\nimport * as userFavoriteActions from '@rfv/modules/dashboard/modules/user-admin/store/actions/favorites.actions';\r\n\r\nimport { BreadcrumbItem, Tile, BreadcrumbOptions, Dashboard, SitemapGroup, Asset } from '@rfv/modules/core/models';\r\n\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { TileHeaderButton } from '@rfv/modules/shared/components/tile-header/tile-header-button.model';\r\nimport { TileHeaderButtons } from '@rfv/modules/shared/components/tile-header/tile-header.buttons';\r\nimport { loadActions } from '@rfv/modules/dashboard/lookups/load-actions';\r\nimport { MenuItem } from '@rfv/modules/shared/model/menu-item.model';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'breadcrumb-toolbar',\r\n templateUrl: 'breadcrumb-toolbar.component.html',\r\n styleUrls: ['breadcrumb-toolbar.component.scss'],\r\n})\r\nexport class BreadcrumbToolbarComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input()\r\n public title: string;\r\n\r\n @Input()\r\n public showSelectedPath: boolean = true;\r\n\r\n @Input()\r\n public maxPath: number = 0; // 0 for no limit\r\n\r\n @Input()\r\n public showSelectedDashboard: boolean = true;\r\n\r\n @Input()\r\n public showSelectedTile: boolean = true;\r\n\r\n @Input()\r\n public showSelectedSitemapGroup: boolean = true;\r\n\r\n @Input()\r\n public showSelectedAsset: boolean = true;\r\n\r\n @Input()\r\n public canReload: boolean = true;\r\n\r\n @Input()\r\n public isReloading: boolean = false;\r\n\r\n @Input() public canFavorite: boolean = true;\r\n\r\n @Input()\r\n public dropdownOptions: any;\r\n public mobileDropdownOptions: MenuItem[];\r\n\r\n public items: BreadcrumbItem[];\r\n public itemsExcludingHighlight: BreadcrumbItem[];\r\n public buttonsForHeader: TileHeaderButton[];\r\n\r\n private selectedTileId: number = null;\r\n currentRefreshRate: { refreshRate: number } = null;\r\n\r\n public pollColor = '';\r\n public status = '';\r\n public isCommandStateLoading: boolean;\r\n refreshActionIds = null;\r\n refreshRate = 0;\r\n\r\n isTileLoading = false;\r\n\r\n hideReload: boolean = false;\r\n hideFavorite: boolean = false;\r\n\r\n private _refresh$ = new Subject();\r\n private _destroyed$ = new Subject();\r\n private isReloadHidden$: Observable;\r\n private isFavoriteHidden$: Observable;\r\n\r\n private unitDataLoading$: Observable;\r\n private unitEventsLoading$: Observable;\r\n\r\n\r\n private PresentAlarmsIsLoading$: Observable;\r\n private RuntimeMetricsIsLoading$: Observable;\r\n private SystemEventDiagnosticsTileIsLoading$: Observable;\r\n private AlarmsTileIsLoading$: Observable;\r\n private UnitInfoIsLoading$: Observable;\r\n private ReportHistoryIsLoading$: Observable;\r\n private ReportSchedulesIsLoading$: Observable;\r\n\r\n\r\n // Quick and dirty solution mainly for trends screen (and other screens if needed).\r\n // This problem needs further discussion how to handle full screens without tile\r\n private _excludedFsWithNoRefresh = [24, 60]; // Screen without refresh button\r\n private _excludedFsWithManualRefresh = []; // Screens with manual refresh\r\n\r\n public url: string;\r\n\r\n\r\n\r\n constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private _store: Store,\r\n private _tileHeaderButtons: TileHeaderButtons,\r\n private _route: ActivatedRoute\r\n ) { }\r\n\r\n ngOnInit() {\r\n this._store.pipe(\r\n select(fromRouter.getUrl)\r\n ).subscribe(url => {\r\n this.url = url.split(\"/\").join(\"\");\r\n });\r\n\r\n this._store.pipe(\r\n select(fromCore.getBreadcrumbButtons),\r\n ).subscribe((buttons) => {\r\n this.createHeaderButtons(buttons);\r\n }\r\n );\r\n\r\n combineLatest([\r\n this._store.select(fromCore.getBreadcrumbOptions),\r\n this._store.select(fromDashboard.getSelectedDashboard),\r\n this._store.select(fromDashboard.getSelectedTileId),\r\n this._store.select(fromDashboard.getSelectedTile),\r\n this._store.select(fromCore.SitemapGroups.getRoot),\r\n this._store.select(fromDashboard.getSelectedPath),\r\n this._store.select(fromDashboard.getSelectedSitemapGroup),\r\n this._store.select(fromDashboard.getSelectedAsset),\r\n this._store.select(fromCore.AssetTypes.getDashboards),\r\n this._store.select(fromRoot.Layout.getDrawerOpenState),\r\n this._store.select(fromRoot.Layout.getFormUpdateState),\r\n this._store.select(fromDashboard.getReloadDisactivated),\r\n this._store.select(fromDashboard.getIsReloadHidden),\r\n this._store.select(fromDashboard.getIsFavoriteHidden)\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(([\r\n options,\r\n selectedDashboard,\r\n selectedTileId,\r\n selectedTile,\r\n root,\r\n selectedPath,\r\n selectedSitemapGroup,\r\n selectedAsset,\r\n getDashboards,\r\n drawerOpen,\r\n formUpdated,\r\n reloadDisactivated,\r\n isReloadHidden\r\n ]) => {\r\n this.initRefresh(isReloadHidden, drawerOpen, formUpdated, reloadDisactivated, selectedTile, selectedTileId);\r\n this.createBreadcrumbItems(\r\n options,\r\n selectedDashboard,\r\n selectedTile,\r\n root,\r\n selectedPath,\r\n selectedSitemapGroup,\r\n selectedAsset,\r\n getDashboards\r\n );\r\n\r\n this._refresh$.next();\r\n });\r\n\r\n this.PresentAlarmsIsLoading$ = this._store.select(fromPresentAlarms.selectPresentAlarmsIsLoading);\r\n this.RuntimeMetricsIsLoading$ = this._store.select(fromRuntimeMetrics.getLoading);\r\n this.SystemEventDiagnosticsTileIsLoading$ = this._store.select(fromSystemEventDiagnosticTile.isLoading);\r\n this.AlarmsTileIsLoading$ = this._store.select(fromAlarmsTile.getLoading);\r\n this.UnitInfoIsLoading$ = this._store.select(fromUnitInfo.getUnitInfoLoading);\r\n this.ReportHistoryIsLoading$ = this._store.select(fromCreatedReports.getReportHistoryLoading);\r\n this.ReportSchedulesIsLoading$ = this._store.select(fromReports.getReportSchedulesLoading);\r\n\r\n combineLatest([\r\n this.PresentAlarmsIsLoading$,\r\n this.RuntimeMetricsIsLoading$,\r\n this.SystemEventDiagnosticsTileIsLoading$,\r\n this.AlarmsTileIsLoading$,\r\n this.UnitInfoIsLoading$,\r\n this.ReportHistoryIsLoading$,\r\n this.ReportSchedulesIsLoading$,\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(([\r\n presentAlarmsTileLoading,\r\n runtimeMetricsTileLoading,\r\n systemEventDiagnosticsTileIsLoading,\r\n alarmsTileLoading,\r\n unitInfoTileLoading,\r\n reportHistoryTileLoading,\r\n reportSchedulesTileLoading,\r\n ]) => {\r\n\r\n this.isTileLoading = presentAlarmsTileLoading || runtimeMetricsTileLoading\r\n || systemEventDiagnosticsTileIsLoading || alarmsTileLoading || unitInfoTileLoading || reportHistoryTileLoading\r\n || reportSchedulesTileLoading;\r\n\r\n this.setLoading(this.isTileLoading);\r\n });\r\n\r\n this._store.select(fromDashboard.getIsReloadHidden).subscribe(v => this.hideReload = v);\r\n this._store.select(fromDashboard.getIsFavoriteHidden).subscribe(v => this.hideFavorite = v);\r\n //AppDynamics\r\n //AppDynamics virtual page names for UX module. Task 15308 5/12/21\r\n const ADRUM = window['ADRUM'];\r\n\r\n if (ADRUM) {\r\n let virtualPageName = '';\r\n this.items.forEach(item =>\r\n virtualPageName += item.name + ' '\r\n );\r\n ADRUM.command(\"setVirtualPageName\", virtualPageName);\r\n }\r\n\r\n this._store.select(fromDashboard.getReloadDisactivated).pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe((isDisactivated) => {\r\n this.reloadActivated = !isDisactivated;\r\n this._cdr.detectChanges();\r\n });\r\n this.setTimerProps();\r\n\r\n combineLatest([\r\n this._store.select(fromUser.getFavoriteId),\r\n this._store.select(fromUser.getFavoriteObj),\r\n this._store.select(fromDashboard.getSelectedDashboardId),\r\n this._store.select(fromDashboard.getSelectedTileId),\r\n this._store.select(fromDashboard.getSelectedAssetId),\r\n this._store.select(fromDashboard.getSelectedSitemapGroupId)\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(([favoriteId, favoriteObj, selectedDashboardId, selectedTileId, selectedAssetId, selectedSitemapGroupId]) => {\r\n this.favoriteId = favoriteId;\r\n this.currentDashboardId = selectedDashboardId;\r\n this.isDefault = favoriteObj && favoriteObj.IsDefault || false;\r\n\r\n this._cdr.detectChanges();\r\n\r\n this.favoriteObject = {\r\n dashboardId: selectedDashboardId,\r\n tileId: selectedTileId,\r\n assetId: selectedAssetId,\r\n sitemapGroupId: selectedSitemapGroupId\r\n };\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._refresh$.complete();\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n this.clearTimer();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this._refresh$.next();\r\n }\r\n\r\n onBack() {\r\n this._store.dispatch(fromRoot.Router.Back());\r\n }\r\n\r\n onReload() {\r\n if (this.selectedTileId) {\r\n this.reloadFullscreen();\r\n } else {\r\n this._store.dispatch(fromDashboard.Reload());\r\n }\r\n }\r\n\r\n onItemClick(item: BreadcrumbItem) {\r\n if (this.isUrlEqualToLink(item.link) || item.highlight) return;\r\n if (item && item.link) {\r\n this._store.dispatch(fromRoot.Router.Go(item.link));\r\n }\r\n }\r\n\r\n private reloadFullscreen() {\r\n for (const actionId of this.refreshActionIds) {\r\n if (loadActions[actionId]) this._store.dispatch({ type: loadActions[actionId], payload: {} });\r\n }\r\n }\r\n\r\n buttonClick(button: TileHeaderButton) {\r\n if (button) {\r\n button.action(this.selectedTileId);\r\n }\r\n }\r\n\r\n dropdownButtonClick(item: MenuItem) {\r\n if (item.routerLink) {\r\n if (item.routerLink.indexOf('.') > -1) {\r\n this._store.dispatch(fromRoot.Router.Go([item.routerLink], { relativeTo: this._route, queryParams: item.queryParams }));\r\n } else {\r\n this._store.dispatch(fromRoot.Router.Go([item.routerLink], { queryParams: item.queryParams }));\r\n }\r\n }\r\n if (item.action) {\r\n this._store.dispatch(item.action);\r\n }\r\n if (item.callback) {\r\n item.callback();\r\n }\r\n }\r\n\r\n public selectFromCommandState() {\r\n combineLatest(\r\n this._store.select(fromDataTile.getCommandStateLoading),\r\n this._store.select(fromDataTile.getCommandState)\r\n ).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([loading, commandState]) => {\r\n this.isCommandStateLoading = loading;\r\n this.pollColor = this.getPollStatusColor(loading ? -1 : commandState);\r\n this.status = this.getStatus(loading ? -1 : commandState);\r\n this._cdr.markForCheck();\r\n });\r\n }\r\n\r\n getPollStatusColor(commandState: number): string {\r\n return commandState === 0 ? '#E69327' // yellow\r\n : commandState === 1 ? '#E69327' // orange\r\n : commandState === 3 ? '#A3E700' // green\r\n : commandState === 4 ? '#ED1C2E' // red\r\n : commandState === 6 ? '#ED1C2E' // red\r\n : commandState === 8 ? '#ED1C2E' // red\r\n : null; // regular yellow\r\n }\r\n\r\n getStatus(commandState: number): string {\r\n return commandState === -1 ? 'Loading...'\r\n : commandState === 0 ? 'Queued'\r\n : commandState === 1 ? 'Sent'\r\n : commandState === 3 ? 'Successful'\r\n : commandState === 4 ? 'Failed'\r\n : commandState === 6 ? 'Failed'\r\n : commandState === 8 ? 'Failed'\r\n : 'Ready to Poll';\r\n }\r\n\r\n onReloadActiveStateUpdated(reloadState: 'activate' | 'disactivate') {\r\n if (reloadState === 'activate') {\r\n this._store.dispatch(fromDashboard.activateReload());\r\n } else {\r\n this._store.dispatch(fromDashboard.disactivateReload());\r\n }\r\n }\r\n\r\n private setRefreshTimer(selectedTile: Tile, isReloadHidden: boolean) {\r\n\r\n this.refreshActionIds = selectedTile.actionIds;\r\n this.refreshRate = isReloadHidden ? -1 : selectedTile.refreshRate;\r\n this.setRefreshRate(this.refreshRate);\r\n }\r\n\r\n private initRefresh(\r\n isReloadHidden: boolean,\r\n drawerOpen: boolean,\r\n formUpdated: boolean,\r\n reloadDisactivated: boolean,\r\n selectedTile: Tile,\r\n selectedTileId: number) {\r\n this.selectedTileId = selectedTileId;\r\n\r\n if (\r\n drawerOpen === true ||\r\n formUpdated === true ||\r\n reloadDisactivated === true &&\r\n !this._excludedFsWithNoRefresh.includes(selectedTileId)\r\n ) {\r\n this.refreshRate = 0;\r\n this.setRefreshRate(this.refreshRate);\r\n } else {\r\n if (selectedTile) {\r\n this.setRefreshTimer(selectedTile, isReloadHidden);\r\n }\r\n else {\r\n // If tile for full screen does not exist and FS should be without refresh button.\r\n // Default is manual refresh\r\n this.refreshRate = this._excludedFsWithNoRefresh.includes(selectedTileId) ? -1 : 0;\r\n this.setRefreshRate(this.refreshRate);\r\n }\r\n }\r\n }\r\n\r\n private createBreadcrumbItems(\r\n options: BreadcrumbOptions,\r\n selectedDashboard: Dashboard,\r\n selectedTile: Tile,\r\n root: SitemapGroup,\r\n selectedPath: SitemapGroup[],\r\n selectedSitemapGroup: SitemapGroup,\r\n selectedAsset: Asset,\r\n getDashboards\r\n ) {\r\n const items: BreadcrumbItem[] = [];\r\n\r\n // todo @modonnell\r\n if (options && options.dropdownOptions && options.dropdownOptions.length > 0) {\r\n this.dropdownOptions = options.dropdownOptions;\r\n this.mobileDropdownOptions = (options.dropdownOptions as MenuItem[]).filter(item => !item.hideFromMobile);\r\n }\r\n else {\r\n this.dropdownOptions = this.mobileDropdownOptions = [];\r\n }\r\n\r\n\r\n if (selectedPath && this.showSelectedPath) {\r\n if (this.maxPath) {\r\n selectedPath = selectedPath.slice(-this.maxPath);\r\n }\r\n\r\n\r\n items.push(...selectedPath.map(sitemapGroup => {\r\n const item: BreadcrumbItem = {\r\n name: sitemapGroup.name,\r\n highlight: false,\r\n };\r\n\r\n const availableDashboards = getDashboards(sitemapGroup.assetTypeId);\r\n\r\n if (availableDashboards && availableDashboards.length) {\r\n // preserve the dashboard when moving between sitemapGroups if possible\r\n if (selectedDashboard && availableDashboards.find(dashboard => dashboard.id === selectedDashboard.id)) {\r\n item.link = ['dashboard', selectedDashboard.id, 'sitemapGroup', sitemapGroup.id];\r\n } else { // otherwise select the first available dashboard\r\n item.link = ['dashboard', availableDashboards[0].id, 'sitemapGroup', sitemapGroup.id];\r\n }\r\n }\r\n\r\n return item;\r\n }));\r\n }\r\n\r\n if (this.showSelectedSitemapGroup && !selectedAsset) {\r\n const sitemapGroup = selectedSitemapGroup || root;\r\n\r\n const item: BreadcrumbItem = {\r\n name: sitemapGroup && sitemapGroup.name,\r\n highlight: true\r\n };\r\n\r\n const availableDashboards = sitemapGroup && getDashboards(sitemapGroup.assetTypeId) || [];\r\n\r\n if (availableDashboards && availableDashboards.length) {\r\n // preserve the dashboard when moving between sitemapGroups if possible\r\n if (selectedDashboard && availableDashboards.find(dashboard => dashboard.id === selectedDashboard.id)) {\r\n item.link = ['dashboard', selectedDashboard.id, 'sitemapGroup', sitemapGroup.id];\r\n } else { // otherwise select the first available dashboard\r\n item.link = ['dashboard', availableDashboards[0].id, 'sitemapGroup', sitemapGroup.id];\r\n }\r\n }\r\n\r\n items.push(item);\r\n }\r\n\r\n if (selectedDashboard && selectedAsset && this.showSelectedAsset) {\r\n var link = selectedDashboard.isAdmin ? ['dashboard', selectedDashboard.id, 'asset', selectedAsset.id, 'admin'] : ['dashboard', selectedDashboard.id, 'asset', selectedAsset.id];\r\n items.push(({\r\n name: selectedAsset.name,\r\n highlight: true,\r\n link: link\r\n }));\r\n }\r\n\r\n if (selectedDashboard && this.showSelectedDashboard) {\r\n const item: BreadcrumbItem = {\r\n name: selectedDashboard.name,\r\n link: ['dashboard', selectedDashboard.id]\r\n };\r\n\r\n if (selectedAsset) {\r\n item.link.push('asset', selectedAsset.id);\r\n }\r\n\r\n if (selectedSitemapGroup) {\r\n item.link.push('sitemapGroup', selectedSitemapGroup.id);\r\n }\r\n\r\n items.push(item);\r\n }\r\n\r\n if (selectedTile && this.showSelectedTile) {\r\n items.push({\r\n name: selectedTile.name\r\n });\r\n }\r\n\r\n if (this.title) {\r\n items.push({\r\n name: this.title\r\n });\r\n }\r\n\r\n this.items = items;\r\n\r\n //header rfv logo button clicked\r\n if (this.url === '') {\r\n this.items.splice(1);\r\n }\r\n\r\n this.itemsExcludingHighlight = this.items.filter(item => 'highlight' in item && !item.highlight);\r\n this._cdr.markForCheck();\r\n }\r\n\r\n private createHeaderButtons(buttons: string[]) {\r\n if (buttons) {\r\n this.buttonsForHeader = this._tileHeaderButtons.createHeaderButtons(buttons);\r\n this.selectFromCommandState();\r\n } else {\r\n this.buttonsForHeader = [];\r\n }\r\n }\r\n\r\n public isUrlEqualToLink(link: any[]): boolean {\r\n if (!link) {\r\n return true;//exception for last item in breadcrumb\r\n }\r\n if (this.url && link) {\r\n return this.url === link.toString().split(\",\").join(\"\");\r\n }\r\n }\r\n\r\n public dispatch(action: Action) {\r\n this._store.dispatch(action);\r\n }\r\n\r\n\r\n /**\r\n * PUTTING REFRESH BUTTON COMPONENT LOGIC HERE UNTIL REWORK\r\n */\r\n @Input() refreshAnimationLength = 1000;\r\n @Input() timeStep = 1000;\r\n\r\n @Input()\r\n public setLoading(value: boolean) {\r\n clearTimeout(this.refreshTimeout);\r\n this._loading = value;\r\n }\r\n public get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n @Input() setRefreshRate(rate: number) {\r\n this.rate = rate;\r\n this.setTimerProps();\r\n }\r\n\r\n _loading = false;\r\n rate: number;\r\n timeLeft: number = null;\r\n refreshTimeout;\r\n interval;\r\n reloadActivated = true;\r\n\r\n onRefreshIconClick() {\r\n if (!this.reloadActivated) {\r\n return;\r\n }\r\n this.timeLeft = this.rate;\r\n this.onReload();\r\n this.startRefreshAnimation();\r\n }\r\n\r\n toggleReloadActiveState() {\r\n if (!this.reloadActivated) {\r\n this._store.dispatch(fromDashboard.activateReload());\r\n } else {\r\n this._store.dispatch(fromDashboard.disactivateReload());\r\n }\r\n }\r\n\r\n private setTimerProps() {\r\n this.clearTimer();\r\n\r\n if (this.rate > 0) {\r\n this.timeLeft = this.rate;\r\n this.startTimer();\r\n }\r\n }\r\n\r\n private startTimer() {\r\n this.interval = setInterval(() => {\r\n if (this.timeLeft > 0) {\r\n this.timeLeft--;\r\n this._cdr.detectChanges();\r\n } else {\r\n this.onRefreshIconClick();\r\n this._cdr.detectChanges();\r\n }\r\n }, this.timeStep);\r\n }\r\n\r\n private clearTimer() {\r\n clearInterval(this.interval);\r\n }\r\n\r\n private startRefreshAnimation() {\r\n this._loading = true;\r\n this.refreshTimeout = setTimeout(() => {\r\n this._loading = false;\r\n this._cdr.detectChanges();\r\n }, this.refreshAnimationLength);\r\n }\r\n\r\n /**\r\n * PUTTING FAVORITE/HOME BUTTON COMPONENT LOGIC HERE UNTIL REWORK\r\n */\r\n assetId: number;\r\n assetType: string;\r\n dashboardId: number;\r\n fullscreenId: number;\r\n\r\n selectedFavoriteId$: Observable;\r\n favoriteId: number;\r\n favoriteObj: {};\r\n isDefault: boolean;\r\n favoriteObject: any = {};\r\n currentDashboardId: number;\r\n\r\n onToggleFavorite() {\r\n if (this.favoriteId) {\r\n this._store.dispatch(userFavoriteActions.DeleteFavorites(this.favoriteId));\r\n } else {\r\n this._store.dispatch(userFavoriteActions.CreateFavorites(this.favoriteObject, false));\r\n }\r\n }\r\n\r\n onToggleHome() {\r\n if (this.favoriteId) {\r\n this._store.dispatch(userFavoriteActions.ToggleSetHome(this.favoriteId));\r\n } else {\r\n this._store.dispatch(userFavoriteActions.CreateFavorites(this.favoriteObject, true));\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n

{{platformName || \"Cat® Remote Fleet Vision\"}}

\r\n \r\n
\r\n
\r\n \r\n \r\n {{ customer.Name }}\r\n \r\n \r\n
\r\n
","// angular\r\nimport { Component, OnInit, Input } from '@angular/core';\r\n\r\n// rxjs\r\nimport { Observable } from 'rxjs';\r\n\r\n// ngrx\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n// rfv\r\nimport { Customer } from '@rfv/modules/core/models';\r\nimport { Router } from '@angular/router';\r\nimport { AppSettingsService } from '@rfv/modules/core/services';\r\n\r\n@Component({\r\n selector: 'app-customer-access',\r\n templateUrl: 'customer-access.component.html',\r\n styleUrls: [ 'customer-access.component.scss' ]\r\n})\r\nexport class CustomerAccessComponent implements OnInit {\r\n @Input() isFullScreenMode = false;\r\n\r\n public customers$: Observable;\r\n public selectedCustomer$: Observable;\r\n public platformName: string = this._appSettingsService.getPlatformName();\r\n public customerLogoPath$: Observable;\r\n\r\n\r\n public constructor(\r\n private _store: Store,\r\n private router: Router,\r\n private _appSettingsService: AppSettingsService\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.customers$ = this._store.select(fromCore.Customers.getAll);\r\n this.selectedCustomer$ = this._store.select(fromCore.Customers.getSelected);\r\n this.customerLogoPath$ = this._store.select(fromCore.UserSession.getSelectedCustomerLogoPath);\r\n }\r\n\r\n public onSelect(customer: Customer) {\r\n const isReportEmailLink = this.router.url.includes(\"emailAttachments\");\r\n\r\n this._store.dispatch(fromCore.Customers.Switch(customer.Id, isReportEmailLink ? this.router.url : '/', false, { customerName: customer.Name }));\r\n }\r\n}\r\n","\r\n\r\n","import { Component } from \"@angular/core\";\r\nimport { OneTrustService } from \"../../services/onetrust.service\";\r\n\r\n@Component({\r\n selector: 'rfv-footer',\r\n templateUrl: 'footer.component.html',\r\n styleUrls: ['footer.component.scss']\r\n})\r\nexport class FooterComponent {\r\n\r\n public constructor(\r\n public oneTrustService: OneTrustService\r\n ) { }\r\n}\r\n","
\r\n
\r\n \r\n

{{ (customer$ | async)?.PlatformName }}

\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n {{ customer.Name }}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n

{{ (selectedTile$ | async)?.name || (selectedDashboard$ | async)?.name }}

\r\n
\r\n Filter: \r\n {{ (selectedFilterName$ | async) || 'All Units'}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n {{ customer.Name }}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
{{count}}
\r\n
\r\n \r\n\r\n \r\n \r\n You have {{ count | involvePlural: 'unread notification'}}. Mark All as Read\r\n \r\n \r\n You have no unread notifications.\r\n \r\n \r\n\r\n \r\n \r\n You have no notifications.\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{notification.name}}: {{this.assetEntities[$any(notification).assetId].name}}\r\n
Status: {{notification.message}}
\r\n
{{notification.timestamp.toLocaleString()}}
\r\n
\r\n \r\n {{notification.name}}: {{this.assetEntities[$any(notification).assetId].name}}\r\n
Status: {{notification.message}}
\r\n
{{notification.timestamp.toLocaleString()}}
\r\n
\r\n \r\n {{notification.name}}: {{this.assetEntities[$any(notification).assetId].name}}\r\n
Status: {{notification.message}}
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
{{notification.timestamp.toLocaleString()}}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
{{ initials$ | async }}
{{ fullName$ | async }}\r\n
\r\n \r\n {{ dashboard.name }}\r\n \r\n \r\n Sign Out\r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n
\r\n {{ customer.HelpContactName }}\r\n \r\n
\r\n If you need immediate assistance:\r\n {{ customer.HelpContactPhone }}\r\n
\r\n \r\n
\r\n If you are calling from outside the United States:\r\n {{ customer.HelpContactPhoneIntl }}\r\n
\r\n\r\n
\r\n {{helpLinkLabel}}\r\n {{helpLinkName}}\r\n
\r\n\r\n \r\n
\r\n
\r\n Policy Documents:\r\n EULA\r\n Privacy Statement\r\n Cookie Policy\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n {{ link.text }}\r\n {{ link.text }}\r\n {{ link.text }}\r\n \r\n
\r\n \r\n
\r\n
\r\n v. {{ version }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\n/* RxJS */\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil, tap } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\nimport * as supportModal from '@rfv/modules/support/store/support-modal-messages';\r\n\r\nimport * as globalFilterActions from '@rfv/modules/global-filter/actions';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\n\r\n/* Models */\r\nimport { Asset, Customer } from '@rfv/modules/core/models';\r\nimport { Dashboards, Tiles } from '@rfv/modules/core/enums';\r\n\r\n/* Actions */\r\nimport { FavoritesActions, ColorThemeActions, AssetNamePreferenceActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\n\r\n/* Delete confirm payload */\r\nimport { AppSettingsService } from '../../services';\r\nimport { InvolveMenuComponent } from '@rfv/modules/involve/menu/menu.component';\r\n\r\n@Component({\r\n selector: 'rfv-header',\r\n templateUrl: 'header.component.html',\r\n styleUrls: ['header.component.scss']\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n\r\n public adminDashboards$ = this._store$.select(fromDashboard.getAdminDashboards);\r\n public isMainMenuOpen$ = this._store$.select(fromRoot.Layout.isMainMenuOpen);\r\n public customer$ = this._store$.select(fromCore.Customers.getSelected);\r\n public customerLogo$ = this._store$.select(fromCore.UserSession.getSelectedCustomerLogoPath);\r\n public eula$ = this._store$.select(fromRoot.Eula.getEulaSettings);\r\n public themeId$ = this._store$.select(fromCore.UserSession.getSessionThemeId);\r\n public user$ = this._store$.select(fromCore.UserSession.getSession);\r\n\r\n public selectedDashboard$ = this._store$.select(fromDashboard.getSelectedDashboard);\r\n public selectedTile$ = this._store$.select(fromDashboard.getSelectedTile);\r\n\r\n private _destroyed$ = new Subject(); \r\n public assetEntities: Dictionary; \r\n\r\n public fullName$ = this.user$.pipe(\r\n map(user => user ? user.FirstName + ' ' + user.LastName : null)\r\n );\r\n\r\n public initials$ = this.user$.pipe(\r\n map(user => user ? user.FirstName[0] + user.LastName[0] : null)\r\n );\r\n\r\n public sortedNotifications$ = this._store$.select(fromCore.Notifications.getSorted);\r\n public notificationCount$ = this._store$.select(fromCore.Notifications.getTotal);\r\n public unacknowledgedNotificationCount$ = this._store$.select(fromCore.Notifications.getUnacknowledgedCount);\r\n \r\n public supportOverlayOpen = false;\r\n\r\n public showFilter$ = this._store$.pipe(\r\n select(fromDashboard.getSelectedAssetId),\r\n map(assetId => !assetId)\r\n );\r\n \r\n public selectedFilterName$ = this._store$.select(fromGlobalFilter.getSelectedFilterName);\r\n\r\n public links = this._appSettingsService.getLinks();\r\n public version = this._appSettingsService.getVersion();\r\n\r\n public helpLinkLabel: string = this._appSettingsService.getHelpLinkLabel();\r\n public helpLinkName: string = this._appSettingsService.getHelpLinkName();\r\n\r\n public customers$: Observable;\r\n public selectedCustomer$: Observable;\r\n\r\n @ViewChild('notifications')\r\n private _notificationsMenu: InvolveMenuComponent;\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private _appSettingsService: AppSettingsService,\r\n private router: Router,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n\r\n this._store$.pipe(\r\n select(fromCore.Assets.Entities.getEntities),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(assetEntities => this.assetEntities = assetEntities)\r\n\r\n this.customers$ = this._store$.select(fromCore.Customers.getAll);\r\n this.selectedCustomer$ = this._store$.select(fromCore.Customers.getSelected);\r\n\r\n // Dispatch to load favorites\r\n this._store$.dispatch(FavoritesActions.Load());\r\n\r\n // Dispatch action to load saved global filters\r\n this._store$.dispatch(globalFilterActions.SavedFiltersActions.Load());\r\n\r\n // Load color themes\r\n this._store$.dispatch(ColorThemeActions.loadColorTheme());\r\n\r\n //Load asset name options\r\n this._store$.dispatch(AssetNamePreferenceActions.LoadAssetNamePreference()); \r\n\r\n // TODO(modonnell): remove me, reload refactor needed\r\n this._store$.pipe(\r\n select(fromRoot.Router.getAllRouterParams),\r\n tap((params) => {\r\n this._store$.dispatch(fromDashboard.activateReload());\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n public toggleSideNav() {\r\n this._store$.dispatch(fromRoot.Layout.ToggleMainMenu());\r\n }\r\n \r\n notificationDeleteClick(notificationId: number) {\r\n this._store$.dispatch(fromCore.Notifications.Delete(notificationId))\r\n }\r\n\r\n notificationAcknowledge(notificationId: number){\r\n this._store$.dispatch(fromCore.Notifications.Acknowledge(notificationId, true))\r\n }\r\n\r\n notificationAcknowledgeAll() {\r\n this._store$.dispatch(fromCore.Notifications.AcknowledgeAll());\r\n }\r\n\r\n goToUnitData(assetId: number){\r\n this._notificationsMenu.toggle();\r\n this._store$.dispatch(fromDashboard.NavigateToAsset(assetId, Tiles.unitData));\r\n }\r\n\r\n goToUnitControls(assetId: number){\r\n this._notificationsMenu.toggle();\r\n this._store$.dispatch(fromDashboard.NavigateToAsset(assetId, Tiles.controls));\r\n }\r\n\r\n goToHardwareConfig(unitCreationLogId: number){\r\n this._notificationsMenu.toggle();\r\n this._store$.dispatch(fromRoot.Router.Go(['dashboard', Dashboards.SupportSuite, 'sitemapGroup', 1, 'fullscreen', Tiles.addNewUnit, unitCreationLogId, 5]));\r\n }\r\n\r\n public rebootDevice(unitCreationLogId: number, assetId: number, notificationId: number) {\r\n this._store$.dispatch(fromRoot.Modal.Open({ options: supportModal.rebootDeviceYesNo(unitCreationLogId, assetId) }));\r\n this._store$.dispatch(fromCore.Notifications.Delete(notificationId)); \r\n }\r\n\r\n getAssetName(assetId: number){\r\n this._store$.dispatch(fromSitemap.LoadUnitToEdit(assetId));\r\n }\r\n\r\n public handleLogout(){\r\n this._store$.dispatch(fromCore.Auth.Logout());\r\n }\r\n \r\n public handleFilters() {\r\n this._store$.dispatch(fromRoot.Layout.CloseGlobalFilter());\r\n }\r\n\r\n handleRedirectingStorage() {\r\n this._store$.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectSitemapGroupId'));\r\n this._store$.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectAssetId'));\r\n this._store$.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectTileId'));\r\n this._store$.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectParams'));\r\n }\r\n\r\n public onSelect(customer: Customer) {\r\n this.handleRedirectingStorage();\r\n const isReportEmailLink = this.router.url.includes(\"emailAttachments\");\r\n \r\n this._store$.dispatch(fromCore.Customers.Switch(customer.Id, isReportEmailLink ? this.router.url : '/', false, { customerName: customer.Name }));\r\n }\r\n \r\n}\r\n","\r\n
\r\n \r\n \r\n

\r\n Welcome to {{ platformName }}\r\n

\r\n
\r\n

\r\n {{ homeBlurb }}\r\n

\r\n
","import { Component, OnInit, OnDestroy } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map, take, takeWhile, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport { Favorites } from '@rfv/modules/dashboard/modules/user-admin/store/models/favorites.model';\r\nimport { AppSettingsService } from '../../services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromFavorites from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\n\r\n@Component({\r\n selector: 'app-home',\r\n templateUrl: './home.component.html',\r\n styleUrls: ['./home.component.scss']\r\n})\r\nexport class HomeComponent implements OnInit, OnDestroy {\r\n\r\n customerLogo$: Observable;\r\n customerName$: Observable;\r\n platformName$: Observable;\r\n favoritesData$: Observable;\r\n dashboardId: number;\r\n assetId: number;\r\n fullscreenId: number;\r\n sitemapGroupId: number;\r\n tileVersion: number;\r\n componentActive = true;\r\n\r\n homeBlurb: string;\r\n\r\n constructor(\r\n private _appSettings: AppSettingsService,\r\n private _store: Store,\r\n ) {\r\n this.homeBlurb = this._appSettings.getHomeBlurb();\r\n }\r\n\r\n ngOnInit() {\r\n this._store.pipe(\r\n take(1), \r\n select(fromRoot.Storage.getLocalStorage)\r\n ).subscribe(localStorage => {\r\n const sitemapGroupdId = isNaN(+localStorage['RedirectSitemapGroupId']) ? null : +localStorage['RedirectSitemapGroupId'];\r\n const assetId = isNaN(+localStorage['RedirectAssetId']) ? null : +localStorage['RedirectAssetId'];\r\n const tileId = isNaN(+localStorage['RedirectTileId']) ? null : +localStorage['RedirectTileId'];\r\n const params = localStorage['RedirectParams'] as string;\r\n\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectAssetId'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectTileId'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectParams'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectSitemapGroupId'));\r\n\r\n if (assetId) {\r\n setTimeout(() => {\r\n this._store.dispatch(fromDashboard.NavigateToAsset(assetId, tileId, JSON.parse(params)));\r\n }, 1000\r\n )\r\n\r\n } else if (sitemapGroupdId) {\r\n setTimeout(() => {\r\n this._store.dispatch(fromDashboard.NavigateToSitemapGroup(sitemapGroupdId, tileId, JSON.parse(params)));\r\n }, 1000\r\n )\r\n }\r\n });\r\n\r\n this._store.dispatch(fromDashboard.ClearSelectedAsset());\r\n\r\n this.customerName$ = this._store.pipe(\r\n select(fromCore.Customers.getSelected),\r\n map(customer => customer.Name)\r\n );\r\n\r\n this.platformName$ = this._store.pipe(\r\n select(fromCore.Customers.getSelected),\r\n map(customer => customer.PlatformName?.trim())\r\n );\r\n\r\n this.customerLogo$ = this._store.select(fromCore.UserSession.getSelectedCustomerLogoPath);\r\n this.favoritesData$ = this._store.pipe(select(fromFavorites.getFavoritesData));\r\n\r\n this.favoritesData$.pipe(\r\n takeWhile(() => this.componentActive),\r\n withLatestFrom(this._store.select(fromCore.Dashboards.getAll))\r\n ).subscribe(([favoritesData, dashboards]) => {\r\n if (favoritesData && favoritesData.length > 0) {\r\n favoritesData.forEach(favorite => {\r\n const home = favorite.Dashboards.find(dash => dash.IsDefault === true);\r\n if (home) {\r\n this.dashboardId = home.Id;\r\n this.assetId = favorite.AssetId;\r\n this.sitemapGroupId = favorite.SitemapGroupId;\r\n }\r\n\r\n favorite.Dashboards.forEach(dashboard => {\r\n const tileHome = dashboard.Tiles.find(tile => tile.IsDefault === true);\r\n if (tileHome) {\r\n this.dashboardId = dashboard.Id;\r\n this.sitemapGroupId = favorite.SitemapGroupId;\r\n this.assetId = favorite.AssetId;\r\n this.fullscreenId = tileHome.Id;\r\n this.tileVersion = dashboards.find(db => db.id === this.dashboardId)?.tiles.find(t => t.id === this.fullscreenId).version;\r\n }\r\n });\r\n });\r\n\r\n if (!this.fullscreenId) {\r\n if (!this.assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', this.dashboardId, 'sitemapGroup', this.sitemapGroupId]));\r\n } else {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', this.dashboardId, 'asset', this.assetId]));\r\n }\r\n } else {\r\n if (this.tileVersion === 2) {\r\n if (!this.assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(\r\n ['dashboard', this.dashboardId, 'sitemapGroup', this.sitemapGroupId],\r\n { queryParams: { tileId: this.fullscreenId } }\r\n ))\r\n } else {\r\n this._store.dispatch(fromRoot.Router.Go(\r\n ['dashboard', this.dashboardId, 'asset', this.assetId],\r\n { queryParams: { tileId: this.fullscreenId } }\r\n ))\r\n }\r\n } else {\r\n if (!this.assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(\r\n ['dashboard', this.dashboardId, 'sitemapGroup', this.sitemapGroupId, 'fullscreen', this.fullscreenId]\r\n ));\r\n } else {\r\n this._store.dispatch(fromRoot.Router.Go(\r\n ['dashboard', this.dashboardId, 'asset', this.assetId, 'fullscreen', this.fullscreenId]\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.componentActive = false;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-no-access',\r\n templateUrl: './no-access.component.html',\r\n styleUrls: ['./no-access.component.scss']\r\n})\r\nexport class NoAccessComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","
\r\n \r\n
","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-offline',\r\n templateUrl: 'offline.component.html',\r\n styleUrls: [ 'offline.component.scss' ]\r\n})\r\nexport class OfflineComponent { }\r\n","
\r\n \r\n
","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-page404',\r\n templateUrl: './page404.component.html',\r\n styleUrls: ['./page404.component.scss']\r\n})\r\nexport class Page404Component implements OnInit {\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","
\r\n \r\n
\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n\r\nimport { reducers } from './reducers';\r\n\r\nimport * as fromCore from './effects';\r\n\r\nimport * as fromAggregateAlarmHistory from './aggregate-Alarm-History';\r\nimport * as fromAggregateFleetVitals from './aggregate-fleet-vitals';\r\nimport * as fromAggregateRuntime from './aggregate-runtime';\r\nimport * as fromAlarmGroups from './alarm-groups';\r\nimport * as fromAlarmStates from './alarm-states';\r\nimport * as fromAlarmTests from './alarm-tests';\r\nimport * as fromAlarmTypes from './alarm-types';\r\nimport * as fromAlertSchedules from './alert-schedules';\r\nimport * as fromAlertScheduleTimes from './alert-schedules-times';\r\nimport * as fromAlarmSuppression from './alarm-suppression';\r\nimport * as fromApplications from './applications';\r\nimport * as fromAssets from './assets';\r\nimport * as fromAssetTypes from './assetTypes';\r\nimport * as fromAuth from './auth';\r\nimport * as fromCellularProviders from './cellular-providers';\r\nimport * as fromCommLoss from './comm-loss';\r\nimport * as fromCommLossTypes from './comm-loss-types';\r\nimport * as fromCompanies from './companies';\r\nimport * as fromControlAdmin from './control-admin';\r\nimport * as fromCountries from './countries';\r\nimport * as fromCustomers from './customers';\r\nimport * as fromCustomerUserAccessFilter from './customer-user-access-filters';\r\nimport * as fromDashboards from './dashboards';\r\nimport * as fromDatapoints from './datapoints';\r\nimport * as fromDerivedDataPoints from './derived-data-points';\r\n// import * as fromDerivedDataPointEditor from './derived-data-point-editor';\r\nimport * as fromDealers from './dealers';\r\nimport * as fromDeviceSearchResults from './device-search-results';\r\nimport * as fromECMSerialNumberSuffixes from './ecm-serial-number-suffix';\r\nimport * as fromEMO from './emo';\r\nimport * as fromEventCodes from './event-code';\r\nimport * as fromEventParties from './event-parties';\r\nimport * as fromFeatureAccess from './feature-access';\r\nimport * as fromFleetVitals from './fleet-vitals'\r\nimport * as fromGaugeTypes from './gauge-types';\r\nimport * as fromGeofences from './geofences';\r\nimport * as fromGlobalColors from './global-colors';\r\nimport * as fromGlobalJobTitles from './global-job-titles';\r\nimport * as fromGlobalTimezones from './global-timezones';\r\nimport * as fromGPSConfig from './gps-config';\r\nimport * as fromIcons from './icons';\r\nimport * as fromIndustries from './industries';\r\nimport * as fromLocationGPSHistory from './location';\r\nimport * as fromNotificationTypes from './notification-types';\r\nimport * as fromOnboardingEventLogs from './onboarding-event-logs';\r\nimport * as fromOnboardingQueue from './onboarding-queue';\r\nimport * as fromPlatFormServiceSettings from './platformServiceSettings';\r\nimport * as fromReports from './reports';\r\nimport * as fromSerialNumberPrefixes from './serial-number-prefix';\r\nimport * as fromSitemapGroups from './sitemap-groups';\r\nimport * as fromStreamingTemplates from './streaming-template';\r\nimport * as fromStreamingTemplateConfig from './streaming-template-config';\r\nimport * as fromSupport from './support';\r\nimport * as fromSystemEventDiagnostics from './system-event-diagnostics';\r\nimport * as fromSystemStatus from './system-status';\r\nimport * as fromTiles from './tiles';\r\nimport * as fromTimeIntervalDropdowns from './time-interval-dropdowns';\r\nimport * as fromToolTips from './tool-tips';\r\nimport * as fromTripConfig from './trip-config';\r\nimport * as fromTripSummary from './trip-summary';\r\nimport * as fromUnitsOfMeasure from './units-of-measure';\r\nimport * as fromUnitStates from './unit-states';\r\nimport * as fromUserAlertRecipients from './user-alert-recipients';\r\nimport * as fromUserGlobalFilterDataPointGroup from './user-global-filter-data-point-group';\r\nimport * as fromUserGroups from './user-groups';\r\nimport * as fromUserPermissions from './user-permissions';\r\nimport * as fromUserSession from './user-session';\r\nimport * as fromVIM from './vim';\r\nimport * as fromDealerVim from './dealerVim';\r\nimport * as fromUnitsOfMeasureConversions from './units-of-measure-conversions';\r\nimport * as deviceControls from './device-commands';\r\nimport * as fromUnitControl from './unit-control';\r\nimport * as fromControlHistory from './control-history';\r\nimport * as fromBrands from './brands';\r\n\r\n@NgModule({})\r\nexport class CoreStoreModule {\r\n public static forRoot(): ModuleWithProviders[] {\r\n return [\r\n StoreModule.forFeature('core', reducers),\r\n\r\n EffectsModule.forFeature([\r\n fromCore.Effects,\r\n\r\n fromAggregateAlarmHistory.Effects,\r\n fromAggregateFleetVitals.Effects,\r\n fromAggregateRuntime.Effects,\r\n fromAlarmGroups.Effects,\r\n fromAlarmStates.Effects,\r\n fromAlarmTests.Effects,\r\n fromAlarmTypes.Effects,\r\n fromAlertSchedules.Effects,\r\n fromAlertScheduleTimes.Effects,\r\n fromAlarmSuppression.Effects,\r\n fromApplications.Effects,\r\n fromAssets.Effects,\r\n fromAssetTypes.Effects,\r\n fromAuth.Effects,\r\n fromCellularProviders.Effects,\r\n fromCommLoss.Effects,\r\n fromCommLossTypes.Effects,\r\n fromCompanies.Effects,\r\n fromControlAdmin.Effects,\r\n fromCountries.Effects,\r\n fromCustomers.Effects,\r\n fromCustomerUserAccessFilter.Effects,\r\n fromDashboards.Effects,\r\n fromDatapoints.Effects,\r\n fromDealers.Effects,\r\n fromDerivedDataPoints.Effects,\r\n // fromDerivedDataPointEditor.Effects,\r\n fromDeviceSearchResults.Effects,\r\n fromECMSerialNumberSuffixes.Effects,\r\n fromEMO.Effects,\r\n fromEventCodes.Effects,\r\n fromEventParties.Effects,\r\n fromFeatureAccess.Effects,\r\n fromFleetVitals.Effects,\r\n fromGaugeTypes.Effects,\r\n fromGeofences.Effects,\r\n fromGlobalColors.Effects,\r\n fromGlobalJobTitles.Effects,\r\n fromGlobalTimezones.Effects,\r\n fromGPSConfig.Effects,\r\n fromIcons.Effects,\r\n fromIndustries.Effects,\r\n fromLocationGPSHistory.Effects,\r\n fromNotificationTypes.Effects,\r\n fromOnboardingEventLogs.Effects,\r\n fromOnboardingQueue.Effects,\r\n fromPlatFormServiceSettings.Effects,\r\n fromReports.Effects,\r\n fromSerialNumberPrefixes.Effects,\r\n fromSitemapGroups.Effects,\r\n fromStreamingTemplates.Effects,\r\n fromStreamingTemplateConfig.Effects,\r\n fromSupport.Effects,\r\n fromSystemEventDiagnostics.Effects,\r\n fromSystemStatus.Effects,\r\n fromTiles.Effects,\r\n fromTimeIntervalDropdowns.Effects,\r\n fromToolTips.Effects,\r\n fromTripConfig.Effects,\r\n fromTripSummary.Effects,\r\n fromUnitsOfMeasure.Effects,\r\n fromUnitStates.Effects,\r\n fromUserAlertRecipients.Effects,\r\n fromUserGlobalFilterDataPointGroup.Effects,\r\n fromUserGroups.Effects,\r\n fromUserPermissions.Effects,\r\n fromUserSession.Effects,\r\n fromVIM.Effects,\r\n fromDealerVim.Effects,\r\n fromUnitsOfMeasureConversions.Effects,\r\n deviceControls.Effects,\r\n fromUnitControl.Effects,\r\n fromControlHistory.Effects,\r\n fromBrands.Effects,\r\n ])\r\n ];\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n\r\nimport { reducers } from './reducers';\r\n\r\nimport * as fromNavigation from './navigation';\r\n\r\nimport * as fromUnitCreation from './unit-creation';\r\nimport * as fromDeviceInfo from './device-info';\r\nimport * as fromCommTypeInfoForm from './comms-type-info-form';\r\nimport * as fromCommsLossSettingsForm from './comms-loss-settings-form';\r\nimport * as fromAssignDataPointsForm from './assign-datapoints-form';\r\nimport * as fromHardwareConfigurationForm from './hardware-config-form';\r\nimport * as fromServerUIConfigurationForm from './server-ui-config-form';\r\nimport * as fromRuntimeForm from './runtime-form';\r\nimport * as fromUnitData from './unit-data';\r\nimport * as fromAlarmsForm from './alarms-form';\r\nimport * as fromUnitValidation from './unit-validation';\r\nimport * as fromUnitReview from './unit-review';\r\n\r\n\r\n//used in RMS assign-datapoints and PLE server-ui\r\nimport * as fromLegendEditor from './legend-editor';\r\n\r\n//used in multiple steps\r\nimport * as fromCreateFromExistingAsset from './create-from-existing-asset';\r\n\r\n@NgModule({\r\n imports: [\r\n StoreModule.forFeature('support', reducers),\r\n EffectsModule.forFeature([\r\n fromNavigation.Effects,\r\n fromUnitCreation.Effects,\r\n fromDeviceInfo.Effects,\r\n fromCommTypeInfoForm.Effects,\r\n fromCommsLossSettingsForm.Effects,\r\n fromAssignDataPointsForm.Effects,\r\n fromHardwareConfigurationForm.Effects,\r\n fromServerUIConfigurationForm.Effects,\r\n fromRuntimeForm.Effects,\r\n fromUnitData.Effects,\r\n fromAlarmsForm.Effects,\r\n fromUnitValidation.Effects,\r\n fromUnitReview.Effects,\r\n fromLegendEditor.Effects,\r\n fromCreateFromExistingAsset.Effects\r\n ])\r\n ]\r\n})\r\nexport class SupportStoreModule { }","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n/* RxJS */\r\nimport { map } from 'rxjs/operators';\r\n\r\n/* Models */\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\nimport { FilterCategory } from '@rfv/modules/global-filter/models/filter-category.model';\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { FilterPostCategory } from '@rfv/modules/global-filter/models/filter-post-category.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalFilterService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * Load list of all filters\r\n */\r\n loadSavedGlobalFilters() {\r\n return this._http.get('/v1/globalFilters');\r\n }\r\n\r\n /**\r\n * Load single filter saved by user.\r\n */\r\n loadSavedFilter(id: number) {\r\n const url = `/v1/globalFilters/${id}`;\r\n\r\n return this._http.get(url).pipe(\r\n map(data => mapSavedFilter(data))\r\n );\r\n }\r\n\r\n /**\r\n * Delete selected filter from list of saved filters\r\n * @param id\r\n */\r\n deleteSavedGlobalFilter(id: number) {\r\n const url = `/v1/globalFilters/${id}`;\r\n\r\n return this._http.delete(url);\r\n }\r\n\r\n /**\r\n * Load categories for global filter\r\n */\r\n loadFilterCategories() {\r\n const url = `/v1/globalFilters/categories`;\r\n\r\n return this._http.get(url);\r\n }\r\n\r\n /**\r\n * Load options list for selected category or subcategory\r\n * @param categoryId\r\n * @param subCategoryId\r\n */\r\n loadOptionsList(mergedId: string) {\r\n const [categoryId, subCategoryId] = mergedId.split('-');\r\n const url = `/v1/globalFilters/options?catId=${categoryId}${subCategoryId ? '&subCatId=' + subCategoryId : ''}`;\r\n\r\n return this._http.get(url).pipe(\r\n map(optionsList => optionsList[0])\r\n );\r\n }\r\n\r\n /**\r\n * Save new user global filter and return Observable with id of new saved filter\r\n * @param body\r\n */\r\n saveNewGlobalFilter(body: FilterPostCategory[]) {\r\n const url = `/v1/globalFilters`;\r\n\r\n return this._http.post<[{ userGlobalFilterId: number }]>(url, body);\r\n }\r\n\r\n updateGlobalFilter(body: FilterPostCategory[]) {\r\n const url = `/v1/globalFilters`;\r\n\r\n return this._http.put<[{ userGlobalFilterId: number }]>(url, body);\r\n }\r\n}\r\n\r\nfunction mapSavedFilter(categoriesArray) {\r\n const newSavedFilter = [];\r\n\r\n categoriesArray.forEach(category => {\r\n const { CategoryId, FilterId, FilterLabel, IsTemporary } = category;\r\n\r\n if (category.Options) {\r\n category.Options.forEach(option => {\r\n const subCategoryObj =\r\n newSavedFilter.find(obj => obj.CategoryId === category.CategoryId && obj.SubcategoryId === option.SubcategoryId);\r\n if (subCategoryObj) {\r\n let firstOption = subCategoryObj.Options.find(subOption => subOption.OptionId === option.OptionId);\r\n\r\n if (firstOption && firstOption.OptionId === option.OptionId)\r\n firstOption.Value = `${firstOption.Value + ',' + option.Value}`;\r\n else\r\n subCategoryObj.Options.push(option);\r\n\r\n } else {\r\n newSavedFilter.push({ CategoryId, FilterId, FilterLabel, IsTemporary, SubcategoryId: option.SubcategoryId, Options: [option] });\r\n }\r\n });\r\n } else {\r\n newSavedFilter.push(category);\r\n }\r\n });\r\n return newSavedFilter;\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/* Services */\r\nimport { GlobalFilterService } from '@rfv/modules/global-filter/global-filter.service';\r\n\r\n/* RxJS */\r\nimport { EMPTY, from, of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Action, Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport {\r\n SavedFiltersActions,\r\n CategoriesActions,\r\n OptionsActions,\r\n GeneralFilterActions,\r\n EditFilterActions,\r\n FilterUnitsActions,\r\n} from '../actions';\r\nimport * as fromGlobalFilter from '../reducers';\r\n\r\n/* Banner */\r\nimport { successPayload, failPayload } from '@rfv/modules/global-filter/banner-confirm-messages';\r\n\r\n/* Models */\r\nimport { FilterPostCategory } from '@rfv/modules/global-filter/models/filter-post-category.model';\r\n\r\n@Injectable()\r\nexport class GlobalFilterEffects {\r\n constructor(\r\n private _store$: Store,\r\n private _globalFilterService: GlobalFilterService,\r\n private _actions$: Actions\r\n ) { }\r\n\r\n /**\r\n * Load list of all saved filters (displayed in header)\r\n */\r\n public LoadSavedGlobalFilters$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SavedFiltersActions.Load),\r\n switchMap(() => this._globalFilterService.loadSavedGlobalFilters().pipe(\r\n map(savedGlobalFilters => SavedFiltersActions.LoadSuccess(savedGlobalFilters)),\r\n catchError(error => of(SavedFiltersActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n /**\r\n * Load categories and subcategories list (displayed global filter categories column)\r\n */\r\n public LoadFilterCategories$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CategoriesActions.LoadCategories),\r\n switchMap(() => this._globalFilterService.loadFilterCategories().pipe(\r\n map(filterCategories => CategoriesActions.LoadCategoriesSuccess(filterCategories)),\r\n catchError(error => of(CategoriesActions.LoadCategoriesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n /**\r\n * Load one particular filter saved by user and it's data - options.\r\n */\r\n public LoadSavedFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(EditFilterActions.SetEditedFilterId),\r\n mergeMap(action => {\r\n if (action.filterId) {\r\n return this._globalFilterService.loadSavedFilter(action.filterId).pipe(\r\n map(savedFilter => EditFilterActions.SetEditedFilterData(savedFilter))\r\n )\r\n } else {\r\n return EMPTY;\r\n }\r\n })\r\n )\r\n );\r\n\r\n /**\r\n * Delete one global filter from list of saved filters (displayed in deader)\r\n */\r\n public DeleteSavedGlobalFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SavedFiltersActions.Delete),\r\n mergeMap(action =>\r\n this._globalFilterService.deleteSavedGlobalFilter(action.globalFilterId).pipe(\r\n mergeMap(() => [\r\n SavedFiltersActions.DeleteSuccess(),\r\n fromRoot.Banner.Show({ options: successPayload('deleted') }),\r\n SavedFiltersActions.Load()\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n SavedFiltersActions.DeleteFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('deleting', error)})\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n public SetSelectedOptionsList$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OptionsActions.SetSelectedOptionsList),\r\n withLatestFrom(this._store$.select(fromGlobalFilter.getIsSelectedOptionsListLoaded)),\r\n map(([action, isLoaded]) => {\r\n if (!isLoaded && action.categoryId !== '5') { // Category with id 5 is Options list\r\n return OptionsActions.Load();\r\n } else {\r\n return OptionsActions.OptionsLoaded();\r\n }\r\n })\r\n )\r\n );\r\n\r\n /**\r\n * Load options for selected category, or subcategory\r\n */\r\n public LoadSelectedOptionsList$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OptionsActions.Load),\r\n withLatestFrom(this._store$.select(fromGlobalFilter.getSelectedOptionsListId)),\r\n mergeMap(([_, categoryId]) =>\r\n this._globalFilterService.loadOptionsList(categoryId).pipe(\r\n map(optionList => OptionsActions.LoadSuccess(optionList)),\r\n catchError(error => of(OptionsActions.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n /**\r\n * Load options for given category, or subcategory\r\n */\r\n public LoadRequiredOptionsList$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OptionsActions.LoadRequired),\r\n switchMap(action => this._globalFilterService.loadOptionsList(action.mergedId).pipe(\r\n map(optionList => OptionsActions.LoadRequiredSuccess(optionList),\r\n catchError(error => of(OptionsActions.LoadRequiredFail(error))))\r\n ))\r\n )\r\n );\r\n\r\n public SetEditedUnits$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(EditFilterActions.SetEditedUnits),\r\n map(action => action.unitIds),\r\n withLatestFrom(this._store$.select(fromCore.Assets.Entities.getAll)),\r\n switchMap(([unitsList, allAssets]) => {\r\n const units = allAssets.filter(asset => unitsList.includes(asset.id));\r\n return of(FilterUnitsActions.AddMultipleUnits(units))\r\n })\r\n )\r\n );\r\n\r\n /**\r\n * Save new Global Filter and reload list of saved filters\r\n */\r\n public SaveNewFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeneralFilterActions.SaveGlobalFilter),\r\n withLatestFrom(this._store$.select(fromGlobalFilter.getPostData)),\r\n mergeMap(([_, postData]: [Action, FilterPostCategory[]]) =>\r\n this._globalFilterService.saveNewGlobalFilter(postData).pipe(\r\n mergeMap((data) => [\r\n GeneralFilterActions.SaveGlobalFilterSuccess(),\r\n SavedFiltersActions.Load(),\r\n fromRoot.Banner.Show({ options: successPayload('saved') })\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n SavedFiltersActions.DeleteFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('saving', error)})\r\n ];\r\n return from(actions);\r\n }))\r\n )\r\n )\r\n );\r\n\r\n public UpdateNewFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeneralFilterActions.UpdateGlobalFilter),\r\n withLatestFrom(this._store$.select(fromGlobalFilter.getPostData)),\r\n mergeMap(([action, postData]: [Action, FilterPostCategory[]]) =>\r\n this._globalFilterService.updateGlobalFilter(postData).pipe(\r\n mergeMap(() => [\r\n GeneralFilterActions.UpdateGlobalFilterSuccess(),\r\n fromRoot.Banner.Show({ options: successPayload('updated') }),\r\n fromDashboard.Reload()\r\n ]),\r\n catchError(error => of(GeneralFilterActions.UpdateGlobalFilterFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public ClearGlobalFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeneralFilterActions.ClearGlobalFilter),\r\n mergeMap(() => [\r\n GeneralFilterActions.RemoveAllApplied(),\r\n FilterUnitsActions.RemoveAll(),\r\n OptionsActions.SetSelectedOptionsList(null),\r\n EditFilterActions.Clear(),\r\n fromRoot.Layout.CloseGlobalFilter()\r\n ])\r\n )\r\n );\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\n/* Modules */\r\nimport { SharedModule } from '@rfv/modules/shared/shared.module';\r\n\r\n/* NgRx */\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { GlobalFilterEffects } from './effects/global-filter.effect';\r\nimport { reducers } from '@rfv/modules/global-filter/reducers';\r\n\r\n/* Components */\r\nimport { AddUnitsComponent } from './components/filter-units/add-units.component';\r\nimport { FilterCategoriesComponent } from './components/filter-categories/filter-categories.component';\r\nimport { FilterOptionsListComponent } from './components/filter-options-list/filter-options-list.component';\r\nimport { FilterSelectionsComponent } from './components/filter-selections/filter-selections.component';\r\nimport { GlobalFilterComponent } from './containers/global-filter.component';\r\n// Form Controls\r\nimport { FilterCheckboxComponent } from './components/filter-controls/filter-checkbox/filter-checkbox.component';\r\nimport { FilterRangeComponent } from './components/filter-controls/filter-range/filter-range.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AddUnitsComponent,\r\n FilterCategoriesComponent,\r\n FilterCheckboxComponent,\r\n FilterOptionsListComponent,\r\n FilterRangeComponent,\r\n FilterSelectionsComponent,\r\n GlobalFilterComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n StoreModule.forFeature('globalFilter', reducers),\r\n EffectsModule.forFeature([GlobalFilterEffects])\r\n ],\r\n exports: [\r\n GlobalFilterComponent\r\n ]\r\n})\r\nexport class GlobalFilterModule {\r\n}\r\n","import { moment } from './../../shared/utils/moment';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Store, select } from '@ngrx/store';\r\n\r\nimport { BehaviorSubject, throwError, pipe } from 'rxjs';\r\nimport { filter, switchMap, take, catchError, tap } from 'rxjs/operators';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { AppSettingsService, AuthService } from '@rfv/modules/core/services';\r\nimport { environment } from '@environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n\r\n private _refreshTokenInProgress = false;\r\n private _refreshTokenSubject$: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n constructor(\r\n private _store: Store,\r\n private _authService: AuthService,\r\n private _appSettings: AppSettingsService\r\n ) { }\r\n\r\n public intercept(request: HttpRequest, next: HttpHandler) {\r\n // Do not intercept auth requests \r\n if (!request.url.startsWith(this._appSettings.getAuthServiceUri())) {\r\n\r\n // Inject auth header for other routes\r\n return this._store.select(fromCore.Auth.isAuthenticated).pipe(\r\n switchMap(isAuthenticated => isAuthenticated\r\n ? this._store.pipe(\r\n\r\n // Get last token\r\n select(fromCore.Auth.getToken),\r\n take(1),\r\n\r\n // Inject access token\r\n switchMap(token => {\r\n //If token has expired, throw 401 and trigger refresh token api call\r\n if (moment(token.expiration).diff(new Date(), 'minutes') <= 0)\r\n return throwError(() => new HttpErrorResponse({ status: 401 }))\r\n else\r\n return next.handle(this.addAuthenticationToken(request, token))\r\n }),\r\n pipe(\r\n catchError(response => {\r\n // Handle 401 unauthenticated response\r\n if (response instanceof HttpErrorResponse && response.status === 401) {\r\n\r\n if (this._refreshTokenInProgress) {\r\n\r\n // Block request until refresh token request completed\r\n return this._refreshTokenSubject$.pipe(\r\n\r\n // Unblock when result from refresh is not null\r\n filter(result => result !== null),\r\n take(1),\r\n\r\n // Proceed with request\r\n switchMap((newToken) => next.handle(this.addAuthenticationToken(request, newToken))),\r\n );\r\n\r\n } else {\r\n\r\n // Perform refresh token request, block other requests until complete\r\n this._refreshTokenInProgress = true;\r\n this._refreshTokenSubject$.next(null);\r\n\r\n return this._store.pipe(\r\n\r\n // Take(1) to prevent store dispatch from requesting another refresh token\r\n select(fromCore.Auth.getToken),\r\n take(1),\r\n\r\n // Get new token from refresh token\r\n switchMap(token => this._authService.refreshToken(token.refreshToken).pipe(\r\n\r\n // Unblock any waiting requests\r\n tap(newToken => {\r\n this._refreshTokenInProgress = false;\r\n this._refreshTokenSubject$.next(newToken);\r\n }),\r\n\r\n // Store new token in ngrx \r\n tap(newToken => this._store.dispatch(fromCore.Auth.RefreshTokenSuccess({ token: newToken }))),\r\n\r\n // Execute original request\r\n switchMap(newToken => {\r\n return next.handle(this.addAuthenticationToken(request, newToken));\r\n })\r\n\r\n ))\r\n );\r\n }\r\n }\r\n\r\n return throwError(() => response);\r\n })\r\n )\r\n ) : next.handle(request)\r\n )\r\n );\r\n }\r\n\r\n // Allow authentication requests\r\n return next.handle(request).pipe(\r\n catchError(response => {\r\n // Logout the user - something has gone wrong (CWS or Auth Service)\r\n if (environment.production)\r\n this._store.dispatch(fromCore.Auth.Logout());\r\n\r\n return throwError(() => response);\r\n })\r\n );\r\n }\r\n\r\n addAuthenticationToken(request, token) {\r\n return request.clone({ setHeaders: { Authorization: `Bearer ${token.accessToken}` } })\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\n\r\nimport { map, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CustomerIdentityInterceptor implements HttpInterceptor {\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public intercept(request: HttpRequest, next: HttpHandler) {\r\n return this._store.pipe(\r\n select(fromCore.Customers.getSelectedId),\r\n take(1),\r\n map(selectedCustomerId => selectedCustomerId ? request.clone({\r\n setHeaders: {\r\n 'CustomerId': `${selectedCustomerId}`\r\n }\r\n }) : request),\r\n switchMap(request => next.handle(request))\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\n\r\n/* RxJS */\r\nimport { switchMap, take } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalFilterIdInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private _store$: Store\r\n ) { }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler) {\r\n return this._store$.pipe(\r\n select(fromGlobalFilter.getSelectedFilterId),\r\n take(1),\r\n switchMap(filterId => {\r\n const filterRequest = !!filterId \r\n ? request.clone({ headers: request.headers.set('GlobalFilterId', filterId.toString()) })\r\n : request;\r\n\r\n return next.handle(filterRequest)\r\n })\r\n )\r\n }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TimezoneOffsetInterceptor implements HttpInterceptor {\r\n constructor() { }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n const offset = new Date().getTimezoneOffset() / 60;\r\n\r\n return next.handle(request.clone({ \r\n setHeaders: { \r\n \"TimeZoneOffset\": offset.toString()\r\n }\r\n }));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map, catchError } from 'rxjs/operators';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models/apiError';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ResponseInterceptor implements HttpInterceptor {\r\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(request).pipe(\r\n map(response => {\r\n if (response instanceof HttpResponse) {\r\n // detect error payloads masked as 200s\r\n if (this.isApiError(response.body) && response.body.statusCode >= 400) {\r\n throw new HttpErrorResponse({ \r\n status: response.status,\r\n statusText: 'Unknown Error',\r\n error: response.body,\r\n headers: response.headers,\r\n url: response.url\r\n });\r\n }\r\n }\r\n\r\n return response;\r\n }),\r\n catchError(response => {\r\n if (response instanceof HttpErrorResponse) {\r\n if (response.error) {\r\n // handle unstructured error payloads\r\n if (typeof response.error === 'string') {\r\n return throwError(() => response.error); // leaving unstructured as we need to go through all catchErrors to handle these correctly\r\n\r\n // handle structured error payloads\r\n } else if (this.isApiError(response.error)) {\r\n return throwError(() => ({\r\n ...response.error,\r\n message: response.error.message || ''\r\n }));\r\n }\r\n\r\n // unknown error payloads\r\n return throwError(() => ({\r\n statusCode: response.status,\r\n message: response.statusText\r\n }));\r\n }\r\n }\r\n\r\n // something really bad happened\r\n return throwError(() => ({\r\n statusCode: 0,\r\n message: 'Unknown Error'\r\n }));\r\n })\r\n );\r\n }\r\n\r\n private isApiError(payload: any): payload is ApiError {\r\n if (!payload)\r\n return false;\r\n\r\n try {\r\n return 'statusCode' in payload || 'StatusCode' in payload;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AppSettingsService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class RequestInterceptor implements HttpInterceptor {\r\n public constructor(\r\n private _appSettingsService: AppSettingsService\r\n ) { }\r\n\r\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(request.clone(\r\n {\r\n url: this.getEndpointUrl(request.url),\r\n setHeaders: this._appSettingsService.getHeaders()?.reduce((acc, header) => {\r\n if (header?.name && header?.value)\r\n acc[header.name] = header.value;\r\n\r\n return acc;\r\n }, {}) || {}\r\n }\r\n ));\r\n }\r\n\r\n private getEndpointUrl(url: string) {\r\n if (url.startsWith('/'))\r\n return `${this._appSettingsService.getApiBaseUri()}${url}`;\r\n \r\n return url;\r\n }\r\n\r\n}","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { AuthInterceptor } from './auth.interceptor';\r\nimport { CustomerIdentityInterceptor } from './customer.interceptor';\r\nimport { GlobalFilterIdInterceptor } from './global-filter.interceptor';\r\nimport { TimezoneOffsetInterceptor } from './timezone-offset.interceptor';\r\nimport { ResponseInterceptor } from './response.interceptor';\r\nimport { RequestInterceptor } from './request.interceptor';\r\nimport { CacheInterceptor } from './cache.interceptor';\r\n\r\n/**\r\n * Http Interceptors, order is important.\r\n */\r\nexport const INTERCEPTORS = [\r\n { provide: HTTP_INTERCEPTORS, useClass: ResponseInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: CacheInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: CustomerIdentityInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: GlobalFilterIdInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: TimezoneOffsetInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: RequestInterceptor, multi: true }\r\n];\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { map, catchError, share } from 'rxjs/operators';\r\n\r\n@Injectable()\r\n\r\nexport class CacheInterceptor implements HttpInterceptor {\r\n\r\n public intercept(req: HttpRequest, next: HttpHandler) {\r\n const authReq = req.clone({\r\n setHeaders: {\r\n 'Cache-Control': 'no-cache'\r\n }\r\n });\r\n return next.handle(authReq);\r\n }\r\n}\r\n","/* Angular */\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\n/* RxJs */\r\nimport { Observable } from 'rxjs';\r\nimport { map, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n/* Models */\r\nimport { UnitAlarmHistory } from '../models/unit-alarm-history.model';\r\nimport { UnitAlarmHistoryRecipient } from '../models/unit-alarm-history-recipient.model';\r\n\r\n/* Helpers */\r\nimport { UnitAlarmHistoryMessageAndLog } from '@rfv/modules/dashboard/modules/unit-alarm-history/models/unit-alarm-history-message-and-log.model';\r\nimport { UserListNotificationSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-settings.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitAlertsService {\r\n\r\n // unitStatesEntities$ = this._store$.pipe(select(fromCommon.getUnitStatesEntities));\r\n alarmStates$ = this._store$.select(fromCore.AlarmStates.getEntities);\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private _store$: Store\r\n ) { }\r\n\r\n /**\r\n * Fetch alerts history for particular unit.\r\n * @param assetId\r\n * @param dateFrom\r\n * @param dateTo\r\n * @param topNRecords\r\n */\r\n loadUnitAlertHistory({ assetId, dateFrom, dateTo, topNRecords }): Observable {\r\n let url;\r\n let params: HttpParams = new HttpParams();\r\n\r\n // Use either topNRecords if defined or dates - not both at the same time\r\n if (topNRecords) {\r\n url = `/v1/unitAlerts/asset/${assetId}/history/latest`;\r\n params = params.set('topNRecords', topNRecords);\r\n } else {\r\n url = `/v1/unitAlerts/asset/${assetId}/history`;\r\n params = params.set('dateFrom', dateFrom);\r\n params = params.set('dateTo', dateTo);\r\n }\r\n\r\n return this.http.get(url, {\r\n params: params\r\n })\r\n .pipe(\r\n withLatestFrom(this.alarmStates$),\r\n map(([alerts, alarmStates]) => {\r\n return alerts.map(alert => {\r\n return {\r\n ...alert,\r\n AcknowledgeState: alert.AcknowledgeUserId !== null ? 'Acknowledged' : 'Not Acknowledged',\r\n AlarmStateName: alarmStates[alert.AlarmStateId].Name,\r\n AlarmStateColor: alarmStates[alert.AlarmStateId].Color,\r\n AlarmValueWithUnit: `${alert.AlarmValue} ${alert.Units}`,\r\n AlarmThresholdWithUnit: `${alert.AlarmThreshold} ${alert.Units}`,\r\n IsSuppressed: !!alert.SuppressedCount,\r\n };\r\n });\r\n })\r\n );\r\n }\r\n\r\n loadUnitAlertsRecipients(alertHistoryId: number, assetId: number): Observable {\r\n return this.http.get(`/v1/unitAlerts/${alertHistoryId}/historyRecipients`, {\r\n params: {\r\n assetId: assetId.toString()\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Get the list of notification settings\r\n */\r\n loadUserListNotificationRecipients(): Observable {\r\n const url = `/v1/unitAlerts/userListNotificationSettings`;\r\n return this.http.get(url);\r\n }\r\n\r\n loadUnitAlertsLogs(alarmId: any) {\r\n const url = `/v1/unitAlerts/${alarmId}/unitAlertsLogs`;\r\n\r\n return this.http.get(url);\r\n }\r\n}\r\n","/* Angular */\r\nimport { Injectable } from '@angular/core';\r\n\r\n/* RxJS */\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport {\r\n unitAlarmHistoryActions,\r\n unitAlarmHistoryRecipientsActions,\r\n unitAlarmHistoryLogsActions\r\n} from '../actions';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n/* Services */\r\nimport { UnitAlertsService } from '@rfv/modules/dashboard/modules/unit-alarm-history/services/unit-alarm-history.service';\r\n\r\n/* Models */\r\nimport { DateUtils } from '@rfv/modules/shared/utils';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport { UnitAlarmHistoryMessageAndLog } from '../../models/unit-alarm-history-message-and-log.model';\r\n\r\n@Injectable()\r\nexport class UnitAlarmHistoryEffects {\r\n constructor(private unitAlertsService: UnitAlertsService,\r\n private store$: Store,\r\n private actions$: Actions) { }\r\n\r\n public unitAlertLogsIds: number[];\r\n\r\n public loadUnitAlertHistory$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(unitAlarmHistoryActions.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n switchMap(([action, assetId]) => {\r\n const dateFrom = DateUtils.moment().subtract(1, 'months');\r\n const dateTo = DateUtils.moment();\r\n const topNRecords = 100;\r\n const payload = Object.keys(action).length > 0 ? action : { assetId, dateFrom, dateTo, topNRecords };\r\n \r\n return this.unitAlertsService.loadUnitAlertHistory(payload).pipe(\r\n map(unitAlerts => unitAlarmHistoryActions.LoadSuccess(unitAlerts)),\r\n catchError(error => of(unitAlarmHistoryActions.LoadFail(error.message)))\r\n );\r\n })\r\n )\r\n );\r\n\r\n public loadUnitAlertRecipients$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(unitAlarmHistoryRecipientsActions.Load),\r\n switchMap(action =>\r\n this.unitAlertsService.loadUnitAlertsRecipients(action.alertHistoryId, action.assetId).pipe(\r\n map((alertRecipients => unitAlarmHistoryRecipientsActions.LoadSuccess(alertRecipients)),\r\n catchError(err => of(unitAlarmHistoryRecipientsActions.LoadFail(err)))\r\n )\r\n )\r\n ))\r\n );\r\n\r\n public loadUnitAlertLogs$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(unitAlarmHistoryLogsActions.Load),\r\n switchMap(action =>\r\n this.unitAlertsService.loadUnitAlertsLogs(action.alertHistoryId)\r\n .pipe(\r\n mergeMap((alertLogs: UnitAlarmHistoryMessageAndLog) => [\r\n unitAlarmHistoryLogsActions.LoadSuccess(alertLogs),\r\n ]),\r\n catchError(err => of(unitAlarmHistoryLogsActions.LoadFail(err)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public load$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(unitAlarmHistoryRecipientsActions.LoadUserListNotificationSettings),\r\n switchMap(action => this.unitAlertsService.loadUserListNotificationRecipients().pipe(\r\n map(userList => unitAlarmHistoryRecipientsActions.LoadUserListNotificationSettingsSuccess(userList)),\r\n catchError(error => of(unitAlarmHistoryRecipientsActions.LoadUserListNotificationSettingsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n/* NgRx*/\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { UnitAlarmHistoryEffects } from './effects/unit-alarm-history.effects';\r\nimport { reducers } from './reducers';\r\n\r\n/**\r\n * Moved to here so it can be eager loaded from core to stop the NGRX warnings.\r\n * We really need to fix the refresh 'actions with no payload' trash.\r\n */\r\n@NgModule({\r\n imports: [\r\n StoreModule.forFeature('unitAlarmHistory', reducers),\r\n EffectsModule.forFeature([UnitAlarmHistoryEffects])\r\n ]\r\n})\r\nexport class UnitAlarmHistoryStoreModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\n\r\n/* Modules */\r\nimport { CoreStoreModule } from '@rfv/modules/core/store/core-store.module';\r\n\r\nimport { DashboardStoreModule } from '@rfv/modules/dashboard/store/dashboard-store.module';\r\nimport { SupportStoreModule } from '@rfv/modules/support/store/support-store.module';\r\nimport { RuntimeStoreModule } from '../dashboard/modules/runtime-settings/store/runtime-store.module';\r\n\r\nimport { GlobalFilterModule } from '@rfv/modules/global-filter/global-filter.module';\r\nimport { ModalModule } from '@rfv/modules/modal/modal.module';\r\nimport { SharedModule } from '@rfv/modules/shared/shared.module';\r\nimport { SitemapModule } from '@rfv/modules/sitemap/sitemap.module';\r\n\r\n/* Components */\r\nimport { BannerComponent } from './components/banner/banner.component';\r\nimport { CustomerAccessComponent } from './components/customer-access/customer-access.component';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { GlobalFilterDropdownComponent } from './components/global-filter-dropdown/global-filter-dropdown.component';\r\nimport { HeaderComponent } from './components/header/header.component';\r\nimport { HomeComponent } from './components/home/home.component';\r\nimport { NoAccessComponent } from './components/no-access/no-access.component';\r\nimport { OfflineComponent } from './components/offline/offline.component';\r\nimport { Page404Component } from './components/page404/page404.component';\r\nimport { UserProfileDropdownComponent } from './components/user-profile-dropdown/user-profile-dropdown.component';\r\nimport { IdsNotFoundComponent } from './components/ids-not-found/ids-not-found.component';\r\nimport { BreadcrumbToolbarComponent } from './components/breadcrumb-toolbar/breadcrumb-toolbar.component';\r\nimport { SupportDropdownComponent } from './components/support-dropdown/support-dropdown.component';\r\n\r\nimport { INTERCEPTORS } from './interceptors';\r\nimport { UnitAlarmHistoryStoreModule } from '../dashboard/modules/unit-alarm-history/store/unit-alarm-history-store.module';\r\n\r\nexport const COMPONENTS = [\r\n BannerComponent,\r\n BreadcrumbToolbarComponent,\r\n CustomerAccessComponent,\r\n FooterComponent,\r\n GlobalFilterDropdownComponent,\r\n HeaderComponent,\r\n HomeComponent,\r\n IdsNotFoundComponent,\r\n NoAccessComponent,\r\n OfflineComponent,\r\n Page404Component,\r\n SupportDropdownComponent,\r\n UserProfileDropdownComponent,\r\n];\r\n\r\n@NgModule({\r\n declarations: COMPONENTS,\r\n\r\n imports: [\r\n HttpClientModule,\r\n\r\n GlobalFilterModule,\r\n ModalModule,\r\n SitemapModule,\r\n SharedModule,\r\n\r\n CoreStoreModule.forRoot(),\r\n\r\n DashboardStoreModule,\r\n SupportStoreModule,\r\n RuntimeStoreModule,\r\n UnitAlarmHistoryStoreModule\r\n ],\r\n\r\n exports: [\r\n COMPONENTS,\r\n SharedModule,\r\n GlobalFilterModule,\r\n SitemapModule\r\n ],\r\n\r\n providers: [\r\n INTERCEPTORS\r\n ]\r\n})\r\nexport class CoreModule { }\r\n","export enum Dashboards {\r\n SystemVitals = 1,\r\n Utilization = 2,\r\n Optimize = 2,\r\n Notifications = 3,\r\n Analytics = 4,\r\n Troubleshoot = 5,\r\n RemoteServices = 6,\r\n Reports = 7,\r\n Maintenance = 8,\r\n UnitVitals = 10,\r\n AdminSettings = 11,\r\n Activity = 12,\r\n Performance = 13,\r\n RailVitals = 14,\r\n SupportSuite = 16,\r\n FleetView = 17,\r\n Support = 19,\r\n Trends = 33\r\n}\r\n","export enum AlarmStates {\r\n Present = 1,\r\n Cleared = 2,\r\n Invalid = 3,\r\n Reset = 4\r\n}\r\n","export enum Industry {\r\n Misc = 1,\r\n OilAndGas = 2,\r\n DemandGenerator = 3,\r\n WasteWater = 4,\r\n Rail = 5,\r\n Marine = 6\r\n}\r\n","export enum Tiles {\r\n unitData = 1,\r\n alarmHistory = 2,\r\n siteEditor = 3,\r\n configurationManager = 4,\r\n controlAdmin = 5,\r\n controls = 6,\r\n pressuresTemperatures = 7,\r\n aggregatedFleetVitals = 8,\r\n compressorDriver = 9,\r\n unitFlow\t= 10,\r\n unitNotificationRecipients = 11,\r\n alarmSuppression = 12,\r\n eventFrequencies = 13,\r\n eventsDiagnostics = 14,\r\n map = 15,\r\n logFiles = 16,\r\n operationsHistory = 17,\r\n preventativeMaintenance = 18,\r\n remoteServices = 19,\r\n repeatFaultCodes = 20,\r\n assetRuntimeMetrics = 21,\r\n aggregateRuntimeMetrics = 22,\r\n supportTicketHistory = 23,\r\n trendsV1 = 24,\r\n ACM = 25,\r\n unitInfo = 26,\r\n workOrders = 27,\r\n systemStatus = 28,\r\n systemEventDiagnostics = 29,\r\n presentAlarms = 30,\r\n adminUserList = 32,\r\n adminCommLoss = 33,\r\n adminRuntime = 34,\r\n unitAlarms = 35,\r\n requestReport = 36,\r\n scheduledReports = 37,\r\n reportHistory = 38,\r\n adminNotificationSettings = 39,\r\n horsepower = 40,\r\n fleetVolume = 41,\r\n fuelConsumption = 42,\r\n emissions\t= 43,\r\n fleetOpportunity = 44,\r\n pockets = 45,\r\n unitOpportunity = 46,\r\n siteVisualizations = 47,\r\n fuel = 48,\r\n CO2Emmissions = 49,\r\n unitAlerts = 50,\r\n priorityData = 52,\r\n fleetEditor = 53,\r\n unitConfigQueue = 55,\r\n addNewUnit = 58,\r\n utilization = 60,\r\n unitAlarmsNotifications = 61,\r\n platformSupport = 62,\r\n rawData = 63,\r\n onboarding = 64,\r\n catInspect = 65,\r\n alarmEditor = 66,\r\n catInspectUnit = 67,\r\n systemStatusv2 = 68,\r\n historicalTracking = 69,\r\n aggregateUtilization = 70,\r\n emo = 71,\r\n fleetVitals = 72,\r\n aggregateAlarmHistory = 73,\r\n trendsV2 = 74,\r\n dealerVims = 76,\r\n tripReports = 77,\r\n controlHistory = 79,\r\n derivedDataPoints = 82,\r\n // not actual tiles but needed for routing\r\n unitAlarmsEdit = 1001\r\n}\r\n","export enum UserStatusIds {\r\n Expired = 1,\r\n Warning = 2,\r\n Disabled = 3\r\n}","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate } from '@angular/router';\r\n\r\nimport { combineLatest } from 'rxjs';\r\nimport { filter, map, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssetExistsGuard implements CanActivate {\r\n constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n canActivate(next: ActivatedRouteSnapshot) {\r\n const assetId = +next.params.assetId;\r\n\r\n return this._store.pipe(\r\n select(fromCore.isLoading),\r\n filter(isLoading => !isLoading),\r\n take(1),\r\n switchMap(isLoading => combineLatest(\r\n this._store.select(fromCore.Assets.Entities.isLoaded),\r\n this._store.select(fromCore.Assets.Entities.getEntities)\r\n ).pipe(\r\n take(1),\r\n map(([ isLoaded, entities ]) => {\r\n if (isLoaded && entities && entities[assetId])\r\n return true;\r\n\r\n this._store.dispatch(fromRoot.Router.Go(['/404']));\r\n return false;\r\n })\r\n ))\r\n );\r\n }\r\n}\r\n","import { StateParam } from '@rfv/modules/core/models';\r\n// angular\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\r\n\r\n// rxjs\r\nimport { of, combineLatest } from 'rxjs';\r\nimport { map, switchMap, filter, take } from 'rxjs/operators';\r\n\r\n// ngrx\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n// rfv\r\nimport { AuthService, AppSettingsService } from '@rfv/modules/core/services';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthGuard implements CanActivate {\r\n public constructor(\r\n private _store: Store,\r\n private _authService: AuthService,\r\n private appSettings: AppSettingsService,\r\n ) { }\r\n\r\n public canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\r\n return this._store.pipe(\r\n // block while authenticating\r\n select(fromCore.Auth.isAuthenticating),\r\n filter(isAuthenticating => !isAuthenticating),\r\n take(1),\r\n\r\n // check if we are authenticated\r\n switchMap(isAuthenticating => combineLatest([\r\n this._store.select(fromCore.Auth.isAuthenticated),\r\n this._store.select(fromRoot.Router.getQueryParam('code')),\r\n this._store.pipe(\r\n select(fromRoot.Router.getQueryParam('state')),\r\n map(state => {\r\n try {\r\n return JSON.parse(atob(state)) as Partial;\r\n } catch {\r\n return null;\r\n }\r\n })\r\n )\r\n ]).pipe(\r\n take(1),\r\n switchMap(([isAuthenticated, accessCode, stateParam]) => {\r\n if (isAuthenticated)\r\n return of(true);\r\n\r\n if (accessCode && stateParam) {\r\n // we are coming back from CWS\r\n this._store.dispatch(fromCore.Auth.GetToken({\r\n accessCode,\r\n codeVerifier: stateParam.codeVerifier,\r\n seed: stateParam.seed\r\n }));\r\n } else {\r\n const fromB2C: boolean = !!accessCode;\r\n this._authService.redirectToCWS(fromB2C ? '/' : routerState.url, fromB2C);\r\n return of(false);\r\n }\r\n\r\n // dispatched a token request, wait for it to finish before routing\r\n return this._store.pipe(\r\n select(fromCore.Auth.isAuthenticating),\r\n filter(isAuthenticated => !isAuthenticated),\r\n take(1),\r\n switchMap(isAuthenticating => this._store.pipe(\r\n select(fromCore.Auth.isAuthenticated),\r\n take(1),\r\n map(isAuthenticated => {\r\n if (isAuthenticated && stateParam.redirectUrl)\r\n this._store.dispatch(fromRoot.Router.Url(stateParam.redirectUrl));\r\n\r\n return isAuthenticated;\r\n })\r\n ))\r\n );\r\n })\r\n ))\r\n );\r\n }\r\n\r\n canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.canActivate(route, state);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate } from '@angular/router';\r\n\r\nimport { combineLatest } from 'rxjs';\r\nimport { filter, map, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DashboardExistsGuard implements CanActivate {\r\n constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n canActivate(next: ActivatedRouteSnapshot) {\r\n const dashboardId = +next.params.dashboardId;\r\n\r\n return this._store.pipe(\r\n select(fromCore.isLoading),\r\n filter(isLoading => !isLoading),\r\n switchMap(isLoading => this._store.select(fromCore.isLoaded).pipe(\r\n filter(isLoaded => isLoaded)\r\n )),\r\n take(1),\r\n switchMap(isLoading => combineLatest([\r\n this._store.select(fromCore.Dashboards.isLoaded),\r\n this._store.select(fromCore.Dashboards.getEntities)\r\n ]).pipe(\r\n take(1),\r\n map(([ isLoaded, entities ]) => !!(isLoaded && entities && entities[dashboardId] && entities[dashboardId].tiles?.length))\r\n ))\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate } from '@angular/router';\r\n\r\nimport { map, take, filter, switchMap } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { combineLatest } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SitemapGroupExistsGuard implements CanActivate {\r\n constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n canActivate(next: ActivatedRouteSnapshot) {\r\n const sitemapGroupId = +next.params.sitemapGroupId;\r\n \r\n return this._store.pipe(\r\n select(fromCore.SitemapGroups.isLoading),\r\n filter(isLoading => !isLoading),\r\n take(1),\r\n switchMap(isLoading => combineLatest(\r\n this._store.select(fromCore.SitemapGroups.isLoaded),\r\n this._store.select(fromCore.SitemapGroups.getEntities)\r\n ).pipe(\r\n map(([ isLoaded, entities ]) => {\r\n if (isLoaded && entities && entities[sitemapGroupId])\r\n return true;\r\n\r\n this._store.dispatch(fromRoot.Router.Go(['/404']));\r\n return false;\r\n })\r\n )),\r\n take(1)\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, CanActivateChild } from '@angular/router';\r\n\r\nimport { Tiles } from '@rfv/modules/core/enums';\r\n\r\n// rxjs\r\nimport { Observable, of, combineLatest } from 'rxjs';\r\nimport { filter, map, switchMap, take } from 'rxjs/operators';\r\n\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { UserPermissionService } from '@rfv/modules/shared/services/user-permission.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FullscreenAccessGuard implements CanActivateChild {\r\n\r\n private tileFullscreenTag = { };\r\n\r\n constructor(\r\n private _store: Store,\r\n private userPermissionService: UserPermissionService\r\n ) {\r\n this.initialize();\r\n }\r\n\r\n public canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n\r\n return this._store.pipe(\r\n select(fromCore.UserPermissions.isLoaded),\r\n filter(isLoaded => isLoaded), // wait until core is loaded\r\n take(1),\r\n map((isLoaded) => {\r\n if (isLoaded) {\r\n const tileId = +route.params['tileId'];\r\n const tag: string = this.tileFullscreenTag[tileId];\r\n\r\n if (!tag || this.userPermissionService.hasAccess(tag)) {\r\n return true;\r\n } else {\r\n this._store.dispatch(fromRoot.Router.Go(['/no-access']));\r\n return false;\r\n }\r\n }\r\n\r\n this._store.dispatch(fromRoot.Router.Go(['/no-access']));\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n private initialize() {\r\n this.tileFullscreenTag[Tiles.presentAlarms] = 'CURRENTALARMS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.systemStatus] = 'SYSTEMSTATUS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.systemEventDiagnostics] = 'AGGREGATEEVENTS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.trendsV2] = 'TREND';\r\n\r\n this.tileFullscreenTag[Tiles.adminUserList] = 'USERSETTINGS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.adminNotificationSettings] = 'NOTIFICATIONSETTINGS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.adminRuntime] = 'RUNTIMESETTINGS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.adminCommLoss] = 'COMMLOSSSETTINGS_FULLSCREEN';\r\n\r\n this.tileFullscreenTag[Tiles.unitAlarms] = 'UNITALARMS_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.unitAlarmsEdit] = 'EDIT_ALARMS';\r\n this.tileFullscreenTag[Tiles.unitAlarmsNotifications] = 'NOTIFICATIONRECIPIENTS_FULLSCREEN';\r\n\r\n this.tileFullscreenTag[Tiles.unitData] = 'UNITDATA_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.assetRuntimeMetrics] = 'UNITRUNTIME_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.unitInfo] = 'UNITINFO_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.unitAlerts] = 'ALARMHISTORY_FULLSCREEN';\r\n this.tileFullscreenTag[Tiles.eventsDiagnostics] = 'EVENTS_FULLSCREEN';\r\n\r\n // 'ALERTSUPPRESSION_FULLSCREEN'\r\n }\r\n}\r\n","export interface TelemetryEvent {\r\n id: number,\r\n assetName: string,\r\n assetId: number,\r\n deviceId: number,\r\n make: string,\r\n serialNumber: string,\r\n eventTypeName: string,\r\n telemetryEventTypeId: number,\r\n telemetryEventType: TelemetryEventTypes,\r\n sampleTime: Date,\r\n timeInserted: Date,\r\n rawMessage: string,\r\n color?: string\r\n}\r\n\r\nexport enum TelemetryEventTypes {\r\n RadioThermalUnspecified = 1,\r\n RadioThermalCellular = 2,\r\n RadioThermalSatellite = 3\r\n}\r\n","let __id = 0;\r\n\r\nexport interface INotification {\r\n id: number;\r\n type: string;\r\n name: string;\r\n message: string;\r\n acknowledged: boolean;\r\n timestamp: Date;\r\n isComplete?: Boolean;\r\n isFailed?: Boolean; \r\n}\r\n\r\nexport abstract class Notification implements INotification {\r\n public readonly id = ++__id;\r\n public abstract type: string;\r\n\r\n public constructor(\r\n public readonly name: string,\r\n public readonly message: string | null,\r\n public readonly acknowledged: boolean = false,\r\n public readonly timestamp = new Date()\r\n ) { }\r\n}\r\n\r\nexport class DemandPollStatusNotification extends Notification {\r\n public readonly type = 'demandPoll';\r\n\r\n public constructor(\r\n public readonly commandId: number,\r\n public readonly assetId: number,\r\n public readonly isComplete: boolean = false\r\n ) {\r\n super('Demand Poll', 'Command Sent');\r\n }\r\n}\r\n\r\nexport class UnitControlStatusNotification extends Notification {\r\n public readonly type = 'unitControl';\r\n\r\n public constructor(\r\n public readonly name: string,\r\n public readonly commandId: number,\r\n public readonly assetId: number,\r\n public readonly isComplete: boolean = false\r\n ) {\r\n super(name, 'Command Sent');\r\n }\r\n}\r\n\r\nexport class RebootDeviceNotification extends Notification {\r\n public readonly type = 'rebootDevice'; \r\n\r\n public constructor(\r\n public readonly name: string,\r\n public readonly unitCreationLogId: number,\r\n public readonly assetId: number, \r\n public isComplete: boolean = false\r\n ){\r\n super( name, 'Waiting for Device');\r\n }\r\n}","import { Injectable, Renderer2, Inject, RendererFactory2 } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { environment } from '@environments/environment';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\nimport { AppSettings, Environment, Scriptv1, Scriptv2, Version } from '@rfv/modules/core/models';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppSettingsService {\r\n private _environment: Environment;\r\n private _version: Version;\r\n private _renderer: Renderer2;\r\n\r\n private _themeLink: HTMLLinkElement;\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n @Inject(DOCUMENT)\r\n private _document: Document,\r\n\r\n rendererFactory: RendererFactory2\r\n ) {\r\n this._renderer = rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n public loadEnvironmentConfig() {\r\n const t = new Date().getTime();\r\n\r\n const path = environment.production\r\n ? window.location.protocol + '//' + window.location.host + '/appsettings/environment.json?t=' + t\r\n : 'assets/appsettings/environment.json?t=' + t;\r\n\r\n return firstValueFrom(this._http.get(path)).then(\r\n appSettings => {\r\n for (var i=0; i(path)).then(version => this._version = version);\r\n }\r\n\r\n public getPlatformName() {\r\n return this._environment ? this._environment.PlatformName : null;\r\n }\r\n\r\n public getCustomerTemplate() {\r\n return this._environment ? this._environment.CustomerTemplate : null;\r\n }\r\n public getCwsRedirectUri() {\r\n return this._environment ? this._environment.CwsRedirectUri : null;\r\n }\r\n\r\n public getApiBaseUri() {\r\n return this._environment ? this._environment.ApiBaseUri : null;\r\n }\r\n\r\n public getAuthServiceUri() {\r\n return this._environment ? this._environment.AuthServiceUri : null;\r\n }\r\n\r\n public getHelpLinkLabel() {\r\n return this._environment ? this._environment.HelpLinkLabel : null;\r\n }\r\n\r\n public getHelpLinkName() {\r\n return this._environment ? this._environment.HelpLinkName : null;\r\n }\r\n\r\n public getB2CDomain() {\r\n return this._environment ? this._environment.B2CDomain : null;\r\n }\r\n\r\n public getB2CRedirectUri() {\r\n return this._environment ? this._environment.B2CRedirectUri : null;\r\n }\r\n\r\n public getApplication() {\r\n return this._environment?.Application || \"\";\r\n }\r\n\r\n public getLogoutUri() {\r\n return this._environment ? this._environment.LogoutUri : null;\r\n }\r\n\r\n public getCwsAdapter() {\r\n return this._environment ? this._environment.CwsAdapter : null;\r\n }\r\n\r\n public getLinks() {\r\n return this._environment ? this._environment.Links : [];\r\n }\r\n\r\n public getScripts() {\r\n return this._environment ? this._environment.Scripts.filter(script => !script.requiresConsent) : [];\r\n }\r\n\r\n public getConsentRequiredScripts() {\r\n return this._environment ? this._environment.Scripts.filter(script => script.requiresConsent) : [];\r\n }\r\n\r\n public getHomeBlurb() {\r\n return this._environment ? this._environment.HomeBlurb : null;\r\n }\r\n\r\n public get cypress() {\r\n return this._environment ? this._environment.Cypress : false;\r\n }\r\n\r\n public getVersion() {\r\n return this._version ? this._version.version : null;\r\n }\r\n\r\n public getHeaders() {\r\n return this._environment ? this._environment.Headers : [];\r\n }\r\n\r\n async setAppColorTheme(themeId: 1 | 2) {\r\n if (!themeId) {\r\n return;\r\n }\r\n\r\n const themePath = `${themeId === 2 ? 'light' : 'dark'}-theme.css`;\r\n const headEl = this._document.head;\r\n const linkEl = this._renderer.createElement('link') as HTMLLinkElement;\r\n\r\n this._renderer.setAttribute(linkEl, 'href', themePath);\r\n this._renderer.setAttribute(linkEl, 'rel', `stylesheet`);\r\n\r\n return new Promise((resolve, reject) => {\r\n linkEl.onload = () => resolve(true);\r\n linkEl.onerror = e => reject(e);\r\n this._renderer.insertBefore(headEl, linkEl, headEl.querySelector('[link]'));\r\n\r\n // remove the old stylesheet when changing themes\r\n if (this._themeLink)\r\n this._renderer.removeChild(headEl, this._themeLink);\r\n\r\n this._themeLink = linkEl;\r\n });\r\n }\r\n\r\n // moved here to load scripts earlier (was in the ngOnInit of the app component)\r\n async loadScripts(scripts: (Scriptv1 | Scriptv2)[]) {\r\n if (scripts?.length) {\r\n for (let i = 0; i < scripts.length; i++) {\r\n let script = scripts[i];\r\n switch (script.version) {\r\n case 2:\r\n for (let j = 0; j < script.scripts.length; j++) {\r\n try {\r\n await this.injectScript(script.scripts[j].target, script.scripts[j].type, script.scripts[j].scriptType, script.scripts[j].className, script.scripts[j].value, script.scripts[j].onLoad, script.scripts[j].timeout, script.scripts[j].name);\r\n } catch (err) {\r\n console.log(`Failed to load script: ${script.scripts[j].value}`);\r\n return;\r\n }\r\n }\r\n\r\n break;\r\n\r\n case 1:\r\n default:\r\n // load external scripts sequentially...\r\n if (script.src) {\r\n try {\r\n await this.injectScript(script.target, 'link', script.type, script.className, script.src, script.onLoad, script.timeout, script.name);\r\n } catch (err) {\r\n console.log(`Failed to load script: ${script.value}`);\r\n return;\r\n }\r\n }\r\n\r\n // create internal script only if all external scripts loaded successfully.\r\n if (script.value) {\r\n try {\r\n await this.injectScript(script.target, 'script', script.type, script.className, script.value, script.onLoad, script.timeout, script.name);\r\n } catch (err) {\r\n console.log(`Failed to load script: ${script.value}`);\r\n return;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public async loadConsentRequiredScripts() {\r\n await this.loadScripts(this.getConsentRequiredScripts());\r\n }\r\n\r\n private async injectScript(target: 'head' | 'body', type: 'link' | 'script', scriptType: string, className: string, value: string, onLoad: string, timeout: number, name: string = null) {\r\n const targetEl = this._document.getElementsByTagName(target);\r\n\r\n if (!targetEl?.length) {\r\n console.log(`Invalid script target: ${target}`);\r\n return;\r\n }\r\n\r\n switch (type) {\r\n case 'link':\r\n // async to make sure it loads\r\n await new Promise((resolve, reject) => {\r\n const element = this._renderer.createElement('script') as HTMLScriptElement;\r\n element.type = scriptType;\r\n element.src = value;\r\n element.id = name;\r\n element.onload = _ => resolve(true);\r\n element.onerror = e => reject(e);\r\n this._renderer.appendChild(targetEl[0], element);\r\n });\r\n break;\r\n\r\n case 'script':\r\n await new Promise((resolve, reject) => {\r\n const element = this._renderer.createElement('script') as HTMLScriptElement;\r\n element.type = scriptType;\r\n element.innerHTML = atob(value);\r\n element.id = name;\r\n\r\n if (className)\r\n this._renderer.addClass(element, className);\r\n\r\n this._renderer.appendChild(targetEl[0], element);\r\n\r\n if (onLoad) {\r\n if (timeout > 0) {\r\n setTimeout(() => {\r\n reject();\r\n }, timeout);\r\n }\r\n\r\n window.addEventListener(onLoad, e => resolve());\r\n } else {\r\n resolve();\r\n }\r\n });\r\n\r\n break;\r\n\r\n default:\r\n console.log(`Invalid script type: ${type}`);\r\n break;\r\n }\r\n }\r\n}\r\n\r\nexport function appSettingsInitFn(appSettings: AppSettingsService): () => Promise {\r\n return () => appSettings.loadEnvironmentConfig()\r\n .then(() => appSettings.loadVersion());\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\n\r\nimport {\r\n Asset,\r\n AssetAlarm,\r\n AssetAlarmGroupAlertScheduleRecipients,\r\n AssetAlarmHistoryCount,\r\n AssetDatapoint,\r\n AssetDatapointHistorical,\r\n AssetStatus,\r\n EventDiagnostic,\r\n SnapshotFileDatapoints,\r\n AssetDatapointSetting,\r\n AlarmType,\r\n DeviceInfo,\r\n} from \"@rfv/modules/core/models\";\r\n\r\nimport { DeviceStatus } from './../../support/modules/unit-validation/models/device-status.model';\r\nimport { AssetReloInfo, TargetAsset } from \"../models/asset/target-asset\";\r\nimport { AlarmSuppressor } from \"../models/asset/alarm-suppressor\";\r\nimport { AlarmSuppressee } from \"../models/asset/alarm-suppressee\";\r\nimport { SystemEventDiagnostic } from \"@rfv/modules/dashboard/modules/system-events-diagnostics/models\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class AssetService {\r\n public constructor(private _http: HttpClient) { }\r\n\r\n public loadUnitToEdit(assetId: number) {\r\n return this._http.get(`/v2/asset/${assetId}`)\r\n }\r\n\r\n public getEntities() {\r\n return this._http.get(`/v2/assets`);\r\n }\r\n\r\n public getAlarms(assetId: number) {\r\n return this._http.get(`/v2/asset/${assetId}/alarms`);\r\n }\r\n\r\n public getAlarmGroupAlertScheduleRecipients(assetId: number) {\r\n return this._http.get(`/v2/asset/${assetId}/alarmScheduleRecipients`);\r\n }\r\n\r\n public getAlarmHistoryCounts(assetId: number, startDate: string, endDate: string) {\r\n return this._http.get(`/v2/asset/${assetId}/alarmHistoryCounts`, {\r\n params: { startDate: startDate, endDate: endDate }\r\n });\r\n }\r\n\r\n public getAlertHistoryRecipientCount(assetId: number, startDate: string, endDate: string) {\r\n return this._http.get(`/v2/asset/${assetId}/alertHistoryRecipientCount`, {\r\n params: { startDate: startDate, endDate: endDate }\r\n });\r\n }\r\n\r\n /**\r\n * Get datapoint latest values (values).\r\n */\r\n public getDatapoints(assetId: number) {\r\n // TODO: modonnell: update endpoint to /v2/asset/:assetId/datapoint-values (?)\r\n return this._http.get(`/v2/asset/${assetId}/datapoints`);\r\n }\r\n\r\n public getDatapointsHistorical(assetId: number, startDate: Date, endDate: Date) {\r\n return this._http.get(`/v2/asset/${assetId}/datapointsHistorical`, {\r\n params: {\r\n startDate: startDate.toISOString(),\r\n endDate: endDate.toISOString()\r\n }\r\n });\r\n }\r\n\r\n public getDatapointsHistoricalMostRecent(assetId: number, limit: number) {\r\n return this._http.get(`/v2/asset/${assetId}/datapointsHistorical`, {\r\n params: {\r\n mostRecent: limit.toString()\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Get datapoint metadata.\r\n */\r\n public getDatapointSettings(assetId: number) {\r\n // TODO: modonnell: update endpoint to /v2/asset/:assetId/datapoints\r\n return this._http.get(\r\n `/v2/asset/${assetId}/datapointSettings`\r\n );\r\n }\r\n\r\n public getStatus(assetId: number) {\r\n return this._http.get(`/v2/asset/${assetId}/status`);\r\n }\r\n\r\n public getTypes() {\r\n return this._http.get(`/v1/unitAlarms/types`);\r\n }\r\n\r\n public getEventsDiagnostics(\r\n assetId: number,\r\n startDate: string,\r\n endDate: string,\r\n topNRecords: number | null = null\r\n ) {\r\n if (topNRecords == null || topNRecords === undefined) {\r\n return this._http.get(\r\n `/v2/assets/${assetId}/events?startDate=${startDate}&endDate=${endDate}`\r\n );\r\n } else {\r\n return this._http.get(\r\n `/v2/assets/${assetId}/events?startDate=${startDate}&endDate=${endDate}&topNRecords=${topNRecords}`\r\n );\r\n }\r\n }\r\n\r\n public getCDSSISUrl(assetId: number, event: EventDiagnostic) {\r\n return this._http.get(\r\n `/v2/assets/${assetId}/SISUrls?SerialNumber=${event.serialNumber}&mid=${event.mId}&component=${event.component}&failure=${event.failure}&type=${event.type}`\r\n );\r\n }\r\n\r\n public createDemandPollCommand(\r\n assetId: number,\r\n pollUnitData: boolean,\r\n customOverride: string\r\n ) {\r\n return this._http.post(`/v2/assets/${assetId}/poll`, {\r\n params: {\r\n pollUnitData: pollUnitData,\r\n customOverride: customOverride\r\n }\r\n });\r\n\r\n }\r\n\r\n public createSnapshotPoll(\r\n assetId: number\r\n ) {\r\n return this._http.post(`/v2/assets/${assetId}/snapshotPoll`, { responseType: 'json' });\r\n\r\n }\r\n\r\n public downloadSnapshotFile(assetId: number, event: EventDiagnostic | SystemEventDiagnostic) {\r\n return this._http.get(`/v2/assets/snapshotFile/${assetId}/${event.snapShotFile}`, { responseType: 'blob' });\r\n }\r\n\r\n public getSnapshotFileDatapoints(assetId: number, event: EventDiagnostic | SystemEventDiagnostic) {\r\n return this._http.get(`/v2/assets/snapshotFileDatapoints/${assetId}/${event.snapShotFile}`, { responseType: 'json' });\r\n }\r\n\r\n public getGlobalFilterAssetIds(sitemapGroupId: number, globalFilterId: number) {\r\n return this._http.get(`/v1/globalFilters/${globalFilterId}/assets`, {\r\n params: {\r\n sitemapGroupId: sitemapGroupId.toString(),\r\n }\r\n });\r\n }\r\n\r\n public getDeviceInfo(assetId: number) {\r\n return this._http.get(`/v2/asset/${assetId}/deviceInfo`);\r\n }\r\n\r\n public getTargetAssets(sourceCustId: number, sourceSectionId: number, destCustId: number, destSectionId: number) {\r\n return this._http.get(`/v2/target-assets`, {\r\n params: {\r\n sourceCustId: sourceCustId,\r\n sourceSectionId: sourceSectionId,\r\n destCustId: destCustId,\r\n destSectionId: destSectionId\r\n }\r\n });\r\n }\r\n\r\n public moveAsset(asset: AssetReloInfo) {\r\n return this._http.post(`/v2/asset-move`, asset)\r\n };\r\n/**\r\n * Alarm Suppression - Suppressors\r\n */\r\n\r\n public getSuppressingAlarms(assetId: number) {\r\n return this._http.get(`/v2/assets/${assetId}/alarm-suppressors`);\r\n }\r\n\r\n public createSuppressingAlarm(AlarmId: number, assetId: number) {\r\n return this._http.post(`/v2/assets/${assetId}/alarm-suppressors`, {AlarmId});\r\n }\r\n\r\n public deleteSuppressingAlarm(assetId: number, suppressionSetId: number) {\r\n return this._http.delete(`/v2/assets/${assetId}/alarm-suppressors/${suppressionSetId}`);\r\n }\r\n\r\n public updateSuppressingAlarm(assetId: number, suppressionSetId: number, alarmId: number) {\r\n return this._http.put(`/v2/assets/${assetId}/alarm-suppressors/${suppressionSetId}`, alarmId);\r\n }\r\n\r\n /**\r\n * Alarm Suppression - Suppressees\r\n */\r\n\r\n public getSuppresseeAlarms(assetId: number, suppressorId: number) {\r\n return this._http.get(`/v2/assets/${assetId}/alarm-suppressors/${suppressorId}`);\r\n }\r\n\r\n public createSuppresseeAlarms(assetId: number, suppressionSetId: number, suppresseeAlarmIds: number[]) {\r\n return this._http.post(`/v2/assets/${assetId}/alarm-suppressors/${suppressionSetId}/suppressees`, suppresseeAlarmIds);\r\n }\r\n\r\n public deleteSuppresseeAlarms(assetId: number, suppressionSetId: number, suppresseeAlarmIds: number[]) {\r\n return this._http.delete(`/v2/assets/${assetId}/alarm-suppressors/${suppressionSetId}/suppressees`, {params: { alarmIds: suppresseeAlarmIds }});\r\n }\r\n\r\n}\r\n","import { map } from 'rxjs/operators';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { DatapointIdentifier, DatapointStatus, DisplayGroup, DataPointSettingsEnable, DataPointSettingsVisibility, CustomerDataPointIdentifier, DataPointIdentifierDefault } from '@rfv/modules/core/models';\r\nimport { DatapointDisplay } from '../models/datapoint/datapoint-display.model';\r\nimport { Observable } from 'rxjs';\r\nimport { DatapointDisplayModel } from '../models/datapoint/datapoint-display-model.model';\r\nimport { DatapointLegend } from '../models/datapoint/datapoint-legend.model';\r\nimport { DatapointIdentifierModel } from '../models/datapoint/datapoint-identifier.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DatapointsService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getIdentifiers() {\r\n return this._http.get(`/v2/datapoints/identifiers`);\r\n }\r\n\r\n getIdentifierDefaults() {\r\n return this._http.get(`/v2/datapoints/identifier-defaults`);\r\n }\r\n\r\n saveIdentifierDefaults(defaults: DataPointIdentifierDefault[]) {\r\n return this._http.put(`/v2/datapoints/identifier-defaults`, defaults);\r\n }\r\n\r\n getCustomerIdentifiers() {\r\n return this._http.get(`/v2/datapoints/customer-identifiers`);\r\n }\r\n\r\n getStatus() {\r\n return this._http.get(`/v2/datapoints/statuses`);\r\n }\r\n\r\n getDisplayGroups(defaults: boolean = false) {\r\n return this._http.get(defaults ? `/v2/displayGroups/defaults` : `/v2/displayGroups`);\r\n }\r\n\r\n addDisplayGroup(displayGroup: DisplayGroup) {\r\n return this._http.post(`/v2/displayGroups`, displayGroup);\r\n }\r\n\r\n saveDisplayGroups(displayGroups: DisplayGroup[]) {\r\n\r\n return this._http.put(`/v2/displayGroups`, displayGroups);\r\n }\r\n\r\n // TODO combine getDatapointLegend and getDatapointLegends\r\n public getDatapointLegend(datapointId: number): Observable {\r\n return this._http.get(`/v1/datapoints/legend/${datapointId}`);\r\n }\r\n\r\n // List parameter\r\n public getDatapointLegends(dataPointIdsCsv: any): Observable {\r\n dataPointIdsCsv = dataPointIdsCsv.toString();\r\n return this._http.get(`/v1/datapoints/legends`, { params: { dataPointIdsCsv } }).pipe(\r\n map(legends => legends.sort((a, b) => { return a.Value - b.Value }))\r\n );\r\n }\r\n\r\n public getDatapointDisplayProperty(assetId: number, includeED: boolean, includeDisabled: boolean) {\r\n // TODO move endpoint in backend to other controller\r\n return this._http.get(`/v1/unitData/${assetId}/displayProperties`, { params: { includeED, includeDisabled } });\r\n }\r\n\r\n public saveDatapointDisplayProperty(model: DatapointDisplayModel): Observable {\r\n const url = `/v1/unitData/datapointDisplayProperty`;\r\n return this._http.put(url, model, { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) });\r\n }\r\n\r\n public disableDatapoint(assetId: number, datapointId: number): Observable {\r\n const url = `/v1/datapoints/${assetId}/${datapointId}`;\r\n return this._http.delete(url, { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) });\r\n }\r\n\r\n //Priority Data Add / Delete\r\n public addPriorityDataPointIdentifier(dataPointIdentifierModelList: DatapointIdentifierModel[]) {\r\n return this._http.post(`/v1/datapoints/identifiers`, dataPointIdentifierModelList);\r\n }\r\n\r\n //Data Point Settings drawer\r\n public enableDataPoints(assetId: number, datapoints: DataPointSettingsEnable[]) {\r\n return this._http.post(`/v1/unitData/${assetId}/enable-datapoints`, datapoints);\r\n }\r\n\r\n public hideDataPoints(assetId: number, datapoints: DataPointSettingsVisibility[]) {\r\n return this._http.post(`/v1/unitData/${assetId}/datapoint-display-properties`, datapoints);\r\n }\r\n}\r\n","import { Moment } from 'moment';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AggregateAlarmHistory } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/aggregate-alarm-history.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AggregateAlarmHistoryService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n\r\n public getAggregateAlarmHistory(sitemapGroupId: number, alarmstateId: number, startDate: Moment, endDate: Moment) {\r\n return this._http.get(`/v2/sitemapGroups/${sitemapGroupId}/alarmHistory/${alarmstateId}`, {\r\n params: {\r\n startDate: startDate.format('YYYY-MM-DDTHH:mm:ss'),\r\n endDate: endDate.format('YYYY-MM-DDTHH:mm:ss')\r\n }\r\n });\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { AlarmGroup, AlarmGroupDeleteResponse } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n\r\n providedIn: 'root'\r\n})\r\nexport class AlarmGroupService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get('/v1/customer/alarmGroups');\r\n }\r\n\r\n public save(alarmGroup: AlarmGroup) {\r\n return alarmGroup.Id\r\n ? this._http.put(`/v1/customer/alarmGroups/${alarmGroup.Id}`, alarmGroup)\r\n : this._http.post(`/v1/customer/alarmGroups`, alarmGroup);\r\n }\r\n\r\n public delete(alarmGroupId: number, newAlarmGroupId: number) {\r\n if (newAlarmGroupId == undefined || newAlarmGroupId == null) { newAlarmGroupId = 0; }\r\n return this._http.delete(`/v1/customer/alarmGroups/${alarmGroupId}/${newAlarmGroupId}`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { AlarmState } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlarmStateService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n getAll() {\r\n return this.http.get(`/v1/unitAlarms/states`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { AlarmTest } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlarmTestService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) {}\r\n\r\n getAll() {\r\n return this._http.get(`/v1/unitAlarms/tests`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { AppSettingsService } from '@appsettings/app-settings.service';\r\n\r\nimport { AlertSchedule, AlertScheduleTime } from '@rfv/modules/core/models';\r\nimport { AlertScheduleDeleteResponse } from '../models/alert-schedule-delete-response';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertScheduleService {\r\n public constructor(\r\n private _http: HttpClient,\r\n private _appSettings: AppSettingsService\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v2/alertSchedules`);\r\n }\r\n\r\n public save(alertSchedule: AlertSchedule) {\r\n return alertSchedule.Id\r\n ? this._http.put(`/v2/alertSchedules/${alertSchedule.Id}`, alertSchedule)\r\n : this._http.post(`/v2/alertSchedules`, alertSchedule);\r\n }\r\n\r\n public delete(alertScheduleId: number, newAlertScheduleId: number) {\r\n if (newAlertScheduleId == undefined || newAlertScheduleId == null) { newAlertScheduleId = 0;}\r\n return this._http.delete(`/v2/alertSchedules/${alertScheduleId}/${newAlertScheduleId}`);\r\n }\r\n\r\n public getTimes(alertScheduleId: number) {\r\n return alertScheduleId\r\n ? this._http.get(`/v2/alertSchedules/${alertScheduleId}/times`)\r\n : this._http.get(`/v2/alertSchedules/times`)\r\n }\r\n \r\n public saveTime(alertScheduleId: number, alertScheduleTime: AlertScheduleTime) {\r\n return alertScheduleId\r\n ? this._http.put(`/alertSchedules/${alertScheduleId}/times/${alertScheduleTime.Id}`, alertScheduleTime)\r\n : this._http.post(`/alertSchedules/${alertScheduleId}/times`, alertScheduleTime);\r\n }\r\n\r\n public deleteTime(alertScheduleId: number, alertScheduleTimeId: number) {\r\n return this._http.delete(`/alertSchedules/${alertScheduleId}/times/${alertScheduleTimeId}`).pipe(\r\n map(response => alertScheduleId)\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Application } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ApplicationService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) {}\r\n\r\n getAll() {\r\n return this.http.get(`/v2/applications`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { AssetType } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssetTypeService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getAll() {\r\n return this._http.get(`/v1/assetTypes`);\r\n }\r\n}\r\n","import { Observable, of } from 'rxjs';\r\nimport { take, catchError } from 'rxjs/operators';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\n\r\nimport { Token, Code, StateParam } from '@rfv/modules/core/models';\r\nimport { AppSettingsService } from './app-settings.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n constructor(\r\n private _http: HttpClient,\r\n private _appSettingsService: AppSettingsService\r\n ) { }\r\n\r\n redirectToCWS(redirectUrl: string, forceRefresh: boolean = false) {\r\n const code$: Observable = this._http.get(`${this._appSettingsService.getAuthServiceUri()}/GetCode`, { headers: { \"cache-control\": \"no-cache\" } });\r\n\r\n code$.pipe(\r\n take(1)\r\n ).subscribe(code => {\r\n const stateParam: Partial = {\r\n redirectUrl: redirectUrl,\r\n codeVerifier: code.codeVerifier,\r\n seed: code.seed\r\n };\r\n\r\n let url: string = this._appSettingsService.getB2CDomain()\r\n + '?scope=https://cwslogin.onmicrosoft.com/745fa34b-93d9-4160-86e1-c87b01d401e8/read'\r\n + '&application=' + this._appSettingsService.getApplication()\r\n + '&response_type=code'\r\n + '&state=' + btoa(JSON.stringify(stateParam))\r\n + '&nonce=defaultNonce'\r\n + '&client_id=83321aa9-416e-49f9-8475-20b1fa5e57c9'\r\n + '&dc=us-all'\r\n + '&code_challenge=' + code.codeChallenge\r\n + '&code_challenge_method=S256';\r\n\r\n if (forceRefresh)\r\n url += '&prompt=login';\r\n\r\n url += '&redirect_uri=' + this._appSettingsService.getB2CRedirectUri();//has to be last or else anything after will be appended as a param\r\n\r\n window.location.href = url;\r\n });\r\n }\r\n\r\n getDebugToken(cwsLoginId: string) {\r\n return this._http.get(`${this._appSettingsService.getAuthServiceUri()}/GetDebugToken/${cwsLoginId}`);\r\n }\r\n\r\n getAccessToken(accessCode: string, codeVerifier: string, seed: string) {\r\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\r\n const body: Partial = {\r\n 'accessCode': accessCode,\r\n 'codeVerifier': codeVerifier,\r\n 'seed': seed\r\n };\r\n\r\n return this._http.post(`${this._appSettingsService.getAuthServiceUri()}/GetAccessToken`, body, { headers: headers, responseType: 'json' });\r\n }\r\n\r\n refreshToken(refreshToken: string) {\r\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\r\n const body = { \"refreshToken\": refreshToken };\r\n\r\n return this._http.post(`${this._appSettingsService.getAuthServiceUri()}/RefreshToken`, body, { headers: headers, responseType: 'json' });\r\n }\r\n\r\n revokeToken(accessToken: string, refreshToken: string) {\r\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\r\n const body = { \"accessToken\": accessToken, \"refreshToken\": refreshToken };\r\n\r\n return this._http.post(`${this._appSettingsService.getAuthServiceUri()}/RevokeToken`, body, { headers: headers, responseType: 'json' });\r\n }\r\n\r\n logout(redirectUrl: string) {\r\n window.location.href = redirectUrl || this._appSettingsService.getLogoutUri();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { CellularProvider } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CelluarProviderService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v2/cellularproviders`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { \r\n CommLossType\r\n} from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CommLossTypeService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v2/commLoss/type`);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { \r\n CommLossStatus,\r\n CommLossUpdate, \r\n CommLossType\r\n} from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CommLossStatusService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public get(siteMapGroupId: number) {\r\n return this._http.get(`/v2/commLoss`, { params: { siteMapGroupId: `${siteMapGroupId}` } });\r\n }\r\n\r\n public update(data: Partial[]): Observable {\r\n return this._http.put(`/v2/commLoss`, data);\r\n }\r\n\r\n public getTypes() {\r\n return this._http.get(`/v2/commLoss/type`);\r\n }\r\n\r\n public getComms(deivceId: number) {\r\n return this._http.get(`/v1/support/comm-types/deviceConfig/deviceComms/${deivceId}`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Company } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CompanyService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/company`);\r\n }\r\n\r\n public getAllCompanies() {\r\n return this._http.get(`/v1/company/all`);\r\n }\r\n\r\n public save(company: Company) {\r\n return company.Id\r\n ? this._http.put(`/v1/company/${company.Id}`, company)\r\n : this._http.post(`/v1/company`, company);\r\n }\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n\r\nimport { ControlDatapoint, ControlPayload } from '@rfv/modules/dashboard/modules/control-admin/models/control-command-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ControlAdminService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getControlDatapoints() {\r\n return this._http.get(`/v2/controls`, {\r\n });\r\n }\r\n\r\n public saveControlDatapoint(control: ControlPayload) {\r\n return this._http.put(`/v2/control-status`, control );\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Country } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CountryService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/countries`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Customer, CustomerAggregationSettings, TileDefault } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CustomerService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAll() {\r\n // TODO: should be GET /v2/customers\r\n return this._http.get(`/v1/customer/access`);\r\n }\r\n\r\n public get(/* customerId: number */) {\r\n // TODO: should be GET /v2/customers/:customerId\r\n return this._http.get(`/v1/customer`);\r\n }\r\n\r\n public getAggregationSettings() {\r\n return this._http.get(`/v1/customer/aggregation-settings`);\r\n }\r\n\r\n public getTileDefaults() {\r\n return this._http.get(`/v1/customer/tile-defaults`);\r\n }\r\n}\r\n","export const TileActions = {\r\n 1: [1, 35, 106, 107, 108],\r\n 2: [132],\r\n 3: [3],\r\n 4: [4],\r\n 5: [501],\r\n 6: [495],\r\n 7: [7],\r\n 8: [525],\r\n 9: [9],\r\n 10: [10],\r\n 11: [130, 131],\r\n 12: [12],\r\n 13: [13],\r\n 14: [14, 123],\r\n 15: [15],\r\n 16: [16],\r\n 17: [17],\r\n 18: [18],\r\n 19: [19],\r\n 20: [20],\r\n 21: [21, 103, 105, 109, 110, 111, 134, 133],\r\n 22: [22, 103, 134, 133],\r\n 23: [23],\r\n 24: [24],\r\n 25: [25],\r\n 26: [26, 117],\r\n 27: [27],\r\n 28: [28, 101, 102],\r\n 29: [29],\r\n 30: [30],\r\n 31: [31],\r\n 32: [112, 113],\r\n 33: [33],\r\n 34: [114],\r\n 35: [35, 31, 1, 126, 107],\r\n 36: [36],\r\n 37: [37],\r\n 38: [38],\r\n 39: [115],\r\n 40: [40],\r\n 41: [41],\r\n 42: [42],\r\n 43: [43],\r\n 44: [44],\r\n 45: [45],\r\n 46: [46],\r\n 47: [47],\r\n 48: [48],\r\n 49: [49],\r\n 50: [31, 119],\r\n 51: [51],\r\n 52: [52],\r\n 53: [53],\r\n 54: [54],\r\n 55: [55, 129],\r\n 56: [56],\r\n 57: [57],\r\n 58: [58],\r\n 59: [59],\r\n 60: [35, 31, 1, 126],\r\n 61: [120, 121, 122, 31],\r\n 64: [350],\r\n 65: [65],\r\n 67: [67],\r\n 68: [135, 136],\r\n 79: [503],\r\n };\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Dashboard, Tile } from '@rfv/modules/core/models';\r\nimport { TileActions } from '../../dashboard/lookups/tile-actions';\r\n\r\n/* RxJS */\r\nimport { map } from 'rxjs/operators';\r\nimport { cloneDeep } from 'lodash';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DashboardService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getAll() {\r\n return this._http.get(`/v1/dashboards`).pipe(\r\n map(dashboards => {\r\n const newDashboards = cloneDeep(dashboards);\r\n newDashboards.forEach(dashboard => {\r\n dashboard.tiles.forEach(tile => {\r\n tile.actionIds = TileActions[tile.id] || [];\r\n });\r\n });\r\n return newDashboards;\r\n }\r\n ));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Dealer } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DealerService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getAll() {\r\n return this._http.get(`/v1/dealers`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { DerivedDataPoint, DerivedEvaluationType } from '../models';\r\nimport { DerivedItemType } from '../models/derived-item-type';\r\nimport { DerivedEvaluationRequest } from '../models/derived-evaluation-request';\r\nimport { DerivedValidationRequest } from '../models/derived-validation-request';\r\nimport { DerivedLegendItem } from '../models/derived-legend-item';\r\nimport { DerivedValidationResult } from '../models/derived-validation-result';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DerivedDataPointsService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * GET the list of derived data of an asset \r\n * @param assetId \r\n * @returns \r\n */\r\n public getItems(assetId: number) {\r\n return this._http.get(`/v2/assets/${assetId}/derived-data`);\r\n }\r\n\r\n /**\r\n * DELETE a derived data \r\n * @param assetId \r\n * @returns \r\n */\r\n public delete(assetId: number, dataPointId: number) {\r\n return this._http.delete(`/v2/assets/${assetId}/derived-data/${dataPointId}`);\r\n }\r\n\r\n /**\r\n * Update derived datapoint\r\n * @param assetId \r\n * @param derivedDataPoint \r\n * @returns \r\n */\r\n public save(assetId: number, dataPointId: number, derivedDataPoint: DerivedDataPoint) {\r\n return this._http.put(`/v2/assets/${assetId}/derived-data/${dataPointId}`, derivedDataPoint)\r\n }\r\n\r\n /**\r\n * create derived data point\r\n * @param assetId \r\n * @param derivedDatapoint \r\n * @returns \r\n */\r\n public create(assetId: number, derivedDataPoint: DerivedDataPoint) {\r\n return this._http.post(`/v2/assets/${assetId}/derived-data`, derivedDataPoint);\r\n }\r\n\r\n\r\n /**\r\n * Validate if derived data formula is using the correct syntax\r\n * @param validationrequest \r\n * @returns \r\n */\r\n public validateFormula(validationrequest: DerivedValidationRequest) {\r\n return this._http.post(`/v2/derived-data/validate`, validationrequest);\r\n }\r\n\r\n /**\r\n * Evaluate derived data formula\r\n * @param evaluationrequest \r\n * @returns \r\n */\r\n public evaluateFormula(evaluationrequest: DerivedEvaluationRequest) {\r\n return this._http.post(`/v2/derived-data/evaluate`, evaluationrequest);\r\n }\r\n\r\n /**\r\n * Gets all evaluation types\r\n * @returns \r\n */\r\n public getEvaluationTypes() {\r\n return this._http.get(`/v2/derived-data/eval-types`);\r\n }\r\n\r\n /**\r\n * Gets all item types\r\n * @returns \r\n */\r\n public getItemTypes() {\r\n return this._http.get(`/v2/derived-data/item-types`);\r\n }\r\n\r\n /**\r\n * Gets all items for legend\r\n * @returns \r\n */\r\n public getLegendItems(){\r\n return this._http.get(`/v2/derived-data-legend`);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { DeviceSearchResult } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DeviceSearchResultService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get(\r\n searchStr: string,\r\n searchBy: string,\r\n searchType: string,\r\n ) {\r\n return this._http.get(`/v1/support/device-info/search?searchStr=${searchStr}&searchBy=${searchBy}&searchType=${searchType}`);\r\n }\r\n}\r\n","import { OverviewHistory } from './../../dashboard/modules/emo/models/emo-overview.model';\r\nimport { OverhaulType, AvailableAndUpcomingIntervals } from './../../dashboard/modules/emo/models/emo-overhaul.model';\r\nimport { EMORiskLevels } from './../../dashboard/modules/emo/models/emo-risk-level.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Overhaul, AssetOverhaul, AssetAssessment, AssessmentCategory, AssetAssessmentItem, NonOverhaulAssessment, AssessmentCatInspectRisk } from '@rfv/modules/dashboard/modules/emo/models';\r\n\r\nconst httpOptions = {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n })\r\n};\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EmoService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n //Overhauls\r\n getOverhaul(assetId: number) {\r\n return this.http.get(`/v2/emo/${assetId}/overhaul`);\r\n }\r\n\r\n getOverhaulTypes() {\r\n return this.http.get(`/v2/emo/overhaul-types`);\r\n }\r\n\r\n getOverhaulIntervals(assetId: number) {\r\n return this.http.get(`/v2/emo/${assetId}/overhaul-intervals`);\r\n }\r\n\r\n createOverhaul(assetId: number, assetOverhaul: AssetOverhaul) {\r\n return this.http.post(`/v2/emo/${assetId}/overhaul`, assetOverhaul);\r\n }\r\n\r\n saveOverhaul(assetId: number, assetOverhaul: AssetOverhaul) {\r\n return this.http.put(`/v2/emo/${assetId}/overhaul`, assetOverhaul);\r\n }\r\n\r\n deleteOverhaul(assetId: number, emoAssetOverhaulId: number) {\r\n return this.http.delete(`/v2/emo/${assetId}/overhaul/${emoAssetOverhaulId}`);\r\n }\r\n\r\n //Assessments\r\n getAssessments(assetId: number) {\r\n return this.http.get(`/v2/emo/${assetId}/assessment`);\r\n }\r\n\r\n createNonOverhaulAssessment(assetId: number, nonOverhaulAssessment: NonOverhaulAssessment) {\r\n return this.http.post(`/v2/emo/${assetId}/assessment`, nonOverhaulAssessment);\r\n }\r\n\r\n saveAssessment(assetId: number, emoAssetAssessmentId: number) {\r\n return this.http.put(`/v2/emo/${assetId}/assessment`, emoAssetAssessmentId);\r\n }\r\n\r\n saveAssessmentRecommendedHours(assetId: number, emoAssetAssessmentId: number, recommendedHours: number, standardHours: number) {\r\n return this.http.put(`/v2/emo/${assetId}/assessment/${emoAssetAssessmentId}/recommendedHours/${recommendedHours}`, standardHours, httpOptions);\r\n }\r\n\r\n saveAssessmentItems(assetId: number, items: AssetAssessmentItem[]) {\r\n return this.http.put(`/v2/emo/${assetId}/assessment-items`, items);\r\n }\r\n\r\n saveCatInspectRisks(assetId: number, item: AssessmentCatInspectRisk) {\r\n return this.http.post(`/v2/emo/${assetId}/save-cat-inspect-risks`, item);\r\n }\r\n\r\n //Assessment Categories\r\n getAssessmentCategories() {\r\n return this.http.get(`/v2/emo/assessment-categories`);\r\n }\r\n\r\n //Risk Levels\r\n getEMORiskLevels() {\r\n return this.http.get(`/v2/emo/risk-levels`);\r\n }\r\n\r\n //Overview\r\n getEMOOverview(sitemapGroupId: number, assetId: number) {\r\n if (!assetId)\r\n return this.http.get(`/v2/emo/${sitemapGroupId}/overview`);\r\n else\r\n return this.http.get(`/v2/emo/${sitemapGroupId}/overview`, { params: { assetId } });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { map, Observable } from 'rxjs';\r\nimport { UserAccess } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-permissions.model';\r\nimport { UserDashboard } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-dashboard.model';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FeatureAccessService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n loadAllUserDashboards() {\r\n return this._http.get(`/v1/featureAccess/list/dashboards`);\r\n }\r\n \r\n loadAllUserDashboardsTileAccess() {\r\n return this._http.get(`/v1/featureaccess/userTilesAccess`);\r\n }\r\n\r\n loadUserAccess(userId: number): Observable {\r\n return this._http\r\n .get(\r\n `/v1/featureaccess/selectedUserTileAccess?selectedUserId=${userId}`\r\n )\r\n .pipe(\r\n map(userAccess => ({\r\n ...userAccess,\r\n UserId: userId\r\n }))\r\n );\r\n }\r\n\r\n saveUserAccess(access: UserAccess) {\r\n //a hack to stop the tiles from being sent when all dashboards have been deselected. - Ferrell\r\n if (access.Dashboards.length === 0) {\r\n access.Tiles = {};\r\n }\r\n\r\n return this._http.put(`/v1/featureaccess`, access);\r\n }\r\n}\r\n","import * as moment from \"moment\";\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AggregateFleetVitalsResponse, } from \"@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FleetVitalsService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getFleetVitals(sitemapGroupId: number, startDate: moment.Moment, endDate: moment.Moment) {\r\n return this._http.get(`/v2/sitemapGroups/${sitemapGroupId}/fleetVitals`, {\r\n params: {\r\n startDate: startDate.utc(true).format(),\r\n endDate: endDate.utc(true).format()\r\n }\r\n });\r\n }\r\n\r\n public getAggregateFleetVitals() {\r\n return this._http.get('/v2/sitemapGroups/aggregateFleetVitals'); \r\n }\r\n\r\n public actionListItems(link: string, params: T[]){ \r\n return this._http.post(`/${link}`, params);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { GaugeType } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GaugeTypeService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/gaugeTypes`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Geofence } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GeofenceService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get(sitemapGroupId: number) {\r\n return this._http.get(`/v2/geofences`, {\r\n params: {\r\n sitemapGroupId\r\n }\r\n });\r\n }\r\n\r\n public save(geofence: Geofence) {\r\n return geofence.Id\r\n ? this._http.put(`/v2/geofences/${geofence.Id}`, geofence)\r\n : this._http.post(`/v2/geofences`, geofence);\r\n }\r\n\r\n public delete(geofenceId: number) {\r\n return this._http.delete(`/v2/geofences/${geofenceId}`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { GlobalColor } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalColorService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) {}\r\n\r\n getAll() {\r\n return this.http.get(`/v1/customer/colors`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { GlobalTimezone } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GlobalTimezoneService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) {}\r\n\r\n getAll() {\r\n return this.http.get(`/v1/customer/timezones`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Icon } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IconService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/icons`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Industry } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IndustryService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) {}\r\n\r\n getAll() {\r\n return this.http.get(`/v1/industries`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { LocationGPSHistory } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class LocationService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAssetGPSHistory(assetId: number, startDate: any, endDate: any) {\r\n return this._http.get(`/v2/assetGPSHistory/${assetId}`, {\r\n params: {\r\n startDate: startDate.toString(),\r\n endDate: endDate.toString()\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { MachineComponent, MachineInfoAsset, MachineAssetComponentRequest } from '../models/machine-info';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MachineInfoService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public getMachineComponents() {\r\n return this._http.get('/v1/machine-info/components');\r\n }\r\n\r\n public getMachineInfo(assetId: number): Observable {\r\n return this._http.get(`/v1/machine-info/${assetId}`);\r\n }\r\n\r\n public addMachineInfoComponent(assetId: number, ParentUnitMachineAssetComponentId: number, component: MachineComponent, Name: string) {\r\n\r\n let request: MachineAssetComponentRequest = {\r\n Id: 0,\r\n MachineComponentId: component.Id,\r\n MachineComponentItems: null,\r\n Name,\r\n ParentUnitMachineAssetComponentId\r\n };\r\n\r\n return this._http.post(`/v1/machine-info/${assetId}/component`, request);\r\n }\r\n\r\n public deleteMachineInfoComponent(assetId: number, unitMachineAssetComponentId: number) {\r\n\r\n return this._http.delete(`/v1/machine-info/${assetId}/component/${unitMachineAssetComponentId}`);\r\n }\r\n\r\n public saveMachineInfo(unitCreationLogId: number, machineInfo: MachineInfoAsset) {\r\n\r\n machineInfo.UnitCreationLogId = unitCreationLogId;\r\n\r\n return this._http.put(`/v1/machine-info/${machineInfo.AssetId}`, machineInfo);\r\n }\r\n }","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { NotificationType } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationTypeService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getAll() {\r\n return this._http.get(`/v2/notification-types`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\n/* RxJs */\r\nimport { Observable } from 'rxjs';\r\n\r\n/* Models */\r\nimport { OnboardingEventLog, OnboardingQueueAsset } from '../models';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OnboardingQueueService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n loadAll(): Observable {\r\n return this._http.get(`/v1/onboarding-queue`);\r\n }\r\n\r\n loadEventLogs(serialNumber: number) {\r\n return this._http.get(`/v1/onboarding-queue/logs/${serialNumber}`);\r\n }\r\n\r\n load(unitCreationLogId: number) {\r\n let params = new HttpParams();\r\n\r\n if (unitCreationLogId)\r\n params = params.append(\"unitCreationLogId\", unitCreationLogId.toString());\r\n\r\n return this._http.get>(`/v1/onboarding-queue/status`, { params });\r\n }\r\n\r\n assign(make:string, serialNumber: string, customerId: number) {\r\n return this._http.post(`/v1/onboarding-queue/assign`, { customerId, make, serialNumber }, {\r\n params: { }\r\n });\r\n }\r\n\r\n resume(unitCreationLogId: number) {\r\n return this._http.post(`/v1/onboarding-queue/resume`, unitCreationLogId);\r\n }\r\n\r\n restart(unitCreationLogId: number) {\r\n return this._http.post(`/v1/onboarding-queue/restart`, unitCreationLogId);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { PlatformServiceSettings } from '../models/PlatformServiceSettings/PlatformServiceSettings';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlatFormServiceSettings {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public getPlatFormServiceSettings() {\r\n return this._http.get(`/v2/platformServiceSettings`);\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { ParsedDataResponse, RawDataResponse } from '../models';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RawDataService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public get(assetId: number, startDate: Date, endDate: Date) {\r\n const end = new Date(endDate.getTime() - endDate.getTimezoneOffset() * 60000);\r\n return this._http.get(`/v1/assets/${assetId}/parsedData`, {\r\n params: {\r\n startDate: startDate.toISOString(),\r\n endDate: end.toISOString()\r\n }\r\n })\r\n }\r\n\r\n public parse(assetId: number, msgId: number) {\r\n return this._http.get(`/v1/assets/${assetId}/message/${msgId}`).pipe(\r\n map(response => {\r\n return {\r\n ...response,\r\n AssetId: assetId,\r\n MsgId: msgId\r\n } as ParsedDataResponse\r\n })\r\n );\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserSchedulesService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) {}\r\n\r\n public getUserSchedules() {\r\n return this.http.get(`/v1/reports/GetReportSchedulesByUserId`);\r\n }\r\n\r\n public deleteScheduleReport(reportCustomerSettingRecipientId: number) {\r\n const url = `/v1/Reports/RemoveScheduleReport/${reportCustomerSettingRecipientId}`;\r\n return this.http.delete(url);\r\n }\r\n}\r\n","import { AlarmCount } from './../models/sitemap-group/alarm-count';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { SitemapGroup, SitemapGroupAlarm, SitemapGroupDatapointSettings, SitemapGroupStatus, SitemapGroupData } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SitemapGroupService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getEntities() {\r\n return this._http.get(`/v2/sitemapGroups`);\r\n }\r\n\r\n getAlarms(sitemapGroupId: number) {\r\n return this._http.get(`/v2/sitemapGroups/${sitemapGroupId}/alarms`);\r\n }\r\n\r\n getDatapoints(sitemapGroupId: number) {\r\n return this._http.get(`/v2/sitemapGroups/${sitemapGroupId}/datapoints`);\r\n }\r\n\r\n getDatapointValues(sitemapGroupId: number, dpIdentifierCsv: any) {\r\n dpIdentifierCsv = dpIdentifierCsv.toString();\r\n return this._http.get(`/v2/sitemapGroups/${sitemapGroupId}/datapoint-values`, { params: { dpIdentifierCsv } });\r\n }\r\n\r\n getAlarmCountsByGroupAndSchedule(sitemapGroupId: number, alertScheduleId: number, alarmGroupIdsCsv: any) {\r\n alarmGroupIdsCsv = alarmGroupIdsCsv.toString();\r\n\r\n return this._http.get(\r\n `/v2/sitemapGroups/${sitemapGroupId}/alarmCount/${alertScheduleId}`,\r\n { params: { alarmGroupIdsCsv } }\r\n );\r\n }\r\n saveBatchAlertRecipients(\r\n rootSitemapId: number,\r\n alertScheduleId: number,\r\n userIds: number[],\r\n notificationTypeIds: number[],\r\n alarmDetails: Array<[number, number, number]>\r\n ) {\r\n return this._http.post(`/v2/sitemapGroups/${rootSitemapId}/alarmCount/${alertScheduleId}`, {\r\n userIds: userIds,\r\n notificationTypeIds: notificationTypeIds,\r\n alarmDetails: alarmDetails.toString()\r\n });\r\n }\r\n\r\n getStatus(sitemapGroupId: number) {\r\n return this._http.get(`/v2/sitemapGroups/${sitemapGroupId}/status`);\r\n }\r\n}\r\n","import { UserLog, UserLogSearchRequest, UserLogSearchType } from '@rfv/modules/tiles/models/user-log.model';\r\nimport { LogType } from '@rfv/modules/tiles/models/log-type.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DatapointOccurrenceModel, DatapointOccurrenceUpdateModel, UnitCreationLog, UnitCreationType } from '@rfv/modules/core/models';\r\nimport { EndpointType } from '@rfv/modules/tiles/models/endpoint-type.model';\r\n\r\n/**\r\n * Support service for the support dashboard.\r\n * Actual support suite services are located in the support module.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n getUnitCreationTypes() {\r\n return this._http.get(`/v1/support/navigation/types`);\r\n }\r\n\r\n getUnitCreationLogs(sitemapGroupId: number) {\r\n return this._http.get(`/v1/support/navigation/logs`, {\r\n params: {\r\n sitemapGroupId: sitemapGroupId.toString()\r\n }\r\n });\r\n }\r\n\r\n createUnitCreationLog(unitCreationTypeId: number) {\r\n return this._http.post(`/v1/support/navigation/logs`, { unitCreationTypeId });\r\n }\r\n\r\n getDataPointOccurrences(sitemapGroupId: number) {\r\n return this._http.get(`/v2/datapoints/occurrences/${sitemapGroupId}`);\r\n }\r\n\r\n putDataPointOccurrences(sitemapGroupId: number, occurrences: DatapointOccurrenceUpdateModel[]) {\r\n return this._http.put(`/v2/datapoints/occurrences/${sitemapGroupId}`, {\r\n datapoints: occurrences\r\n });\r\n }\r\n\r\n getEndpointTypes() {\r\n return this._http.get(`/v1/logs/endpoint-types`);\r\n }\r\n\r\n getLogTypes() {\r\n return this._http.get(`/v1/logs/log-types`);\r\n }\r\n\r\n getUserLogs(startDate: string, endDate: string, scope: number, userIds: number[], searchUserIds: number[], searchAssetIds: number[], endpointIds: number[], sitemapGroupId: number) {\r\n return this._http.get(`/v1/logs`, {\r\n params: {\r\n startDate: startDate,\r\n endDate: endDate,\r\n scope: scope,\r\n userIds: userIds?.toString(),\r\n searchUserIds: searchUserIds?.toString(),\r\n searchAssetIds: searchAssetIds?.toString(),\r\n endpointIds: endpointIds?.toString(),\r\n sitemapGroupId: sitemapGroupId\r\n } \r\n });\r\n }\r\n\r\n getUserLog(logId: number) {\r\n return this._http.get(`/v2/logs/${logId}`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { SystemStatusUnit } from '../models/system-status';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SystemStatusService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n get(sitemapGroupId: number) {\r\n return this.http.get(`/v1/systemStatus/${sitemapGroupId}/fullscreen`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Tile } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TileService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAll() {\r\n return this._http.get('/v1/tiles');\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { TimeIntervalDropdown } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TimeIntervalDropdownService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/timeIntervalDropdowns`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { ToolTip } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToolTipService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/toolTips`);\r\n }\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n//GPS Config models\r\nimport { GPSConfiguration, GPSComponent } from '@rfv/modules/dashboard/modules/trip-reports/models/gps-configuration.model';\r\nimport { GPSPrimaryAsset } from '@rfv/modules/dashboard/modules/trip-reports/models/gps-primary-asset.model';\r\n\r\n//Trip Config models\r\nimport { Trip, UserTrip, UserTripAssignment } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-configuration.model';\r\nimport { TripDetailSummary, TripSummary } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-summary.model';\r\nimport { Moment } from 'moment-timezone';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TripReportsService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n //GPS Config\r\n public getGPSConfig(sitemapGroupId: number) {\r\n return this._http.get(`/v2/tripReports/${sitemapGroupId}/gps`, {\r\n }).pipe(\r\n map((configArray: GPSConfiguration[]) => {\r\n return configArray.map((config: GPSConfiguration) => {\r\n return {\r\n ...config,\r\n assetGPS: config.assetGPS.map((gpsComponent: GPSComponent) => {\r\n return {\r\n ...gpsComponent,\r\n gpsSourceSortRank: (!config.isTripTrackingDisabled && gpsComponent.assetId === config.primaryAssetId) \r\n ? -1 \r\n : ((gpsComponent.latitude !== 0 || gpsComponent.longitude !== 0) && !config.isTripTrackingDisabled)\r\n ? 0\r\n : 1,\r\n gpsValiditySortRank: (gpsComponent.latitude !== 0 && gpsComponent.longitude !== 0) \r\n ? -1\r\n : (gpsComponent.latitude === 0 && gpsComponent.longitude === 0)\r\n ? 1\r\n : 0\r\n }\r\n })\r\n }\r\n })\r\n })\r\n );\r\n }\r\n\r\n public saveSitemapPrimaryAsset(sitemapGroupId: number, primaryAsset: GPSPrimaryAsset) {\r\n return this._http.put(`/v2/tripReports/${sitemapGroupId}/gps`, primaryAsset);\r\n }\r\n\r\n //Trip Config\r\n public getTripConfig(sitemapGroupId: number) {\r\n return this._http.get(`/v2/tripReports/${sitemapGroupId}/trips`, {\r\n });\r\n }\r\n\r\n public createTripConfig(sitemapGroupId: number, trip: UserTrip) {\r\n return this._http.post(`/v2/tripReports/${sitemapGroupId}/trips`, trip);\r\n }\r\n\r\n public saveTripConfig(sitemapGroupId: number, trip: UserTrip) {\r\n return this._http.put(`/v2/tripReports/${sitemapGroupId}/trips`, trip);\r\n }\r\n\r\n public deleteTripConfig(sitemapGroupId: number, tripId: number) {\r\n return this._http.delete(`/v2/tripReports/${sitemapGroupId}/trips/${tripId}`);\r\n }\r\n\r\n //Trip Config Trip Assignments\r\n public createTripAssignment(sitemapGroupId: number, trip: UserTripAssignment) {\r\n return this._http.post(`/v2/tripReports/${sitemapGroupId}/tripAssignment`, trip);\r\n }\r\n\r\n public deleteTripAssignment(sitemapGroupId: number, tripId: number, tripAssignmentId: number) {\r\n return this._http.delete(`/v2/tripReports/${sitemapGroupId}/trip/${tripId}/tripAssignment/${tripAssignmentId}`);\r\n }\r\n\r\n //Trip Summary\r\n public getTripSummary(sitemapGroupId: number) {\r\n return this._http.get(`/v2/tripReports/${sitemapGroupId}/tripSummary`, {\r\n });\r\n }\r\n\r\n public getTripSummaryByDate(sitemapGroupId: number, startDate: Moment, endDate: Moment) {\r\n return this._http.get(`/v2/tripReports/${sitemapGroupId}/tripSummaryByDate`, {\r\n params: {\r\n startDate: startDate.format('YYYY-MM-DDTHH:mm:ss'),\r\n endDate: endDate.format('YYYY-MM-DDTHH:mm:ss')\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Moment } from 'moment';\r\n\r\nimport { UnitControl } from '../models/unit-control';\r\nimport { ControlHistory } from '../models/control-history';\r\nimport moment from 'moment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitControlService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getUnitControl(assetId: number) {\r\n return this._http.get(`/v2/assets/${assetId}/controls`);\r\n }\r\n\r\n public getControlHistory(assetId: number, startDate: Moment, endDate: Moment){\r\n return this._http.get(`/v2/assets/${assetId}/controlHistory`, {\r\n params: {\r\n startDate: startDate?.toISOString(),\r\n endDate: endDate?.toISOString() \r\n }\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UnitInfo, UnitInfoRequest } from '../models/unit-info';\r\nimport { perkinsMachineInfo } from '../models/perkins-machine-info';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitInfoService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n \r\n public getUnitInfo(assetId: number) {\r\n return this._http.get(`/v1/unitInfo/${assetId}`);\r\n }\r\n\r\n public saveUnitInfo(assetId: number, unitInfo: UnitInfoRequest) {\r\n return this._http.put(`/v1/unitInfo/${assetId}`, unitInfo);\r\n }\r\n\r\n public getPerkinsInfo(engineModelId: number, panelManufacturerId: number, panelModelId: number) {\r\n return this._http.get(`/v1/unitInfo/perkinsMachineInfo`, {\r\n params: {\r\n engineModelId: engineModelId,\r\n panelManufacturerId: panelManufacturerId,\r\n panelModelId: panelModelId\r\n }\r\n });\r\n }\r\n }","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { UnitState } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitStateService {\r\n constructor(\r\n private _http: HttpClient\r\n ) {}\r\n\r\n getAll() {\r\n return this._http.get(`/v1/unitStates`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UnitOfMeasure } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitsOfMeasureService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/unitsOfMeasure`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { CustomerUserAccessFilter } from '@rfv/modules/core/models';\r\nimport { UserAccessFilter } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-filter.model';\r\nimport { CustomerUserAccessFilterUnitInfoItem } from '@rfv/modules/dashboard/modules/user-admin/store/models/customer-user-access-filter-unit-info.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class customerUserAccessFilterService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/customerUserAccessFilters`);\r\n }\r\n\r\n public saveUnitInfoFilter(UserFilter: UserAccessFilter) {\r\n if (UserFilter.id > 0)\r\n return this._http.post(`/v1/customerUserAccessFilters/`, UserFilter);\r\n else\r\n return this._http.put(`/v1/customerUserAccessFilters`, UserFilter);\r\n }\r\n\r\n public getAssetIdsForFilter(customerUserAccessFilterId: number, userId: number) {\r\n return this._http.get(`/v1/customerUserAccessFilters/${customerUserAccessFilterId}/user/${userId}`);\r\n }\r\n\r\n public applyCustomerUserAccessFilterToUser(customerUserAccessFilterId: number, userId: number) {\r\n if (customerUserAccessFilterId > 0)\r\n return this._http.post(`/v1/customerUserAccessFilters/${customerUserAccessFilterId}/user/${userId}`, null);\r\n else\r\n return this._http.delete(`/v1/customerUserAccessFilters/${0}/user/${userId}`);\r\n }\r\n\r\n public deleteFilter(customerUserAccessFilterId: number) {\r\n return this._http.delete(`/v1/customerUserAccessFilters/${customerUserAccessFilterId}`);\r\n }\r\n\r\n public getCustomerUserAccessFilterUnitInfoItems(customerUserAccessFilterId: number) {\r\n return this._http.get(`/v1/customerUserAccessFilters/${customerUserAccessFilterId}/UnitInfo`)\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UserGroup } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserGroupService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/userGroups`);\r\n }\r\n\r\n public insert(userGroup: UserGroup) {\r\n return this._http.post(`/v1/userGroups`, userGroup);\r\n }\r\n\r\n public update(userGroups: UserGroup[]) {\r\n return this._http.put(`/v1/userGroups`, userGroups);\r\n }\r\n\r\n public delete(userGroupId: number) {\r\n return this._http.delete(`/v1/userGroups/${userGroupId}`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport moment from 'moment';\r\n\r\nimport { map, filter, delay } from \"rxjs/operators\";\r\n\r\nimport { User } from '@rfv/modules/core/models';\r\nimport { UserStatusIds } from \"../enums/user-status-ids\";\r\nimport { combineLatest } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public searchInitialLoad() {\r\n return this._http.get(`/v1/userSettings/list/fullscreen`).pipe(\r\n map(data => this.changeDatesToMoment(data || []))\r\n );\r\n }\r\n\r\n public searchUsers(filters: any) {\r\n let queryString = [];\r\n\r\n if (filters.searchString && filters.searchString.length > 0) { queryString.push('searchString=' + encodeURI(filters.searchString)); }\r\n if (filters.userGroupId) { queryString.push('filterUserGroupId=' + filters.userGroupId); }\r\n if (filters.jobTitleId) { queryString.push('filterJobTitleId=' + filters.jobTitleId); }\r\n\r\n switch (filters.userStatusId) {\r\n case UserStatusIds.Disabled: queryString.push('filterDisabled=true'); break;\r\n case UserStatusIds.Expired: queryString.push('filterExpired=true'); break;\r\n case UserStatusIds.Warning: queryString.push('filterExpiredWarning=true'); break;\r\n }\r\n\r\n if (filters.filterOutDisabled) {\r\n queryString.push('filterOutDisabled=true');\r\n }\r\n\r\n return this._http\r\n .get(`/v1/userSettings/list/fullscreen/search?` + queryString.join('&'))\r\n .pipe(\r\n map(data => this.changeDatesToMoment(data))\r\n )\r\n }\r\n\r\n public getSessionUser(customerId: number = 0) {\r\n return this._http.get('/v1/userSettings', { params: { customerId } }).pipe(\r\n map(data => this.changeUserDatesToMoment(data))\r\n );\r\n }\r\n\r\n public update(user: User) {\r\n return this._http.put(`/v1/userSettings`, user).pipe(\r\n map(data => this.changeUserDatesToMoment(data))\r\n );\r\n }\r\n\r\n public updatePreferences(user: User) {\r\n return this._http.put(`/v1/userSettings/preferences`, user).pipe(\r\n map(data => this.changeUserDatesToMoment(data))\r\n );\r\n }\r\n\r\n public newUserRequest(user: User) {\r\n return this._http.post(`/v2/users`, user);\r\n }\r\n\r\n private changeDatesToMoment(dataArray: User[]): User[] {\r\n dataArray.forEach((user) => {\r\n user.ExpirationDate = moment(user.ExpirationDate);\r\n user.fullName = user.LastName + ', ' + user.FirstName;\r\n })\r\n return dataArray;\r\n }\r\n\r\n private changeUserDatesToMoment(user: User): User {\r\n user.ExpirationDate = moment(user.ExpirationDate);\r\n return user;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { AssetUtilizationResponse, AggregateUtilization } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilizationService {\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n\r\n public getUtilization(assetId: number, startDate: Date, endDate: Date, approximate: boolean) {\r\n return this._http.get(`/v2/asset/${assetId}/utilization`, {\r\n params: {\r\n startDate: startDate.toISOString(),\r\n endDate: endDate.toISOString(),\r\n approximate: approximate\r\n }\r\n });\r\n }\r\n\r\n public getAggregateUtilization(sitemapGroupId: number, startDate: Date, endDate: Date, approximate) {\r\n return this._http.get(`/v2/sitemap/${sitemapGroupId}/aggregate-utilization`, {\r\n params: {\r\n startDate: startDate.toISOString(),\r\n endDate: endDate.toISOString(),\r\n approximate: approximate\r\n }\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UserAlertRecipient } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserAlertRecipientService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n\r\n public get(userId: number) {\r\n return this._http.get(`/v1/userAlertRecipients/${userId}`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UserGlobalFilterDataPointGroup } from '../models/user-global-filter-data-point-group';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserGlobalFilterDataPointGroupService {\r\n public constructor(\r\n private _http: HttpClient,\r\n ) { }\r\n \r\n public get() {\r\n return this._http.get(`/v1/UserGlobalFilterDataPointGroups`);\r\n }\r\n\r\n public create(dataPointGroup: UserGlobalFilterDataPointGroup) {\r\n return this._http.post(`/v1/UserGlobalFilterDataPointGroups`, dataPointGroup);\r\n }\r\n \r\n public save(dataPointGroup: UserGlobalFilterDataPointGroup) {\r\n return this._http.put(`/v1/UserGlobalFilterDataPointGroups`, dataPointGroup);\r\n }\r\n\r\n public delete(dataPointGroupId: number) {\r\n return this._http.delete(`/v1/UserGlobalFilterDataPointGroups/${dataPointGroupId}`);\r\n }\r\n }","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { CustomerVimKnownGood } from '@rfv/modules/core/models';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DealerVimService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get('/v1/customer/dealer-vims');\r\n }\r\n\r\n public post(SHA1: string, DOutEnabled: boolean) {\r\n return this._http.post(`/v1/customer/dealer-vims`, {SHA1}, {params: {DOutEnabled}});\r\n }\r\n\r\n public delete(id: number, SHA1: string) {\r\n return this._http.delete(`/v1/customer/dealer-vims/${id}`, {params: {SHA1}});\r\n }\r\n\r\n public put(SHA1: string) {\r\n return this._http.put(`/v1/customer/vims-dout`, {SHA1});\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { UnitOfMeasureConversions } from '../models/unit-of-measure-conversions';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitsOfMeasureConversionsService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/unitsOfMeasureConversions`);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http'; \r\n\r\n\r\nimport { UnitControlCommand } from '@rfv/modules/core/models';\r\nimport { CommandStatus } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DeviceCommandService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n // demand poll\r\n public createDemandPoll(assetId: number, pollUnitData: boolean, customOverride: string) {\r\n return this._http.post(`/v1/support/demandPoll/${assetId}`, null, {\r\n params: { pollUnitData: pollUnitData.toString(), customOverride }\r\n });\r\n }\r\n\r\n public createUnitControlCommand(command: UnitControlCommand){\r\n const url = `/v2/device-commands`;\r\n return this._http.post(url, command);\r\n }\r\n\r\n\r\n //check status \r\n public getCommandStatus(commandId: number) {\r\n return this._http.get(`/v1/support/status/${commandId}`);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\n\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssetNotificationRecipientService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * Deletes alert recipient.\r\n * @param alertRecipientId\r\n */\r\n delete(alertRecipientId: number, removeOne: boolean): Observable {\r\n // const removeOne: boolean = false;\r\n const url = `/v1/unitAlerts/alertRecipient/${alertRecipientId}`;\r\n return this._http.delete(url, {\r\n params: {\r\n removeOne: removeOne.toString()\r\n }\r\n });\r\n }\r\n /**\r\n * Deletes user recipient.\r\n * @param userId\r\n */\r\n deleteAllRecipient(userId: number): Observable { \r\n const url = `/v1/userAlertRecipients/${userId}`;\r\n return this._http.delete(url);\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { JobTitle } from \"@rfv/modules/dashboard/modules/user-admin/store/models/job-title\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JobTitleService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get(`/v1/jobTitles`);\r\n }\r\n\r\n public getGlobalJobTitles() {\r\n return this._http.get(`/v1/jobTitles/globalJobTitles`);\r\n }\r\n\r\n public saveJobTitle(jobtitle: JobTitle) {\r\n return this._http.post(`/v1/jobTitles/saveJobTitle`, jobtitle);\r\n }\r\n\r\n public saveJobTitles(jobtitles: JobTitle[]) {\r\n return this._http.put(`/v1/jobTitles/saveJobTitles`, jobtitles);\r\n }\r\n\r\n public deleteJobTitle(jobTitleId: number) {\r\n return this._http.delete(`/v1/jobTitles/${jobTitleId}`);\r\n }\r\n\r\n public replaceJobTitle(newJobTitleId: number, oldJobTitleId: number) {\r\n return this._http.put(`/v1/jobTitles/replace`, null, {\r\n params: {\r\n newJobTitleId: newJobTitleId.toString(),\r\n oldJobTitleId: oldJobTitleId.toString()\r\n }\r\n });\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Store } from \"@ngrx/store\";\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OneTrustService {\r\n constructor(\r\n private _store: Store\r\n ) {\r\n if (!this.otEnabled)\r\n return;\r\n\r\n //@ts-ignore\r\n let activeGroups: string[] = window.OnetrustActiveGroups\r\n .split(\",\")\r\n .filter((permission: string) => permission);\r\n\r\n this._store.dispatch(fromRoot.OneTrust.ConsentChanged(activeGroups));\r\n this._store.dispatch(fromRoot.OneTrust.Loaded());\r\n\r\n //@ts-ignore\r\n window.OneTrust.OnConsentChanged((change: CustomEvent) => {\r\n this._store.dispatch(fromRoot.OneTrust.ConsentChanged(change.detail));\r\n });\r\n }\r\n\r\n public get otEnabled() {\r\n //@ts-ignore\r\n if (!window.OneTrust || !window.OnetrustActiveGroups)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public showSettings() {\r\n if (!this.otEnabled)\r\n return;\r\n\r\n const el = document.getElementsByClassName(\"ot-sdk-show-settings\")[0] as HTMLElement;\r\n\r\n if (!el)\r\n return;\r\n\r\n el.click();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ECMSerialNumberSuffix, SerialNumberPrefix } from '@rfv/modules/core/models';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SerialNumberService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getPrefixes() {\r\n return this._http.get('/v2/serial-number-prefix')\r\n }\r\n\r\n public getSuffixes() {\r\n return this._http.get('/v2/serial-number-suffix');\r\n }\r\n}\r\n","import { PleConfigToolTemplate } from '../../support/modules/server-config/models/ple-config-tool-template.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { VimsStreamingTemplateConfig } from '@rfv/modules/core/models/vim-streaming-template-config';\r\nimport { StreamingTemplateAssignment } from '@rfv/modules/core/models/streaming-template-assignment';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StreamingTemplateService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAll(includeAll: boolean = false) {\r\n return this._http.get(`/v2/streamingTemplates?includeAll=${includeAll}`);\r\n }\r\n\r\n public assignStreamingTemplate(data: StreamingTemplateAssignment) {\r\n return this._http.put(`/v2/streamingTemplates/assignTemplateToConfiguration`, data);\r\n }\r\n\r\n public unassignStreamingTemplate(id: number) {\r\n return this._http.delete(`/v2/streamingTemplates/assignTemplateToConfiguration/${id}`);\r\n }\r\n\r\n public getStreamingTemplateForVims(SHA1: string, snPrefix: string) {\r\n const params = new HttpParams();\r\n\r\n if (SHA1)\r\n params.append('sha1', SHA1);\r\n\r\n if (snPrefix)\r\n params.append('snPrefix', snPrefix);\r\n\r\n return this._http.get(`/v2/streamingTemplates/vims`, { params });\r\n }\r\n\r\n public deleteStreamingConfig(templateId: number) {\r\n return this._http.delete(`/v2/streamingTemplates/${templateId}`)\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n/* RxJS */\r\nimport { Observable } from 'rxjs';\r\nimport { map, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store'\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport { UserUnitAccessFleet } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-unit-access-fleet';\r\nimport { UserUnitAccessFleetUpdate } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-unit-access-fleet-update';\r\n\r\n/* Models */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UnitAccessService {\r\n\r\n users$ = this._store$.pipe(select(fromUser.getSearchUserEntities));\r\n sessionUser$ = this._store$.pipe(select(fromCore.UserSession.getSession));\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n private _store$: Store\r\n ) { }\r\n\r\n loadUserFleet(userId: number): Observable {\r\n\r\n return this._http.get(`/v1/unitAccess/fleet?restrictedAccessUserId=${userId}`).pipe(\r\n withLatestFrom(this.users$, this.sessionUser$),\r\n map(([fleetAccess, users, sessionUser]) => {\r\n return {\r\n ... fleetAccess,\r\n userGroupId: userId === sessionUser.UserId ? sessionUser.UserGroupId : users[fleetAccess.userId].UserGroupId\r\n };\r\n })\r\n );\r\n }\r\n\r\n saveUserFleet(fleet: UserUnitAccessFleetUpdate): Observable {\r\n return this._http.post(`/v1/unitAccess/fleet`, fleet);\r\n }\r\n \r\n}","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\n\r\nimport { AppSettingsService } from '@appsettings/app-settings.service';\r\n\r\nimport { UserNotificationSettings, UserNotificationSettingsRecipient } from \"@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-settings.model\";\r\n\r\n@Injectable({ \r\n providedIn: 'root'\r\n})\r\nexport class UserNotificationSettingsService {\r\n\r\n public constructor(\r\n private _http: HttpClient,\r\n private _appSettings: AppSettingsService\r\n ) { }\r\n\r\n public get(userId: number) {\r\n return this._http.get(`/v1/userNotifications/${userId}`);\r\n }\r\n\r\n public save(userId: number, notificationSettings: UserNotificationSettings) {\r\n return this._http.put(`/v1/userNotifications/${userId}`, notificationSettings);\r\n\r\n }\r\n\r\n public sendTest(param: UserNotificationSettingsRecipient) {\r\n return this._http.post(`/v1/userNotifications/sendTest`, param);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport moment from 'moment';\r\n\r\nimport { map } from \"rxjs/operators\";\r\n\r\nimport { User } from '@rfv/modules/core/models';\r\nimport { Observable } from 'rxjs';\r\nimport { NewUserSearchResult } from '@rfv/modules/dashboard/modules/user-admin/store/models/new-user-search-result.model';\r\nimport { NewUserRequest } from '@rfv/modules/dashboard/modules/user-admin/store/models/new-user-request.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserOnboardService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public searchRfvUsers(cwsId: string) {\r\n return this._http.get(`/v1/onboarding/searchRfvUsers/${cwsId}`);\r\n }\r\n\r\n public searchCwsUsers(searchString: string) {\r\n return this._http.get(`/v1/onboarding/searchCwsUsers/${searchString}`);\r\n }\r\n\r\n public createRfvUser(request: NewUserRequest, customerTemplate: string) {\r\n return this._http.post('/v1/onboarding/cws', request, {\r\n params: {\r\n customerTemplatePath: customerTemplate\r\n }\r\n }).pipe(\r\n map(data => this.changeUserDatesToMoment(data))\r\n );\r\n }\r\n\r\n public copyUserPermissions(fromUserId: number, toUserId: number) { \r\n return this._http.put('/v1/onboarding/copyUserPermissions',null, {\r\n params: {\r\n fromUserId: fromUserId.toString(),\r\n toUserId: toUserId.toString(),\r\n }\r\n });\r\n }\r\n\r\n public linkExistingCwsUser(request: NewUserRequest) {\r\n return this._http.post('/v1/onboarding/rfv', request).pipe(\r\n map(data => this.changeUserDatesToMoment(data))\r\n );\r\n }\r\n\r\n public addCustomerAccess(request: NewUserRequest) {\r\n return this._http.post('/v1/onboarding/customerAccess', request).pipe(\r\n map(data => this.changeUserDatesToMoment(data))\r\n );\r\n }\r\n\r\n private changeUserDatesToMoment(user: User): User {\r\n user.ExpirationDate = moment(user.ExpirationDate);\r\n return user;\r\n }\r\n\r\n public resendWelcomeEmail(CWSLoginId: string): Observable {\r\n return this._http.post('/v1/onboarding/resend-welcome-email', ({ CWSLoginId }));\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AppSettingsService } from '@rfv/modules/core/services/app-settings.service';\r\nimport { AssetNamePreference } from '@rfv/modules/dashboard/modules/user-admin/store/models/asset-name-preference.model';\r\nimport { ColorTheme } from '@rfv/modules/dashboard/modules/user-admin/store/models/color-theme.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserPreferencesService {\r\n\r\n constructor(private http: HttpClient, private appSettings: AppSettingsService) { }\r\n\r\n getColorThemes(): Observable {\r\n return this.http.get(`${this.appSettings.getApiBaseUri()}/v1/userSettings/themeList`);\r\n }\r\n\r\n getAssetNamePreferences(): Observable {\r\n return this.http.get(`${this.appSettings.getApiBaseUri()}/v1/userSettings/asset-name-preference-list`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { VimKnownGood } from '@rfv/modules/core/models';\r\nimport {VimAsset} from '@rfv/modules/core/models/vim-asset';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class VimService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public get() {\r\n return this._http.get('/v1/support/hardware-config/vims/known-good');\r\n }\r\n\r\n public delete(SHA1: string) {\r\n return this._http.delete(`/v1/support/hardware-config/vims/known-good/${SHA1}`);\r\n }\r\n\r\n public getVimsAssets(SHA1: string) {\r\n return this._http.get(`/v1/support/hardware-config/vims/assets/${SHA1}`);\r\n }\r\n\r\n public approveVims(SHA1: string, Desc: string) {\r\n return this._http.post(`/v1/support/hardware-config/vims/known-good/${SHA1}`, {\r\n Name: Desc\r\n });\r\n }\r\n\r\n}\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, BreadcrumbOptions } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load');\r\n\r\nexport const LoadFail = createAction('[Core] LoadFail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] LoadSuccess');\r\n\r\nexport const Online = createAction('[Core] Online');\r\nexport const Offline = createAction('[Core] Offline');\r\n\r\nexport const SetBreadcrumbOptions = createAction('[Core] Set Breadcrumb Options', (options: BreadcrumbOptions) => ({ payload: { options }}));\r\nexport const SetBreadcrumbButtons = createAction('[Core] Set Breadcrumb Buttons', (buttons: string[]) => ({ payload: { buttons }}));","import { Moment } from 'moment';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { AggregateAlarmHistory } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/aggregate-alarm-history.model';\r\n\r\nexport const LoadAggregateAlarmHistory = createAction('[Core] Load Aggregate Alarm History', (sitemapGroupId: number, startDate: Moment, endDate: Moment, alarmstateId: number = 1) => ({ sitemapGroupId, alarmstateId, startDate, endDate }));\r\nexport const LoadAggregateAlarmHistoryFail = createAction('[Core] Load Aggregate Alarm History Fail', (error: ApiError) => ({ error }));\r\nexport const LoadAggregateAlarmHistorySuccess = createAction('[Core] Load Aggregate Alarm History Success', (aggregateAlarmHistory: AggregateAlarmHistory[]) => ({ aggregateAlarmHistory }));\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { AggregateAlarmHistoryService, } from '@rfv/modules/core/services';\r\nimport { Store } from '@ngrx/store';\r\n\r\n @Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _aggregateAlarmHistoryService: AggregateAlarmHistoryService,\r\n ) { }\r\n\r\n public getGPSHistory$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadAggregateAlarmHistory),\r\n switchMap(action => this._aggregateAlarmHistoryService.getAggregateAlarmHistory(action.sitemapGroupId, action.alarmstateId, action.startDate, action.endDate).pipe(\r\n map(entity => EntityActions.LoadAggregateAlarmHistorySuccess(entity)),\r\n catchError(error => of(EntityActions.LoadAggregateAlarmHistoryFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n\r\n","\r\nimport { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { AggregateAlarmHistory } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/aggregate-alarm-history.model';\r\n\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n aggregateAlarmHistory: AggregateAlarmHistory[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\n\r\nexport const initialState: State = ({\r\n aggregateAlarmHistory: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadAggregateAlarmHistory, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadAggregateAlarmHistoryFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadAggregateAlarmHistorySuccess, (state, { aggregateAlarmHistory }) => ({\r\n ...state,\r\n aggregateAlarmHistory: aggregateAlarmHistory,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\n\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.aggregateAlarmHistory);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAggregateAlarmHistory = createSelector(getState, state => state.aggregateAlarmHistory);\r\n\r\n","\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { AggregateFleetVitalsResponse, ExceptionUpdate } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model';\r\n\r\n\r\nexport const LoadAggregateFleetVitals = createAction('[Core] Load Aggregate Fleet Vitals');\r\n\r\nexport const LoadAggregateFleetVitalsFail = createAction('[Core] Load Aggregate Fleet Vitals Fail',\r\n (error: ApiError) => ({ error })\r\n);\r\n\r\nexport const LoadAggregateFleetVitalsSuccess = createAction('[Core] Load Aggregate Fleet Vitals Success',\r\n (data: AggregateFleetVitalsResponse) => ({ data })\r\n);\r\n\r\nexport const ActionListItems = createAction('[Core] Action List Items',\r\n (items: any[], link: string, successMessage: string, failMessage: string) => ({ items, link, successMessage, failMessage })\r\n); \r\n\r\nexport const ActionListItemsFail = createAction('[Core] Action List Items Fail',\r\n (error: ApiError, failMessage: string) => ({ error, failMessage })\r\n);\r\n\r\nexport const ActionListItemsSuccess = createAction('[Core] Action List Items Success',\r\n (response: any[], successMessage: string) => ({ response, successMessage })\r\n);","import { Injectable } from '@angular/core';\r\n\r\nimport { EMPTY, of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\nimport * as DashboardActions from '@rfv/modules/dashboard/store';\r\n\r\nimport { FleetVitalsService, } from '@rfv/modules/core/services';\r\nimport { AggregateFleetVitalsResponse } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { Failed } from '../notifications';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\tpublic constructor(\r\n\t\tprivate _actions: Actions,\r\n\t\tprivate _fleetVitalsService: FleetVitalsService,\r\n\t) { }\r\n\r\n\tpublic LoadAggregateFleetVitals$ = createEffect(\r\n\t\t() => this._actions.pipe(\r\n\t\t\tofType(EntityActions.LoadAggregateFleetVitals, DashboardActions.disactivateReload),\r\n\t\t\tswitchMap(action => {\r\n\t\t\t\tif (action.type === EntityActions.LoadAggregateFleetVitals.type) {\r\n\t\t\t\t\treturn this._fleetVitalsService.getAggregateFleetVitals().pipe(\r\n\t\t\t\t\t\tmap((data: AggregateFleetVitalsResponse) => EntityActions.LoadAggregateFleetVitalsSuccess(data)),\r\n\t\t\t\t\t\tcatchError(error => of(EntityActions.LoadAggregateFleetVitalsFail(error)))\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\telse if (action.type === DashboardActions.disactivateReload.type) {\r\n\t\t\t\t\treturn EMPTY;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t)\r\n\t);\r\n\r\n\tpublic ActionListItems$ = createEffect(\r\n\t\t() => this._actions.pipe(\r\n\t\t\tofType(EntityActions.ActionListItems),\r\n\t\t\tswitchMap(action => this._fleetVitalsService.actionListItems(action.link, action.items).pipe(\r\n\t\t\t\tmap(response => EntityActions.ActionListItemsSuccess(response, action.successMessage)),\r\n\t\t\t\tcatchError(error => of(EntityActions.ActionListItemsFail(error, action.failMessage)))\r\n\t\t\t))\r\n\t\t)\r\n\t);\r\n\r\n\tpublic ActionListItemsSuccess$ = createEffect(\r\n\t\t() => this._actions.pipe(\r\n\t\t\tofType(EntityActions.ActionListItemsSuccess),\r\n\t\t\tswitchMap(action => [\r\n\t\t\t\tfromRoot.Banner.Show({ options: { message: action.successMessage || 'Success' , autoClose: 3000, type: 'success' } }),\r\n\t\t\t\tEntityActions.LoadAggregateFleetVitals()\r\n\t\t\t])\r\n\t\t)\r\n\t);\r\n\r\n\tpublic ActionListItemsFail$ = createEffect(\r\n\t\t() => this._actions.pipe(\r\n\t\t\tofType(EntityActions.ActionListItemsFail),\r\n\t\t\tmap(action => fromRoot.Banner.Show({ options: { message: `${action.failMessage || 'Failed.'} ${action.error || ''}`, autoClose: 3000, type: 'error' } }))\r\n\t\t)\r\n\t);\r\n}\r\n\r\n","\r\nimport { FleetVitalsColumn, MappedCalculationResults, SitemapFleetVitalsData } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n selectedId: number | null;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n error: ApiError;\r\n\r\n sitemapFleetVitalsData: SitemapFleetVitalsData[];\r\n\r\n sitemapColumnConfig: FleetVitalsColumn[];\r\n assetColumnConfig: FleetVitalsColumn[];\r\n\r\n calculationResults: MappedCalculationResults;\r\n\r\n parentConfigs: { [calculationTypeId: number]: string }\r\n}\r\n\r\n\r\nexport const initialState: State = {\r\n selectedId: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n error: null,\r\n\r\n sitemapFleetVitalsData: null,\r\n\r\n sitemapColumnConfig: [],\r\n assetColumnConfig: [],\r\n\r\n calculationResults: {},\r\n\r\n parentConfigs: null\r\n\r\n};\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadAggregateFleetVitals, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadAggregateFleetVitalsFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadAggregateFleetVitalsSuccess, (state, { data }) => ({\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null,\r\n\r\n sitemapFleetVitalsData: data?.sitemapFleetVitalsData || null,\r\n parentConfigs: data?.parentConfigs || null\r\n })),\r\n\r\n on(EntityActions.ActionListItems, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(EntityActions.ActionListItemsFail, EntityActions.ActionListItemsSuccess, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from \"@ngrx/store\";\r\nimport { getFeatureState } from '../selectors';\r\nimport { CalculationResult, ColumnConfig, FleetVitalsColumn, MappedCalculationResults, } from \"@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model\";\r\n\r\nimport { IAggregateMapMarker } from \"@rfv/modules/rfv/aggregate-map/aggregate-map.component\";\r\n\r\nimport * as unitStatesSelectors from '../unit-states/selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.aggregateFleetVitals);\r\n \r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n \r\nexport const getData = createSelector(getState, state => state?.sitemapFleetVitalsData || []);\r\n\r\nexport const getMapMarkers = createSelector(\r\n getData,\r\n unitStatesSelectors.getEntities,\r\n (sitemaps, states) => sitemaps?.map(sitemap => ({\r\n id: sitemap.SitemapGroupId,\r\n iconId: sitemap.StatusId,\r\n name: sitemap.SitemapGroupName,\r\n title: states[sitemap.StatusId].name,\r\n color1: '#' + states[sitemap.StatusId].color1,\r\n color2: '#' + states[sitemap.StatusId].color2,\r\n priorityOrder: states[sitemap.StatusId].priorityOrder,\r\n latitude: sitemap.Latitude,\r\n longitude: sitemap.Longitude,\r\n customerId: sitemap.CustomerId,\r\n\r\n markers: sitemap.AssetFleetVitalsData?.map(asset => ({\r\n id: asset.AssetId,\r\n iconId: asset.StatusId,\r\n name: asset.AssetName,\r\n title: states[asset.StatusId].name,\r\n color1: '#' + states[asset.StatusId].color1,\r\n color2: '#' + states[asset.StatusId].color2,\r\n priorityOrder: states[asset.StatusId].priorityOrder,\r\n latitude: asset.Latitude,\r\n longitude: asset.Longitude,\r\n }))\r\n // routerLink: asset.routerLink,\r\n // unclusteredMarker: asset.IsPrimaryAsset\r\n } as IAggregateMapMarker)) || []\r\n);\r\n\r\n\r\nexport const getCalculationResults = createSelector(getData, data => {\r\n\r\n let mappedResults = {} as MappedCalculationResults;\r\n\r\n if (!data) return mappedResults\r\n\r\n const getCalculations = (results: CalculationResult[]) => {\r\n let calculations: { [key: number]: CalculationResult } = {}\r\n\r\n results.reduce((calculations, result) => {\r\n calculations[+result.CalculationId] = result;\r\n return calculations\r\n\r\n }, calculations as { [key: number]: CalculationResult })\r\n return calculations\r\n }\r\n\r\n for (let sitemap of data) {\r\n let calculations = getCalculations(sitemap.SitemapCalculationResults);\r\n\r\n mappedResults[`${sitemap.CustomerId}-${sitemap.SitemapGroupId}`] = calculations;\r\n\r\n for (let asset of sitemap.AssetFleetVitalsData) {\r\n let assetCalculations = getCalculations(asset.AssetCalculationResults);\r\n mappedResults[`${sitemap.CustomerId}-${sitemap.SitemapGroupId}-${asset.AssetId}`] = assetCalculations;\r\n }\r\n }\r\n return mappedResults\r\n});\r\n\r\n\r\nexport const getColumnConfigs = createSelector(getState, state => {\r\n\r\n if (!state.parentConfigs)\r\n return null;\r\n\r\n const parentConfigs = state.parentConfigs\r\n\r\n return Object.keys(parentConfigs)?.reduce((config, key) => {\r\n config[+key] = JSON.parse(parentConfigs[key]) as ColumnConfig\r\n return config\r\n }, {} as { [calculationTypeId: number]: ColumnConfig }) || {};\r\n\r\n});\r\n\r\n\r\nexport const getSitemapColumns = createSelector(getData, (data) => [\r\n ...data?.reduce((mappedColumn, sitemap) => {\r\n sitemap.SitemapCalculationResults.forEach(calc => {\r\n\r\n if (!mappedColumn.has(calc.CalculationId.toString())) {\r\n mappedColumn.set(calc.CalculationId.toString(), {\r\n key: calc.CalculationId.toString(),\r\n header: calc.CalculationName,\r\n displayOrder: calc.DisplayOrder,\r\n calculationTypeId: calc.CalculationTypeId\r\n });\r\n }\r\n });\r\n return mappedColumn;\r\n }, new Map()).values()\r\n].sort((a, b) => {\r\n if (a.displayOrder === b.displayOrder)\r\n return a.header.localeCompare(b.header);\r\n\r\n return a.displayOrder - b.displayOrder;\r\n}));\r\n\r\n\r\nexport const getAssetColumns = createSelector(\r\n getData,\r\n (data) => [\r\n ...data.reduce((mappedAssetColumns, sitemap) => {\r\n sitemap.AssetFleetVitalsData.forEach(asset => {\r\n asset.AssetCalculationResults.forEach(calc => {\r\n if (!mappedAssetColumns.has(calc.CalculationId))\r\n mappedAssetColumns.set(calc.CalculationId, {\r\n key: calc.CalculationId.toString(),\r\n header: calc.CalculationName,\r\n displayOrder: calc.DisplayOrder,\r\n calculationTypeId: calc.CalculationTypeId\r\n });\r\n });\r\n });\r\n return mappedAssetColumns;\r\n }, new Map()).values()\r\n ].sort((a, b) => {\r\n if (a.displayOrder === b.displayOrder)\r\n return a.header.localeCompare(b.header);\r\n\r\n return a.displayOrder - b.displayOrder;\r\n })\r\n);\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { Runtime } from '@rfv/modules/core/models/runtime/runtime.model';\r\n\r\n// Runtime \"main\" data\r\nexport const LoadAggregateRuntime = createAction(\r\n '[System Runtime] Load Runtime',\r\n props<{ sitemapGroupId: number, dateFrom: string, dateTo: string }>()\r\n);\r\nexport const LoadAggregateRuntimeFail = createAction(\r\n '[System Runtime] Load Runtime Fail',\r\n props<{ error: ApiError }>()\r\n);\r\nexport const LoadAggregateRuntimeSuccess = createAction(\r\n '[System Runtime] Load Runtime Success',\r\n props<{ runtime: Runtime }>()\r\n);\r\n\r\n// setup of dates\r\nexport const SetupDateFrom = createAction(\r\n '[System Runtime] Setup date FROM',\r\n props<{ dateFrom: string }>()\r\n);\r\nexport const SetupDateTo = createAction(\r\n '[System Runtime] Setup date TO',\r\n props<{ dateTo: string }>()\r\n);\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Runtime } from '@rfv/modules/core/models/runtime/runtime.model';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AggregateRuntimeApiService {\r\n constructor(private http: HttpClient) { }\r\n\r\n getAggregateRuntime(sitemapGroupId: number, dateFrom: string, dateTo: string) {\r\n return this.http.get(`/v1/runtime/sitemapgroup?sitemapGroupId=${sitemapGroupId}&DateFrom=${dateFrom}&DateTo=${dateTo}`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport { catchError, map, switchMap, withLatestFrom } from 'rxjs/operators';\r\nimport { of } from 'rxjs';\r\n\r\nimport { AggregateRuntimeApiService } from '@rfv/modules/core/services/aggregate-runtime-api.service';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromAggregateRuntime from '@rfv/modules/core/store/aggregate-runtime/selectors';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as AggregateRuntimeActions from '@rfv/modules/core/store/aggregate-runtime/actions';\r\nimport { DateUtils } from '@rfv/modules/shared/utils';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n constructor(\r\n private actions$: Actions,\r\n private aggregateRuntimeService: AggregateRuntimeApiService,\r\n private store: Store\r\n ) { }\r\n\r\n loadAggregateRuntime$ = createEffect(() => this.actions$.pipe(\r\n ofType(AggregateRuntimeActions.LoadAggregateRuntime),\r\n withLatestFrom(\r\n this.store.select(fromDashboard.getSelectedSitemapGroupId),\r\n this.store.select(fromAggregateRuntime.getAggregateRuntimeDateFrom),\r\n this.store.select(fromAggregateRuntime.getAggregateRuntimeDateTo)\r\n ),\r\n switchMap(([action, sitemapGroupId, dateFrom, dateTo]) => {\r\n return this.aggregateRuntimeService.getAggregateRuntime(\r\n action.sitemapGroupId || sitemapGroupId,\r\n action.dateFrom || dateFrom || (DateUtils.moment().subtract(1, 'months').startOf('day')).format('YYYY-MM-DDTHH:mm:ss'),\r\n action.dateTo || dateTo || (DateUtils.moment().endOf('day')).format('YYYY-MM-DDTHH:mm:ss')\r\n ).pipe(\r\n map(runtime => AggregateRuntimeActions.LoadAggregateRuntimeSuccess({ runtime })),\r\n catchError(error => of(AggregateRuntimeActions.LoadAggregateRuntimeFail({ error })))\r\n );\r\n })\r\n ));\r\n\r\n loadAggregateRuntimeFailed$ = createEffect(() => this.actions$.pipe(\r\n ofType(AggregateRuntimeActions.LoadAggregateRuntimeFail),\r\n switchMap(_ => [\r\n fromRoot.Banner.Show({\r\n options: { type: 'error', message: `Loading runtime for sitemap group failed.`, autoClose: 3000 }\r\n }),\r\n ])\r\n ));\r\n\r\n\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as AggregateRuntimeActions from './actions';\r\nimport { State, initialState } from './state';\r\n\r\n\r\nconst aggregateRuntimeReducer = createReducer(\r\n initialState,\r\n\r\n on(AggregateRuntimeActions.LoadAggregateRuntime, state => ({\r\n ...state,\r\n data: null,\r\n isLoading: true,\r\n error: null\r\n })),\r\n\r\n on(AggregateRuntimeActions.LoadAggregateRuntimeFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AggregateRuntimeActions.LoadAggregateRuntimeSuccess, (state, { runtime }) => ({\r\n ...state,\r\n data: runtime,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AggregateRuntimeActions.SetupDateFrom, (state, action) => ({\r\n ...state,\r\n dateFrom: action.dateFrom\r\n })),\r\n\r\n on(AggregateRuntimeActions.SetupDateTo, (state, action) => ({\r\n ...state,\r\n dateTo: action.dateTo\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return aggregateRuntimeReducer(state, action);\r\n}\r\n","import * as Highcharts from 'highcharts';\r\n\r\nimport { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport * as fromUserSession from '@rfv/modules/core/store/user-session';\r\nimport * as fromRuntimeSettings from '@rfv/modules/dashboard/modules/runtime-settings/store/event-calculation/selectors';\r\n\r\n\r\nimport { AppColors } from '@rfv/modules/shared/types/app-colors';\r\n\r\n\r\nexport const getAggregateRuntimeState = createSelector(getFeatureState, state => state.aggregateRuntime);\r\n\r\nexport const getAggregateRuntimeIsLoading = createSelector(getAggregateRuntimeState, state => state && state.isLoading);\r\nexport const getAggregateRuntimeIsLoaded = createSelector(getAggregateRuntimeState, state => state && state.isLoaded);\r\nexport const getAggregateRuntimeError = createSelector(getAggregateRuntimeState, state => state && state.error);\r\nexport const getAggregateRuntimeData = createSelector(getAggregateRuntimeState, state => state && state.data);\r\nexport const getAggregateRuntimeDateFrom = createSelector(getAggregateRuntimeState, state => state && state.dateFrom);\r\nexport const getAggregateRuntimeDateTo = createSelector(getAggregateRuntimeState, state => state && state.dateTo);\r\nexport const getAggregateRuntimeTabIndex = createSelector(getAggregateRuntimeState, state => state && state.tabIndex);\r\n\r\nexport const getAggregateRuntimeCalculations = createSelector(\r\n getAggregateRuntimeData,\r\n fromRuntimeSettings.getEventCalculations,\r\n (state, calculations) => {\r\n return state && calculations && state.Calculations.map(calculation => {\r\n return {\r\n ...calculation,\r\n Result: calculation.IsPercentCalculation ? calculation.Result : parseFloat((calculation.Result/3600).toFixed(0)),\r\n Abbreviation: calculations[calculation.Id] ? calculations[calculation.Id].Abbr : calculation.Name\r\n };\r\n }) || [];\r\n }\r\n);\r\n\r\nexport const getAggregateRuntimeOverallCalcs = createSelector(\r\n getAggregateRuntimeCalculations,\r\n calcs => calcs.filter(calc => !calc.IsPercentCalculation)\r\n);\r\n\r\nexport const getAggregateRuntimeOverallCharts = createSelector(\r\n getAggregateRuntimeCalculations,\r\n fromUserSession.getSessionThemeId,\r\n (calcs, themeId): Highcharts.Options[] => calcs.filter(calc => calc.IsPercentCalculation).map(calc => ({\r\n title: {\r\n text: calc.Result + '%'\r\n },\r\n subtitle: {\r\n text: calc.Name\r\n },\r\n series: [\r\n {\r\n type: 'pie',\r\n data: [\r\n { y: Number(calc.Result), color: '#' + calc.Color }, \r\n { y: 100 - Number(calc.Result), color: themeId === 1 ? AppColors.gray : AppColors.white_d3 }\r\n ]\r\n }\r\n ]\r\n }))\r\n);\r\n\r\nexport const getAggregateRuntimeEvents = createSelector(getAggregateRuntimeData, state => state && state.Events);\r\nexport const getNonZeroEvents = createSelector(getAggregateRuntimeEvents, events => events && events.filter(event => event.Count > 0).sort((a, b) => b.TotalSeconds - a.TotalSeconds) || []);\r\n\r\nexport const getEventsColumnChart = createSelector(\r\n getNonZeroEvents,\r\n fromUserSession.getSessionThemeId,\r\n (events, themeId): Highcharts.Options => {\r\n const colors = ['#004d99', '#cce6ff', '#00264d', '#66b3ff', '#00264d', '3399ff'];\r\n\r\n return {\r\n chart: {\r\n type: 'column',\r\n backgroundColor: 'transparent',\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n fontSize: '12px'\r\n }\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n series: {\r\n dataLabels: {\r\n enabled: true,\r\n style: {\r\n color: '#D5D5D5',\r\n fontSize: '11px',\r\n },\r\n allowOverlap: false,\r\n borderColor: 'undefined'\r\n }\r\n },\r\n column: {\r\n stacking: \"normal\",\r\n dataLabels: {\r\n enabled: false\r\n },\r\n animation: {\r\n duration: 1000\r\n },\r\n grouping: false,\r\n pointPlacement: 0,\r\n borderWidth: 0,\r\n maxPointWidth: 25\r\n }\r\n },\r\n tooltip: {\r\n shared: true,\r\n borderWidth: 0,\r\n borderRadius: 0,\r\n backgroundColor: '#2A2A2A',\r\n useHTML: true,\r\n shadow: true,\r\n style: {\r\n color: themeId === 1 ? AppColors.white_d3 : AppColors.gray\r\n }\r\n },\r\n xAxis: {\r\n title: {\r\n text: ''\r\n },\r\n categories: events.map(event => event.Name),\r\n labels: {\r\n style: {\r\n color: '#D5D5D5',\r\n fontSize: '11px',\r\n },\r\n enabled: true\r\n },\r\n minRange: events.length === 1 ? undefined : 1,\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n },\r\n yAxis: {\r\n title: {\r\n text: ''\r\n },\r\n labels: {\r\n style: {\r\n color: '#D5D5D5',\r\n fontSize: '11px',\r\n },\r\n enabled: true\r\n },\r\n endOnTick: true,\r\n gridLineColor: '#212121',\r\n lineWidth: 1 / Number.MAX_SAFE_INTEGER,\r\n minTickInterval: 1\r\n },\r\n series: [{\r\n type: 'column',\r\n name: 'Hours',\r\n tooltip: { valueDecimals: 2 },\r\n data: events.map((event, index) => ({\r\n name: event.Name,\r\n y: event.TotalSeconds / 3600, // convert to hours\r\n color: colors[index % 5],\r\n }))\r\n }]\r\n };\r\n }\r\n);\r\n\r\nexport const getEventsPieChart = createSelector(\r\n getNonZeroEvents,\r\n fromUserSession.getSessionThemeId,\r\n (events, themeId): Highcharts.Options => {\r\n const colors = ['#004d99', '#cce6ff', '#00264d', '#66b3ff', '#00264d', '3399ff'];\r\n\r\n return {\r\n title: {\r\n text: `${events.reduce((acc, event) => acc += event.Count, 0)}`\r\n },\r\n subtitle: {\r\n text: `Events`,\r\n },\r\n tooltip: {\r\n enabled: true,\r\n pointFormat: '{point.y} ({point.percentage:.1f}%)',\r\n style: {\r\n color: themeId === 1 ? AppColors.white_d3 : AppColors.gray\r\n }\r\n },\r\n series: [{\r\n type: 'pie',\r\n name: 'Occurrences',\r\n data: events.map((event, index) => ({\r\n name: event.Name,\r\n y: event.Count,\r\n color: colors[index % 5]\r\n }))\r\n }]\r\n }\r\n }\r\n)\r\n\r\nexport const getAggregateRuntimeParties = createSelector(getAggregateRuntimeData, state => state && state.Parties);\r\nexport const getNonZeroParties = createSelector(getAggregateRuntimeParties, parties => parties && parties.filter(party => party.Count > 0).sort((a, b) => b.Count - a.Count) || []);\r\n\r\nexport const getPartiesColumnChart = createSelector(\r\n getNonZeroParties,\r\n fromUserSession.getSessionThemeId,\r\n (parties, themeId): Highcharts.Options => {\r\n return {\r\n chart: {\r\n type: 'column',\r\n backgroundColor: 'transparent',\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n title: {\r\n text: 'Downtime Events By Party',\r\n style: {\r\n fontSize: '12px'\r\n }\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n series: {\r\n dataLabels: {\r\n enabled: true,\r\n style: {\r\n color: '#D5D5D5',\r\n fontSize: '11px',\r\n },\r\n allowOverlap: false,\r\n borderColor: 'undefined'\r\n }\r\n },\r\n column: {\r\n stacking: \"normal\",\r\n dataLabels: {\r\n enabled: false\r\n },\r\n animation: {\r\n duration: 1000\r\n },\r\n grouping: false,\r\n pointPlacement: 0,\r\n borderWidth: 0,\r\n maxPointWidth: 25\r\n }\r\n },\r\n tooltip: {\r\n shared: true,\r\n borderWidth: 0,\r\n borderRadius: 0,\r\n backgroundColor: '#2A2A2A',\r\n useHTML: true,\r\n shadow: true,\r\n style: {\r\n color: themeId === 1 ? AppColors.white_d3 : AppColors.gray\r\n }\r\n },\r\n xAxis: {\r\n title: {\r\n text: ''\r\n },\r\n categories: parties.map(party => party.Name),\r\n labels: {\r\n style: {\r\n color: '#D5D5D5',\r\n fontSize: '12px',\r\n textOverflow: 'none'\r\n }\r\n },\r\n minRange: parties.length === 1 ? undefined : 1,\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n },\r\n yAxis: {\r\n title: {\r\n text: ''\r\n },\r\n labels: {\r\n style: {\r\n color: '#D5D5D5',\r\n fontSize: '12px',\r\n }\r\n },\r\n endOnTick: true,\r\n gridLineColor: '#212121',\r\n lineWidth: 1 / Number.MAX_SAFE_INTEGER,\r\n minTickInterval: 1\r\n },\r\n series: [{\r\n type: 'column',\r\n name: 'Events',\r\n data: parties.map(party => ({\r\n name: party.Name,\r\n y: party.Count,\r\n color: `#${party.Color}`,\r\n }))\r\n }]\r\n };\r\n }\r\n);\r\n\r\nexport const getPartiesPieChart = createSelector(\r\n getNonZeroParties,\r\n fromUserSession.getSessionThemeId,\r\n (parties, themeId): Highcharts.Options => {\r\n return {\r\n title: {\r\n text: `${parties.length}`,\r\n \r\n },\r\n subtitle: {\r\n text: 'Parties'\r\n },\r\n tooltip: {\r\n enabled: true,\r\n pointFormat: '{point.y} hours ({point.percentage:.1f}%)',\r\n valueDecimals: 2,\r\n style: {\r\n color: themeId === 1 ? AppColors.white_d3 : AppColors.gray\r\n }\r\n },\r\n series: [{\r\n type: 'pie',\r\n name: 'Occurrences',\r\n data: parties.map((party, index) => ({\r\n name: party.Name,\r\n y: party.TotalSeconds / 3600,\r\n color: `#${party.Color}`\r\n }))\r\n }]\r\n };\r\n }\r\n);\r\n\r\nexport const getAggregateRuntimeResults = createSelector(\r\n getAggregateRuntimeData,\r\n fromRuntimeSettings.getEventCalculations,\r\n (state, calculations) => {\r\n return state && calculations && state.Results.map(result => {\r\n return {\r\n ...result,\r\n Calculations: result.Calculations.map(calculation => {\r\n return {\r\n ...calculation,\r\n Abbreviation: calculations[calculation.Id] ? calculations[calculation.Id].Abbr : calculation.Name\r\n };\r\n })\r\n };\r\n });\r\n }\r\n);\r\n\r\nexport const getAggregateRuntimeRunningTime = createSelector(getAggregateRuntimeData, state => state && state.RunningTime);\r\nexport const getAggregateRuntimeStoppedTime = createSelector(getAggregateRuntimeData, state => state && state.StoppedTime);\r\nexport const getAggregateRuntimeInvalidTime = createSelector(getAggregateRuntimeData, state => state && state.InvalidTime);\r\n","import { Runtime } from '@rfv/modules/core/models/runtime/runtime.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n data: Runtime;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n dateFrom: string;\r\n dateTo: string;\r\n tabIndex: number;\r\n eventPageIndex: number;\r\n error: ApiError;\r\n};\r\n \r\nexport const initialState: State = {\r\n data: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n dateFrom: null,\r\n dateTo: null,\r\n tabIndex: null,\r\n eventPageIndex: 1,\r\n error: null\r\n};","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlarmGroup, AlarmGroupDeleteError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load AlarmGroups');\r\n\r\nexport const LoadFail = createAction('[Core] Load AlarmGroups Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load AlarmGroups Success', props<{\r\n alarmGroups: AlarmGroup[]\r\n}>());\r\n\r\nexport const Save = createAction('[Core] Save AlarmGroup', props<{\r\n alarmGroup: AlarmGroup\r\n}>());\r\n\r\nexport const SaveFail = createAction('[Core] Save AlarmGroup Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const SaveSuccess = createAction('[Core] Save AlarmGroup Success', props<{\r\n alarmGroupId: number\r\n}>());\r\n\r\nexport const Delete = createAction('[Core] Delete AlarmGroup', props<{\r\n alarmGroupId: number,\r\n newAlarmGroupId?: number\r\n}>());\r\n\r\nexport const DeleteFail = createAction('[Core] Delete AlarmGroup Fail', props<{\r\n error: AlarmGroupDeleteError\r\n}>());\r\n\r\nexport const DeleteSuccess = createAction('[Core] Delete AlarmGroup Success', props<{\r\n alarmGroupId: number\r\n}>());\r\n\r\nexport const Select = createAction('[Core] Select AlarmGroup', props<{\r\n alarmGroupId: number\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlarmGroupActions from './actions';\r\nimport * as ModalActions from '@rfv/store/modal/actions';\r\n\r\nimport { AlarmGroupService } from '@rfv/modules/core/services';\r\nimport { SidebarService } from '@rfv/modules/involve/side-bar/services/side-bar-service.service';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _alarmGroupService: AlarmGroupService,\r\n private _sidebarService: SidebarService\r\n\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmGroupActions.Load),\r\n switchMap(action => this._alarmGroupService.get().pipe(\r\n map(alarmGroups => AlarmGroupActions.LoadSuccess({ alarmGroups })),\r\n catchError(error => of(AlarmGroupActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public save$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmGroupActions.Save),\r\n switchMap(action => this._alarmGroupService.save(action.alarmGroup).pipe(\r\n map(alarmGroupId => AlarmGroupActions.SaveSuccess({ alarmGroupId })),\r\n catchError(error => of(AlarmGroupActions.SaveFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public saveSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmGroupActions.SaveSuccess),\r\n map(action => AlarmGroupActions.Load()),\r\n tap(_ => {\r\n this._sidebarService.close();\r\n })\r\n )\r\n );\r\n\r\n public deleteFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmGroupActions.DeleteFail),\r\n mergeMap(action => {\r\n if (action.error.HasAlarms || action.error.HasAlertRecipients)\r\n return [ModalActions.OpenAlarmGroupDelete({options: {data: {selectedAlarmGroupId: action.error.AlarmGroupId}}})]\r\n else \r\n return [ModalActions.CloseAlarmGroupDelete(), ModalActions.Close()];\r\n })\r\n )\r\n );\r\n\r\n public deleteSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmGroupActions.DeleteSuccess),\r\n map(action => ModalActions.CloseAlarmGroupDelete(), ModalActions.Close())\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmGroupActions.Delete),\r\n switchMap(action => this._alarmGroupService.delete(action.alarmGroupId, action.newAlarmGroupId).pipe(\r\n map(response => {\r\n if (response.IsSuccess)\r\n return AlarmGroupActions.DeleteSuccess({ alarmGroupId: response.AlarmGroupId });\r\n else if (response.HasAlertRecipients || response.HasAlarms)\r\n return AlarmGroupActions.DeleteFail({ error: {\r\n AlarmGroupId: response.AlarmGroupId,\r\n HasAlarms: response.HasAlarms,\r\n HasAlertRecipients: response.HasAlertRecipients\r\n }\r\n });\r\n }),\r\n catchError(error => of(AlarmGroupActions.DeleteFail({ error: {ApiError: error} })))\r\n ))\r\n )\r\n );\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError, AlarmGroup } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n \r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n \r\n isSaving: boolean;\r\n isDeleting: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarmGroup => alarmGroup.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n \r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaving: false,\r\n isDeleting: false,\r\n \r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmGroupActions from './actions';\r\n\r\nconst alarmGroupsReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmGroupActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmGroupActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmGroupActions.LoadSuccess, (state, { alarmGroups }) => adapter.setAll(alarmGroups, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmGroupActions.Save, (state, { alarmGroup }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(AlarmGroupActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(AlarmGroupActions.SaveSuccess, (state, { alarmGroupId }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(AlarmGroupActions.Delete, (state, { alarmGroupId }) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(AlarmGroupActions.DeleteFail, (state, { error }) => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(AlarmGroupActions.DeleteSuccess, (state, { alarmGroupId }) => adapter.removeOne(alarmGroupId, {\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(AlarmGroupActions.Select, (state, { alarmGroupId }) => ({\r\n ...state,\r\n selectedId: alarmGroupId\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmGroupsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alarmGroups);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\nexport const getSelected = createSelector(getEntities, getSelectedId, (entities, selectedId) => selectedId && entities[selectedId]);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlarmState } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load AlarmStates');\r\n\r\nexport const LoadFail = createAction('[Core] Load AlarmStates Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load AlarmStates Success', props<{\r\n alarmStates: AlarmState[]\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlarmStateActions from './actions';\r\n\r\nimport { AlarmStateService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _alarmStateService: AlarmStateService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmStateActions.Load),\r\n switchMap(action => this._alarmStateService.getAll().pipe(\r\n map(alarmStates => AlarmStateActions.LoadSuccess({ alarmStates }),\r\n catchError(error => of(AlarmStateActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AlarmState } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarmState => alarmState.AlarmStateId,\r\n sortComparer: (a, b) => b.Priority.toString().localeCompare(a.Priority.toString()),\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmStateActions from './actions';\r\n\r\nconst alarmStatesReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmStateActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmStateActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmStateActions.LoadSuccess, (state, { alarmStates }) => adapter.setAll(alarmStates, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmStatesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { AlarmStates } from '@rfv/modules/core/enums';\r\nimport { IMapMarkerIcon } from '@rfv/modules/involve/map/marker';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alarmStates);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getColor = (state: AlarmStates) => createSelector(\r\n getEntities,\r\n entities => entities && entities[state].Color\r\n);\r\n\r\nexport const getAlarmStates = createSelector(\r\n getAll,\r\n (alarmStates) => {\r\n return alarmStates.map(state => ({\r\n id: state.AlarmStateId,\r\n color1: '#' + state.Color,\r\n color2: '#' + state.Color\r\n })) as IMapMarkerIcon[];\r\n });\r\n","import { createAction } from \"@ngrx/store\";\r\nimport { ApiError } from \"../../models\";\r\nimport { AlarmSuppressor } from \"../../models/asset/alarm-suppressor\";\r\n\r\n\r\nexport const Select = createAction('[Core] Select Suppressing Alarm', (suppressionSetId: number) => ({ suppressionSetId }));\r\n\r\nexport const SearchSuppressee = createAction('[Core] Search Suppressee Alarms', (search: string) => ({ search }));\r\nexport const SearchAvailable = createAction('[Core] Search Available Alarms', (search: string) => ({ search }));\r\n\r\nexport const Load = createAction('[Core] Load Suppressing Alarms', (assetId: number) => ({ assetId }));\r\nexport const LoadFail = createAction('[Core] Load Suppressing Alarms Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Suppressing Alarms Success', (suppressingAlarms: AlarmSuppressor[]) => ({ suppressingAlarms }));\r\n\r\nexport const Create = createAction('[Core] Create Suppressing Alarm', (alarmId: number, assetId: number) => ({ alarmId, assetId }));\r\nexport const CreateFail = createAction('[Core] Create Suppressing Alarm Fail', (error: ApiError) => ({ error }));\r\nexport const CreateSuccess = createAction('[Core] Create Suppressing Alarm Success', (assetId: number) => ({ assetId }));\r\n\r\nexport const Delete = createAction('[Core] Delete Suppressing Alarm', (assetId: number, suppressionSetId: number, callback: Function) => ({ assetId, suppressionSetId, callback }));\r\nexport const DeleteFail = createAction('[Core] Delete Suppressing Alarm Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteSuccess = createAction('[Core] Delete Suppressing Alarm Success', (assetId: number) => ({ assetId }));\r\n\r\nexport const Update = createAction('[Core] Update Suppressing Alarm',(assetId: number, suppressionSetId: number, alarmId: number) => ({ assetId, suppressionSetId, alarmId }));\r\nexport const UpdateFail = createAction('[Core] Update Suppressing Alarm Fail', (error: ApiError) => ({ error }));\r\nexport const UpdateSuccess = createAction('[Core] Update Suppressing Alarm Success', (alarmId: number) => ({ alarmId }));\r\n\r\nexport const CreateSuppressee = createAction('[Core] Create Suppressee Alarms', (assetId: number, suppressionSetId: number, suppresseeAlarmIds: number[]) => ({ assetId, suppressionSetId, suppresseeAlarmIds }));\r\nexport const CreateSuppresseeFail = createAction('[Core] Create Suppressee Alarms Fail', (error: ApiError) => ({ error }));\r\nexport const CreateSuppresseeSuccess = createAction('[Core] Create Suppressee Alarms Success', (assetId: number, suppressionSetId: number) => ({ assetId, suppressionSetId }));\r\n\r\nexport const DeleteSuppressee = createAction('[Core] Delete Suppressee Alarms', (assetId: number, suppressionSetId: number, suppresseeAlarmIds: number[]) => ({ assetId, suppressionSetId, suppresseeAlarmIds }));\r\nexport const DeleteSuppresseeFail = createAction('[Core] Delete Suppressee Alarms Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteSuppresseeSuccess = createAction('[Core] Delete Suppressee Alarms Success', (assetId, suppressionSetId) => ({ assetId, suppressionSetId }));\r\n\r\nexport const Clear = createAction('[Core] Clear Alarm Suppressor Store');","import { Injectable } from '@angular/core';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport * as AlarmSuppressionActions from './actions';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { AssetService } from '../../services'; \r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _assetService: AssetService\r\n ) {}\r\n\r\n public Load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.Load),\r\n switchMap(action => \r\n this._assetService.getSuppressingAlarms(action.assetId).pipe(\r\n map(suppressingAlarms => AlarmSuppressionActions.LoadSuccess(suppressingAlarms.sort((a, b) => a.SuppressionSetId > b.SuppressionSetId ? 1 : -1))),\r\n catchError(error => of(AlarmSuppressionActions.LoadFail(error)))\r\n )) \r\n )\r\n );\r\n\r\n public LoadFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.LoadFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed To Load Suppressing Alarms',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public Create$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.Create),\r\n switchMap(action => this._assetService.createSuppressingAlarm(action.alarmId, action.assetId).pipe(\r\n map(() => AlarmSuppressionActions.CreateSuccess(action.assetId)),\r\n catchError(error => of(AlarmSuppressionActions.CreateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public CreateFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.CreateFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed to Create Suppressing Alarm',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public CreateSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.CreateSuccess),\r\n mergeMap(action => [\r\n AlarmSuppressionActions.Load(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Suppressing Alarm Created',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public Delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.Delete),\r\n switchMap(action => this._assetService.deleteSuppressingAlarm(action.assetId, action.suppressionSetId).pipe(\r\n tap(() => action.callback()),\r\n map(() => AlarmSuppressionActions.DeleteSuccess(action.assetId)),\r\n catchError(error => of(AlarmSuppressionActions.DeleteFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public DeleteFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.DeleteFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed To Suppressing Alarm Settings',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public DeleteSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.DeleteSuccess),\r\n mergeMap(action => [\r\n AlarmSuppressionActions.Load(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Suppressing Alarm Settings Deleted',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public Update$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.Update),\r\n switchMap(action => this._assetService.updateSuppressingAlarm(action.assetId, action.suppressionSetId, action.alarmId).pipe(\r\n map(alarmId => AlarmSuppressionActions.UpdateSuccess(alarmId)),\r\n catchError(error => of(AlarmSuppressionActions.UpdateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public UpdateFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.UpdateFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed To Update Suppressing Alarm',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public UpdateSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.UpdateSuccess),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Suppressing Alarm Updated',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public CreateSuppressee$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.CreateSuppressee),\r\n switchMap(action => this._assetService.createSuppresseeAlarms(action.assetId, action.suppressionSetId, action.suppresseeAlarmIds).pipe(\r\n map(() => AlarmSuppressionActions.CreateSuppresseeSuccess(action.assetId, action.suppressionSetId)),\r\n catchError(error => of(AlarmSuppressionActions.CreateSuppresseeFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public CreateSuppresseeFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.CreateSuppresseeFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed To Add Alarm(s) To Suppression Set',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public CreateSuppresseeSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.CreateSuppresseeSuccess),\r\n mergeMap(action => [\r\n AlarmSuppressionActions.Load(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Alarm(s) Added To Suppression Set',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public DeleteSuppressee$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.DeleteSuppressee),\r\n switchMap(action => this._assetService.deleteSuppresseeAlarms(action.assetId, action.suppressionSetId, action.suppresseeAlarmIds).pipe(\r\n map(() => AlarmSuppressionActions.DeleteSuppresseeSuccess(action.assetId, action.suppressionSetId)),\r\n catchError(error => of(AlarmSuppressionActions.DeleteSuppresseeFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public DeleteSuppresseeFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.DeleteSuppresseeFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed to Remove Alarm(s) From Suppression Set',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public DeleteSuppresseeSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(AlarmSuppressionActions.DeleteSuppresseeSuccess),\r\n mergeMap(action => [\r\n AlarmSuppressionActions.Load(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Alarm(s) Removed From Suppression Set',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from \"@ngrx/entity\";\r\nimport { ApiError } from \"../../models\";\r\nimport { AlarmSuppressor } from \"../../models/asset/alarm-suppressor\";\r\n\r\n\r\nexport interface State extends EntityState {\r\n selectedIndex: number;\r\n\r\n suppresseeSearch: string;\r\n availableSearch: string;\r\n\r\n isSuppressorLoaded: boolean;\r\n isSuppressorLoading: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarmSuppressor => alarmSuppressor.SuppressionSetId,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedIndex: null,\r\n\r\n suppresseeSearch: null,\r\n availableSearch: null,\r\n\r\n isSuppressorLoaded: false,\r\n isSuppressorLoading: false,\r\n\r\n error: null\r\n})","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmSuppressionActions from './actions';\r\n\r\nconst alarmSuppressionReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmSuppressionActions.Select, (state, { suppressionSetId }) => ({\r\n ...state,\r\n selectedIndex: suppressionSetId\r\n })),\r\n\r\n on(AlarmSuppressionActions.Load, state => ({\r\n ...state,\r\n isSuppressorLoading: true\r\n })),\r\n\r\n on(AlarmSuppressionActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isSuppressorLoading: false,\r\n isSuppressorLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmSuppressionActions.LoadSuccess, (state, { suppressingAlarms }) => adapter.setAll(suppressingAlarms, {\r\n ...state,\r\n isSuppressorLoading: false,\r\n isSuppressorLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(AlarmSuppressionActions.Create, state => ({\r\n ...state,\r\n isSuppressorLoading: true\r\n })),\r\n\r\n on(AlarmSuppressionActions.CreateFail, (state, { error }) => ({\r\n ...state,\r\n isSuppressorLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmSuppressionActions.CreateSuccess, (state, { assetId }) => ({\r\n ...state,\r\n isSuppressorLoading: false\r\n })),\r\n\r\n on(AlarmSuppressionActions.Delete, (state, { assetId, suppressionSetId }) => ({\r\n ...state,\r\n isSuppressorLoading: true\r\n })),\r\n\r\n on(AlarmSuppressionActions.DeleteFail, (state, { error }) => ({\r\n ...state,\r\n isSuppressorLoading: false\r\n })),\r\n\r\n on(AlarmSuppressionActions.DeleteSuccess, (state, { assetId }) => ({\r\n ...state,\r\n isSuppressorLoading: false\r\n })),\r\n\r\n on(AlarmSuppressionActions.Update, state => ({\r\n ...state,\r\n isSuppressorLoading: true\r\n })),\r\n\r\n on(AlarmSuppressionActions.UpdateFail, (state, { error }) => ({\r\n ...state,\r\n isSuppressorLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmSuppressionActions.UpdateSuccess, (state, { alarmId }) => ({\r\n ...state,\r\n isSuppressorLoading: false\r\n })),\r\n\r\n on(AlarmSuppressionActions.DeleteSuppressee, (state, { assetId, suppressionSetId, suppresseeAlarmIds }) => ({\r\n ...state,\r\n isSuppressorLoading: true\r\n })),\r\n\r\n on(AlarmSuppressionActions.DeleteSuppresseeFail, (state, { error }) => ({\r\n ...state,\r\n isSuppressorLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmSuppressionActions.DeleteSuppresseeSuccess, (state, { assetId, suppressionSetId }) => ({\r\n ...state,\r\n isSuppressorLoading: false\r\n })),\r\n\r\n on(AlarmSuppressionActions.CreateSuppressee, state => ({\r\n ...state,\r\n isSuppressorLoading: true\r\n })),\r\n\r\n on(AlarmSuppressionActions.CreateSuppresseeFail, (state, { error }) => ({\r\n ...state,\r\n isSuppressorLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmSuppressionActions.CreateSuppresseeSuccess, (state, { assetId, suppressionSetId }) => ({\r\n ...state,\r\n isSuppressorLoading: false\r\n })),\r\n\r\n on(AlarmSuppressionActions.SearchAvailable, (state, { search }) => ({\r\n ...state,\r\n availableSearch: search\r\n })),\r\n\r\n on(AlarmSuppressionActions.SearchSuppressee, (state, { search }) => ({\r\n ...state,\r\n suppresseeSearch: search\r\n })),\r\n\r\n on(AlarmSuppressionActions.Clear, state => ({\r\n ...initialState\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmSuppressionReducer(state, action);\r\n};","import * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { createSelector } from \"@ngrx/store\";\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alarmSuppression)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState)\r\n\r\nexport const isSuppressorLoaded = createSelector(getState, state => state.isSuppressorLoaded);\r\nexport const isSuppressorLoading = createSelector(getState, state => state.isSuppressorLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAvailableSearch = createSelector(getState, state => state.availableSearch);\r\nexport const getSuppresseeSearch = createSelector(getState, state => state.suppresseeSearch);\r\n\r\nexport const getSelectedSuppressionSetIndex = createSelector(getState, state => state.selectedIndex);\r\nexport const getSelected = createSelector(getAll, getSelectedSuppressionSetIndex, (suppressionSets, index) => index !== null && suppressionSets[index] || null);\r\n\r\nexport const getAvailableAlarms = (assetId: number) => createSelector(\r\n fromCore.Assets.Alarms.getAll(assetId),\r\n getAll,\r\n getSelected,\r\n getAvailableSearch,\r\n (alarms, suppressors, selectedSuppressor, search) => {\r\n if (!selectedSuppressor) return [];\r\n if (!search) {\r\n return alarms?.filter(alarm => {\r\n let suppresseeIds = selectedSuppressor?.SuppresseeAlarms.map(suppressee => suppressee.AlarmId);\r\n let suppressorIds = suppressors.map(suppressor => suppressor.AlarmId);\r\n return !suppresseeIds.includes(alarm.id) && !suppressorIds.includes(alarm.id);\r\n }).sort((a, b) => (a.alarmName > b.alarmName) ? 1 : -1)\r\n } else {\r\n return alarms?.filter(alarm => {\r\n let suppresseeIds = selectedSuppressor?.SuppresseeAlarms.map(suppressee => suppressee.AlarmId);\r\n let suppressorIds = suppressors.map(suppressor => suppressor.AlarmId);\r\n return !suppresseeIds.includes(alarm.id) && !suppressorIds.includes(alarm.id)\r\n && alarm.alarmName.toLowerCase().includes(search.toLowerCase());\r\n }).sort((a, b) => (a.alarmName > b.alarmName) ? 1 : -1)\r\n }\r\n }\r\n)\r\n\r\nexport const getSuppresseeAlarms = (assetId: number) => createSelector(\r\n fromCore.Assets.Alarms.getAll(assetId),\r\n getSelected,\r\n getSuppresseeSearch,\r\n (alarms, selectedSuppressor, search) => {\r\n if (!selectedSuppressor) return [];\r\n if (!search) {\r\n return alarms?.filter(alarm => {\r\n let suppresseeIds = selectedSuppressor.SuppresseeAlarms.map(suppressee => suppressee.AlarmId)\r\n return suppresseeIds.includes(alarm.id);\r\n }).sort((a, b) => (a.alarmName > b.alarmName) ? 1 : -1);\r\n } else {\r\n return alarms?.filter(alarm => {\r\n let suppresseeIds = selectedSuppressor.SuppresseeAlarms.map(suppressee => suppressee.AlarmId)\r\n return suppresseeIds.includes(alarm.id) && alarm.alarmName.toLowerCase().includes(search.toLowerCase());\r\n }).sort((a, b) => (a.alarmName > b.alarmName) ? 1 : -1);\r\n }\r\n }\r\n)\r\n\r\nexport const getDropdownAlarms = (assetId: number) => createSelector(\r\n fromCore.Assets.Alarms.getAll(assetId),\r\n getAll,\r\n (alarms, suppressors) =>\r\n alarms?.sort((a, b) => (a.alarmName > b.alarmName) ? 1 : -1).filter(alarm => {\r\n return !suppressors.find(suppressor => suppressor.SuppresseeAlarms.some(suppressee => suppressee.AlarmId === alarm.id))\r\n })\r\n)\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlarmTest } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load AlarmTests');\r\n\r\nexport const LoadFail = createAction('[Core] Load AlarmTests Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load AlarmTests Success', props<{\r\n alarmTests: AlarmTest[]\r\n}>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlarmTestActions from './actions';\r\n\r\nimport { AlarmTestService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _alarmTestService: AlarmTestService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmTestActions.Load),\r\n switchMap(action => this._alarmTestService.getAll().pipe(\r\n map(alarmTests => AlarmTestActions.LoadSuccess({ alarmTests }),\r\n catchError(error => of(AlarmTestActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AlarmTest } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarmTest => alarmTest.AlarmTestId,\r\n sortComparer: (a, b) => a.AlarmTestId - b.AlarmTestId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmTestActions from './actions';\r\n\r\nconst alarmTestsReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmTestActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmTestActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmTestActions.LoadSuccess, (state, { alarmTests }) => adapter.setAll(alarmTests, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmTestsReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alarmTests);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const getEnabledAlarmTest = createSelector(getAll, alarmTests => alarmTests.filter(test => test.IsDisabled === false));","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlarmType } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Alarm Types');\r\n\r\nexport const LoadFail = createAction('[Core] Load Alarm Types Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load Alarm Types Success', props<{\r\n alarmTypes: AlarmType[]\r\n}>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlarmTestActions from './actions';\r\n\r\nimport { AssetService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _assetService: AssetService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmTestActions.Load),\r\n switchMap(action => this._assetService.getTypes().pipe(\r\n map(alarmTypes => AlarmTestActions.LoadSuccess({ alarmTypes }),\r\n catchError(error => of(AlarmTestActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AlarmType } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarmTest => alarmTest.AlarmTypeId,\r\n sortComparer: (a, b) => a.AlarmTypeId - b.AlarmTypeId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmTestActions from './actions';\r\n\r\nconst alarmTestsReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmTestActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmTestActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmTestActions.LoadSuccess, (state, { alarmTypes }) => adapter.setAll(alarmTypes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmTestsReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alarmTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const getEnabledAlarmTypes = createSelector(getAll, alarmTypes => alarmTypes.filter(test => test.IsDisabled === false));","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlertScheduleTime } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load AlertScheduleTime', (alertScheduleId: number) => ({ payload: { alertScheduleId} }));\r\n\r\nexport const LoadFail = createAction('[Core] Load AlertScheduleTime Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load AlertScheduleTime Success', props<{\r\n alertScheduleTimes: AlertScheduleTime[]\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlertScheduleTimeActions from './actions';\r\n\r\nimport { AlertScheduleService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _alertScheduleService: AlertScheduleService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleTimeActions.Load),\r\n switchMap(action => this._alertScheduleService.getTimes(null).pipe(\r\n map(alertScheduleTimes => AlertScheduleTimeActions.LoadSuccess({ alertScheduleTimes }),\r\n catchError(error => of(AlertScheduleTimeActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter, EntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AlertScheduleTime } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter: EntityAdapter = createEntityAdapter({\r\n selectId: alertScheduleTime => alertScheduleTime.Id,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlertScheduleTimeActions from './actions';\r\n\r\nconst alertScheduleTimeReducer = createReducer(\r\n initialState,\r\n\r\n on(AlertScheduleTimeActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlertScheduleTimeActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlertScheduleTimeActions.LoadSuccess, (state, { alertScheduleTimes }) => adapter.setAll(alertScheduleTimes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alertScheduleTimeReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alertScheduleTimes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const getAllByAlertScheduleId = (alertScheduleId: number) => createSelector(\r\n getAll,\r\n times => times.filter(time => time.AlertScheduleId === alertScheduleId)\r\n);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlertSchedule } from '@rfv/modules/core/models';\r\nimport { AlertScheduleDeleteError } from '../../models/alert-schedule-delete-error';\r\n\r\nexport const Load = createAction('[Core] Load AlertSchedules');\r\n\r\nexport const LoadFail = createAction('[Core] Load AlertSchedules Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load AlertSchedules Success', props<{\r\n alertSchedules: AlertSchedule[]\r\n}>());\r\n\r\nexport const Delete = createAction('[Core] Delete AlertSchedule', props<{\r\n alertScheduleId: number,\r\n newAlertScheduleId?: number\r\n}>());\r\n\r\nexport const DeleteFail = createAction('[Core] Delete AlertSchedules Fail', props<{\r\n error: AlertScheduleDeleteError\r\n}>());\r\n\r\nexport const DeleteSuccess = createAction('[Core] Delete AlertSchedules Success', props<{\r\n alertScheduleId: number\r\n}>());\r\n\r\nexport const Select = createAction('[Core] Select AlertSchedule', props<{\r\n alertScheduleId: number\r\n}>());\r\n\r\nexport const Save = createAction('[Core] Save AlertSchedule', props<{\r\n alertSchedule: AlertSchedule\r\n}>());\r\n\r\nexport const SaveFail = createAction('[Core] Save AlertSchedules Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const SaveSuccess = createAction('[Core] Save AlertSchedules Success', props<{\r\n alertSchedule: AlertSchedule\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as AlertScheduleActions from './actions';\r\nimport * as Banner from '@rfv/store/banner';\r\nimport * as ModalActions from '@rfv/store/modal/actions';\r\n\r\nimport { AlertScheduleService } from '@rfv/modules/core/services';\r\nimport { UserDrawerActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { successAlertSchedulePayload } from '@rfv/modules/dashboard/modules/user-admin/store/user-banner-messages';\r\nimport * as AlertScheduleTimesActions from '../alert-schedules-times/actions';\r\nimport { SidebarService } from '@rfv/modules/involve/side-bar/services/side-bar-service.service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _alertScheduleService: AlertScheduleService,\r\n private _sidebarService: SidebarService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.Load),\r\n switchMap(action => this._alertScheduleService.get().pipe(\r\n map(alertSchedules => AlertScheduleActions.LoadSuccess({ alertSchedules }),\r\n catchError(error => of(AlertScheduleActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n\r\n public save$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.Save),\r\n switchMap(action => this._alertScheduleService.save(action.alertSchedule).pipe(\r\n map(alertSchedule => AlertScheduleActions.SaveSuccess({ alertSchedule })),\r\n catchError(error => of(AlertScheduleActions.SaveFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public saveSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.SaveSuccess),\r\n switchMap(action => [\r\n UserDrawerActions.CloseDrawer(),\r\n AlertScheduleActions.Load(),\r\n AlertScheduleTimesActions.Load(null),\r\n Banner.Show({ options: successAlertSchedulePayload('saved') })\r\n ]),\r\n tap(_ => {\r\n this._sidebarService.close()\r\n })\r\n )\r\n );\r\n\r\n public saveFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.SaveFail),\r\n mergeMap(error => [\r\n Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: error.error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n )\r\n\r\n public delete$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.Delete),\r\n switchMap(action => this._alertScheduleService.delete(action.alertScheduleId, action.newAlertScheduleId).pipe(\r\n map(response => {\r\n if (response.IsSuccess)\r\n return AlertScheduleActions.DeleteSuccess({ alertScheduleId: response.AlertScheduleId });\r\n else if (response.HasAlertRecipientsOrAlarmGroups)\r\n return AlertScheduleActions.DeleteFail({\r\n error: {\r\n AlertScheduleId: response.AlertScheduleId,\r\n HasAlertRecipientsOrAlarmGroups: response.HasAlertRecipientsOrAlarmGroups\r\n }\r\n });\r\n }),\r\n catchError(error => of(AlertScheduleActions.DeleteFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public deleteSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.DeleteSuccess),\r\n switchMap(action => [\r\n UserDrawerActions.CloseDrawer(),\r\n ModalActions.CloseAlarmGroupScheduleDelete(),\r\n ModalActions.Close(),\r\n Banner.Show({ options: successAlertSchedulePayload('deleted') })\r\n ])\r\n )\r\n );\r\n\r\n public deleteFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlertScheduleActions.DeleteFail),\r\n mergeMap(action => {\r\n if (action.error.HasAlertRecipientsOrAlarmGroups) {\r\n return [ModalActions.OpenAlarmGroupScheduleDelete({ options: { data: { selectedAlertScheduleId: action.error.AlertScheduleId } } })]\r\n }\r\n else {\r\n return [\r\n ModalActions.CloseAlarmGroupScheduleDelete(),\r\n ModalActions.Close(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Alarm group was not deleted. ' + action.error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ];\r\n }\r\n })\r\n )\r\n );\r\n\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AlertSchedule } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n isDeleting: boolean; \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alertSchedule => alertSchedule.Id,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null, \r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n isDeleting: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlertScheduleActions from './actions';\r\n\r\nconst alertScheduleReducer = createReducer(\r\n initialState,\r\n\r\n on(AlertScheduleActions.Select, (state, { alertScheduleId }) => ({\r\n ...state,\r\n selectedId: alertScheduleId\r\n })),\r\n\r\n on(AlertScheduleActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlertScheduleActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlertScheduleActions.LoadSuccess, (state, { alertSchedules }) => adapter.setAll(alertSchedules, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AlertScheduleActions.Delete, (state, { alertScheduleId }) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(AlertScheduleActions.DeleteSuccess, (state, { alertScheduleId }) => adapter.removeOne(alertScheduleId, {\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(AlertScheduleActions.Save, (state, { alertSchedule }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(AlertScheduleActions.SaveSuccess, (state, { alertSchedule }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(AlertScheduleActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alertScheduleReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport * as AlertScheduleTimes from '../alert-schedules-times';\r\n\r\nimport { adapter } from './state';\r\nimport { AlertSchedule, AlertScheduleTime } from '../../models';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alertSchedules);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\nexport const getSelected = createSelector(getEntities, getSelectedId,\r\n (entities, selectedId) => {\r\n \r\n let alertSchedule: AlertSchedule = {...entities[selectedId]};\r\n return alertSchedule;\r\n\r\n });\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, Application } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Applications');\r\nexport const LoadFail = createAction('[Core] Load Applications Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadSuccess = createAction('[Core] Load Applications Success', (applications: Application[]) => ({ payload: { applications } }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as ApplicationActions from './actions';\r\n\r\nimport { ApplicationService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _applicationService: ApplicationService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ApplicationActions.Load),\r\n switchMap(action => this._applicationService.getAll().pipe(\r\n map(applications => ApplicationActions.LoadSuccess(applications),\r\n catchError(error => of(ApplicationActions.LoadFail(error)))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Application } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: application => application.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as ApplicationActions from './actions';\r\n\r\nconst applicationReducer = createReducer(\r\n initialState,\r\n\r\n on(ApplicationActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ApplicationActions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(ApplicationActions.LoadSuccess, (state, { payload }) => adapter.setAll(payload.applications, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return applicationReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.applications);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetType } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load AssetTypes');\r\nexport const LoadFail = createAction('[Core] Load AssetTypes Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Core] Load AssetTypes Success', props<{ assetTypes: AssetType[] }>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AssetTypesActions from './actions';\r\n\r\nimport { AssetTypeService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _assetTypeService: AssetTypeService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssetTypesActions.Load),\r\n switchMap(action => this._assetTypeService.getAll().pipe(\r\n map(assetTypes => AssetTypesActions.LoadSuccess({ assetTypes }),\r\n catchError(error => of(AssetTypesActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AssetTypesActions from './actions';\r\n\r\nconst assetTypesReducer = createReducer(\r\n initialState,\r\n\r\n on(AssetTypesActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AssetTypesActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AssetTypesActions.LoadSuccess, (state, { assetTypes }) => adapter.setAll(assetTypes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assetTypesReducer(state, action);\r\n}","import { createSelector, resultMemoize, defaultMemoize } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport * as fromDashboards from '../dashboards';\r\nimport { AssetTypeDashboard, Dashboard } from '../../models';\r\nimport * as fromSitemapGroup from '../sitemap-groups';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.assetTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAssetAssetTypes = createSelector(getAll, assetTypes => assetTypes.filter(assetType => !assetType.isSitemapGroupType));\r\nexport const getSitemapGroupAssetTypes = createSelector(getAll, assetTypes => assetTypes.filter(assetType => assetType.isSitemapGroupType));\r\n\r\nexport const _getDashboards = createSelector(\r\n getIds,\r\n getEntities,\r\n fromDashboards.getEntities,\r\n (ids: number[], assetTypeEntities, dashboardEntities) => ids.reduce((result, assetTypeId) => {\r\n const assetType = assetTypeEntities[assetTypeId];\r\n\r\n if (assetType) {\r\n result[assetTypeId] = assetType.dashboards.filter(dashboard => dashboardEntities[dashboard.id]).map(dashboard => ({\r\n ...dashboardEntities[dashboard.id],\r\n icon: dashboard.codeTag,\r\n name: dashboard.name,\r\n displayOrder: dashboard.displayOrder\r\n })).sort((a, b) => a.displayOrder - b.displayOrder);\r\n }\r\n\r\n return result;\r\n \r\n }, {} as { [assetTypeId: number]: Dashboard[] })\r\n)\r\n\r\nexport const getDashboards = createSelector(\r\n _getDashboards,\r\n fromRoot.Layout.isMobile,\r\n (dashboards, isMobile) => (assetTypeId: number) => dashboards[assetTypeId]?.map(dashboard => ({\r\n ...dashboard,\r\n tiles: dashboard.tiles.filter(tile => isMobile ? tile.allowMobile : true).map(tile => ({\r\n ...tile,\r\n hasFullMode: tile.hasFullMode && (isMobile ? tile.allowMobileFullMode : true)\r\n }))\r\n })).filter(dashboard => dashboard.tiles.length > 0) || []\r\n);\r\n\r\nexport const getFirstDashboard = createSelector(\r\n getDashboards,\r\n getDashboards => (assetTypeId: number) => getDashboards(assetTypeId)[0]\r\n);\r\n\r\nexport const getFirstDashboardId = createSelector(\r\n getFirstDashboard,\r\n getFirstDashboard => (assetTypeId: number) => getFirstDashboard(assetTypeId)?.id || null\r\n);\r\n\r\nexport const getFirstDashboardBySitemapgroupId = (sitemapGroupId: number) => createSelector(\r\n fromSitemapGroup.getEntities,\r\n getFirstDashboard,\r\n (entities, getFirstDashboard) => {\r\n return getFirstDashboard(entities[sitemapGroupId]?.assetTypeId);\r\n }\r\n);","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AssetType } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: assetType => assetType.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Action types */\r\nexport const Open = createAction('[Fullscreen Unit Data Datapoint Drawer] Open', () => ({payload: { isOpen: true }}));\r\nexport const Close = createAction('[Fullscreen Unit Data Datapoint Drawer] Close', () => ({payload: { isOpen: false }}));\r\n\r\nexport const OpenDataPointSettingsDrawer = createAction('[Fullscreen Unit Data Data Point Settings Drawer] Open', () => ({payload: { isDataPointSettingsDrawerOpen: true }}));\r\nexport const CloseDataPointSettingsDrawer = createAction('[Fullscreen Unit Data Data Point Settings Drawer] Close', () => ({payload: { isDataPointSettingsDrawerOpen: false }}));","import { State, initialState } from './state';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as DrawerAction from './actions';\r\nimport _ from 'lodash';\r\n\r\nconst datapointDrawerReducer = createReducer(\r\n initialState,\r\n\r\n on(DrawerAction.Open, (state) => _.merge({}, state, {\r\n isOpen: true\r\n })\r\n ),\r\n\r\n on(DrawerAction.Close, (state) => _.merge({}, state, {\r\n isOpen: false\r\n })\r\n ),\r\n\r\n on(DrawerAction.OpenDataPointSettingsDrawer, (state) => ({\r\n ...state,\r\n isDataPointSettingsDrawerOpen: true\r\n })),\r\n\r\n on(DrawerAction.CloseDataPointSettingsDrawer, (state) => ({\r\n ...state,\r\n isDataPointSettingsDrawerOpen: false\r\n }))\r\n);\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointDrawerReducer(state, action);\r\n}\r\n","export interface State {\r\n isOpen: boolean;\r\n isDataPointSettingsDrawerOpen: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n isOpen: false,\r\n isDataPointSettingsDrawerOpen: false\r\n};\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getAssetsState as getParentState } from '../selectors';\r\n\r\nexport const getDatapointDrawerState = createSelector(getParentState, state => state.datapointDrawer);\r\n\r\nexport const getDatapointDrawerIsOpen = createSelector(\r\n getDatapointDrawerState,\r\n state => state.isOpen\r\n);\r\n\r\nexport const getIsDataPointSettingsDrawerOpen = createSelector(\r\n getDatapointDrawerState,\r\n state => state.isDataPointSettingsDrawerOpen\r\n);\r\n\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getAssetsState } from '../selectors';\r\nimport { DatapointLegend } from '@rfv/modules/core/models';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.datapointLegends);\r\n\r\n// for backwards compatibility\r\nexport const getLegends = createSelector(\r\n getState,\r\n state => ([] as DatapointLegend[]).concat(...state.ids.map(id => state.entities[id]))\r\n);\r\n\r\nexport const getIds = createSelector(getState, state => state.ids);\r\n\r\nexport const getLegendsById = (datapointId: number) => createSelector(\r\n getState,\r\n state => state.entities[datapointId]\r\n);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, DataPointSettingsEnable, DataPointSettingsVisibility } from '@rfv/modules/core/models';\r\nimport { DatapointDisplay } from '@rfv/modules/core/models/datapoint/datapoint-display.model';\r\nimport { DatapointDisplayModel } from '@rfv/modules/core/models/datapoint/datapoint-display-model.model';\r\n\r\nexport const Load = createAction('[Core] Load DatapointDisplayProperties',\r\n (assetId: number, includeED: boolean = true, includeDisabled: boolean = false) => ({ payload: { assetId, includeED, includeDisabled } }));\r\nexport const LoadFail = createAction('[Core] Load DatapointDisplayProperties Fail',\r\n (assetId: number, error: ApiError) => ({ payload: { assetId, error } }));\r\nexport const LoadSuccess = createAction('[Core] Load DatapointDisplayProperties Success',\r\n (assetId: number, displayProperties: DatapointDisplay[]) => ({ payload: { assetId, displayProperties } }));\r\n\r\nexport const UpdateDatapointDisplayProperty = createAction('[Core] Update DatapointDisplayProperties',\r\n (model: DatapointDisplayModel) => ({ payload: { model } }));\r\nexport const UpdateDatapointDisplayPropertyFail = createAction('[Core] Update DatapointDisplayProperties Fail',\r\n (model: DatapointDisplayModel, error: ApiError) => ({ payload: { model, error } }));\r\nexport const UpdateDatapointDisplayPropertySuccess = createAction('[Core] Update DatapointDisplayProperties Success',\r\n (model: DatapointDisplayModel, success: boolean) => ({ payload: { model, success } }));\r\n\r\nexport const EnableDataPoints = createAction('[Core] Enable DataPoints',\r\n (assetId: number, dataPoints: DataPointSettingsEnable[]) => ({ assetId, dataPoints }));\r\nexport const EnableDataPointsSuccess = createAction('[Core] Enable DataPoints Success',\r\n (assetId: number) => ({ assetId }));\r\nexport const EnableDataPointsFail = createAction('[Core] Enable Data Points Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\n\r\nexport const HideDataPoints = createAction('[Core] Hide DataPoints Display',\r\n (assetId: number, dataPoints: DataPointSettingsVisibility[]) => ({ assetId, dataPoints }));\r\nexport const HideDataPointsSuccess = createAction('[Core] Hide DataPoints Display Success',\r\n (assetId: number) => ({ assetId }));\r\nexport const HideDataPointsFail = createAction('[Core] Hide Data Points Display Fail',\r\n (error: ApiError) => ({ error })); ","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DatapointDisplay } from '@rfv/modules/core/models/datapoint/datapoint-display.model';\r\nimport { state } from '@angular/animations';\r\n\r\nexport interface State extends EntityState {\r\n isUpdating: boolean;\r\n isUpdatingDisabledFlag:boolean;\r\n isUpdatingVisibility: boolean;\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n };\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: displayProperty => displayProperty.DataPointId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isUpdating: false,\r\n isUpdatingDisabledFlag:false,\r\n isUpdatingVisibility:false,\r\n index: {}\r\n});\r\n","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst displayPropertiesReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { payload }) => adapter.upsertMany(payload.displayProperties, _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n ids: payload.displayProperties.map(property => property.DataPointId),\r\n\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n }))),\r\n\r\n on(Actions.EnableDataPoints, (state) => ({\r\n ...state,\r\n isUpdatingDisabledFlag: true,\r\n })),\r\n\r\n on(Actions.EnableDataPointsFail, (state, { error }) => ({\r\n ...state,\r\n isUpdatingDisabledFlag: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.EnableDataPointsSuccess, state => ({\r\n ...state,\r\n isUpdatingDisabledFlag: false,\r\n })),\r\n\r\n on(Actions.HideDataPoints, (state) => ({\r\n ...state,\r\n isUpdatingVisibility: true\r\n })),\r\n\r\n on(Actions.HideDataPointsFail, (state, { error }) => ({\r\n ...state,\r\n isUpdatingVisibility: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.HideDataPointsSuccess, state => ({\r\n ...state,\r\n isUpdatingVisibility: false\r\n })),\r\n\r\n on(Actions.UpdateDatapointDisplayProperty, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(Actions.UpdateDatapointDisplayPropertyFail, (state, { payload }) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.UpdateDatapointDisplayPropertySuccess, state => ({\r\n ...state,\r\n isUpdating: false\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return displayPropertiesReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { AssetDatapoint } from '@rfv/modules/core/models';\r\n\r\nexport const getDisplayPropertyState = createSelector(getAssetsState, state => state.datapointDisplayProperty);\r\n\r\nconst {\r\n selectEntities: _getEntities,\r\n} = adapter.getSelectors(getDisplayPropertyState);\r\n\r\nexport const getIsUpdating = createSelector(getDisplayPropertyState, state => state.isUpdating);\r\nexport const getIsUpdatingDisabledFlag = createSelector(getDisplayPropertyState, state => state.isUpdatingDisabledFlag);\r\nexport const getIsUpdatingVisibility = createSelector(getDisplayPropertyState, state => state.isUpdatingVisibility);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(getDisplayPropertyState, state => state && state.index && state.index[assetId]);\r\n\r\nexport const getAll = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id])\r\n);\r\n\r\nexport const getEntities = (assetId: number) => createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) => ids.reduce((dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }), {} as Dictionary) || {}\r\n);\r\n\r\nexport const getIds = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids || []\r\n);\r\n\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, Asset } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Assets');\r\nexport const LoadFail = createAction('[Core] Load Assets Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Core] Load Assets Success', props<{ assets: Asset[] }>());","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AssetActions from './actions';\r\n\r\nconst assetsReducer = createReducer(\r\n initialState,\r\n\r\n on(AssetActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AssetActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AssetActions.LoadSuccess, (state, { assets }) => adapter.setAll(assets, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assetsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getEntitiesState = createSelector(getAssetsState, state => state.entities);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getEntitiesState);\r\n\r\nexport const getSortedAssets = createSelector(\r\n getAll,\r\n (assets) => {\r\n return assets.sort((a, b) => (a.name > b.name) ? 1 : -1)\r\n }\r\n)\r\n\r\nexport const isLoaded = createSelector(getEntitiesState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getEntitiesState, state => state.isLoading);\r\nexport const getError = createSelector(getEntitiesState, state => state.error);","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Asset } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: asset => asset.id,\r\n sortComparer: (a, b) => a.name ? a.name.localeCompare(b.name) : 1\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetAlarm } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Alarms', (assetId: number) => ({ payload: { assetId }}));\r\n\r\nexport const Load = createAction('[Core] Load Asset Alarms', (assetId: number) => ({ payload: { assetId }}));\r\nexport const LoadFail = createAction('[Core] Load Asset Alarms Fail', (assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Alarms Success', (assetId: number, alarms: AssetAlarm[]) => ({ payload: { assetId, alarms }}));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AssetAlarm } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n }\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarm => alarm.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n index: null\r\n});","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmActions.Load, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(AlarmActions.LoadFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(AlarmActions.LoadSuccess, (state, { payload }) => {\r\n return adapter.upsertMany(payload.alarms, {\r\n ...state,\r\n index: {\r\n [payload.assetId]: {\r\n ids: payload.alarms.map(alarm => alarm.id),\r\n\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n })\r\n })\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { AlarmStates } from '@rfv/modules/core/enums';\r\nimport { AssetAlarm } from '@rfv/modules/core/models';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nexport const getAlarmsState = createSelector(getAssetsState, state => state.alarms);\r\n\r\nconst {\r\n selectEntities: _getEntities,\r\n} = adapter.getSelectors(getAlarmsState);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(getAlarmsState, state => state && state.index && state.index[assetId]);\r\n\r\nexport const getAll = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id])\r\n);\r\n\r\nexport const getEntities = (assetId: number) => createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) => ids.reduce((dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }), {} as Dictionary) || {}\r\n);\r\n\r\nexport const getIds = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids || []\r\n);\r\n\r\nexport const getTotal = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids && index.ids.length || 0\r\n);\r\n\r\nexport const isLoaded = (assetId: number) => createSelector(_getIndex(assetId), index => index.isLoaded);\r\nexport const isLoading = (assetId: number) => createSelector(_getIndex(assetId), index => index.isLoading);\r\nexport const getError = (assetId: number) => createSelector(_getIndex(assetId), index => index.error);\r\n\r\nexport const getAlarms = (assetId: number, state?: AlarmStates) => createSelector(\r\n getAll(assetId),\r\n fromCore.Assets.DatapointValues.getAll(assetId),\r\n (alarms, datapoints) => alarms && (\r\n state\r\n ? alarms?.filter(alarm => datapoints.some(datapoint => alarm.dataPointId === datapoint.id) && !alarm.isDisabled && alarm.alarmStateId === AlarmStates.Present)\r\n : alarms\r\n ) || []\r\n);\r\n\r\nexport const getAlarmsCount = (assetId: number, state?: AlarmStates) => createSelector(\r\n getAlarms(assetId, state),\r\n alarms => alarms && alarms.length || 0\r\n);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetAlarmGroupAlertScheduleRecipients } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Alarm Group Alert Schedule Recipients', (assetId: number) => ({ payload: { assetId }}));\r\n\r\nexport const Load = createAction('[Core] Load Asset Alarm Group Alert Schedule Recipients', (assetId: number) => ({ payload: { assetId }}));\r\nexport const LoadFail = createAction('[Core] Load Asset Alarm Group Alert Schedule Recipients Fail', (assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Alarm Group Alert Schedule Recipients Success', (assetId: number, alarmGroupAlertScheduleRecipients: AssetAlarmGroupAlertScheduleRecipients[]) => ({ payload: { assetId, alarmGroupAlertScheduleRecipients }}));","import { ApiError, AssetAlarmGroupAlertScheduleRecipients } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n alarmGroupAlertScheduleRecipients: AssetAlarmGroupAlertScheduleRecipients[];\r\n}\r\n\r\n\r\nexport const initialState: State = {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n alarmGroupAlertScheduleRecipients: null\r\n};","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AlarmGroupAlertScheduleRecipientsActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmGroupAlertScheduleRecipientsActions.Load, (state, { payload }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmGroupAlertScheduleRecipientsActions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: payload.error\r\n })),\r\n\r\n on(AlarmGroupAlertScheduleRecipientsActions.LoadSuccess, (state, { payload }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n alarmGroupAlertScheduleRecipients: payload.alarmGroupAlertScheduleRecipients \r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getAlarmGroupAlertScheduleRecipientsState = createSelector(getAssetsState, state => state.alarmGroupAlertScheduleRecipients);\r\n\r\nexport const isLoaded = createSelector(getAlarmGroupAlertScheduleRecipientsState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getAlarmGroupAlertScheduleRecipientsState, state => state.isLoading);\r\nexport const getError = createSelector(getAlarmGroupAlertScheduleRecipientsState, state => state.error);\r\n\r\nexport const getAlarmGroupAlertScheduleRecipients = createSelector(\r\n getAlarmGroupAlertScheduleRecipientsState,\r\n state => state && state.alarmGroupAlertScheduleRecipients || []\r\n);\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetAlarmHistoryCount } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Alarm History Count', (assetId: number) => ({ payload: { assetId }}));\r\n\r\nexport const Load = createAction('[Core] Load Asset Alarm History Count', (assetId: number, startDate: Date, endDate: Date) => ({ payload: { assetId, startDate, endDate }}));\r\nexport const LoadFail = createAction('[Core] Load Asset Alarm History Count Fail', (assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Alarm History Count Success', (assetId: number, alarmHistoryCounts: AssetAlarmHistoryCount[]) => ({ payload: { assetId, alarmHistoryCounts }}));\r\n\r\nexport const SelectDateRange = createAction('[Core] Asset Alarm History Select Date Range', (range: 'day' | 'month') => ({ payload: { range }}));","import { ApiError, AssetAlarmHistoryCount } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n selectedDateRange: 'day' | 'month';\r\n alarmHistoryCounts: AssetAlarmHistoryCount[];\r\n startDate: Date;\r\n endDate: Date;\r\n}\r\n\r\n\r\nexport const initialState: State = {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n selectedDateRange: 'day',\r\n alarmHistoryCounts: null,\r\n startDate: null,\r\n endDate: null\r\n};","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AlarmHistoryCountActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmHistoryCountActions.Load, (state, { payload }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmHistoryCountActions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: payload.error\r\n })),\r\n\r\n on(AlarmHistoryCountActions.LoadSuccess, (state, { payload }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n alarmHistoryCounts: payload.alarmHistoryCounts \r\n })), \r\n\r\n on(AlarmHistoryCountActions.SelectDateRange, (state, { payload }) => \r\n { \r\n var startDate = new Date();\r\n var endDate = new Date();\r\n\r\n if(payload.range === 'month') {\r\n startDate.setHours(0,0,0,0);\r\n startDate.setDate(startDate.getDate() - 30);\r\n }\r\n else {\r\n startDate.setDate(startDate.getDate() - 1);\r\n }\r\n\r\n return ({\r\n ...state,\r\n selectedDateRange: payload.range,\r\n startDate: startDate,\r\n endDate: endDate\r\n })\r\n })\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { Options as HighChartOptions } from 'highcharts';\r\n\r\nimport * as fromAlarmGroups from '../../alarm-groups/index';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getAlarmHistoryCountsState = createSelector(getAssetsState, state => state.alarmHistoryCounts);\r\n\r\nexport const isLoaded = createSelector(getAlarmHistoryCountsState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getAlarmHistoryCountsState, state => state.isLoading);\r\nexport const getError = createSelector(getAlarmHistoryCountsState, state => state.error);\r\n\r\nexport const getSelectedDateRange = createSelector(getAlarmHistoryCountsState, state => state.selectedDateRange);\r\n\r\nexport const getStartDate = createSelector(getAlarmHistoryCountsState, state => state.startDate);\r\nexport const getEndDate = createSelector(getAlarmHistoryCountsState, state => state.endDate);\r\n\r\nexport const getAlarmHistoryCounts = createSelector(\r\n getAlarmHistoryCountsState,\r\n state => state && state.alarmHistoryCounts || []\r\n);\r\n\r\nexport const getAlarmHistoryCountsWithColors = createSelector(\r\n getAlarmHistoryCounts,\r\n fromAlarmGroups.getEntities,\r\n (counts, alarmGroups) => counts.map( x => ({\r\n count: x.count,\r\n label: alarmGroups[x.alarmGroupId].Name,\r\n color: `#${alarmGroups[x.alarmGroupId].Color}`\r\n })\r\n )\r\n);\r\n\r\nexport const getTotalAssetHistoryCount = createSelector(\r\n getAlarmHistoryCounts,\r\n counts => counts && counts.reduce((prev, next) => prev + next.count, 0) || 0\r\n);\r\n\r\nexport const getSelectedAssetHistoryChart = createSelector(\r\n getAlarmHistoryCounts,\r\n getTotalAssetHistoryCount,\r\n fromAlarmGroups.getEntities,\r\n (counts, totalCount, alarmGroups) => ({\r\n title: {\r\n text: `${totalCount}`,\r\n },\r\n subtitle: {\r\n text: 'Total Alarm
Count',\r\n },\r\n tooltip: {\r\n enabled: true,\r\n pointFormat: '{point.y} ({point.percentage:.1f}%)'\r\n },\r\n series: [{\r\n type: 'pie',\r\n name: 'Alarm History Count',\r\n data: counts.map(count => ({\r\n name: alarmGroups[count.alarmGroupId].Name,\r\n y: count.count,\r\n color: `#${alarmGroups[count.alarmGroupId].Color}`\r\n }))\r\n }]\r\n } as HighChartOptions)\r\n)","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Alert History Recipient Count', (assetId: number) => ({ payload: { assetId }}));\r\n\r\nexport const Load = createAction('[Core] Load Asset Alert History Recipient Count', (assetId: number, startDate: Date, endDate: Date) => ({ payload: { assetId, startDate, endDate }}));\r\nexport const LoadFail = createAction('[Core] Load Asset Alert History Recipient Count Fail', (assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Alert History Recipient Count Success', (assetId: number, alertHistoryRecipientCount: number) => ({ payload: { assetId, alertHistoryRecipientCount }}));\r\n\r\nexport const SelectDateRange = createAction('[Core] Asset Alert History Recipient Count Select Date Range', (range: 'day' | 'month') => ({ payload: { range }}));","import { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n selectedDateRange: 'day' | 'month';\r\n alertHistoryRecipientCount: number;\r\n startDate: Date;\r\n endDate: Date;\r\n}\r\n\r\n\r\nexport const initialState: State = {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n selectedDateRange: 'day',\r\n alertHistoryRecipientCount: null,\r\n startDate: null,\r\n endDate: null\r\n};","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AlertHistoryRecipientCountActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(AlertHistoryRecipientCountActions.Load, (state, { payload }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlertHistoryRecipientCountActions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: payload.error\r\n })),\r\n\r\n on(AlertHistoryRecipientCountActions.LoadSuccess, (state, { payload }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n alertHistoryRecipientCount: payload.alertHistoryRecipientCount \r\n })), \r\n\r\n on(AlertHistoryRecipientCountActions.SelectDateRange, (state, { payload }) => \r\n { \r\n var startDate = new Date();\r\n var endDate = new Date();\r\n\r\n if(payload.range == 'month') {\r\n startDate.setHours(0,0,0,0);\r\n startDate.setDate(startDate.getDate() - 30);\r\n }\r\n else {\r\n startDate.setDate(startDate.getDate() - 1);\r\n }\r\n\r\n return ({\r\n ...state,\r\n selectedDateRange: payload.range,\r\n startDate: startDate,\r\n endDate: endDate\r\n })\r\n })\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getAlertHistoryRecipientCountState = createSelector(getAssetsState, state => state.alertHistoryRecipientCount);\r\n\r\nexport const isLoaded = createSelector(getAlertHistoryRecipientCountState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getAlertHistoryRecipientCountState, state => state.isLoading);\r\nexport const getError = createSelector(getAlertHistoryRecipientCountState, state => state.error);\r\n\r\nexport const getSelectedDateRange = createSelector(getAlertHistoryRecipientCountState, state => state.selectedDateRange);\r\n\r\nexport const getStartDate = createSelector(getAlertHistoryRecipientCountState, state => state.startDate);\r\nexport const getEndDate = createSelector(getAlertHistoryRecipientCountState, state => state.endDate);\r\n\r\nexport const getAlertHistoryRecipientCount = createSelector(\r\n getAlertHistoryRecipientCountState,\r\n state => state && state.alertHistoryRecipientCount || 0\r\n);\r\n\r\nexport const getAlertHistoryRecipientCountWithLabel = createSelector(\r\n getAlertHistoryRecipientCount,\r\n (count) => ({\r\n count: count,\r\n label: 'Alerts Sent in 24 Hours',\r\n color: '#FFC72C'\r\n })\r\n);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DatapointLegend } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load DatapointLegends', (datapointIds: any[]) => ({ payload: { datapointIds }}));\r\nexport const LoadFail = createAction('[Core] Load DatapointLegends Fail', (error: ApiError) => ({ payload: { error }}));\r\nexport const LoadSuccess = createAction('[Core] Load DatapointLegends Success', (legends: DatapointLegend[]) => ({ payload: { legends }}));\r\n","import { ApiError, DatapointLegend } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n entities: {\r\n [datapointId: number]: DatapointLegend[];\r\n }\r\n\r\n ids: number[];\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const initialState: State = {\r\n entities: {},\r\n ids: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst legendsReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { payload }) => {\r\n \r\n const entities = {\r\n ...state.entities,\r\n ...payload.legends.reduce((result, legend) => {\r\n if (!result[legend.DataPointId])\r\n result[legend.DataPointId] = [];\r\n \r\n result[legend.DataPointId].push(legend);\r\n return result;\r\n }, {}),\r\n };\r\n\r\n return {\r\n ...state,\r\n entities,\r\n ids: Object.keys(entities).map(propertyKey => +propertyKey),\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return legendsReducer(state, action);\r\n}","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetDatapointHistorical } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Datapoints Historical', (assetId: number) => ({ assetId }));\r\n\r\nexport const Load = createAction('[Core] Load Asset Datapoints Historical', \r\n (assetId: number, startDate: Date, endDate: Date) => ({ assetId, startDate, endDate }));\r\nexport const LoadMostRecent = createAction('[Core] Load Asset Datapoints Historical Most Recent', \r\n (assetId: number, limit: number) => ({ assetId, limit }));\r\nexport const LoadFail = createAction('[Core] Load Asset Datapoints Historical Fail',\r\n (assetId: number, error: ApiError) => ({ assetId, error }));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Datapoints Historical Success',\r\n (assetId: number, datapoints: AssetDatapointHistorical[]) => ({ assetId, datapoints }));\r\n\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AssetDatapointHistorical } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n };\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: datapoint => datapoint.id,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n index: {}\r\n});","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DatapointActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointActions.Load, DatapointActions.LoadMostRecent, (state, { assetId }) => _.merge({}, state, {\r\n index: {\r\n [assetId]: {\r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(DatapointActions.LoadFail, (state, { assetId, error }) => _.merge({}, state, {\r\n index: {\r\n [assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n }\r\n }\r\n })),\r\n\r\n on(DatapointActions.LoadSuccess, (state, { assetId, datapoints }) => adapter.upsertMany(datapoints, _.merge({}, state, {\r\n index: {\r\n [assetId]: {\r\n ids: datapoints.map(datapoint => datapoint.id),\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n })))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { AssetDatapoint } from '@rfv/modules/core/models';\r\n\r\nexport const getDatapointsState = createSelector(getAssetsState, state => state.datapointHistorical);\r\n\r\nconst {\r\n selectEntities: _getEntities,\r\n} = adapter.getSelectors(getDatapointsState);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(getDatapointsState, state => state && state.index && state.index[assetId]);\r\n\r\nexport const getAll = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id]) || []\r\n);\r\n\r\nexport const getEntities = (assetId: number) => createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) => ids.reduce((dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }), {} as Dictionary) || {}\r\n);\r\n\r\nexport const getIds = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids || []\r\n);\r\n\r\nexport const getTotal = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids && index.ids.length || 0\r\n);\r\n\r\nexport const getAsset = (assetId: number) => createSelector(getDatapointsState, state => state.index[assetId] || {});\r\n\r\nexport const isLoaded = (assetId: number) => createSelector(_getIndex(assetId), index => (index ? index.isLoaded : false));\r\nexport const isLoading = (assetId: number) => createSelector(_getIndex(assetId), index => (index ? index.isLoading : true));\r\nexport const getError = (assetId: number) => createSelector(_getIndex(assetId), index => index.error);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetDatapointSetting } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Datapoints', (assetId: number) => ({ payload: { assetId }}));\r\n\r\nexport const Load = createAction('[Core] Load Asset Datapoint Settings', (assetId: number) => ({ payload: { assetId }}));\r\nexport const LoadFail = createAction('[Core] Load Asset Datapoint Settings Fail',\r\n(assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Datapoint Settings Success',\r\n(assetId: number, datapoints: AssetDatapointSetting[]) => ({ payload: { assetId, datapoints }}));\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AssetDatapoint, AssetDatapointSetting } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n }\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: datapoint => datapoint.Id,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n index: null\r\n});","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DatapointActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointActions.Load, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(DatapointActions.LoadFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(DatapointActions.LoadSuccess, (state, { payload }) => adapter.upsertMany(payload.datapoints, _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n ids: payload.datapoints.map(datapoint => datapoint.Id),\r\n \r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n })))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { AssetDatapointSetting } from '@rfv/modules/core/models';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nexport const getDatapointsState = createSelector(getAssetsState, state => state.datapointSettings);\r\n\r\nconst {\r\n selectEntities: _getEntities,\r\n} = adapter.getSelectors(getDatapointsState);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(getDatapointsState, state => state && state.index && state.index[assetId]);\r\n\r\nexport const getAll = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id]) || []\r\n);\r\n\r\nexport const getEntities = (assetId: number) => createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) => ids.reduce((dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }), {} as Dictionary) || {}\r\n);\r\n\r\nexport const getIds = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids || []\r\n);\r\n\r\nexport const getTotal = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids && index.ids.length || 0\r\n);\r\n\r\nexport const isLoaded = (assetId: number) => createSelector(_getIndex(assetId), index => index.isLoaded);\r\nexport const isLoading = (assetId: number) => createSelector(_getIndex(assetId), index => index && index.isLoading);\r\nexport const getError = (assetId: number) => createSelector(_getIndex(assetId), index => index.error);\r\n\r\n// we may need to index by datapointIdentifierId if this gets slow...\r\nexport const getByDatapointIdentifierId = (assetId: number, datapointIdentifierId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints.find(datapoint => datapoint.DataPointIdentifierId === datapointIdentifierId)\r\n);\r\n\r\nexport const getLegendsByDatapointId = (assetId, datapointId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints.find(datapoint => datapoint.Id === datapointId)?.Legends\r\n);\r\n\r\nexport const getAllLegendsByAssetId = (assetId) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints.map(dp => dp.Legends).filter(legends => legends.length > 0)\r\n);\r\n\r\nexport const getEnabledDatapoints = (assetId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints.filter(dp => !dp.IsDisabled)\r\n);\r\n\r\nexport const getAllDatapointsNoED = (assetId: number) => createSelector(\r\n getAll(assetId),\r\n fromCore.Assets.DatapointDisplayProperty.getAll(assetId),\r\n (datapoints, properties) => datapoints.filter(dp => properties.find(prop => prop.DataPointId === dp.Id))\r\n);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetDatapoint } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Datapoints', (assetId: number) => ({ payload: { assetId } }));\r\n\r\nexport const Load = createAction('[Core] Load Asset Datapoints', (assetId: number) => ({ payload: { assetId } }));\r\nexport const LoadFail = createAction('[Core] Load Asset Datapoints Fail',\r\n (assetId: number, error: ApiError) => ({ payload: { assetId, error } }));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Datapoints Success',\r\n (assetId: number, datapoints: AssetDatapoint[]) => ({ payload: { assetId, datapoints } }));\r\n\r\nexport const DisableDatapoint = createAction('[Core] Disable Asset Datapoint',\r\n (assetId: number, datapointId: number) => ({ payload: { assetId, datapointId } }));\r\nexport const DisableDatapointFail = createAction('[Core] Disable Asset Datapoint Fail',\r\n (assetId: number, datapointId: number, error: ApiError) => ({ payload: { assetId, datapointId, error } }));\r\nexport const DisableDatapointSuccess = createAction('[Core] Disable Asset Datapoint Success',\r\n (assetId: number, datapointId: number, success: boolean) => ({ payload: { assetId, datapointId } }));\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AssetDatapoint } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n };\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: datapoint => datapoint.id,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n index: {}\r\n});","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DatapointActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointActions.Load, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(DatapointActions.LoadFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(DatapointActions.LoadSuccess, (state, { payload }) => {\r\n return adapter.upsertMany(payload.datapoints, {\r\n ...state, \r\n index: {\r\n ...state.index,\r\n [payload.assetId]: {\r\n ids: payload.datapoints.map(datapoint => datapoint.id),\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n }\r\n );\r\n })\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { AssetDatapoint } from '@rfv/modules/core/models';\r\n\r\nimport * as fromDatapoints from '@rfv/modules/core/store/datapoints';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nexport const getDatapointsState = createSelector(getAssetsState, state => state.datapointValues);\r\n\r\nconst {\r\n selectEntities: _getEntities,\r\n} = adapter.getSelectors(getDatapointsState);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(getDatapointsState, state => state && state.index && state.index[assetId]);\r\n\r\nexport const getAll = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id]) || []\r\n);\r\n\r\nexport const getEntities = (assetId: number) => createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) => ids.reduce((dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }), {} as Dictionary) || {}\r\n);\r\n\r\nexport const getIds = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids || []\r\n);\r\n\r\nexport const getTotal = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids && index.ids.length || 0\r\n);\r\n\r\nexport const isLoaded = (assetId: number) => createSelector(_getIndex(assetId), index => (index ? index.isLoaded : false));\r\nexport const isLoading = (assetId: number) => createSelector(_getIndex(assetId), index => (index ? index.isLoading : true));\r\nexport const getError = (assetId: number) => createSelector(_getIndex(assetId), index => index.error);\r\n\r\n// we may need to index by datapointIdentifierId if this gets slow...\r\nexport const getByDatapointIdentifierId = (assetId: number, datapointIdentifierId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints.find(datapoint => datapoint.datapointIdentifierId === datapointIdentifierId)\r\n);\r\n\r\nexport const getInvalid = (assetId: number) => createSelector(\r\n getAll(assetId),\r\n fromDatapoints.Status.getEntities,\r\n (datapoints, statusEntities) => datapoints.filter(datapoint => statusEntities[datapoint.datapointStatusId].isInvalid && !datapoint.isDisabled)\r\n);\r\n\r\nexport const getInvalidCount = (assetId: number) => createSelector(\r\n getInvalid(assetId),\r\n datapoints => datapoints && datapoints.length || 0\r\n);\r\n\r\nexport const getLastSampleTime = (assetId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints && datapoints.reduce((date, datapoint) => {\r\n const sampleTime = new Date(datapoint.sampleTime);\r\n return sampleTime > date ? sampleTime : date\r\n }, new Date(0)) || null\r\n);\r\n\r\nexport const getLastUpdateWithNoAISData = (assetId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => {\r\n var dp = datapoints.filter(dp => !([48, 50, 200, 202, 1].includes(dp.datapointStatusId) || (dp.isDisabled === true)));\r\n return dp?.length > 0 ? dp.reduce((date, datapoint) => { const sampleTime = new Date(datapoint.sampleTime); return sampleTime > date ? sampleTime : date }, new Date(0)) : null\r\n }\r\n);\r\n\r\nexport const getEngineRunHours = (assetId: number) => createSelector(\r\n getAll(assetId),\r\n datapoints => datapoints.find(x => x.datapointIdentifierId == 343)\r\n);\r\n\r\n// Selectors to get all data point for selected asset (using getSelectedAssetId from dashboard)\r\nconst getSelectedAssetIndex = createSelector(\r\n getDatapointsState,\r\n fromDashboard.getSelectedAssetId,\r\n (state, assetId) => state && state.index && state.index[assetId]\r\n);\r\n\r\nexport const getSelectedAssetDataPoints = createSelector(\r\n getSelectedAssetIndex,\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id]) || []\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, EventDiagnostic } from \"@rfv/modules/core/models\";\r\nimport { SystemEventDiagnostic } from '@rfv/modules/dashboard/modules/system-events-diagnostics/models';\r\n\r\nexport const Clear = createAction(\"[Core] Clear Events and Diagnostics\", (assetId: number) => ({ assetId }));\r\n\r\nexport const Load = createAction(\r\n \"[Core] Load Asset Events and Diagnostics\",\r\n (\r\n assetId: number,\r\n startDate: string,\r\n endDate: string,\r\n topNRecords: number | null\r\n ) => ({\r\n payload: { assetId, startDate, endDate, topNRecords }\r\n })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n \"[Core] Load Asset Events and Diagnostics Fail\",\r\n (assetId: number, error: ApiError) => ({ payload: { assetId, error } })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n \"[Core] Load Asset Events and Diagnostics Success\",\r\n (\r\n assetId: number,\r\n eventsDiagnostics: EventDiagnostic[],\r\n topNRecords: number | null\r\n ) => ({\r\n payload: { assetId, eventsDiagnostics, topNRecords }\r\n })\r\n);\r\n\r\n// Actions to set start and end date\r\nexport const SetDateRange = createAction(\r\n '[Core] Set Events and Diagnostics Start Date',\r\n props<{ startDate: string, endDate: string }>()\r\n);\r\n\r\nexport const CreateSnapshotPoll = createAction('[Core] Create Snapshot Poll',\r\n (assetId: number) => ({ payload: { assetId } })\r\n);\r\n\r\nexport const DownloadSnapshotFile = createAction(\r\n '[Core] Download Snapshot File',\r\n (assetId: number, row: EventDiagnostic | SystemEventDiagnostic) => ({ payload: { assetId, row }})\r\n);\r\n\r\nexport const DownloadSnapshotFileSuccess = createAction(\r\n '[Core] Download Snapshot File Success',\r\n (response: any, assetId: number, snapShotFile: string) => ({ payload: { response, assetId, snapShotFile }})\r\n);\r\n\r\nexport const DownloadSnapshotFileFail = createAction(\r\n '[Core] Download Snapshot File Fail',\r\n (assetId: number, error) => ({ payload: { assetId, error } })\r\n);\r\n\r\nexport const GoToSnapshotTrends = createAction(\r\n '[Core] Go To Trends With Snapshot Data',\r\n (trendsDashboardId: number, assetId: number, row: EventDiagnostic | SystemEventDiagnostic) => ({ payload: { trendsDashboardId, assetId, row } })\r\n);\r\n\r\nexport const GoToSnapshotTrendsSuccess = createAction(\r\n '[Core] Go To Trends With Snapshot Data Success'\r\n);\r\n\r\nexport const GoToSnapshotTrendsFail = createAction(\r\n '[Core] Go To Trends With Snapshot Data Success',\r\n (error) => ({ payload: error })\r\n);\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, EventDiagnostic } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n startDate: null | string;\r\n endDate: null | string;\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n isSnapshotDownloaded: boolean;\r\n isSnapshotDownloading: boolean;\r\n isSnapshotDatapointsLoading: boolean;\r\n isSnapshotDatapointsLoaded: boolean;\r\n } \r\n } | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: eventDiagnostic => eventDiagnostic.id,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n startDate: null,\r\n endDate: null,\r\n index: null\r\n});\r\n","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst eventsDiagnosticsReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.CreateSnapshotPoll, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.Clear, (state, { assetId }) => {\r\n return adapter.removeAll( state );\r\n }),\r\n\r\n on(Actions.Load, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true,\r\n error: null\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { payload }) => adapter.upsertMany(payload.eventsDiagnostics, _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n ids: payload.eventsDiagnostics.map(eventDiagnostic => eventDiagnostic.id),\r\n\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n }))),\r\n\r\n on(Actions.SetDateRange, (state, { startDate, endDate }) => ({\r\n ...state,\r\n startDate,\r\n endDate\r\n })),\r\n\r\n on(Actions.DownloadSnapshotFile, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isSnapshotFileDownloading: true,\r\n isSnapshotFileDownloaded: false\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.DownloadSnapshotFileSuccess, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isSnapshotFileDownloading: false,\r\n isSnapshotFileDownloaded: true\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.DownloadSnapshotFileFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isSnapshotFileDownloading: false,\r\n isSnapshotFileDownloaded: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.GoToSnapshotTrends, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isSnapshotDatapointsLoading: true,\r\n isSnapshotDatapointsLoaded: false\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.DownloadSnapshotFileSuccess, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isSnapshotDatapointsLoading: false,\r\n isSnapshotDatapointsLoaded: true\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.DownloadSnapshotFileFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isSnapshotFileDownloading: false,\r\n isSnapshotFileDownloaded: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eventsDiagnosticsReducer(state, action);\r\n}\r\n","import { createSelector } from \"@ngrx/store\";\r\nimport { Dictionary } from \"@ngrx/entity\";\r\n\r\nimport { getAssetsState } from \"../selectors\";\r\n\r\nimport { adapter } from \"./state\";\r\n\r\nimport { EventDiagnostic } from \"@rfv/modules/core/models\";\r\n\r\n/* Lodash */\r\nimport { orderBy, sortBy } from \"lodash\";\r\nimport { EventsDiagnostics } from \"..\";\r\n\r\nimport { DateUtils } from \"@rfv/modules/shared/utils\";\r\n\r\nexport const getEventsDiagnosticsState = createSelector(\r\n getAssetsState,\r\n state => state.eventsDiagnostics\r\n);\r\n\r\nconst { selectEntities: _getEntities } = adapter.getSelectors(\r\n getEventsDiagnosticsState\r\n);\r\n\r\nconst _getIndex = (assetId: number) =>\r\n createSelector(\r\n getEventsDiagnosticsState,\r\n state => state && state.index && state.index[assetId]\r\n );\r\n\r\nexport const getAll = (\r\n assetId: number,\r\n topNRecords: number | null\r\n) =>\r\n createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => (index && index.ids && index.ids.map(id => entities && entities[id]).filter(entity => !!entity)) ||\r\n []\r\n );\r\n\r\nexport const getEntities = (assetId: number) =>\r\n createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) =>\r\n ids.reduce(\r\n (dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }),\r\n {} as Dictionary\r\n ) || {}\r\n );\r\n\r\nexport const getIds = (assetId: number) =>\r\n createSelector(\r\n _getIndex(assetId),\r\n index => (index && index.ids) || []\r\n );\r\n\r\nexport const getTotal = (assetId: number) =>\r\n createSelector(\r\n _getIndex(assetId),\r\n index => (index && index.ids && index.ids.length) || 0\r\n );\r\n\r\nexport const isLoaded = (assetId: number) =>\r\n createSelector(\r\n _getIndex(assetId),\r\n index => index && index.isLoaded\r\n );\r\nexport const isLoading = (assetId: number) =>\r\n createSelector(\r\n _getIndex(assetId),\r\n index => index && index.isLoading\r\n );\r\nexport const getError = (assetId: number) =>\r\n createSelector(\r\n _getIndex(assetId),\r\n index => index && index.error\r\n );\r\n\r\nexport const getEventsDiagnostics = (\r\n assetId: number,\r\n topNRecords: number | null\r\n) =>\r\n createSelector(\r\n getEventsDiagnosticsState,\r\n (state) => {\r\n return Object.values(state.entities);\r\n }\r\n );\r\n\r\nexport const getChartData = (\r\n assetId: number,\r\n topNRecords: number | null,\r\n state?: EventDiagnostic\r\n) =>\r\n createSelector(\r\n getEventsDiagnostics(assetId, topNRecords),\r\n getEventsDiagnosticsState,\r\n getTotal(assetId),\r\n (eventsDiagnostics, state, totals) => {\r\n const title = { text: \"\" };\r\n const subtitle = { text: \"\" };\r\n let categories = [];\r\n let recordNumber = topNRecords;\r\n if (topNRecords === null || recordNumber === undefined) {\r\n recordNumber = 3;\r\n }\r\n\r\n let series = [];\r\n\r\n let description = \"\";\r\n let color = \"\";\r\n let count = 0;\r\n let groupedEventsDiagnostics = [];\r\n const filteredEventsDiagnostics = eventsDiagnostics.filter(\r\n x =>\r\n DateUtils.moment(x.sampleTime).toDate() >\r\n DateUtils.moment(state.startDate).toDate() &&\r\n DateUtils.moment(x.sampleTime).toDate() <\r\n DateUtils.moment(state.endDate).toDate()\r\n );\r\n\r\n for (const eventDiagnostic of filteredEventsDiagnostics) {\r\n const exists = groupedEventsDiagnostics.find(\r\n x => x.description === eventDiagnostic.description\r\n && x.color === eventDiagnostic.color\r\n );\r\n if (exists) {\r\n count++;\r\n const index = groupedEventsDiagnostics.findIndex(\r\n x => x.description === eventDiagnostic.description\r\n && x.color === eventDiagnostic.color\r\n );\r\n const frequency = filteredEventsDiagnostics.filter(x => x.description === eventDiagnostic.description\r\n && x.color === eventDiagnostic.color);\r\n groupedEventsDiagnostics[index].count = frequency.length;\r\n } else {\r\n description = eventDiagnostic.description;\r\n count = 1;\r\n groupedEventsDiagnostics.push({\r\n description: eventDiagnostic.description,\r\n color: eventDiagnostic.color,\r\n count: count,\r\n severity: eventDiagnostic.severityLabel\r\n });\r\n }\r\n }\r\n count = 0;\r\n\r\n for (const eventDiagnostic of groupedEventsDiagnostics) {\r\n let catExists = categories.find(\r\n i => i === eventDiagnostic.description\r\n );\r\n if (catExists === undefined) {\r\n categories.push(eventDiagnostic.description);\r\n }\r\n\r\n let seriesExists = series.find(\r\n i => i.name === eventDiagnostic.severity\r\n );\r\n if (seriesExists === undefined) {\r\n let seriesItem = {\r\n name: eventDiagnostic.severity,\r\n data: [],\r\n color: `#${eventDiagnostic.color}`,\r\n type: \"bar\"\r\n };\r\n series.push(seriesItem);\r\n }\r\n }\r\n\r\n let existingCats = [];\r\n //add the series data\r\n for (const eventDiagnostic of groupedEventsDiagnostics) {\r\n let index = categories.findIndex(\r\n i => i === eventDiagnostic.description\r\n );\r\n\r\n const cat = existingCats.find(x => x === eventDiagnostic.description);\r\n\r\n const serie = series.find(x => x.name === eventDiagnostic.severity);\r\n if (serie && !cat) {\r\n serie.data.push(eventDiagnostic.count);\r\n existingCats.push(eventDiagnostic.description);\r\n const filler = series.filter(x => x.name !== eventDiagnostic.severity);\r\n for (const fill of filler) {\r\n fill.data.push(0);\r\n }\r\n } else if (cat) {\r\n serie.data[index] = eventDiagnostic.count;\r\n } else {\r\n serie.data.push(0);\r\n }\r\n\r\n series = series;\r\n }\r\n\r\n for (const serie of series) {\r\n serie.data.splice(recordNumber, serie.data.length);\r\n }\r\n\r\n categories = categories.splice(0, recordNumber);\r\n\r\n return {\r\n title,\r\n subtitle,\r\n categories,\r\n series\r\n };\r\n }\r\n );\r\n\r\nexport const getDateRange = createSelector(\r\n getEventsDiagnosticsState,\r\n state => ({\r\n startDate: state.startDate,\r\n endDate: state.endDate\r\n })\r\n);\r\n","import { createAction } from \"@ngrx/store\";\r\nimport { ApiError } from \"@rfv/modules/core/models\";\r\nimport { MachineComponent } from \"../../../models/machine-info/machine-component.model\";\r\nimport { MachineInfoAsset } from \"../../../models/machine-info/machine-info.model\";\r\n\r\nexport const LoadComponents = createAction('[Core] Load Components');\r\nexport const LoadComponentsFail = createAction('[Core] Load Components Fail', (error: ApiError) => ({ error }));\r\nexport const LoadComponentsSuccess = createAction('[Core] Load Components Success', (components: MachineComponent[]) => ({ components }));\r\n\r\nexport const LoadMachineInfo = createAction('[Core] Load Machine Info', (assetId: number) => ({ assetId }));\r\nexport const LoadMachineInfoFail = createAction('[Core] Load Machine Info Fail', (error: ApiError) => ({ error }));\r\nexport const LoadMachineInfoSuccess = createAction('[Core] Load Machine Info Success', (machineInfo: MachineInfoAsset) => ({ machineInfo }));\r\n\r\nexport const SaveMachineInfo = createAction('[Core] Save Machine Info', (unitCreationLogId: number, machineInfo: MachineInfoAsset, next: boolean) => ({ unitCreationLogId, machineInfo, next }));\r\nexport const SaveMachineInfoFail = createAction('[Core] Save Machine Info Fail', (error: ApiError) => ({ error }));\r\nexport const SaveMachineInfoSuccess = createAction('[Core] Save Machine Info Success');\r\n\r\nexport const DeleteMachineInfoComponent = createAction('[Core] Delete Machine Info Component', (assetId: number, unitMachineAssetComponentId: number) => ({ assetId, unitMachineAssetComponentId }));\r\nexport const DeleteMachineInfoComponentFail = createAction('[Core] Delete Machine Info Component Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteMachineInfoComponentSuccess = createAction('[Core] Delete Machine Info Component Success', (assetId: number) => ({ assetId }));\r\n\r\nexport const AddMachineInfoComponent = createAction('[Core] Add Machine Info Component', (assetId: number, parentUnitMachineAssetComponentId: number, component: MachineComponent, name: string) => ({ assetId, parentUnitMachineAssetComponentId, component, name }));\r\nexport const AddMachineInfoComponentFail = createAction('[Core] Add Machine Info Component Fail', (error: ApiError) => ({ error }));\r\nexport const AddMachineInfoComponentSuccess = createAction('[Core] Add Machine Info Component Success', (assetId: number) => ({ assetId }));","import { MachineComponent, MachineInfoAsset } from \"@rfv/modules/core/models\";\r\nimport { ApiError } from \"@rfv/modules/core/models\";\r\n\r\nexport interface State {\r\n machineComponents: MachineComponent[];\r\n isMachineComponentsLoading: boolean;\r\n isMachineComponentsLoaded: boolean;\r\n machineComponentsError: ApiError | null;\r\n\r\n machineInfo: MachineInfoAsset;\r\n isMachineInfoLoading: boolean;\r\n isMachineInfoLoaded: boolean;\r\n machineInfoError: ApiError | null;\r\n\r\n isAddingComponent: boolean;\r\n iSDeletingComponent: boolean;\r\n isMachineInfoSaving: boolean;\r\n machineInfoSaveError: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n machineComponents: [],\r\n isMachineComponentsLoading: false,\r\n isMachineComponentsLoaded: false,\r\n machineComponentsError: null,\r\n\r\n machineInfo: null,\r\n isMachineInfoLoading: false,\r\n isMachineInfoLoaded: false,\r\n machineInfoError: null,\r\n\r\n isAddingComponent: false,\r\n iSDeletingComponent: false,\r\n isMachineInfoSaving: false,\r\n machineInfoSaveError: null,\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as MachineInfoActions from './actions';\r\n\r\nconst runtimeFormReducer = createReducer(\r\n initialState,\r\n\r\n on(MachineInfoActions.LoadComponents, (state) => ({\r\n ...state,\r\n isComponentsLoading: true\r\n })),\r\n\r\n on(MachineInfoActions.LoadComponentsFail, (state, { error }) => ({\r\n ...state,\r\n isMachineComponentsLoaded: false,\r\n isMachineComponentsLoading: false,\r\n machineComponentsError: error\r\n })),\r\n\r\n on(MachineInfoActions.LoadComponentsSuccess, (state, { components }) => ({\r\n ...state,\r\n machineComponents: components,\r\n isMachineComponentsLoaded: true,\r\n isMachineComponentsLoading: false,\r\n error: null\r\n })),\r\n\r\n on(MachineInfoActions.LoadMachineInfo, (state) => ({\r\n ...state,\r\n isMachineInfoLoading: true\r\n })),\r\n\r\n on(MachineInfoActions.LoadMachineInfoFail, (state, { error }) => ({\r\n ...state,\r\n isMachineInfoLoaded: false,\r\n isMachineInfoLoading: false,\r\n machineInfoError: error\r\n })),\r\n\r\n on(MachineInfoActions.LoadMachineInfoSuccess, (state, { machineInfo }) => ({\r\n ...state,\r\n machineInfo,\r\n isMachineInfoLoaded: true,\r\n isMachineInfoLoading: false,\r\n error: null\r\n })),\r\n\r\n on(MachineInfoActions.SaveMachineInfo, (state) => ({\r\n ...state,\r\n isMachineInfoSaving: true\r\n })),\r\n\r\n on(MachineInfoActions.SaveMachineInfoSuccess, (state) => ({\r\n ...state,\r\n isMachineInfoSaving: false\r\n })),\r\n\r\n on(MachineInfoActions.SaveMachineInfoFail, (state) => ({\r\n ...state,\r\n isMachineInfoSaving: false\r\n })),\r\n\r\n on(MachineInfoActions.AddMachineInfoComponent, (state) => ({\r\n ...state,\r\n isAddingComponent: true\r\n })),\r\n\r\n on(MachineInfoActions.AddMachineInfoComponentSuccess, (state) => ({\r\n ...state,\r\n isAddingComponent: false\r\n })),\r\n\r\n on(MachineInfoActions.AddMachineInfoComponentFail, (state) => ({\r\n ...state,\r\n isAddingComponent: false\r\n })),\r\n\r\n on(MachineInfoActions.DeleteMachineInfoComponent, (state) => ({\r\n ...state,\r\n iSDeletingComponent: true\r\n })),\r\n\r\n on(MachineInfoActions.DeleteMachineInfoComponentSuccess, (state) => ({\r\n ...state,\r\n iSDeletingComponent: false\r\n })),\r\n \r\n on(MachineInfoActions.DeleteMachineInfoComponentFail, (state) => ({\r\n ...state,\r\n iSDeletingComponent: false\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return runtimeFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.machineInfo);\r\n\r\nexport const getMachineComponents = createSelector(getState, state => state.machineComponents);\r\nexport const isMachineComponentsLoading = createSelector(getState, state => state.isMachineComponentsLoading);\r\nexport const isMachineComponentsLoaded = createSelector(getState, state => state.isMachineComponentsLoaded);\r\nexport const getMachineComponentsError = createSelector(getState, state => state.machineComponentsError);\r\n\r\nexport const getMachineInfo = createSelector(getState, state => state.machineInfo);\r\nexport const isMachineInfoLoading = createSelector(getState, state => state.isMachineInfoLoading);\r\nexport const isMachineInfoLoaded = createSelector(getState, state => state.isMachineInfoLoaded);\r\nexport const getMachineInfoError = createSelector(getState, state => state.machineInfoError);\r\n\r\nexport const isAddingComponent = createSelector(getState, state => state.isAddingComponent);\r\nexport const iSDeletingComponent = createSelector(getState, state => state.iSDeletingComponent);\r\nexport const isMachineInfoSaving = createSelector(getState, state => state.isMachineInfoSaving);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, ParsedDataResponse, RawDataResponse } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Raw Data');\r\n\r\nexport const Load = createAction('[Core] Load Asset Raw Data',\r\n (assetId: number, startDate: Date, endDate: Date) => ({ assetId, startDate, endDate }));\r\nexport const LoadFail = createAction('[Core] Load Asset Raw Data Fail',\r\n (assetId: number, error: ApiError) => ({ assetId, error }));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Raw Data Success',\r\n (assetId: number, rawData: RawDataResponse[]) => ({ assetId, rawData }));\r\n\r\nexport const Parse = createAction('[Core] Raw Data Parse',\r\n (assetId: number, msgId: number) => ({ assetId, msgId }));\r\nexport const ParseFail = createAction('[Core] Raw Data Parse Fail',\r\n (error: ApiError) => ({ error }))\r\nexport const ParseSuccess = createAction('[Core] Raw Data Parse Success',\r\n (result: ParsedDataResponse) => ({ result }));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, RawDataResponse, ParsedDataResponse } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n index: {\r\n [assetId: number]: {\r\n ids: number[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n };\r\n\r\n parseData: EntityState;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: rawData => rawData.Id,\r\n});\r\n\r\nexport const parsedDataAdapter = createEntityAdapter({\r\n selectId: parseData => parseData.MsgId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n index: {},\r\n\r\n parseData: parsedDataAdapter.getInitialState()\r\n});","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState, parsedDataAdapter } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst rawDataReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Clear, () => (initialState)),\r\n\r\n on(Actions.Load, (state, { assetId }) => _.merge({}, state, {\r\n index: {\r\n [assetId]: {\r\n ids: null, \r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { assetId, error }) => _.merge({}, state, {\r\n index: {\r\n [assetId]: {\r\n ids: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n }\r\n }\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { assetId, rawData }) => adapter.setAll(rawData, _.merge({}, state, {\r\n index: {\r\n [assetId]: {\r\n ids: rawData.map(rawData => rawData.Id),\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n }))),\r\n\r\n on(Actions.Parse, (state, { assetId, msgId }) => ({\r\n ...state,\r\n isParsing: true\r\n })),\r\n\r\n on(Actions.ParseFail, (state, { error }) => ({\r\n ...state,\r\n parseData: null,\r\n isParsing: false,\r\n isParsed: false,\r\n parseError: error\r\n })),\r\n\r\n on(Actions.ParseSuccess, (state, { result }) => ({\r\n ...state,\r\n parseData: parsedDataAdapter.setOne(result, state.parseData)\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return rawDataReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter, parsedDataAdapter } from './state';\r\n\r\nimport { RawDataResponse } from '@rfv/modules/core/models';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.rawData);\r\n\r\nconst {\r\n selectEntities: _getEntities,\r\n} = adapter.getSelectors(getState);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(getState, state => state && state.index && state.index[assetId]);\r\n\r\nexport const getAll = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n _getEntities,\r\n (index, entities) => index && index.ids && index.ids.map(id => entities && entities[id]) || []\r\n);\r\n\r\nexport const getEntities = (assetId: number) => createSelector(\r\n getIds(assetId),\r\n _getEntities,\r\n (ids, entities) => ids.reduce((dictionary, id) => ({\r\n ...dictionary,\r\n [id]: entities && entities[id]\r\n }), {} as Dictionary) || {}\r\n);\r\n\r\nexport const getIds = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids || []\r\n);\r\n\r\nexport const getTotal = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.ids && index.ids.length || 0\r\n);\r\n\r\nexport const isLoaded = (assetId: number) => createSelector(_getIndex(assetId), index => (index ? index.isLoaded : false));\r\nexport const isLoading = (assetId: number) => createSelector(_getIndex(assetId), index => (index ? index.isLoading : true));\r\nexport const getError = (assetId: number) => createSelector(_getIndex(assetId), index => index.error);\r\n\r\nexport const getParseData = createSelector(getState, state => state.parseData);\r\n\r\nconst {\r\n selectEntities: getParsedEntities,\r\n} = parsedDataAdapter.getSelectors(getParseData);\r\n\r\nexport const getDataPointResults = ( msgId: number) => createSelector(getParsedEntities, entities => entities[msgId]?.parsedResults.Data);\r\nexport const wasParsed = ( msgId: number) => createSelector(getParsedEntities, entities => (entities[msgId]? true: false));\r\nexport const getColumnDefinition = ( msgId: number) => createSelector(getParsedEntities, entities => {\r\n if((entities && (entities[msgId]?.parsedResults?.ColumnDefinitions).length === 0)) return null\r\n return (entities[msgId]?.parsedResults?.ColumnDefinitions)?.map(col => col)});\r\nexport const getColumnDefinitionName = ( msgId: number) => createSelector(getParsedEntities, entities => {\r\n if((entities && (entities[msgId]?.parsedResults?.ColumnDefinitions).length === 0)) return null\r\n return (entities[msgId]?.parsedResults?.ColumnDefinitions)?.map(col => col?.columnName)\r\n});\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetStatus } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Status', (assetId: number) => ({ payload: { assetId }}));\r\n\r\nexport const Load = createAction('[Core] Load Asset Status', (assetId: number) => ({ payload: { assetId }}));\r\nexport const LoadFail = createAction('[Core] Load Asset Status Fail', (assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const LoadSuccess = createAction('[Core] Load Asset Status Success', (assetId: number, status: AssetStatus) => ({ payload: { assetId, status }}));","import { ApiError, AssetStatus } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n index: {\r\n [assetId: number]: {\r\n status: AssetStatus | null;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n }\r\n }\r\n}\r\n\r\nexport const initialState: State = {\r\n index: null\r\n};","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as StatusActions from './actions';\r\n\r\nconst statusReducer = createReducer(\r\n initialState,\r\n\r\n on(StatusActions.Clear, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n status: null,\r\n isLoaded: false\r\n }\r\n }\r\n })),\r\n\r\n on(StatusActions.Load, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true\r\n }\r\n }\r\n })),\r\n\r\n on(StatusActions.LoadFail, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n }\r\n }\r\n })),\r\n\r\n on(StatusActions.LoadSuccess, (state, { payload }) => _.merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n status: payload.status,\r\n\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }\r\n }\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return statusReducer(state, action);\r\n}","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, UnitInfo, UnitInfoRequest } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Unit Info', (assetId: number) => ({ assetId }));\r\nexport const LoadFail = createAction('[Core] Load Unit Info Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Unit Info Success', (entities: UnitInfo[]) => ({ entities }));\r\n\r\nexport const Save = createAction('[Core] Save Unit Info', (assetId: number, unitInfo: UnitInfoRequest, next:boolean = false) => ({ assetId, unitInfo, next }));\r\nexport const SaveFail = createAction('[Core] Save Unit Info Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Save Unit Info Success');","import { ApiError, UnitInfo } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n entities: UnitInfo[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n entities: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n error: null\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as UnitInfoActions from './actions';\r\n\r\nconst unitInfoReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitInfoActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitInfoActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(UnitInfoActions.LoadSuccess, (state, { entities }) => ({\r\n ...state,\r\n entities,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(UnitInfoActions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UnitInfoActions.SaveSuccess, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UnitInfoActions.SaveFail, state => ({\r\n ...state,\r\n isSaving: false\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitInfoReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.unitInfo);\r\n\r\nexport const getEntities = createSelector(getState, state => state.entities);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetUtilizationResponse } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction(\r\n '[Core] Load Asset Utilization',\r\n (assetId: number, startDate: Date, endDate: Date, approximate: boolean = false) => ({ assetId, startDate, endDate, approximate })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[Core] Load Asset Utilization Fail',\r\n (error: ApiError) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Core] Load Asset Utilization Success',\r\n (entities: AssetUtilizationResponse, startDate: Date, endDate: Date) => ({ entities, startDate, endDate })\r\n);\r\n\r\nexport const Clear = createAction('[Core] Clear Asset Utilization');","import { createEntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { ApiError, AssetUtilizationResponse } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n startDate: Date;\r\n endDate: Date;\r\n data: AssetUtilizationResponse;\r\n}\r\n\r\nexport const initialState: State = {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n startDate: null,\r\n endDate: null,\r\n data: null\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { entities, startDate, endDate }) => ({\r\n ...state,\r\n data: entities,\r\n startDate: startDate,\r\n endDate: endDate,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null,\r\n })),\r\n \r\n on(EntityActions.Clear, () => initialState)\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\nimport { moment } from '@rfv/modules/shared/utils/moment';\r\n\r\nimport * as _ from 'lodash';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.utilization);\r\n\r\nexport const getData = createSelector(getState, state => state.data);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAssetDetailUtilization = createSelector(getState, state => {\r\n return state.data?.AssetDetailUtilizationList\r\n});\r\n\r\nexport const getTimeBasedUtilization = createSelector(getState, state => {\r\n return state.data?.TimeGroupedUtilization\r\n});\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Global Filter Asset Ids',\r\n (sitemapGroupId: number, globalFilterId) => ({ sitemapGroupId, globalFilterId }));\r\n\r\nexport const LoadFail = createAction('[Core] Load Global Filter Asset Ids Fail',\r\n (error: ApiError) => ( error ));\r\n\r\nexport const LoadSuccess = createAction('[Core] Load Global Filter Asset Ids Success',\r\n (globalFilterAssetIds: number[]) => ({ globalFilterAssetIds }));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: assetId => assetId,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as GlobalFilterAssetsIdsActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(GlobalFilterAssetsIdsActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n })),\r\n\r\n on(GlobalFilterAssetsIdsActions.LoadFail, (state, error) => ({\r\n ...state,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(GlobalFilterAssetsIdsActions.LoadSuccess, (state, { globalFilterAssetIds }) => adapter.setAll(globalFilterAssetIds, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n \r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport * as fromAssets from '@rfv/modules/core/store/assets/entities';\r\n\r\nexport const getEntitiesState = createSelector(getAssetsState, state => state.globalFilterAssetIds);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getEntitiesState);\r\n\r\nexport const isLoaded = createSelector(getEntitiesState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getEntitiesState, state => state.isLoading);\r\nexport const getError = createSelector(getEntitiesState, state => state.error);\r\n\r\nexport const getGlobalFilterAssets = createSelector(\r\n getAll,\r\n fromAssets.getAll,\r\n (globalfilterAssetIds, assets) => {\r\n\r\n if (globalfilterAssetIds.length === 0)\r\n return assets;\r\n\r\n return assets.filter(asset => globalfilterAssetIds?.find(id => asset.id === id));\r\n }\r\n);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DeviceInfo } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Device Info', (assetId: number) => ({ assetId }));\r\nexport const LoadFail = createAction('[Core] Load Device Info Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Device Info Success', (deviceInfo: DeviceInfo) => ({deviceInfo}));\r\n\r\n\r\n\r\n","import { ApiError, DeviceInfo } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n data: DeviceInfo;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n data: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n error: null\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as DeviceInfoActions from './actions';\r\n\r\nconst deviceInfoReducer = createReducer(\r\n initialState,\r\n\r\n on(DeviceInfoActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(DeviceInfoActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(DeviceInfoActions.LoadSuccess, (state, {deviceInfo}) => ({\r\n ...state,\r\n data: deviceInfo,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return deviceInfoReducer(state, action);\r\n}","import { createSelector, createFeatureSelector } from '@ngrx/store';\r\n\r\n//import { getAssetsState } from '../selectors';\r\n\r\nimport { State } from './state';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.deviceInfo);\r\nexport const getDeviceInfo = createSelector(getState, state => state.data);\r\nexport const getAllowDemandPolls = createSelector(getDeviceInfo, deviceInfo => deviceInfo?.AllowDemandPolls);\r\nexport const getAllowAlarmCreation = createSelector(getDeviceInfo, deviceInfo => deviceInfo?.AllowAlarmCreation);\r\n\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { AssetReloInfo, TargetAsset } from '@rfv/modules/core/models/asset/target-asset';\r\n\r\nexport const Load = createAction('[Core] Load Target Assets For Asset Move', (sourceCustId: number, sourceSectionId: number, destCustId: number, destSectionId: number) => ({ payload: { sourceCustId, sourceSectionId, destCustId, destSectionId }}));\r\nexport const LoadFail = createAction('[Core] Load Target Assets For Asset Move Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Target Assets For Asset Move Success', (targetAssets: TargetAsset) => ({targetAssets}));\r\n\r\nexport const MoveAsset = createAction('[Core] Move Asset', (asset: AssetReloInfo) => ({ asset }));\r\nexport const MoveAssetFail = createAction('[Core] Move Asset Fail', (error: ApiError) => ({ error }));\r\nexport const MoveAssetSuccess = createAction('[Core] Move Asset Success');\r\n","import { ApiError } from '@rfv/modules/core/models';\r\nimport { TargetAsset } from '@rfv/modules/core/models/asset/target-asset';\r\n\r\nexport interface State {\r\n data: TargetAsset;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n\r\n\r\n isAssetMoving: boolean;\r\n isAssetMoved: boolean;\r\n}\r\n\r\n\r\nexport const initialState: State = {\r\n data: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n isAssetMoving: false,\r\n isAssetMoved: false,\r\n};\r\nclass name {\r\n constructor(parameters) {\r\n\r\n }\r\n}\r\n","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AssetMoveActions from './actions';\r\n\r\nconst assetMoveReducer = createReducer(\r\n initialState,\r\n\r\n on(AssetMoveActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AssetMoveActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(AssetMoveActions.LoadSuccess, (state, { targetAssets }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: targetAssets\r\n })),\r\n\r\n on(AssetMoveActions.MoveAsset, state => ({\r\n ...state,\r\n isAssetMoving: true\r\n })),\r\n\r\n on(AssetMoveActions.MoveAssetFail, (state, { error }) => ({\r\n ...state,\r\n isAssetMoving: false,\r\n isAssetMoved: false,\r\n error: error\r\n })),\r\n\r\n on(AssetMoveActions.MoveAssetSuccess, (state => ({\r\n ...state,\r\n isAssetMoving: false,\r\n isAssetMoved: true,\r\n error: null\r\n })),\r\n\r\n\r\n));\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assetMoveReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getAssetMoveState = createSelector(getAssetsState, state => state.targetAssets);\r\n\r\nexport const isLoaded = createSelector(getAssetMoveState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getAssetMoveState, state => state.isLoading);\r\nexport const getError = createSelector(getAssetMoveState, state => state.error);\r\n\r\nexport const isAssetMoving = createSelector(getAssetMoveState, state => state.isAssetMoving);\r\nexport const isAssetMoved = createSelector(getAssetMoveState, state => state.isAssetMoved);\r\n\r\n\r\nexport const getTargetAssets = createSelector(\r\n getAssetMoveState,\r\n state => state && state.data\r\n);\r\n\r\n","// ng\r\nimport { Injectable } from '@angular/core';\r\n\r\n// rxjs\r\nimport { of, EMPTY, from } from 'rxjs';\r\nimport { catchError, map, switchMap, withLatestFrom, mergeMap } from 'rxjs/operators';\r\n\r\n// ngrx\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport * as fromEntities from './entities';\r\n\r\nimport * as fromAlarms from './alarms';\r\nimport * as fromAlarmGroupAlertScheduleRecipients from './alarm-group-alert-schedule-recipients';\r\nimport * as fromAlarmHistoryCounts from './alarm-history-counts';\r\nimport * as fromAlertHistoryRecipientCount from './alert-history-recipient-count';\r\nimport * as fromDatapointLegends from './datapoint-legends';\r\nimport * as fromDatapointHistorical from './datapoint-historical';\r\nimport * as fromDisplayProperty from './display-property';\r\nimport * as fromCoreDatapointDrawer from './datapoint-drawer';\r\nimport * as fromDatapointSettings from './datapoint-settings';\r\nimport * as fromDatapointValues from './datapoint-values';\r\nimport * as fromEventsDiagnostics from './events-diagnostics';\r\nimport * as fromMachineInfo from './machine-info';\r\nimport * as fromRawData from './raw-data';\r\nimport * as fromStatus from './status';\r\nimport * as fromUnitInfo from './unit-info';\r\nimport * as fromUnitAlarmHistory from '@rfv/modules/dashboard/modules/unit-alarm-history/store/reducers';\r\nimport * as fromUtilization from './utilization';\r\nimport * as fromGlobalFilterAssetIds from './global-filter-asset-ids';\r\nimport * as fromUnitInfoTile from '@rfv/modules/tiles/actions/unit-info.actions';\r\nimport * as fromDeviceInfo from './device-info';\r\nimport * as fromAssetMove from './asset-move';\r\n\r\n\r\nimport * as SupportNavActions from '@rfv/modules/support/store/navigation/actions';\r\n\r\nimport { saveAs } from 'file-saver';\r\n\r\n// rfv\r\nimport { AssetService, DatapointsService, UnitInfoService, MachineInfoService, RawDataService, UtilizationService } from '@rfv/modules/core/services';\r\nimport { DateUtils } from '@rfv/modules/shared/utils';\r\nimport { SidebarService } from '@rfv/modules/involve/side-bar/services/side-bar-service.service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private store$: Store,\r\n private _assetService: AssetService,\r\n private _datapointsService: DatapointsService,\r\n private _unitInfoService: UnitInfoService,\r\n private _machineInfoService: MachineInfoService,\r\n private _rawDataService: RawDataService,\r\n private _utilizationService: UtilizationService,\r\n private _sidebarService: SidebarService\r\n ) { }\r\n\r\n public loadEntities$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromEntities.Load),\r\n switchMap(action =>\r\n this._assetService\r\n .getEntities()\r\n .pipe(\r\n map(\r\n assets => fromEntities.LoadSuccess({ assets }),\r\n catchError(error => of(fromEntities.LoadFail({ error })))\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadAlarms$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromAlarms.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n map(\r\n ([action, selectedAssetId]) =>\r\n (action.payload && action.payload.assetId) || selectedAssetId\r\n ),\r\n switchMap(assetId =>\r\n this._assetService.getAlarms(assetId).pipe(\r\n map(alarms => fromAlarms.LoadSuccess(assetId, alarms)),\r\n catchError(error => of(fromAlarms.LoadFail(assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadDeviceInfo$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDeviceInfo.Load),\r\n switchMap(action => this._assetService.getDeviceInfo(action.assetId).pipe(\r\n map(deviceInfo => fromDeviceInfo.LoadSuccess(deviceInfo)),\r\n catchError(error => of(fromDeviceInfo.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadAlarmHistoryCounts$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromAlarmHistoryCounts.Load),\r\n withLatestFrom(\r\n this.store$.select(fromDashboard.getSelectedAssetId),\r\n this.store$.select(fromAlertHistoryRecipientCount.getStartDate),\r\n this.store$.select(fromAlertHistoryRecipientCount.getEndDate)),\r\n map(\r\n ([action, selectedAssetId, startDate, endDate]) => {\r\n if (action.payload && action.payload.assetId && action.payload.startDate && action.payload.endDate) {\r\n return {\r\n assetId: action.payload.assetId,\r\n startDate: action.payload.startDate,\r\n endDate: action.payload.endDate\r\n };\r\n } else {\r\n if (!startDate || !endDate) {\r\n startDate = new Date();\r\n endDate = new Date();\r\n startDate.setDate(startDate.getDate() - 1);\r\n }\r\n return {\r\n assetId: selectedAssetId,\r\n startDate: startDate,\r\n endDate: endDate\r\n };\r\n }\r\n }\r\n ),\r\n switchMap(data =>\r\n this._assetService.getAlarmHistoryCounts(data.assetId,\r\n DateUtils.moment.utc(data.startDate).format('YYYY-MM-DDTHH:mm:ss'),\r\n DateUtils.moment.utc(data.endDate).format('YYYY-MM-DDTHH:mm:ss')).pipe(\r\n map(alarmHistoryCount => fromAlarmHistoryCounts.LoadSuccess(data.assetId, alarmHistoryCount)),\r\n catchError(error => of(fromAlarmHistoryCounts.LoadFail(data.assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadAlarmGroupAlertScheduleRecipients$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromAlarmGroupAlertScheduleRecipients.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n map(\r\n ([action, selectedAssetId]) =>\r\n (action.payload && action.payload.assetId) || selectedAssetId\r\n ),\r\n switchMap(assetId =>\r\n this._assetService.getAlarmGroupAlertScheduleRecipients(assetId).pipe(\r\n map(alarmGroupAlertScheduleRecipients =>\r\n fromAlarmGroupAlertScheduleRecipients.LoadSuccess(assetId, alarmGroupAlertScheduleRecipients)),\r\n catchError(error => of(fromAlarmGroupAlertScheduleRecipients.LoadFail(assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n\r\n public loadAlertHistoryRecipientCount$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromAlertHistoryRecipientCount.Load),\r\n withLatestFrom(\r\n this.store$.select(fromDashboard.getSelectedAssetId),\r\n this.store$.select(fromAlarmHistoryCounts.getStartDate),\r\n this.store$.select(fromAlarmHistoryCounts.getEndDate)),\r\n map(\r\n ([action, selectedAssetId, startDate, endDate]) => {\r\n if (action.payload && action.payload.assetId && action.payload.startDate && action.payload.endDate) {\r\n return {\r\n assetId: action.payload.assetId,\r\n startDate: action.payload.startDate,\r\n endDate: action.payload.endDate\r\n };\r\n } else {\r\n if (!startDate || !endDate) {\r\n startDate = new Date();\r\n endDate = new Date();\r\n startDate.setDate(startDate.getDate() - 1);\r\n }\r\n return {\r\n assetId: selectedAssetId,\r\n startDate: startDate,\r\n endDate: endDate\r\n };\r\n }\r\n }\r\n ),\r\n switchMap(data =>\r\n this._assetService.getAlertHistoryRecipientCount(data.assetId,\r\n DateUtils.moment(data.startDate).format('YYYY-MM-DDTHH:mm:ss'),\r\n DateUtils.moment(data.endDate).format('YYYY-MM-DDTHH:mm:ss')).pipe(\r\n map(alertHistoryRecipientCount => fromAlertHistoryRecipientCount.LoadSuccess(data.assetId, alertHistoryRecipientCount)),\r\n catchError(error => of(fromAlertHistoryRecipientCount.LoadFail(data.assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadDatapointLegends$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDatapointLegends.Load),\r\n withLatestFrom(\r\n this.store$.select(fromUnitAlarmHistory.getUnitAlarmHistoryDatapointLegendIds)\r\n ),\r\n switchMap(([action, datapointLegendsIds]) => {\r\n const datapointIds =\r\n Object.keys(action.payload).length > 0\r\n ? action.payload.datapointIds\r\n : datapointLegendsIds;\r\n\r\n if (datapointIds && datapointIds.length > 0) {\r\n return this._datapointsService.getDatapointLegends(datapointIds).pipe(\r\n map(legends => fromDatapointLegends.LoadSuccess(legends)),\r\n catchError(error => of(fromDatapointLegends.LoadFail(error)))\r\n );\r\n } else {\r\n return EMPTY;\r\n }\r\n })\r\n )\r\n );\r\n\r\n public loadDatapointHistorical$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDatapointHistorical.Load),\r\n mergeMap(action =>\r\n this._assetService.getDatapointsHistorical(action.assetId, action.startDate, action.endDate).pipe(\r\n map(datapoints => fromDatapointHistorical.LoadSuccess(action.assetId, datapoints)),\r\n catchError(error => of(fromDatapointHistorical.LoadFail(action.assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadDatapointHistoricalMostRecent$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDatapointHistorical.LoadMostRecent),\r\n // debounceTime(1000),\r\n switchMap(action =>\r\n this._assetService.getDatapointsHistoricalMostRecent(action.assetId, action.limit).pipe(\r\n map(datapoints => fromDatapointHistorical.LoadSuccess(action.assetId, datapoints)),\r\n catchError(error => of(fromDatapointHistorical.LoadFail(action.assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadDatapointValues$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDatapointValues.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n map(\r\n ([action, selectedAssetId]) =>\r\n (action.payload && action.payload.assetId) || selectedAssetId\r\n ),\r\n mergeMap(assetId =>\r\n this._assetService.getDatapoints(assetId).pipe(\r\n map(datapoints =>\r\n fromDatapointValues.LoadSuccess(assetId, datapoints)\r\n ),\r\n catchError(error => of(fromDatapointValues.LoadFail(assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadDatapointSettings$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDatapointSettings.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n mergeMap(([action, selectedAssetId]) =>\r\n this._assetService\r\n .getDatapointSettings(action.payload.assetId || selectedAssetId)\r\n .pipe(\r\n map(datapoints =>\r\n fromDatapointSettings.LoadSuccess(\r\n action.payload.assetId || selectedAssetId,\r\n datapoints\r\n )\r\n ),\r\n catchError(error =>\r\n of(\r\n fromDatapointSettings.LoadFail(\r\n action.payload.assetId || selectedAssetId,\r\n error\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadStatus$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromStatus.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n map(\r\n ([action, selectedAssetId]) =>\r\n (action.payload && action.payload.assetId) || selectedAssetId\r\n ),\r\n mergeMap(assetId =>\r\n this._assetService.getStatus(assetId).pipe(\r\n map(status => fromStatus.LoadSuccess(assetId, status)),\r\n catchError(error => of(fromStatus.LoadFail(assetId, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadDisplayProperties$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDisplayProperty.Load),\r\n withLatestFrom(this.store$.select(fromDashboard.getSelectedAssetId)),\r\n switchMap(([action, selectedAssetId]) =>\r\n this._datapointsService\r\n .getDatapointDisplayProperty(\r\n action.payload.assetId || selectedAssetId,\r\n action.payload.includeED,\r\n action.payload.includeDisabled\r\n )\r\n .pipe(\r\n map(properties =>\r\n fromDisplayProperty.LoadSuccess(\r\n action.payload.assetId || selectedAssetId,\r\n properties\r\n )\r\n ),\r\n catchError(error =>\r\n of(\r\n fromDisplayProperty.LoadFail(\r\n action.payload.assetId || selectedAssetId,\r\n error\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\n public enableDataPoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayProperty.EnableDataPoints),\r\n switchMap(action => this._datapointsService.enableDataPoints(action.assetId, action.dataPoints).pipe(\r\n map(_ => fromDisplayProperty.EnableDataPointsSuccess(action.assetId)),\r\n catchError(error => of(fromDisplayProperty.EnableDataPointsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public hideDataPoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayProperty.HideDataPoints),\r\n switchMap(action => this._datapointsService.hideDataPoints(action.assetId, action.dataPoints).pipe(\r\n map(_ => fromDisplayProperty.HideDataPointsSuccess(action.assetId)),\r\n catchError(error => of(fromDisplayProperty.HideDataPointsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public updateDataPointSettingsSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayProperty.EnableDataPointsSuccess, fromDisplayProperty.HideDataPointsSuccess),\r\n mergeMap(action => [\r\n fromDatapointValues.Load(action.assetId),\r\n fromDisplayProperty.Load(action.assetId, false, true),\r\n fromDatapointSettings.Load(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ])\r\n )\r\n );\r\n\r\n public updateDataPointSettingFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayProperty.EnableDataPointsFail, fromDisplayProperty.HideDataPointsFail),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Update failed.',\r\n autoClose: 3000\r\n }\r\n }),\r\n ])\r\n )\r\n );\r\n\r\n\r\n public loadEventsDiagnostics$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromEventsDiagnostics.Load),\r\n withLatestFrom(\r\n this.store$.select(fromDashboard.getSelectedAssetId),\r\n this.store$.select(fromEventsDiagnostics.getDateRange),\r\n ),\r\n switchMap(([action, assetId, dateRange]) => {\r\n if (assetId) {\r\n return this._assetService\r\n .getEventsDiagnostics(\r\n assetId,\r\n action.payload.startDate || dateRange.startDate ||\r\n DateUtils.moment().subtract(1, 'months').format('YYYY-MM-DDTHH:mm:ss'),\r\n action.payload.endDate || dateRange.endDate || DateUtils.moment().format('YYYY-MM-DDTHH:mm:ss'),\r\n null\r\n )\r\n .pipe(\r\n mergeMap(eventsDiagnostics => [\r\n fromEventsDiagnostics.Clear(assetId),\r\n fromEventsDiagnostics.LoadSuccess(assetId, eventsDiagnostics, action.payload.topNRecords)\r\n ]\r\n ),\r\n catchError(error =>\r\n of(fromEventsDiagnostics.LoadFail(assetId, error))\r\n )\r\n );\r\n } else {\r\n return EMPTY;\r\n }\r\n })\r\n )\r\n );\r\n\r\n public saveDatapointDisplayProperty$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDisplayProperty.UpdateDatapointDisplayProperty),\r\n switchMap(action =>\r\n this._datapointsService\r\n .saveDatapointDisplayProperty(action.payload.model)\r\n .pipe(\r\n mergeMap(success => {\r\n this._sidebarService.close();\r\n return [\r\n //close and load earlier because user can immediately open drawer after saving\r\n //and still get previous values before editting\r\n fromDatapointValues.Load(action.payload.model.AssetId),\r\n fromDisplayProperty.Load(action.payload.model.AssetId, false, true),\r\n fromDatapointSettings.Load(action.payload.model.AssetId),\r\n fromDisplayProperty.UpdateDatapointDisplayPropertySuccess(\r\n action.payload.model,\r\n success\r\n ),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ]}),\r\n catchError(error =>\r\n from([\r\n fromDisplayProperty.UpdateDatapointDisplayPropertyFail(\r\n action.payload.model,\r\n error\r\n ),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Update unsuccessful',\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\n public disableDatapoint$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromDatapointValues.DisableDatapoint),\r\n switchMap(action =>\r\n this._datapointsService\r\n .disableDatapoint(action.payload.assetId, action.payload.datapointId)\r\n .pipe(\r\n map(success =>\r\n fromDatapointValues.DisableDatapointSuccess(\r\n action.payload.assetId,\r\n action.payload.datapointId,\r\n success\r\n )\r\n ),\r\n catchError(error =>\r\n of(\r\n fromDatapointValues.DisableDatapointFail(\r\n action.payload.assetId,\r\n action.payload.datapointId,\r\n error\r\n )\r\n )\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\n public loadUnitInfo$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromUnitInfo.Load),\r\n switchMap(action => this._unitInfoService.getUnitInfo(action.assetId).pipe(\r\n map(unitInfo => fromUnitInfo.LoadSuccess(unitInfo)),\r\n catchError(error => of(fromUnitInfo.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveUnitInfo$ = createEffect(() =>\r\n this._actions$.pipe(\r\n ofType(fromUnitInfo.Save),\r\n switchMap(action => this._unitInfoService.saveUnitInfo(action.assetId, action.unitInfo).pipe(\r\n mergeMap(unitInfo => [\r\n fromUnitInfo.SaveSuccess(),\r\n fromUnitInfoTile.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Unit info saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ...action.unitInfo.UnitCreationLogId\r\n ? [\r\n SupportNavActions.LoadNavigation(action.unitInfo.UnitCreationLogId),\r\n ...action.next ? [SupportNavActions.NextStep()] : []\r\n ] : []\r\n ]),\r\n catchError(error => of(fromUnitInfo.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadMachineComponents$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.LoadComponents),\r\n switchMap(action => this._machineInfoService.getMachineComponents().pipe(\r\n map(components => fromMachineInfo.LoadComponentsSuccess(components)),\r\n catchError(error => of(fromMachineInfo.LoadComponentsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadMachineInfo$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.LoadMachineInfo),\r\n switchMap(action => this._machineInfoService.getMachineInfo(action.assetId).pipe(\r\n map(machineInfo => fromMachineInfo.LoadMachineInfoSuccess(machineInfo)),\r\n catchError(error => of(fromMachineInfo.LoadMachineInfoFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public addMachineInfoComponent$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.AddMachineInfoComponent),\r\n switchMap(action => this._machineInfoService.addMachineInfoComponent(action.assetId, action.parentUnitMachineAssetComponentId, action.component, action.name).pipe(\r\n map(result => fromMachineInfo.AddMachineInfoComponentSuccess(action.assetId)),\r\n catchError(error => of(fromMachineInfo.AddMachineInfoComponentFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public addMachineInfoComponentSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.AddMachineInfoComponentSuccess),\r\n mergeMap(action => [\r\n fromMachineInfo.LoadMachineInfo(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Machine Component Added`,\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public deleteMachineInfoComponent$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.DeleteMachineInfoComponent),\r\n switchMap(action => this._machineInfoService.deleteMachineInfoComponent(action.assetId, action.unitMachineAssetComponentId).pipe(\r\n map(result => fromMachineInfo.DeleteMachineInfoComponentSuccess(action.assetId)),\r\n catchError(error => of(fromMachineInfo.DeleteMachineInfoComponentFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteMachineInfoComponentSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.DeleteMachineInfoComponentSuccess),\r\n mergeMap(action => [\r\n fromMachineInfo.LoadMachineInfo(action.assetId),\r\n fromUnitInfoTile.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Machine Component Deleted`,\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public saveMachineInfo$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromMachineInfo.SaveMachineInfo),\r\n switchMap(action => this._machineInfoService.saveMachineInfo(action.unitCreationLogId, action.machineInfo).pipe(\r\n mergeMap(_ => [\r\n fromMachineInfo.SaveMachineInfoSuccess(),\r\n fromUnitInfoTile.Load(),\r\n ...action.next\r\n ? [\r\n SupportNavActions.LoadNavigation(action.unitCreationLogId),\r\n SupportNavActions.NextStep(),\r\n ] :[ \r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Machine Info Saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ],\r\n fromMachineInfo.LoadMachineInfo(action.machineInfo.AssetId),\r\n ]),\r\n catchError(error => of(fromMachineInfo.SaveMachineInfoFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadRawData$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromRawData.Load),\r\n switchMap(action => this._rawDataService.get(action.assetId, action.startDate, action.endDate).pipe(\r\n map(rawData => fromRawData.LoadSuccess(action.assetId, rawData)),\r\n catchError(error => of(fromRawData.LoadFail(action.assetId, error)))\r\n ))\r\n )\r\n );\r\n\r\n public messageParse$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromRawData.Parse),\r\n switchMap(action => this._rawDataService.parse(action.assetId, action.msgId).pipe(\r\n map(result => fromRawData.ParseSuccess(result)),\r\n catchError(error => of(fromRawData.ParseFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createSnapshotPoll$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventsDiagnostics.CreateSnapshotPoll),\r\n switchMap(action => this._assetService.createSnapshotPoll(action.payload.assetId).pipe(\r\n mergeMap(_ => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Snapshot File Poll Sent`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ]),\r\n ))\r\n )\r\n );\r\n\r\n public loadUtilization$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUtilization.Load),\r\n switchMap(action => this._utilizationService.getUtilization(action.assetId, action.startDate, action.endDate, action.approximate).pipe(\r\n map(entities => fromUtilization.LoadSuccess(entities, action.startDate, action.endDate)),\r\n catchError(error => of(fromUtilization.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadGlobalFilterAssetIds$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromGlobalFilterAssetIds.Load),\r\n switchMap((action) => this._assetService.getGlobalFilterAssetIds(action.sitemapGroupId, action.globalFilterId).pipe(\r\n map(assetIds => fromGlobalFilterAssetIds.LoadSuccess(assetIds)),\r\n catchError(error => of(fromGlobalFilterAssetIds.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadTargetAssets$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromAssetMove.Load),\r\n switchMap((action) => this._assetService.getTargetAssets(action.payload.sourceCustId, action.payload.sourceSectionId, action.payload.destCustId, action.payload.destSectionId).pipe(\r\n map(assets => fromAssetMove.LoadSuccess(assets)),\r\n catchError(error => of(fromAssetMove.LoadFail(error))))\r\n ))\r\n );\r\n\r\n public moveAsset$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromAssetMove.MoveAsset),\r\n switchMap(action => this._assetService.moveAsset(action.asset).pipe(\r\n mergeMap(_ => [\r\n fromAssetMove.MoveAssetSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Asset has been moved.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(\r\n fromAssetMove.MoveAssetFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ))\r\n ))\r\n )\r\n );\r\n\r\n public downloadSnapshotFile$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventsDiagnostics.DownloadSnapshotFile),\r\n switchMap((action) => this._assetService.downloadSnapshotFile(action.payload.assetId, action.payload.row).pipe(\r\n map(res => fromEventsDiagnostics.DownloadSnapshotFileSuccess(res, action.payload.assetId, action.payload.row.snapShotFile)),\r\n catchError(error => of(\r\n fromEventsDiagnostics.DownloadSnapshotFileFail(action.payload.assetId, error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'An error occured downloading the snapshot file',\r\n autoClose: 5000\r\n }\r\n })\r\n ))\r\n ))\r\n )\r\n );\r\n\r\n public downloadSnapshotFileSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventsDiagnostics.DownloadSnapshotFileSuccess),\r\n map(res => {\r\n saveAs(res.payload.response, res.payload.snapShotFile, true)\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n public goToSnapshotTrends$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventsDiagnostics.GoToSnapshotTrends),\r\n switchMap((action) => this._assetService.getSnapshotFileDatapoints(action.payload.assetId, action.payload.row).pipe(\r\n mergeMap(res => [\r\n fromEventsDiagnostics.GoToSnapshotTrendsSuccess(),\r\n fromRoot.Router.Go(['dashboard', action.payload.trendsDashboardId, 'asset', action.payload.assetId], {\r\n queryParams: {\r\n dataPointIds: res.datapoints.toString(),\r\n startDate: res.startDate,\r\n endDate: res.endDate,\r\n confirm: true\r\n }\r\n })\r\n ]),\r\n catchError(error => of(\r\n fromEventsDiagnostics.GoToSnapshotTrendsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'An error occured getting the snapshot file datapoints',\r\n autoClose: 5000\r\n }\r\n })\r\n ))\r\n ))\r\n )\r\n );\r\n}\r\n","import { Action, combineReducers } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromEntities from './entities';\r\n\r\nimport * as fromAlarms from './alarms';\r\nimport * as fromAlarmGroupAlertScheduleRecipients from './alarm-group-alert-schedule-recipients';\r\nimport * as fromAlarmHistoryCounts from './alarm-history-counts';\r\nimport * as fromAlertHistoryRecipientCount from './alert-history-recipient-count';\r\nimport * as fromDatapointDisplayProperty from './display-property';\r\nimport * as fromDatapointDrawer from './datapoint-drawer';\r\nimport * as fromDatapointHistorical from './datapoint-historical';\r\nimport * as fromDatapointLegends from './datapoint-legends';\r\nimport * as fromDatapointSettings from './datapoint-settings';\r\nimport * as fromDatapointValues from './datapoint-values';\r\nimport * as fromEventsDiagnostics from './events-diagnostics';\r\nimport * as fromMachineInfo from './machine-info';\r\nimport * as fromRawData from './raw-data';\r\nimport * as fromStatus from './status';\r\nimport * as fromUnitInfo from './unit-info';\r\nimport * as fromUtilization from './utilization';\r\nimport * as fromGlobalFilterAssetIds from './global-filter-asset-ids';\r\nimport * as fromDeviceInfo from './device-info';\r\nimport * as fromAssetMove from './asset-move';\r\n\r\nconst assetsReducer = combineReducers({\r\n entities: fromEntities.reducer,\r\n\r\n alarms: fromAlarms.reducer,\r\n alarmGroupAlertScheduleRecipients: fromAlarmGroupAlertScheduleRecipients.reducer,\r\n alarmHistoryCounts: fromAlarmHistoryCounts.reducer,\r\n alertHistoryRecipientCount: fromAlertHistoryRecipientCount.reducer,\r\n datapointDisplayProperty: fromDatapointDisplayProperty.reducer,\r\n datapointDrawer: fromDatapointDrawer.reducer,\r\n datapointHistorical: fromDatapointHistorical.reducer,\r\n datapointLegends: fromDatapointLegends.reducer,\r\n datapointSettings: fromDatapointSettings.reducer,\r\n datapointValues: fromDatapointValues.reducer,\r\n deviceInfo: fromDeviceInfo.reducer,\r\n eventsDiagnostics: fromEventsDiagnostics.reducer,\r\n machineInfo: fromMachineInfo.reducer,\r\n rawData: fromRawData.reducer,\r\n status: fromStatus.reducer,\r\n unitInfo: fromUnitInfo.reducer,\r\n utilization: fromUtilization.reducer,\r\n globalFilterAssetIds: fromGlobalFilterAssetIds.reducer,\r\n targetAssets: fromAssetMove.reducer\r\n});\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assetsReducer(state, action);\r\n};\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getAssetsState = createSelector(getFeatureState, state => state.assets);\r\n","import { getSelectedAssetId } from '@rfv/modules/dashboard/store/selectors';\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getAssetsState } from '../selectors';\r\n\r\nexport const getState = createSelector(getAssetsState, state => state.status);\r\n\r\nconst _getIndex = (assetId: number) => createSelector(\r\n getState,\r\n state => state && state.index && state.index[assetId]\r\n);\r\n\r\nexport const getStatus = (assetId: number) => createSelector(\r\n _getIndex(assetId),\r\n index => index && index.status\r\n);\r\n\r\nexport const getSelectedAssetStatus = createSelector(\r\n getSelectedAssetId,\r\n getState,\r\n (assetId, state) => state.index && state.index[assetId] && state.index[assetId].status);\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, Token } from '@rfv/modules/core/models';\r\n\r\n// Login\r\n\r\nexport const Login = createAction('[Core] Login');\r\n\r\nexport const LoginFail = createAction('[Core] Login Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoginSuccess = createAction('[Core] Login Success', props<{\r\n token: Token\r\n}>());\r\n\r\n// Get Token\r\nexport const GetToken = createAction('[Core] Get Token', props<{\r\n accessCode: string,\r\n codeVerifier: string, \r\n seed: string\r\n}>());\r\n\r\nexport const GetTokenFail = createAction('[Core] Get Token Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const GetTokenSuccess = createAction('[Core] Get Token Success', props<{\r\n token: Token\r\n}>());\r\n\r\n// Refresh\r\nexport const RefreshToken = createAction('[Core] Refresh Token', props<{\r\n refreshToken: string\r\n}>());\r\n\r\nexport const RefreshTokenFail = createAction('[Core] Refresh Token Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const RefreshTokenSuccess = createAction('[Core] Refresh Token Success', props<{\r\n token: Token\r\n}>());\r\n\r\n// Logout\r\nexport const Logout = createAction('[Core] Logout', (redirectUrl: string = null) => ({ redirectUrl }));\r\n\r\nexport const LogoutFail = createAction('[Core] Logout Fail', props<{\r\n error: ApiError,\r\n redirectUrl: string\r\n}>());\r\n\r\nexport const LogoutSuccess = createAction('[Core] Logout Success', props<{\r\n redirectUrl: string\r\n}>());\r\n\r\n// Debug\r\nexport const GetDebugToken = createAction('[Core] Get Debug Token', props<{\r\n cwsLoginId: string\r\n}>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, debounceTime, map, switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { State } from './state';\r\nimport { getToken } from './selectors';\r\nimport * as AuthActions from './actions';\r\nimport * as CustomerActions from '../customers/actions';\r\n\r\nimport { AuthService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _authService: AuthService,\r\n private _store: Store\r\n ) { }\r\n\r\n getToken$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AuthActions.GetToken),\r\n switchMap(action => this._authService.getAccessToken(action.accessCode, action.codeVerifier, action.seed).pipe(\r\n map(token => AuthActions.GetTokenSuccess({ token })),\r\n catchError(error => of(AuthActions.GetTokenFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n getTokenSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AuthActions.GetTokenSuccess),\r\n map(action => CustomerActions.LoadAccess())\r\n )\r\n );\r\n \r\n refreshToken$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AuthActions.RefreshToken),\r\n switchMap(action => this._authService.refreshToken(action.refreshToken).pipe(\r\n map(token => AuthActions.RefreshTokenSuccess({ token })),\r\n catchError(error => of(AuthActions.RefreshTokenFail({ error })))\r\n ))\r\n )\r\n );\r\n \r\n logout$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AuthActions.Logout),\r\n tap(action => this._authService.logout(action.redirectUrl))\r\n ), { dispatch: false }\r\n )\r\n\r\n logoutSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AuthActions.LogoutSuccess),\r\n tap(action => this._authService.logout(action.redirectUrl))\r\n ), { dispatch: false }\r\n )\r\n\r\n getDebugToken$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AuthActions.GetDebugToken),\r\n switchMap(action => this._authService.getDebugToken(action.cwsLoginId).pipe(\r\n map(token => AuthActions.GetTokenSuccess({ token })),\r\n catchError(error => of(AuthActions.GetTokenFail({ error })))\r\n ))\r\n )\r\n );\r\n}\r\n","import { ApiError, Token } from '@rfv/modules/core/models';\r\n\r\nimport { environment } from '@environments/environment';\r\n\r\nexport interface State {\r\n token: Token;\r\n error: ApiError;\r\n\r\n isAuthenticating: boolean;\r\n isRefreshing: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n token: environment.token,\r\n error: null,\r\n\r\n isAuthenticating: false,\r\n isRefreshing: false\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AuthActions from './actions';\r\n\r\nconst authReducer = createReducer(\r\n initialState,\r\n\r\n on(AuthActions.Login, state => ({\r\n ...state,\r\n isAuthenticating: true\r\n })),\r\n\r\n on(AuthActions.LoginFail, (state, { error }) => ({\r\n ...state,\r\n token: null,\r\n error,\r\n isAuthenticating: false,\r\n })),\r\n\r\n on(AuthActions.LoginSuccess, (state, { token }) => ({\r\n ...state,\r\n token,\r\n error: null,\r\n isAuthenticating: false\r\n })),\r\n\r\n on(AuthActions.GetToken, state => ({\r\n ...state,\r\n isAuthenticating: true\r\n })),\r\n\r\n on(AuthActions.GetTokenFail, (state, { error }) => ({\r\n ...state,\r\n token: null,\r\n error,\r\n isAuthenticating: false,\r\n })),\r\n\r\n on(AuthActions.GetTokenSuccess, (state, { token }) => ({\r\n ...state,\r\n token,\r\n error: null,\r\n isAuthenticating: false\r\n })),\r\n\r\n on(AuthActions.RefreshToken, state => ({\r\n ...state,\r\n isRefreshing: true\r\n })),\r\n\r\n on(AuthActions.RefreshTokenFail, (state, { error }) => ({\r\n ...state,\r\n token: null,\r\n error,\r\n isRefreshing: false,\r\n })),\r\n\r\n on(AuthActions.RefreshTokenSuccess, (state, { token }) => ({\r\n ...state,\r\n token,\r\n error: null,\r\n isRefreshing: false\r\n })),\r\n\r\n on(AuthActions.LogoutSuccess, state => ({\r\n ...state,\r\n token: null,\r\n error: null\r\n }))\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return authReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.auth);\r\n\r\nexport const getToken = createSelector(getState, state => state.token);\r\n\r\nexport const isAuthenticated = createSelector(getState, state => !!state.token);\r\nexport const isAuthenticating = createSelector(getState, state => state.isAuthenticating);\r\nexport const isRefreshing = createSelector(getState, state => state.isRefreshing);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { Brand } from '../../models/brand';\r\n\r\nexport const Load = createAction('[Core] Load Brands');\r\nexport const LoadFail = createAction('[Core] Load Brands Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Brands Success', (brands: Brand[]) => ({ brands }));\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient} from '@angular/common/http';\r\nimport { Brand } from '../models/brand';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BrandService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getBrands() {\r\n return this._http.get(`/v2/brands`); \r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nimport { BrandService } from '../../services/brand.service';\r\n\r\n @Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _brandService: BrandService,\r\n ) { }\r\n\r\n public getBrands$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.Load),\r\n switchMap(action => this._brandService.getBrands().pipe(\r\n map(response => EntityActions.LoadSuccess(response)),\r\n catchError(error => of(EntityActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n\r\n","\r\nimport { ApiError } from '../../models';\r\nimport { Brand } from '../../models/brand';\r\n\r\nexport interface State {\r\n brands: Brand[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = ({\r\n brands: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { brands }) => ({\r\n ...state,\r\n brands: brands,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.brands);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAll = createSelector(getState, state => state.brands);\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, CellularProvider } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load CellularProviders');\r\n\r\nexport const LoadFail = createAction('[Core] Load CellularProviders Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load CellularProviders Success', props<{\r\n cellularProviders: CellularProvider[]\r\n}>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mapTo } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as CellularProviderActions from './actions';\r\n\r\nimport { CelluarProviderService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _cellularProviderService: CelluarProviderService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CellularProviderActions.Load),\r\n switchMap(action => this._cellularProviderService.get().pipe(\r\n map(cellularProviders => CellularProviderActions.LoadSuccess({ cellularProviders }),\r\n catchError(error => of(CellularProviderActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, CellularProvider } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n isDeleting: boolean; \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: value => value.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null, \r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n isDeleting: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as CellularProviderActions from './actions';\r\n\r\nconst cellularProviderReducer = createReducer(\r\n initialState,\r\n\r\n on(CellularProviderActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CellularProviderActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(CellularProviderActions.LoadSuccess, (state, { cellularProviders }) => adapter.setAll(cellularProviders, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n \r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return cellularProviderReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\nimport { CellularProvider } from '../../models';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.cellularProviders);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { \r\n ApiError, \r\n CommLossType \r\n} from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load CommLossTypes');\r\nexport const LoadFail = createAction('[Core] Load CommLossTypes Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load CommLossTypes Success', (entities: CommLossType[]) => ({ entities: entities }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of, Observable, from } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\n\r\nimport * as CommLossTypeActions from './actions';\r\n\r\nimport { CommLossTypeService } from '@rfv/modules/core/services';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _commLossTypeService: CommLossTypeService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommLossTypeActions.Load),\r\n switchMap(action => this._commLossTypeService.get().pipe(\r\n map(commLossTypes => CommLossTypeActions.LoadSuccess(commLossTypes)),\r\n catchError(error => of(CommLossTypeActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { \r\n ApiError, \r\n CommLossType \r\n} from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean; \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: value => value.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as CommLossTypeActions from './actions';\r\n\r\nconst commLossTypesReducer = createReducer(\r\n initialState,\r\n\r\n on(CommLossTypeActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CommLossTypeActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(CommLossTypeActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return commLossTypesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.commLossTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, CommLossStatus } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load CommLossStatus', (siteMapGroupId: number) => ({siteMapGroupId}));\r\n\r\nexport const LoadFail = createAction('[Core] Load CommLossStatus Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load CommLossStatus Success', props<{\r\n CommLossStatus: CommLossStatus[]\r\n}>());\r\n\r\nexport const LoadSelectedDeviceComms = createAction('[Core] LoadSelectedDeviceComms', (deviceId: number) => ({deviceId}));\r\n\r\nexport const LoadSelectedDeviceCommsFail = createAction('[Core] LoadSelectedDeviceComms Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSelectedDeviceCommsSuccess = createAction('[Core] LoadSelectedDeviceComms Success', props<{\r\n comms: any\r\n}>());\r\n\r\nexport const Update = createAction('[Core] Update CommLoss', (data: any) => ({data}));\r\nexport const UpdateSuccess = createAction('[Core] Update CommLoss Success', (response: any) => ({ response }));\r\nexport const UpdateFail = createAction('[Core] Update CommLoss Fail', (error: any) => (error));","\r\n/* Models */\r\nimport { BannerOptions } from '@rfv/modules/shared/model/banner.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/*\r\n * Functions with messages and actions to send as payload to banner\r\n */\r\n\r\n// Banner after successful operation (save, edit, delete)\r\nexport function successPayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `Comms Loss was successfully ${operation}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\nexport function successMessage(message: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `${message}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\n// Banner after failed operation (save, edit, delete)\r\nexport function failPayload(operation: string, error: HttpErrorResponse): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `There was a problem ${operation} the comms loss. Error: ${error.status}: ${error.statusText}`,\r\n };\r\n}\r\n\r\nexport function failMessage(message: string, error: HttpErrorResponse): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `${message} Error: ${error.status}: ${error.statusText}`,\r\n };\r\n}\r\n\r\n\r\n// Banner when invalid values are in the form\r\nexport function invalidValues(): BannerOptions {\r\n return {\r\n type: 'info',\r\n message: `You have entered invalid values. Please correct the values and try again.`,\r\n };\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\n\r\nimport * as CommLossActions from './actions';\r\nimport * as DashboardActions from '@rfv/modules/dashboard/store/actions';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { getSession } from '../user-session/selectors';\r\n\r\nimport { CommLossStatusService } from '@rfv/modules/core/services';\r\nimport { successPayload } from '@rfv/modules/dashboard/modules/admin-comms-loss/admin-comms-loss-fullscreen/comm-loss-banner-messages';\r\nimport { failPayload } from '@rfv/modules/dashboard/modules/user-admin/store/user-banner-messages';\r\nimport { Tiles } from '../../enums';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _commLossService: CommLossStatusService,\r\n private store: Store,\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommLossActions.Load),\r\n withLatestFrom(this.store.select(getSession)),\r\n switchMap(([ action, session ]) => this._commLossService.get(session.SitemapGroupId).pipe(\r\n map(CommLossStatus => CommLossActions.LoadSuccess({ CommLossStatus }),\r\n catchError(error => of(CommLossActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n public loadTileEventsAndDiagnosticsSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommLossActions.LoadSuccess),\r\n map(success => DashboardActions.SaveTimeStamp(Tiles.adminCommLoss))\r\n )\r\n );\r\n\r\n public loadDeviceComms$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommLossActions.LoadSelectedDeviceComms),\r\n switchMap(action => this._commLossService.getComms(action.deviceId).pipe(\r\n map(comms => CommLossActions.LoadSelectedDeviceCommsSuccess({ comms }),\r\n catchError(error => of(CommLossActions.LoadSelectedDeviceCommsFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n public update$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommLossActions.Update),\r\n withLatestFrom(this.store.select(getSession)),\r\n mergeMap(([action, session]) =>\r\n this._commLossService.update(action.data)\r\n .pipe(\r\n switchMap((response) => [\r\n CommLossActions.UpdateSuccess(response),\r\n CommLossActions.Load(session.SitemapGroupId),\r\n fromRoot.Banner.Show({ options: successPayload('updated') })\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n CommLossActions.UpdateFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('updating', error) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, CommLossStatus } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean; \r\n isLoadingSelectedDeviceComms:boolean;\r\n isSaved: boolean;\r\n isSaving: boolean;\r\n selectedDeviceDetails: any;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: value => value.AssetId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n isLoadingSelectedDeviceComms:false,\r\n isSaved: false,\r\n isSaving: false,\r\n selectedDeviceDetails: null,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as CommLossActions from './actions';\r\n\r\nconst commLossReducer = createReducer(\r\n initialState,\r\n\r\n on(CommLossActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CommLossActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(CommLossActions.LoadSuccess, (state, { CommLossStatus }) => adapter.setAll(CommLossStatus, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n \r\n on(CommLossActions.LoadSelectedDeviceComms, state => ({\r\n ...state,\r\n isLoadingSelectedDeviceComms: true\r\n })),\r\n\r\n on(CommLossActions.LoadSelectedDeviceCommsFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoadingSelectedDeviceComms: false,\r\n error\r\n })),\r\n\r\n on(CommLossActions.LoadSelectedDeviceCommsSuccess, (state, { comms }) => ({\r\n ...state,\r\n selectedDeviceDetails: comms[0],\r\n isLoadingSelectedDeviceComms: false,\r\n error: null\r\n })),\r\n\r\n on(CommLossActions.Update, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(CommLossActions.UpdateFail, (state, { error }) => ({\r\n ...state,\r\n isSaved: false,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(CommLossActions.LoadSuccess, (state, { CommLossStatus }) => adapter.setAll(CommLossStatus, {\r\n ...state,\r\n isSaved: true,\r\n isSaving: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return commLossReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.commLoss);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoadingSelectedDeviceComms = createSelector(getState, state => state.isLoadingSelectedDeviceComms);\r\n\r\nexport const isBusy = createSelector(getState, state => state.isLoading || state.isSaving);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getSelectedDeviceComms = createSelector(getState, state => state.selectedDeviceDetails);\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { ApiError, Company } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Companies Load')\r\nexport const LoadFail = createAction('[Core] Companies Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Companies Load Success', (entities: Company[]) => ({ entities: entities }));\r\n\r\n// Load\r\nexport const LoadAllCompanies = createAction('[Core] Companies Load All')\r\nexport const LoadAllCompaniesFail = createAction('[Core] Companies Load All Fail', (error: ApiError) => ({ error }));\r\nexport const LoadAllCompaniesSuccess = createAction('[Core] Companies Load All Success', (entities: Company[]) => ({ entities: entities }));\r\n\r\n// Save\r\nexport const Save = createAction('[Core] Save Company', (entity: Company) => ({ entity }));\r\nexport const SaveFail = createAction('[Core] Save Company Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Save Company Success', (companyId: number) => ({ id: companyId }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as CompanyActions from './actions';\r\n\r\nimport { CompanyService } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _companyService: CompanyService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CompanyActions.Load),\r\n switchMap(action => this._companyService.get().pipe(\r\n map(items => CompanyActions.LoadSuccess(items)),\r\n catchError(error => of(CompanyActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadAll$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CompanyActions.LoadAllCompanies),\r\n switchMap(action => this._companyService.getAllCompanies().pipe(\r\n map(items => CompanyActions.LoadAllCompaniesSuccess(items)),\r\n catchError(error => of(CompanyActions.LoadAllCompaniesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public save$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CompanyActions.Save),\r\n switchMap(action => this._companyService.save(action.entity).pipe(\r\n mergeMap(companyId => [\r\n CompanyActions.SaveSuccess(companyId),\r\n fromRoot.Banner.Show({options: {\r\n type: 'success',\r\n message: 'Company Saved',\r\n autoClose: 3000\r\n }}),\r\n CompanyActions.LoadAllCompanies()\r\n ]),\r\n catchError(error => from([\r\n CompanyActions.SaveFail(error),\r\n fromRoot.Banner.Show({options: {\r\n type: 'error',\r\n message: 'Company Save Failed',\r\n autoClose: 3000\r\n }})\r\n ]))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Company } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: company => company.Id\r\n});\r\n\r\nexport const initialState: State =adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as CompanyActions from './actions';\r\n\r\nconst companiesReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(CompanyActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isDirty: false\r\n })),\r\n\r\n on(CompanyActions.LoadSuccess, (state, payload) => adapter.setAll(payload.entities, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n\r\n on(CompanyActions.LoadFail, (state, payload) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false\r\n })),\r\n\r\n // --- Load All companies\r\n on(CompanyActions.LoadAllCompanies, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n })),\r\n\r\n on(CompanyActions.LoadAllCompaniesSuccess, (state, payload) => adapter.setAll(payload.entities, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n \r\n on(CompanyActions.LoadFail, (state, payload) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return companiesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.companies);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\n\r\nexport const getSelectedCompany = createSelector(\r\n getSelectedId,\r\n getEntities,\r\n (companyId, entities) => entities && entities[companyId]\r\n);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const getAllOrderByName = createSelector(getAll, userGroups => userGroups.sort((a, b) => a.Name.localeCompare(b.Name)));\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { ControlDatapoint, ControlPayload } from '@rfv/modules/dashboard/modules/control-admin/models/control-command-model';\r\n\r\n\r\nexport const LoadControlAdmin = createAction('[Core] Load Control Admin');\r\nexport const LoadControlAdminFail = createAction('[Core] Load Control Admin Fail', (error: ApiError) => ({ error }));\r\nexport const LoadControlAdminSuccess = createAction('[Core] Load Control Admin Success', (controlDatapoint: ControlDatapoint[]) => ({ controlDatapoint }));\r\n\r\nexport const SaveControlDatapoint = createAction('[Core] Save Control Datapoint', (control: ControlPayload) => ({ control }));\r\nexport const SaveControlDatapointFail = createAction('[Core] Save Control Datapoint Fail', (error: ApiError) => ({ error }));\r\nexport const SaveControlDatapointSuccess = createAction('[Core] Save Control Datapoint Success');\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nimport { ControlAdminService, } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _controlAdminService: ControlAdminService,\r\n ) { }\r\n\r\n public getControlDatapoints$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadControlAdmin),\r\n switchMap(action => this._controlAdminService.getControlDatapoints().pipe(\r\n map(entity => EntityActions.LoadControlAdminSuccess(entity)),\r\n catchError(error => of(EntityActions.LoadControlAdminFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveSitemapPrimaryAsset$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveControlDatapoint),\r\n switchMap(action => this._controlAdminService.saveControlDatapoint(action.control).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveControlDatapointSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Control Has Been Successfully Saved.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.SaveControlDatapointFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { ControlDatapoint } from '@rfv/modules/dashboard/modules/control-admin/models/control-command-model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n controlDatapoint: ControlDatapoint[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n //SAVING\r\n isControlDatapointSaving: boolean;\r\n isControlDatapointSaved: boolean;\r\n}\r\n\r\nexport const initialState: State = ({\r\n controlDatapoint: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n //SAVING\r\n isControlDatapointSaving: false,\r\n isControlDatapointSaved: false,\r\n});\r\n\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadControlAdmin, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadControlAdminFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadControlAdminSuccess, (state, { controlDatapoint }) => ({\r\n ...state,\r\n controlDatapoint: controlDatapoint,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveControlDatapoint, (state) => ({\r\n ...state,\r\n isControlDatapointSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveControlDatapointFail, (state, { error }) => ({\r\n ...state,\r\n isControlDatapointSaving: false,\r\n isControlDatapointSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveControlDatapointSuccess, (state) => ({\r\n ...state,\r\n isControlDatapointSaving: false,\r\n isControlDatapointSaved: true,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.controlDatapoint);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getControlDatapoints = createSelector(getState, state => state.controlDatapoint);\r\n\r\n//SAVING\r\nexport const isControlDatapointSaving = createSelector(getState, state => state.isControlDatapointSaving);\r\nexport const isControlDatapointSaved = createSelector(getState, state => state.isControlDatapointSaved);\r\n\r\n","import { Moment } from 'moment';\r\nimport { ControlHistory } from '../../models/control-history';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Unit Control History', (assetId: number, startDate: Moment, endDate: Moment) => ({ assetId, startDate, endDate }));\r\nexport const LoadFail = createAction('[Core] Load Unit Control History Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Unit Control History Success', (controlHistory: ControlHistory[]) => ({ controlHistory }));","import { ControlHistory } from '../../models/control-history';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { Moment } from 'moment';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n startTime: Moment; \r\n endTime: Moment; \r\n assetId: number; \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({});\r\n\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n startTime: null,\r\n endTime: null, \r\n assetId: null, \r\n error: null,\r\n});","import { createSelector } from '@ngrx/store';\r\nimport { adapter } from './state';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.controlHistory);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n} = adapter.getSelectors(getState);","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, withLatestFrom, mergeMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as UnitControlActions from './actions';\r\nimport { UnitControlService } from '@rfv/modules/core/services';\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as entitySelectors from './selectors'\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitControlService: UnitControlService,\r\n private _store$: Store\r\n ) { }\r\n\r\n loadHistory$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitControlActions.Load),\r\n withLatestFrom(this._store$.select(entitySelectors.getState)),\r\n switchMap(([action, state]) => this._unitControlService.getControlHistory(\r\n state.assetId,\r\n state.startTime, \r\n state.endTime).pipe(\r\n map(controlHistory => UnitControlActions.LoadSuccess(controlHistory)),\r\n catchError(error => of(UnitControlActions.LoadFail(error)))\r\n ))\r\n )\r\n )\r\n}","import { createReducer, on, Action } from '@ngrx/store';\r\nimport { State, initialState, adapter } from './state';\r\nimport * as ControlHistoryActions from './actions';\r\n\r\nconst controlHistoryReducer = createReducer(\r\n initialState,\r\n\r\n on(ControlHistoryActions.Load, (state, { assetId, startDate, endDate }) => ({\r\n ...state,\r\n isLoading: true,\r\n assetId: assetId|| state.assetId, \r\n startTime: startDate || state.startTime, \r\n endTime: endDate || state.endTime\r\n })),\r\n\r\n on(ControlHistoryActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(ControlHistoryActions.LoadSuccess, (state, { controlHistory }) => \r\n adapter.setAll(controlHistory,\r\n {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return controlHistoryReducer(state, action);\r\n}","import { createAction, props } from '@ngrx/store';\r\nimport { ApiError, Country } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Countries Load')\r\nexport const LoadFail = createAction('[Core] Countries Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Countries Load Success', (entities: Country[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of, empty } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as CountryActions from './actions';\r\n\r\nimport { CountryService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _countryService: CountryService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CountryActions.Load),\r\n switchMap(action => this._countryService.get().pipe(\r\n map(items => CountryActions.LoadSuccess(items)),\r\n catchError(error => of(CountryActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Country } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: country => country.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as CountryActions from './actions';\r\n\r\nconst countriesReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(CountryActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isDirty: false\r\n })),\r\n\r\n on(CountryActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(CountryActions.LoadFail, (state, payload) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return countriesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.countries)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\nexport const getSelectedCompany = createSelector(\r\n getSelectedId,\r\n getEntities,\r\n (countryId, entities) => entities && entities[countryId]\r\n);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getCountriesWithAllowAlerts = createSelector(getAll, countries => countries.filter(c => c.AllowAlerts));\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError, CustomerUserAccessFilter } from '@rfv/modules/core/models';\r\nimport { CustomerUserAccessFilterUnitInfoItem } from '@rfv/modules/dashboard/modules/user-admin/store/models/customer-user-access-filter-unit-info.model';\r\nimport { UserAccessFilter } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-filter.model';\r\nimport { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] User Access Filter Load')\r\nexport const LoadFail = createAction('[Core] User Access Filter Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] User Access Filter Load Success', (customerUserAccessFilter: CustomerUserAccessFilter[]) => ({ customerUserAccessFilter }));\r\n\r\n// Save customer user filter\r\nexport const Save = createAction('[Core] Customer User Access Filter Save', (UserAccessFilter: UserAccessFilter, selectedUserId: number) => ({ UserAccessFilter, selectedUserId }));\r\nexport const SaveFail = createAction('[Core] Customer User Access Filter Save Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Customer User Access Filter Save Success', (selectedUserId?: number, filterId?: number) => ({ selectedUserId, filterId }));\r\n\r\n// Load\r\nexport const getAssetIdsForFilter = createAction('[Core] AssetIds Filter Load', (customerUserAccessFilterId: number, userId: number) => ({ customerUserAccessFilterId, userId }));\r\nexport const getAssetIdsForFilterFail = createAction('[Core] AssetIds Filter Load Fail', (error: ApiError) => ({ error }));\r\nexport const getAssetIdsForFilterSuccess = createAction('[Core] AssetIds Filter Load Success', (assetIds: number[]) => ({ assetIds }));\r\n\r\n// apply filter to user\r\nexport const applyFilterToUser = createAction('[Core] Apply Filter', (customerUserAccessFilterId: number, userId: number) => ({ customerUserAccessFilterId, userId }));\r\nexport const applyFilterToUserFail = createAction('[Core] Apply Filter Fail', (error: ApiError) => ({ error }));\r\nexport const applyFilterToUserSuccess = createAction('[Core] Apply Filter Success', (filterId: number) => ({ filterId }));\r\n\r\n// Load\r\nexport const deleteFilter = createAction('[Core] Delete Filter', (filterId: number) => ({ filterId }));\r\nexport const deleteFilterFail = createAction('[Core] Delete Filter Fail', (error: ApiError) => ({ error }));\r\nexport const deleteFilterSuccess = createAction('[Core] Delete Filter Success', (filterId: number) => ({ filterId }));\r\n\r\n// get filter info item\r\nexport const getFilterUnitInfoItem = createAction('[Core] Filter Item Load', (filterId: number) => ({ filterId }));\r\nexport const getFilterUnitInfoItemFail = createAction('[Core] Filter Item Load Fail', (error: ApiError) => ({ error }));\r\nexport const getFilterUnitInfoItemSuccess = createAction('[Core] Filter Item Load Success', (filterItemInfo: CustomerUserAccessFilterUnitInfoItem[]) => ({ filterItemInfo }));\r\n\r\nexport const Clear = createAction('[Core] Clear User Access Filter');\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of, from, } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as UserAccessFilterActions from './actions';\r\nimport { customerUserAccessFilterService } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromUserActions from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport * as fromUnitAccess from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\n\r\nimport { Store } from '@ngrx/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _customerUserAccessFilterService: customerUserAccessFilterService,\r\n private _store$: Store\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.Load),\r\n switchMap(action => this._customerUserAccessFilterService.get().pipe(\r\n map(entities => UserAccessFilterActions.LoadSuccess(entities)),\r\n catchError(error => of(UserAccessFilterActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public SaveSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.SaveSuccess),\r\n tap(action => {\r\n if (action.filterId && action.selectedUserId) {\r\n this._store$.dispatch(UserAccessFilterActions.getAssetIdsForFilter(action.filterId || 0, action.selectedUserId));\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public save$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.Save),\r\n switchMap(action => this._customerUserAccessFilterService.saveUnitInfoFilter(action.UserAccessFilter).pipe(\r\n mergeMap((entities) => [\r\n UserAccessFilterActions.SaveSuccess(action.selectedUserId, action.UserAccessFilter.id),\r\n UserAccessFilterActions.Load(),\r\n fromRoot.Modal.Close(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Filter saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n UserAccessFilterActions.SaveFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving filter',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public applyFilterSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.applyFilterToUserSuccess),\r\n tap(action => {\r\n if (action.filterId === 0) {\r\n this._store$.dispatch(fromUnitAccess.UnitAccessActions.UserFleetSave());\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public applyFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.applyFilterToUser),\r\n switchMap(action => this._customerUserAccessFilterService.applyCustomerUserAccessFilterToUser(action.customerUserAccessFilterId, action.userId).pipe(\r\n mergeMap(() => [\r\n UserAccessFilterActions.applyFilterToUserSuccess(action.customerUserAccessFilterId),\r\n UserAccessFilterActions.Load(),\r\n fromUserActions.UserSearchActions.InitialLoad(),\r\n fromUserActions.UnitAccessActions.Changes(false),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Filter saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n UserAccessFilterActions.applyFilterToUserFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving filter',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public loadAssetIdsForFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.getAssetIdsForFilter),\r\n switchMap(action => this._customerUserAccessFilterService.getAssetIdsForFilter(action.customerUserAccessFilterId, action.userId).pipe(\r\n mergeMap((entities) => [\r\n UserAccessFilterActions.getAssetIdsForFilterSuccess(entities),\r\n ]),\r\n catchError(error => from([\r\n UserAccessFilterActions.getAssetIdsForFilterFail(error),\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public deleteFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.deleteFilter),\r\n switchMap(action => this._customerUserAccessFilterService.deleteFilter(action.filterId).pipe(\r\n mergeMap((entities) => [\r\n UserAccessFilterActions.deleteFilterSuccess(action.filterId),\r\n UserAccessFilterActions.Load(),\r\n fromUserActions.UserSearchActions.InitialLoad(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Filter deleted`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n UserAccessFilterActions.deleteFilterFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while deleting filter',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n\r\n public loadFilterItem$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessFilterActions.getFilterUnitInfoItem),\r\n switchMap(action => this._customerUserAccessFilterService.getCustomerUserAccessFilterUnitInfoItems(action.filterId).pipe(\r\n mergeMap((entities) => [\r\n UserAccessFilterActions.getFilterUnitInfoItemSuccess(entities),\r\n ]),\r\n catchError(error => from([\r\n UserAccessFilterActions.getFilterUnitInfoItemFail(error),\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, CustomerUserAccessFilter, UnitOfMeasure } from '@rfv/modules/core/models';\r\nimport { CustomerUserAccessFilterUnitInfoItem } from '@rfv/modules/dashboard/modules/user-admin/store/models/customer-user-access-filter-unit-info.model';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n isCreating: boolean;\r\n assetIds: number[];\r\n isDeleting: boolean;\r\n customerUserAccessFilterUnitInfo: CustomerUserAccessFilterUnitInfoItem[];\r\n isLoadingFilterUnitInfo: boolean;\r\n\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: customerUserAccessFilter => customerUserAccessFilter.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n isCreating: false,\r\n error: null,\r\n assetIds: [],\r\n isDeleting: false,\r\n customerUserAccessFilterUnitInfo: [],\r\n isLoadingFilterUnitInfo: false,\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UnitsOfMeasureActions from './actions';\r\n\r\nconst customerUserAccessFilterReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(UnitsOfMeasureActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitsOfMeasureActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.customerUserAccessFilter, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(UnitsOfMeasureActions.LoadFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n // --- create\r\n on(UnitsOfMeasureActions.Save, (state) => ({\r\n ...state,\r\n isCreating: true\r\n })),\r\n\r\n on(UnitsOfMeasureActions.SaveSuccess, (state) => ({\r\n ...state,\r\n isCreating: false\r\n })),\r\n\r\n on(UnitsOfMeasureActions.SaveFail, (state) => ({\r\n ...state,\r\n isCreating: false\r\n })),\r\n\r\n // --- get AssetIds\r\n on(UnitsOfMeasureActions.getAssetIdsForFilter, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n assetIds: [],\r\n })),\r\n\r\n on(UnitsOfMeasureActions.getAssetIdsForFilterSuccess, (state, { assetIds }) => ({\r\n ...state,\r\n isLoading: false,\r\n assetIds: assetIds\r\n })),\r\n\r\n on(UnitsOfMeasureActions.getAssetIdsForFilterFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n // --- Delete Filter\r\n on(UnitsOfMeasureActions.deleteFilter, (state) => ({\r\n ...state,\r\n isDeleting: true,\r\n })),\r\n\r\n on(UnitsOfMeasureActions.deleteFilterSuccess, (state, { filterId }) => adapter.removeOne(filterId, {\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(UnitsOfMeasureActions.deleteFilterFail, (state) => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n // --- get Filter Unit Info Item\r\n on(UnitsOfMeasureActions.getFilterUnitInfoItem, (state) => ({\r\n ...state,\r\n isLoadingFilterUnitInfo: true,\r\n customerUserAccessFilterUnitInfo: [],\r\n })),\r\n\r\n on(UnitsOfMeasureActions.getFilterUnitInfoItemSuccess, (state, { filterItemInfo }) => ({\r\n ...state,\r\n isLoadingFilterUnitInfo: false,\r\n customerUserAccessFilterUnitInfo: filterItemInfo\r\n })),\r\n\r\n on(UnitsOfMeasureActions.getFilterUnitInfoItemFail, (state) => ({\r\n ...state,\r\n isLoadingFilterUnitInfo: false\r\n })),\r\n\r\n on(UnitsOfMeasureActions.Clear, (state) => ({\r\n ...state,\r\n customerUserAccessFilterUnitInfo: [],\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return customerUserAccessFilterReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.customerUserAccessFilter)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isCreating = createSelector(getState, state => state.isCreating);\r\nexport const getAssetIds = createSelector(getState, state => state.assetIds);\r\nexport const getFilterUnitInfo = createSelector(getState, state => state.customerUserAccessFilterUnitInfo);\r\nexport const isLoadingFilterUnitInfo = createSelector(getState, state => state.isLoadingFilterUnitInfo);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { Params } from '@angular/router';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, Customer, CustomerAggregationSettings, TileDefault } from '@rfv/modules/core/models';\r\n\r\nexport const LoadAccess = createAction('[Core] Load Customer Access');\r\nexport const LoadAccessFail = createAction('[Core] Load Customer Access Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadAccessSuccess = createAction('[Core] Load Customer Access Success', (customers: Customer[]) => ({ payload: { customers } }));\r\n\r\nexport const Load = createAction('[Core] Load Customer'); //, (customerId: number) => ({ payload: { customerId }}));\r\nexport const LoadFail = createAction('[Core] Load Customer Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadSuccess = createAction('[Core] Load Customer Success', (customer: Customer) => ({ payload: { customer } }));\r\n\r\nexport const Select = createAction('[Core] Select Customer', (customerId: number) => ({ payload: { customerId } }));\r\n\r\n\r\nexport const Switch = createAction('[Core] Switch Customer', (customerId: number, redirectUrl: string = '/', newTab: Boolean = false, data?: { assetId?: number, tileId?: number, customerName?: string} ) => ({\r\n customerId,\r\n redirectUrl,\r\n newTab,\r\n data\r\n}));\r\n\r\nexport const SwitchAndNavigateToAsset = createAction('[Core] Switch and Navigate to Asset', (customerId:number, assetId:number, tileId?: number, params?: Params)=>({customerId, assetId, tileId, params}))\r\n\r\n\r\nexport const SwitchAndNavigateToSitemapGroup = createAction('[Core] Switch and Navigate to Sitemapgroup', (customerId:number, sitemapGroupdId:number, tileId?: number, params?: Params)=>({customerId, sitemapGroupdId, tileId, params}))\r\n\r\n\r\nexport const LoadAggregationSettings = createAction('[Core] Load Customer AggregationSettings');\r\nexport const LoadAggregationSettingsFail = createAction('[Core] Load Customer AggregationSettings Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadAggregationSettingsSuccess = createAction('[Core] Load Customer AggregationSettings Success', (customersSettings: CustomerAggregationSettings[]) => ({ customersSettings }));\r\n\r\nexport const LoadTileDefaults = createAction('[Core] Load Tile Defaults');\r\nexport const LoadTileDefaultsSuccess = createAction('[Core] Load Tile Defaults Success', (defaults: TileDefault[]) => ({ defaults }));\r\nexport const LoadTileDefaultsFail = createAction('[Core] Tile Default Fail', (error: ApiError) => ({ error }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of, empty, EMPTY } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, tap, filter, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as CustomerActions from './actions';\r\nimport * as UserSessionActions from '../user-session/actions';\r\nimport * as EulaAction from '@rfv/store/eula/actions';\r\nimport * as CoreActions from '../actions';\r\n\r\nimport { CustomerService } from '@rfv/modules/core/services';\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromActions from './actions';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _customerService: CustomerService,\r\n private _store: Store\r\n ) { }\r\n\r\n public loadAccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.LoadAccess),\r\n switchMap(action => this._customerService.getAll().pipe(\r\n map(customers => CustomerActions.LoadAccessSuccess(customers)),\r\n catchError(error => of(CustomerActions.LoadAccessFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n // select default/saved customer\r\n public loadAccessSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.LoadAccessSuccess),\r\n withLatestFrom(\r\n this._store.select(fromRoot.Storage.getNumberFromLocalStorage('CustomerId')),\r\n this._store.select(fromRoot.Storage.getNumberFromSessionStorage('CustomerId')),\r\n this._store.select(fromRoot.Router.getQueryParam(\"customerId\"))\r\n ),\r\n switchMap(([action, localCustomerId, sessionCustomerId, queryCustomerId]) => {\r\n if (queryCustomerId) \r\n return of(CustomerActions.Select(+queryCustomerId));\r\n\r\n if (action.payload.customers.length === 1)\r\n return of(CustomerActions.Select(action.payload.customers[0].Id));\r\n\r\n const savedCustomerId = sessionCustomerId || localCustomerId;\r\n\r\n if (savedCustomerId && action.payload.customers.find(customer => customer.Id === savedCustomerId))\r\n return of(CustomerActions.Select(savedCustomerId));\r\n\r\n return EMPTY;\r\n })\r\n )\r\n );\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.Load),\r\n switchMap(action => this._customerService.get().pipe(\r\n map(customer => CustomerActions.LoadSuccess(customer)),\r\n catchError(error => of(CustomerActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public switch$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.Switch),\r\n withLatestFrom(this._store.select(fromCore.Customers.getSelectedId), this._store.select(fromCore.Customers.getSelected)),\r\n tap(([action, currentCustomerId, currentCustomer]) => {\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('CustomerId', `${action.customerId}`));\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('CustomerName', `${action.data.customerName}`));\r\n\r\n if (!action.newTab) {\r\n this._store.dispatch(fromRoot.Storage.SaveToSessionStorage('CustomerId', `${action.customerId}`));\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('CustomerName', `${action.data.customerName}`));\r\n window.location.pathname = action.redirectUrl;\r\n } else {\r\n this._store.dispatch(fromRoot.Storage.SaveToSessionStorage('CustomerId', `${currentCustomerId}`));\r\n this._store.dispatch(fromRoot.Storage.SaveToSessionStorage('CustomerName', `${currentCustomer.Name}`));\r\n window.open(action.redirectUrl, '_blank', 'noreferrer=true');\r\n }\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n public switchAndNavigateToAsset$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.SwitchAndNavigateToAsset),\r\n tap(({ assetId, tileId, customerId, params }) => {\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectSitemapGroupId'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectTileId'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectParams'));\r\n\r\n const stringParams = params ? JSON.stringify(params) : '{}';\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('RedirectAssetId', `${assetId}`));\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('RedirectParams', stringParams));\r\n\r\n if (tileId)\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('RedirectTileId', `${tileId}`));\r\n \r\n this._store.dispatch(fromActions.Switch(customerId, '/', true, params))\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n public switchAndNavigateToSitemapGroup$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.SwitchAndNavigateToSitemapGroup),\r\n tap(({ sitemapGroupdId, tileId, customerId, params }) => {\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectAssetId'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectTileId'));\r\n this._store.dispatch(fromRoot.Storage.RemoveFromLocalStorage('RedirectParams'));\r\n\r\n const stringParams = params ? JSON.stringify(params) : '{}';\r\n\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('RedirectSitemapGroupId', `${sitemapGroupdId}`));\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('RedirectParams', stringParams));\r\n\r\n if (tileId)\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('RedirectTileId', `${tileId}`));\r\n\r\n this._store.dispatch(fromActions.Switch(customerId, '/', true, params));\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n public select$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.Select),\r\n tap(action => {\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('CustomerId', `${action.payload.customerId}`));\r\n this._store.dispatch(fromRoot.Storage.SaveToSessionStorage('CustomerId', `${action.payload.customerId}`));\r\n }),\r\n filter(action => !!action.payload.customerId),\r\n mergeMap(action => [\r\n UserSessionActions.Load(),\r\n EulaAction.LoadEula(),\r\n CoreActions.Load()\r\n ])\r\n )\r\n );\r\n\r\n public loadAggregationSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.LoadAggregationSettings),\r\n switchMap(action => this._customerService.getAggregationSettings().pipe(\r\n map(entities => CustomerActions.LoadAggregationSettingsSuccess(entities)),\r\n catchError(error => of(CustomerActions.LoadAggregationSettingsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadTileDefaults$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CustomerActions.LoadTileDefaults),\r\n switchMap(action => this._customerService.getTileDefaults().pipe(\r\n map(defaults => CustomerActions.LoadTileDefaultsSuccess(defaults)),\r\n catchError(error => of(CustomerActions.LoadTileDefaultsFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Customer, CustomerAggregationSettings, TileDefault } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isAccessLoaded: boolean;\r\n isAccessLoading: boolean;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n aggregationSettings: CustomerAggregationSettings[];\r\n isAggregationSettingsLoaded: boolean;\r\n isAggregationSettingsLoading: boolean;\r\n aggregationError: ApiError;\r\n\r\n tileDefaults: TileDefault[];\r\n isTileDefaultsLoading: boolean;\r\n isTileDefaultsLoaded: boolean;\r\n tileDefaultsError: ApiError;\r\n\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: customer => customer.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isAccessLoaded: false,\r\n isAccessLoading: false,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n aggregationSettings: [],\r\n isAggregationSettingsLoaded: false,\r\n isAggregationSettingsLoading: false,\r\n aggregationError: null,\r\n\r\n tileDefaults: [],\r\n isTileDefaultsLoading: false,\r\n isTileDefaultsLoaded: false,\r\n tileDefaultsError: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as CustomerActions from './actions';\r\n\r\nconst customerReducer = createReducer(\r\n initialState,\r\n\r\n //\r\n // Access (list)\r\n //\r\n\r\n on(CustomerActions.LoadAccess, state => ({\r\n ...state,\r\n\r\n isAccessLoading: true\r\n })),\r\n\r\n on(CustomerActions.LoadAccessFail, (state, { payload }) => ({\r\n ...state,\r\n\r\n isAccessLoading: false,\r\n isAccessLoaded: false,\r\n\r\n error: payload.error\r\n })),\r\n\r\n on(CustomerActions.LoadAccessSuccess, (state, { payload }) => adapter.setAll(payload.customers, {\r\n ...state,\r\n\r\n isAccessLoading: false,\r\n isAccessLoaded: true,\r\n\r\n error: null\r\n })),\r\n\r\n //\r\n // Entity\r\n //\r\n\r\n on(CustomerActions.Load, state => ({\r\n ...state,\r\n\r\n isLoading: true\r\n })),\r\n\r\n on(CustomerActions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n error: payload.error\r\n })),\r\n\r\n on(CustomerActions.LoadSuccess, (state, { payload }) => adapter.updateOne({\r\n id: payload.customer.Id,\r\n changes: payload.customer\r\n }, {\r\n ...state,\r\n\r\n isLoaded: true,\r\n isLoading: false,\r\n\r\n error: null\r\n })),\r\n\r\n on(CustomerActions.Select, (state, { payload }) => ({\r\n ...state,\r\n selectedId: payload.customerId\r\n })),\r\n\r\n on(CustomerActions.LoadAggregationSettings, state => ({\r\n ...state,\r\n isAggregationSettingsLoading: true,\r\n })),\r\n\r\n on(CustomerActions.LoadAggregationSettingsSuccess, (state, payload) => ({\r\n ...state,\r\n\r\n isAggregationSettingsLoading: false,\r\n isAggregationSettingsLoaded: true,\r\n aggregationSettings: payload.customersSettings,\r\n aggregationError: null\r\n })),\r\n\r\n on(CustomerActions.LoadAggregationSettingsFail, (state, { payload }) => ({\r\n ...state,\r\n\r\n isAggregationSettingsLoaded: false,\r\n isAggregationSettingsLoading: false,\r\n\r\n aggregationError: payload.error\r\n })),\r\n\r\n on(CustomerActions.LoadTileDefaults, state => ({\r\n ...state,\r\n isTileDefaultsLoading: true\r\n })),\r\n\r\n on(CustomerActions.LoadTileDefaultsSuccess, (state, { defaults }) => ({\r\n ...state,\r\n isTileDefaultsLoading: false,\r\n isTileDefaultsLoaded: true,\r\n tileDefaults: defaults,\r\n tileDefaultsError: null\r\n })),\r\n\r\n on(CustomerActions.LoadTileDefaultsFail, (state, { error }) => ({\r\n ...state,\r\n isTileDefaultsLoading: false,\r\n isTileDefaultsLoaded: false,\r\n tileDefaults: [],\r\n tileDefaultsError: error\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return customerReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.customers);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\nexport const getSelected = createSelector(getSelectedId, getEntities, (selectedCustomerId, entities) => entities && entities[selectedCustomerId]);\r\n\r\nexport const isAccessLoaded = createSelector(getState, state => state.isAccessLoaded);\r\nexport const isAccessLoading = createSelector(getState, state => state.isAccessLoading);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAggregationSettings = createSelector(getState, state => state.aggregationSettings);\r\nexport const getAllTileDefaults = createSelector(getState, state => state.tileDefaults);\r\n\r\nexport const getTileDefaults = (tileId: number, industryId: number = null) => createSelector(\r\n getSelected,\r\n getAllTileDefaults,\r\n (customer, tileDefaults) => tileDefaults.filter(tileDefault => tileDefault.tileId === tileId && (industryId ? tileDefault.industryId === industryId : tileDefault.industryId === customer.PrimaryIndustryId))\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, Dashboard } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Dashboards');\r\nexport const LoadFail = createAction('[Core] Load Dashboards Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Core] Load Dashboards Success', props<{ dashboards: Dashboard[] }>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { DashboardService } from '@rfv/modules/core/services';\r\n\r\nimport * as DashboardsActions from './actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _dashboardService: DashboardService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DashboardsActions.Load),\r\n switchMap(action => this._dashboardService.getAll().pipe(\r\n map(dashboards => DashboardsActions.LoadSuccess({ dashboards })),\r\n catchError(error => of(DashboardsActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Dashboard } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: dashboard => dashboard.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DashboardsActions from './actions';\r\n\r\nconst dashboardsReducer = createReducer(\r\n initialState,\r\n\r\n on(DashboardsActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(DashboardsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(DashboardsActions.LoadSuccess, (state, { dashboards }) => adapter.setAll(dashboards, ({\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return dashboardsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.dashboards);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DisplayGroup } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load DisplayGroups', (defaults: boolean = false) => ({ defaults }));\r\nexport const LoadFail = createAction('[Core] Load DisplayGroups Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadSuccess = createAction('[Core] Load DisplayGroups Success', (displayGroups: DisplayGroup[]) => ({ displayGroups }));\r\n\r\n//this will load defaults into its separate state - needed to remedy 22958\r\nexport const LoadDefaults = createAction('[Core] Load Default DisplayGroups');\r\nexport const LoadDefaultsFail = createAction('[Core] Load Default DisplayGroups Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadDefaultsSuccess = createAction('[Core] Load Default DisplayGroups Success', (displayGroups: DisplayGroup[]) => ({ displayGroups }));\r\n\r\nexport const Add = createAction('[Core] Add DisplayGroups', (displayGroup: DisplayGroup) => ({ displayGroup }));\r\nexport const AddFail = createAction('[Core] Add DisplayGroups Fail', (error: ApiError) => ({ error }));\r\nexport const AddSuccess = createAction('[Core] Add DisplayGroups Success', (displayGroups: DisplayGroup[]) => ({ displayGroups }));\r\n\r\nexport const Save = createAction('[Core] Save DisplayGroups', (displayGroups: DisplayGroup[]) => ({ displayGroups }));\r\nexport const SaveFail = createAction('[Core] Save DisplayGroups Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Save DisplayGroups Success', (displayGroupId: number) => ({ id: displayGroupId }));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, DisplayGroup } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n globalDisplayGroups: DisplayGroup[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isSaved: boolean;\r\n isSaving: boolean;\r\n\r\n isAdded: boolean;\r\n isAdding: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: displayGroup => displayGroup.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n globalDisplayGroups: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaved: false,\r\n isSaving: false,\r\n\r\n isAdded: false,\r\n isAdding: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst displayGroupReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { displayGroups }) => adapter.setAll(displayGroups, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(Actions.LoadDefaults, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadDefaultsFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.LoadDefaultsSuccess, (state, { displayGroups }) => ({\r\n ...state,\r\n globalDisplayGroups: displayGroups,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(Actions.Add, state => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(Actions.AddFail, (state, { error }) => ({\r\n ...state,\r\n isAdded: false,\r\n isAdding: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.AddSuccess, (state, { displayGroups }) => adapter.setAll(displayGroups, {\r\n ...state,\r\n isAdded: true,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n on(Actions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(Actions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaved: false,\r\n isSaving: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.SaveSuccess, (state) => ({\r\n ...state,\r\n isSaved: true,\r\n isSaving: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return displayGroupReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.datapoints);","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.displayGroups);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const isSaved = createSelector(getState, state => state.isSaved);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\n\r\nexport const isAdded = createSelector(getState, state => state.isAdded);\r\nexport const isAdding = createSelector(getState, state => state.isAdding);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getGlobalDisplayGroups = createSelector(getState, state => state.globalDisplayGroups);\r\n\r\nexport const getDisplayGroupNameById = (displayGroupId: number) => createSelector(\r\n getEntities,\r\n (state) => state[displayGroupId]?.Name\r\n);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DatapointIdentifier, CustomerDataPointIdentifier } from '@rfv/modules/core/models';\r\nimport { DatapointIdentifierModel } from '@rfv/modules/core/models/datapoint/datapoint-identifier.model';\r\n\r\nexport const Load = createAction('[Core] Load DatapointIdentifiers');\r\nexport const LoadFail = createAction('[Core] Load DatapointIdentifiers Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadSuccess = createAction('[Core] Load DatapointIdentifiers Success', (identifiers: DatapointIdentifier[]) => ({ payload: { identifiers } }));\r\n\r\nexport const LoadCustomerDataPointIdentifiers = createAction('[Core] Load Customer DatapointIdentifiers');\r\nexport const LoadCustomerDataPointIdentifiersFail = createAction('[Core] Load Customer DatapointIdentifiers Fail',\r\n (error: ApiError) => ({ payload: { error } })\r\n);\r\nexport const LoadCustomerDataPointIdentifiersSuccess = createAction('[Core] Load Customer DatapointIdentifiers Success',\r\n (customerIdentifiers: CustomerDataPointIdentifier[]) => ({ customerIdentifiers })\r\n);\r\n\r\n//Priority Data Add/Delete\r\nexport const AddPriorityDataPointIdentifier = createAction('[Core] Add Priority DataPoint Identifier',\r\n (dataPointIdentifierModelList: DatapointIdentifierModel[]) => ({ dataPointIdentifierModelList }));\r\n\r\nexport const AddPriorityDataPointIdentifierFail = createAction('[Core] Add Priority DataPoint Identifier Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const AddPriorityDataPointIdentifierSuccess = createAction('[Core] Add Priority DataPoint Identifier Success',\r\n (identifiers: DatapointIdentifier[]) => ({ identifiers }));\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, DatapointIdentifier, CustomerDataPointIdentifier } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n customerIdentifiers: CustomerDataPointIdentifier[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isAdded: boolean;\r\n isAdding: boolean;\r\n isDeleted: boolean;\r\n isDeleting: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: identifier => identifier.key\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n customerIdentifiers: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isAdded: false,\r\n isAdding: false,\r\n isDeleted: false,\r\n isDeleting: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst identifierReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { payload }) => adapter.setAll(payload.identifiers, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(Actions.LoadCustomerDataPointIdentifiers, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadCustomerDataPointIdentifiersFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.LoadCustomerDataPointIdentifiersSuccess, (state, { customerIdentifiers }) => ({\r\n ...state,\r\n customerIdentifiers: customerIdentifiers,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(Actions.AddPriorityDataPointIdentifier, state => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(Actions.AddPriorityDataPointIdentifierFail, (state, { error }) => ({\r\n ...state,\r\n isAdded: false,\r\n isAdding: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.AddPriorityDataPointIdentifierSuccess, (state, { identifiers }) => adapter.setAll(identifiers, {\r\n ...state,\r\n isAdded: true,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return identifierReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.identifiers);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const getDataPointIdentifierByGroupId = (groupId: number) => createSelector(\r\n getState,\r\n (state) => state.entities[groupId]\r\n);\r\n\r\nexport const getAlarmsDataPointIdentifier = createSelector(getAll, state => state.filter(x => x.allowForAlarms == true));\r\nexport const getRuntimeDataPointIdentifier = createSelector(getAll, state => state.filter(x => x.allowForRuntime == true));\r\n\r\nexport const getSelectedPoints = createSelector(getAll, state => state.filter(identifier => !identifier.dataPointIdentifierAliasId && identifier.prioritySet));\r\nexport const getAvailablePoints = createSelector(getAll, state => state.filter(identifier => !identifier.dataPointIdentifierAliasId && !identifier.prioritySet));\r\n\r\nexport const getCustomerIdentifierIds = createSelector(getState, state => state.customerIdentifiers.map(identifier => identifier.id));\r\n\r\nexport const getCustomerFilteredPoints = createSelector(\r\n getAvailablePoints, \r\n getCustomerIdentifierIds,\r\n (points, ids) => points.filter(point => ids.includes(+point.id))\r\n);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const isAdding = createSelector(getState, state => state.isAdding);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from \"@ngrx/store\";\r\nimport { ApiError, DataPointIdentifierDefault } from \"@rfv/modules/core/models\";\r\n\r\n\r\nexport const Load = createAction('[Core] Load Data Point Identifier Defaults');\r\nexport const LoadSuccess = createAction('[Core] Load Data Point Identifier Defaults Success', (defaults: DataPointIdentifierDefault[]) => ({ defaults }));\r\nexport const LoadFail = createAction('[Core] Load Data Point Identifier Defaults Fail', (error: ApiError) => ({ error }));\r\n\r\nexport const Save = createAction('[Core] Save Data Point Identifier Defaults', (defaults: DataPointIdentifierDefault[]) => ({ defaults }));\r\nexport const SaveSuccess = createAction('[Core] Save Data Point Identifier Defaults Success');\r\nexport const SaveFail = createAction('[Core] Save Data Point Identifier Defaults Fail', (error: ApiError) => ({ error }));\r\n\r\nexport const Clear = createAction('[Core] Clear Data Point Identifier Defaults');","import { createEntityAdapter, EntityState } from \"@ngrx/entity\";\r\nimport { ApiError, DataPointIdentifierDefault } from \"@rfv/modules/core/models\";\r\n\r\nexport interface State extends EntityState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isSaving: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: entity => entity.dataPointIdentifierId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoading: false,\r\n isLoaded: false,\r\n isSaving: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const dataPointIdentifierDefaultsReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { defaults }) => adapter.setAll(defaults, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveSuccess, EntityActions.SaveFail, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(EntityActions.Clear, state => initialState)\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return dataPointIdentifierDefaultsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.defaults);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DatapointStatus } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load DatapointStatus');\r\nexport const LoadFail = createAction('[Core] Load DatapointStatus Fail', (error: ApiError) => ({ payload: { error }}));\r\nexport const LoadSuccess = createAction('[Core] Load DatapointStatus Success', (status: DatapointStatus[]) => ({ payload: { status }}));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, DatapointStatus } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: status => status.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst statusReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { payload }) => adapter.setAll(payload.status, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return statusReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.status);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getStatusById = (statusId: number) => createSelector(\r\n getState,\r\n (state) => state.entities[statusId]\r\n);","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { DatapointsService } from '@rfv/modules/core/services';\r\n\r\nimport * as fromDisplayGroups from './display-groups';\r\nimport * as fromIdentifiers from './identifiers';\r\nimport * as fromDefaults from './defaults';\r\nimport * as fromStatus from './status';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _datapointsService: DatapointsService\r\n ) { }\r\n\r\n // Display Groups\r\n public loadDisplayGroups$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayGroups.Load),\r\n switchMap(action => this._datapointsService.getDisplayGroups(action.defaults).pipe(\r\n map(displayGroups => fromDisplayGroups.LoadSuccess(displayGroups)),\r\n catchError(error => of(fromDisplayGroups.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadDefaultDisplayGroups$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayGroups.LoadDefaults),\r\n switchMap(action => this._datapointsService.getDisplayGroups(true).pipe(\r\n map(displayGroups => fromDisplayGroups.LoadDefaultsSuccess(displayGroups)),\r\n catchError(error => of(fromDisplayGroups.LoadDefaultsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public addDisplayGroups$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayGroups.Add),\r\n switchMap(action => this._datapointsService.addDisplayGroup(action.displayGroup).pipe(\r\n map(displayGroups => fromDisplayGroups.AddSuccess(displayGroups)),\r\n catchError(error => of(fromDisplayGroups.AddFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveDisplayGroups$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayGroups.Save),\r\n switchMap(action => this._datapointsService.saveDisplayGroups(action.displayGroups).pipe(\r\n mergeMap(isSuccess => [\r\n fromDisplayGroups.SaveSuccess(isSuccess),\r\n fromDisplayGroups.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Display Groups Saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(fromDisplayGroups.SaveFail(error)))\r\n ))\r\n )\r\n );\r\n // End of Display Groups\r\n\r\n public loadIdentifiers$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromIdentifiers.Load),\r\n switchMap(action => this._datapointsService.getIdentifiers().pipe(\r\n map(identifiers => fromIdentifiers.LoadSuccess(identifiers)),\r\n catchError(error => of(fromIdentifiers.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadCustomerIdentifiers$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromIdentifiers.LoadCustomerDataPointIdentifiers),\r\n switchMap(action => this._datapointsService.getCustomerIdentifiers().pipe(\r\n map(customerIdentifiers => fromIdentifiers.LoadCustomerDataPointIdentifiersSuccess(customerIdentifiers)),\r\n catchError(error => of(fromIdentifiers.LoadCustomerDataPointIdentifiersFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadIdentifierDefaults$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDefaults.Load),\r\n switchMap(action => this._datapointsService.getIdentifierDefaults().pipe(\r\n map(defaults => fromDefaults.LoadSuccess(defaults)),\r\n catchError(error => of(fromDefaults.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveIdentifierDefaults$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDefaults.Save),\r\n switchMap(action => this._datapointsService.saveIdentifierDefaults(action.defaults).pipe(\r\n map(() => fromDefaults.SaveSuccess()),\r\n catchError(error => of(fromDefaults.SaveFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveIdentifierDefaultsSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDefaults.SaveSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Data Point Identifier defaults saved.',\r\n autoClose: 3000\r\n }\r\n }),\r\n fromDefaults.Load()\r\n ])\r\n )\r\n );\r\n\r\n public saveIdentifierDefaultsFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDefaults.SaveFail),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `Failed to save Data Point Identifier defaults. ${action.error?.message || \"\"}`,\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n\r\n //Priority Data Add/Delete\r\n public addPriorityData$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromIdentifiers.AddPriorityDataPointIdentifier),\r\n switchMap(action => this._datapointsService.addPriorityDataPointIdentifier(action.dataPointIdentifierModelList).pipe(\r\n mergeMap(identifiers => [\r\n fromIdentifiers.AddPriorityDataPointIdentifierSuccess(identifiers),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Selected Points List Updated.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(fromIdentifiers.AddPriorityDataPointIdentifierFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n\r\n\r\n public loadStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromStatus.Load),\r\n switchMap(action => this._datapointsService.getStatus().pipe(\r\n map(status => fromStatus.LoadSuccess(status)),\r\n catchError(error => of(fromStatus.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { Action, combineReducers } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromDisplayGroups from './display-groups';\r\nimport * as fromIdentifiers from './identifiers';\r\nimport * as fromDefaults from './defaults';\r\nimport * as fromStatus from './status';\r\n\r\n\r\nconst datapointsReducer = combineReducers({\r\n displayGroups: fromDisplayGroups.reducer,\r\n identifiers: fromIdentifiers.reducer,\r\n defaults: fromDefaults.reducer,\r\n status: fromStatus.reducer\r\n});\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointsReducer(state, action);\r\n}\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, CustomerVimKnownGood } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Dealer VIM');\r\n\r\nexport const LoadFail = createAction('[Core] Load Dealer VIM Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load Dealer VIM Success', props<{\r\n vimsKnownGood: CustomerVimKnownGood[]\r\n}>());\r\n\r\nexport const AddVim = createAction('[Core] Add Dealer VIM',\r\n (SHA1: string, DOutEnabled: boolean) => ({ SHA1, DOutEnabled }));\r\n\r\nexport const AddVimFail = createAction('[Core] Add Dealer VIM Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const AddVimSuccess = createAction('[Core] Add Dealer VIM Success');\r\n\r\nexport const Delete = createAction('[Core] Delete Dealer VIM', props<{\r\n id: number,\r\n SHA1: string\r\n}>());\r\n\r\nexport const DeleteFail = createAction('[Core] Delete Dealer VIM Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const DeleteSuccess = createAction('[Core] Delete Dealer VIM Success', props<{\r\n success: boolean\r\n}>());\r\n\r\nexport const UpdateVimDOut = createAction('[Core] Update VIM DOut',\r\n (SHA1: string) => ({ SHA1 }));\r\n\r\nexport const UpdateVimDOutFail = createAction('[Core] Update VIM DOut Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const UpdateVimDOutSuccess = createAction('[Core] Update VIM DOut Success');\r\n","import { Injectable } from '@angular/core';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as VimActions from './actions';\r\nimport { DealerVimService } from '@rfv/modules/core/services';\r\nimport { mergeMap } from 'rxjs/operators';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _dealerVimService: DealerVimService,\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.Load),\r\n switchMap(action => this._dealerVimService.get().pipe(\r\n map(vimsKnownGood => VimActions.LoadSuccess({ vimsKnownGood })),\r\n catchError(error => of(VimActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public add$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.AddVim),\r\n switchMap(action => this._dealerVimService.post(action.SHA1, action.DOutEnabled).pipe(\r\n map(response => VimActions.AddVimSuccess()),\r\n //refresh store with get\r\n catchError(error => of(VimActions.AddVimFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.Delete),\r\n switchMap(action => this._dealerVimService.delete(action.id, action.SHA1).pipe(\r\n map(response => VimActions.DeleteSuccess({success: response})),\r\n catchError(error => of(VimActions.DeleteFail({error: error})))\r\n ))\r\n )\r\n )\r\n\r\n public addSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.AddVimSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({options: { message: 'Save Success', autoClose: 3000, type: 'success' }}),\r\n VimActions.Load()\r\n ]\r\n )\r\n )\r\n );\r\n\r\n public addFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.AddVimFail),\r\n map(action => fromRoot.Banner.Show({options: { message: `Failed to add SHA1. ${action.error?.message || ''}`, autoClose: 3000, type: 'error' }}))\r\n )\r\n );\r\n\r\n public deleteSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.DeleteSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({options: { message: 'Delete SHA1 Success', autoClose: 3000, type: 'success' }}),\r\n VimActions.Load()\r\n ]\r\n )\r\n )\r\n );\r\n\r\n public DeleteFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.DeleteFail),\r\n map(action => fromRoot.Banner.Show({options: { message: 'Delete SHA1 Error', autoClose: 3000, type: 'error' }}))\r\n )\r\n );\r\n\r\n public updateDOut$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.UpdateVimDOut),\r\n switchMap(action => this._dealerVimService.put(action.SHA1).pipe(\r\n map(response => VimActions.UpdateVimDOutSuccess()),\r\n catchError(error => of(VimActions.UpdateVimDOutFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public updateDOutSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.UpdateVimDOutSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({options: { message: 'Save Success', autoClose: 3000, type: 'success' }}),\r\n VimActions.Load()\r\n ]\r\n )\r\n )\r\n );\r\n\r\n public updateDOutFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.UpdateVimDOutFail),\r\n map(action => fromRoot.Banner.Show({options: { message: `Failed to update SHA1 DOut. ${action.error || ''}`, autoClose: 3000, type: 'error' }}))\r\n )\r\n );\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError, CustomerVimKnownGood } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isAdded: boolean;\r\n isAdding: boolean;\r\n\r\n isSaving: boolean;\r\n isSaved: boolean;\r\n\r\n isDeleting: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: vimKnownGood => vimKnownGood.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isAdded: false,\r\n isAdding: false,\r\n\r\n isSaving: false,\r\n isSaved: false,\r\n\r\n isDeleting: false,\r\n\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as VimActions from './actions';\r\n\r\nconst vimReducer = createReducer(\r\n initialState,\r\n\r\n on(VimActions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(VimActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(VimActions.LoadSuccess, (state, { vimsKnownGood }) => adapter.setAll(vimsKnownGood, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(VimActions.AddVim, (state) => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(VimActions.AddVimSuccess, (state) => ({\r\n ...state,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n on(VimActions.AddVimFail, (state, {error}) => ({\r\n ...state,\r\n isAdding: false,\r\n error: error\r\n })),\r\n\r\n on(VimActions.Delete, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(VimActions.DeleteSuccess, (state) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: null\r\n })),\r\n\r\n on(VimActions.DeleteFail, (state, {error}) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: error\r\n })),\r\n\r\n on(VimActions.UpdateVimDOut, (state) => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(VimActions.UpdateVimDOutSuccess, (state) => ({\r\n ...state,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n on(VimActions.UpdateVimDOutFail, (state, {error}) => ({\r\n ...state,\r\n isAdding: false,\r\n error: error\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return vimReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.dealerVim);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, Dealer } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Dealers');\r\nexport const LoadFail = createAction('[Core] Load Dealers Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Core] Load Dealers Success', props<{ dealers: Dealer[] }>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as DealersActions from './actions';\r\n\r\nimport { DealerService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _dealerService: DealerService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DealersActions.Load),\r\n switchMap(action => this._dealerService.getAll().pipe(\r\n map(dealers => DealersActions.LoadSuccess({ dealers }),\r\n catchError(error => of(DealersActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Dealer } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: dealer => dealer.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DealersActions from './actions';\r\n\r\nconst dealersReducer = createReducer(\r\n initialState,\r\n\r\n on(DealersActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(DealersActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(DealersActions.LoadSuccess, (state, { dealers }) => adapter.setAll(dealers, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return dealersReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.dealers);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\nimport { ApiError, DerivedDataPoint } from '@rfv/modules/core/models';\r\nimport { DerivedEvaluationRequest } from '@rfv/modules/core/models/derived-evaluation-request';\r\nimport { DerivedValidationRequest } from '@rfv/modules/core/models/derived-validation-request';\r\nimport { DerivedValidationResult } from '@rfv/modules/core/models/derived-validation-result';\r\n\r\n\r\nexport const LoadAll = createAction('[Core] Load Derived Data Points'); \r\nexport const LoadAllFail = createAction('[Core] Load Derived Data Points Fail', (error: ApiError) => ({ error }));\r\nexport const LoadAllSuccess = createAction('[Core] Load Derived Data Points Success', (list: DerivedDataPoint[]) => ({ list }));\r\n\r\nexport const LoadDDPsByAssetId = createAction('[Core] Get Derived Data Points by AssetId', (assetId: number) => ({ assetId }))\r\nexport const LoadDDPsByAssetIdFail = createAction('[Core] Get Derived Data Points by AssetId Fail', (error: ApiError) => ({ error }))\r\nexport const LoadDDPsByAssetIdSuccess = createAction('[Core] Get Derived Data Points by AssetId Success', (list: DerivedDataPoint[]) => ({ list }))\r\n\r\nexport const Save = createAction('[Core] Save Derived Data Point', (assetId: number, dataPointId: number, derivedDataPoint: DerivedDataPoint, callback: Function = () => {}) => ({ assetId, dataPointId, derivedDataPoint, callback }));\r\nexport const SaveFail = createAction('[Core] Save Derived Data Point Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Save Derived Data Point Success');\r\n\r\nexport const Create = createAction('[Core] Create Derived Data Point', (assetId: number, derivedDataPoint: DerivedDataPoint, callback: Function = () => {}) => ({ assetId, derivedDataPoint, callback }));\r\nexport const CreateFail = createAction('[Core] Create Derived Data Point Fail', (error: ApiError) => ({ error }));\r\nexport const CreateSuccess = createAction('[Core] Create Derived Data Point Success');\r\n\r\nexport const Delete = createAction('[Core] Delete Derived Data Points', (dataPointId: number) => ({ dataPointId }));\r\nexport const DeleteFail = createAction('[Core] Delete Derived Data Points Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteSuccess = createAction('[Core] Delete Derived Data Points Success', (dataPointId: number) => ({ dataPointId }));\r\n\r\nexport const ValidateEquation = createAction('[Core] Validate Derived Data Point Equation', (validationRequest: DerivedValidationRequest) => ({ validationRequest }));\r\nexport const ValidateEquationFail = createAction('[Core] Validate Derived Data Point Equation Fail', (error: ApiError) => ({ error }));\r\nexport const ValidateEquationSuccess = createAction('[Core] Validate Derived Data Point Equation Success', (derivedValidationResult: DerivedValidationResult) => ({ derivedValidationResult }));\r\n\r\nexport const EvaluateEquation = createAction('[Core] Evaluate Derived Data Point Equation', (evaluationRequest: DerivedEvaluationRequest) => ({ evaluationRequest }));\r\nexport const EvaluateEquationFail = createAction('[Core] Evaluate Derived Data Point Equation Fail', (error: ApiError) => ({ error }));\r\nexport const EvaluateEquationSuccess = createAction('[Core] Evaluate Derived Data Point Equation Success');\r\n\r\nexport const SelectDDP = createAction('[Core] Select Derived Data Point', (derivedDataPoint: DerivedDataPoint) => ({ derivedDataPoint }));\r\nexport const ClearSelectedDDP = createAction('[Core] Clear Selected Derived Data Point');\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError, DerivedDataPoint } from '@rfv/modules/core/models';\r\nimport { DerivedValidationResult } from '@rfv/modules/core/models/derived-validation-result';\r\n\r\n\r\n//remove any implementation\r\nexport interface State extends EntityState {\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isSaving: boolean;\r\n\r\n isDeleting: boolean;\r\n isValidating: boolean;\r\n derivedValidationResult: DerivedValidationResult;\r\n\r\n modalDDPList: DerivedDataPoint[];\r\n modalListLoading: boolean;\r\n selectedDDP: DerivedDataPoint;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: derivedDataPoint => derivedDataPoint.DerivedDataPointId,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaving: false,\r\n\r\n isDeleting: false,\r\n isValidating: false,\r\n \r\n derivedValidationResult: null,\r\n\r\n modalDDPList: null,\r\n modalListLoading: false,\r\n selectedDDP: null,\r\n\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\nimport { adapter } from './state';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n\r\n on(EntityActions.LoadAll, state => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(EntityActions.LoadAllFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadAllSuccess, (state, { list }) => adapter.setAll(list, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadDDPsByAssetId, (state) => ({\r\n ...state,\r\n modalDDPList: null,\r\n modalListLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadDDPsByAssetIdFail, (state, { error }) => ({\r\n ...state,\r\n error: error\r\n })),\r\n \r\n on(EntityActions.LoadDDPsByAssetIdSuccess, (state, { list }) => ({\r\n ...state,\r\n modalDDPList: list,\r\n modalListLoading: false\r\n })),\r\n \r\n on(EntityActions.SelectDDP, (state, { derivedDataPoint }) => ({\r\n ...state,\r\n selectedDDP: derivedDataPoint,\r\n modalDDPList: null\r\n })),\r\n\r\n on(EntityActions.ClearSelectedDDP, (state) => ({\r\n ...state,\r\n selectedDDP: null,\r\n })),\r\n\r\n on(\r\n EntityActions.Save,\r\n EntityActions.Create,\r\n (state) => ({\r\n ...state,\r\n isSaving: true,\r\n })),\r\n\r\n on(\r\n EntityActions.SaveSuccess,\r\n EntityActions.CreateSuccess,\r\n (state, { }) => ({\r\n ...state,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n\r\n on(\r\n EntityActions.SaveFail,\r\n EntityActions.CreateFail,\r\n (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error: error\r\n })),\r\n\r\n\r\n on(EntityActions.Delete, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(EntityActions.DeleteSuccess, (state, { dataPointId }) => adapter.removeOne(dataPointId, {\r\n ...state,\r\n isDeleting: false,\r\n error: null\r\n })),\r\n\r\n\r\n on(EntityActions.DeleteFail, (state, { error }) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.ValidateEquation, (state) => ({\r\n ...state,\r\n isValidating: true\r\n })), \r\n\r\n on(EntityActions.ValidateEquationSuccess, (state, {derivedValidationResult}) => ({\r\n ...state,\r\n isValidating: false,\r\n isValidated: true, \r\n derivedValidationResult: derivedValidationResult,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.ValidateEquationFail, (state, { error }) => ({\r\n ...state,\r\n isValidating: false,\r\n isValidated: false,\r\n error: error\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.derivedDataPoints);\r\n","import { createSelector } from '@ngrx/store';\r\n\r\n\r\nimport { adapter } from './state';\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nexport const getState = createSelector(getParentState, state => state.items);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal, \r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getSelectedDDP = createSelector(getState, state => state.selectedDDP);\r\nexport const getModalList = createSelector(getState, state => state.modalDDPList);\r\nexport const isModalListLoading = createSelector(getState, state => state.modalListLoading);\r\n\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\n\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\n\r\nexport const isValidating = createSelector(getState, state => state.isValidating);\r\n\r\nexport const getResult = createSelector(getState, state => state.derivedValidationResult);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DerivedEvaluationType } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Derived Evaluation Types');\r\nexport const LoadFail = createAction('[Core] Load Derived Evaluation Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Derived Evaluation Types Success', (evaluationTypes: DerivedEvaluationType[]) => ({ evaluationTypes }));\r\n\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, DerivedEvaluationType } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: evalTypes => evalTypes.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst identifierReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { evaluationTypes }) => adapter.setAll(evaluationTypes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return identifierReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.evaluationTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, } from '@rfv/modules/core/models';\r\nimport { DerivedItemType } from '@rfv/modules/core/models/derived-item-type';\r\n\r\nexport const Load = createAction('[Core] Load Derived Item Types');\r\nexport const LoadFail = createAction('[Core] Load Derived Item Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Derived Item Types Success', (itemTypes: DerivedItemType[]) => ({ itemTypes }));\r\n\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, } from '@rfv/modules/core/models';\r\nimport { DerivedItemType } from '@rfv/modules/core/models/derived-item-type';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: evalTypes => evalTypes.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false, \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst identifierReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { itemTypes }) => adapter.setAll(itemTypes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return identifierReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.itemTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DerivedLegendItem } from '@rfv/modules/core/models/derived-legend-item';\r\n\r\nexport const Load = createAction('[Core] Load Derived Evaluation Legend Items');\r\nexport const LoadFail = createAction('[Core] Load Derived Evaluation Legend Items Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Derived Evaluation Legend Items Success', (legendItems: DerivedLegendItem[]) => ({ legendItems }));\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DerivedLegendItem } from '@rfv/modules/core/models/derived-legend-item';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: legendItems => legendItems.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst legendReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { legendItems}) => adapter.setAll(legendItems, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return legendReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getParentState, state => state.legendItems);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as DerivedDatapointActions from './evaluation-items'\r\nimport * as EvaluationTypesActions from './evaluation-types'\r\nimport * as ItemTypesActions from './item-types'\r\nimport * as LegendItemsActions from './legend-items'\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport { DerivedDataPointsService } from '@rfv/modules/core/services';\r\nimport { Store } from '@ngrx/store';\r\nimport { Action } from 'rxjs/internal/scheduler/Action';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _derivedDataPointService: DerivedDataPointsService,\r\n private _store: Store\r\n ) { }\r\n\r\n public loadAll$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.LoadAll),\r\n withLatestFrom(this._store.select(fromDashboard.getSelectedAssetId)),\r\n switchMap(([action, selectedAssetId]) => this._derivedDataPointService.getItems(selectedAssetId).pipe(\r\n map(entities => DerivedDatapointActions.LoadAllSuccess(entities)),\r\n catchError(error => of(DerivedDatapointActions.LoadAllFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n public LoadDDPByAssetId$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.LoadDDPsByAssetId),\r\n switchMap(action => this._derivedDataPointService.getItems(action.assetId).pipe(\r\n tap(entities => entities.sort((a, b) => (a.InternalDescription > b.InternalDescription) ? 1 : -1)),\r\n map(entities => DerivedDatapointActions.LoadDDPsByAssetIdSuccess(entities)),\r\n catchError(error => of(DerivedDatapointActions.LoadDDPsByAssetIdFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n public LoadDDPByAssetIdFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.LoadDDPsByAssetIdFail),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: action.error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n )\r\n\r\n public delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.Delete),\r\n withLatestFrom(this._store.select(fromDashboard.getSelectedAssetId)),\r\n switchMap(([action, selectedAssetId]) => this._derivedDataPointService.delete(selectedAssetId, action.dataPointId).pipe(\r\n mergeMap(_ => [\r\n DerivedDatapointActions.DeleteSuccess(action.dataPointId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Derived data point has been successfully removed.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(DerivedDatapointActions.DeleteFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n loadEvalTypes$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EvaluationTypesActions.Load),\r\n switchMap(action => this._derivedDataPointService.getEvaluationTypes().pipe(\r\n map(evalTypes => EvaluationTypesActions.LoadSuccess(evalTypes)),\r\n catchError(error => of(EvaluationTypesActions.LoadFail(error)))\r\n )\r\n ))\r\n );\r\n\r\n loadItemTypes$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(ItemTypesActions.Load),\r\n switchMap(action => this._derivedDataPointService.getItemTypes().pipe(\r\n map(itemTypes => ItemTypesActions.LoadSuccess(itemTypes)),\r\n catchError(error => of(ItemTypesActions.LoadFail(error)))\r\n )\r\n ))\r\n )\r\n\r\n loadLegendItems$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(LegendItemsActions.Load),\r\n switchMap(action => this._derivedDataPointService.getLegendItems().pipe(\r\n map(legendItems => LegendItemsActions.LoadSuccess(legendItems)),\r\n catchError(error => of(LegendItemsActions.LoadFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n validateEquation$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.ValidateEquation),\r\n switchMap(action => this._derivedDataPointService.validateFormula(action.validationRequest).pipe(\r\n map(response => DerivedDatapointActions.ValidateEquationSuccess(response)),\r\n catchError(error => of(DerivedDatapointActions.ValidateEquationFail(error)))\r\n ))\r\n )\r\n )\r\n \r\n evaluateEquation$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.EvaluateEquation),\r\n switchMap(action => this._derivedDataPointService.evaluateFormula(action.evaluationRequest).pipe(\r\n map(response => DerivedDatapointActions.EvaluateEquationSuccess()),\r\n catchError(error => of(DerivedDatapointActions.EvaluateEquationFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n saveDerivedDatapoint = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.Save),\r\n switchMap(action => this._derivedDataPointService.save(action.assetId, action.dataPointId, action.derivedDataPoint).pipe(\r\n map(response => DerivedDatapointActions.SaveSuccess()), \r\n tap(() => action.callback()),\r\n catchError(error => of(DerivedDatapointActions.SaveFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n createDerivedDatapoint = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.Create),\r\n switchMap(action => this._derivedDataPointService.create(action.assetId, action.derivedDataPoint).pipe(\r\n map(response => DerivedDatapointActions.CreateSuccess()),\r\n tap(() => action.callback()),\r\n catchError(error => of(DerivedDatapointActions.SaveFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n saveDerivedDataPointFail = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.CreateFail, DerivedDatapointActions.SaveFail),\r\n map(action => fromRoot.Banner.Show({ options: {\r\n type: 'error',\r\n message: 'Failed to save derived data point. ' + action.error?.message ? action.error.message : '',\r\n autoClose: 5000\r\n }}))\r\n )\r\n );\r\n\r\n \r\n saveDerivedDataPointSuccess = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DerivedDatapointActions.CreateSuccess, DerivedDatapointActions.SaveSuccess),\r\n map(action => fromRoot.Banner.Show({ options: {\r\n type: 'success',\r\n message: 'Derived data point saved.',\r\n autoClose: 5000\r\n }}))\r\n )\r\n );\r\n}\r\n","import { Action, combineReducers } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromEvaluationTypes from './evaluation-types';\r\nimport * as fromItemTypes from './item-types';\r\nimport * as fromEvaluationItems from './evaluation-items';\r\nimport * as fromLegendItems from './legend-items'\r\n\r\nconst derivedDatapointsReducer = combineReducers({\r\n evaluationTypes: fromEvaluationTypes.reducer,\r\n itemTypes: fromItemTypes.reducer,\r\n items: fromEvaluationItems.reducer,\r\n legendItems: fromLegendItems.reducer\r\n});\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return derivedDatapointsReducer(state, action);\r\n}\r\n","import { Action } from '@ngrx/store';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, UnitControlCommand, CommandStatus } from '@rfv/modules/core/models';\r\n\r\nexport const SendDemandPoll = createAction('[Core] Send Demand Poll', (assetId: number, assetName: string, viewAction: Action, pollUnitData: boolean, customOverride: string) => ({ assetId, assetName, viewAction, pollUnitData, customOverride }));\r\nexport const SendDemandPollSuccess = createAction('[Core] Send Demand Poll Success', (commandId: number, assetId: number) => ({ commandId, assetId}));\r\n\r\nexport const SendUnitControl = createAction('[Core] Send Unit Control', (control: UnitControlCommand) => ({ control }));\r\nexport const SendUnitControlSuccess = createAction('[Core] Send Unit Control Success', (commandId: number, assetId: number, commandName: string) => ({ commandId, assetId, commandName }));\r\n\r\nexport const SendCommandFail = createAction('[Core] Send Command Fail', (error: ApiError) => ({ error }));\r\n\r\nexport const CheckCommandStatus = createAction('[Core] Check Command Status', (commandId: number, notificationId: number, previousStatusId: number = null, timesPolled: number) => ({commandId, notificationId, previousStatusId, timesPolled }));\r\nexport const CheckCommandStatusFail = createAction('[Core] Check command Status Fail', (notificationId: number, error: ApiError) => ({notificationId, error})); \r\nexport const CheckCommandStatusSuccess = createAction('[Core] Check Command Status Success', (commandId: number, notificationId: number, status: CommandStatus, previousStatusId: number, timesPolled: number) => ({commandId, notificationId, status, previousStatusId, timesPolled })); ","// inProgress, isSaving, etc.. just stuff for spinner \r\n\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n isSending: boolean;\r\n error: ApiError;\r\n}\r\n\r\n\r\nexport const initialState: State = ({\r\n isSending: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as ControlActions from './actions';\r\n\r\nconst deviceControlReducer = createReducer(\r\n initialState,\r\n \r\n on(ControlActions.SendDemandPoll, ControlActions.SendUnitControl, state => ({\r\n ...state,\r\n isSending: true\r\n })),\r\n\r\n on(ControlActions.SendDemandPollSuccess, ControlActions.SendUnitControlSuccess, state => ({\r\n ...state,\r\n isSending: false\r\n })),\r\n\r\n on(ControlActions.SendCommandFail, (state, { error }) => ({\r\n ...state,\r\n isSending: false,\r\n error: error\r\n })),\r\n); \r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return deviceControlReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.deviceCommands);\r\n\r\nexport const isSending = createSelector(getState, state => state.isSending);\r\nexport const getError = createSelector(getState, state => state.error);","import { Injectable } from '@angular/core';\r\n\r\nimport { timer, of, EMPTY } from 'rxjs';\r\nimport { catchError, filter, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport * as deviceCommandActions from './actions'\r\nimport * as notificationActions from '../notifications/actions'\r\nimport * as UnitControlActions from '../unit-control/actions';\r\nimport * as notificationSelectors from '../notifications/selectors';\r\n\r\nimport { DemandPollStatusNotification, UnitControlStatusNotification } from '@rfv/modules/core/models';\r\nimport { DeviceCommandService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _deviceCommandService: DeviceCommandService,\r\n private _store: Store\r\n ) { }\r\n\r\n //\r\n // Demand Poll\r\n //\r\n\r\n public sendDemandPoll$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.SendDemandPoll),\r\n switchMap(action => this._deviceCommandService.createDemandPoll(action.assetId, action.pollUnitData, action.customOverride).pipe(\r\n map(commandId => deviceCommandActions.SendDemandPollSuccess(commandId, action.assetId)),\r\n catchError(error => of(deviceCommandActions.SendCommandFail(error))\r\n ))\r\n ))\r\n );\r\n\r\n public sendDemandPollSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.SendDemandPollSuccess),\r\n mergeMap(action => {\r\n const notification = new DemandPollStatusNotification(action.commandId, action.assetId);\r\n\r\n return [\r\n notificationActions.Add(notification),\r\n deviceCommandActions.CheckCommandStatus(action.commandId, notification.id, null, 0)\r\n ];\r\n })\r\n )\r\n );\r\n\r\n //\r\n // Unit Control\r\n //\r\n\r\n public sendUnitControl$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.SendUnitControl),\r\n switchMap(action => this._deviceCommandService.createUnitControlCommand(action.control).pipe(\r\n mergeMap(commandId => [\r\n deviceCommandActions.SendUnitControlSuccess(commandId, action.control.assetId, action.control.description),\r\n\r\n //26434 reload the data on send control\r\n UnitControlActions.Load(action.control.assetId)\r\n ]),\r\n catchError(error => of(deviceCommandActions.SendCommandFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public sendUnitControlSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.SendUnitControlSuccess),\r\n mergeMap(action => {\r\n\r\n if (!action.commandId) {\r\n // we could actually remove this, the API should send a 40x instead of a 200 with a 0\r\n return [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed to send control.',\r\n autoClose: 3000\r\n }\r\n })\r\n ];\r\n }\r\n\r\n const notification = new UnitControlStatusNotification(action.commandName, action.commandId, action.assetId);\r\n\r\n return [\r\n notificationActions.Add(notification),\r\n deviceCommandActions.CheckCommandStatus(action.commandId, notification.id, null, 0)\r\n ];\r\n })\r\n )\r\n );\r\n\r\n //\r\n // Banners\r\n //\r\n\r\n public sendCommandSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.SendDemandPollSuccess, deviceCommandActions.SendUnitControlSuccess),\r\n map(action => fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Command Sent.',\r\n autoClose: 3000\r\n }\r\n }))\r\n )\r\n );\r\n\r\n public sendCommandFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.SendCommandFail),\r\n map(action => fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed to send command. ' + action.error?.message ? action.error.message : '',\r\n autoClose: 3000\r\n }\r\n }))\r\n )\r\n );\r\n\r\n //\r\n // Command polling\r\n //\r\n\r\n public checkCommandStatus$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.CheckCommandStatus),\r\n mergeMap(action => this._deviceCommandService.getCommandStatus(action.commandId).pipe(\r\n map(status => deviceCommandActions.CheckCommandStatusSuccess(action.commandId, action.notificationId, status, action.previousStatusId, (action.timesPolled += 1))),\r\n catchError(error => of(deviceCommandActions.CheckCommandStatusFail(action.notificationId, error)))\r\n ))\r\n )\r\n );\r\n\r\n public checkCommandSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.CheckCommandStatusSuccess),\r\n withLatestFrom(this._store.select(notificationSelectors.getAll)),\r\n mergeMap(([action, notifications]) => {\r\n // notification was deleted, stop polling\r\n if (!notifications.find(notification => notification.id === action.notificationId))\r\n return EMPTY;\r\n\r\n // TODO: 60 should be dynamic (based off responseLatency of the command?)\r\n if (action.timesPolled > 60) {\r\n this._store.dispatch(notificationActions.Update(action.notificationId, \"Timed out\", true));\r\n return EMPTY;\r\n }\r\n\r\n this._store.dispatch(notificationActions.Update(action.notificationId, action.status.label, action.previousStatusId !== action.status.deviceCommandTransferStatusId));\r\n\r\n if (action.status.isComplete) {\r\n return EMPTY;\r\n } else {\r\n return timer(10000).pipe(\r\n map(_ => deviceCommandActions.CheckCommandStatus(action.commandId, action.notificationId, action.status.deviceCommandTransferStatusId, action.timesPolled))\r\n );\r\n }\r\n })\r\n )\r\n );\r\n\r\n public checkCommandFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(deviceCommandActions.CheckCommandStatusFail),\r\n withLatestFrom(this._store.select(notificationSelectors.getAll)),\r\n map(([action, notifications]) => {\r\n if (!notifications.find(notification => notification.id === action.notificationId))\r\n return null;\r\n\r\n return notificationActions.Update(action.notificationId, \"Failed to check command status. \" + action.error?.message ? action.error.message : '', true)\r\n }),\r\n filter(action => !!action)\r\n )\r\n );\r\n}\r\n","import { createAction, props} from '@ngrx/store';\r\nimport { ApiError, DeviceSearchResult } from '@rfv/modules/core/models';\r\n\r\nexport const Clear = createAction('[Core] Device Search Clear');\r\n\r\nexport const Load = createAction('[Core] Device Search Load', (\r\n searchStr: string,\r\n searchBy: string,\r\n searchType: string\r\n) => ({ payload: { searchStr, searchBy, searchType } }));\r\n\r\nexport const LoadFail = createAction('[Core] Device Search Load Fail', props<{\r\n error: ApiError\r\n}>());\r\nexport const LoadSuccess = createAction('[Core] Device Search Load Success', (entities: DeviceSearchResult[]) => ({ entities: entities }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as DeviceSearchResultActions from './actions';\r\n\r\nimport { DeviceSearchResultService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _deviceSearchResultService: DeviceSearchResultService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceSearchResultActions.Load),\r\n switchMap(action => this._deviceSearchResultService.get(action.payload.searchStr, action.payload.searchBy, action.payload.searchType).pipe(\r\n map(entities => DeviceSearchResultActions.LoadSuccess(entities)),\r\n catchError(error => of(DeviceSearchResultActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, DeviceSearchResult } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: entity => entity.DeviceId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DeviceSearchResultActions from './actions';\r\n\r\nconst deviceSearchResultReducer = createReducer(\r\n initialState,\r\n\r\n\r\n on(DeviceSearchResultActions.Clear, () => ({\r\n ...initialState,\r\n })),\r\n\r\n // --- Load\r\n on(DeviceSearchResultActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(DeviceSearchResultActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(DeviceSearchResultActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return deviceSearchResultReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.deviceSearchResults);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { ECMSerialNumberSuffix } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load ECM Serial Number Suffixes');\r\n\r\nexport const LoadFail = createAction('[Core] Load ECM Serial Number Suffixes Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load ECM Serial Number Suffixes Success', props<{\r\n suffixes: ECMSerialNumberSuffix[]\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as SerialNumberSuffixActions from './actions';\r\n\r\nimport {SerialNumberService} from '@rfv/modules/core/services/serial-number-service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _serialNumberService: SerialNumberService,\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(SerialNumberSuffixActions.Load),\r\n switchMap(action => this._serialNumberService.getSuffixes().pipe(\r\n map(suffixes => SerialNumberSuffixActions.LoadSuccess({ suffixes })),\r\n catchError(error => of(SerialNumberSuffixActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { ECMSerialNumberSuffix } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: suffix => suffix.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as SerialNumberSuffixActions from './actions';\r\n\r\nconst serialNumberSuffixReducer = createReducer(\r\n initialState,\r\n\r\n on(SerialNumberSuffixActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(SerialNumberSuffixActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(SerialNumberSuffixActions.LoadSuccess, (state, { suffixes }) => adapter.setAll(suffixes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return serialNumberSuffixReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.ecmSerialNumberSuffixes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { map, mergeMap, filter, zip, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Action, Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as CoreActions from './actions';\r\nimport * as CoreSelectors from './selectors';\r\nimport * as fromAlarmGroups from './alarm-groups';\r\nimport * as fromAlarmStates from './alarm-states';\r\nimport * as fromAlarmTests from './alarm-tests';\r\nimport * as fromAlarmTypes from './alarm-types';\r\nimport * as fromApplications from './applications';\r\nimport * as fromAssets from './assets';\r\nimport * as fromAssetTypes from './assetTypes';\r\nimport * as fromCustomers from './customers';\r\nimport * as fromDashboards from './dashboards';\r\nimport * as fromDatapoints from './datapoints';\r\nimport * as fromEventCodes from './event-code';\r\nimport * as fromEventParties from './event-parties';\r\nimport * as fromGaugeTypes from './gauge-types';\r\nimport * as fromGlobalColors from './global-colors';\r\nimport * as fromGlobalJobTitles from './global-job-titles';\r\nimport * as fromGlobalTimezones from './global-timezones';\r\nimport * as fromIcons from './icons';\r\nimport * as fromIndustries from './industries';\r\nimport * as fromNotificationTypes from './notification-types';\r\nimport * as fromPlatFormServiceSettings from './platformServiceSettings';\r\nimport * as fromSitemapGroups from './sitemap-groups';\r\nimport * as fromTimeIntervalDropdowns from './time-interval-dropdowns';\r\nimport * as fromToolTips from './tool-tips';\r\nimport * as fromUnitsOfMeasure from './units-of-measure';\r\nimport * as fromUnitStates from './unit-states';\r\nimport * as fromUnitsOfMeasureConversions from './units-of-measure-conversions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store\r\n ) { }\r\n\r\n // splitter\r\n // we can pare these down later if the load becomes too much, we probably don't need everything to start\r\n // !!! DON'T PRE-OPTIMIZE !!!\r\n public loadSplitter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CoreActions.Load),\r\n mergeMap(action => [\r\n fromAlarmGroups.Load(),\r\n fromAlarmStates.Load(),\r\n fromAlarmTests.Load(),\r\n fromAlarmTypes.Load(),\r\n fromApplications.Load(),\r\n fromAssets.Entities.Load(),\r\n fromAssetTypes.Load(),\r\n fromCustomers.Load(),\r\n fromCustomers.LoadAggregationSettings(),\r\n fromCustomers.LoadTileDefaults(),\r\n fromDashboards.Load(),\r\n fromDatapoints.DisplayGroups.Load(),\r\n fromDatapoints.Identifiers.Load(),\r\n fromDatapoints.Status.Load(),\r\n fromEventCodes.Load(),\r\n fromEventParties.Load(),\r\n fromGaugeTypes.Load(),\r\n fromGlobalColors.Load(),\r\n fromGlobalJobTitles.Load(),\r\n fromGlobalTimezones.Load(),\r\n fromIcons.Load(),\r\n fromIndustries.Load(),\r\n fromNotificationTypes.Load(),\r\n fromPlatFormServiceSettings.Load(),\r\n fromSitemapGroups.Load(),\r\n fromTimeIntervalDropdowns.Load(),\r\n fromToolTips.Load(),\r\n fromUnitsOfMeasure.Load(),\r\n fromUnitStates.Load(),\r\n fromUnitsOfMeasureConversions.Load(),\r\n ])\r\n )\r\n );\r\n\r\n public loadFailAggregator$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(\r\n fromAlarmGroups.LoadFail,\r\n fromAlarmStates.LoadFail,\r\n fromAlarmTests.LoadFail,\r\n fromAlarmTypes.LoadFail,\r\n fromApplications.LoadFail,\r\n fromAssets.Entities.LoadFail,\r\n fromAssetTypes.LoadFail,\r\n fromCustomers.LoadAggregationSettingsFail,\r\n fromCustomers.LoadFail,\r\n fromCustomers.LoadTileDefaultsFail,\r\n fromDashboards.LoadFail,\r\n fromDatapoints.DisplayGroups.LoadFail,\r\n fromDatapoints.Identifiers.LoadFail,\r\n fromDatapoints.Status.LoadFail,\r\n fromEventCodes.LoadFail,\r\n fromEventParties.LoadFail,\r\n fromGaugeTypes.LoadFail,\r\n fromGlobalColors.LoadFail,\r\n fromGlobalJobTitles.LoadFail,\r\n fromGlobalTimezones.LoadFail,\r\n fromIcons.LoadFail,\r\n fromIndustries.LoadFail,\r\n fromNotificationTypes.LoadFail,\r\n fromPlatFormServiceSettings.LoadFail,\r\n fromSitemapGroups.LoadFail,\r\n fromTimeIntervalDropdowns.LoadFail,\r\n fromToolTips.LoadFail,\r\n fromUnitsOfMeasure.LoadFail,\r\n fromUnitStates.LoadFail,\r\n fromUnitsOfMeasureConversions.LoadFail,\r\n ),\r\n withLatestFrom(this._store.select(CoreSelectors.isLoading)),\r\n filter(([action, isLoading]) => isLoading),\r\n map(([action, isLoading]) => CoreActions.LoadFail({ error: action.error }))\r\n )\r\n );\r\n\r\n // aggregator\r\n public loadSuccessAggregator$ = createEffect(\r\n () => this._actions$.pipe(\r\n zip(\r\n this._actions$.pipe(ofType(fromAlarmGroups.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromAlarmStates.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromAlarmTests.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromAlarmTypes.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromApplications.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromAssets.Entities.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromAssetTypes.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromCustomers.LoadAggregationSettingsSuccess)),\r\n this._actions$.pipe(ofType(fromCustomers.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromCustomers.LoadTileDefaultsSuccess)),\r\n this._actions$.pipe(ofType(fromDashboards.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromDatapoints.DisplayGroups.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromDatapoints.Identifiers.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromDatapoints.Status.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromEventCodes.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromEventParties.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromGaugeTypes.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromGlobalColors.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromGlobalJobTitles.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromGlobalTimezones.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromIcons.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromIndustries.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromNotificationTypes.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromPlatFormServiceSettings.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromSitemapGroups.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromTimeIntervalDropdowns.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromToolTips.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromUnitsOfMeasure.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromUnitStates.LoadSuccess)),\r\n this._actions$.pipe(ofType(fromUnitsOfMeasureConversions.LoadSuccess)),\r\n ),\r\n withLatestFrom(this._store.select(CoreSelectors.isLoading)),\r\n filter(([action, isLoading]) => isLoading),\r\n map(() => CoreActions.LoadSuccess())\r\n )\r\n );\r\n}\r\n","import { AvailableAndUpcomingIntervals } from './../../../dashboard/modules/emo/models/emo-overhaul.model';\r\nimport { OverviewHistory } from './../../../dashboard/modules/emo/models/emo-overview.model';\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { AssessmentCatInspectRisk, AssetAssessment } from '@rfv/modules/dashboard/modules/emo/models/emo-assessment.model';\r\nimport { Overhaul, AssetOverhaul, AssessmentCategory, EMORiskLevels, AssetAssessmentItem, OverhaulType, NonOverhaulAssessment } from '@rfv/modules/dashboard/modules/emo/models';\r\nimport { SystemCatInspection } from '@rfv/modules/tiles/models/system-cat-inspection.model';\r\n\r\n/**\r\n * Loads list of overhauls and dropdowns associated\r\n * GetEMOAssetOverhauls SP\r\n**/\r\nexport const LoadEMOAssetOverhaul = createAction('[Core] Load EMO Asset Overhaul', (assetId: number) => ({ assetId }));\r\nexport const LoadEMOAssetOverhaulFail = createAction('[Core] Load EMO Asset Overhaul Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMOAssetOverhaulSuccess = createAction('[Core] Load EMO Asset Overhaul Success', (overhaul: Overhaul) => ({ overhaul }));\r\n\r\n/**\r\n * Loads list of overhaul types\r\n * GetOverhaulTypes SP\r\n**/\r\nexport const LoadEMOAssetOverhaulTypes = createAction('[Core] Load EMO Asset Overhaul Types');\r\nexport const LoadEMOAssetOverhaulTypesFail = createAction('[Core] Load EMO Asset Overhaul Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMOAssetOverhaulTypesSuccess = createAction('[Core] Load EMO Asset Overhaul Types Success', (overhaulTypes: OverhaulType[]) => ({ overhaulTypes }));\r\n\r\n/**\r\n * Loads list of overhaul intervals\r\n * GetOverhaulIntervals SP\r\n**/\r\nexport const LoadEMOAssetOverhaulIntervals = createAction('[Core] Load EMO Asset Overhaul Intervals', (assetId: number) => ({ assetId }));\r\nexport const LoadEMOAssetOverhaulIntervalsFail = createAction('[Core] Load EMO Asset Overhaul Intervals Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMOAssetOverhaulIntervalsSuccess = createAction('[Core] Load EMO Asset Overhaul Intervals Success', (intervals: AvailableAndUpcomingIntervals) => ({ intervals }));\r\n\r\n\r\n/**\r\n * Create an overhaul\r\n * CreateEMOAssetOverhaul SP\r\n**/\r\nexport const CreateEMOAssetOverhaul = createAction('[Core] Create EMO Asset Overhaul', (assetId: number, overhaul: AssetOverhaul) => ({ assetId, overhaul }));\r\nexport const CreateEMOAssetOverhaulFail = createAction('[Core] Create EMO Asset Overhaul Fail', (error: ApiError) => ({ error }));\r\nexport const CreateEMOAssetOverhaulSuccess = createAction('[Core] Create EMO Asset Overhaul Success');\r\n\r\n/**\r\n * Save an overhaul\r\n * SaveEMOAssetOverhaul SP\r\n**/\r\nexport const SaveEMOAssetOverhaul = createAction('[Core] Save EMO Asset Overhaul', (assetId: number, overhaul: AssetOverhaul) => ({ assetId, overhaul }));\r\nexport const SaveEMOAssetOverhaulFail = createAction('[Core] Save EMO Asset Overhaul Fail', (error: ApiError) => ({ error }));\r\nexport const SaveEMOAssetOverhaulSuccess = createAction('[Core] Save EMO Asset Overhaul Success');\r\n\r\n/**\r\n * Delete an EMO Asset Overhaul, which also deletes an EMO Asset Assessment\r\n * DeleteEMOAssetOverhaul SP\r\n**/\r\nexport const DeleteEMOAssetOverhaul = createAction('[Core] Delete EMO Asset Overhaul', (assetId: number, emoAssetOverhaulId: number) => ({ assetId, emoAssetOverhaulId }));\r\nexport const DeleteEMOAssetOverhaulFail = createAction('[Core] Delete EMO Asset Overhaul Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteEMOAssetOverhaulSuccess = createAction('[Core] Delete EMO Asset Overhaul Success');\r\n\r\n/**\r\n * Loads list of assessments for a given asset\r\n * GetEMOAssetAssessments SP\r\n**/\r\nexport const LoadEMOAssetAssessments = createAction('[Core] Load EMO Asset Assessments', (assetId: number) => ({ assetId }));\r\nexport const LoadEMOAssetAssessmentsFail = createAction('[Core] Load EMO Asset Assessments Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMOAssetAssessmentsSuccess = createAction('[Core] Load EMO Asset Assessments Success', (assessments: AssetAssessment[]) => ({ assessments }));\r\n\r\n/**\r\n * Create a non overhaul assessment\r\n * CreateEMOAssetOverhaul SP\r\n**/\r\nexport const CreateEMONonOverhaulAssessment = createAction('[Core] Create EMO Non-Overhaul Assessment', (assetId: number, nonOverhaulAssessment: NonOverhaulAssessment) => ({ assetId, nonOverhaulAssessment }));\r\nexport const CreateEMONonOverhaulAssessmentFail = createAction('[Core] Create EMO Non-Overhaul Assessment Fail', (error: ApiError) => ({ error }));\r\nexport const CreateEMONonOverhaulAssessmentSuccess = createAction('[Core] Create EMO Non-Overhaul Assessment Success');\r\n\r\n/**\r\n * Certify an assessment in the Assessment Editor\r\n * SaveEMOAssetAssessment SP\r\n**/\r\nexport const SaveEMOAssetAssessment = createAction('[Core] Save EMO Asset Assessment', (assetId, emoAssetAssessmentId: number) => ({ assetId, emoAssetAssessmentId }));\r\nexport const SaveEMOAssetAssessmentFail = createAction('[Core] Save EMO Asset Assessment Fail', (error: ApiError) => ({ error }));\r\nexport const SaveEMOAssetAssessmentSuccess = createAction('[Core] Save EMO Asset Assessment Success');\r\n\r\n/**\r\n* Save an assessment's recommended hours in the Assessment Editor\r\n* SaveEMOAssetAssessmentRecommendedHours SP??\r\n**/\r\nexport const SaveEMOAssetAssessmentRecommendedHours = createAction('[Core] Save EMO Asset Assessment Recommended Hours',\r\n (recommendedHours: number, standardHours: number) => ({ recommendedHours, standardHours }));\r\nexport const SaveEMOAssetAssessmentRecommendedHoursFail = createAction('[Core] Save EMO Asset Assessment Recommended Hours Fail', (error: ApiError) => ({ error }));\r\nexport const SaveEMOAssetAssessmentRecommendedHoursSuccess = createAction('[Core] Save EMO Asset Assessment Recommended Hours Success');\r\n\r\n/**\r\n * Save a list of assessment items in the Assessment Editor\r\n * SaveEMOAssetAssessmentItem SP\r\n**/\r\nexport const SaveEMOAssetAssessmentItems = createAction('[Core] Save EMO Asset Assessment Items', (assetId, items: AssetAssessmentItem[]) => ({ assetId, items }));\r\nexport const SaveEMOAssetAssessmentItemsFail = createAction('[Core] Save EMO Asset Assessment Items Fail', (error: ApiError) => ({ error }));\r\nexport const SaveEMOAssetAssessmentItemsSuccess = createAction('[Core] Save EMO Asset Assessment Items Success');\r\n\r\n/**\r\n * Save a selected cat inspect risk\r\n \r\n**/\r\nexport const SaveEMOAssessmentCatInspectRisk = createAction('[Core] Save EMO Assessment Cat inspect risk', (assetId, item: AssessmentCatInspectRisk ) => ({ assetId, item }));\r\nexport const SaveEMOAssessmentCatInspectRiskFail = createAction('[Core] Save EMO Assessment Cat inspect risk Fail', (error: ApiError) => ({ error }));\r\nexport const SaveEMOAssessmentCatInspectRiskSuccess = createAction('[Core] Save EMO Assessment Cat inspect risk Success', (catInspectParsingDetails: any) => ({ catInspectParsingDetails}));\r\n\r\n/**\r\n * Loads list of assessment categories, subcategories and subcategory items\r\n * GetEMOAssessmentCategories and GetEMOAssessmentSubCategories SP\r\n**/\r\nexport const LoadEMOAssessmentCategories = createAction('[Core] Load EMO Assessment Categories');\r\nexport const LoadEMOAssessmentCategoriesFail = createAction('[Core] Load EMO Assessment Categories Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMOAssessmentCategoriesSuccess = createAction('[Core] Load EMO Assessment Categories Success', (categories: AssessmentCategory[]) => ({ categories }));\r\n\r\n/**\r\n * Loads list of emo risk levels\r\n * GetEMORiskLevels SP\r\n**/\r\nexport const LoadEMORiskLevels = createAction('[Core] Load EMO Risk Levels');\r\nexport const LoadEMORiskLevelsFail = createAction('[Core] Load EMO Risk Levels Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMORiskLevelsSuccess = createAction('[Core] Load EMO Risk Levels Success', (riskLevels: EMORiskLevels[]) => ({ riskLevels }));\r\n\r\n/**\r\n * Loads emo overview\r\n * GetEMOOverview SP\r\n */\r\nexport const LoadEMOOverview = createAction('[Core] Load EMO Overview', (sitemapGroupId: number, assetId?: number) => ({ sitemapGroupId, assetId }));\r\nexport const LoadEMOOverviewFail = createAction('[Core] Load EMO Overview Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEMOOverviewSuccess = createAction('[Core] Load EMO Overview Success', (overview: OverviewHistory[]) => ({ overview }));\r\n\r\nexport const SaveSelectedInspection = createAction('[Core] Cat Inspection to update',\r\n (CatInspection: SystemCatInspection) => ({ CatInspection }));\r\n\r\nexport const OpenDrawer = createAction('[Core] Open EMO Drawer');\r\nexport const CloseDrawer = createAction('[Core] Close EMO Drawer');\r\n\r\nexport const UpdateCatInspectParsingDetails = createAction('[Core] Update Cat Inspect Parsing Details', (catInspectParsingDetails: string) => ({ catInspectParsingDetails }));\r\n","import { withLatestFrom } from 'rxjs/operators';\r\n/* ngrx */\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as EntityActions from './actions';\r\n\r\n/* rxjs */\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\nimport { of, from } from 'rxjs';\r\n\r\n/* angular */\r\nimport { Injectable } from '@angular/core';\r\n\r\n/* rfv */\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { EmoService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _emoService: EmoService,\r\n private _actions: Actions,\r\n private _store$: Store\r\n ) { }\r\n\r\n //Overhauls\r\n public loadEMOAssetOverhaul$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMOAssetOverhaul),\r\n switchMap(action => this._emoService.getOverhaul(action.assetId).pipe(\r\n map(units => EntityActions.LoadEMOAssetOverhaulSuccess(units)),\r\n catchError(error => of(EntityActions.LoadEMOAssetOverhaulFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadEMOAssetOverhaulTypes$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMOAssetOverhaulTypes),\r\n switchMap(action => this._emoService.getOverhaulTypes().pipe(\r\n map(overhaulTypes => EntityActions.LoadEMOAssetOverhaulTypesSuccess(overhaulTypes)),\r\n catchError(error => of(EntityActions.LoadEMOAssetOverhaulTypesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadEMOAssetOverhaulIntervals$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMOAssetOverhaulIntervals),\r\n switchMap(action => this._emoService.getOverhaulIntervals(action.assetId).pipe(\r\n map(intervals => EntityActions.LoadEMOAssetOverhaulIntervalsSuccess(intervals)),\r\n catchError(error => of(EntityActions.LoadEMOAssetOverhaulIntervalsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createEMOAssetOverhauls$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.CreateEMOAssetOverhaul),\r\n switchMap(action => this._emoService.createOverhaul(action.assetId, action.overhaul).pipe(\r\n mergeMap(_ => [\r\n EntityActions.CreateEMOAssetOverhaulSuccess(),\r\n EntityActions.LoadEMOAssetOverhaul(action.assetId),\r\n EntityActions.LoadEMOAssetOverhaulIntervals(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Add overhaul successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.CreateEMOAssetOverhaulFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveEMOAssetOverhauls$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveEMOAssetOverhaul),\r\n switchMap(action => this._emoService.saveOverhaul(action.assetId, action.overhaul).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveEMOAssetOverhaulSuccess(),\r\n EntityActions.LoadEMOAssetOverhaul(action.assetId),\r\n EntityActions.LoadEMOAssetOverhaulIntervals(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Save overhaul successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.SaveEMOAssetOverhaulFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteEMOAssetOverhauls$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.DeleteEMOAssetOverhaul),\r\n switchMap((action) => this._emoService.deleteOverhaul(action.assetId, action.emoAssetOverhaulId).pipe(\r\n mergeMap(_ => [\r\n EntityActions.DeleteEMOAssetOverhaulSuccess(),\r\n EntityActions.LoadEMOAssetOverhaul(action.assetId),\r\n EntityActions.LoadEMOAssetOverhaulIntervals(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Delete overhaul successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.DeleteEMOAssetOverhaulFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //Assessments\r\n public loadEMOAssetAssessments$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMOAssetAssessments),\r\n switchMap(action => this._emoService.getAssessments(action.assetId).pipe(\r\n map(assessments => EntityActions.LoadEMOAssetAssessmentsSuccess(assessments)),\r\n catchError(error => of(EntityActions.LoadEMOAssetAssessmentsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createEMONonOverhaulAssessment$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.CreateEMONonOverhaulAssessment),\r\n switchMap(action => this._emoService.createNonOverhaulAssessment(action.assetId, action.nonOverhaulAssessment).pipe(\r\n mergeMap(_ => [\r\n EntityActions.CreateEMONonOverhaulAssessmentSuccess(),\r\n EntityActions.LoadEMOAssetAssessments(action.assetId),\r\n EntityActions.LoadEMOAssetOverhaulIntervals(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Add Assessment successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.CreateEMONonOverhaulAssessmentFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveEMOAssetAssessment$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveEMOAssetAssessment),\r\n switchMap(action => this._emoService.saveAssessment(action.assetId, action.emoAssetAssessmentId).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveEMOAssetAssessmentSuccess(),\r\n EntityActions.LoadEMOAssetAssessments(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Save assessment successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.SaveEMOAssetAssessmentFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveEMOAssetAssessmentRecommendedHours$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveEMOAssetAssessmentRecommendedHours),\r\n withLatestFrom(\r\n this._store$.select(fromCore.EMO.getSelectedAssessment),\r\n this._store$.select(fromCore.EMO.getSelectedAssetId)\r\n ),\r\n switchMap(([action, assessment, assetId]) => this._emoService.saveAssessmentRecommendedHours(assetId, assessment.id, action.recommendedHours, action.standardHours).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveEMOAssetAssessmentRecommendedHoursSuccess(),\r\n EntityActions.LoadEMOAssetAssessments(assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Save recommended hours successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n EntityActions.SaveEMOAssetAssessmentRecommendedHoursFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `Save recommended hours unsuccessful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public saveEMOAssetAssessmentItems$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveEMOAssetAssessmentItems),\r\n switchMap(action => this._emoService.saveAssessmentItems(action.assetId, action.items).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveEMOAssetAssessmentItemsSuccess(),\r\n EntityActions.LoadEMOAssetAssessments(action.assetId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Save assessment items successful.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.SaveEMOAssetAssessmentItemsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveAssessmentCatInspectRisk$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveEMOAssessmentCatInspectRisk),\r\n switchMap(action => this._emoService.saveCatInspectRisks(action.assetId, action.item)\r\n .pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveEMOAssetAssessmentItemsSuccess(),\r\n EntityActions.LoadEMOAssetAssessments(action.assetId)\r\n \r\n ]),\r\n \r\n catchError(error => of(EntityActions.SaveEMOAssessmentCatInspectRiskFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadEMOAssessmentCategories$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMOAssessmentCategories),\r\n switchMap(_ => this._emoService.getAssessmentCategories().pipe(\r\n map(categories => EntityActions.LoadEMOAssessmentCategoriesSuccess(categories)),\r\n catchError(error => of(EntityActions.LoadEMOAssessmentCategoriesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //Risk Levels\r\n public loadEMORiskLevels$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMORiskLevels),\r\n switchMap(_ => this._emoService.getEMORiskLevels().pipe(\r\n map(riskLevels => EntityActions.LoadEMORiskLevelsSuccess(riskLevels)),\r\n catchError(error => of(EntityActions.LoadEMORiskLevelsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //Overview\r\n public loadEMOOverview$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadEMOOverview),\r\n switchMap(action => this._emoService.getEMOOverview(action.sitemapGroupId, action.assetId).pipe(\r\n map(overview => EntityActions.LoadEMOOverviewSuccess(overview)),\r\n catchError(error => of(EntityActions.LoadEMOOverviewFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n\r\n\r\n","import { AvailableAndUpcomingIntervals } from './../../../dashboard/modules/emo/models/emo-overhaul.model';\r\nimport { ApiError } from '../../models';\r\nimport {\r\n AssetAssessment, Overhaul, EMORiskLevels, AssessmentCategory, OverviewHistory, OverhaulType\r\n} from '@rfv/modules/dashboard/modules/emo/models';\r\n\r\nexport interface State {\r\n overview: OverviewHistory[];\r\n overhaul: Overhaul;\r\n assessments: AssetAssessment[];\r\n\r\n overhaulTypes: OverhaulType[];\r\n\r\n intervals: AvailableAndUpcomingIntervals;\r\n\r\n categories: AssessmentCategory[];\r\n riskLevels: EMORiskLevels[];\r\n\r\n isDrawerOpen: boolean;\r\n\r\n error: ApiError;\r\n\r\n //LOADING\r\n isOverhaulLoading: boolean;\r\n isOverhaulLoaded: boolean;\r\n\r\n isOverhaulTypesLoading: boolean;\r\n isOverhaulTypesLoaded: boolean;\r\n\r\n isOverhaulIntervalsLoading: boolean;\r\n isOverhaulIntervalsLoaded: boolean;\r\n\r\n isAssessmentsLoading: boolean;\r\n isAssessmentsLoaded: boolean;\r\n\r\n isAssessmentCategoriesLoading: boolean;\r\n isAssessmentCategoriesLoaded: boolean;\r\n\r\n isRiskLevelsLoading: boolean;\r\n isRiskLevelsLoaded: boolean;\r\n\r\n isOverviewLoading: boolean;\r\n isOverviewLoaded: boolean;\r\n\r\n //CREATING\r\n isOverhaulCreating: boolean;\r\n isOverhaulCreated: boolean;\r\n\r\n isAssessmentCreating: boolean;\r\n isAssessmentCreated: boolean;\r\n\r\n //SAVING\r\n isOverhaulSaving: boolean;\r\n isOverhaulSaved: boolean;\r\n\r\n isAssessmentSaving: boolean;\r\n isAssessmentSaved: boolean;\r\n\r\n isRecommendedHoursSaving: boolean;\r\n isRecommendedHoursSaved: boolean;\r\n\r\n isAssessmentItemsSaving: boolean;\r\n isAssessmentItemsSaved: boolean;\r\n\r\n //DELETING\r\n isOverhaulDeleting: boolean;\r\n isOverhaulDeleted: boolean;\r\n\r\n //catInspectParsingDetails\r\n catInspectParsingDetails:string;\r\n}\r\n\r\nexport const initialState: State = {\r\n overview: null,\r\n overhaul: {\r\n assetOverhauls: null,\r\n overhaulReasons: null\r\n },\r\n assessments: null,\r\n\r\n overhaulTypes: null,\r\n\r\n intervals: {\r\n availableIntervals: null,\r\n upcomingIntervals: null\r\n },\r\n\r\n categories: null,\r\n riskLevels: null,\r\n\r\n isDrawerOpen: false,\r\n\r\n error: null,\r\n\r\n //LOADING\r\n isOverhaulLoading: false,\r\n isOverhaulLoaded: false,\r\n \r\n isOverhaulTypesLoading: false,\r\n isOverhaulTypesLoaded: false,\r\n \r\n isOverhaulIntervalsLoading: false,\r\n isOverhaulIntervalsLoaded: false,\r\n \r\n isAssessmentsLoading: false,\r\n isAssessmentsLoaded: false,\r\n \r\n isAssessmentCategoriesLoading: false,\r\n isAssessmentCategoriesLoaded: false,\r\n \r\n isRiskLevelsLoading: false,\r\n isRiskLevelsLoaded: false,\r\n \r\n isOverviewLoading: false,\r\n isOverviewLoaded: false,\r\n \r\n //CREATING\r\n isOverhaulCreating: false,\r\n isOverhaulCreated: false,\r\n \r\n isAssessmentCreating: false,\r\n isAssessmentCreated: false,\r\n \r\n //SAVING\r\n isOverhaulSaving: false,\r\n isOverhaulSaved: false,\r\n \r\n isAssessmentSaving: false,\r\n isAssessmentSaved: false,\r\n \r\n isRecommendedHoursSaving: false,\r\n isRecommendedHoursSaved: false,\r\n \r\n isAssessmentItemsSaving: false,\r\n isAssessmentItemsSaved: false,\r\n \r\n //DELETING\r\n isOverhaulDeleting: false,\r\n isOverhaulDeleted: false,\r\n catInspectParsingDetails:null\r\n\r\n\r\n\r\n};","import { isAssessmentCategoriesLoaded, isRiskLevelsLoaded } from './selectors';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n //Overhauls\r\n on(EntityActions.LoadEMOAssetOverhaul, (state) => ({\r\n ...state,\r\n isOverhaulLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulFail, (state, { error }) => ({\r\n ...state,\r\n isOverhaulLoading: false,\r\n isOverhaulLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulSuccess, (state, { overhaul }) => ({\r\n ...state,\r\n overhaul: overhaul,\r\n\r\n isOverhaulLoading: false,\r\n isOverhaulLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulTypes, (state) => ({\r\n ...state,\r\n isOverhaulTypesLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulTypesFail, (state, { error }) => ({\r\n ...state,\r\n isOverhaulTypesLoading: false,\r\n isOverhaulTypesLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulTypesSuccess, (state, { overhaulTypes }) => ({\r\n ...state,\r\n overhaulTypes: overhaulTypes,\r\n\r\n isOverhaulTypesLoading: false,\r\n isOverhaulTypesLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulIntervals, (state) => ({\r\n ...state,\r\n isOverhaulIntervalsLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulIntervalsFail, (state, { error }) => ({\r\n ...state,\r\n isOverhaulIntervalsLoading: false,\r\n isOVerhaulIntervalsLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetOverhaulIntervalsSuccess, (state, { intervals }) => ({\r\n ...state,\r\n intervals: {\r\n availableIntervals: intervals.availableIntervals,\r\n upcomingIntervals: intervals.upcomingIntervals\r\n },\r\n\r\n isOverhaulIntervalsLoading: false,\r\n isOVerhaulIntervalsLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.CreateEMOAssetOverhaul, (state) => ({\r\n ...state,\r\n isOverhaulCreating: true\r\n })),\r\n\r\n on(EntityActions.CreateEMOAssetOverhaulFail, (state, { error }) => ({\r\n ...state,\r\n isOverhaulCreating: false,\r\n isOverhaulCreated: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.CreateEMOAssetOverhaulSuccess, (state) => ({\r\n ...state,\r\n isOverhaulCreating: false,\r\n isOverhaulCreated: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetOverhaul, (state) => ({\r\n ...state,\r\n isOverhaulSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetOverhaulFail, (state, { error }) => ({\r\n ...state,\r\n isOverhaulSaving: false,\r\n isOverhaulSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetOverhaulSuccess, (state) => ({\r\n ...state,\r\n isOverhaulSaving: false,\r\n isOverhaulSaved: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.DeleteEMOAssetOverhaul, (state) => ({\r\n ...state,\r\n isOverhaulDeleting: true,\r\n isOverhaulDeleted: false\r\n })),\r\n\r\n on(EntityActions.DeleteEMOAssetOverhaulFail, (state, { error }) => ({\r\n ...state,\r\n isOverhaulDeleting: false,\r\n isOverhaulDeleted: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.DeleteEMOAssetOverhaulSuccess, (state) => ({\r\n ...state,\r\n isOverhaulDeleting: false,\r\n isOverhaulDeleted: true,\r\n error: null\r\n })),\r\n\r\n //Assessments\r\n on(EntityActions.LoadEMOAssetAssessments, (state) => ({\r\n ...state,\r\n isAssessmentsLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetAssessmentsFail, (state, { error }) => ({\r\n ...state,\r\n isAssessmentsLoading: false,\r\n isAssessmentsLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssetAssessmentsSuccess, (state, { assessments }) => ({\r\n ...state,\r\n assessments: assessments,\r\n\r\n isAssessmentsLoading: false,\r\n isAssessmentsLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.CreateEMONonOverhaulAssessment, (state) => ({\r\n ...state,\r\n isAssessmentCreating: true\r\n })),\r\n\r\n on(EntityActions.CreateEMONonOverhaulAssessmentFail, (state, { error }) => ({\r\n ...state,\r\n isAssessmentCreating: false,\r\n isAssessmentCreated: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.CreateEMONonOverhaulAssessmentSuccess, (state) => ({\r\n ...state,\r\n isAssessmentCreating: false,\r\n isAssessmentCreated: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessment, (state) => ({\r\n ...state,\r\n isAssessmentSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentFail, (state, { error }) => ({\r\n ...state,\r\n isAssessmentSaving: false,\r\n isAssessmentSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentSuccess, (state) => ({\r\n ...state,\r\n isAssessmentSaving: false,\r\n isAssessmentSaved: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentRecommendedHours, (state) => ({\r\n ...state,\r\n isRecommendedHoursSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentRecommendedHoursFail, (state, { error }) => ({\r\n ...state,\r\n isRecommendedHoursSaving: false,\r\n isRecommendedHoursSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentRecommendedHoursSuccess, (state) => ({\r\n ...state,\r\n isRecommendedHoursSaving: false,\r\n isRecommendedHoursSaved: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentItems, (state) => ({\r\n ...state,\r\n isAssessmentItemsSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentItemsFail, (state, { error }) => ({\r\n ...state,\r\n isAssessmentItemsSaving: false,\r\n isAssessmentItemsSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveEMOAssetAssessmentItemsSuccess, (state) => ({\r\n ...state,\r\n isAssessmentItemsSaving: false,\r\n isAssessmentItemsSaved: true,\r\n error: null\r\n })),\r\n \r\n on(EntityActions.LoadEMOAssessmentCategories, (state) => ({\r\n ...state,\r\n isAssessmentCategoriesLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssessmentCategoriesFail, (state, { error }) => ({\r\n ...state,\r\n isAssessmentCategoriesLoading: false,\r\n isAssessmentCategoriesLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMOAssessmentCategoriesSuccess, (state, { categories }) => ({\r\n ...state,\r\n categories: categories,\r\n\r\n isAssessmentCategoriesLoading: false,\r\n isAssessmentCategoriesLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadEMORiskLevels, (state) => ({\r\n ...state,\r\n isRiskLevelsLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEMORiskLevelsFail, (state, { error }) => ({\r\n ...state,\r\n isRiskLevelsLoading: false,\r\n isRiskLevelsLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMORiskLevelsSuccess, (state, { riskLevels }) => ({\r\n ...state,\r\n riskLevels: riskLevels,\r\n\r\n isRiskLevelsLoading: false,\r\n isRiskLevelsLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadEMOOverview, (state) => ({\r\n ...state,\r\n isOverviewLoading: true,\r\n isOverviewLoaded: false,\r\n })),\r\n\r\n on(EntityActions.LoadEMOOverviewFail, (state, { error }) => ({\r\n ...state,\r\n isOverviewLoading: false,\r\n isOverviewLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadEMOOverviewSuccess, (state, { overview }) => ({\r\n ...state,\r\n overview: overview,\r\n\r\n isOverviewLoading: false,\r\n isOverviewLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.OpenDrawer, (state) => ({\r\n ...state,\r\n isDrawerOpen: true\r\n })),\r\n\r\n on(EntityActions.CloseDrawer, (state) => ({\r\n ...state,\r\n isDrawerOpen: false\r\n })),\r\n on(EntityActions.SaveEMOAssessmentCatInspectRiskSuccess, (state, { catInspectParsingDetails}) => ({\r\n ...state,\r\n catInspectParsingDetails: catInspectParsingDetails\r\n })),\r\n on(EntityActions.UpdateCatInspectParsingDetails, (state, { catInspectParsingDetails} ) => ({\r\n ...state,\r\n catInspectParsingDetails: catInspectParsingDetails\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}","\r\n\r\nimport { AppColors } from '@rfv/modules/shared/types/app-colors';\r\n/* rfv */\r\nimport { AssetAssessment, AssessmentCategory, EMORiskLevels } from '@rfv/modules/dashboard/modules/emo/models';\r\n\r\n/* shared */\r\nimport { moment } from '@rfv/modules/shared/utils/moment';\r\n\r\n/* ngrx */\r\nimport { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport {\r\n OverviewHistory, OverviewHistoryDataSource, AssessmentHistory, OverviewSystemRating, OverhaulHistory, OverviewChartConfig\r\n} from './../../../dashboard/modules/emo/models/emo-overview.model';\r\nimport { Utilization } from '../assets';\r\n\r\n//primary selector\r\nexport const getState = createSelector(getFeatureState, state => state.emo);\r\n\r\n//table data selectors\r\nexport const getOverview = createSelector(\r\n getState, state =>\r\n state.overview?.map(overview => {\r\n return {\r\n id: overview.id,\r\n parentName: overview.parentName,\r\n name: overview.name,\r\n // vesselAndEngineName: overview.parentName + ' - ' + overview.name,\r\n currentHours: overview.currentHours + ' hours',\r\n totalRiskPercent: overview.totalRiskPercent + '%',\r\n riskName: overview.riskName,\r\n riskColor: '#' + overview.riskColor,\r\n utilization: overview.utilization + '%',\r\n\r\n recOverhaulDate: overview.upcomingOverhaulRecDate ? new Date(overview.upcomingOverhaulRecDate) : null, //sort by\r\n formattedRecOverhaulDate: overview.upcomingOverhaulRecDate ? formatDate(new Date(overview.upcomingOverhaulRecDate)) : null, //display by\r\n\r\n //overhaul\r\n overhaulHistory: overview.prevOverhaulId || overview.upcomingOverhaulIntervalId ?\r\n [\r\n {\r\n assetId: overview.id,\r\n prevOverhaulId: overview.prevOverhaulId,\r\n prevOverhaulHours: overview.prevOverhaulHours,\r\n prevOverhaulRecHours: overview.prevOverhaulRecHours, \r\n prevOverhaulTotRecHours: getPrevOverhaulTotRecHours(overview),\r\n prevOverhaulDate: formatDate(overview.prevOverhaulDate),\r\n prevOverhaulReason: overview.prevOverhaulReason, \r\n prevOverhaulNextIntervalStdHours: overview.prevAssessmentNextIntervalStdHours,\r\n prevOverhaulNextRecDate: calculatePrevOverhaulNextRecDate(overview)?.toString(),\r\n prevOverhaulType: overview.prevOverhaulType,\r\n upcomingOverhaulIntervalId: overview.upcomingOverhaulIntervalId,\r\n upcomingOverhaul: overview.upcomingOverhaul,\r\n upcomingOverhaulHours: overview.upcomingOverhaulHours,\r\n upcomingOverhaulScheduledHours: overview.upcomingOverhaulScheduledHours,\r\n upcomingOverhaulTypeId: overview.upcomingOverhaulTypeId || null,\r\n utilization: overview.utilization,\r\n upcomingOverhaulRecDate: new Date(overview.upcomingOverhaulRecDate),\r\n upcomingOverhaulStandardDate: calculateStandardOverhaulDate(overview),\r\n formattedNextOverhaulDate: formatDate(new Date(overview.upcomingOverhaulRecDate)),\r\n } as OverhaulHistory\r\n ] : [],\r\n\r\n //assessment\r\n assessmentHistory: overview.prevAssessmentId || overview.upcomingAssessmentIntervalId ?\r\n [\r\n {\r\n assetId: overview.id,\r\n prevAssessmentHours: overview.prevAssessmentHours,\r\n prevAssessmentRecHours: overview.prevAssessmentRecHours,\r\n prevAssessmentTotRecHours: getPrevAssessmentTotRecHours(overview),\r\n prevAssessmentId: overview.prevAssessmentId,\r\n prevAssessmentDate: formatDate(overview.prevAssessmentDate), \r\n prevAssessmentNextIntervalStdHours: overview.prevAssessmentNextIntervalStdHours,\r\n prevAssessmentType: overview.prevAssessmentType, \r\n prevAssessmentNextRecDate: calculatePrevAssessmentNextRecDate(overview)?.toString(),\r\n upcomingAssessmentIntervalId: overview.upcomingAssessmentIntervalId,\r\n upcomingAssessment: overview.upcomingAssessment,\r\n upcomingAssessmentHours: overview.upcomingAssessmentHours,//new\r\n upcomingAssessmentScheduledHours: overview.upcomingAssessmentScheduledHours,\r\n upcomingAssessmentDate: calculateUpcomingRecommendedAssessmentDate(overview),\r\n upcomingAssessmentTypeId: overview.upcomingAssessmentTypeId,\r\n utilization: overview.utilization,\r\n\r\n upcomingAssessmentStandardDate: calculateStandardAssessmentDate(overview),\r\n \r\n //system ratings and dynamic columns\r\n systemRatings: overview.systemRatings,\r\n ...addSystemRatingsAsKeys(overview.systemRatings)\r\n } as AssessmentHistory\r\n ] : []\r\n } as OverviewHistoryDataSource\r\n })\r\n);\r\n\r\nexport const getOverhaulState = createSelector(getState, state => state.overhaul);\r\nexport const getAssetOverhauls = createSelector(getOverhaulState, state =>\r\n state.assetOverhauls?.map(assetOverhaul => {\r\n return {\r\n ...assetOverhaul,\r\n formattedOverhaulDate: formatDate(assetOverhaul.overhaulDate)\r\n }\r\n })\r\n);\r\n\r\nexport const getEMORiskLevels = createSelector(getState, state => state.riskLevels);\r\nexport const getAssessmentCategories = createSelector(getState, state => state.categories);//get dynamic columns\r\nexport const getAssetAssessments = createSelector(\r\n getState,\r\n getAssessmentCategories,\r\n getEMORiskLevels,\r\n (state, categories, riskLevels) => state.assessments?.map(assessment => {\r\n const riskLevelIds = assessment.assetAssessmentItems.map(items => items.emoRiskLevelId);\r\n const highestPriorityOrder: number = riskLevels?.filter(riskLevel => riskLevelIds.includes(riskLevel.id)).map(riskLevel => riskLevel.priorityOrder).reduce((a, b) => Math.min(a, b));\r\n assessment = {\r\n ...assessment,\r\n formattedAssessmentDate: formatDate(assessment.overhaulDate),\r\n overallAssessmentRating: riskLevels?.find(riskLevel => riskLevel.priorityOrder === highestPriorityOrder).name,\r\n ratingColor: riskLevels?.find(riskLevel => riskLevel.priorityOrder === highestPriorityOrder).color,\r\n isCertified: !!assessment.certifiedBy,\r\n\r\n };\r\n\r\n\r\n\r\n return addCategoriesAsKeys(assessment, categories, riskLevels);\r\n })\r\n);\r\n\r\n//route selectors\r\nexport const getSelectedAssessment = createSelector(\r\n getAssetAssessments,\r\n fromRoot.Router.getQueryParam('assessmentId'),\r\n (state, assessmentId) => state?.find(assessment => assessment.id === +assessmentId)\r\n);\r\n\r\nexport const getSelectedAssetId = createSelector(\r\n fromRoot.Router.getQueryParam('assetId'), assetId => +assetId\r\n);\r\n\r\n//general selectors\r\nexport const getItemsByCategoryId = (categoryId: number, subCategoryId: number) => createSelector(\r\n getSelectedAssessment,\r\n (assessment) => assessment?.assetAssessmentItems.filter(item => item.emoCategoryId === categoryId && item.emoSubCategoryId === subCategoryId)\r\n);\r\n\r\nexport const getMaintenanceOverhaulTypes = createSelector(getState, state => state.overhaulTypes?.filter(type => type.isMaintenance));\r\nexport const getNonMaintenanceOverhaulTypes = createSelector(getState, state => state.overhaulTypes?.filter(type => !type.isMaintenance));\r\nexport const getOverhaulReasons = createSelector(getOverhaulState, state => state.overhaulReasons);\r\n\r\n//Overview\r\nexport const getChartConfigs = createSelector(\r\n getState,\r\n state => {\r\n return (state.overhaulTypes?.length > 0) ?\r\n [\r\n ...state.overhaulTypes.map(type => {\r\n return {\r\n id: type.id,\r\n name: 'Standard ' + type.name,\r\n color: '#' + type.color,\r\n stripes: false\r\n }\r\n }),\r\n ...state.overhaulTypes.map(type => {\r\n return {\r\n id: type.id,\r\n name: 'Extended ' + type.name,\r\n color: '#' + type.color,\r\n stripes: true\r\n }\r\n })\r\n ] : [];\r\n }\r\n);\r\n\r\nexport const getChartConfigColorByTypeId = (typeId: number) => createSelector(\r\n getChartConfigs,\r\n configs => configs?.find(config => config.id === typeId)?.color\r\n)\r\n\r\n//Overhaul\r\nexport const getOverhaulAvailableIntervals = (exceptionIntervalId: number) => createSelector(\r\n getState,\r\n getMaintenanceOverhaulTypes,\r\n getAssetOverhauls,\r\n (state, maintenanceOverhaulTypes, overhauls) => {\r\n let takenIntervalIds: number[] = overhauls?.map(overhaul => overhaul.emoOverhaulIntervalId);\r\n\r\n if (exceptionIntervalId)\r\n takenIntervalIds = takenIntervalIds.filter(id => id !== exceptionIntervalId);\r\n\r\n return state.intervals.availableIntervals?.filter(interval =>\r\n maintenanceOverhaulTypes.find(type => type.id === interval.emoOverhaulTypeId) &&\r\n takenIntervalIds.indexOf(interval.id) === -1\r\n );\r\n }\r\n\r\n);\r\n\r\n//Assessment\r\nexport const getAssessmentAvailableIntervals = createSelector(\r\n getState,\r\n getNonMaintenanceOverhaulTypes,\r\n getAssetAssessments,\r\n (state, nonMaintenanceOverhaulTypes, assessments) => {\r\n let takenIntervalIds: number[] = assessments?.map(assessment => assessment.emoOverhaulIntervalId);\r\n\r\n return state.intervals.availableIntervals?.filter(interval =>\r\n nonMaintenanceOverhaulTypes.find(type => type.id === interval.emoOverhaulTypeId) &&\r\n takenIntervalIds.indexOf(interval.id) === -1\r\n );\r\n }\r\n);\r\n\r\n//LOADING\r\nexport const isOverhaulLoading = createSelector(getState, state => state.isOverhaulLoading);\r\nexport const isOverhaulLoaded = createSelector(getState, state => state.isOverhaulLoaded);\r\n\r\nexport const isOverhaulTypesLoading = createSelector(getState, state => state.isOverhaulTypesLoading);\r\nexport const isOverhaulTypesLoaded = createSelector(getState, state => state.isOverhaulTypesLoaded);\r\n\r\nexport const isOverhaulIntervalsLoading = createSelector(getState, state => state.isOverhaulIntervalsLoading);\r\nexport const isOverhaulIntervalsLoaded = createSelector(getState, state => state.isOverhaulIntervalsLoaded);\r\n\r\nexport const isAssessmentsLoading = createSelector(getState, state => state.isAssessmentsLoading);\r\nexport const isAssessmentsLoaded = createSelector(getState, state => state.isAssessmentsLoaded);\r\n\r\nexport const isAssessmentCategoriesLoading = createSelector(getState, state => state.isAssessmentCategoriesLoading);\r\nexport const isAssessmentCategoriesLoaded = createSelector(getState, state => state.isAssessmentCategoriesLoaded);\r\n\r\nexport const isRiskLevelsLoading = createSelector(getState, state => state.isRiskLevelsLoading);\r\nexport const isRiskLevelsLoaded = createSelector(getState, state => state.isRiskLevelsLoaded);\r\n\r\nexport const isOverviewLoading = createSelector(getState, state => state.isOverviewLoading);\r\nexport const isOverviewLoaded = createSelector(getState, state => state.isOverviewLoaded);\r\n\r\n//CREATING\r\nexport const isOverhaulCreating = createSelector(getState, state => state.isOverhaulCreating);\r\nexport const isOverhaulCreated = createSelector(getState, state => state.isOverhaulCreated);\r\n\r\nexport const isAssessmentCreating = createSelector(getState, state => state.isAssessmentCreating);\r\nexport const isAssessmentCreated = createSelector(getState, state => state.isAssessmentCreated);\r\n\r\n//SAVING\r\nexport const isOverhaulSaving = createSelector(getState, state => state.isOverhaulSaving);\r\nexport const isOverhaulSaved = createSelector(getState, state => state.isOverhaulSaved);\r\n\r\nexport const isAssessmentSaving = createSelector(getState, state => state.isAssessmentSaving);\r\nexport const isAssessmentSaved = createSelector(getState, state => state.isAssessmentSaved);\r\n\r\nexport const isRecommendedHoursSaving = createSelector(getState, state => state.isRecommendedHoursSaving);\r\nexport const isRecommendedHoursSaved = createSelector(getState, state => state.isRecommendedHoursSaved);\r\n\r\nexport const isAssessmentItemsSaving = createSelector(getState, state => state.isAssessmentItemsSaving);\r\nexport const isAssessmentItemsSaved = createSelector(getState, state => state.isAssessmentItemsSaved);\r\n\r\n//DELETING\r\nexport const isOverhaulDeleting = createSelector(getState, state => state.isOverhaulDeleting);\r\nexport const isOverhaulDeleted = createSelector(getState, state => state.isOverhaulDeleted);\r\n\r\n\r\nexport const isDrawerOpen = createSelector(getState, state => state.isDrawerOpen);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const catInspectParsingDetails = createSelector(getState, state => state.catInspectParsingDetails);\r\n\r\n//functions\r\nexport function addCategoriesAsKeys(\r\n assessment: AssetAssessment,\r\n categories: AssessmentCategory[],\r\n riskLevels: EMORiskLevels[]\r\n) {\r\n const isIncomplete = assessment.assetAssessmentItems.find(item => !item.isConfirmed);\r\n\r\n assessment.completeItems = 0;\r\n assessment.totalItems = 0;\r\n\r\n categories?.forEach(category => {\r\n const categoryItems = assessment.assetAssessmentItems.filter(item => item.emoCategoryId === category.id);\r\n const completedItemsLength = categoryItems.filter(item => item.isConfirmed).length;\r\n const subCategoryIds = category.assessmentSubCategories.map(subcategory => subcategory.id);\r\n const riskLevelIds: number[] = assessment.assetAssessmentItems.filter(item => subCategoryIds.includes(item.emoSubCategoryId)).map(item => item.emoRiskLevelId);\r\n const percentageComplete = calculatePercentage(completedItemsLength, categoryItems.length);\r\n\r\n let highRiskLevel: EMORiskLevels;\r\n\r\n if (riskLevelIds.length != 0) {\r\n const highestPriorityOrder: number = riskLevels?.filter(riskLevel => riskLevelIds.includes(riskLevel.id)).map(riskLevel => riskLevel.priorityOrder).reduce((a, b) => Math.min(a, b));\r\n highRiskLevel = riskLevels?.find(riskLevel => riskLevel.priorityOrder === highestPriorityOrder);\r\n }\r\n\r\n assessment.completeItems += completedItemsLength;\r\n assessment.totalItems += categoryItems.length;\r\n\r\n assessment = {\r\n ...assessment,\r\n totalProgress: calculatePercentage(assessment.completeItems, assessment.totalItems),\r\n [category.name]: highRiskLevel?.name,//used for assessment history screen\r\n [category.name + 'Progress']: completedItemsLength > 0 ? percentageComplete + '%' : 0//used for assessment editor category progress\r\n }\r\n\r\n });\r\n\r\n assessment.statusColor = isIncomplete || assessment.totalItems === 0 ? AppColors.yellow_l : assessment.isClosed ? AppColors.black_l2 : AppColors.green;\r\n assessment.statusText = isIncomplete || assessment.totalItems === 0 ? 'Incomplete Assessments' : assessment.isClosed ? 'Certified Assessments' : 'Active Assessments';\r\n\r\n return assessment;\r\n}\r\n\r\nexport function addSystemRatingsAsKeys(\r\n ratings: OverviewSystemRating[],\r\n) {\r\n let keys = {};\r\n\r\n ratings?.forEach(rating => {\r\n\r\n keys = {\r\n ...keys,\r\n [rating.emoCategory]: rating.riskName\r\n }\r\n });\r\n\r\n return keys;\r\n}\r\n\r\nexport function calculatePercentage(complete: number, total: number) {\r\n return Math.round((complete / total) * 100);\r\n}\r\n\r\n//TODO: Myer - need cleanup\r\n\r\nexport function calculatePrevOverhaulNextRecDate(overview: OverviewHistory) {\r\n \r\n let resultDateTime = new Date(overview.prevOverhaulDate); \r\n resultDateTime.setHours(resultDateTime.getHours() + ((overview.prevOverhaulRecHours + overview.prevOverhaulNextIntervalStdHours - overview.prevOverhaulStdHours)/getUtilization(overview)));\r\n \r\n return overview.prevOverhaulId ? formatDate(resultDateTime) : null;\r\n}\r\n\r\nexport function calculatePrevAssessmentNextRecDate(overview: OverviewHistory) {\r\n \r\n let resultDateTime = new Date(overview.prevAssessmentDate); \r\n resultDateTime.setHours(resultDateTime.getHours() + ((overview.prevAssessmentRecHours + overview.prevAssessmentNextIntervalStdHours - overview.prevAssessmentStdHours)/getUtilization(overview)));\r\n\r\n return overview.prevAssessmentType ? formatDate(resultDateTime) : null;\r\n}\r\n\r\nexport function calculateUpcomingRecommendedAssessmentDate(overview: OverviewHistory) {\r\n const currentDate = new Date();\r\n\r\n return overview.upcomingAssessment ? new Date(currentDate.setHours((currentDate.getHours() + ((overview.upcomingAssessmentScheduledHours - overview.currentHours) / getUtilization(overview))))) : null;\r\n}\r\n\r\n\r\nexport function calculateStandardOverhaulDate(overview: OverviewHistory) {\r\n const currentDate = new Date();\r\n\r\n return overview.upcomingAssessment ? new Date(currentDate.setHours((currentDate.getHours() + ((overview.upcomingOverhaulHours - overview.currentHours) / getUtilization(overview))))) : null;\r\n}\r\n\r\nexport function calculateStandardAssessmentDate(overview: OverviewHistory) {\r\n const currentDate = new Date();\r\n\r\n return overview.upcomingAssessment ? new Date(currentDate.setHours((currentDate.getHours() + ((overview.upcomingAssessmentHours - overview.currentHours) / getUtilization(overview))))) : null;\r\n}\r\n\r\n\r\nexport function formatDate(date: Date) {\r\n return date ? moment(date).format('MM/DD/YYYY') : null;\r\n}\r\n\r\nexport function getUtilization(overview: OverviewHistory) {\r\n return overview.utilization == 0 ? 0.01 : overview.utilization / 100;\r\n}\r\n\r\nexport function getPrevOverhaulTotRecHours(overview: OverviewHistory) {\r\n return overview.prevOverhaulHours + overview.prevOverhaulRecHours + overview.prevOverhaulNextIntervalStdHours - overview.prevOverhaulStdHours;\r\n}\r\n\r\nexport function getPrevAssessmentTotRecHours(overview: OverviewHistory) {\r\n return overview.prevAssessmentHours + overview.prevAssessmentRecHours + overview.prevAssessmentNextIntervalStdHours - overview.prevAssessmentStdHours;\r\n}","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventCode } from '../../models/event-code';\r\n\r\nexport const Load = createAction('[Core] Load Event Codes');\r\nexport const LoadFail = createAction('[Core] Load Event Codes Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load Event Codes Success', props<{\r\n eventCodes: EventCode[]\r\n}>());\r\n\r\nexport const SaveEventCodes = createAction('[Runtime Settings] Save Event Codes',\r\n (eventCodes: EventCode[]) => ({ eventCodes }));\r\n\r\nexport const SaveEventCodesFail = createAction('[Runtime Settings] Save Event Codes Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const SaveEventCodesSuccess = createAction('[Runtime Settings] Save Event Codes Success');","import { EventCodeModel } from '@rfv/modules/dashboard/modules/runtime-settings/models/event-code-edit.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { EventCode } from '../models/event-code';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EventCodesService {\r\n constructor(private _http: HttpClient) { }\r\n\r\n getEventCode() {\r\n return this._http.get(`/v1/RuntimeSettings/eventCode`);\r\n }\r\n\r\n saveEventCodes(eventCodes: EventCode[]) {\r\n const eventCodesModel: EventCodeModel[] = eventCodes.map(code => {\r\n return {\r\n Id: code.Id,\r\n Name: code.Name,\r\n OriginalName: code.OriginalName,\r\n AssignedPartyId: code.AssignedEventPartyId,\r\n IncludeEvents: code.IncludeEvents,\r\n MinimumTimeThreshold: code.MinimumTimeThreshold\r\n }\r\n })\r\n const url = '/v1/RuntimeSettings/eventCode';\r\n return this._http.put(url, eventCodesModel);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as EventCodeActions from './actions';\r\nimport { EventCodesService } from '../../services/event-codes.service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private actions$: Actions,\r\n private eventCodeService: EventCodesService\r\n ) { }\r\n\r\n\r\n public load$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(EventCodeActions.Load),\r\n switchMap(_ => this.eventCodeService.getEventCode().pipe(\r\n map(eventCodes => EventCodeActions.LoadSuccess({ eventCodes }),\r\n catchError(error => of(EventCodeActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n public saveEventCodes$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(EventCodeActions.SaveEventCodes),\r\n switchMap(action => this.eventCodeService.saveEventCodes(action.eventCodes)\r\n .pipe(\r\n switchMap(_ => [\r\n EventCodeActions.SaveEventCodesSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n catchError(error => of(EventCodeActions.SaveEventCodesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventCode } from '../../models/event-code';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: eventCode => eventCode.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EventCodeActions from './actions';\r\n\r\nconst eventCodeReducer = createReducer(\r\n initialState,\r\n\r\n on(EventCodeActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EventCodeActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(EventCodeActions.LoadSuccess, (state, { eventCodes }) => adapter.setAll(eventCodes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eventCodeReducer(state, action);\r\n}\r\n","import { EventCode } from './../../models/event-code';\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\nimport * as fromEventParties from '../event-parties';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.eventCodes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getEventCodesWithColor = createSelector(\r\n getAll,\r\n fromEventParties.getAll,\r\n (codes, parties) => codes.map(code => {\r\n const partyColor = parties.find(party => party.Id === code.AssignedEventPartyId)?.Color;\r\n const defaultParty = parties.find(party => party.IsDefault);\r\n return {\r\n ...code,\r\n AssignedEventParty: code.AssignedEventParty ? code.AssignedEventParty : defaultParty.Name + ' (Default)',\r\n Color: partyColor ? `#${partyColor}` : `#${defaultParty.Color}`\r\n } as EventCode\r\n })\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventParty } from '../../models/event-party';\r\n\r\nexport const Load = createAction('[Core] Load Event Parties');\r\n\r\nexport const LoadFail = createAction('[Core] Load Event Parties Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load Event Parties Success', props<{\r\n eventParties: EventParty[]\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { EventParty } from '../models/event-party';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EventPartiesService {\r\n constructor(private http: HttpClient) {}\r\n\r\n loadEventParties() {\r\n return this.http.get(`/v1/RuntimeSettings/eventParty`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EventPartiesActions from './actions';\r\nimport { EventPartiesService } from '../../services/event-parties.service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private actions$: Actions,\r\n private evPartiesSrv: EventPartiesService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(EventPartiesActions.Load),\r\n switchMap(_ => this.evPartiesSrv.loadEventParties().pipe(\r\n map(eventParties => EventPartiesActions.LoadSuccess({ eventParties }),\r\n catchError(error => of(EventPartiesActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EventPartiesActions from './actions';\r\n\r\nconst eventPartiesReducer = createReducer(\r\n initialState,\r\n\r\n on(EventPartiesActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EventPartiesActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(EventPartiesActions.LoadSuccess, (state, { eventParties }) => adapter.setAll(eventParties, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eventPartiesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.eventParties);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getDefault = createSelector(getAll, state => state.find(v=> v.IsDefault === true));\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventParty } from '../../models/event-party';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: eventParties => eventParties.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { Dashboard } from './model';\r\n\r\nexport const Load = createAction('[UserFeatureAccess] Load Dashboards');\r\n\r\nexport const LoadFail = createAction('[UserFeatureAccess] Load Dashboards Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[UserFeatureAccess] Load Dashboards Success', props<{\r\n dashboards: Dashboard[]\r\n}>());","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { Dashboard } from './model';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: dashboard => dashboard.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n})","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DashboardsActions from './actions';\r\n\r\nconst dashboardsReducer = createReducer(\r\n initialState,\r\n \r\n on(DashboardsActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(DashboardsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(DashboardsActions.LoadSuccess, (state, { dashboards }) => adapter.setAll(dashboards, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return dashboardsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getFeatureAccessState = createSelector(getFeatureState, state => state.featureAccess);","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureAccessState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getDashboardsState = createSelector(getFeatureAccessState, state => state.dashboards);\r\n\r\nexport const {\r\n selectIds: getIds,\r\n selectEntities: getEntities,\r\n selectAll: getAll,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getDashboardsState);\r\n\r\nexport const isLoaded = createSelector(getDashboardsState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getDashboardsState, state => state.isLoading);\r\nexport const getError = createSelector(getDashboardsState, state => state.error);","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as fromDashboards from './dashboards';\r\n\r\nimport { FeatureAccessService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _featureAccessService: FeatureAccessService\r\n ) { }\r\n\r\n public loadDashboards$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDashboards.Load),\r\n switchMap(action => this._featureAccessService.loadAllUserDashboards().pipe(\r\n map(dashboards => fromDashboards.LoadSuccess({ dashboards })),\r\n catchError(error => of(fromDashboards.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n}","import { Action, combineReducers } from '@ngrx/store';\r\n\r\nimport * as fromDashboards from './dashboards';\r\n\r\nimport { State } from './state';\r\n\r\nconst userFeatureAccessReducer = combineReducers({\r\n dashboards: fromDashboards.reducer\r\n});\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userFeatureAccessReducer(state, action);\r\n}","import * as moment from \"moment\";\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models'; \r\nimport { AggregateFleetVitalsResponse } from \"@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model\";\r\n\r\nexport const LoadFleetVital = createAction('[Core] Load Fleet Vitals', (sitemapGroupId: number, startDate: moment.Moment, endDate: moment.Moment) => ({ sitemapGroupId, startDate, endDate }));\r\nexport const LoadFleetVitalFail = createAction('[Core] Load Fleet Vitals Fail', (error: ApiError) => ({ error }));\r\nexport const LoadFleetVitalSuccess = createAction('[Core] Load Fleet Vitals Success', (response: AggregateFleetVitalsResponse) => ({ response }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nimport { FleetVitalsService, } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _fleetVitalsService: FleetVitalsService,\r\n ) { }\r\n\r\n public getFleetVitals$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadFleetVital),\r\n switchMap(action => this._fleetVitalsService.getFleetVitals(action.sitemapGroupId, action.startDate, action.endDate).pipe(\r\n map(entity => EntityActions.LoadFleetVitalSuccess(entity)),\r\n catchError(error => of(EntityActions.LoadFleetVitalFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { SitemapFleetVitalsData } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n fleetVitals: SitemapFleetVitalsData[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n columnConfigs: { [calculationTypeId: number]: string };\r\n}\r\n\r\nexport const initialState: State = ({\r\n fleetVitals: [],\r\n columnConfigs: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadFleetVital, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(EntityActions.LoadFleetVitalFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadFleetVitalSuccess, (state, { response }) => ({\r\n ...state,\r\n fleetVitals: response?.sitemapFleetVitalsData || null,\r\n columnConfigs: response?.parentConfigs || {},\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { CalculationResult, ColumnConfig, FleetVitalsColumn, MappedCalculationResults, SitemapFleetVitalsData } from '@rfv/modules/dashboard/modules/fleet-Vitals/models/fleet-vitals.model';\r\nimport { getFeatureState } from '../selectors';\r\nimport moment from 'moment';\r\n\r\nimport * as fromSitemapGroups from '../sitemap-groups';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.fleetVitals);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getFleetVitals = createSelector(getState, state => state.fleetVitals);\r\n\r\nexport const getFleetVitalsTable = createSelector(\r\n getFleetVitals,\r\n fromSitemapGroups.getEntities,\r\n (fleetVitals, sitemapEntities) => {\r\n return fleetVitals?.reduce((acc, sitemap) => {\r\n acc.push({\r\n ...sitemap,\r\n ConnectivityStatus: sitemap.IsOnline ? 'Online' : 'Offline',\r\n TimeSinceLastPost: sitemap?.DatapointLastpost ? moment(sitemap.DatapointLastpost).fromNow() : null,\r\n LastpostSearch: sitemap?.DatapointLastpost ? moment(sitemap.DatapointLastpost).format('MM/DD/YYYY hh:mm:ss A') : null,\r\n AssetTypeId: sitemapEntities[sitemap.SitemapGroupId]?.assetTypeId,\r\n\r\n AssetFleetVitalsData: sitemap.AssetFleetVitalsData.map(asset => ({\r\n ...asset,\r\n ConnectivityStatus: asset.IsOnline ? 'Online' : 'Offline',\r\n TimeSinceLastPost: asset?.DatapointLastpost ? moment(asset.DatapointLastpost).fromNow() : null,\r\n LastpostSearch: asset?.DatapointLastpost ? moment(asset?.DatapointLastpost).format('MM/DD/YYYY hh:mm:ss A') : null\r\n }))\r\n })\r\n return acc;\r\n }, [] as SitemapFleetVitalsData[]) || null;\r\n }\r\n);\r\n\r\nexport const getSitemapDynamicColumns = createSelector(\r\n getFleetVitals,\r\n (fleetVitals) => [\r\n ...(\r\n fleetVitals?.reduce((acc, sitemap) => {\r\n sitemap.SitemapCalculationResults.forEach(calc => {\r\n if (!acc.has(calc.CalculationId))\r\n acc.set(calc.CalculationId, {\r\n key: calc.CalculationId.toString(),\r\n header: calc.CalculationName,\r\n displayOrder: calc.DisplayOrder,\r\n calculationTypeId: calc.CalculationTypeId\r\n });\r\n });\r\n return acc;\r\n }, new Map()) || []\r\n ).values()\r\n ].sort((a, b) => {\r\n if (a.displayOrder === b.displayOrder)\r\n return a.header.localeCompare(b.header);\r\n\r\n return a.displayOrder - b.displayOrder;\r\n })\r\n);\r\n\r\nexport const getAssetColumns = createSelector(\r\n getFleetVitals,\r\n (fleetVitals) => [\r\n ...(\r\n fleetVitals?.reduce((acc, sitemap) => {\r\n sitemap.AssetFleetVitalsData.forEach(asset => {\r\n asset.AssetCalculationResults.forEach(calc => {\r\n if (!acc.has(calc.CalculationId))\r\n acc.set(calc.CalculationId, {\r\n key: calc.CalculationId.toString(),\r\n header: calc.CalculationName,\r\n displayOrder: calc.DisplayOrder,\r\n calculationTypeId: calc.CalculationTypeId\r\n });\r\n });\r\n });\r\n return acc;\r\n }, new Map()) || []\r\n ).values()\r\n ].sort((a, b) => {\r\n if (a.displayOrder === b.displayOrder)\r\n return a.header.localeCompare(b.header);\r\n\r\n return a.displayOrder - b.displayOrder;\r\n })\r\n);\r\n\r\nexport const getColumnConfigs = createSelector(getState, state => {\r\n\r\n const { columnConfigs } = state;\r\n\r\n if (!columnConfigs)\r\n return null;\r\n\r\n return Object.keys(columnConfigs)?.reduce((config, key) => {\r\n config[+key] = JSON.parse(columnConfigs[key]) as ColumnConfig\r\n return config\r\n }, {} as { [calculationTypeId: number]: ColumnConfig }) || {};\r\n\r\n});\r\n\r\n\r\nexport const getCalculationResults = createSelector(getFleetVitals, data => {\r\n\r\n let mappedResults = {} as MappedCalculationResults;\r\n\r\n if (!data) return null\r\n\r\n const getCalculations = (results: CalculationResult[]) => {\r\n let calculations: { [key: number]: CalculationResult } = {}\r\n\r\n results.reduce((calculations, result) => {\r\n calculations[+result.CalculationId] = result;\r\n return calculations\r\n\r\n }, calculations as { [key: number]: CalculationResult })\r\n return calculations\r\n }\r\n\r\n for (let sitemap of data) {\r\n let calculations = getCalculations(sitemap.SitemapCalculationResults);\r\n\r\n mappedResults[`${sitemap.CustomerId}-${sitemap.SitemapGroupId}`] = calculations;\r\n\r\n for (let asset of sitemap.AssetFleetVitalsData) {\r\n let assetCalculations = getCalculations(asset.AssetCalculationResults);\r\n mappedResults[`${sitemap.CustomerId}-${sitemap.SitemapGroupId}-${asset.AssetId}`] = assetCalculations;\r\n }\r\n }\r\n return mappedResults\r\n});","import { createAction } from '@ngrx/store';\r\nimport { ApiError, GaugeType } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Gauge Types Load')\r\nexport const LoadFail = createAction('[Core] Gauge Types Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Gauge Types Load Success', (entities: GaugeType[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as GaugeTypeActions from './actions';\r\n\r\nimport { GaugeTypeService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _gaugeTypeService: GaugeTypeService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GaugeTypeActions.Load),\r\n switchMap(action => this._gaugeTypeService.get().pipe(\r\n map(items => GaugeTypeActions.LoadSuccess(items)),\r\n catchError(error => of(GaugeTypeActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, GaugeType } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: gaugeType => gaugeType.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as GaugeTypeActions from './actions';\r\n\r\nconst gaugeTypesReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(GaugeTypeActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(GaugeTypeActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(GaugeTypeActions.LoadFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return gaugeTypesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.gaugeTypes)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\nimport { ApiError, Geofence } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Load Geofences', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadFail = createAction('[Core] Load Geofences Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Geofences Success', (entities: Geofence[]) => ({ entities }));\r\n\r\n// Save\r\nexport const Save = createAction('[Core] Save Geofence', (geofence: Geofence, successCallback: Function = null) => ({ geofence, successCallback }));\r\nexport const SaveFail = createAction('[Core] Save Geofence Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Save Geofence Success', (geofenceId: number, geofence: Geofence, callback: Function = null) => ({ geofenceId, geofence, callback }));\r\n\r\n// Delete\r\nexport const Delete = createAction('[Core] Delete Geofence', (geofenceId: number) => ({ geofenceId }));\r\nexport const DeleteFail = createAction('[Core] Delete Geofence Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteSuccess = createAction('[Core] Delete Geofence Success', (geofenceId: number) => ({ geofenceId }));\r\n\r\n// Select\r\nexport const Select = createAction('[Core] Select Geofence', (geofenceId: number) => ({ geofenceId }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as GeofenceActions from './actions';\r\n\r\nimport { GeofenceService } from '@rfv/modules/core/services';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _geofenceService: GeofenceService,\r\n private _store: Store\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeofenceActions.Load),\r\n withLatestFrom(this._store.select(fromDashboard.getSelectedSitemapGroupId)),\r\n switchMap(([ action, sitemapGroupId ]) => this._geofenceService.get(action.sitemapGroupId || sitemapGroupId).pipe(\r\n map(items => GeofenceActions.LoadSuccess(items)),\r\n catchError(error => of(GeofenceActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public save$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeofenceActions.Save),\r\n switchMap(action => this._geofenceService.save(action.geofence).pipe(\r\n map(geofenceId => GeofenceActions.SaveSuccess(geofenceId, action.geofence, action.successCallback)),\r\n catchError(error => of(GeofenceActions.SaveFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeofenceActions.SaveSuccess),\r\n tap(action => action.callback()),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Geofence saved.',\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public saveFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeofenceActions.SaveFail),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Failed to save geofence. ' + (action.error.message ? action.error.message : (action.error ? action.error : '')),\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeofenceActions.Delete),\r\n switchMap(action => this._geofenceService.delete(action.geofenceId).pipe(\r\n map(_ => GeofenceActions.DeleteSuccess(action.geofenceId)),\r\n catchError(error => of(GeofenceActions.SaveFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(GeofenceActions.DeleteSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Geofence deleted.',\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Geofence } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isSaving: boolean;\r\n isDeleting: boolean;\r\n\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: geofence => geofence.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaving: false,\r\n isDeleting: false, \r\n\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as GeofenceActions from './actions';\r\n\r\nconst gaugeTypesReducer = createReducer(\r\n initialState,\r\n\r\n // Load\r\n on(GeofenceActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(GeofenceActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(GeofenceActions.LoadSuccess, (state, { entities }) => adapter.setAll(entities, {\r\n ...state,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n // Save\r\n on(GeofenceActions.Save, (state, { geofence }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(GeofenceActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(GeofenceActions.SaveSuccess, (state, { geofenceId, geofence }) => adapter.setOne({\r\n ...geofence,\r\n Id: geofenceId\r\n }, {\r\n ...state,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n // Delete\r\n on(GeofenceActions.Delete, (state, { geofenceId }) => adapter.removeOne(geofenceId, {\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(GeofenceActions.DeleteFail, (state, { error }) => ({\r\n ...state,\r\n isDeleting: false,\r\n error\r\n })),\r\n\r\n on(GeofenceActions.DeleteSuccess, (state, { geofenceId }) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: null\r\n })),\r\n\r\n // Select\r\n on(GeofenceActions.Select, (state, { geofenceId }) => ({\r\n ...state,\r\n selectedId: geofenceId\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return gaugeTypesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\nimport { IMapGeoFence } from '@rfv/modules/involve/map/geofence';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.geofences)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\nexport const getSelected = createSelector(getSelectedId, getEntities, (selectedId, entities) => entities[selectedId]);\r\n\r\nexport const getSelectedMany = (selectedIds: number[]) => createSelector(getAll, (entities) => entities.filter(entity => selectedIds.indexOf(entity.Id) > -1));\r\n\r\nexport const getMapGeoFences = createSelector(\r\n getAll,\r\n (geo): IMapGeoFence[] => {\r\n return geo.map((geoFence, i) => ({\r\n ref: i,\r\n name: geoFence?.Name ? geoFence.Name : '',\r\n fillColor: '#' + geoFence.FillColor,\r\n lineColor: '#' + geoFence.LineColor,\r\n alpha: geoFence.Alpha,\r\n vertices: geoFence.GeoFencePoints.map(point => ({ lat: point.Latitude, lng: point.Longitude })),\r\n hideMarkers: false,\r\n markers: [],\r\n isDisabled: geoFence.IsDisabled\r\n }));\r\n });\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, GlobalColor } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load GlobalColors');\r\n\r\nexport const LoadFail = createAction('[Core] Load GlobalColors Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load GlobalColors Success', props<{\r\n globalColors: GlobalColor[]\r\n}>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlarmTestActions from './actions';\r\n\r\nimport { GlobalColorService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _globalColorService: GlobalColorService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmTestActions.Load),\r\n switchMap(action => this._globalColorService.getAll().pipe(\r\n map(globalColors => AlarmTestActions.LoadSuccess({ globalColors }),\r\n catchError(error => of(AlarmTestActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, GlobalColor } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: globalColor => globalColor.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as GlobalColorActions from './actions';\r\n\r\nconst globalColorsReducer = createReducer(\r\n initialState,\r\n\r\n on(GlobalColorActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(GlobalColorActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(GlobalColorActions.LoadSuccess, (state, { globalColors }) => adapter.setAll(globalColors, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return globalColorsReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.globalColors);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { JobTitle } from '@rfv/modules/dashboard/modules/user-admin/store/models/job-title';\r\n\r\nexport const Load = createAction('[Core] Load Global Job Titles');\r\nexport const LoadFail = createAction('[Core] Load Global Job Titles Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Global Job Titles Success', (globalJobTitles: JobTitle[]) => ({ globalJobTitles }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as JobTitlesActions from './actions';\r\nimport { JobTitleService } from '../../services/job-title.service';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _JobTitleService: JobTitleService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(JobTitlesActions.Load),\r\n switchMap(action => this._JobTitleService.getGlobalJobTitles().pipe(\r\n map(jobTitles => JobTitlesActions.LoadSuccess(jobTitles)),\r\n catchError(error => of(JobTitlesActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\nimport { JobTitle } from '@rfv/modules/dashboard/modules/user-admin/store/models/job-title';\r\n\r\nexport interface State {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n globalJobTitles: JobTitle[];\r\n error: ApiError;\r\n}\r\n\r\n\r\nexport const initialState: State = ({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n globalJobTitles: null,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as jobTitle from './actions';\r\n\r\nconst alarmGroupsReducer = createReducer(\r\n initialState,\r\n\r\n on(jobTitle.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(jobTitle.LoadSuccess, (state, jobTitles) => ({\r\n ...state,\r\n globalJobTitles: jobTitles.globalJobTitles,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmGroupsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.globalJobTitles);\r\n\r\nexport const getGlobalJobTitles = createSelector(getState, state => state.globalJobTitles);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, GlobalTimezone } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load GlobalTimezones');\r\n\r\nexport const LoadFail = createAction('[Core] Load GlobalTimezones Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load GlobalTimezones Success', props<{\r\n globalTimezones: GlobalTimezone[]\r\n}>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as AlarmTestActions from './actions';\r\n\r\nimport { GlobalTimezoneService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _globalTimezoneService: GlobalTimezoneService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmTestActions.Load),\r\n switchMap(action => this._globalTimezoneService.getAll().pipe(\r\n map(globalTimezones => AlarmTestActions.LoadSuccess({ globalTimezones }),\r\n catchError(error => of(AlarmTestActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, GlobalTimezone } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: GlobalTimezone => GlobalTimezone.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as GlobalTimezoneActions from './actions';\r\n\r\nconst globalTimezonesReducer = createReducer(\r\n initialState,\r\n\r\n on(GlobalTimezoneActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(GlobalTimezoneActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(GlobalTimezoneActions.LoadSuccess, (state, { globalTimezones }) => adapter.setAll(globalTimezones, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return globalTimezonesReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.globalTimezones);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { GPSConfiguration } from '@rfv/modules/dashboard/modules/trip-reports/models/gps-configuration.model';\r\nimport { GPSPrimaryAsset } from '@rfv/modules/dashboard/modules/trip-reports/models/gps-primary-asset.model';\r\n\r\n\r\nexport const LoadGPSConfig = createAction('[Core] Load GPS Config', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadGPSConfigFail = createAction('[Core] Load GPS Config Fail', (error: ApiError) => ({ error }));\r\nexport const LoadGPSConfigSuccess = createAction('[Core] Load GPS Config Success', (gpsConfig: GPSConfiguration[]) => ({ gpsConfig }));\r\n\r\nexport const SaveSitemapPrimaryAsset = createAction('[Core] Save Sitemap Primary Asset', (sitemapGroupId: number, primaryAsset: GPSPrimaryAsset) => ({ sitemapGroupId, primaryAsset }));\r\nexport const SaveSitemapPrimaryAssetFail = createAction('[Core] Save Sitemap Primary Asset Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSitemapPrimaryAssetSuccess = createAction('[Core] Save Sitemap Primary Asset Success');\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\nimport * as AssociatedActions from '../trip-config/actions';\r\n\r\nimport { TripReportsService, } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _tripReportsService: TripReportsService,\r\n ) { }\r\n\r\n public getGPSConfig$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadGPSConfig),\r\n switchMap(action => this._tripReportsService.getGPSConfig(action.sitemapGroupId).pipe(\r\n map(entity => EntityActions.LoadGPSConfigSuccess(entity)),\r\n catchError(error => of(EntityActions.LoadGPSConfigFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveSitemapPrimaryAsset$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveSitemapPrimaryAsset),\r\n switchMap(action => this._tripReportsService.saveSitemapPrimaryAsset(action.sitemapGroupId, action.primaryAsset).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveSitemapPrimaryAssetSuccess(),\r\n EntityActions.LoadGPSConfig(action.sitemapGroupId),\r\n //AssociatedActions.LoadTripConfig(action.sitemapGroupId),\r\n\r\n ]),\r\n catchError(error => of(EntityActions.SaveSitemapPrimaryAssetFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { GPSConfiguration } from '@rfv/modules/dashboard/modules/trip-reports/models/gps-configuration.model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n gpsConfig: GPSConfiguration[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n //SAVING\r\n isPrimaryAssetSaving: boolean;\r\n isPrimaryAssetSaved: boolean;\r\n}\r\n\r\nexport const initialState: State = ({\r\n gpsConfig: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n //SAVING\r\n isPrimaryAssetSaving: false,\r\n isPrimaryAssetSaved: false,\r\n});\r\n\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadGPSConfig, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadGPSConfigFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadGPSConfigSuccess, (state, { gpsConfig }) => ({\r\n ...state,\r\n gpsConfig: gpsConfig,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveSitemapPrimaryAsset, (state) => ({\r\n ...state,\r\n isPrimaryAssetSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveSitemapPrimaryAssetFail, (state, { error }) => ({\r\n ...state,\r\n isPrimaryAssetSaving: false,\r\n isPrimaryAssetSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveSitemapPrimaryAssetSuccess, (state) => ({\r\n ...state,\r\n isPrimaryAssetSaving: false,\r\n isPrimaryAssetSaved: true,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.gpsConfig);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getGPSConfig = createSelector(getState, state => state.gpsConfig);\r\n\r\n//SAVING\r\nexport const isPrimaryAssetSaving = createSelector(getState, state => state.isPrimaryAssetSaving);\r\nexport const isPrimaryAssetSaved = createSelector(getState, state => state.isPrimaryAssetSaved);\r\n\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError, Icon } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Icons Load')\r\nexport const LoadFail = createAction('[Core] Icons Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Icons Load Success', (entities: Icon[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as IconActions from './actions';\r\n\r\nimport { IconService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _iconService: IconService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(IconActions.Load),\r\n switchMap(action => this._iconService.get().pipe(\r\n map(items => IconActions.LoadSuccess(items)),\r\n catchError(error => of(IconActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Icon } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: icon => icon.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as IconActions from './actions';\r\n\r\nconst iconsReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(IconActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(IconActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(IconActions.LoadFail, (state, payload) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return iconsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { Icon } from '../../models';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.icons)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getByCode = createSelector(\r\n getAll,\r\n (icons: Icon[], props: { code: string }) => icons?.find(icon => icon.CodeTag === props.code) || null\r\n);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, Industry } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Industries');\r\nexport const LoadFail = createAction('[Core] Load Industries Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadSuccess = createAction('[Core] Load Industries Success', (industries: Industry[]) => ({ payload: { industries } }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as IndustryActions from './actions';\r\n\r\nimport { IndustryService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _industryService: IndustryService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(IndustryActions.Load),\r\n switchMap(action => this._industryService.getAll().pipe(\r\n map(industries => IndustryActions.LoadSuccess(industries),\r\n catchError(error => of(IndustryActions.LoadFail(error)))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Industry } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: industry => industry.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as IndustryActions from './actions';\r\n\r\nconst industryReducer = createReducer(\r\n initialState,\r\n\r\n on(IndustryActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(IndustryActions.LoadFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(IndustryActions.LoadSuccess, (state, { payload }) => adapter.setAll(payload.industries, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return industryReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.industries);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, LocationGPSHistory } from '@rfv/modules/core/models';\r\n\r\nexport const LoadGPSHistoryByAssetId = createAction('[Core] Load Location GPS History by assetId', (assetId: number, startDate: any, endDate: any) => ({ assetId, startDate, endDate }));\r\nexport const LoadGPSHistoryByAssetIdFail = createAction('[Core] Load Location GPS History by assetId Fail', (error: ApiError) => ({ error }));\r\nexport const LoadGPSHistoryByAssetIdSuccess = createAction('[Core] Load Location GPS History by assetId Success', (gpsHistory: LocationGPSHistory[]) => ({ gpsHistory }));\r\n\r\nexport const LoadGPSHistory = createAction('[Core] Load Location GPS History', (startDate: any, endDate: any) => ({ startDate, endDate }));\r\nexport const LoadGPSHistoryFail = createAction('[Core] Load Location GPS History Fail', (error: ApiError) => ({ error }));\r\nexport const LoadGPSHistorySuccess = createAction('[Core] Load Location GPS History Success', (gpsHistory: LocationGPSHistory[]) => ({ gpsHistory }));\r\n\r\nexport const Clear = createAction('[Core] Clear Location GPS History');\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport { LocationService, } from '@rfv/modules/core/services';\r\nimport { Store } from '@ngrx/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _locationService: LocationService,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public getGPSHistory$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadGPSHistory),\r\n withLatestFrom(this._store$.select(fromDashboard.getSelectedAssetId)),\r\n switchMap(([action, assetId]) => this._locationService.getAssetGPSHistory(assetId, action.startDate, action.endDate).pipe(\r\n map(units => EntityActions.LoadGPSHistorySuccess(units)),\r\n catchError(error => of(EntityActions.LoadGPSHistoryFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public getGPSHistoryByAssetId$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadGPSHistoryByAssetId),\r\n switchMap(action => this._locationService.getAssetGPSHistory(action.assetId, action.startDate, action.endDate).pipe(\r\n map(units => EntityActions.LoadGPSHistoryByAssetIdSuccess(units)),\r\n catchError(error => of(EntityActions.LoadGPSHistoryByAssetIdFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n\r\n","\r\nimport { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '../../models';\r\nimport { LocationGPSHistory } from '../../models/location/location-gps-history';\r\n\r\nexport interface State {\r\n locationGPSHistory: LocationGPSHistory[],\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n locationGPSHistory: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadGPSHistory, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadGPSHistoryFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadGPSHistorySuccess, (state, { gpsHistory }) => ({\r\n ...state,\r\n locationGPSHistory: gpsHistory,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadGPSHistoryByAssetId, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadGPSHistoryByAssetIdFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadGPSHistoryByAssetIdSuccess, (state, { gpsHistory }) => ({\r\n ...state,\r\n locationGPSHistory: gpsHistory,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.Clear, (state) => initialState)\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}","import moment from \"moment\";\r\n\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromAlarmStates from '../alarm-states';\r\nimport * as fromCustomer from '../customers';\r\n\r\nimport { IMapMarker } from \"@rfv/modules/involve/map/marker\";\r\nimport { LocationGPSHistory } from \"@rfv/modules/core/models\";\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.locationGPSHistory);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getGPSHistory = createSelector(\r\n getState,\r\n (state) => state.locationGPSHistory\r\n)\r\n\r\nexport const getFilteredGPSHistory = createSelector(\r\n getGPSHistory,\r\n fromRoot.Router.getQueryParam('tripId'),\r\n fromAlarmStates.getEntities,\r\n (gpsHistory, tripId, alarmStates) => {\r\n\r\n return gpsHistory?.map((item, index) => {\r\n let alarmState = item.PresentAlarmCount > 0 ? alarmStates[1] : alarmStates[2];\r\n return {\r\n id: index,\r\n iconId: alarmState.AlarmStateId,\r\n name: moment(item.LatitudeSampleTime).format('MM/DD/YYYY hh:mm:ss A'),\r\n title: moment(item.LatitudeSampleTime).format('MM/DD/YYYY hh:mm:ss A'),\r\n latitude: item.Latitude,\r\n longitude: item.Longitude,\r\n trackBy: tripId,\r\n data: item\r\n } as IMapMarker;\r\n });\r\n });\r\n\r\nexport const getFleetVitalsFileName = createSelector(\r\n fromCustomer.getSelected,\r\n (customer) => {\r\n return customer.Name + '_HistoricalTracking_' + moment(new Date()).format(\"MMDDYYYY\")\r\n });","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, NotificationType } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Notification Types');\r\nexport const LoadFail = createAction('[Core] Load Notification Types Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Core] Load Notification Types Success', props<{ notificationTypes: NotificationType[] }>());","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as NotificationTypesActions from './actions';\r\n\r\nimport { NotificationTypeService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _notificationTypeService: NotificationTypeService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(NotificationTypesActions.Load),\r\n switchMap(action => this._notificationTypeService.getAll().pipe(\r\n map(notificationTypes => NotificationTypesActions.LoadSuccess({ notificationTypes }),\r\n catchError(error => of(NotificationTypesActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, NotificationType } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: notificationType => notificationType.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as NotificationTypesActions from './actions';\r\n\r\nconst notificationTypesReducer = createReducer(\r\n initialState,\r\n\r\n on(NotificationTypesActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(NotificationTypesActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(NotificationTypesActions.LoadSuccess, (state, { notificationTypes }) => adapter.setAll(notificationTypes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return notificationTypesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.notificationTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { Notification } from '@rfv/modules/core/models';\r\n\r\n// add noti to list \r\nexport const Add = createAction('[Core] Add Notification', (notification: Notification) => ({notification}));\r\n\r\n// delete noti from list \r\nexport const Delete = createAction('[Core] Delete Notification', (notificationId: number) => ({notificationId}));\r\n\r\n// acknowledge (remove red dot)\r\nexport const Acknowledge = createAction('[Core] Acknowledge Notification', (notificationId: number, acknowledged: boolean) => ({notificationId, acknowledged}));\r\nexport const AcknowledgeAll = createAction('[Core] Acknowledge All Notifications');\r\n\r\n// update \r\nexport const Update = createAction('[Core] Update Notification', (notificationId: number, message: string, changed: boolean) => ({notificationId, message, changed}));\r\nexport const Complete = createAction('[Core] Show Reboot Button', (notificationId: number, message: string, changed: boolean, isComplete: boolean) => ({notificationId, message, changed, isComplete}))\r\nexport const Failed = createAction('[Core] Show Retry Button', (notificationId: number, message: string, changed: boolean, isFailed: boolean) => ({notificationId, message, changed, isFailed}))","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState, adapter } from './state';\r\n\r\nimport * as NotificationActions from './actions'\r\n\r\nconst notificationReducer = createReducer(\r\n initialState,\r\n\r\n on(NotificationActions.Add, (state, { notification }) => adapter.addOne(notification, state)),\r\n\r\n on(NotificationActions.Update, (state, { notificationId, message, changed }) => adapter.updateOne({\r\n id: notificationId, \r\n changes: {\r\n message, \r\n acknowledged: changed ? false : state.entities[notificationId].acknowledged,\r\n timestamp: changed ? new Date() : state.entities[notificationId].timestamp\r\n }\r\n }, state)),\r\n\r\n on(NotificationActions.Complete, (state, { notificationId, message, changed, isComplete }) => adapter.updateOne({\r\n id: notificationId, \r\n changes: {\r\n message, \r\n acknowledged: changed ? false : state.entities[notificationId].acknowledged,\r\n timestamp: changed ? new Date() : state.entities[notificationId].timestamp,\r\n isComplete : isComplete\r\n }\r\n }, state)),\r\n\r\n on(NotificationActions.Failed, (state, { notificationId, message, changed, isFailed }) => adapter.updateOne({\r\n id: notificationId, \r\n changes: {\r\n message, \r\n acknowledged: changed ? false : state.entities[notificationId].acknowledged,\r\n timestamp: changed ? new Date() : state.entities[notificationId].timestamp,\r\n isFailed : isFailed\r\n }\r\n }, state)),\r\n\r\n on(NotificationActions.Delete, (state, { notificationId }) => adapter.removeOne(notificationId, state)),\r\n\r\n on(NotificationActions.Acknowledge, (state, { notificationId, acknowledged }) => adapter.updateOne({\r\n id: notificationId, \r\n changes: {\r\n acknowledged\r\n }\r\n }, state)),\r\n\r\n on(NotificationActions.AcknowledgeAll, (state) => adapter.updateMany(state.ids.map(id => ({\r\n id,\r\n changes: { \r\n acknowledged: true\r\n }\r\n })), state))\r\n); \r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return notificationReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { Notifications } from '..';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nconst getState = createSelector(getFeatureState, state => state.notifications);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const getUnacknowledged = createSelector(\r\n getAll, \r\n (notifications) => notifications.filter(notification => !notification.acknowledged) \r\n);\r\n\r\nexport const getAcknowledged = createSelector(\r\n getAll, \r\n (notifications) => notifications.filter(notification => notification.acknowledged)\r\n);\r\n\r\nexport const getUnacknowledgedCount = createSelector(\r\n getUnacknowledged,\r\n (notifications) => notifications?.length || 0\r\n)\r\n\r\nexport const getSorted = createSelector(\r\n getAll,\r\n notifications => notifications.sort((a, b) => {\r\n if (a.acknowledged !== b.acknowledged)\r\n return a.acknowledged ? 1 : -1;\r\n \r\n return (b.timestamp.getTime() - a.timestamp.getTime())\r\n })\r\n);","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { INotification } from '@rfv/modules/core/models/notifications';\r\n\r\nexport interface State extends EntityState{}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: Notification => Notification.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState();","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, OnboardingEventLog } from '../../models';\r\n\r\nexport const load = createAction('[Onboarding Event logs] Load Event Logs', (serialNumber: number) => ({ serialNumber }));\r\nexport const loadFail = createAction('[Onboarding Event logs] Load Event Logs Fail', (error: ApiError) => ({ error }));\r\nexport const loadSuccess = createAction('[Onboarding Event logs] Load Event Logs Success', (OnboardingEventLog: OnboardingEventLog[]) => ({ OnboardingEventLog }));\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { OnboardingQueueService } from '../../services';\r\nimport * as OnboardingQueueActions from './actions';\r\n\r\n// import { Store } from '@ngrx/store';\r\n// import * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n // private _store: Store,\r\n private _onboardingQueueService: OnboardingQueueService,\r\n ) { }\r\n\r\n public loadEventLogs$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.load),\r\n switchMap(action => this._onboardingQueueService.loadEventLogs(action.serialNumber,).pipe(\r\n map(entity => OnboardingQueueActions.loadSuccess(entity)),\r\n catchError(error => of(OnboardingQueueActions.loadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n\r\n\r\n}","import { ApiError, OnboardingEventLog } from '@rfv/modules/core/models';\r\n\r\nimport { createEntityAdapter, EntityState } from '@ngrx/entity';\r\n\r\nexport interface State extends EntityState {\r\n isLoading: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: asset => asset.id\r\n})\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst onboardingEventLogsReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.loadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error\r\n })), \r\n\r\n on(Actions.loadSuccess, (state, {OnboardingEventLog} ) => adapter.setAll(OnboardingEventLog, ({\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))), \r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return onboardingEventLogsReducer(state, action);\r\n}\r\n","import { moment } from '@rfv/modules/shared/utils/moment';\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nconst getState = createSelector(getFeatureState, state => state.onboardingEventLogs);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, OnboardingQueueAsset } from '../../models';\r\n\r\nexport const LoadOnboardingQueueAssetList = createAction('[Onboarding Queue] Load Onboarding Queue Asset');\r\n\r\nexport const LoadOnboardingQueueAssetListFail = createAction('[Onboarding Queue] Load Onboarding Queue Asset Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadOnboardingQueueAssetListSuccess = createAction('[Onboarding Queue] Load Onboarding Queue Asset Success',\r\n (onboardingQueueAssets: OnboardingQueueAsset[]) => ({ onboardingQueueAssets }));\r\n\r\nexport const AssignToCustomer = createAction('[Onboarding Queue] Assign To Customer',\r\n (make: string, serialNumber: string, customerId: number) => ({ make, serialNumber, customerId }));\r\n\r\nexport const AssignToCustomerFail = createAction('[Onboarding Queue] Assign To Customer Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const AssignToCustomerSuccess = createAction('[Onboarding Queue] Assign To Customer Success');\r\n\r\nexport const Load = createAction('[Onboarding Queue] Load Asset', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadFail = createAction('[Onboarding Queue] Load Asset Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Onboarding Queue] Load Asset Success', (entity: Partial) => ({ entity }));\r\n\r\nexport const Resume = createAction('[Onboarding Queue] Resume', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const ResumeFail = createAction('[Onboarding Queue] Resume Fail', (error: ApiError) => ({ error }));\r\nexport const ResumeSuccess = createAction('[Onboarding Queue] Resume Success', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const Restart = createAction('[Onboarding Queue] Restart', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const RestartFail = createAction('[Onboarding Queue] Restart Fail', (error: ApiError) => ({ error }));\r\nexport const RestartSuccess = createAction('[Onboarding Queue] Restart Success', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const NavigateToUnit = createAction('[Onboarding Queue] Navigate To Unit', (customerId: number, unitCreationLogId: number, stepId: number) => ({ customerId, unitCreationLogId, stepId }));","\r\nimport { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, tap } from 'rxjs/operators';\r\n\r\n\r\nimport { OnboardingQueueService } from '../../services';\r\nimport * as OnboardingQueueActions from './actions';\r\nimport * as UnitCreationActions from '../../../support/store/unit-creation/actions';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCustomer from '../customers';\r\nimport { Dashboards, Tiles } from '../../enums';\r\nimport { data } from 'azure-maps-control';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store,\r\n private _onboardingQueueService: OnboardingQueueService,\r\n ) { }\r\n\r\n public getOnboardingQueueAssetList$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.LoadOnboardingQueueAssetList),\r\n switchMap(action => this._onboardingQueueService.loadAll().pipe(\r\n map(onboardingQueueAssets => OnboardingQueueActions.LoadOnboardingQueueAssetListSuccess(\r\n onboardingQueueAssets\r\n )),\r\n catchError(error => of(OnboardingQueueActions.LoadOnboardingQueueAssetListFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.Load),\r\n switchMap(action => this._onboardingQueueService.load(action.unitCreationLogId).pipe(\r\n map(entity => OnboardingQueueActions.LoadSuccess(entity)),\r\n catchError(error => of(OnboardingQueueActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public assignToCustomer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.AssignToCustomer),\r\n switchMap(action => this._onboardingQueueService.assign(action.make, action.serialNumber, action.customerId).pipe(\r\n map(() => OnboardingQueueActions.AssignToCustomerSuccess()),\r\n catchError(error => of(OnboardingQueueActions.AssignToCustomerFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public assignToCustomerSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.AssignToCustomerSuccess),\r\n mergeMap(action => [\r\n OnboardingQueueActions.LoadOnboardingQueueAssetList(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Asset has been queued for automated setup.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ])\r\n )\r\n );\r\n\r\n public assignToCustomerFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.AssignToCustomerFail),\r\n mergeMap(action => [\r\n OnboardingQueueActions.LoadOnboardingQueueAssetList(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `Failed to queue asset.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ])\r\n )\r\n );\r\n\r\n public resume$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.Resume),\r\n switchMap(action => this._onboardingQueueService.resume(action.unitCreationLogId).pipe(\r\n mergeMap(_ => [\r\n OnboardingQueueActions.ResumeSuccess(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Resume Automated Onboarding Successful`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]), \r\n catchError(error => of(OnboardingQueueActions.ResumeFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public resumeSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.ResumeSuccess),\r\n tap(action => UnitCreationActions.UpdateLock(action.unitCreationLogId))\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n public restart$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.Restart),\r\n switchMap(action => this._onboardingQueueService.restart(action.unitCreationLogId).pipe(\r\n mergeMap(_ => [\r\n OnboardingQueueActions.RestartSuccess(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Restart Automated Onboarding Successful`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]), \r\n\r\n catchError(error => of(OnboardingQueueActions.RestartFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public restartSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.RestartSuccess),\r\n tap(action => UnitCreationActions.UpdateLock(action.unitCreationLogId))\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n public navigateToUnit$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(OnboardingQueueActions.NavigateToUnit),\r\n switchMap(action => this._store.pipe(\r\n select(fromCustomer.getAll),\r\n map(customers => {\r\n const customer = customers.find(c => c.Id === action.customerId);\r\n\r\n if (!customer) {\r\n return fromRoot.Modal.Open({ options: {\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Access Denied',\r\n data: 'You do not have access to this customer.',\r\n primaryText: 'Ok'\r\n }});\r\n } else {\r\n return fromCustomer.Switch(\r\n action.customerId,\r\n `/dashboard/${Dashboards.SupportSuite}/sitemapGroup/${customer.RootSitemapGroupId}/fullscreen/${Tiles.addNewUnit}/${action.unitCreationLogId}/${action.stepId}`,\r\n false, {customerName: customer.Name});\r\n }\r\n })\r\n ))\r\n )\r\n );\r\n}","import { ApiError, OnboardingQueueAsset } from '@rfv/modules/core/models';\r\n\r\nimport { createEntityAdapter, EntityState } from '@ngrx/entity';\r\n\r\nexport interface State extends EntityState {\r\n asset: Partial | null;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isLoadingAll: boolean;\r\n isLoadedAll: boolean;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: asset => asset.Id\r\n})\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n asset: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isLoadingAll: false,\r\n isLoadedAll: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst onboardingReducer = createReducer(\r\n initialState,\r\n\r\n on(Actions.LoadOnboardingQueueAssetList, (state) => ({\r\n ...state,\r\n isLoadingAll: true\r\n })),\r\n\r\n on(Actions.LoadOnboardingQueueAssetListFail, (state, { error }) => ({\r\n ...state,\r\n isLoadedAll: false,\r\n isLoadingAll: false,\r\n error\r\n })),\r\n\r\n on(Actions.LoadOnboardingQueueAssetListSuccess, (state, { onboardingQueueAssets }) => adapter.setAll(onboardingQueueAssets, {\r\n ...state,\r\n isLoadedAll: true,\r\n isLoadingAll: false,\r\n error: null\r\n })),\r\n\r\n on(Actions.Load, (state, { unitCreationLogId }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(Actions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n asset: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(Actions.LoadSuccess, (state, { entity }) => ({\r\n ...state,\r\n asset: entity,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return onboardingReducer(state, action);\r\n}\r\n","import { moment } from '@rfv/modules/shared/utils/moment';\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\nimport { OnboardingQueueAsset } from '../../models';\r\n\r\nconst getState = createSelector(getFeatureState, state => state.onboardingQueue);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoadingAll = createSelector(getState, state => state.isLoadingAll);\r\nexport const isLoadedAll = createSelector(getState, state => state.isLoadedAll);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\n\r\nexport const getOnboardingQueueAsset = createSelector(getState, state => state.asset);\r\nexport const getByUnitCreationLogId = createSelector(getAll, (entities: OnboardingQueueAsset[], props: { unitCreationLogId: number }) => entities.find(entity => entity.UnitCreationLogId === props.unitCreationLogId));\r\n\r\nexport const getOnboardingQueue = createSelector(getAll, entities => entities.map(\r\n asset => {\r\n return {//return new object so user can search exactly what they see ie. with %, days etc.\r\n ...asset,\r\n OnboardingStatusColor: ((id) => {\r\n switch (id)\r\n {\r\n case 1: // new\r\n case 2: // queued\r\n case 3: return 'yellow'; // in progress\r\n case 4: return 'green'; // complete\r\n case 5: return 'red'; // failed\r\n case 7: return 'yellow'; // locked\r\n case 9: return 'orange'; // In Review\r\n }\r\n })(asset.OnboardingStatusId)\r\n }\r\n }\r\n));\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { PlatformServiceSettings } from '../../models/PlatformServiceSettings/PlatformServiceSettings';\r\n\r\nexport const Load = createAction('[Core] Load platform Service Settings');\r\nexport const LoadFail = createAction('[Core] Load platform Service Settings Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load platform Service Settings Success', (platformServiceSettings: PlatformServiceSettings[]) => ({ platformServiceSettings }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nimport { PlatFormServiceSettings } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _platformSettings: PlatFormServiceSettings,\r\n ) { }\r\n\r\n public Load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.Load),\r\n switchMap(() => this._platformSettings.getPlatFormServiceSettings().pipe(\r\n map(settings => EntityActions.LoadSuccess(settings)),\r\n catchError(error => of(EntityActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n\r\n","import { ApiError } from '../../models';\r\nimport { PlatformServiceSettings } from '../../models/PlatformServiceSettings/PlatformServiceSettings';\r\n\r\nexport interface State {\r\n settings: PlatformServiceSettings[],\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n settings: [],\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { platformServiceSettings }) => ({\r\n ...state,\r\n settings: platformServiceSettings,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.platformServiceSettings);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getPlatFormSettings = createSelector(getState, state => state.settings);\r\n\r\nexport const getPlatFormSettingsByName = (name: string) => createSelector(getPlatFormSettings, platFormSettings => platFormSettings?.find(setting => setting.name == name));","import { Action, ActionReducerMap, createReducer, on } from '@ngrx/store';\r\nimport { routerNavigatedAction } from '@ngrx/router-store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as fromCore from './actions';\r\n\r\nimport * as fromAggregateAlarmHistory from './aggregate-Alarm-History'\r\nimport * as fromAggregateFleetVitals from './aggregate-fleet-vitals';\r\nimport * as fromAggregateRuntime from './aggregate-runtime';\r\nimport * as fromAlarmGroups from './alarm-groups';\r\nimport * as fromAlarmStates from './alarm-states';\r\nimport * as fromAlarmTests from './alarm-tests';\r\nimport * as fromAlarmTypes from './alarm-types';\r\nimport * as fromAlertSchedules from './alert-schedules';\r\nimport * as fromAlertScheduleTimes from './alert-schedules-times';\r\nimport * as fromAlarmSuppression from './alarm-suppression';\r\nimport * as fromApplications from './applications';\r\nimport * as fromAssets from './assets';\r\nimport * as fromAssetTypes from './assetTypes';\r\nimport * as fromAuth from './auth';\r\nimport * as fromCellularProviders from './cellular-providers';\r\nimport * as fromCommLoss from './comm-loss';\r\nimport * as fromCommLossTypes from './comm-loss-types';\r\nimport * as fromCompanies from './companies';\r\nimport * as fromControlAdmin from './control-admin';\r\nimport * as fromCountries from './countries';\r\nimport * as fromCustomers from './customers';\r\nimport * as fromDashboards from './dashboards';\r\nimport * as fromDatapoints from './datapoints';\r\nimport * as fromDealers from './dealers';\r\nimport * as fromDerivedDataPoints from './derived-data-points';\r\nimport * as fromDeviceSearchResults from './device-search-results';\r\nimport * as fromECMSerialNumberSuffixes from './ecm-serial-number-suffix';\r\nimport * as fromEMO from './emo';\r\nimport * as fromEventCodes from './event-code';\r\nimport * as fromEventParties from './event-parties';\r\nimport * as fromFeatureAccess from './feature-access';\r\nimport * as fromFleetVitals from './fleet-vitals'\r\nimport * as fromGaugeTypes from './gauge-types';\r\nimport * as fromGeofences from './geofences';\r\nimport * as fromGlobalColors from './global-colors';\r\nimport * as fromGlobalJobTitles from './global-job-titles';\r\nimport * as fromGlobalTimezones from './global-timezones';\r\nimport * as fromGPSConfig from './gps-config';\r\nimport * as fromIcons from './icons';\r\nimport * as fromIndustries from './industries';\r\nimport * as fromLocationGPSHistory from './location';\r\nimport * as fromNotificationTypes from './notification-types';\r\nimport * as fromOnboardingEventLogs from './onboarding-event-logs';\r\nimport * as fromOnboardingQueue from './onboarding-queue';\r\nimport * as fromPlatFormServiceSettings from './platformServiceSettings';\r\nimport * as fromReports from './reports';\r\nimport * as fromSerialNumberPrefixes from './serial-number-prefix';\r\nimport * as fromSitemapGroups from './sitemap-groups';\r\nimport * as fromStreamingTemplates from './streaming-template';\r\nimport * as fromStreamingTemplateConfig from './streaming-template-config'\r\nimport * as fromSupport from './support';\r\nimport * as fromSystemEventDiagnostics from './system-event-diagnostics';\r\nimport * as fromSystemStatus from './system-status';\r\nimport * as fromTiles from './tiles';\r\nimport * as fromTimeIntervalDropdowns from './time-interval-dropdowns';\r\nimport * as fromToolTips from './tool-tips';\r\nimport * as fromTripConfig from './trip-config';\r\nimport * as fromTripSummary from './trip-summary';\r\nimport * as fromUnitControl from './unit-control';\r\nimport * as fromUnitsOfMeasure from './units-of-measure';\r\nimport * as fromUnitStates from './unit-states';\r\nimport * as fromUserAccessFilter from './customer-user-access-filters';\r\nimport * as fromUserAlertRecipients from './user-alert-recipients';\r\nimport * as fromUserGlobalFilterDataPointGroup from './user-global-filter-data-point-group';\r\nimport * as fromUserGroup from './user-groups';\r\nimport * as fromUserPermissions from './user-permissions';\r\nimport * as fromUserSession from './user-session';\r\nimport * as fromVIM from './vim';\r\nimport * as fromDealerVim from './dealerVim';\r\nimport * as fromUnitsOfMeasureConversions from './units-of-measure-conversions';\r\nimport * as fromDeviceCommands from './device-commands';\r\nimport * as fromNotifications from './notifications';\r\nimport * as fromControlHistory from './control-history'; \r\nimport * as fromBrands from './brands'\r\n\r\nconst statusReducer = createReducer(\r\n initialState,\r\n\r\n on(routerNavigatedAction, (state, { payload }) => ({\r\n ...state,\r\n navStack: [\r\n ...state.navStack,\r\n payload.routerState\r\n ]\r\n })),\r\n\r\n on(fromCore.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(fromCore.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(fromCore.LoadSuccess, state => ({\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(fromCore.Online, state => ({\r\n ...state,\r\n isOnline: true\r\n })),\r\n\r\n on(fromCore.Offline, state => ({\r\n ...state,\r\n isOnline: false\r\n })),\r\n\r\n on(fromCore.SetBreadcrumbOptions, (state, { payload }) => ({\r\n ...state,\r\n breadcrumbOptions: payload.options\r\n })),\r\n\r\n on(fromCore.SetBreadcrumbButtons, (state, { payload }) => ({\r\n ...state,\r\n breadcrumbButtons: payload.buttons\r\n })),\r\n);\r\n\r\nexport function reducer(state: State['status'] | undefined, action: Action) {\r\n return statusReducer(state, action);\r\n}\r\n\r\nexport const reducers: ActionReducerMap = {\r\n status: reducer,\r\n aggregateFleetVitals: fromAggregateFleetVitals.reducer,\r\n aggregateAlarmHistory: fromAggregateAlarmHistory.reducer,\r\n aggregateRuntime: fromAggregateRuntime.reducer,\r\n alarmGroups: fromAlarmGroups.reducer,\r\n alarmStates: fromAlarmStates.reducer,\r\n alarmTests: fromAlarmTests.reducer,\r\n alarmTypes: fromAlarmTypes.reducer,\r\n alertSchedules: fromAlertSchedules.reducer,\r\n alertScheduleTimes: fromAlertScheduleTimes.reducer,\r\n alarmSuppression: fromAlarmSuppression.reducer,\r\n applications: fromApplications.reducer,\r\n assets: fromAssets.reducer,\r\n assetTypes: fromAssetTypes.reducer,\r\n auth: fromAuth.reducer,\r\n cellularProviders: fromCellularProviders.reducer,\r\n commLoss: fromCommLoss.reducer,\r\n commLossTypes: fromCommLossTypes.reducer,\r\n companies: fromCompanies.reducer,\r\n controlDatapoint: fromControlAdmin.reducer,\r\n countries: fromCountries.reducer,\r\n customers: fromCustomers.reducer,\r\n customerUserAccessFilter: fromUserAccessFilter.reducer,\r\n dashboards: fromDashboards.reducer,\r\n datapoints: fromDatapoints.reducer,\r\n dealers: fromDealers.reducer,\r\n derivedDataPoints: fromDerivedDataPoints.reducer,\r\n deviceSearchResults: fromDeviceSearchResults.reducer,\r\n ecmSerialNumberSuffixes: fromECMSerialNumberSuffixes.reducer,\r\n emo: fromEMO.reducer,\r\n eventCodes: fromEventCodes.reducer,\r\n eventParties: fromEventParties.reducer,\r\n featureAccess: fromFeatureAccess.reducer,\r\n fleetVitals: fromFleetVitals.reducer,\r\n gaugeTypes: fromGaugeTypes.reducer,\r\n geofences: fromGeofences.reducer,\r\n globalColors: fromGlobalColors.reducer,\r\n globalJobTitles: fromGlobalJobTitles.reducer,\r\n globalTimezones: fromGlobalTimezones.reducer,\r\n gpsConfig: fromGPSConfig.reducer,\r\n icons: fromIcons.reducer,\r\n industries: fromIndustries.reducer,\r\n locationGPSHistory: fromLocationGPSHistory.reducer,\r\n notificationTypes: fromNotificationTypes.reducer,\r\n onboardingEventLogs: fromOnboardingEventLogs.reducer,\r\n onboardingQueue: fromOnboardingQueue.reducer,\r\n platformServiceSettings: fromPlatFormServiceSettings.reducer,\r\n serialNumberPrefixes: fromSerialNumberPrefixes.reducer,\r\n sitemapGroups: fromSitemapGroups.reducer,\r\n streamingTemplates: fromStreamingTemplates.reducer,\r\n streamingTemplateConfig: fromStreamingTemplateConfig.reducer,\r\n support: fromSupport.reducer,\r\n systemEventDiagnostics: fromSystemEventDiagnostics.reducer,\r\n systemStatus: fromSystemStatus.reducer,\r\n tiles: fromTiles.reducer,\r\n timeIntervalDropDowns: fromTimeIntervalDropdowns.reducer,\r\n toolTips: fromToolTips.reducer,\r\n tripConfig: fromTripConfig.reducer,\r\n tripSummary: fromTripSummary.reducer,\r\n unitControl: fromUnitControl.reducer,\r\n unitsOfMeasure: fromUnitsOfMeasure.reducer,\r\n unitStates: fromUnitStates.reducer,\r\n userAlertRecipients: fromUserAlertRecipients.reducer,\r\n userGlobalFilterDataPointGroup: fromUserGlobalFilterDataPointGroup.reducer,\r\n userGroups: fromUserGroup.reducer,\r\n userPermissons: fromUserPermissions.reducer,\r\n userSchedules: fromReports.reducer,\r\n userSession: fromUserSession.reducer,\r\n vim: fromVIM.reducer,\r\n dealerVim: fromDealerVim.reducer,\r\n unitsOfMeasureConversions: fromUnitsOfMeasureConversions.reducer,\r\n deviceCommands: fromDeviceCommands.reducer,\r\n notifications: fromNotifications.reducer,\r\n controlHistory: fromControlHistory.reducer,\r\n brands: fromBrands.reducer\r\n};\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/* NgRx */\r\nimport { Action } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\n\r\n\r\nimport { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const LoadUserSchedules = createAction('[Core] Load User Schedules');\r\n\r\nexport const LoadUserSchedulesFail = createAction('[Core] Load User Schedules Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadUserSchedulesSuccess = createAction('[Core] Load User Schedules Success', props<{\r\n reportSchedules: ReportSchedules[]\r\n}>());\r\n\r\nexport const DeleteUserSchedule = createAction('[Core] Delete User Schedule', props<{\r\n id: number\r\n}>());\r\n\r\nexport const DeleteUserScheduleFail = createAction('[Core] Delete User Schedule Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const DeleteUserScheduleSuccess = createAction('[Core] Delete User Schedule Success');\r\n\r\nexport const ClearUserSchedules = createAction('[Core] Clear User Schedules');\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as ReportSchedulesActions from './actions';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { successPayload, failPayload } from '@rfv/modules/report/report-banner-messages';\r\nimport { UserSchedulesService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _userSchedulesService: UserSchedulesService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActions.LoadUserSchedules),\r\n switchMap(action => this._userSchedulesService.getUserSchedules().pipe(\r\n map(reportSchedules => ReportSchedulesActions.LoadUserSchedulesSuccess({ reportSchedules }),\r\n catchError(error => of(ReportSchedulesActions.LoadUserSchedulesFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActions.DeleteUserSchedule),\r\n mergeMap(action =>\r\n this._userSchedulesService.deleteScheduleReport(action.id).pipe(\r\n switchMap(() => [\r\n ReportSchedulesActions.DeleteUserScheduleSuccess(),\r\n fromRoot.Banner.Show({ options: successPayload('deleted') }),\r\n ReportSchedulesActions.ClearUserSchedules(),\r\n ReportSchedulesActions.LoadUserSchedules()\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n ReportSchedulesActions.DeleteUserScheduleFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('deleting', error) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n\r\n ));\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isDeleting: boolean;\r\n error: ApiError;\r\n allData: ReportSchedules[];\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: reportSchedule => reportSchedule.ReportCustomerSettingRecipientId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n isDeleting: false,\r\n error: null,\r\n allData: []\r\n});\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as ReportSchedulesActions from './actions';\r\n\r\nconst userSchedulesReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportSchedulesActions.LoadUserSchedules, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadUserSchedulesFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadUserSchedulesSuccess, (state, { reportSchedules }) => adapter.setAll(reportSchedules, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n allData: reportSchedules,\r\n error: null\r\n })),\r\n\r\n on(ReportSchedulesActions.DeleteUserSchedule, (state, { id }) => adapter.removeOne(id, {\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(ReportSchedulesActions.DeleteUserScheduleSuccess, state => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(ReportSchedulesActions.ClearUserSchedules, (state, {}) => ({\r\n ...initialState,\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userSchedulesReducer(state, action);\r\n}\r\n\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\nimport * as fromSitemapGroup from '@rfv/modules/core/store/sitemap-groups';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.userSchedules);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const selectAllData = createSelector(\r\n getState,\r\n fromSitemapGroup.getPathString,\r\n (state, getPathString) => {\r\n const extendedScheduleData: ReportSchedules[] = [];\r\n state.allData.forEach(x => {\r\n extendedScheduleData.push({\r\n ...x,\r\n SitemapPathString: getPathString(x.RootSitemapGroupId)\r\n });\r\n });\r\n return extendedScheduleData;\r\n });\r\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nexport const getFeatureState = createFeatureSelector('core');\r\n\r\nexport const getStatus = createSelector(getFeatureState, state => state.status);\r\n\r\nexport const isLoaded = createSelector(getStatus, state => state.isLoaded);\r\nexport const isLoading = createSelector(getStatus, state => state.isLoading);\r\nexport const getError = createSelector(getStatus, state => state.error);\r\n\r\nexport const getBreadcrumbOptions = createSelector(getStatus, state => state.breadcrumbOptions);\r\nexport const getBreadcrumbButtons = createSelector(getStatus, state => state.breadcrumbButtons);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { SerialNumberPrefix } from '@rfv/modules/core/models/serial-number-prefix';\r\n\r\nexport const Load = createAction('[Core] Load Serial Number Prefixes');\r\n\r\nexport const LoadFail = createAction('[Core] Load Serial Number Prefixes Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load Serial Number Prefixes Success', props<{\r\n serialNumberPrefixes: SerialNumberPrefix[]\r\n}>());\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as SerialNumberPrefixActions from './actions';\r\nimport { SerialNumberService } from '@rfv/modules/core/services/serial-number-service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _serialNumberService: SerialNumberService,\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(SerialNumberPrefixActions.Load),\r\n switchMap(action => this._serialNumberService.getPrefixes().pipe(\r\n map(serialNumberPrefixes => SerialNumberPrefixActions.LoadSuccess({ serialNumberPrefixes })),\r\n catchError(error => of(SerialNumberPrefixActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { SerialNumberPrefix } from '@rfv/modules/core/models/serial-number-prefix';\r\n\r\nexport interface State extends EntityState {\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: serialNumberPrefix => serialNumberPrefix.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as SerialNumberPrefixActions from './actions';\r\n\r\nconst serialNumberPrefixReducer = createReducer(\r\n initialState,\r\n\r\n on(SerialNumberPrefixActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(SerialNumberPrefixActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(SerialNumberPrefixActions.LoadSuccess, (state, { serialNumberPrefixes }) => adapter.setAll(serialNumberPrefixes, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return serialNumberPrefixReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.serialNumberPrefixes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, SitemapGroup } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load SitemapGroups');\r\nexport const LoadFail = createAction('[Core] Load SitemapGroups Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Core] Load SitemapGroups Success', props<{ sitemapGroups: SitemapGroup[] }>());","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AlarmCount, AlertSchedule } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load SitemapGroup Alarm Counts', props<{\r\n sitemapGroupId: number,\r\n alertScheduleId: number,\r\n alarmGroupIdsCsv: any\r\n}>());\r\n\r\nexport const LoadFail = createAction('[Core] Load SitemapGroup Alarm Counts Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load SitemapGroup Alarm Counts Success', props<{\r\n alarmCounts: AlarmCount[]\r\n}>());\r\n\r\nexport const SetAlertSchedule = createAction('[Core] Set Alert Schedule', props<{\r\n alertSchedule: AlertSchedule\r\n}>());\r\n\r\nexport const Clear = createAction('[Core] Clear SitemapGroup Alarm Counts');\r\n\r\nexport const ClearSelectedAlarmCounts = createAction('[Core] Clear Selected SitemapGroup Alarm Counts');\r\n\r\nexport const AddMultipleAlarmCounts = createAction('[Core] Add Multiple Alarm Counts', props<{\r\n alarmCounts: AlarmCount[]\r\n}>());\r\n\r\nexport const DeleteMultipleAlarmCounts = createAction('[Core] Delete Multiple Alarm Counts', props<{\r\n alarmCounts: AlarmCount[]\r\n}>());\r\n\r\nexport const Save = createAction('Save Batch Alert Recipients', props<{\r\n rootSitemapId: number,\r\n userIds: number[],\r\n notificationTypeIds: number[]\r\n}>());\r\n\r\nexport const SaveFail = createAction('[Core] Save Batch Alert Recipients Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const SaveSuccess = createAction('[Core] Load Batch Alert Recipients Success');","import { ApiError, AlarmCount, AlertSchedule } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n alarmCounts: AlarmCount[];\r\n\r\n selectedAlertSchedule: AlertSchedule;\r\n selectedAlarmCounts: AlarmCount[];\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isSaved: boolean;\r\n isSaving: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n alarmCounts: [],\r\n\r\n selectedAlertSchedule: null,\r\n selectedAlarmCounts: [],\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaved: false,\r\n isSaving: false,\r\n error: null\r\n};","import { AlarmCount } from '@rfv/modules/core/models';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AlarmCountActions from './actions';\r\n\r\nconst alarmCountReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmCountActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmCountActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmCountActions.LoadSuccess, (state, { alarmCounts }) => ({\r\n ...state,\r\n alarmCounts: alarmCounts,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmCountActions.SetAlertSchedule, (state, { alertSchedule }) => ({\r\n ...state,\r\n selectedAlertSchedule: alertSchedule\r\n })),\r\n\r\n on(AlarmCountActions.Clear, (state) => ({\r\n ...state,\r\n alarmCounts: []\r\n })),\r\n\r\n on(AlarmCountActions.ClearSelectedAlarmCounts, (state) => ({\r\n ...state,\r\n selectedAlarmCounts: []\r\n })),\r\n on(AlarmCountActions.AddMultipleAlarmCounts, (state, { alarmCounts }) => ({\r\n ...state,\r\n selectedAlarmCounts: [...state.selectedAlarmCounts, ...alarmCounts],\r\n })),\r\n\r\n on(AlarmCountActions.DeleteMultipleAlarmCounts, (state, { alarmCounts }) => ({\r\n ...state,\r\n selectedAlarmCounts: removeDuplicates(state.selectedAlarmCounts, alarmCounts)\r\n })),\r\n\r\n on(AlarmCountActions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(AlarmCountActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaved: false,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(AlarmCountActions.SaveSuccess, (state) => ({\r\n ...state,\r\n isSaved: true,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmCountActions.AddMultipleAlarmCounts, (state, { alarmCounts }) => ({\r\n ...state,\r\n selectedAlarmCounts: [...state.selectedAlarmCounts, ...alarmCounts],\r\n })),\r\n\r\n on(AlarmCountActions.DeleteMultipleAlarmCounts, (state, { alarmCounts }) => ({\r\n ...state,\r\n selectedAlarmCounts: removeDuplicates(state.selectedAlarmCounts, alarmCounts)\r\n })),\r\n\r\n on(AlarmCountActions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(AlarmCountActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaved: false,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(AlarmCountActions.SaveSuccess, (state) => ({\r\n ...state,\r\n isSaved: true,\r\n isSaving: false,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function removeDuplicates(alarmCounts: AlarmCount[], alarmCountsToDelete: AlarmCount[]) {\r\n // console.log(alarmCounts, alarmCountsToDelete);\r\n const common = alarmCounts.filter(o => alarmCountsToDelete.some(({Id,AlarmGroupId}) => o.Id === Id && o.AlarmGroupId === AlarmGroupId));\r\n common.forEach(toAdd => {\r\n const index = alarmCounts.findIndex(alarmCount => alarmCount.Id === toAdd.Id && alarmCount.AlarmGroupId === toAdd.AlarmGroupId);\r\n \r\n alarmCounts = Object.assign([], alarmCounts);\r\n alarmCounts.splice(index, 1);\r\n });\r\n\r\n return alarmCounts.filter((elem, index, self) => {\r\n return index === self.findIndex(alarmCount => alarmCount.Id === elem.Id && alarmCount.AlarmGroupId === elem.AlarmGroupId);\r\n });\r\n}\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmCountReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSitemapGroupsState } from '../selectors';\r\n\r\nexport const getState = createSelector(getSitemapGroupsState, state => state.alarmCounts);\r\n\r\nexport const getAlertSchedule = createSelector(getState, state => state.selectedAlertSchedule);\r\n\r\nexport const getSelectedAlarmCounts = createSelector(getState, state => state.selectedAlarmCounts);\r\nexport const getAlarmCounts = createSelector(getState, state => state.alarmCounts);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, SitemapGroupAlarm } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load SitemapGroup Alarms', props<{\r\n sitemapGroupId: number\r\n}>());\r\n\r\nexport const LoadFail = createAction('[Core] Load SitemapGroup Alarms Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load SitemapGroup Alarms Success', props<{\r\n alarms: SitemapGroupAlarm[]\r\n}>());","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, SitemapGroupAlarm } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: alarm => alarm.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmActions from './actions';\r\n\r\nconst alarmsReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmActions.LoadSuccess, (state, { alarms }) => adapter.setAll(alarms, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSitemapGroupsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getSitemapGroupsState, state => state.alarms);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getPresent = createSelector(getAll, alarms => alarms.filter(alarm => alarm));\r\nexport const getPresentCount = createSelector(getPresent, presentAlarms => presentAlarms.length);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, SitemapGroupDatapointSettings } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load SitemapGroup Datapoint Settings', props<{\r\n sitemapGroupId: number,\r\n datapointIds?: number[],\r\n startDate?: Date,\r\n endDate?: Date\r\n}>());\r\n\r\nexport const LoadFail = createAction('[Core] Load SitemapGroup Datapoint Settings Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load SitemapGroup Datapoint Settings Success', props<{\r\n datapointSettings: SitemapGroupDatapointSettings[]\r\n}>());","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { SitemapGroupDatapointSettings, ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: datapoint => datapoint.id\r\n})\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n})","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DatapointActions from './actions';\r\n\r\nconst datapointsReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(DatapointActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(DatapointActions.LoadSuccess, (state, { datapointSettings }) => adapter.setAll(datapointSettings, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSitemapGroupsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getSitemapGroupsState, state => state.datapointSettings);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getInvalid = createSelector(getAll, datapoints => datapoints.filter(datapoint => datapoint.value));\r\nexport const getInvalidCount = createSelector(getInvalid, invalidDatapoints => invalidDatapoints.length);\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, SitemapGroupData } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load SitemapGroup Datapoint Values',\r\n (sitemapGroupId: number, dpIdentifierIds: any[]) => ({ sitemapGroupId, dpIdentifierIds }));\r\n\r\n\r\nexport const LoadFail = createAction('[Core] Load SitemapGroup Datapoint Values Fail',\r\n (sitemapGroupId: number, error: ApiError) => ({ sitemapGroupId, error }));\r\n\r\nexport const LoadSuccess = createAction('[Core] Load SitemapGroup Datapoint Values Success',\r\n (sitemapGroupId: number, datapoints: SitemapGroupData[]) => ({ sitemapGroupId, datapoints }));","import { ApiError, SitemapGroupData } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n datapointValues: SitemapGroupData[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n datapointValues: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n}","import * as _ from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as DatapointActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointActions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(DatapointActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(DatapointActions.LoadSuccess, (state, { datapoints }) => ({\r\n ...state,\r\n datapointValues: datapoints,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n);\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSitemapGroupsState } from '../selectors';\r\n\r\n\r\nexport const getState = createSelector(getSitemapGroupsState, state => state.datapointValues);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getDatapointValues = createSelector(getState, state => state && state.datapointValues);\r\n\r\n// export const getByDatapointIdentifierId = (assetId: number, datapointIdentifierId: number[]) => createSelector(\r\n// getAll,\r\n// datapoints => datapoints.filter(datapoint => datapointIdentifierId.includes(datapoint.datapointId))\r\n// );","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, SitemapGroupStatus } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load SitemapGroup Status', (sitemapGroupId: number) => ({sitemapGroupId}));\r\n\r\nexport const LoadFail = createAction('[Core] Load SitemapGroup Status Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load SitemapGroup Status Success', props<{\r\n status: SitemapGroupStatus[]\r\n}>());","import { ApiError, SitemapGroupStatus } from '@rfv/modules/core/models';\r\nimport { createEntityAdapter, EntityState } from '@ngrx/entity';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: value => value.assetId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as StatusActions from './actions';\r\n\r\nconst entitiesReducer = createReducer(\r\n initialState,\r\n\r\n on(StatusActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(StatusActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(StatusActions.LoadSuccess, (state, { status }) => adapter.setAll(status, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entitiesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSitemapGroupsState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getSitemapGroupsState, state => state.status);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { AggregateUtilization, ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction(\r\n '[Core] Load Aggregate Utilization',\r\n (sitemapGroupId: number, startDate: Date, endDate: Date, approximate: boolean = false) => ({ sitemapGroupId, startDate, endDate, approximate })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[Core] Load Aggregate Utilization Fail',\r\n (error: ApiError) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Core] Load Aggregate Utilization Success',\r\n (entities: AggregateUtilization, startDate: Date, endDate: Date) => ({ entities, startDate, endDate })\r\n);","import { createEntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { ApiError, AssetDetailUtilization, AggregateUtilization } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n startDate: Date;\r\n endDate: Date;\r\n data: AggregateUtilization;\r\n}\r\n\r\nexport const initialState: State = {\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n startDate: null,\r\n endDate: null,\r\n data: null,\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { entities, startDate, endDate }) => ({\r\n ...state,\r\n data: entities,\r\n startDate: startDate,\r\n endDate: endDate,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null,\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSitemapGroupsState } from '../selectors';\r\nimport { moment } from '@rfv/modules/shared/utils/moment';\r\nimport { AssetUtilization, TotalUtilization } from '@rfv/modules/core/models';\r\n\r\nimport * as _ from 'lodash';\r\n\r\nexport const getState = createSelector(getSitemapGroupsState, state => state.utilization);\r\n\r\nexport const getData = createSelector(getState, state => state.data);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getTotalUtilization = createSelector(getState, state => {\r\n return state.data?.TotalUtilizationList\r\n});\r\n\r\nexport const getSitemapUtilization = createSelector(getState, state => {\r\n return state.data?.SitemapUtilizationList \r\n});\r\n\r\nexport const getAssetUtilization = createSelector(getState, state => {\r\n return state.data?.AssetUtilizationList \r\n});\r\n\r\nexport const getTimeBasedUtilization = createSelector(getState, state => {\r\n return state.data?.TimeGroupedUtilization\r\n});\r\n\r\n\r\n","import { Store } from '@ngrx/store';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, withLatestFrom, mergeMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { SitemapGroupService, UtilizationService } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport * as fromEntities from './actions';\r\nimport * as fromAlarmCounts from './alarm-counts';\r\nimport * as fromAlarms from './alarms';\r\nimport * as fromDatapointSettings from './datapoint-settings';\r\nimport * as fromDatapointValues from './datapoint-values';\r\nimport * as fromStatus from './status';\r\nimport * as fromUtilization from './utilization';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _sitemapGroupService: SitemapGroupService,\r\n private _utilizationService: UtilizationService,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public loadEntities$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEntities.Load),\r\n switchMap(action => this._sitemapGroupService.getEntities().pipe(\r\n map(sitemapGroups => fromEntities.LoadSuccess({ sitemapGroups })),\r\n catchError(error => of(fromEntities.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public loadAlarms$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromAlarms.Load),\r\n switchMap(action => this._sitemapGroupService.getAlarms(action.sitemapGroupId).pipe(\r\n map(alarms => fromAlarms.LoadSuccess({ alarms })),\r\n catchError(error => of(fromAlarms.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public loadDatapointSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapointSettings.Load),\r\n switchMap(action => this._sitemapGroupService.getDatapoints(action.sitemapGroupId).pipe(\r\n map(datapointSettings => fromDatapointSettings.LoadSuccess({ datapointSettings })),\r\n catchError(error => of(fromDatapointSettings.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public loadDatapointValues$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapointValues.Load),\r\n switchMap(action => this._sitemapGroupService.getDatapointValues(action.sitemapGroupId, action.dpIdentifierIds).pipe(\r\n map(datapoints => fromDatapointValues.LoadSuccess(action.sitemapGroupId, datapoints)),\r\n catchError(error => of(fromDatapointValues.LoadFail(action.sitemapGroupId, error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromStatus.Load),\r\n switchMap(action => this._sitemapGroupService.getStatus(action.sitemapGroupId).pipe(\r\n map(status => fromStatus.LoadSuccess({ status })),\r\n catchError(error => of(fromStatus.LoadFail({ error })))\r\n ))\r\n )\r\n ); \r\n\r\n public LoadAggregateUtilization$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUtilization.Load),\r\n switchMap(action => this._utilizationService.getAggregateUtilization(action.sitemapGroupId, action.startDate, action.endDate, action.approximate).pipe(\r\n mergeMap(entities => [\r\n fromUtilization.LoadSuccess(entities, action.startDate, action.endDate),\r\n ]),\r\n catchError(error => of(fromUtilization.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadAlarmCounts$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromAlarmCounts.Load),\r\n switchMap(action => this._sitemapGroupService.getAlarmCountsByGroupAndSchedule(action.sitemapGroupId, action.alertScheduleId, action.alarmGroupIdsCsv).pipe(\r\n map(alarmCounts => fromAlarmCounts.LoadSuccess({ alarmCounts })),\r\n catchError(error => of(fromAlarmCounts.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public saveAlarmCounts$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromAlarmCounts.Save),\r\n withLatestFrom(\r\n this._store$.select(fromCore.SitemapGroups.AlarmCounts.getAlertSchedule),\r\n this._store$.select(fromCore.SitemapGroups.AlarmCounts.getSelectedAlarmCounts)\r\n ),\r\n switchMap(([action, alertSchedule, alarmCounts]) => {\r\n return this._sitemapGroupService.saveBatchAlertRecipients(\r\n action.rootSitemapId,\r\n alertSchedule.Id,\r\n action.userIds,\r\n action.notificationTypeIds,\r\n alarmCounts.map(count => [ count.Id, count.AlarmGroupId, count.AlarmGroupAlertScheduleId ])\r\n ).pipe(\r\n mergeMap(() => [\r\n fromAlarmCounts.SaveSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Alert Recipients Added Successfully',\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(fromAlarmCounts.SaveFail({ error })))\r\n )\r\n })\r\n\r\n )\r\n );\r\n}","import { Action, combineReducers, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as fromEntities from './actions';\r\n\r\nimport * as fromAlarmCounts from './alarm-counts';\r\nimport * as fromAlarms from './alarms';\r\nimport * as fromDatapointSettings from './datapoint-settings';\r\nimport * as fromDatapointValues from './datapoint-values';\r\nimport * as fromStatus from './status';\r\nimport * as fromUtilization from './utilization';\r\n\r\nconst sitemapGroupsReducer = combineReducers({\r\n entities: createReducer(\r\n initialState,\r\n \r\n on(fromEntities.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n \r\n on(fromEntities.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n \r\n on(fromEntities.LoadSuccess, (state, { sitemapGroups }) => adapter.setAll(sitemapGroups, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n ),\r\n\r\n alarmCounts: fromAlarmCounts.reducer,\r\n alarms: fromAlarms.reducer,\r\n datapointSettings: fromDatapointSettings.reducer,\r\n datapointValues: fromDatapointValues.reducer,\r\n status: fromStatus.reducer,\r\n utilization: fromUtilization.reducer\r\n});\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return sitemapGroupsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport { SitemapGroup } from '@rfv/modules/core/models';\r\nimport { getAll as getAllAssets } from '@rfv/modules/core/store/assets/entities/selectors';\r\n\r\nimport { uniqBy, pullAll } from 'lodash';\r\n\r\nexport const getSitemapGroupsState = createSelector(getFeatureState, state => state.sitemapGroups);\r\n\r\nexport const getEntitiesState = createSelector(getSitemapGroupsState, state => state.entities);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getEntitiesState);\r\n\r\nexport const isLoaded = createSelector(getEntitiesState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getEntitiesState, state => state.isLoading);\r\nexport const getError = createSelector(getEntitiesState, state => state.error);\r\n\r\nexport const getRoot = createSelector(\r\n getEntities,\r\n getAll,\r\n (entities, sitemapGroups) => sitemapGroups.find((sitemapGroup => !entities[sitemapGroup.parentId]))\r\n);\r\n\r\nexport const getSitemapGrousWithoutChildren = createSelector(\r\n getAll,\r\n getAllAssets,\r\n (allSitemapGroups, allAssets) => {\r\n const allSItemapGroupIds = allSitemapGroups.map(sitemapGroup => sitemapGroup.id);\r\n const uniqueSitemapGroupIds = uniqBy(allAssets, 'sitemapGroupId').map(asset => asset.sitemapGroupId);\r\n return pullAll(allSItemapGroupIds, uniqueSitemapGroupIds);\r\n }\r\n);\r\n\r\nexport const getPath = createSelector(\r\n getEntities,\r\n entities => (sitemapGroupId: number, include: boolean = true) => {\r\n let path: SitemapGroup[] = [];\r\n\r\n let sitemapGroup = entities[sitemapGroupId];\r\n\r\n if (sitemapGroup) {\r\n if (include)\r\n path.push(sitemapGroup);\r\n\r\n while (true) {\r\n sitemapGroup = entities[sitemapGroup.parentId];\r\n \r\n if (sitemapGroup)\r\n path.unshift(sitemapGroup);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n);\r\n\r\nexport const getPathByAssetId = (assetId: number, includeAsset?: boolean) => createSelector(\r\n getEntities,\r\n getAllAssets,\r\n (sitemapGroupEntities, allAssets) => {\r\n const pathArr: SitemapGroup[] = [];\r\n const foundAsset: any = allAssets.find(asset => asset.id === assetId);\r\n let foundSitemapGroup = sitemapGroupEntities[foundAsset.sitemapGroupId];\r\n\r\n if (foundSitemapGroup) {\r\n if (includeAsset) {\r\n pathArr.push(foundSitemapGroup, foundAsset);\r\n } else {\r\n pathArr.push(foundSitemapGroup);\r\n }\r\n\r\n while (true) {\r\n foundSitemapGroup = sitemapGroupEntities[foundSitemapGroup.parentId];\r\n\r\n if (foundSitemapGroup) {\r\n pathArr.unshift(foundSitemapGroup);\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return pathArr;\r\n }\r\n);\r\n\r\nexport const getPathString = createSelector(\r\n getPath,\r\n getPath => (sitemapGroupId: number, include: boolean = true) => getPath(sitemapGroupId, include).map(sitemapGroup => sitemapGroup.name).join('/')\r\n);","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError, SitemapGroup } from '@rfv/modules/core/models';\r\n\r\nimport * as fromAlarmCounts from './alarm-counts';\r\nimport * as fromAlarms from './alarms';\r\nimport * as fromDatapointSettings from './datapoint-settings';\r\nimport * as fromDatapointValues from './datapoint-values';\r\nimport * as fromStatus from './status';\r\nimport * as fromUtilization from './utilization';\r\n\r\nexport interface EntitiesState extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: sitemapGroup => sitemapGroup.id,\r\n sortComparer: (a, b) => a.name ? a.name.localeCompare(b.name) : 1\r\n});\r\n\r\nexport const initialState: EntitiesState = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n});\r\n\r\nexport interface State {\r\n entities: EntitiesState,\r\n\r\n alarmCounts: fromAlarmCounts.State,\r\n alarms: fromAlarms.State,\r\n datapointSettings: fromDatapointSettings.State,\r\n datapointValues: fromDatapointValues.State,\r\n status: fromStatus.State,\r\n utilization: fromUtilization.State\r\n}\r\n","import * as fromAggregateAlarmHistory from './aggregate-Alarm-History';\r\nimport * as fromAggregateFleetVitals from './aggregate-fleet-vitals';\r\nimport * as fromAggregateRuntime from './aggregate-runtime';\r\nimport * as fromAlarmGroups from './alarm-groups';\r\nimport * as fromAlarmStates from './alarm-states';\r\nimport * as fromAlarmTests from './alarm-tests';\r\nimport * as fromAlarmTypes from './alarm-types';\r\nimport * as fromAlertSchedules from './alert-schedules';\r\nimport * as fromAlertScheduleTimes from './alert-schedules-times';\r\nimport * as fromAlarmSuppression from './alarm-suppression';\r\nimport * as fromApplications from './applications';\r\nimport * as fromAssets from './assets';\r\nimport * as fromAssetTypes from './assetTypes';\r\nimport * as fromAuth from './auth';\r\nimport * as fromCellularProviders from './cellular-providers';\r\nimport * as fromCommLoss from './comm-loss';\r\nimport * as fromCommLossTypes from './comm-loss-types';\r\nimport * as fromCompanies from './companies';\r\nimport * as fromControlAdmin from './control-admin';\r\nimport * as fromCountries from './countries';\r\nimport * as fromCustomers from './customers';\r\nimport * as fromDashboards from './dashboards';\r\nimport * as fromDatapoints from './datapoints';\r\nimport * as fromDealers from './dealers';\r\nimport * as fromDerivedDataPoints from './derived-data-points';\r\nimport * as fromDeviceSearchResults from './device-search-results';\r\nimport * as fromECMSerialNumberSuffixes from './ecm-serial-number-suffix';\r\nimport * as fromEMO from './emo';\r\nimport * as fromEventCodes from './event-code';\r\nimport * as fromEventParties from './event-parties';\r\nimport * as fromFeatureAccess from './feature-access';\r\nimport * as fromFleetVitals from './fleet-vitals';\r\nimport * as fromGaugeTypes from './gauge-types';\r\nimport * as fromGeofences from './geofences';\r\nimport * as fromGlobalColors from './global-colors';\r\nimport * as fromGlobalJobTitles from './global-job-titles';\r\nimport * as fromGlobalTimezones from './global-timezones';\r\nimport * as fromGPSConfig from './gps-config';\r\nimport * as fromIcons from './icons';\r\nimport * as fromIndustries from './industries';\r\nimport * as fromLocationGPSHistory from './location';\r\nimport * as fromNotificationTypes from './notification-types';\r\nimport * as fromOnboardingEventLogs from './onboarding-event-logs';\r\nimport * as fromOnboardingQueue from './onboarding-queue';\r\nimport * as fromplatformServiceSettings from './platformServiceSettings';\r\nimport * as fromReports from './reports';\r\nimport * as fromSerialNumberPrefixes from './serial-number-prefix';\r\nimport * as fromSitemapGroups from './sitemap-groups';\r\nimport * as fromStreamingTemplates from './streaming-template';\r\nimport * as fromStreamingTemplateConfig from './streaming-template-config';\r\nimport * as fromSupport from './support';\r\nimport * as fromSystemEventDiagnostics from './system-event-diagnostics';\r\nimport * as fromSystemStatus from './system-status';\r\nimport * as fromTiles from './tiles';\r\nimport * as fromTimeIntervalDropdowns from './time-interval-dropdowns';\r\nimport * as fromToolTips from './tool-tips';\r\nimport * as fromTripConfig from './trip-config';\r\nimport * as fromTripSummary from './trip-summary';\r\nimport * as fromUnitsOfMeasure from './units-of-measure';\r\nimport * as fromUnitStates from './unit-states';\r\nimport * as fromUserAccessFilter from './customer-user-access-filters';\r\nimport * as fromUserAlertRecipients from './user-alert-recipients';\r\nimport * as fromUserGlobalFilterDataPointGroup from './user-global-filter-data-point-group';\r\nimport * as fromUserGroups from './user-groups';\r\nimport * as fromUserPermissions from './user-permissions';\r\nimport * as fromUserSession from './user-session';\r\nimport * as fromVIM from './vim';\r\nimport * as fromDealerVim from './dealerVim';\r\nimport * as fromUnitsOfMeasureConversions from './units-of-measure-conversions';\r\nimport * as fromDeviceControls from './device-commands';\r\nimport * as fromNotifications from './notifications';\r\nimport * as fromUnitControl from './unit-control';\r\nimport * as fromControlHistory from './control-history';\r\nimport * as fromBrands from './brands'\r\n\r\nimport { ApiError, BreadcrumbOptions } from '@rfv/modules/core/models';\r\n\r\nimport { SerializedRouterStateSnapshot } from '@ngrx/router-store';\r\n\r\nexport interface State {\r\n status: {\r\n isOnline: boolean;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n breadcrumbOptions: BreadcrumbOptions;\r\n breadcrumbButtons: string[];\r\n\r\n navStack: SerializedRouterStateSnapshot[]\r\n };\r\n\r\n aggregateFleetVitals: fromAggregateFleetVitals.State;\r\n aggregateAlarmHistory: fromAggregateAlarmHistory.State;\r\n aggregateRuntime: fromAggregateRuntime.State;\r\n alarmGroups: fromAlarmGroups.State;\r\n alarmStates: fromAlarmStates.State;\r\n alarmTests: fromAlarmTests.State;\r\n alarmTypes: fromAlarmTypes.State;\r\n alertSchedules: fromAlertSchedules.State;\r\n alertScheduleTimes: fromAlertScheduleTimes.State;\r\n alarmSuppression: fromAlarmSuppression.State;\r\n applications: fromApplications.State;\r\n assets: fromAssets.State;\r\n assetTypes: fromAssetTypes.State;\r\n auth: fromAuth.State;\r\n cellularProviders: fromCellularProviders.State;\r\n commLoss: fromCommLoss.State;\r\n commLossTypes: fromCommLossTypes.State;\r\n companies: fromCompanies.State;\r\n controlDatapoint: fromControlAdmin.State;\r\n countries: fromCountries.State;\r\n customers: fromCustomers.State;\r\n customerUserAccessFilter: fromUserAccessFilter.State;\r\n dashboards: fromDashboards.State;\r\n datapoints: fromDatapoints.State;\r\n dealers: fromDealers.State;\r\n derivedDataPoints: fromDerivedDataPoints.State;\r\n deviceSearchResults: fromDeviceSearchResults.State;\r\n ecmSerialNumberSuffixes: fromECMSerialNumberSuffixes.State;\r\n emo: fromEMO.State;\r\n eventCodes: fromEventCodes.State;\r\n eventParties: fromEventParties.State;\r\n featureAccess: fromFeatureAccess.State;\r\n fleetVitals: fromFleetVitals.State;\r\n gaugeTypes: fromGaugeTypes.State;\r\n geofences: fromGeofences.State;\r\n globalColors: fromGlobalColors.State;\r\n globalJobTitles: fromGlobalJobTitles.State;\r\n globalTimezones: fromGlobalTimezones.State;\r\n gpsConfig: fromGPSConfig.State;\r\n icons: fromIcons.State;\r\n industries: fromIndustries.State;\r\n locationGPSHistory: fromLocationGPSHistory.State;\r\n notificationTypes: fromNotificationTypes.State;\r\n onboardingEventLogs: fromOnboardingEventLogs.State;\r\n onboardingQueue: fromOnboardingQueue.State;\r\n platformServiceSettings: fromplatformServiceSettings.State;\r\n serialNumberPrefixes: fromSerialNumberPrefixes.State;\r\n sitemapGroups: fromSitemapGroups.State;\r\n streamingTemplates: fromStreamingTemplates.State;\r\n streamingTemplateConfig: fromStreamingTemplateConfig.State;\r\n support: fromSupport.State;\r\n systemEventDiagnostics: fromSystemEventDiagnostics.State;\r\n systemStatus: fromSystemStatus.State;\r\n tiles: fromTiles.State;\r\n timeIntervalDropDowns: fromTimeIntervalDropdowns.State;\r\n toolTips: fromToolTips.State;\r\n tripConfig: fromTripConfig.State;\r\n tripSummary: fromTripSummary.State;\r\n unitsOfMeasure: fromUnitsOfMeasure.State;\r\n unitStates: fromUnitStates.State;\r\n userAlertRecipients: fromUserAlertRecipients.State;\r\n userGlobalFilterDataPointGroup: fromUserGlobalFilterDataPointGroup.State;\r\n userGroups: fromUserGroups.State;\r\n userPermissons: fromUserPermissions.State;\r\n userSchedules: fromReports.State;\r\n userSession: fromUserSession.State;\r\n vim: fromVIM.State;\r\n dealerVim: fromDealerVim.State;\r\n unitsOfMeasureConversions: fromUnitsOfMeasureConversions.State;\r\n deviceCommands: fromDeviceControls.State;\r\n notifications: fromNotifications.State;\r\n unitControl: fromUnitControl.State;\r\n controlHistory: fromControlHistory.State; \r\n brands: fromBrands.State; \r\n}\r\n\r\nexport const initialState: State['status'] = {\r\n isOnline: true,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n breadcrumbOptions: null,\r\n breadcrumbButtons: null,\r\n\r\n navStack: []\r\n};\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, VimsStreamingTemplateConfig, StreamingTemplateAssignment } from '@rfv/modules/core/models';\r\nimport { perkinsMachineInfo } from '../../models/perkins-machine-info';\r\n\r\nexport const Load = createAction('[Core] Load Streaming Template Config');\r\nexport const LoadFail = createAction('[Core] Load Streaming Template Config Fail', props<{\r\n error: ApiError\r\n}>());\r\nexport const LoadSuccess = createAction('[Core] Load Streaming Template Config Success', props<{\r\n config: VimsStreamingTemplateConfig[]\r\n}>());\r\n\r\n\r\nexport const Save = createAction('[Core] Save Streaming Template Config', props());\r\nexport const SaveFail = createAction('[Core] Save Streaming Template Config Fail', props<{\r\n error: ApiError\r\n}>());\r\nexport const SaveSuccess = createAction('[Core] Save Streaming Template Config Success');\r\n\r\n\r\nexport const Delete = createAction('[Core] Delete Streaming Template Config', (id: number) => ({ id }));\r\nexport const DeleteFail = createAction('[Core] Delete Streaming Template Config Fail', props<{\r\n error: ApiError\r\n}>());\r\nexport const DeleteSuccess = createAction('[Core] Delete Streaming Template Config Success');\r\n\r\nexport const LoadPerkinsMachineInfo = createAction('[Core] Load Perkins Machine Info');\r\nexport const LoadPerkinsMachineInfoFail = createAction('[Core] Load Perkins Machine Info Fail', (error: ApiError) => ({ error }));\r\nexport const LoadPerkinsMachineInfoSuccess = createAction('[Core] Load Perkins Machine Info Success', (perkinsMachineInfo: perkinsMachineInfo) => ({ perkinsMachineInfo }));","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as StreamingTemplateConfigActions from './actions';\r\n\r\nimport { StreamingTemplateService } from '@rfv/modules/core/services/streaming-template.service';\r\nimport { UnitInfoService } from '../../services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _streamingTemplateService: StreamingTemplateService,\r\n private _unitInfoService: UnitInfoService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.Load),\r\n switchMap(action => this._streamingTemplateService.getStreamingTemplateForVims(null, null).pipe(\r\n map(config => StreamingTemplateConfigActions.LoadSuccess({ config })),\r\n catchError(error => of(StreamingTemplateConfigActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n \r\n public save$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.Save),\r\n switchMap(action => this._streamingTemplateService.assignStreamingTemplate(action).pipe(\r\n map(_ => StreamingTemplateConfigActions.SaveSuccess()),\r\n catchError(error => of(StreamingTemplateConfigActions.SaveFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public saveSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.SaveSuccess),\r\n mergeMap(_ => [\r\n StreamingTemplateConfigActions.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Streaming template assigned successfully.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public saveFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.SaveFail),\r\n mergeMap(error => [\r\n error.error?.message ?\r\n fromRoot.Modal.Open({\r\n options: {\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.TextLeft,\r\n title: `Streaming template assignment failed`,\r\n data: error.error?.message,\r\n primaryText: 'Ok'\r\n }\r\n }) : fromRoot.Banner.Show({ options: { type: 'error', message: 'Streaming template assignment failed.', autoClose: 5000 }})\r\n ])\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.Delete),\r\n switchMap(action => this._streamingTemplateService.unassignStreamingTemplate(action.id).pipe(\r\n map(_ => StreamingTemplateConfigActions.DeleteSuccess()),\r\n catchError(error => of(StreamingTemplateConfigActions.DeleteFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.DeleteSuccess),\r\n mergeMap(_ => [\r\n StreamingTemplateConfigActions.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Streaming template unassigned successfully.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public deleteFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.DeleteFail),\r\n mergeMap(_ => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `Streaming template unassignment failed.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public getPerkinsInfo$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateConfigActions.LoadPerkinsMachineInfo),\r\n switchMap(action => this._unitInfoService.getPerkinsInfo(2, 79, 80).pipe( // <= how 2 not hardcode? TODO: make this data driven(maybe by brands?) \r\n map(response => StreamingTemplateConfigActions.LoadPerkinsMachineInfoSuccess(response)),\r\n catchError(error => of(StreamingTemplateConfigActions.LoadPerkinsMachineInfoFail(error)))\r\n ))\r\n )\r\n);\r\n\r\n\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError, MachineInfoComponentItemLegend } from '@rfv/modules/core/models';\r\nimport { VimsStreamingTemplateConfig } from '../../models/vim-streaming-template-config';\r\nimport { perkinsMachineInfo } from '../../models/perkins-machine-info';\r\n\r\nexport interface State extends EntityState {\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n isSaving: boolean;\r\n\r\n perkinsMachineInfo: perkinsMachineInfo; \r\n\r\n engineModels: EntityState; \r\n panelModels: EntityState; \r\n panelManufacturer: EntityState; \r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: streamingTemplate => streamingTemplate?.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const perkinsAdapter = createEntityAdapter({\r\n selectId: engine => engine?.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n isSaving: false,\r\n\r\n perkinsMachineInfo: null,\r\n\r\n engineModels: perkinsAdapter.getInitialState(),\r\n panelModels: perkinsAdapter.getInitialState(),\r\n panelManufacturer: perkinsAdapter.getInitialState()\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState, perkinsAdapter } from './state';\r\n\r\nimport * as StreamingTemplateConfigActions from './actions';\r\n\r\nconst streamingTemplateConfigReducer = createReducer(\r\n initialState,\r\n\r\n on(StreamingTemplateConfigActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(StreamingTemplateConfigActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(StreamingTemplateConfigActions.LoadSuccess, (state, { config }) => adapter.setAll(config, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n \r\n\r\n on(StreamingTemplateConfigActions.Save, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(StreamingTemplateConfigActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(StreamingTemplateConfigActions.SaveSuccess, (state) => ({\r\n ...state,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n on(StreamingTemplateConfigActions.Delete, (state, { id }) => adapter.removeOne(id, state)),\r\n\r\n on(StreamingTemplateConfigActions.LoadPerkinsMachineInfo, (state) => ({\r\n ...state,\r\n isLoading: true\r\n})),\r\n\r\non(StreamingTemplateConfigActions.LoadPerkinsMachineInfoFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n})),\r\n\r\non(StreamingTemplateConfigActions.LoadPerkinsMachineInfoSuccess, (state, { perkinsMachineInfo }) => ({\r\n ...state,\r\n engineModels: perkinsAdapter.setAll(perkinsMachineInfo.EngineModels, state.engineModels),\r\n panelModels: perkinsAdapter.setAll(perkinsMachineInfo.PanelModels, state.panelModels),\r\n panelManufacturer: perkinsAdapter.setAll(perkinsMachineInfo.PanelManufacturers, state.panelManufacturer),\r\n})))\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return streamingTemplateConfigReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter, perkinsAdapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.streamingTemplateConfig);\r\nexport const getEngineModelState = createSelector(getState, state => state.engineModels);\r\nexport const getPanelModelsState = createSelector(getState, state => state.panelModels);\r\nexport const getPanelManufacturerState = createSelector(getState, state => state.panelManufacturer);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const {\r\n selectEntities: getEngineEntities,\r\n selectAll: getAllEngineModels,\r\n} = perkinsAdapter.getSelectors(getEngineModelState);\r\n\r\nexport const {\r\n selectEntities: getPanelModelsEntities,\r\n selectAll: getAllPanelmodels,\r\n} = perkinsAdapter.getSelectors(getPanelModelsState);\r\n\r\nexport const {\r\n selectEntities: getPanelManufacturerEntities,\r\n selectAll: getAllPanelManufacturer,\r\n} = perkinsAdapter.getSelectors(getPanelManufacturerState);\r\n\r\nexport const getPanelManufacturers = createSelector(getState, state => state.panelManufacturer); \r\nexport const getPanelModels = createSelector(getState, state => state.panelModels); ","import { PleConfigToolTemplate } from './../../../support/modules/server-config/models/ple-config-tool-template.model';\r\nimport { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Streaming Templates', (includeAll: boolean = true) => ({ includeAll }));\r\nexport const LoadEndpointTypesFail = createAction('[Core] Load Endpoint Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadFail = createAction('[Core] Load Streaming Templates Fail', props<{\r\n error: ApiError\r\n}>());\r\nexport const LoadSuccess = createAction('[Core] Load Streaming Templates Success', props<{\r\n streamingTemplates: PleConfigToolTemplate[]\r\n}>());\r\n\r\n\r\n\r\n// Delete Streaming config\r\nexport const DeleteStreamingTemplate = createAction('[Support] Delete Streaming Template',\r\n props<{ templateId: number }>());\r\n\r\nexport const DeleteStreamingTemplateSuccess = createAction('[Support] Delete Streaming Template Success',\r\n props<{ templateId: number }>());\r\n\r\nexport const DeleteStreamingTemplateFail = createAction('[Support] Delete Streaming Template Fail',\r\n props<{ error: ApiError }>());\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\nimport { act, Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as StreamingTemplateActions from './actions';\r\nimport {StreamingTemplateService} from '@rfv/modules/core/services/streaming-template.service';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromStreamingTemplateConfig from '../streaming-template-config';\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _streamingTemplateService: StreamingTemplateService,\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateActions.Load),\r\n switchMap(action => this._streamingTemplateService.getAll(action.includeAll).pipe(\r\n map(streamingTemplates => StreamingTemplateActions.LoadSuccess({ streamingTemplates })),\r\n catchError(error => of(StreamingTemplateActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(StreamingTemplateActions.DeleteStreamingTemplate),\r\n switchMap(action => this._streamingTemplateService.deleteStreamingConfig(action.templateId).pipe(\r\n map(success => StreamingTemplateActions.DeleteStreamingTemplateSuccess({templateId: action.templateId})),\r\n catchError(error => of(StreamingTemplateActions.DeleteStreamingTemplateFail({error})))\r\n ))\r\n )\r\n );\r\n\r\n\r\n\r\n\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { StreamingTemplateInfo } from '@rfv/modules/support/modules/server-config/models/ple-config-tool-template.model';\r\n\r\nexport interface State extends EntityState {\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n //AssignStreamingTemplate\r\n isStreamingTemplateAssigning: boolean;\r\n isStreamingTemplateAssigned: boolean;\r\n\r\n isDeleting: boolean;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: streamingTemplate => streamingTemplate?.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n isStreamingTemplateAssigned: false,\r\n isStreamingTemplateAssigning: false,\r\n\r\n isDeleting: false\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as StreamingTemplateActions from './actions';\r\n\r\nconst streamingTemplateReducer = createReducer(\r\n initialState,\r\n\r\n on(StreamingTemplateActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(StreamingTemplateActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(StreamingTemplateActions.LoadSuccess, (state, { streamingTemplates }) => adapter.setAll(streamingTemplates.map(templates => templates.Info), {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(StreamingTemplateActions.DeleteStreamingTemplate, (state, {templateId}) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(StreamingTemplateActions.DeleteStreamingTemplateSuccess, (state, {templateId}) => adapter.removeOne(templateId, {\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(StreamingTemplateActions.DeleteStreamingTemplateFail, (state, {error}) => ({\r\n ...state,\r\n isDeleting: false,\r\n error\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return streamingTemplateReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.streamingTemplates);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\n//AssignStreamingTemplate\r\nexport const isStreamingTemplateAssigning = createSelector(getState, state => state.isStreamingTemplateAssigning);\r\nexport const isStreamingTemplateAssigned = createSelector(getState, state => state.isStreamingTemplateAssigned);\r\n","import {createAction} from '@ngrx/store';\r\nimport {ApiError, DatapointOccurrenceModel, DatapointOccurrenceUpdateModel} from '@rfv/modules/core/models';\r\n\r\n\r\nexport const Update = createAction('[Core] Update Datapoint Occurrences', (\r\n sitemapGroupId: number,\r\n occurrences: DatapointOccurrenceUpdateModel[]\r\n) => ({ sitemapGroupId, occurrences}))\r\nexport const UpdateFail = createAction('[Core] Update Datapoint Occurrences Fail', (error: ApiError) => ({ error }));\r\nexport const UpdateSuccess = createAction('[Core] Update Datapoint Occurrences Success', (response: boolean) => ({ response }));\r\n\r\n\r\nexport const Load = createAction('[Core] Load Datapoint Occurrences', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadFail = createAction('[Core] Load Datapoint Occurrences Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Datapoint Occurrences Success', (\r\n occurrences: DatapointOccurrenceModel[]\r\n) => ({ occurrences }));\r\n\r\nexport const DataPointsToUpdate = createAction('[Core] Datapoints to Update', (dataPoints: DatapointOccurrenceUpdateModel[]) => ({dataPoints}))\r\n","import {createEntityAdapter, EntityState} from '@ngrx/entity';\r\nimport {ApiError, DatapointOccurrenceModel, DatapointOccurrenceUpdateModel} from '@rfv/modules/core/models';\r\n\r\n\r\nexport interface State extends EntityState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isUpdating: boolean;\r\n isUpdated: boolean;\r\n dataPointsToUpdate: DatapointOccurrenceUpdateModel[];\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: occurrence => occurrence.DataPointName + occurrence.DataPointIdentifierId\r\n})\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoading: false,\r\n isLoaded: false,\r\n isUpdating: false,\r\n isUpdated: false,\r\n dataPointsToUpdate: null,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, adapter, initialState } from './state';\r\nimport * as EntityActions from './actions';\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Update, state => ({\r\n ...state,\r\n isUpdating: true,\r\n isUpdated: false,\r\n })),\r\n\r\n on(EntityActions.UpdateSuccess, (state, { response }) => ({\r\n ...state,\r\n isUpdating: false,\r\n isUpdated: true\r\n })),\r\n\r\n on(EntityActions.UpdateFail, (state, { error }) => ({\r\n ...state,\r\n isUpdating: false,\r\n isUpdated: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isUpdated: false\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { occurrences }) => adapter.setAll(occurrences, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.DataPointsToUpdate, (state, { dataPoints }) => ({\r\n ...state,\r\n dataPointsToUpdate: dataPoints\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getSupportState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getSupportState, state => state.datapointOccurrences);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isUpdating = createSelector(getState, state => state.isUpdating);\r\nexport const isUpdated = createSelector(getState, state => state.isUpdated);\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const getDataPointsToUpdate = createSelector(getState, state => state.dataPointsToUpdate);\r\n","// import { SiteLogParamName } from './../../../../tiles/containers/unit-configuration-queue-tile/site-logs/site-logs.component';\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EndpointType } from '@rfv/modules/tiles/models/endpoint-type.model';\r\nimport { UserLog, UserLogSearchType } from './../../../../tiles/models/user-log.model';\r\nimport { LogType } from '@rfv/modules/tiles/models/log-type.model';\r\n\r\n\r\nexport const LoadEndpointTypes = createAction('[Core] Load Endpoint Types');\r\nexport const LoadEndpointTypesFail = createAction('[Core] Load Endpoint Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEndpointTypesSuccess = createAction('[Core] Load Endpoint Types Success', (endpointTypes: EndpointType[]) => ({ endpointTypes }));\r\n\r\nexport const LoadLogTypes = createAction('[Core] Load Log Types');\r\nexport const LoadLogTypesFail = createAction('[Core] Load Log Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadLogTypesSuccess = createAction('[Core] Load Log Types Success', (logTypes: LogType[]) => ({ logTypes }));\r\n\r\nexport const LoadUserLogs = createAction('[Core] Load User Logs', (startDate: string, endDate: string, scope: number, userIds: number[], searchUserIds: number[], searchAssetIds: number[], endpointIds: number[]) => ({\r\n startDate, endDate, scope, searchUserIds, userIds, searchAssetIds, endpointIds\r\n}));\r\n\r\nexport const LoadUserLogsFail = createAction('[Core] Load User Logs Fail', (error: ApiError) => ({ error }));\r\n\r\nexport const LoadUserLogsSuccess = createAction('[Core] Load User Logs Success', (userLogs: UserLog[]) => ({ userLogs }));\r\n\r\nexport const LoadUserLog = createAction('[Core] Load User Log by Id', (logId: number) => ({ logId }));\r\n\r\nexport const LoadUserLogFail = createAction('[Core] Load User Log by Id Fail', (error: ApiError) => ({ error }));\r\n\r\nexport const LoadUserLogSuccess = createAction('[Core] Load User by Id Log Success', (userLog: UserLog) => ({ userLog }));\r\n\r\nexport const Reset = createAction('[Core] Reset User Logs');\r\n\r\nexport const Cancel = createAction('[Core] cancel load user logs');\r\n","import { ApiError } from '@rfv/modules/core/models';\r\nimport { EndpointType } from '@rfv/modules/tiles/models/endpoint-type.model';\r\nimport { LogType } from '@rfv/modules/tiles/models/log-type.model';\r\nimport { UserLog } from '@rfv/modules/tiles/models/user-log.model';\r\n\r\n\r\nexport interface State {\r\n endpointTypes: EndpointType[];\r\n logTypes: LogType[];\r\n userLogs: UserLog[];\r\n \r\n searchAssetId: number;\r\n searchUserId: number;\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n\r\n isUserLogsLoading: boolean;\r\n isUserLogsLoaded: boolean;\r\n\r\n isUserLogLoading: boolean;\r\n userLog: UserLog;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n endpointTypes: [],\r\n logTypes: [],\r\n userLogs: [],\r\n searchAssetId: null,\r\n searchUserId: null,\r\n\r\n isLoading: false,\r\n isLoaded: false,\r\n\r\n isUserLogsLoading: false,\r\n isUserLogsLoaded: false,\r\n\r\n isUserLogLoading: false,\r\n userLog: null,\r\n \r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as EntityActions from './actions';\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadEndpointTypes, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadEndpointTypesSuccess, (state, { endpointTypes }) => ({\r\n ...state,\r\n endpointTypes: endpointTypes,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadEndpointTypesFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.LoadLogTypes, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadLogTypesSuccess, (state, { logTypes }) => ({\r\n ...state,\r\n logTypes: logTypes,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadLogTypesFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.LoadUserLogs, (state) => ({\r\n ...state,\r\n isUserLogsLoaded: false,\r\n isUserLogsLoading: true\r\n })),\r\n\r\n on(EntityActions.Cancel, (state) => ({\r\n ...state,\r\n isUserLogsLoading: false,\r\n })),\r\n\r\n on(EntityActions.LoadUserLogsSuccess, (state, { userLogs }) => ({\r\n ...state,\r\n userLogs: userLogs,\r\n isUserLogsLoaded: true,\r\n isUserLogsLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadUserLogsFail, (state, { error }) => ({\r\n ...state,\r\n isUserLogsLoaded: false,\r\n isUserLogsLoading: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.Reset, (state) => ({\r\n ...state,\r\n userLogs: [],\r\n isUserLogsLoaded: false,\r\n isUserLogsLoading: false\r\n })),\r\n\r\n on(EntityActions.LoadUserLog, (state) => ({\r\n ...state,\r\n isUserLogLoading: true,\r\n userLog: null\r\n })),\r\n\r\n on(EntityActions.LoadUserLogSuccess, (state, { userLog }) => ({\r\n ...state,\r\n userLog: userLog,\r\n isUserLogLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadUserLogFail, (state, { error }) => ({\r\n ...state,\r\n isUserLogLoading: false,\r\n error: error\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n};\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getSupportState } from '../selectors';\r\nimport * as fromUser from \"@rfv/modules/dashboard/modules/user-admin/store/reducers\";\r\n\r\nexport const getState = createSelector(getSupportState, state => state.siteLogs);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isUserLogsLoaded = createSelector(getState, state => state.isUserLogsLoaded);\r\nexport const isUserLogsLoading = createSelector(getState, state => state.isUserLogsLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getEndpointTypes = createSelector(getState, state => state.endpointTypes.slice().sort((a, b) => a.name.localeCompare(b.name)));\r\nexport const getLogTypes = createSelector(getState, state => state.logTypes.slice().sort((a, b) => a.name.localeCompare(b.name)));\r\n\r\nexport const getUserLogs = createSelector(getState, state => state.userLogs);\r\n\r\nexport const getUserlog = createSelector(getState, state => state.userLog);\r\n\r\nexport const isUserlogLoading = createSelector(getState, state => state.isUserLogLoading);\r\n","import { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { catchError, filter, map, switchMap, withLatestFrom } from 'rxjs/operators';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromUnitCreationLogs from './unit-creation-logs';\r\nimport * as fromUnitCreationTypes from './unit-creation-types';\r\nimport * as fromDatapointOccurrences from './datapoint-occurrences';\r\nimport * as fromSiteLogs from './site-logs';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport { SupportService } from '@rfv/modules/core/services';\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _store$: Store,\r\n private _actions$: Actions,\r\n private _supportService: SupportService\r\n ) { }\r\n\r\n public createUnitCreationLog$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreationLogs.Create),\r\n switchMap(action => this._supportService.createUnitCreationLog(action.unitCreationTypeId).pipe(\r\n map(unitCreationLogId => fromUnitCreationLogs.CreateSuccess(unitCreationLogId),\r\n catchError(error => of(fromUnitCreationLogs.CreateFail(error)))\r\n ))\r\n ))\r\n );\r\n\r\n public loadUnitCreationLogs$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreationLogs.Load),\r\n withLatestFrom(this._store$.select(fromDashboard.getSelectedSitemapGroupId)),\r\n switchMap(([action, sitemapGroupId]) => this._supportService.getUnitCreationLogs(action.sitemapGroupId || sitemapGroupId).pipe(\r\n map(logs => fromUnitCreationLogs.LoadSuccess(logs),\r\n catchError(error => of(fromUnitCreationLogs.LoadFail(error)))\r\n )))\r\n )\r\n );\r\n\r\n public loadUnitCreationTypes$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreationTypes.Load),\r\n switchMap(action => this._supportService.getUnitCreationTypes().pipe(\r\n map(types => fromUnitCreationTypes.LoadSuccess(types),\r\n catchError(error => of(fromUnitCreationTypes.LoadFail(error)))\r\n )))\r\n )\r\n );\r\n\r\n public loadDatapointOccurrences$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapointOccurrences.Load),\r\n withLatestFrom(this._store$.select(fromDashboard.getSelectedSitemapGroupId)),\r\n switchMap(([action, sitemapGroupId]) => this._supportService.getDataPointOccurrences(action.sitemapGroupId || sitemapGroupId).pipe(\r\n map(occurrences => fromDatapointOccurrences.LoadSuccess(occurrences)),\r\n catchError(error => of(fromDatapointOccurrences.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public updateDatapointOccurrences$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapointOccurrences.Update),\r\n withLatestFrom(this._store$.select(fromDashboard.getSelectedSitemapGroupId)),\r\n switchMap(([action, sitemapGroupId]) => this._supportService.putDataPointOccurrences(action.sitemapGroupId || sitemapGroupId, action.occurrences).pipe(\r\n map(result => fromDatapointOccurrences.UpdateSuccess(result)),\r\n catchError(error => of(fromDatapointOccurrences.UpdateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadEndpointTypes$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromSiteLogs.LoadEndpointTypes),\r\n switchMap(action => this._supportService.getEndpointTypes().pipe(\r\n map(result => fromSiteLogs.LoadEndpointTypesSuccess(result)),\r\n catchError(error => of(fromSiteLogs.LoadEndpointTypesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadUserLogTypes$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromSiteLogs.LoadLogTypes),\r\n switchMap(action => this._supportService.getLogTypes().pipe(\r\n map(result => fromSiteLogs.LoadLogTypesSuccess(result)),\r\n catchError(error => of(fromSiteLogs.LoadLogTypesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadUserLogs$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromSiteLogs.LoadUserLogs),\r\n withLatestFrom(this._store$.select(fromDashboard.getSelectedSitemapGroupId)),\r\n switchMap(([action, sitemapGroupId]) => action.type === fromSiteLogs.LoadUserLogs.type ? this._supportService.getUserLogs(action.startDate, action.endDate, action.scope, action.userIds, action.searchUserIds, action.searchAssetIds, action.endpointIds, sitemapGroupId).pipe(\r\n map(result => fromSiteLogs.LoadUserLogsSuccess(result)),\r\n catchError(error => of(fromSiteLogs.LoadUserLogsFail(error)))\r\n ) : of(\r\n null\r\n )), \r\n filter(action => !!action)\r\n )\r\n );\r\n\r\n public loadUserLog$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromSiteLogs.LoadUserLog),\r\n switchMap((action) => this._supportService.getUserLog(action.logId).pipe(\r\n map(result => fromSiteLogs.LoadUserLogSuccess(result)),\r\n catchError(error => of(fromSiteLogs.LoadUserLogFail(error)))\r\n ) \r\n ))\r\n );\r\n\r\n public loadUserLogsFailed$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromSiteLogs.LoadUserLogsFail),\r\n map(action => {\r\n switch(action.error.statusCode) {\r\n case 504:\r\n return fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Site Logs Search',\r\n data: 'Your request has taken too long. Please try and refine your options.',\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n }\r\n });\r\n case 400:\r\n return fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Site Logs Search',\r\n data: action.error.message,\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n }\r\n });\r\n default:\r\n return fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Site Logs Search',\r\n data: 'An unknown error occurred. Please refine your search and try again.',\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n }\r\n });\r\n } \r\n }) \r\n )\r\n );\r\n}","import { Action, combineReducers } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromUnitCreationLogs from './unit-creation-logs';\r\nimport * as fromUnitCreationTypes from './unit-creation-types';\r\nimport * as fromDatapointOccurrences from './datapoint-occurrences';\r\nimport * as fromSiteLogs from './site-logs';\r\n\r\nconst supportReducer = combineReducers({\r\n unitCreationLogs: fromUnitCreationLogs.reducer,\r\n unitCreationTypes: fromUnitCreationTypes.reducer,\r\n datapointOccurrences: fromDatapointOccurrences.reducer,\r\n siteLogs: fromSiteLogs.reducer\r\n});\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return supportReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getSupportState = createSelector(getFeatureState, state => state.support);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, UnitCreationLog } from '@rfv/modules/core/models';\r\n\r\nexport const Create = createAction('[Core] Create Unit Creation Log', (unitCreationTypeId: number) => ({ unitCreationTypeId }));\r\nexport const CreateFail = createAction('[Core] Create Unit Creation Log Fail', (error: ApiError) => ({ error }));\r\nexport const CreateSuccess = createAction('[Core] Create Unit Creation Log Success', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const Load = createAction('[Core] Load Unit Creation Logs', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadFail = createAction('[Core] Load Unit Creation Logs Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Unit Creation Logs Success', (logs: UnitCreationLog[]) => ({ logs }));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, UnitCreationLog } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isCreating: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: log => log.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n isCreating: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Create, state => ({\r\n ...state,\r\n isCreating: true\r\n })),\r\n\r\n on(EntityActions.CreateFail, EntityActions.CreateSuccess, state => ({\r\n ...state,\r\n isCreating: false\r\n })),\r\n\r\n on(EntityActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { logs }) => adapter.setAll(logs, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSupportState } from '../selectors';\r\nimport * as fromUnitCreationTypes from '@rfv/modules/core/store/support/unit-creation-types';\r\n\r\nimport { adapter } from './state';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport { moment } from '@rfv/modules/shared/utils/moment';\r\n\r\n\r\nexport const getState = createSelector(getSupportState, state => state.unitCreationLogs);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isCreating = createSelector(getState, state => state.isCreating);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getConfigQueue = createSelector(\r\n getAll,\r\n fromUnitCreationTypes.getEntities,\r\n (logs, creationTypeEntities) => logs.map(log => ({\r\n \r\n //UI shows enabled and backend has isDisabled, so this is reversed here\r\n isDisabled: log.IsDisabled? false : true,\r\n assetId: log.AssetId,\r\n deviceId: log.DeviceId,\r\n unitCreationType: creationTypeEntities[log.UnitCreationTypeId] ? creationTypeEntities[log.UnitCreationTypeId].Name : 'Unavailable Type',\r\n unitCreationLogId: log.Id,\r\n unitName: log.AssetName,\r\n creator: log.LastName + ', ' + log.FirstName,\r\n lastUpdatedBy: log.LastUpdateLastName + ', ' + log.LastUpdateFirstName,\r\n queued: log.Queued + ' days',\r\n lastSaved: (moment(log.LastSave)).format('MM/DD/YYYY hh:mm:ss A'),\r\n progress: Math.round((log.RequiredCompleteStepCount / log.RequiredStepCount) * 100) + '%',\r\n isComplete: log.IsComplete, \r\n completedBy: log.CompletedByLastName && log.CompletedByFirstName ? log.CompletedByLastName + ', ' + log.CompletedByFirstName : '-',\r\n completedOn: log.CompletedOn ? (moment(log.CompletedOn)).format('MM/DD/YYYY hh:mm:ss A') : '-',\r\n }))\r\n\r\n);\r\n\r\nexport const getCompleteConfigQueue = createSelector(\r\n getConfigQueue,\r\n queue => queue.filter(item => item.isComplete && item.isDisabled === true)\r\n);\r\n\r\nexport const getIncompleteConfigQueue = createSelector(\r\n getConfigQueue,\r\n queue => queue.filter(item => !item.isComplete && item.isDisabled === true)\r\n);\r\n\r\nexport const getDisabledUnits = createSelector(\r\n getConfigQueue,\r\n queue => queue.filter(item => item.isDisabled === false)\r\n);\r\n\r\nexport const getUnitCreationLogByAssetId = createSelector(\r\n fromDashboard.getSelectedAssetId,\r\n getAll,\r\n (assetId, logs) => logs.find(log => log.AssetId === assetId)\r\n);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, UnitCreationType } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Unit Creation Types');\r\nexport const LoadFail = createAction('[Core] Load Unit Creation Types Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Unit Creation Types Success', (types: UnitCreationType[]) => ({ types }));","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, UnitCreationType } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: type => type.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { types }) => adapter.setAll(types, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getSupportState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getSupportState, state => state.unitCreationTypes);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getEnabledUnitCreationTypes = createSelector(getAll, unitCreationTypes => unitCreationTypes.filter(type => !type.IsDisabled));","import { createAction } from '@ngrx/store';\r\nimport { SystemEventDiagnosticTile } from '@rfv/modules/dashboard/modules/system-events-diagnostics/models/system-event-diagnostic-tile.model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport const Load = createAction('[System Event Diagnostics Tile] Load', (sitemapGroupId: number, startDate: string, endDate: string) => ({ sitemapGroupId, startDate, endDate }));\r\nexport const LoadFail = createAction('[System Event Diagnostics Tile] Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[System Event Diagnostics Tile] Load Success', (systemEventDiagnostics: SystemEventDiagnosticTile[]) => ({ systemEventDiagnostics }));\r\n\r\nexport const SetDateRange = createAction('[System Event Diagnostics Tile] Set Date Range', (startDate: string, endDate: string, timeSpanLabel: string) => ({ startDate, endDate, timeSpanLabel}));\r\n\r\nexport const Clear = createAction('[System Event Diagnostics Tile] Clear');\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { AppSettingsService } from \"@rfv/modules/core/services/app-settings.service\";\r\nimport { SystemEventDiagnosticTile } from \"@rfv/modules/dashboard/modules/system-events-diagnostics/models/system-event-diagnostic-tile.model\";\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class SystemEventDiagnosticService {\r\n private URL = \"assets/mockData/eventsTest.json\";\r\n\r\n public constructor(\r\n private _http: HttpClient,\r\n private _appSettings: AppSettingsService\r\n ) {}\r\n\r\n public getSystemEventDiagnosticsTile(\r\n sitemapGroupId: number,\r\n startDate: string,\r\n endDate: string\r\n ) {\r\n return this._http.get(\r\n //this.URL\r\n //just temporarily pointed at mock data. none of our envs have enough E&D sections to demo\r\n\r\n `/v2/sitemap/${sitemapGroupId}/events?startDate=${startDate}&endDate=${endDate}`\r\n );\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\nimport { Actions, createEffect, ofType } from \"@ngrx/effects\";\r\nimport { Store } from \"@ngrx/store\";\r\n\r\nimport { EMPTY, of } from \"rxjs\";\r\nimport { catchError, map, switchMap, withLatestFrom, takeUntil, filter } from \"rxjs/operators\";\r\n\r\nimport * as EntityActions from './actions';\r\nimport * as DashboardActions from \"@rfv/modules/dashboard/store/actions\";\r\nimport { SystemEventDiagnosticService } from \"@rfv/modules/core/services/system-event-diagnostic.service\";\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromDashboard from \"@rfv/modules/dashboard/store\";\r\nimport * as fromSystemEventDiagnosticsTile from './selectors';\r\nimport { DateUtils } from \"@rfv/modules/shared/utils\";\r\nimport { Tiles } from \"@rfv/modules/core/enums/tiles\";\r\n\r\n@Injectable()\r\nexport class Effects {\r\n private readonly dateFormat = 'YYYY-MM-DDTHH:mm:ss';\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _eventDataService: SystemEventDiagnosticService,\r\n private store$: Store\r\n ) {}\r\n\r\n public Load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(EntityActions.Load),\r\n withLatestFrom(\r\n this.store$.select(fromDashboard.getSelectedSitemapGroupId),\r\n this.store$.select(fromSystemEventDiagnosticsTile.getDateRange)\r\n ),\r\n switchMap(([action, selectedSitemapGroupId, dateRange]) => {\r\n if (selectedSitemapGroupId) {\r\n return this._eventDataService.getSystemEventDiagnosticsTile(\r\n selectedSitemapGroupId,\r\n action.startDate || dateRange.startDate || DateUtils.moment().subtract(1, \"weeks\").format(this.dateFormat),\r\n action.endDate || dateRange.endDate || DateUtils.moment().format(this.dateFormat)\r\n ).pipe(\r\n takeUntil(this.store$.select(fromSystemEventDiagnosticsTile.isLoading).pipe(filter(loading => !loading))),\r\n map(systemEventDiagnostics => EntityActions.LoadSuccess(systemEventDiagnostics)),\r\n catchError(response => of(EntityActions.LoadFail(response.message)))\r\n );\r\n } else {\r\n return EMPTY;\r\n }\r\n })\r\n )\r\n );\r\n\r\n public LoadSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(EntityActions.LoadSuccess),\r\n map(() => DashboardActions.SaveTimeStamp(Tiles.systemEventDiagnostics))\r\n )\r\n );\r\n\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { SystemEventDiagnosticTile } from '@rfv/modules/dashboard/modules/system-events-diagnostics/models/system-event-diagnostic-tile.model';\r\nimport { ApiError } from '../../models';\r\n\r\n\r\n\r\nexport interface State extends EntityState{\r\n eventItems: SystemEventDiagnosticTile[];\r\n startDate: string | null;\r\n endDate: string | null;\r\n timeSpanLabel: string | null;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: unit => unit.sitemapGroupId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n eventItems: null,\r\n startDate: null,\r\n endDate: null,\r\n timeSpanLabel: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n\r\n"," \r\nimport { Action, createReducer, on } from \"@ngrx/store\";\r\n \r\nimport { State, initialState } from './state';\r\nimport * as EntityActions from './actions'; \r\n\r\n\r\n\r\nconst entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { systemEventDiagnostics }) => ({\r\n ...state,\r\n eventItems: systemEventDiagnostics,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SetDateRange, (state, { startDate, endDate, timeSpanLabel }) => ({\r\n ...state,\r\n startDate,\r\n endDate,\r\n timeSpanLabel\r\n })),\r\n\r\n on(EntityActions.Clear, () => initialState)\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n\r\n\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { SystemEventDiagnosticTile } from '@rfv/modules/dashboard/modules/system-events-diagnostics/models/system-event-diagnostic-tile.model';\r\nimport { stringToKeyValue } from '@angular/flex-layout/extended/style/style-transforms';\r\nimport { PointOptionsObject } from 'highcharts';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.systemEventDiagnostics);\r\n\r\nexport const getSystemEventDiagnostics = createSelector(getState, state => state && state.eventItems);\r\n\r\nexport const isLoading = createSelector(getState, state => state && state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state && state.isLoaded);\r\nexport const getError = createSelector(getState, state => state && state.error);\r\n\r\nexport const getDateRange = createSelector(getState, state => ({ startDate: state.startDate, endDate: state.endDate, timeSpanLabel: state.timeSpanLabel }));\r\n\r\nexport const getColumnCharts = (chartLevel: string, columnCount: number, seriesClickCallback?: Highcharts.SeriesClickCallbackFunction) => createSelector(\r\n fromCore.UserSession.getSessionThemeId,\r\n getSystemEventDiagnostics,\r\n (themeId, events): Highcharts.Options => {\r\n\r\n if (!events?.length)\r\n return null;\r\n\r\n let categories: string[] = [];\r\n let assetArray = [];\r\n let sectionArray = [...events];\r\n let severityItems = [] as Highcharts.SeriesColumnOptions[];\r\n\r\n //section level\r\n if(chartLevel === 'section'){\r\n\r\n sectionArray.sort((a, b)=> b.totalHighs - a.totalHighs || b.totalMeds - a.totalMeds || b.totalLows - a.totalLows);\r\n\r\n categories = events.map(event => event.section);\r\n\r\n for (const event of sectionArray) {\r\n for (const severityItem of event.severityItems) {\r\n let series = severityItems.find(series => series.name === severityItem.SeverityLabel);\r\n\r\n if (!series) {\r\n series = {\r\n centerInCategory: true,\r\n name: severityItem.SeverityLabel,\r\n color: `#${severityItem.BackgroundColor}`,\r\n data: [],\r\n type: 'column'\r\n };\r\n\r\n severityItems.push(series);\r\n }\r\n\r\n series.data.push({\r\n custom: {'sitemapGroupId': event.sitemapGroupId},\r\n y: severityItem.SeverityValue > 0 ? severityItem.SeverityValue : null\r\n });\r\n }\r\n }\r\n } else { //asset\r\n\r\n for (const event of events) {\r\n for (const aggEvent of event.aggEvents) {\r\n assetArray.push(aggEvent);\r\n }\r\n }\r\n\r\n assetArray.sort((a, b)=> b.totalHighs - a.totalHighs || b.totalMeds - a.totalMeds || b.totalLows - a.totalLows);\r\n\r\n for(const asset of assetArray){\r\n categories.push(asset.name);\r\n for (const severityItem of asset.severityItems) {\r\n let series = severityItems.find(series => series.name === severityItem.SeverityLabel);\r\n\r\n if (!series) {\r\n series = {\r\n centerInCategory: true,\r\n name: severityItem.SeverityLabel,\r\n color: `#${severityItem.BackgroundColor}`,\r\n data: [],\r\n type: 'column',\r\n keys: ['name', 'y', 'value'],\r\n dataSorting: {\r\n enabled: true,\r\n sortKey: 'value'\r\n }\r\n };\r\n\r\n severityItems.push(series);\r\n\r\n }\r\n\r\n series.data.push({\r\n custom: {'assetId': asset.assetId},\r\n y: severityItem.SeverityValue > 0 ? severityItem.SeverityValue : null\r\n });\r\n }\r\n }\r\n }\r\n\r\n const stackingType = chartLevel === 'section' ? 'normal' : undefined;\r\n const backgroundColor = themeId === 1 ? \"#2A2A2A\" : \"#D5D5D5\";\r\n const textColor = themeId === 1 ? \"#D5D5D5\" : \"#2A2A2A\";\r\n const tickColor = themeId === 1 ? \"#212121\" : \"828282\";\r\n\r\n return {\r\n chart: {\r\n type: 'column',\r\n backgroundColor: 'transparent',\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n fontSize: '12px'\r\n }\r\n },\r\n legend: {\r\n align: 'center',\r\n verticalAlign: 'top',\r\n y: -15,\r\n floating: false,\r\n backgroundColor: 'transparent',\r\n borderWidth: 0,\r\n shadow: false,\r\n itemStyle: {\r\n color: textColor,\r\n fontSize: '12px'\r\n }\r\n },\r\n plotOptions: {\r\n bar: {\r\n animation: {\r\n duration: 1000\r\n },\r\n dataLabels: {\r\n enabled: false\r\n },\r\n grouping: false\r\n },\r\n series: {\r\n stacking: stackingType,\r\n borderColor: 'undefined',\r\n animation: true,\r\n dataLabels: {\r\n enabled: false\r\n }\r\n },\r\n column: {\r\n maxPointWidth: 64,\r\n minPointLength: 10,\r\n cursor: 'pointer',\r\n events: {\r\n click: seriesClickCallback\r\n }\r\n }\r\n },\r\n tooltip: {\r\n shared: false,\r\n useHTML: true,\r\n borderWidth: 0,\r\n borderRadius: 0,\r\n headerFormat: '

{point.key}

',\r\n backgroundColor: backgroundColor,\r\n shadow: true,\r\n style: {\r\n color: textColor,\r\n fontSize: '12px'\r\n }\r\n },\r\n xAxis: {\r\n type: 'category',\r\n categories,\r\n showEmpty: false,\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n color: textColor,\r\n //cursor: 'pointer'\r\n },\r\n //code below may be causing memory leak/race condition. xAxis labels cursor: 'pointer' above commented out so not executed for now.\r\n formatter: function() {\r\n const tick = this.axis.ticks[this.pos];\r\n\r\n if (tick) {\r\n const series = this.chart.series[this.pos];\r\n\r\n if (series?.points?.length > this.pos) {\r\n const point = series.points[this.pos];\r\n\r\n\r\n tick.label.element.onclick = function(event) {\r\n setTimeout(() => seriesClickCallback.call(series, { point }) ); \r\n }\r\n }\r\n }\r\n\r\n return this.axis.categories[this.pos];\r\n }\r\n },\r\n minRange: categories.length === 1 ? undefined : 1,\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n },\r\n yAxis: {\r\n title: {\r\n text: ''\r\n },\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n fontFamily: 'Roboto',\r\n color: textColor\r\n }\r\n },\r\n minTickInterval: 1,\r\n lineWidth: 1 / Number.MAX_SAFE_INTEGER,\r\n lineColor: backgroundColor,\r\n tickColor: tickColor\r\n },\r\n series: severityItems\r\n\r\n };\r\n\r\n});\r\n\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, SystemStatusUnit } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load System Status', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadFail = createAction('[Core] Load System Status Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load System Status Success', (units: SystemStatusUnit[]) => ({ units }));\r\n\r\nexport const Clear = createAction('[Core] Clear System Status');\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nimport { SystemStatusService } from '@rfv/modules/core/services';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _systemStatusService: SystemStatusService,\r\n private _actions: Actions,\r\n private _store: Store\r\n ) {}\r\n\r\n public get$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.Load),\r\n withLatestFrom(this._store.select(fromDashboard.getSelectedSitemapGroupId)),\r\n switchMap(([action, sitemapGroupId]) => this._systemStatusService.get(action.sitemapGroupId || sitemapGroupId).pipe(\r\n map(units => EntityActions.LoadSuccess(units)),\r\n catchError(error => of(EntityActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","\r\nimport { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { SystemStatusUnit } from '@rfv/modules/core/models/system-status';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State extends EntityState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: unit => unit.AssetId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Load, (state, { sitemapGroupId }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadSuccess, (state, { units }) => adapter.setAll(units, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.Clear, state => initialState)\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport * as fromAssetTypes from '../assetTypes';\r\nimport * as fromUnitStates from '../unit-states';\r\nimport * as fromSitemapGroup from '../sitemap-groups';\r\nimport * as fromCustomer from '../customers'\r\n\r\nimport moment from 'moment';\r\nimport { SystemStatusUnit } from '../../models/system-status';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.systemStatus);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\n\r\nexport const getUnits = createSelector(\r\n getAll,\r\n fromUnitStates.getEntities,\r\n fromAssetTypes.getFirstDashboard,\r\n\r\n (units, unitStates, getFirstDashboard) => units.map(unit => {\r\n const state = unitStates[unit.StatusId];\r\n const firstDashboard = getFirstDashboard(unit.AssetTypeId);\r\n const aggregateState = unitStates[unit.AggregateRuntimeStatusId];\r\n\r\n if (state) {\r\n return {\r\n ...unit,\r\n Value: state.isInvalid ? null : unit.Value,\r\n SampleTimeForExport: unit.SampleTime ? (moment(unit.SampleTime)).format('MM/DD/YYYY hh:mm:ss A') : null,\r\n StateName: state.name,\r\n Color1: '#' + state.color1,\r\n Color2: '#' + state.color2,\r\n PriorityOrder: state.priorityOrder,\r\n routerLink: firstDashboard ? `/dashboard/${firstDashboard.id}/asset/${unit.AssetId}` : null,\r\n AggregateColor: '#' + aggregateState?.color1,\r\n AggregateStateName: aggregateState?.name,\r\n } as SystemStatusUnit;\r\n }\r\n })\r\n);\r\n\r\nexport const isAggregation = (sitemapGroupId: number) => createSelector(\r\n fromSitemapGroup.getEntities,\r\n fromCustomer.getAggregationSettings,\r\n (entities, settings) => {\r\n let assetTypeId = entities[sitemapGroupId]?.assetTypeId;\r\n \r\n if (settings?.some(setting => setting.assetTypeId === assetTypeId))\r\n return true;\r\n\r\n return false\r\n }\r\n);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, Tile } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Tiles] Load');\r\nexport const LoadFail = createAction('[Tiles] Load Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[Tiles] Load Success', props<{ tiles: Tile[] }>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { TileService } from '@rfv/modules/core/services';\r\n\r\nimport * as TileActions from './actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _tileService: TileService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(TileActions.Load),\r\n switchMap(action => this._tileService.getAll().pipe(\r\n map(tiles => TileActions.LoadSuccess({ tiles })),\r\n catchError(error => of(TileActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, Tile } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: tile => tile.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as TileActions from './actions';\r\n\r\nconst tileReducer = createReducer(\r\n initialState,\r\n\r\n on(TileActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(TileActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(TileActions.LoadSuccess, (state, { tiles }) => adapter.setAll(tiles, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return tileReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.tiles);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\nimport { ApiError, TimeIntervalDropdown } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Time Interval Dropdowns Load')\r\nexport const LoadFail = createAction('[Core] Time Interval Dropdowns Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Time Interval Dropdowns Success', (entities: TimeIntervalDropdown[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as TimeIntervalDropdownActions from './actions';\r\n\r\nimport { TimeIntervalDropdownService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _timeIntervalDropdownService: TimeIntervalDropdownService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(TimeIntervalDropdownActions.Load),\r\n switchMap(action => this._timeIntervalDropdownService.get().pipe(\r\n map(items => TimeIntervalDropdownActions.LoadSuccess(items)),\r\n catchError(error => of(TimeIntervalDropdownActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, TimeIntervalDropdown } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: timeIntervalDropdown => timeIntervalDropdown.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as TimeIntervalDropdownActions from './actions';\r\n\r\nconst gaugeTypesReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(TimeIntervalDropdownActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(TimeIntervalDropdownActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(TimeIntervalDropdownActions.LoadFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return gaugeTypesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.timeIntervalDropDowns)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\nimport { ApiError, ToolTip } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Tool Tips Load')\r\nexport const LoadFail = createAction('[Core] Tool Tips Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Tool Tips Load Success', (entities: ToolTip[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as ToolTipActions from './actions';\r\n\r\nimport { ToolTipService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _toolTipService: ToolTipService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ToolTipActions.Load),\r\n switchMap(action => this._toolTipService.get().pipe(\r\n map(items => ToolTipActions.LoadSuccess(items)),\r\n catchError(error => of(ToolTipActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, ToolTip } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: toolTip => toolTip.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as ToolTipActions from './actions';\r\n\r\nconst toolTipsReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(ToolTipActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ToolTipActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(ToolTipActions.LoadFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return toolTipsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.toolTips)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getToolTipById = (toolTipId: number) => createSelector(getEntities, state => state[toolTipId]);\r\n\r\nexport const getToolTipByTag = (toolTipTag: string) => createSelector(getAll, state =>\r\n state.find(x => x.CodeTag === toolTipTag)\r\n);","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { Trip, TripAssignment, UserTrip, UserTripAssignment } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-configuration.model';\r\n\r\n\r\nexport const LoadTripConfig = createAction('[Core] Load Trip Config', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadTripConfigFail = createAction('[Core] Load Trip Config Fail', (error: ApiError) => ({ error }));\r\nexport const LoadTripConfigSuccess = createAction('[Core] Load Trip Config Success', (tripConfig: Trip[]) => ({ tripConfig }));\r\n\r\nexport const CreateTripConfig = createAction('[Core] Create Trip Config', (sitemapGroupId: number, trip: UserTrip) => ({ sitemapGroupId, trip }));\r\nexport const CreateTripConfigFail = createAction('[Core] Create Trip Config Fail', (error: ApiError) => ({ error }));\r\nexport const CreateTripConfigSuccess = createAction('[Core] Create Trip Config Success');\r\n\r\nexport const SaveTripConfig = createAction('[Core] Save Trip Config', (sitemapGroupId: number, trip: UserTrip) => ({ sitemapGroupId, trip }));\r\nexport const SaveTripConfigFail = createAction('[Core] Save Trip Config Fail', (error: ApiError) => ({ error }));\r\nexport const SaveTripConfigSuccess = createAction('[Core] Save Trip Config Success');\r\n\r\nexport const DeleteTripConfig = createAction('[Core] Delete Trip Config', (sitemapGroupId: number, tripAssignmentId: number, tripName: string) => ({ sitemapGroupId, tripAssignmentId, tripName }));\r\nexport const DeleteTripConfigFail = createAction('[Core] Delete Trip Config Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteTripConfigSuccess = createAction('[Core] Delete Trip Config Success', (tripId: number) => ({ tripId }));\r\n\r\nexport const CreateTripAssignment = createAction('[Core] Create Trip Assignment', (sitemapGroupId: number, tripAssignment: UserTripAssignment) => ({ sitemapGroupId, tripAssignment }));\r\nexport const CreateTripAssignmentFail = createAction('[Core] Create Trip Assignment Fail', (error: ApiError) => ({ error }));\r\nexport const CreateTripAssignmentSuccess = createAction('[Core] Create Trip Assignment Success');\r\n\r\nexport const DeleteTripAssignment = createAction('[Core] Delete Trip Assignment', (sitemapGroupId: number, tripId: number, tripAssignmentId: number) => ({ sitemapGroupId, tripId, tripAssignmentId }));\r\nexport const DeleteTripAssignmentFail = createAction('[Core] Delete Trip Assignment Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteTripAssignmentSuccess = createAction('[Core] Delete Trip Assignment Success', (tripAssignmentId: number) => ({ tripAssignmentId }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nimport { TripReportsService, } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _tripReportsService: TripReportsService,\r\n ) { }\r\n\r\n public getTripConfig$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadTripConfig),\r\n switchMap(action => this._tripReportsService.getTripConfig(action.sitemapGroupId).pipe(\r\n map(entity => EntityActions.LoadTripConfigSuccess(entity)),\r\n catchError(error => of(EntityActions.SaveTripConfigFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createTripConfig$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.CreateTripConfig),\r\n switchMap(action => this._tripReportsService.createTripConfig(action.sitemapGroupId, action.trip).pipe(\r\n mergeMap(_ => [\r\n EntityActions.CreateTripConfigSuccess(),\r\n EntityActions.LoadTripConfig(action.sitemapGroupId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: action.trip.name + ` Has Been Successfully Saved.`,\r\n autoClose: 2000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.CreateTripConfigFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveTripConfig$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.SaveTripConfig),\r\n switchMap(action => this._tripReportsService.saveTripConfig(action.sitemapGroupId, action.trip).pipe(\r\n mergeMap(_ => [\r\n EntityActions.SaveTripConfigSuccess(),\r\n EntityActions.LoadTripConfig(action.sitemapGroupId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: action.trip.name + ` Has Been Successfully Saved.`,\r\n autoClose: 2000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.SaveTripConfigFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteTripConfig$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.DeleteTripConfig),\r\n switchMap(action => this._tripReportsService.deleteTripConfig(action.sitemapGroupId, action.tripAssignmentId).pipe(\r\n mergeMap(entity => [\r\n EntityActions.DeleteTripConfigSuccess(action.tripAssignmentId),\r\n EntityActions.LoadTripConfig(action.sitemapGroupId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: action.tripName + ` Has Been Successfully Deleted.`,\r\n autoClose: 2000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.DeleteTripConfigFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createTripAssignment$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.CreateTripAssignment),\r\n switchMap(action => this._tripReportsService.createTripAssignment(action.sitemapGroupId, action.tripAssignment).pipe(\r\n mergeMap(_ => [\r\n EntityActions.CreateTripConfigSuccess(),\r\n EntityActions.LoadTripConfig(action.sitemapGroupId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Trip Assignments Have Been Successfully Saved.`,\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.CreateTripAssignmentFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteTripAssignment$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.DeleteTripAssignment),\r\n switchMap(action => this._tripReportsService.deleteTripAssignment(action.sitemapGroupId, action.tripId, action.tripAssignmentId).pipe(\r\n mergeMap(entity => [\r\n EntityActions.DeleteTripAssignmentSuccess(action.tripAssignmentId),\r\n EntityActions.LoadTripConfig(action.sitemapGroupId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Trip Assignments Have Been Successfully Removed.`,\r\n autoClose: 2000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.DeleteTripAssignmentFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { Trip } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-configuration.model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n tripConfig: Trip[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n\r\n //CREATING\r\n isTripConfigCreating: boolean;\r\n isTripConfigCreated: boolean;\r\n\r\n //SAVING\r\n isTripConfigSaving: boolean;\r\n isTripConfigSaved: boolean;\r\n\r\n //DELETING\r\n isTripConfigDeleting: boolean;\r\n isTripConfigDeleted: boolean;\r\n\r\n //CREATING\r\n isTripAssignmentCreating: boolean;\r\n isTripAssignmentCreated: boolean;\r\n\r\n //DELETING\r\n isTripAssignmentDeleting: boolean;\r\n isTripAssignmentDeleted: boolean;\r\n}\r\n\r\nexport const initialState: State = ({\r\n tripConfig: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null,\r\n\r\n //CREATING\r\n isTripConfigCreating: false,\r\n isTripConfigCreated: false,\r\n\r\n //SAVING\r\n isTripConfigSaving: false,\r\n isTripConfigSaved: false,\r\n\r\n //DELETING\r\n isTripConfigDeleting: false,\r\n isTripConfigDeleted: false,\r\n\r\n //CREATING\r\n isTripAssignmentCreating: false,\r\n isTripAssignmentCreated: false,\r\n\r\n //DELETING\r\n isTripAssignmentDeleting: false,\r\n isTripAssignmentDeleted: false\r\n});\r\n\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadTripConfig, (state) => ({\r\n ...state,\r\n isTripConfigCreated: false,\r\n isTripConfigDeleted: false,\r\n isTripConfigSaved: false,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadTripConfigFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadTripConfigSuccess, (state, { tripConfig }) => ({\r\n ...state,\r\n tripConfig: tripConfig,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.CreateTripConfig, (state) => ({\r\n ...state,\r\n isTripConfigCreating: true\r\n })),\r\n\r\n on(EntityActions.CreateTripConfigFail, (state, { error }) => ({\r\n ...state,\r\n isTripConfigCreating: false,\r\n isTripConfigCreated: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.CreateTripConfigSuccess, (state) => ({\r\n ...state,\r\n isTripConfigCreating: false,\r\n isTripConfigCreated: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.SaveTripConfig, (state) => ({\r\n ...state,\r\n isTripConfigSaving: true\r\n })),\r\n\r\n on(EntityActions.SaveTripConfigFail, (state, { error }) => ({\r\n ...state,\r\n isTripConfigSaving: false,\r\n isTripConfigSaved: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.SaveTripConfigSuccess, (state) => ({\r\n ...state,\r\n isTripConfigSaving: false,\r\n isTripConfigSaved: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.DeleteTripConfig, (state) => ({\r\n ...state,\r\n isTripConfigDeleting: true,\r\n isTripConfigDeleted: false\r\n })),\r\n\r\n on(EntityActions.DeleteTripConfigFail, (state, { error }) => ({\r\n ...state,\r\n isTripConfigDeleting: false,\r\n isTripConfigDeleted: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.DeleteTripConfigSuccess, (state) => ({\r\n ...state,\r\n isTripConfigDeleting: false,\r\n isTripConfigDeleted: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.CreateTripAssignment, (state) => ({\r\n ...state,\r\n isTripAssignmentCreating: true\r\n })),\r\n\r\n on(EntityActions.CreateTripAssignmentFail, (state, { error }) => ({\r\n ...state,\r\n isTripAssignmentCreating: false,\r\n isTripAssignmentCreated: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.CreateTripAssignmentSuccess, (state) => ({\r\n ...state,\r\n isTripAssignmentCreating: false,\r\n isTripAssignmentCreated: true,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.DeleteTripAssignment, (state) => ({\r\n ...state,\r\n isTripAssignmentDeleting: true,\r\n isTripAssignmentDeleted: false\r\n })),\r\n\r\n on(EntityActions.DeleteTripAssignmentFail, (state, { error }) => ({\r\n ...state,\r\n isTripAssignmentDeleting: false,\r\n isTripAssignmentDeleted: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.DeleteTripAssignmentSuccess, (state) => ({\r\n ...state,\r\n isTripAssignmentDeleting: false,\r\n isTripAssignmentDeleted: true,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.tripConfig);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getTripConfig = createSelector(getState, state => state.tripConfig);\r\n\r\n//CREATING\r\nexport const isTripConfigCreating = createSelector(getState, state => state.isTripConfigCreating);\r\nexport const isTripConfigCreated = createSelector(getState, state => state.isTripConfigCreated);\r\n\r\n//SAVING\r\nexport const isTripConfigSaving = createSelector(getState, state => state.isTripConfigSaving);\r\nexport const isTripConfigSaved = createSelector(getState, state => state.isTripConfigSaved);\r\n\r\n//DELETING\r\nexport const isTripConfigDeleting = createSelector(getState, state => state.isTripConfigDeleting);\r\nexport const isTripConfigDeleted = createSelector(getState, state => state.isTripConfigDeleted);\r\n\r\n//CREATING\r\nexport const isTripAssignmentCreating = createSelector(getState, state => state.isTripAssignmentCreating);\r\nexport const isTripAssignmentCreated = createSelector(getState, state => state.isTripAssignmentCreated);\r\n\r\n//DELETING\r\nexport const isTripAssignmentDeleting = createSelector(getState, state => state.isTripAssignmentDeleting);\r\nexport const isTripAssignmentDeleted = createSelector(getState, state => state.isTripAssignmentDeleted);\r\n\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { TripDetailSummary, TripSummary } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-summary.model';\r\nimport { CreateDemandReportRequest } from '@rfv/modules/report/models/create-demand-report-request';\r\nimport { Moment } from 'moment-timezone';\r\n\r\n\r\nexport const LoadTripSummary = createAction('[Core] Load Trip Summary', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadTripSummaryFail = createAction('[Core] Load Trip Summary Fail', (error: ApiError) => ({ error }));\r\nexport const LoadTripSummarySuccess = createAction('[Core] Load Trip Summary Success', (tripSummary: TripSummary[]) => ({ tripSummary }));\r\n\r\nexport const LoadTripSummaryByDate = createAction('[Core] Load Trip Summary By Date', (sitemapGroupId: number, startDate: Moment, endDate: Moment) => ({ sitemapGroupId, startDate,endDate }));\r\nexport const LoadTripSummaryByDateFail = createAction('[Core] Load Trip Summary By Date Fail', (error: ApiError) => ({ error }));\r\nexport const LoadTripSummaryByDateSuccess = createAction('[Core] Load Trip Summary By Date Success', (tripDetails: TripDetailSummary[]) => ({ tripDetails }));\r\n\r\nexport const clearTripDetails = createAction('[Core] Clear Trip Details');\r\n\r\nexport const downloadTripReport = createAction('[core] Download Trip Report', (request: CreateDemandReportRequest) => ({ request })); \r\nexport const downloadTripReportSuccess = createAction('[core] Download Trip Report Success'); \r\nexport const downloadTripReportFail = createAction('[core] Download Trip Report Fail', (error: ApiError) => ({ error })); ","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as EntityActions from './actions';\r\n\r\nimport { TripReportsService } from '@rfv/modules/core/services';\r\nimport { ReportService } from '@rfv/modules/report/report.service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _tripReportsService: TripReportsService,\r\n private _reportService: ReportService\r\n ) { }\r\n\r\n public getTripSummary = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadTripSummary),\r\n switchMap(action => this._tripReportsService.getTripSummary(action.sitemapGroupId).pipe(\r\n map(entity => EntityActions.LoadTripSummarySuccess(entity)),\r\n catchError(error => of(EntityActions.LoadTripSummaryFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public getTripSummaryByDate = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.LoadTripSummaryByDate),\r\n switchMap(action => this._tripReportsService.getTripSummaryByDate(action.sitemapGroupId, action.startDate, action.endDate).pipe(\r\n map(entity => EntityActions.LoadTripSummaryByDateSuccess(entity)),\r\n catchError(error => of(EntityActions.LoadTripSummaryByDateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public downloadTripReport = createEffect(\r\n () => this._actions.pipe(\r\n ofType(EntityActions.downloadTripReport),\r\n switchMap(action => this._reportService.generateReport(action.request)\r\n .pipe(\r\n mergeMap(entity => [\r\n EntityActions.downloadTripReportSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Trip report created successfully.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(EntityActions.downloadTripReportFail(error), \r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while creating trip report.',\r\n autoClose: 5000\r\n }\r\n })))\r\n ))\r\n )\r\n )\r\n}\r\n","import { TripDetailSummary, TripSummary } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-summary.model';\r\nimport { ApiError } from '../../models';\r\n\r\nexport interface State {\r\n tripSummary: TripSummary[],\r\n tripDetails: TripDetailSummary[],\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isLoadedByDate: boolean;\r\n isLoadingByDate: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = ({\r\n tripSummary: [],\r\n tripDetails: [],\r\n isLoaded: false,\r\n isLoading: false,\r\n isLoadedByDate: false,\r\n isLoadingByDate: false,\r\n error: null,\r\n});\r\n\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EntityActions from './actions';\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.LoadTripSummary, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EntityActions.LoadTripSummaryFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadTripSummarySuccess, (state, { tripSummary }) => ({\r\n ...state,\r\n tripSummary: tripSummary,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.LoadTripSummaryByDate, (state) => ({\r\n ...state,\r\n isLoadingByDate: true\r\n })),\r\n\r\n on(EntityActions.LoadTripSummaryByDateFail, (state, { error }) => ({\r\n ...state,\r\n isLoadingByDate: false,\r\n isLoadedByDate: false,\r\n error\r\n })),\r\n\r\n on(EntityActions.LoadTripSummaryByDateSuccess, (state, { tripDetails }) => ({\r\n ...state,\r\n tripDetails: tripDetails,\r\n isLoadedByDate: true,\r\n isLoadingByDate: false,\r\n error: null\r\n })),\r\n\r\n on(EntityActions.clearTripDetails, (state) => ({\r\n ...state,\r\n tripDetails: []\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { TripAssetAndDate, TripAssetDetails } from '@rfv/modules/dashboard/modules/trip-reports/models/trip-asset-summary.model';\r\nimport * as fromUnitsOfMeasure from '../units-of-measure';\r\nimport * as fromGPSConfig from '../gps-config';\r\nimport * as fromAssets from '../assets/entities';\r\n\r\nimport moment from 'moment';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.tripSummary);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\n\r\nexport const isLoadingByDate = createSelector(getState, state => state.isLoadingByDate);\r\nexport const isLoadedByDate = createSelector(getState, state => state.isLoadedByDate);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getTripSummary = createSelector(getState, state => state.tripSummary);\r\n\r\nexport const getTripDetails = createSelector(getState, state => state.tripDetails);\r\n\r\nexport const getSelectedTripSummary = (tripId: number) => createSelector(\r\n getTripSummary,\r\n (tripSummary) => {\r\n return tripSummary.find(trip => trip.tripDetails.find(details => details.id == tripId));\r\n });\r\n\r\nexport const getTripSummaryData = (tripId: number) => createSelector(\r\n getSelectedTripSummary(tripId),\r\n fromUnitsOfMeasure.getEntities,\r\n (tripSummary, UoM) => {\r\n var tripDetails = tripSummary?.tripDetails.find(details => details.id == tripId);\r\n var tripData: TripAssetDetails[] = [];\r\n\r\n if (tripDetails) {\r\n var startDate = tripDetails.startDate ? moment(tripDetails.startDate).format('MM/DD/YYYY') : null;\r\n var endDate = tripDetails.startDate ? moment(tripDetails.endDate).format('MM/DD/YYYY') : null;\r\n\r\n tripData.push({ name: \"Trip Date\", value: startDate && endDate ? `${startDate} - ${endDate}` : null });\r\n tripData.push({ name: \"Trip Duration\", value: tripDetails.duration });\r\n tripData.push({ name: \"Approx. Distance Traveled\", value: tripDetails.distance + ` (${UoM[tripDetails?.distanceUnitOfMeasureId]?.Name})` });\r\n tripData.push({ name: \"Fuel Usage\", value: tripDetails.fuelUsed + ` (${UoM[tripDetails?.fuelUsedUnitOfMeasureId]?.Name})` });\r\n tripData.push({ name: \"Alarms\", value: tripDetails.alarmCount?.toString() });\r\n tripData.push({ name: \"Events\", value: tripDetails.eventCount?.toString() });\r\n }\r\n\r\n return tripData;\r\n });\r\n\r\nexport const getTripAssetAndDate = (tripId: number) => createSelector(\r\n fromGPSConfig.getGPSConfig,\r\n getSelectedTripSummary(tripId),\r\n (tripConfig, tripSummary) => {\r\n return {\r\n assetId: tripConfig?.find(trip => trip.sitemapGroupId == tripSummary.sitemapGroupId)?.primaryAssetId,\r\n endDate: tripSummary?.tripDetails.find(details => details.id == tripId).endDate,\r\n startDate: tripSummary?.tripDetails.find(details => details.id == tripId).startDate\r\n } as TripAssetAndDate;\r\n });\r\n\r\nexport const getAssetName = (tripId: number) => createSelector(\r\n getTripAssetAndDate(tripId),\r\n fromAssets.getEntities,\r\n (trip, entities) => {\r\n\r\n\r\n return entities[trip.assetId]?.name;\r\n });\r\n","import { UnitControl } from '../../../core/models/unit-control';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load Unit Controls', (assetId: number) => ({ assetId }));\r\nexport const LoadFail = createAction('[Core] Load Unit Controls Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load Unit Controls Success', (unitControl: UnitControl[]) => ({ unitControl }));\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, concatMap, mergeMap, tap, filter, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as UnitControlActions from './actions';\r\nimport { UnitControlService } from '@rfv/modules/core/services';\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitControlService: UnitControlService,\r\n private _store$: Store\r\n ) { }\r\n\r\n load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitControlActions.Load),\r\n withLatestFrom(this._store$.select(fromDashboard.getSelectedAssetId)),\r\n switchMap(([ action, assetId]) => this._unitControlService.getUnitControl(action.assetId || assetId).pipe(\r\n map(unitControls => UnitControlActions.LoadSuccess(unitControls,)),\r\n catchError(error => of(UnitControlActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { UnitControl } from '../../../core/models/unit-control';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isCreatingDeviceCommand: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: UnitControl => UnitControl.dataPointId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n isCreatingDeviceCommand: false,\r\n error: null,\r\n});","import { createReducer, on, Action } from '@ngrx/store';\r\nimport { State, initialState, adapter } from './state';\r\nimport * as UnitControlSetupActions from './actions';\r\n\r\nconst unitControlSetupReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitControlSetupActions.Load, (state, { assetId }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitControlSetupActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(UnitControlSetupActions.LoadSuccess, (state, { unitControl }) => \r\n adapter.setAll(unitControl,\r\n {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitControlSetupReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { adapter } from './state';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitControl);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n} = adapter.getSelectors(getState);\r\n\r\n\r\nexport const getApprovedControls = createSelector(getAll, controls => controls.filter(control => control.isApproved === true));\r\n\r\nexport const isCreatingDeviceCommand = createSelector(getState, state => state.isCreatingDeviceCommand);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, UnitState } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load UnitStates');\r\n\r\nexport const LoadFail = createAction('[Core] Load UnitStates Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load UnitStates Success', props<{\r\n unitStates: UnitState[]\r\n}>());\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as UnitStateActions from './actions';\r\n\r\nimport { UnitStateService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitStateService: UnitStateService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitStateActions.Load),\r\n switchMap(action => this._unitStateService.getAll().pipe(\r\n map(unitStates => UnitStateActions.LoadSuccess({ unitStates }),\r\n catchError(error => of(UnitStateActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as AlarmStateActions from './actions';\r\n\r\nconst unitStatesReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmStateActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmStateActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(AlarmStateActions.LoadSuccess, (state, { unitStates }) => adapter.setAll(unitStates, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitStatesReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitStates);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, UnitState } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: unitState => unitState.id,\r\n sortComparer: (a, b) => b.priorityOrder - a.priorityOrder,\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { UnitOfMeasureConversions } from '../../models/unit-of-measure-conversions';\r\n\r\n\r\nexport const Load = createAction('[Core] Units of Measure Conversions Load')\r\nexport const LoadFail = createAction('[Core] Units of Measure Conversions Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Units of Measure Conversions Load Success', (entities: UnitOfMeasureConversions[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as UnitsOfMeasureConversionsActions from './actions';\r\n\r\nimport { UnitsOfMeasureConversionsService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitsOfMeasureConversionsService: UnitsOfMeasureConversionsService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitsOfMeasureConversionsActions.Load),\r\n switchMap(action => this._unitsOfMeasureConversionsService.get().pipe(\r\n map(entities => UnitsOfMeasureConversionsActions.LoadSuccess(entities)),\r\n catchError(error => of(UnitsOfMeasureConversionsActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { UnitOfMeasureConversions } from '../../models/unit-of-measure-conversions';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: entity => entity.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UnitsOfMeasureActions from './actions';\r\n\r\nconst unitsOfMeasureReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitsOfMeasureActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitsOfMeasureActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(UnitsOfMeasureActions.LoadFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitsOfMeasureReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitsOfMeasureConversions)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\nimport { ApiError, UnitOfMeasure } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] Units of Measure Load')\r\nexport const LoadFail = createAction('[Core] Units of Measure Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Units of Measure Load Success', (entities: UnitOfMeasure[]) => ({ entities: entities }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as UnitsOfMeasureActions from './actions';\r\n\r\nimport { UnitsOfMeasureService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitsOfMeasureService: UnitsOfMeasureService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitsOfMeasureActions.Load),\r\n switchMap(action => this._unitsOfMeasureService.get().pipe(\r\n map(entities => UnitsOfMeasureActions.LoadSuccess(entities)),\r\n catchError(error => of(UnitsOfMeasureActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, UnitOfMeasure } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: entity => entity.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UnitsOfMeasureActions from './actions';\r\n\r\nconst unitsOfMeasureReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(UnitsOfMeasureActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitsOfMeasureActions.LoadSuccess, (state, payload) => adapter.upsertMany(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(UnitsOfMeasureActions.LoadFail, (state) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitsOfMeasureReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitsOfMeasure)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, UserAlertRecipient } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load UserAlertRecipients', (\r\n userId: number\r\n) => ({ payload: { userId } }));\r\n\r\nexport const LoadFail = createAction('[Core] Load UserAlertRecipients Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load UserAlertRecipients Success', (\r\n userAlertRecipients: UserAlertRecipient[]\r\n) => ({ payload: { userAlertRecipients } }));\r\n\r\n//for mng notifications redirect\r\nexport const AlarmGroupChange = createAction('[Core] Set Alarm Group Id', (\r\n alarmGroupId: number\r\n) => ({ payload: { alarmGroupId } }));\r\n\r\nexport const AlertScheduleIdChange = createAction('[Core] Set Alarm Schedule Id', (\r\n alarmScheduleId: number\r\n) => ({ payload: { alarmScheduleId } }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mapTo } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as UserAlertRecipientActions from './actions';\r\n\r\nimport { UserAlertRecipientService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _userAlertRecipientService: UserAlertRecipientService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAlertRecipientActions.Load),\r\n switchMap(action => this._userAlertRecipientService.get(action.payload.userId).pipe(\r\n map(userAlertRecipients => UserAlertRecipientActions.LoadSuccess( userAlertRecipients ),\r\n catchError(error => of(UserAlertRecipientActions.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, UserAlertRecipient } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n isDeleting: boolean; \r\n \r\n //for recipients redirect\r\n selectedAlarmGroupId: number;\r\n selectedScheduleId: number;\r\n \r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: value => {\r\n return `${value.AlarmGroupId}-${value.AlertScheduleId}-${value.AssetId}`;\r\n }\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null, \r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n isDeleting: false,\r\n\r\n //for recipients redirect\r\n selectedAlarmGroupId: null,\r\n selectedScheduleId: null,\r\n\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UserAlertRecipientsActions from './actions';\r\n\r\nconst userAlertRecipientReducer = createReducer(\r\n initialState,\r\n\r\n on(UserAlertRecipientsActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UserAlertRecipientsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(UserAlertRecipientsActions.LoadSuccess, (state, { payload }) => {\r\n return adapter.setAll(payload.userAlertRecipients, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })\r\n }\r\n ),\r\n\r\n on(UserAlertRecipientsActions.AlarmGroupChange, (state, { payload }) => ({\r\n ...state,\r\n selectedAlarmGroupId: payload.alarmGroupId\r\n })),\r\n\r\n on(UserAlertRecipientsActions.AlertScheduleIdChange, (state, { payload }) => ({\r\n ...state,\r\n selectedScheduleId: payload.alarmScheduleId\r\n })),\r\n \r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userAlertRecipientReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport * as fromSitemapGroups from '../sitemap-groups/selectors';\r\nimport { UserNotificationRecipientsList, UserNotificationRecipientUnit, UserNotificationRecipientSchedule } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-recipients-list.model';\r\nimport { SitemapGroups } from '..';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.userAlertRecipients);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const getList = createSelector(\r\n getAll, fromSitemapGroups.getPathString,\r\n (list, getPathString) => {\r\n\r\n let result: UserNotificationRecipientsList = {\r\n RecipientsList: []\r\n };\r\n\r\n list.forEach(item => {\r\n\r\n let pathString = getPathString(item.SitemapGroupId);\r\n pathString = pathString + (pathString === \"\" ? \"\" : \"/\");\r\n let unitName = pathString + item.AssetName;\r\n\r\n let unitIndex = result.RecipientsList.findIndex(unit => unit.UnitId == item.AssetId);\r\n if (unitIndex < 0) {\r\n result.RecipientsList.push({\r\n UnitId: item.AssetId,\r\n UnitName: unitName,\r\n Schedules: []\r\n });\r\n unitIndex = result.RecipientsList.length - 1;\r\n\r\n }\r\n\r\n let scheduleIndex = result.RecipientsList[unitIndex].Schedules.findIndex(schedule => schedule.AlarmGroupId == item.AlarmGroupId && schedule.AlertScheduleId == item.AlertScheduleId);\r\n if (scheduleIndex < 0) {\r\n result.RecipientsList[unitIndex].Schedules.push({\r\n AlarmGroupId: item.AlarmGroupId,\r\n AlarmGroupName: item.AlarmGroupName,\r\n AlertScheduleId: item.AlertScheduleId,\r\n AlertScheduleName: item.AlertScheduleName,\r\n AlertRecipientId: item.AlertRecipientId,\r\n SitemapGroupId: item.SitemapGroupId\r\n })\r\n }\r\n\r\n });\r\n\r\n return result; \r\n\r\n});\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getAlarmGroupId = createSelector(getState, state => state.selectedAlarmGroupId);\r\nexport const getAlarmScheduleId = createSelector(getState, state => state.selectedScheduleId);\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { ApiError, UserGlobalFilterDataPointGroup } from '@rfv/modules/core/models';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] UserGlobalFilterDataPointGroup Load');\r\nexport const LoadFail = createAction('[Core] UserGlobalFilterDataPointGroup Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] UserGlobalFilterDataPointGroup Load Success', (entities: UserGlobalFilterDataPointGroup[]) => ({ entities: entities }));\r\n\r\nexport const Create = createAction('[Core] UserGlobalFilterDataPointGroup Create', (group: UserGlobalFilterDataPointGroup) => ({ group }));\r\nexport const CreateFail = createAction('[Core] UserGlobalFilterDataPointGroup Create Fail', (error: ApiError) => ({ error }));\r\nexport const CreateSuccess = createAction('[Core] UserGlobalFilterDataPointGroup Create Success', (id: number, group: UserGlobalFilterDataPointGroup) => ({ id, group }));\r\n\r\nexport const Save = createAction('[Core] UserGlobalFilterDataPointGroup Save', (group: UserGlobalFilterDataPointGroup) => ({ group }));\r\nexport const SaveFail = createAction('[Core] UserGlobalFilterDataPointGroup Save Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] UserGlobalFilterDataPointGroup Save Success', (group: UserGlobalFilterDataPointGroup) => ({ group }));\r\n\r\nexport const Delete = createAction('[Core] UserGlobalFilterDataPointGroup Delete', (id: number) => ({ id }));\r\nexport const DeleteFail = createAction('[Core] UserGlobalFilterDataPointGroup Delete Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteSuccess = createAction('[Core] UserGlobalFilterDataPointGroup Delete Success', (id: number) => ({ id }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as UserGlobalFilterDataPointGroupActions from './actions';\r\n\r\nimport { UserGlobalFilterDataPointGroupService } from '@rfv/modules/core/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _service: UserGlobalFilterDataPointGroupService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGlobalFilterDataPointGroupActions.Load),\r\n switchMap(action => this._service.get().pipe(\r\n map(datapointGroups => UserGlobalFilterDataPointGroupActions.LoadSuccess(datapointGroups)),\r\n catchError(error => of(UserGlobalFilterDataPointGroupActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public create$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGlobalFilterDataPointGroupActions.Create),\r\n switchMap(action => this._service.create(action.group).pipe(\r\n map(id => UserGlobalFilterDataPointGroupActions.CreateSuccess(id, action.group)),\r\n catchError(error => of(UserGlobalFilterDataPointGroupActions.CreateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public save$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGlobalFilterDataPointGroupActions.Save),\r\n switchMap(action => this._service.save(action.group).pipe(\r\n map(id => UserGlobalFilterDataPointGroupActions.SaveSuccess(action.group)),\r\n catchError(error => of(UserGlobalFilterDataPointGroupActions.SaveFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGlobalFilterDataPointGroupActions.Delete),\r\n switchMap(action => this._service.delete(action.id).pipe(\r\n map(_ => UserGlobalFilterDataPointGroupActions.DeleteSuccess(action.id)),\r\n catchError(error => of(UserGlobalFilterDataPointGroupActions.DeleteFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, UserGlobalFilterDataPointGroup } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isSaving: boolean;\r\n\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: userGlobalFilterDataPointGroup => userGlobalFilterDataPointGroup.id\r\n});\r\n\r\nexport const initialState: State =adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaving: false,\r\n \r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UserGlobalFilterDataPointGroupActions from './actions';\r\n\r\nconst userGlobalFilterDataPointGroupReducer = createReducer(\r\n initialState,\r\n\r\n // --- Load\r\n on(UserGlobalFilterDataPointGroupActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isDirty: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.LoadSuccess, (state, payload) => adapter.setAll(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.LoadFail, (state, payload) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.Create, (state, { group }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.CreateFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.CreateSuccess, (state, { id, group }) => adapter.addOne({ ...group, id }, {\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.Save, (state, { group }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.SaveSuccess, (state, { group }) => adapter.updateOne({ id: group.id, changes: group }, {\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.Delete, (state, { id }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.DeleteFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UserGlobalFilterDataPointGroupActions.DeleteSuccess, (state, { id }) => adapter.removeOne(id, {\r\n ...state,\r\n isSaving: false\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userGlobalFilterDataPointGroupReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.userGlobalFilterDataPointGroup)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction, props } from '@ngrx/store';\r\nimport { ApiError, UserGroup } from '@rfv/modules/core/models';\r\n\r\nexport enum UserGroupActionsTypes {\r\n Load = '[Core] User Groups Load',\r\n LoadFail = '[Core] User Groups Load Fail',\r\n LoadSuccess = '[Core] User Groups Load Success',\r\n Insert = '[Core] User Groups Insert',\r\n InsertSuccess = '[Core] User Groups Insert Success',\r\n InsertFail = '[Core] User Group Insert Fail',\r\n Update = '[Core] User Groups Update',\r\n UpdateSuccess = '[Core] User Groups Update Success',\r\n UpdateFail = '[Core] User Groups Update Fail',\r\n Delete = '[Core] User Groups Delete',\r\n DeleteSuccess = '[Core] User Groups Delete Success',\r\n DeleteFail = '[Core] User Groups Delete Fail',\r\n Select = '[Core] User Groups Select',\r\n SelectNext = '[Core] User Groups Select Next',\r\n SelectPrev = '[Core] User Groups Select Previous'\r\n}\r\n\r\nexport type UserGroupActionsTypesUnion =\r\n '[Core] User Groups Load' |\r\n '[Core] User Groups Load Fail' |\r\n '[Core] User Groups Load Success' |\r\n '[Core] User Groups Insert' |\r\n '[Core] User Groups Insert Success' |\r\n '[Core] User Group Insert Fail' |\r\n '[Core] User Groups Update' |\r\n '[Core] User Groups Update Success' |\r\n '[Core] User Groups Update Fail' |\r\n '[Core] User Groups Delete' |\r\n '[Core] User Groups Delete Success' |\r\n '[Core] User Groups Delete Fail' |\r\n '[Core] User Groups Select' |\r\n '[Core] User Groups Select Next' |\r\n '[Core] User Groups Select Previous';\r\n\r\n// Load\r\nexport const Load = createAction('[Core] User Groups Load');\r\nexport const LoadFail = createAction('[Core] User Groups Load Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] User Groups Load Success', (entities: UserGroup[]) => ({ entities: entities }));\r\n\r\n// Insert\r\nexport const Insert = createAction('[Core] User Groups Insert', (entity: UserGroup) => ({ entity }));\r\nexport const InsertSuccess = createAction('[Core] User Groups Insert Success', (entity: UserGroup) => ({ entity }));\r\nexport const InsertFail = createAction('[Core] User Group Insert Fail', (error: ApiError) => ({ error }));\r\n\r\n// Update\r\nexport const Update = createAction('[Core] User Groups Update', (entities: UserGroup[]) => ({ entities }));\r\nexport const UpdateSuccess = createAction('[Core] User Groups Update Success');\r\nexport const UpdateFail = createAction('[Core] User Groups Update Fail', (error: ApiError) => ({ error }));\r\n\r\n// Delete\r\nexport const Delete = createAction('[Core] User Groups Delete', (userGroupId: number) => ({ userGroupId }));\r\nexport const DeleteSuccess = createAction('[Core] User Groups Delete Success', (userGroupId: number) => ({ userGroupId }));\r\nexport const DeleteFail = createAction('[Core] User Groups Delete Fail', (error: ApiError) => ({ error }));\r\n\r\n// Select \r\nexport const Select = createAction('[Core] User Groups Select', (userGroupId: number) => ({ userGroupId }));\r\nexport const SelectNext = createAction('[Core] User Groups Select Next');\r\nexport const SelectPrev = createAction('[Core] User Groups Select Previous');\r\n","export type BannerMessageTypes = 'info' | 'success' | 'error';\r\n\r\nexport enum BannerMessageTypesEnum {\r\n Info = 'info',\r\n Success = 'success',\r\n Error = 'error'\r\n}\r\n","export type BannerMessages =\r\n 'Create Success' |\r\n 'Update Success' |\r\n 'Delete Success' |\r\n 'Create Fail' |\r\n 'Update Fail' |\r\n 'Delete Fail';\r\n\r\nexport enum BannerMessagesEnum {\r\n CreateSuccess = 'Create Success',\r\n UpdateSuccess = 'Update Success',\r\n DeleteSuccess = 'Delete Success',\r\n CreateFail = 'Create Fail',\r\n UpdateFail = 'Update Fail',\r\n DeleteFail = 'Delete Fail',\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as UserGroupActions from './actions';\r\nimport { UserDrawerActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { UserGroupService } from '@rfv/modules/core/services';\r\nimport { BannerMessageTypes, BannerMessageTypesEnum } from '@rfv/modules/shared/types/banner-message-types';\r\nimport { BannerMessagesEnum, BannerMessages } from '@rfv/modules/shared/types/banner-messages';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _userGroupService: UserGroupService\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGroupActions.Load),\r\n switchMap(action => this._userGroupService.get().pipe(\r\n map(userGroups => UserGroupActions.LoadSuccess(userGroups)),\r\n catchError(error => of(UserGroupActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public insertSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGroupActions.InsertSuccess),\r\n map(action => UserDrawerActions.CloseDrawer())\r\n )\r\n );\r\n\r\n public insert$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGroupActions.Insert),\r\n switchMap(action => this._userGroupService.insert(action.entity).pipe(\r\n mergeMap(userGroup => [\r\n UserGroupActions.InsertSuccess(userGroup),\r\n UserGroupActions.Load()\r\n ]),\r\n catchError(error => of(UserGroupActions.InsertFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public update$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGroupActions.Update),\r\n switchMap(action => this._userGroupService.update(action.entities).pipe(\r\n switchMap((_) =>\r\n [UserGroupActions.UpdateSuccess(),\r\n UserGroupActions.Load()]\r\n ),\r\n catchError(error => of(UserGroupActions.UpdateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserGroupActions.Delete),\r\n switchMap(actions => this._userGroupService.delete(actions.userGroupId).pipe(\r\n map(userGroupId => UserGroupActions.DeleteSuccess(userGroupId)),\r\n catchError(error => of(UserGroupActions.DeleteFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public showBannerAfterFailOrSuccessRequest$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(\r\n UserGroupActions.InsertSuccess,\r\n UserGroupActions.UpdateSuccess,\r\n UserGroupActions.DeleteSuccess,\r\n UserGroupActions.InsertFail,\r\n UserGroupActions.UpdateFail,\r\n UserGroupActions.DeleteFail,\r\n ),\r\n switchMap(action => this.showBanner(action.type)),\r\n )\r\n );\r\n\r\n private showBanner(actionType: UserGroupActions.UserGroupActionsTypesUnion) {\r\n let messageType: BannerMessageTypes, messageName: BannerMessages;\r\n\r\n switch (actionType) {\r\n case UserGroupActions.UserGroupActionsTypes.InsertSuccess: {\r\n messageType = BannerMessageTypesEnum.Success;\r\n messageName = BannerMessagesEnum.CreateSuccess;\r\n break;\r\n }\r\n case UserGroupActions.UserGroupActionsTypes.UpdateSuccess: {\r\n messageType = BannerMessageTypesEnum.Success;\r\n messageName = BannerMessagesEnum.UpdateSuccess;\r\n break;\r\n }\r\n case UserGroupActions.UserGroupActionsTypes.DeleteSuccess: {\r\n messageType = BannerMessageTypesEnum.Success;\r\n messageName = BannerMessagesEnum.DeleteSuccess;\r\n break;\r\n }\r\n case UserGroupActions.UserGroupActionsTypes.InsertFail: {\r\n messageType = BannerMessageTypesEnum.Error;\r\n messageName = BannerMessagesEnum.CreateFail;\r\n break;\r\n }\r\n case UserGroupActions.UserGroupActionsTypes.UpdateFail: {\r\n messageType = BannerMessageTypesEnum.Error;\r\n messageName = BannerMessagesEnum.UpdateFail;\r\n break;\r\n }\r\n case UserGroupActions.UserGroupActionsTypes.DeleteFail: {\r\n messageType = BannerMessageTypesEnum.Error;\r\n messageName = BannerMessagesEnum.DeleteFail;\r\n break;\r\n }\r\n }\r\n\r\n return [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: messageType,\r\n message: messageName,\r\n autoClose: 3000\r\n }\r\n })\r\n ];\r\n }\r\n}","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, User, UserGroup } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isInserting: boolean;\r\n isUpdating: boolean;\r\n isDeleting: boolean;\r\n\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: userGroup => userGroup.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isInserting: false,\r\n isUpdating: false,\r\n isDeleting: false,\r\n\r\n error: null\r\n});","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UserGroupActions from './actions';\r\nimport { Select } from '../../store/customers/actions';\r\n\r\nconst userGroupsReducer = createReducer(\r\n initialState,\r\n\r\n on(Select, () => initialState),\r\n\r\n // --- Load\r\n on(UserGroupActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isDirty: false\r\n })),\r\n\r\n on(UserGroupActions.LoadSuccess, (state, payload) => adapter.setAll(payload.entities, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(UserGroupActions.LoadFail, (state, payload) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n // --- Insert\r\n on(UserGroupActions.Insert, (state, payload) => ({\r\n ...state,\r\n isInserting: true\r\n })),\r\n\r\n on(UserGroupActions.InsertSuccess, (state, payload) => adapter.upsertOne(payload.entity, {\r\n ...state,\r\n isInserting: false\r\n })),\r\n\r\n on(UserGroupActions.InsertFail, (state, payload) => ({\r\n ...state,\r\n isInserting: false\r\n })),\r\n\r\n // --- Update\r\n on(UserGroupActions.Update, (state, payload) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(UserGroupActions.UpdateSuccess, (state, payload) => ({\r\n ...state,\r\n isUpdating: false\r\n })),\r\n\r\n on(UserGroupActions.UpdateFail, (state, payload) => ({\r\n ...state,\r\n isUpdating: false\r\n })),\r\n\r\n // --- Delete\r\n on(UserGroupActions.Delete, (state, payload) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(UserGroupActions.DeleteSuccess, (state, payload) => adapter.removeOne(payload.userGroupId, {\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(UserGroupActions.DeleteFail, (state, payload) => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n // --- Select\r\n on(UserGroupActions.Select, (state, payload) => ({\r\n ...state,\r\n selectedId: payload.userGroupId\r\n })),\r\n\r\n on(UserGroupActions.SelectNext, (state, payload) => {\r\n let nextIdx = (state.ids).indexOf(state.selectedId) + 1;\r\n return {\r\n ...state,\r\n selectedId: nextIdx >= state.ids.length ? state.ids[0] : state.ids[nextIdx]\r\n }\r\n }),\r\n\r\n on(UserGroupActions.SelectPrev, (state, payload) => {\r\n let prevIdx = (state.ids).indexOf(state.selectedId) - 1;\r\n return {\r\n ...state,\r\n selectedId: prevIdx < 0 ? state.ids[state.ids.length-1] : state.ids[prevIdx]\r\n };\r\n })\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userGroupsReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.userGroups)\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isInserting = createSelector(getState, state => state.isInserting);\r\nexport const isUpdating = createSelector(getState, state => state.isUpdating);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\n\r\nexport const getSelectedId = createSelector(getState, state => state.selectedId);\r\nexport const getSelectedUserGroup = createSelector(\r\n getSelectedId,\r\n getEntities,\r\n (userGroupId, entities) => entities && entities[userGroupId]\r\n);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const getAllOrderByName = createSelector(getAll, userGroups => userGroups.sort((a,b) => a.Name.localeCompare(b.Name)));","import { createAction, props } from '@ngrx/store';\r\n\r\nexport const LoadSuccess = createAction('[Core] User Permission Load Success', (entities: {tag: string, ids: number[]}[]) => ({ entities: entities }));\r\n","import { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as UserPermissionActions from './actions';\r\nimport * as DashboardsActions from '../dashboards/actions';\r\nimport { UserPermission } from '@rfv/modules/core/models';\r\n\r\nimport { groupBy, uniqBy } from 'lodash';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions\r\n ) { }\r\n\r\n public permissions$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DashboardsActions.LoadSuccess),\r\n map(action => {\r\n let permissions: UserPermission[] = [];\r\n action.dashboards.forEach(dashboard => {\r\n dashboard.tiles.forEach(tile => {\r\n permissions = [...permissions, ...tile.permissions];\r\n });\r\n });\r\n\r\n const permissionsByTag: Dictionary = groupBy(uniqBy(permissions, 'Id'), 'Tag');\r\n const permissionIdsByTag = Object.keys(permissionsByTag).map(tag => ({ tag, ids: permissionsByTag[tag].map(p => p.Id) }));\r\n\r\n return UserPermissionActions.LoadSuccess(permissionIdsByTag);\r\n })\r\n ));\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState<{tag: string, ids: number[]}> {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n error: ApiError;\r\n};\r\n\r\nexport const adapter = createEntityAdapter<{tag: string, ids: number[]}>({\r\n selectId: userPermission => userPermission.tag\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UserPermissionActions from './actions';\r\n\r\nconst userPermissionsReducer = createReducer(\r\n initialState,\r\n\r\n on(UserPermissionActions.LoadSuccess, (state, payload) => adapter.setAll(payload.entities, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userPermissionsReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.userPermissons);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, User } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load User Session');\r\nexport const LoadFail = createAction('[Core] Load User Session Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Core] Load User Session Success', (session: User) => ({ session }));\r\n\r\nexport const Save = createAction('[Core] Save User Session', (userId: number, entity: User) => ({ userId, entity }));\r\nexport const SaveFail = createAction('[Core] Save User Session Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Core] Save User Session Success', (session: User) => ({ session }));\r\n\r\nexport const SavePreferences = createAction('[Core] Save User Preferences', (userId: number, entity: User) => ({ userId, entity }));\r\nexport const SavePreferencesFail = createAction('[Core] Save User Preferences Fail', (error: ApiError) => ({ error }));\r\nexport const SavePreferencesSuccess = createAction('[Core] Save User Preferences Success', (session: User) => ({ session }));\r\n\r\nexport const SetTheme = createAction('[Core] Set User Theme', (themeId: 1 | 2) => ({ themeId }));\r\nexport const SetDefaultTheme = createAction('[Core] Set User Default Theme', (themeId: number) => ({ themeId }));\r\n\r\ninterface IResetableForm {\r\n resetForm()\r\n}\r\n\r\nexport const ResetPreferencesForm = createAction('[Core] Reset Preferences Form', (self: IResetableForm) => ({ self }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, tap, mergeMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { AppSettingsService, UserService } from '@rfv/modules/core/services';\r\n\r\nimport * as CoreActions from '../actions';\r\nimport * as CustomerActions from '../customers/actions';\r\nimport * as UserSessionActions from './actions';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { successUserNotificationSettingsPayload } from '@rfv/modules/dashboard/modules/user-admin/store/user-banner-messages';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _appSettingsService: AppSettingsService,\r\n private _userService: UserService,\r\n ) { }\r\n\r\n onLoad$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.Load),\r\n switchMap(action => this._userService.getSessionUser().pipe(\r\n map(session => UserSessionActions.LoadSuccess(session)),\r\n catchError(error => of(UserSessionActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n onLoadFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.LoadFail),\r\n map(action => CustomerActions.Select(null))\r\n )\r\n );\r\n\r\n onLoadSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.LoadSuccess),\r\n mergeMap(action => ([\r\n UserSessionActions.SetDefaultTheme(action.session.ThemeId)\r\n ]))\r\n )\r\n );\r\n\r\n onSavePreferences$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.SavePreferences),\r\n switchMap(action => this._userService.updatePreferences(action.entity).pipe(\r\n map(session => UserSessionActions.SavePreferencesSuccess(session)),\r\n catchError(error => of(UserSessionActions.SavePreferencesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n onResetPreferencesForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.ResetPreferencesForm),\r\n map(action => action.self.resetForm())\r\n )\r\n );\r\n\r\n onPreferencesSaveSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.SavePreferencesSuccess),\r\n switchMap(action => [\r\n UserSessionActions.SetDefaultTheme(action.session.ThemeId),\r\n fromCore.Assets.Entities.Load(),\r\n fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('Changes Saved') })\r\n ])\r\n )\r\n );\r\n\r\n onSetDefaultTheme$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.SetDefaultTheme),\r\n map(action =>\r\n fromRoot.Storage.SaveToLocalStorage('themeId', '' + action.themeId)\r\n )\r\n )\r\n );\r\n\r\n onSetTheme$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserSessionActions.SetTheme),\r\n tap(action => this._appSettingsService.setAppColorTheme(action.themeId))\r\n ), { dispatch: false }\r\n );\r\n}","import { ApiError, User } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n session: User;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isSaving: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const initialState: State = {\r\n session: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n isSaving: false,\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as UserSessionActions from './actions';\r\n\r\nconst userSettingsReducer = createReducer(\r\n initialState,\r\n\r\n on(UserSessionActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UserSessionActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(UserSessionActions.LoadSuccess, (state, { session }) => ({\r\n ...state,\r\n session,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(UserSessionActions.SavePreferences, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UserSessionActions.SavePreferencesFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(UserSessionActions.SavePreferencesSuccess, (state, { session }) => ({\r\n ...state,\r\n session,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n on(UserSessionActions.SetTheme, (state, { themeId }) => ({\r\n ...state,\r\n session: { ...state.session, ThemeId: themeId }\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userSettingsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport * as fromCustomers from '../customers';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.userSession);\r\n\r\nexport const getSession = createSelector(getState, state => state.session);\r\nexport const getSessionUserId = createSelector(getSession, state => state && state.UserId);\r\nexport const getUserSessionFullName = createSelector(getSession, state => state?.FirstName + ' ' + state?.LastName);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getRootUserGroup = createSelector(getState, state => state.session.UserGroupId);\r\n\r\nexport const getSessionThemeId = createSelector(\r\n fromRoot.Storage.getNumberFromLocalStorage('themeId'),\r\n getSession,\r\n (localStorageThemeId, session) => session?.ThemeId || localStorageThemeId || 2\r\n);\r\n\r\nexport const isDarkMode = createSelector(getSessionThemeId, themeId => {\r\n switch (themeId) {\r\n default:\r\n case 1: return true;\r\n case 2: return false;\r\n }\r\n})\r\n\r\nimport { environment } from '@environments/environment';\r\n\r\nexport const getSelectedCustomerLogoPath = createSelector(\r\n fromCustomers.getSelected,\r\n isDarkMode,\r\n (customer, isDarkMode) => {\r\n const customerLogo = customer ? customer.Logo : 'rfv-logo.svg';\r\n\r\n const theme = isDarkMode ? 'dark' : 'light';\r\n\r\n if (environment.production)\r\n return `logos/${theme}/${customerLogo}`;\r\n else\r\n return `assets/logos/${theme}/${customerLogo}`;\r\n }\r\n);","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, VimKnownGood } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Core] Load VIM');\r\n\r\nexport const LoadFail = createAction('[Core] Load VIM Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const LoadSuccess = createAction('[Core] Load VIM Success', props<{\r\n vimsKnownGood: VimKnownGood[]\r\n}>());\r\n\r\nexport const Delete = createAction('[Core] Delete VIM', props<{\r\n id: number,\r\n SHA1: string\r\n}>());\r\n\r\nexport const DeleteFail = createAction('[Core] Delete VIM Fail', props<{\r\n error: ApiError\r\n}>());\r\n\r\nexport const DeleteSuccess = createAction('[Core] Delete VIM Success', props<{\r\n id: number\r\n}>());\r\n\r\nexport const ApproveVims = createAction('[Support] Approve Vims',\r\n (SHA1: string, desc: string) => ({ SHA1, desc }));\r\n\r\nexport const ApproveVimsFail = createAction('[Support] Approve Vims Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const ApproveVimsSuccess = createAction('[Support] Approve Vims Success',\r\n (vimsKnownGood: VimKnownGood) => ({ vimsKnownGood }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of,from } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as VimActions from './actions';\r\nimport { VimService } from '@rfv/modules/core/services';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions: Actions,\r\n private _vimService: VimService,\r\n ) { }\r\n\r\n public load$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.Load),\r\n switchMap(action => this._vimService.get().pipe(\r\n map(vimsKnownGood => VimActions.LoadSuccess({ vimsKnownGood })),\r\n catchError(error => of(VimActions.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.Delete),\r\n switchMap(action => this._vimService.delete(action.SHA1).pipe(\r\n map(response => VimActions.DeleteSuccess({id: action.id})),\r\n catchError(error => of(VimActions.DeleteFail({error: error})))\r\n ))\r\n )\r\n );\r\n\r\n public deleteSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.DeleteSuccess),\r\n mergeMap(_ => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `SHA1 Successfully Deleted`,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public deleteFail$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.DeleteFail),\r\n mergeMap(_ => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Could Not Delete SHA1',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n )\r\n\r\n public approveVIM$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(VimActions.ApproveVims),\r\n switchMap(action => this._vimService.approveVims(action.SHA1, action.desc).pipe(\r\n mergeMap(success => [\r\n VimActions.ApproveVimsSuccess(success),\r\n fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Confirm VIMS',\r\n data: 'VIMS Known Good Successfully Added!',\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n VimActions.ApproveVimsFail(error),\r\n fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Confirm VIMS',\r\n data: 'VIMS Known Good Failed to be Added!',\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n }\r\n })\r\n ])\r\n )))\r\n ));\r\n}\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\nimport { ApiError, VimKnownGood } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n\r\n isSaving: boolean;\r\n isSaved: boolean;\r\n\r\n isDeleting: boolean;\r\n\r\n error: ApiError;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: vimKnownGood => vimKnownGood.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n\r\n isLoaded: false,\r\n isLoading: false,\r\n\r\n isSaving: false,\r\n isSaved: false,\r\n\r\n isDeleting: false,\r\n\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as VimActions from './actions';\r\n\r\nconst vimReducer = createReducer(\r\n initialState,\r\n\r\n on(VimActions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(VimActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(VimActions.LoadSuccess, (state, { vimsKnownGood }) => adapter.setAll(vimsKnownGood, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(VimActions.Delete, (state, {id, SHA1}) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(VimActions.DeleteSuccess, (state, {id}) => adapter.removeOne(id, {\r\n ...state,\r\n isDeleting: false,\r\n error: null\r\n })),\r\n\r\n on(VimActions.DeleteFail, (state, {error}) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: error\r\n })),\r\n\r\n on(VimActions.ApproveVims, (state, { SHA1, desc }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: true,\r\n error: null\r\n })),\r\n\r\n on(VimActions.ApproveVimsSuccess, (state, { vimsKnownGood }) => adapter.addOne(vimsKnownGood, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return vimReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getFeatureState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.vim);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEntities,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\n\r\n","export const loadActions = {\r\n 1: '[TILE Unit Data] Load',\r\n 26: '[TILE Unit Info] Load',\r\n 28: '[System Status Tile] Load',\r\n 29: '[System Event Diagnostics Tile] Load',\r\n 30: '[PresentAlarms] Load Present Alarms Data Request',\r\n 31: '[Fullscreen Unit Alarms] Load',\r\n 33: '[Core] Load CommLossStatus',\r\n 37: '[ReportSchedules] LoadAllScheduledReports',\r\n 38: '[ReportHistory] Load Report History',\r\n 51: '[Photo Listing Tile] Load',\r\n 52: '[Live System Status Tile] Load',\r\n 55: '[Core] Load Unit Creation Types',\r\n 65: '[System Cat Inspection Tile] Load',\r\n 67: '[Unit Cat Inspection Tile] Load',\r\n 101: '[System Status Tile] Toggle Tile Content',\r\n 102: '[SYSTEM STATUS FULL SCREEN] Load Units',\r\n 103: '[RuntimeSettings] Load Event Calculation',\r\n 104: '[System Runtime] Load Runtime',\r\n 106: '[Core] Load Asset Status',\r\n 107: '[Core] Load Asset Datapoints',\r\n 108: '[Core] Load Asset Alarms',\r\n 109: '[RuntimeSettings] Load Runtime Tests',\r\n 112: '[Admin User List Tile] Load User Count',\r\n 113: '[Admin User List Tile] Load User Expiry',\r\n 114: '[Admin Runtime Tile] Load Unit Not Setup Count',\r\n 115: '[Admin Notifications Tile] Load',\r\n 117: '[UnitInfo] Load Unit Info Data Request',\r\n 118: '[Core] Load DatapointLegends',\r\n 119: '[Fullscreen Unit Alerts] Load Unit Alerts',\r\n 120: '[UserSearch] Initial Load',\r\n 121: '[Asset Alarms Notifications] Alarm Groups Load',\r\n 122: '[Asset Alarms Notifications] Notification Types Load',\r\n 124: '[Asset Alarms Notifications] Alarm Group Schedules Load',\r\n 125: '[Asset Alarms Notifications] Recipients Load',\r\n 126: '[Core] Load Asset Datapoint Settings',\r\n 127: '[Core] Load DatapointDisplayProperties',\r\n 129: '[Core] Load Unit Creation Logs',\r\n 130: '[Core] Load Asset Alarm Group Alert Schedule Recipients',\r\n 131: '[Core] Load Asset Alert History Recipient Count',\r\n 132: '[Core] Load Asset Alarm History Count',\r\n 133: '[TILE Runtime Metrics] Load Unit Runtime',\r\n 134: '[TILE Runtime Metrics] Reset',\r\n 135: '[Core] Load System Status',\r\n 136: '[Core] Load Geofences',\r\n 350: '[Onboarding Queue] Load Onboarding Queue Asset',\r\n 495: '[Core] Load Unit Controls',\r\n 501: '[Core] Load Control Admin',\r\n 503: '[Core] Load Unit Control History',\r\n 525: '[Core] Load Aggregate Fleet Vitals'\r\n};\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SharedModule } from '@rfv/modules/shared/shared.module';\r\n\r\n\r\nimport { CoreModule } from '@rfv/modules/core/core.module';\r\nimport { COMPONENTS } from './components';\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { reducer } from './store/reducer';\r\nimport { Effects } from './store/effects';\r\nimport { InvolveModule } from '@rfv/modules/involve/involve.module';\r\nimport { AlarmEditorTileComponent } from './containers/alarm-editor-tile.component';\r\nimport { AlarmEditorService } from './services/alarm-editor.service';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n InvolveModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CoreModule,\r\n SharedModule,\r\n StoreModule.forFeature('alarm-editor', reducer),\r\n EffectsModule.forFeature([\r\n Effects\r\n ])\r\n ],\r\n declarations: [\r\n COMPONENTS,\r\n AlarmEditorTileComponent\r\n ],\r\n providers: [\r\n AlarmEditorService\r\n ],\r\n exports: [\r\n AlarmEditorTileComponent\r\n ]\r\n})\r\nexport class AlarmEditorModule { }\r\n","
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

Alarm Groups

\r\n
\r\n
\r\n
\r\n

Group Name

\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n {{alarmGroup.Name}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Group Schedules

\r\n
\r\n
\r\n
\r\n

Schedule Name

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{{sitemapGroup?.name}}

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n 0\" [searchString]=\"unitSearchString\">\r\n \r\n No selected alarm groups\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

Recipients

\r\n
\r\n
\r\n \r\n \r\n {{notificationType.Type}}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n

Selected Users

\r\n
\r\n
\r\n
0\" fxLayout=\"column\" class=\"base-container overflow-auto grow-1 h-full\">\r\n \r\n
\r\n \r\n
\r\n \r\n {{user.fullName}}\r\n \r\n \r\n {{user.Email ? 'Email: '+ user.Email : ''}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{search.value ? 'No selected users match your search...' : 'No selected users'}}
\r\n
\r\n
\r\n\r\n
\r\n

Available Recipients

\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
0; else noUsers\" fxLayout=\"column\">\r\n \r\n
\r\n \r\n
\r\n \r\n {{user.fullName}}\r\n \r\n \r\n {{user.Email ? 'Email: '+ user.Email : ''}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{search.value ? 'No available users match your search...' : 'No available users'}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { SitemapGroup } from '../../../../../core/models/sitemap-group/entity';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport * as fromUserActions from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport { Subject, Observable, BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { AlarmGroup, AlertSchedule, User, NotificationType } from '@rfv/modules/core/models';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'recipients-editor',\r\n templateUrl: 'recipients-editor.component.html',\r\n styleUrls: ['recipients-editor.component.scss']\r\n})\r\nexport class RecipientsEditorComponent implements OnInit, OnDestroy {\r\n\r\n //available - display to user\r\n public alarmGroups$: Observable;\r\n public alertSchedules$: Observable;\r\n public users$: Observable;\r\n public notificationTypes$: Observable;\r\n\r\n //selected\r\n public selectedAlarmGroups: AlarmGroup[] = [];//selected but NOT checked alarm groups\r\n public selectedAlertSchedule: AlertSchedule;//send to API\r\n public sitemapGroup: SitemapGroup;\r\n\r\n public selectedUsers: User[] = [];//send to API\r\n public selectedUsersDisplayed: User[] = []; //selected users + filter\r\n\r\n public selectedAlarmCountLength: number;\r\n\r\n public isUsersLoading$: Observable;\r\n private _selectedUsersFilter$ = new BehaviorSubject(null);\r\n private _searchUsersFilter$ = new BehaviorSubject(null);\r\n public userSearchString: string;\r\n\r\n public isEmailChecked: boolean = true;\r\n public isTextChecked: boolean = true;\r\n public selectedNotificationTypeIds: number[] = [];\r\n\r\n public unitSearchString: string;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n ngOnInit() {\r\n this._store.dispatch(fromCore.AlarmGroups.Load());\r\n this._store.dispatch(fromCore.AlertSchedules.Load());\r\n this._store.dispatch(fromUserActions.UserSearchActions.InitialLoad());\r\n\r\n this.alarmGroups$ = this._store.select(fromCore.AlarmGroups.getAll);\r\n this.alertSchedules$ = this._store.select(fromCore.AlertSchedules.getAll);\r\n\r\n combineLatest([\r\n this._store.select(fromDashboard.getSelectedSitemapGroupId),\r\n this._store.select(fromGlobalFilter.getSelectedFilterId),\r\n this.alertSchedules$, \r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(([sitemapGroupId, globalFilterId, alertSchedules]) => {\r\n this.selectedAlarmGroups = [];\r\n this.selectedAlertSchedule = alertSchedules[0];\r\n \r\n if (sitemapGroupId)\r\n this._store.dispatch(fromCore.Assets.GlobalFilterAssetIds.Load(sitemapGroupId, globalFilterId ? globalFilterId : 0));\r\n });\r\n\r\n this.notificationTypes$ = this._store.pipe(\r\n select(fromCore.NotificationTypes.getAll),\r\n map(types => types.filter(type => !type.IsVoice && type.Enabled))\r\n );\r\n\r\n this.notificationTypes$.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(types => types.forEach(type => this.selectedNotificationTypeIds.push(type.Id)));\r\n\r\n this.isUsersLoading$ = this._store.select(fromUser.getIsSearchInitialLoading);\r\n\r\n this._store.select(fromCore.SitemapGroups.AlarmCounts.getSelectedAlarmCounts).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(selectedAlarmCounts => this.selectedAlarmCountLength = selectedAlarmCounts.length);\r\n\r\n this._store.pipe(\r\n select(fromDashboard.getSelectedSitemapGroup),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(sitemapGroup => this.sitemapGroup = sitemapGroup);\r\n\r\n this.alertSchedules$.pipe(\r\n filter(schedules => schedules?.length > 0),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(schedules => {\r\n this.selectedAlertSchedule = schedules[0];\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.SetAlertSchedule({ alertSchedule: this.selectedAlertSchedule }));\r\n });\r\n\r\n this.users$ = combineLatest([\r\n this._store.select(fromUser.getAllSearchResults),\r\n this._selectedUsersFilter$,\r\n this._searchUsersFilter$\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n map(([available, selected, searchString]) => {\r\n //selected Users\r\n this.selectedUsersDisplayed = this.selectedUsers.filter(user =>\r\n this.getUserSearchResults(user, searchString)).sort((a, b) => a.fullName.localeCompare(b.fullName));\r\n\r\n //available Users\r\n return available.filter(user => this.getUserSearchResults(user, searchString))\r\n .filter(user => selected ? selected.indexOf(user) < 0 : true);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.Clear());\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.ClearSelectedAlarmCounts());\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n this._selectedUsersFilter$.complete();\r\n this._searchUsersFilter$.complete();\r\n }\r\n\r\n //First Pane\r\n public loadAlarmCounts() {\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.ClearSelectedAlarmCounts());\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.Load({\r\n sitemapGroupId: this.sitemapGroup.id,\r\n alertScheduleId: this.selectedAlertSchedule.Id,\r\n alarmGroupIdsCsv: this.selectedAlarmGroups.map(group => group.Id)\r\n }));\r\n }\r\n\r\n public selectAlarmGroup(alarmGroup: AlarmGroup) {\r\n const index = this.selectedAlarmGroups.indexOf(alarmGroup);\r\n\r\n if (index > -1)\r\n this.selectedAlarmGroups.splice(index, 1);\r\n else\r\n this.selectedAlarmGroups.push(alarmGroup);\r\n\r\n this.loadAlarmCounts();\r\n }\r\n\r\n public selectAlertSchedule(alertSchedule: AlertSchedule) {\r\n this.selectedAlertSchedule = alertSchedule;\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.SetAlertSchedule({ alertSchedule }));\r\n this.loadAlarmCounts();\r\n }\r\n\r\n //Third Pane\r\n public selectUser(user: User) {\r\n const index = this.selectedUsers.indexOf(user);\r\n\r\n if (index > -1)\r\n this.selectedUsers.splice(index, 1);\r\n else\r\n this.selectedUsers.push(user);\r\n\r\n this._selectedUsersFilter$.next(this.selectedUsers);\r\n }\r\n\r\n public searchUser(searchString: string) {\r\n this.userSearchString = searchString.toLowerCase();\r\n this._searchUsersFilter$.next(searchString.toLowerCase());\r\n }\r\n\r\n public getUserSearchResults(user: User, searchString: string) {//fullName and email\r\n return searchString ? user.fullName.toLowerCase().indexOf(searchString.toLowerCase()) !== -1 ||\r\n user.Email.toLowerCase().indexOf(searchString.toLowerCase()) !== -1 : true;\r\n }\r\n\r\n public openModal(user: User) {\r\n this._store.dispatch(\r\n fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--large',\r\n customWidth: '850px',\r\n modalType: fromRoot.Modal.ModalType.NoButtons,\r\n contentType: fromRoot.Modal.ModalContentType.UserRecipients,\r\n title: `${user.fullName}`,\r\n title2: `${user.Email}`,\r\n data: user,\r\n zindex: true,\r\n }\r\n }));\r\n }\r\n\r\n public save() {\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.Save({\r\n rootSitemapId: this.sitemapGroup.id,\r\n userIds: this.selectedUsers.map(user => user.UserId),\r\n notificationTypeIds: this.selectedNotificationTypeIds\r\n }));\r\n\r\n this.clearSelectedUsersAndUnits();\r\n }\r\n\r\n public clearSelectedUsersAndUnits() {\r\n this.selectedUsers = [];\r\n this.selectedUsersDisplayed = [];\r\n this._selectedUsersFilter$.next(this.selectedUsers);\r\n this._searchUsersFilter$.next(this.userSearchString);\r\n this._store.dispatch(fromCore.SitemapGroups.AlarmCounts.ClearSelectedAlarmCounts());\r\n }\r\n\r\n public isSaveDisabled(): boolean {\r\n return this.selectedUsers.length === 0 || this.selectedAlarmGroups.length === 0 || this.selectedAlarmCountLength === 0 || this.selectedNotificationTypeIds.length === 0;\r\n }\r\n\r\n public checkType(typeId: number) {\r\n const index = this.selectedNotificationTypeIds.indexOf(typeId);\r\n\r\n if (index > -1)\r\n this.selectedNotificationTypeIds.splice(index, 1);\r\n else\r\n this.selectedNotificationTypeIds.push(typeId);\r\n }\r\n\r\n public isChecked(typeId: number): boolean {\r\n return !!this.selectedNotificationTypeIds?.find(checkedTypeId => checkedTypeId === typeId);\r\n }\r\n\r\n public isAlarmGroupChecked(alarmGroup: AlarmGroup) : boolean{\r\n return this.selectedAlarmGroups.indexOf(alarmGroup) > -1;\r\n }\r\n\r\n}","\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n Loading Unit List...\r\n
\r\n
","import { Tree } from '@rfv/modules/core/models/tree';\r\nimport { Component, OnInit, OnDestroy, ChangeDetectorRef, Input } from '@angular/core';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport { combineLatest, Observable, Subject, BehaviorSubject } from 'rxjs';\r\nimport { Asset, AlarmCount } from '@rfv/modules/core/models';\r\nimport { FormArray, FormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { takeUntil, debounceTime } from 'rxjs/operators';\r\nimport { SitemapGroupExtended } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-unit-access.types'; \r\n\r\n@Component({\r\n selector: 'recipients-unit-list',\r\n templateUrl: './recipients-unit-list.component.html',\r\n styleUrls: ['./recipients-unit-list.component.scss']\r\n})\r\nexport class RecipientsUnitListComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public set searchString(searchString: string) {\r\n this._searchString = searchString;\r\n this._searchUnitsFilter$.next(searchString);\r\n }\r\n\r\n\r\n public _searchString: string;\r\n\r\n public form: UntypedFormGroup;\r\n\r\n public isLoading$: Observable;\r\n\r\n private _searchUnitsFilter$ = new BehaviorSubject(null);\r\n public _destroyed$ = new Subject();\r\n\r\n public assets: Asset[];\r\n public alarmCounts: AlarmCount[];\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder,\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n\r\n this.isLoading$ = this._store$.select(fromCore.SitemapGroups.AlarmCounts.isLoading);\r\n\r\n this._searchUnitsFilter$.pipe(\r\n takeUntil(this._destroyed$),\r\n debounceTime(300),\r\n ).subscribe(searchString => {\r\n this.searchUnits(searchString);\r\n this._cdr.detectChanges();\r\n });\r\n\r\n\r\n this._store$.pipe(\r\n select(fromCore.SitemapGroups.AlarmCounts.getSelectedAlarmCounts),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(selectedCounts => {\r\n if (!selectedCounts.length && this.sitemapTree) {\r\n this.sitemapTree.controls[0].get('check').patchValue(false);\r\n this.deselectAll(this.sitemapTree.controls[0] as UntypedFormGroup)\r\n }\r\n });\r\n\r\n combineLatest([\r\n this._store$.select(fromUser.getAlarmEditorSitemapTree),\r\n this._store$.select(fromCore.Assets.GlobalFilterAssetIds.getGlobalFilterAssets),\r\n this._store$.select(fromCore.SitemapGroups.AlarmCounts.getAlarmCounts)\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([sitemapTree, assets, counts]) => {\r\n this.assets = assets;\r\n this.alarmCounts = counts;\r\n\r\n if (!this.form)\r\n this.form = this._fb.group({\r\n sitemapTree: this._fb.array([sitemapTree].map(item => this.mapSitemapGroups(item)))\r\n });\r\n\r\n else {\r\n this.sitemapTree.clear();\r\n [sitemapTree].forEach(item => {\r\n this.sitemapTree.push(this.mapSitemapGroups(item));\r\n });\r\n this.searchUnits(this._searchString);\r\n this._cdr.detectChanges();//bug 16778\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n this._searchUnitsFilter$.complete();\r\n }\r\n\r\n /**\r\n * Form Group Mapping\r\n */\r\n public mapSitemapGroups(child: Tree) {\r\n const assets = this.assets?.filter(v => v.sitemapGroupId === child?.value?.id);\r\n\r\n return this._fb.group({\r\n visible: [true],\r\n check: [false],\r\n\r\n sitemapGroupId: child?.value.id,\r\n name: child?.value.name,\r\n parent: child?.parent,\r\n children: child?.children ? this._fb.array(child.children.map(child => this.mapSitemapGroups(child))) : [],\r\n assets: child?.value?.id ? this._fb.array(assets.map(asset => this.mapAssets(asset))) : []\r\n });\r\n }\r\n\r\n public mapAssets(asset: Asset) {\r\n const alarmCounts = this.alarmCounts?.filter(count => count.Id === asset?.id);\r\n\r\n return this._fb.group({\r\n visible: [true],\r\n check: [false],\r\n\r\n id: asset.id,\r\n name: asset.name,\r\n alarmCounts: asset?.id ? this._fb.array(alarmCounts.map(count => this.mapAlarmCounts(count))) : []\r\n });\r\n }\r\n\r\n public mapAlarmCounts(count: AlarmCount) {\r\n return this._fb.group({\r\n visible: [true],\r\n check: [false],\r\n id: count.Id,\r\n name: count.Name,\r\n alarmGroupId: count.AlarmGroupId,\r\n alarmGroupName: count.AlarmGroupName,\r\n alarmGroupAlertScheduleId: count.AlarmGroupAlertScheduleId,\r\n enabledAlarmCount: count.EnabledAlarmCount,\r\n disabledAlarmCount: count.DisabledAlarmCount,\r\n });\r\n }\r\n\r\n public deselectAll(child: UntypedFormGroup) {\r\n (child.get('children') as FormArray).controls.forEach(child => {\r\n child.get('check').patchValue(false);\r\n this.deselectAll(child as UntypedFormGroup)\r\n });\r\n (child.get('assets') as FormArray).controls.forEach(asset => {\r\n asset.get('check').patchValue(false);\r\n (asset.get('alarmCounts') as FormArray).controls.forEach(count => {\r\n count.get('check').patchValue(false);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Search Units\r\n */\r\n public searchUnits(searchString: string) {\r\n if (!searchString) {\r\n this.turnChildAndAssetsVisible(this.sitemapTree.controls[0] as UntypedFormGroup);\r\n }\r\n else {\r\n //check the root sitemaps children and assets\r\n (this.sitemapTree.controls[0].get('children') as FormArray).controls.forEach(child => {\r\n this.examineAll(searchString, child as UntypedFormGroup);\r\n });\r\n\r\n (this.sitemapTree.controls[0].get('assets') as FormArray).controls.forEach(asset => {\r\n this.examineAsset(searchString, asset as UntypedFormGroup);\r\n });\r\n }\r\n }\r\n\r\n public turnChildAndAssetsVisible(child: UntypedFormGroup) {\r\n (child.get('children') as FormArray).controls.forEach(child => {\r\n child.get('visible').patchValue(true);\r\n this.turnChildAndAssetsVisible(child as UntypedFormGroup)\r\n });\r\n (child.get('assets') as FormArray).controls.forEach(asset => {\r\n asset.get('visible').patchValue(true);\r\n });\r\n }\r\n\r\n public examineAll(searchString: string, child: UntypedFormGroup) {\r\n const childrenMatch: boolean = (child.get('children') as FormArray).controls.map(child => this.examineChild(searchString, child as UntypedFormGroup)).includes(true);\r\n const assetsMatch: boolean = (child.get('assets') as FormArray).controls.map(asset => this.examineAsset(searchString, asset as UntypedFormGroup)).includes(true);\r\n\r\n let found: boolean = childrenMatch || assetsMatch;\r\n\r\n (child.get('children') as FormArray).controls.forEach(childControl => {\r\n if (this.examineAll(searchString, childControl as UntypedFormGroup))\r\n found = true;\r\n });\r\n\r\n if ((child.value.name as string).toLowerCase().includes(searchString.toLowerCase())) {\r\n this.turnChildAndAssetsVisible(child);\r\n found = true;\r\n }\r\n\r\n child.get('visible').patchValue(found);\r\n return found;\r\n }\r\n\r\n public examineChild(searchString: string, child: UntypedFormGroup) {\r\n const childMatch: boolean = (child.value.name as string).toLowerCase().includes(searchString.toLowerCase());\r\n\r\n child.get('visible').patchValue(childMatch);\r\n return childMatch;\r\n }\r\n\r\n public examineAsset(searchString: string, asset: UntypedFormGroup) {\r\n const assetMatch: boolean = (asset.value.name as string).toLowerCase().includes(searchString.toLowerCase());\r\n\r\n asset.get('visible').patchValue(assetMatch);\r\n return assetMatch;\r\n }\r\n\r\n /**\r\n * Getters\r\n */\r\n public get sitemapTree(): FormArray {\r\n return this.form?.get('sitemapTree') as FormArray;\r\n }\r\n\r\n public get sitemapTreeControls() {\r\n return this.sitemapTree.controls as UntypedFormGroup[];\r\n }\r\n}","
\r\n
\r\n \r\n Alarms\r\n \r\n maxNumber || (isSaving$ | async)\"\r\n class=\"button button--primary\" style=\"min-width: 100px;\" (click)=\"handleAddToList()\">\r\n Add to list\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n Alarm Name:\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n Filter By:\r\n \r\n \r\n {{ tests.Name }}\r\n \r\n \r\n \r\n\r\n \r\n Threshold:\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n Unit Name\r\n
\r\n
\r\n \r\n {{ row.UnitName || '—' }}\r\n \r\n\r\n
\r\n\r\n \r\n \r\n
\r\n Alarm Name\r\n
\r\n
\r\n \r\n {{ row.AlarmName || '—' }}\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n Test\r\n
\r\n
\r\n \r\n {{ row.AlarmTestName || '—' }}\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n Threshold\r\n
\r\n
\r\n \r\n {{ row.ThresholdAndUnitsOfMeasure || '—' }}\r\n \r\n
\r\n \r\n
\r\n \r\n No data found\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
","import { Component, OnInit, OnDestroy, ViewChild, Output, EventEmitter } from '@angular/core';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { combineLatest, Observable, Subject } from 'rxjs';\r\nimport { AlarmTest, UnitOfMeasure } from '@rfv/modules/core/models';\r\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { AlarmEditor } from '../../models/alarm-editor.model';\r\nimport { InvolveSort } from '@rfv/modules/involve/table/sort';\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table';\r\n\r\n@Component({\r\n selector: 'threshold-alarms',\r\n templateUrl: './threshold-alarms.component.html',\r\n styleUrls: ['./threshold-alarms.component.scss']\r\n})\r\nexport class ThresholdAlarmsComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild(InvolveSort, { static: false })\r\n private set sort(sort: InvolveSort) {\r\n if (sort && !this.dataSource.sort) {\r\n this.dataSource.sort = sort;\r\n }\r\n };\r\n\r\n public form: UntypedFormGroup;\r\n\r\n public alarms$: Observable;\r\n public alarmTests$: Observable;\r\n public unitsOfMeasure$: Observable;\r\n\r\n public alarms: AlarmEditor[];\r\n\r\n public filteredData: AlarmEditor[];\r\n public filteredAlarmTests: AlarmTest[];\r\n\r\n public isLoaded$: Observable;\r\n public isLoading$: Observable;\r\n\r\n public isSaving$: Observable;\r\n\r\n public selectedAssetIds$: Observable\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public maxNumber: number = Number.MAX_SAFE_INTEGER;\r\n\r\n @Output() addToList = new EventEmitter();\r\n\r\n public dataSource = new InvolveDataSource(null, data => this.columns);\r\n\r\n public columns = [\r\n \"UnitName\",\r\n \"AlarmName\",\r\n \"AlarmTestName\",\r\n \"ThresholdAndUnitsOfMeasure\",\r\n ];\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n ngOnInit() {\r\n\r\n this.isSaving$ = this._store$.select(fromAlarmEditor.getIsSavingAlarms);\r\n\r\n this.form = this._fb.group({\r\n alarmName: null,\r\n threshold: null,\r\n alarmTestId: [null, Validators.required],\r\n });\r\n\r\n this.form.valueChanges.pipe(takeUntil(this._destroyed$)).subscribe(val => {\r\n this.filterAlarms();\r\n });\r\n\r\n this.alarms$ = this._store$.select(fromAlarmEditor.getAlarms);\r\n this.alarmTests$ = this._store$.select(fromCore.AlarmTests.getAll);\r\n this.unitsOfMeasure$ = this._store$.select(fromCore.UnitsOfMeasure.getAll);\r\n this._store$.select(fromCore.SitemapGroups.Alarms.getEntities);\r\n\r\n this.isLoaded$ = this._store$.select(fromAlarmEditor.isAlarmsLoaded);\r\n this.isLoading$ = this._store$.select(fromAlarmEditor.isAlarmsLoading);\r\n\r\n this.selectedAssetIds$ = this._store$.select(fromAlarmEditor.getSelectedAssets);\r\n\r\n combineLatest([\r\n this.alarms$,\r\n this.alarmTests$,\r\n this.unitsOfMeasure$,\r\n this.selectedAssetIds$,\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([alarms, tests, unitOfMeasures, assetIds]) => {\r\n if (alarms && assetIds.length > 0) {\r\n this.alarms = [];\r\n this.alarms = alarms?.map(alarm => ({\r\n ...alarm,\r\n AlarmTestName: tests?.find(test => test.AlarmTestId === alarm.AlarmTestId)?.Name,\r\n UnitsOfMeasureName: unitOfMeasures?.find(uom => uom.Id === alarm.UnitsOfMeasureId)?.Name,\r\n ThresholdAndUnitsOfMeasure: alarm.Threshold != null ? alarm.Threshold + ' ' + (alarm.UnitsOfMeasureId ? unitOfMeasures?.find(uom => uom.Id === alarm.UnitsOfMeasureId)?.Name : '') : null,\r\n })).filter(alarm => assetIds.includes(alarm.AssetId));\r\n\r\n this.filteredAlarmTests = tests.filter(test =>\r\n alarms?.map(alarm => alarm.AlarmTestId).includes(test.AlarmTestId)\r\n );\r\n\r\n this.dataSource.data = this.alarms;\r\n this.dataSource.sort = this.sort;\r\n\r\n this.form.reset();\r\n this.filterAlarms();\r\n }\r\n\r\n });\r\n\r\n this.dataSource.filteredData$.pipe(takeUntil(this._destroyed$)).subscribe(data => {\r\n this.filteredData = data;\r\n });\r\n\r\n }\r\n\r\n public filterAlarms() {\r\n let alarmTestId = this.form.get(\"alarmTestId\").value;\r\n\r\n alarmTestId ?\r\n this.dataSource.data = this.alarms.filter(alarm => alarm.AlarmTestId === alarmTestId) :\r\n this.dataSource.data = this.alarms;\r\n }\r\n\r\n public handleAddToList() {\r\n const alarmName = this.form.value.alarmName?.trim();\r\n const threshold = this.form.value.threshold\r\n\r\n let data = this.filteredData.map((item) => ({\r\n ...item,\r\n Threshold: threshold?.toString()?.length > 0 ? threshold.toString() : item.Threshold,\r\n AlarmName: alarmName?.length > 0 ? alarmName : item.AlarmName,\r\n PreviousThreshold: item.Threshold,\r\n PreviousAlarmName: item.AlarmName\r\n }));\r\n\r\n this.addToList.emit(data);\r\n }\r\n\r\n public handleAlarmNameClick(alarmName: string) {\r\n this.form.get(\"alarmName\").setValue(alarmName);\r\n }\r\n\r\n public handleThresholdClick(threshold: number) {\r\n this.form.get(\"threshold\").setValue(threshold);\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}","
\r\n
\r\n \r\n Available Datapoints\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
0\" class=\"overflow-auto h-full\">\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n No data to display\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n\r\n
","import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { AlarmEditorDatapoints } from '../../models/alarm-editor-datapoints.model';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'threshold-available-datapoints',\r\n templateUrl: './threshold-available-datapoints.component.html',\r\n styleUrls: ['./threshold-available-datapoints.component.scss']\r\n})\r\nexport class ThresholdAvailableDatapointsComponent implements OnInit, OnDestroy {\r\n\r\n public alarmEditorDatapoints: AlarmEditorDatapoints[];\r\n public filteredDatapoints: AlarmEditorDatapoints[];\r\n\r\n public isLoaded$: Observable;\r\n public isLoading$: Observable;\r\n\r\n public selectedDatapoint: AlarmEditorDatapoints;\r\n public sitemapGroupId: number;\r\n\r\n public search: string = '';\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n @Output() loadAlarmClicked = new EventEmitter();\r\n\r\n public constructor(\r\n private _store$: Store,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this._store$.select(fromAlarmEditor.getAlarmEditorDatapoints).pipe(takeUntil(this._destroyed$)).subscribe(alarm => {\r\n this.selectedDatapoint = null;\r\n this.filteredDatapoints = alarm;\r\n this.alarmEditorDatapoints = alarm;\r\n this.searchData();\r\n });\r\n\r\n this.isLoaded$ = this._store$.select(fromAlarmEditor.isLoadedDatapoints);\r\n this.isLoading$ = this._store$.select(fromAlarmEditor.isLoadingDatapoints);\r\n\r\n this._store$.select(fromDashboard.getSelectedSitemapGroupId).pipe(takeUntil(this._destroyed$)).subscribe(v => {\r\n this.sitemapGroupId = v;\r\n })\r\n }\r\n\r\n public selectDatapoint(datapoint: AlarmEditorDatapoints) {\r\n this.selectedDatapoint = datapoint;\r\n this.LoadAlarms();\r\n }\r\n\r\n public LoadAlarms() {\r\n this.loadAlarmClicked.emit();\r\n\r\n if (this.selectedDatapoint?.Id && this.sitemapGroupId)\r\n this._store$.dispatch(fromAlarmEditor.LoadAlarmsBySitemapAndDatapoint(this.sitemapGroupId, this.selectedDatapoint.Id));\r\n }\r\n\r\n public searchData() {\r\n this.filteredDatapoints = this.alarmEditorDatapoints?.filter(datapoint => {\r\n return datapoint.Name.toLowerCase().includes(this.search.toLowerCase());\r\n });\r\n }\r\n\r\n public clearSearch() {\r\n this.search = '';\r\n this.searchData()\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\n\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { AlarmEditor } from '../../models/alarm-editor.model';\r\n\r\nimport { ThresholdAlarmsComponent } from '../threshold-alarms/threshold-alarms.component';\r\nimport { ThresholdPreviewSaveComponent } from '../threshold-preview-save/threshold-preview-save.component';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'threshold-editor',\r\n templateUrl: './threshold-editor.component.html',\r\n styleUrls: ['./threshold-editor.component.scss']\r\n})\r\nexport class ThresholdEditorComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild(ThresholdAlarmsComponent) thresholdAlarmsPanel: ThresholdAlarmsComponent;\r\n @ViewChild(ThresholdPreviewSaveComponent) previewSavePanel: ThresholdPreviewSaveComponent;\r\n\r\n public unitListCollapse: boolean = false;\r\n public datapointsCollapse: boolean = false;\r\n public alarmsCollapse: boolean = true;\r\n public previewSaveCollapse: boolean = true;\r\n\r\n public siteMapName$: Observable;\r\n public alarmListToUpdate: AlarmEditor[];\r\n\r\n public _destroyed$ = new Subject();\r\n public sitemapGroupId: number;\r\n\r\n public maxPanels: number = 2;\r\n\r\n public constructor(\r\n private _store$: Store,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.siteMapName$ = this._store$.select(fromUser.getSitemapTreeName);\r\n }\r\n\r\n public handleCollapse(panelName: String) {\r\n switch (panelName) {\r\n case \"units\": {\r\n if (this.maxPanels < 2 || this.unitListCollapse == false) {\r\n this.unitListCollapse = !this.unitListCollapse;\r\n this.unitListCollapse === false ? this.maxPanels++ : this.maxPanels--;\r\n }\r\n break;\r\n };\r\n case \"datapoints\": {\r\n if (this.maxPanels < 2 || this.datapointsCollapse == false) {\r\n this.datapointsCollapse = !this.datapointsCollapse;\r\n this.datapointsCollapse === false ? this.maxPanels++ : this.maxPanels--;\r\n }\r\n break;\r\n };\r\n case \"alarms\": {\r\n if (this.maxPanels < 2 || this.alarmsCollapse == false) {\r\n this.alarmsCollapse = !this.alarmsCollapse;\r\n this.alarmsCollapse === false ? this.maxPanels++ : this.maxPanels--;\r\n }\r\n break;\r\n };\r\n case \"previewSave\": {\r\n if (this.maxPanels < 2 || this.previewSaveCollapse == false) {\r\n this.previewSaveCollapse = !this.previewSaveCollapse;\r\n this.previewSaveCollapse === false ? this.maxPanels++ : this.maxPanels--;\r\n }\r\n break;\r\n };\r\n }\r\n }\r\n\r\n public handleLoadDatapoints() {\r\n this.maxPanels = 2;\r\n this.unitListCollapse = false;\r\n this.datapointsCollapse = false;\r\n this.alarmsCollapse = true;\r\n this.previewSaveCollapse = true;\r\n\r\n this.previewSavePanel.handleRemoveAll();\r\n this._store$.dispatch(fromAlarmEditor.ClearThresholdEditor());\r\n }\r\n\r\n public handleLoadAlarms() {\r\n this.maxPanels = 2;\r\n\r\n this.unitListCollapse = true;\r\n this.datapointsCollapse = false;\r\n this.alarmsCollapse = false;\r\n this.previewSaveCollapse = true;\r\n }\r\n\r\n public handleAddToList(alarmList: AlarmEditor[]) {\r\n this.alarmListToUpdate = alarmList;\r\n\r\n this.maxPanels = 2;\r\n this.unitListCollapse = true;\r\n this.datapointsCollapse = true;\r\n this.alarmsCollapse = false;\r\n this.previewSaveCollapse = false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._store$.dispatch(fromAlarmEditor.ClearThresholdEditor());\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}","
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n
","
\r\n
\r\n
\r\n \r\n Update Alarms\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n No alarms added\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n Unit Name\r\n
\r\n
\r\n \r\n {{ row.get('UnitName').value || '—' }}\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n Alarm Name\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n Test\r\n
\r\n
\r\n \r\n {{ row.get('AlarmTestName').value }}\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n Threshold\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n No data found\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n \r\n Sending Alarms Changes...\r\n
\r\n
","import { Component, OnInit, OnDestroy, Input, SimpleChanges, ViewChild } from '@angular/core';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { AlarmEditor } from '../../models/alarm-editor.model';\r\nimport { FormArray, FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { ThresholdEditorAlarms } from '../../models/threshold-alarms.model';\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table';\r\nimport { InvolveSort } from '@rfv/modules/involve/table/sort';\r\nimport { ModalType, ModalContentType } from '@rfv/store/modal';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'threshold-preview-save',\r\n templateUrl: './threshold-preview-save.component.html',\r\n styleUrls: ['./threshold-preview-save.component.scss']\r\n})\r\nexport class ThresholdPreviewSaveComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild(InvolveSort, { static: false })\r\n private set sort(sort: InvolveSort) {\r\n if (sort && !this.dataSource.sort) {\r\n this.dataSource.sort = sort;\r\n }\r\n };\r\n\r\n public dataSource = new InvolveDataSource(null,\r\n data => /* Object.keys(data.controls) */[\"UnitName\", \"AlarmTestName\"],\r\n (data, columnName) => data.get(columnName).value\r\n );\r\n\r\n public columns = [\r\n 'UnitName',\r\n 'AlarmName',\r\n 'AlarmTestName',\r\n 'Threshold',\r\n 'DeleteIcon',\r\n ];\r\n\r\n public form: FormArray;\r\n\r\n public isLoaded$: Observable;\r\n public isLoading$: Observable;\r\n\r\n public isSaving$: Observable;\r\n\r\n @Input() selectedAlarms: AlarmEditor[];\r\n\r\n public alarmsList: AlarmEditor[];\r\n public filteredAlarms: AlarmEditor[];\r\n\r\n public alarmsForModal: AlarmEditor[];\r\n\r\n public assetIdList: number[];\r\n\r\n public thresholdAlarms: ThresholdEditorAlarms[];\r\n\r\n public maxNumber: number = Number.MAX_SAFE_INTEGER;\r\n\r\n public hasChanges: boolean = false;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.isSaving$ = this._store$.select(fromAlarmEditor.getIsSavingAlarms);\r\n\r\n this._store$.select(fromAlarmEditor.getAlarmsToUpdate).pipe(takeUntil(this._destroyed$)).subscribe(alarms => {\r\n this.thresholdAlarms = [];\r\n\r\n this.assetIdList?.forEach(assetId => {\r\n this.thresholdAlarms.push({\r\n AssetId: +assetId,\r\n Alarms: alarms?.filter(alarm => alarm.AssetId === assetId).map(alarm => {\r\n return {\r\n AlarmName: alarm.AlarmName,\r\n Threshold: +alarm.Threshold,\r\n AlarmId: alarm.AlarmId,\r\n }\r\n })\r\n })\r\n })\r\n });\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedAlarms.currentValue?.length > 0) {\r\n this.alarmsList = changes.selectedAlarms.currentValue;\r\n\r\n let alarms = this.form?.value\r\n let filteredAlarms = alarms?.filter(a =>\r\n !this.alarmsList.map(alarms => alarms.AlarmId).includes(a.AlarmId)\r\n );\r\n\r\n this.form = this._fb.array([]);\r\n\r\n this.alarmsList = filteredAlarms ? this.alarmsList.concat(filteredAlarms) : changes.selectedAlarms.currentValue;\r\n this.alarmsList?.forEach(alarm => this.form.push(this.mapOptionsToUntypedFormGroup(alarm)));\r\n\r\n this.dataSource.data = this.form?.controls as UntypedFormGroup[];\r\n this.dataSource.sort = this.sort;\r\n }\r\n }\r\n\r\n public mapOptionsToUntypedFormGroup(alarm: AlarmEditor) {\r\n return this._fb.group({\r\n UnitName: alarm.UnitName,\r\n AlarmName: [alarm.AlarmName, Validators.required],\r\n PreviousAlarmName: alarm.PreviousAlarmName,\r\n AlarmTestName: alarm.AlarmTestName,\r\n Threshold: [+alarm.Threshold, Validators.required],\r\n PreviousThreshold: alarm.PreviousThreshold,\r\n UnitsOfMeasureName: alarm.UnitsOfMeasureName,\r\n AlarmTypeId: alarm.AlarmTypeId,\r\n AssetId: alarm.AssetId,\r\n AlarmId: alarm.AlarmId\r\n });\r\n }\r\n\r\n public handleSave() {\r\n this.alarmsForModal = this.form.value.filter(alarm => alarm.AlarmName?.trim() !== alarm.PreviousAlarmName?.trim() || alarm.Threshold?.toString() !== alarm.PreviousThreshold?.toString());\r\n this.assetIdList = [...new Set(this.alarmsForModal?.map(item => item.AssetId))];\r\n\r\n this._store$.dispatch(fromAlarmEditor.AlarmsToUpdate(this.alarmsForModal));\r\n\r\n this._store$.dispatch(fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--large',\r\n customWidth: '50%',\r\n modalType: ModalType.OkCancel,\r\n contentType: ModalContentType.ThresholdEditor,\r\n\r\n title: 'Apply Changes',\r\n data: '',\r\n\r\n primaryText: 'Confirm',\r\n primaryActionCallback: () => this.save(),\r\n\r\n secondaryText: 'Cancel',\r\n }\r\n }));\r\n\r\n this.form.markAsPristine();\r\n\r\n }\r\n\r\n public save() {\r\n if (this.thresholdAlarms?.length > 0) { \r\n this._store$.dispatch(fromAlarmEditor.SaveThresholdAlarms(this.thresholdAlarms));\r\n this.handleRemoveAll();\r\n }\r\n }\r\n\r\n public removeFromArray(index: number) {\r\n this.form.removeAt(index);\r\n this.dataSource.data = this.form?.controls as UntypedFormGroup[];\r\n };\r\n\r\n public handleRemoveAll() {\r\n this.form = null;\r\n this.alarmsList = [];\r\n };\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}","
\r\n
\r\n \r\n {{siteMapName}}\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n Global Filter:\r\n \r\n
\r\n Add filter\r\n
\r\n
\r\n \r\n \r\n {{ filter.Name }}\r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n\r\n 0; else noData\">\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n No data to display\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
","import { Component, OnInit, OnDestroy, Input, ChangeDetectorRef, EventEmitter, Output } from '@angular/core';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport { select, Store } from '@ngrx/store';\r\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\r\nimport { Asset } from '@rfv/modules/core/models';\r\nimport { FormArray, FormBuilder, UntypedFormGroup, AbstractControl } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\n\r\n@Component({\r\n selector: 'threshold-unit-list',\r\n templateUrl: './threshold-unit-list.component.html',\r\n styleUrls: ['./threshold-unit-list.component.scss']\r\n})\r\nexport class ThresholdUnitListComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public set searchString(searchString: string) {\r\n this._searchString = searchString;\r\n this._searchUnitsFilter$.next(searchString);\r\n }\r\n\r\n @Output() loadDatapointsClicked = new EventEmitter();\r\n\r\n public allSavedFilters$: Observable;\r\n\r\n private _searchUnitsFilter$ = new BehaviorSubject(null);\r\n\r\n public _searchString: string = '';\r\n\r\n public form: UntypedFormGroup;\r\n\r\n public get sitemapTreeArray() {\r\n return this.form.get('sitemapTree') as FormArray;\r\n }\r\n public get sitemapTreeControls() {\r\n return this.sitemapTreeArray.controls as UntypedFormGroup[];\r\n }\r\n\r\n public _destroyed$ = new Subject();\r\n\r\n public assets: Asset[];\r\n\r\n public selectedAssetsId: number[];\r\n\r\n public siteMapName: String;\r\n\r\n public selectedFilterId: number = null;\r\n\r\n public sitemapGroupId: number;\r\n\r\n public isLoading$: Observable;\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder,\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n\r\n combineLatest([\r\n this._store$.select(fromDashboard.getSelectedSitemapGroupId),\r\n this._store$.select(fromGlobalFilter.getSelectedFilterId),\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([sitemapGroupId, globalFilterId]) => {\r\n if (sitemapGroupId) {\r\n this.sitemapGroupId = sitemapGroupId;\r\n this.selectedFilterId = globalFilterId;\r\n this._store$.dispatch(fromCore.Assets.GlobalFilterAssetIds.Load(sitemapGroupId, globalFilterId ? globalFilterId : 0));\r\n }\r\n });\r\n\r\n this.isLoading$ = this._store$.pipe(select(fromCore.Assets.GlobalFilterAssetIds.isLoading));\r\n\r\n this.isLoading$ = combineLatest([\r\n this._store$.pipe(select(fromCore.Assets.GlobalFilterAssetIds.isLoading)),\r\n this._store$.pipe(select(fromCore.Assets.Entities.isLoading)\r\n )],\r\n (isGlobalFilterAssetsLoading, isAssetsLoading) =>\r\n isGlobalFilterAssetsLoading || isAssetsLoading\r\n );\r\n\r\n this.allSavedFilters$ = this._store$.pipe(select(fromGlobalFilter.getUserSavedFilters));\r\n this.allSavedFilters$.pipe(takeUntil(this._destroyed$)).subscribe(filter => {\r\n //remove global filter from unit list if the filter is delete\r\n let findFilter = filter.find(v => v.FilterId == this.selectedFilterId);\r\n if (findFilter == null) {\r\n this.selectedFilterId = null;\r\n this._store$.dispatch(fromCore.Assets.GlobalFilterAssetIds.Load(this.sitemapGroupId, 0));\r\n }\r\n });\r\n\r\n this._searchUnitsFilter$.pipe(\r\n takeUntil(this._destroyed$),\r\n debounceTime(250),\r\n ).subscribe(searchString => {\r\n this.searchUnits(searchString);\r\n this._cdr.detectChanges();\r\n });\r\n\r\n combineLatest([\r\n this._store$.select(fromUser.getAlarmEditorSitemapTree),\r\n this._store$.select(fromCore.Assets.GlobalFilterAssetIds.getGlobalFilterAssets),\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([sitemapTree, assets]) => {\r\n this.assets = assets;\r\n\r\n this.siteMapName = sitemapTree?.value.name;\r\n this.form = this._fb.group({\r\n sitemapTree: this._fb.array([sitemapTree].map(i => this.mapOptionsToFormGroup(i)))\r\n });\r\n\r\n this.searchUnits(this._searchString);\r\n\r\n this.form.valueChanges.pipe(\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(res => {\r\n this.LoadDatapoints();\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n public mapOptionsToFormGroup(options: any) {\r\n let assets = this.assets?.filter(v => v.sitemapGroupId === options?.value?.id)\r\n\r\n return this._fb.group({\r\n visible: [true],\r\n check: [false],\r\n name: options?.value.name,\r\n parent: options?.parent,\r\n children: this._fb.array(options?.children?.map(i => this.mapOptionsToFormGroup(i)) || []),\r\n assets: this._fb.array(assets?.map(i => this.mapAssets(i)) || [])\r\n });\r\n }\r\n\r\n public mapAssets(asset: Asset) {\r\n return this._fb.group({\r\n visible: [true],\r\n check: [false],\r\n id: asset.id,\r\n name: asset.name,\r\n });\r\n }\r\n\r\n public get sitemapTree() {\r\n return this.form?.get('sitemapTree') as FormArray;\r\n }\r\n\r\n public LoadDatapoints() {\r\n this.loadDatapointsClicked.emit();\r\n\r\n let smt = this.sitemapTree.at(0).value;\r\n this.selectedAssetsId = [];\r\n\r\n this.getSelectedAssets(smt)\r\n\r\n this._store$.dispatch(fromAlarmEditor.LoadDatapoints(this.selectedAssetsId.length > 0 ? this.selectedAssetsId : []))\r\n\r\n }\r\n\r\n public getSelectedAssets(siteMapTree) {\r\n\r\n //push assetIds to array\r\n if (siteMapTree?.assets?.length > 0) {\r\n for (let i = 0; i < siteMapTree.assets.length; i++) {\r\n if (siteMapTree.assets[i]?.check === true) {\r\n this.selectedAssetsId.push(siteMapTree.assets[i]?.id);\r\n }\r\n }\r\n }\r\n\r\n //check children for assetIds\r\n if (siteMapTree?.children?.length > 0) {\r\n for (let i = 0; i < siteMapTree.children.length; i++) {\r\n this.getSelectedAssets(siteMapTree.children[i])\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n public searchData(searchString: string) {\r\n this.searchString = searchString;\r\n }\r\n\r\n /**\r\n * Search Units\r\n */\r\n public searchUnits(searchString: string) {\r\n if (!searchString) {\r\n this.turnChildAndAssetsVisible(this.sitemapTree.controls[0] as UntypedFormGroup);\r\n return;\r\n }\r\n //check the root sitemaps children and assets\r\n (this.sitemapTree.controls[0].get('children') as FormArray).controls?.forEach(child => {\r\n this.examineAll(searchString, child as UntypedFormGroup);\r\n });\r\n\r\n (this.sitemapTree.controls[0].get('assets') as FormArray).controls?.forEach(asset => {\r\n this.examineAsset(searchString, asset as UntypedFormGroup);\r\n });\r\n }\r\n\r\n public turnChildAndAssetsVisible(child: UntypedFormGroup) {\r\n (child.get('children') as FormArray).controls.forEach(child => {\r\n child.get('visible').patchValue(true);\r\n this.turnChildAndAssetsVisible(child as UntypedFormGroup)\r\n });\r\n (child.get('assets') as FormArray).controls.forEach(asset => {\r\n asset.get('visible').patchValue(true);\r\n });\r\n }\r\n\r\n\r\n public examineAll(searchString: string, child: UntypedFormGroup) {\r\n const childrenMatch: boolean = (child.get('children') as FormArray).controls?.map(child => this.examineChild(searchString, child as UntypedFormGroup)).includes(true);\r\n const assetsMatch: boolean = (child.get('assets') as FormArray).controls?.map(asset => this.examineAsset(searchString, asset as UntypedFormGroup)).includes(true);\r\n\r\n let found: boolean = childrenMatch || assetsMatch;\r\n\r\n (child.get('children') as FormArray).controls.forEach(childControl => {\r\n if (this.examineAll(searchString, childControl as UntypedFormGroup))\r\n found = true;\r\n });\r\n\r\n if ((child.value.name as string).toLowerCase().includes(searchString.toLowerCase())) {\r\n this.turnChildAndAssetsVisible(child);\r\n found = true;\r\n }\r\n\r\n child.get('visible').patchValue(found);\r\n return found;\r\n }\r\n\r\n public examineChild(searchString: string, child: UntypedFormGroup) {\r\n const childMatch: boolean = (child.value.name as string).toLowerCase().includes(searchString.toLowerCase());\r\n\r\n child.get('visible').patchValue(childMatch);\r\n return childMatch;\r\n }\r\n\r\n public examineAsset(searchString: string, asset: UntypedFormGroup) {\r\n const assetMatch: boolean = (asset.value.name as string).toLowerCase().includes(searchString.toLowerCase());\r\n\r\n asset.get('visible').patchValue(assetMatch);\r\n return assetMatch;\r\n }\r\n\r\n public handleFilterChange(filterId: number) {\r\n\r\n if (this.sitemapGroupId)\r\n this._store$.dispatch(fromCore.Assets.GlobalFilterAssetIds.Load(this.sitemapGroupId, filterId ? filterId : 0));\r\n\r\n }\r\n\r\n public onCreateFilterClick() {\r\n this._store$.dispatch(fromRoot.Layout.OpenGlobalFilter());\r\n }\r\n\r\n\r\n public getTotalAssetCounts(form: AbstractControl): number {\r\n let acc: number = 0;\r\n (form.get('children') as FormArray).controls.forEach(child => {\r\n acc += this.getTotalAssetCounts(child as UntypedFormGroup);\r\n });\r\n return (form.get('assets') as FormArray).controls.filter(asset => !!asset.get('visible').value).length + acc;\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.sitemapGroupId && !this.selectedFilterId)\r\n this._store$.dispatch(fromCore.Assets.GlobalFilterAssetIds.Load(this.sitemapGroupId, 0));\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}","\r\n
\r\n \r\n 0\">\r\n \r\n \r\n {{form.value.name}}\r\n (\r\n {{getSelectedAssetCounts(form)}}\r\n \r\n /{{getTotalAssetCounts(form)}})\r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n 0\">\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{asset.value.name}}\r\n \r\n
\r\n \r\n 0\">\r\n \r\n
\r\n
\r\n \r\n \r\n {{ alarmCount.value.alarmGroupName + ' — ' + (selectedAlertSchedule$ | async)?.Name + ' [' + (selectedAlertSchedule$ | async)?.Code + '/' + (selectedAlertSchedule$ | async)?.DSTCode + ']' }}\r\n
\r\n \r\n {{\r\n alarmCount.value.enabledAlarmCount + alarmCount.value.disabledAlarmCount > 0 ?\r\n alarmCount.value.enabledAlarmCount + ' Alarms Enabled' : 'No Alarms'\r\n }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { AlarmCount } from '@rfv/modules/core/models';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Store } from '@ngrx/store';\r\nimport { Observable } from 'rxjs';\r\nimport { AlertSchedule } from '@rfv/modules/core/models';\r\nimport { ControlContainer, FormArray, UntypedFormGroup, FormControl } from '@angular/forms';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n@Component({\r\n selector: 'unit-list-item',\r\n templateUrl: './unit-list-item.component.html',\r\n styleUrls: ['./unit-list-item.component.scss']\r\n})\r\nexport class UnitListItemComponent implements OnInit {\r\n\r\n public selectedSitemapGroupId$: Observable;\r\n public selectedAlertSchedule$: Observable;\r\n public form: UntypedFormGroup;\r\n\r\n public checkedAlarmCounts: AlarmCount[] = [];\r\n public uncheckedAlarmCounts: AlarmCount[] = [];\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private controlContainer: ControlContainer\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.form = this.controlContainer.control;\r\n\r\n this.selectedAlertSchedule$ = this._store$.select(fromCore.SitemapGroups.AlarmCounts.getAlertSchedule);\r\n this.selectedSitemapGroupId$ = this._store$.select(fromDashboard.getSelectedSitemapGroupId);\r\n }\r\n\r\n public toggleCheckBox(form: UntypedFormGroup, check: boolean) {\r\n this.toggle(form, check);\r\n\r\n this.toggleAssets(form, check);//toggle assets\r\n\r\n this.toggleChildrenTree(form, check);//toggle checkbox of sub tree\r\n\r\n if (form.value.parent)//toggle checkbox of parent tree\r\n this.toggleParentTree(form.parent.parent as UntypedFormGroup, check);\r\n\r\n this.addMultipleAlarmCounts();\r\n }\r\n\r\n public toggleAssets(form: UntypedFormGroup, check: boolean) {\r\n const assetsFormArray = form.get('assets') as FormArray;\r\n\r\n if (assetsFormArray.controls?.length > 0) {\r\n assetsFormArray.controls.forEach((asset, index) => {\r\n const subTreeForm = assetsFormArray.at(index) as UntypedFormGroup;\r\n this.toggle(subTreeForm, check);\r\n this.toggleAllAlarmCounts(subTreeForm, check);\r\n });\r\n }\r\n }\r\n\r\n public toggleChildrenTree(form: UntypedFormGroup, check: boolean) {\r\n const childrenFormArray = form.get('children') as FormArray;\r\n this.toggle(form, check);\r\n this.toggleAssets(form, check);\r\n\r\n if (childrenFormArray.controls?.length > 0) {\r\n childrenFormArray.controls.forEach((child, index) => {\r\n const subTreeForm = childrenFormArray.at(index);\r\n this.toggleChildrenTree(subTreeForm as UntypedFormGroup, check);\r\n });\r\n }\r\n //dispatch here\r\n }\r\n\r\n public toggleParentTree(form: UntypedFormGroup, check: boolean) {\r\n const checkParent: number = form.value.children?.filter(child => child.check === true).length;\r\n const checkParentAsset: number = form.value.assets?.filter(asset => asset.check === true).length;\r\n\r\n if (checkParent >= 1 || checkParentAsset >= 1)\r\n this.toggle(form, true);\r\n else\r\n this.toggle(form, check);\r\n\r\n if (form.value.parent)\r\n this.toggleParentTree(form.parent.parent as UntypedFormGroup, check);\r\n }\r\n\r\n public toggle(form: UntypedFormGroup, checked: boolean) {\r\n const checkFormControl = form.get('check') as FormControl;\r\n\r\n if (form && checkFormControl?.value !== null)\r\n if (checked && !form.get('visible').value)\r\n return;\r\n checkFormControl?.setValue(checked);\r\n }\r\n\r\n public toggleAssetCheckBox(sitemapForm: UntypedFormGroup, assetForm: UntypedFormGroup) {\r\n this.toggleParentTree(sitemapForm, assetForm.get('check').value);\r\n this.toggleAllAlarmCounts(assetForm, assetForm.get('check').value);\r\n this.addMultipleAlarmCounts();\r\n }\r\n\r\n public toggleAlarmCount(sitemapForm: UntypedFormGroup, assetForm: UntypedFormGroup, alarmCount: FormControl) {\r\n const atLeastOneChecked: boolean = assetForm.value.alarmCounts.filter(count => count.check === true).length > 0;\r\n this.addAlarmCount(alarmCount);\r\n this.addMultipleAlarmCounts();\r\n if (atLeastOneChecked && !alarmCount.value.check) return;\r\n\r\n this.toggleParentTree(assetForm, alarmCount.value.check);\r\n this.toggleParentTree(sitemapForm, assetForm.get('check').value);\r\n }\r\n\r\n public toggleAllAlarmCounts(form: UntypedFormGroup, check: boolean) {\r\n const alarmCountsFormArray = (form.get('alarmCounts') as FormArray);\r\n if (alarmCountsFormArray?.controls?.length > 0) {\r\n alarmCountsFormArray.controls.forEach((alarmCount, index) => {\r\n let subTreeForm = alarmCountsFormArray.at(index);\r\n this.toggle(subTreeForm as UntypedFormGroup, form.value.check);\r\n this.addAlarmCount(alarmCount as FormControl);\r\n });\r\n }\r\n }\r\n\r\n public addAlarmCount(alarmCountFormControl: FormControl) {\r\n const alarmCount: AlarmCount = {\r\n Id: alarmCountFormControl.value.id,\r\n Name: alarmCountFormControl.value.name,\r\n AlarmGroupId: alarmCountFormControl.value.alarmGroupId,\r\n AlarmGroupName: alarmCountFormControl.value.alarmGroupName,\r\n AlarmGroupAlertScheduleId: alarmCountFormControl.value.alarmGroupAlertScheduleId,\r\n EnabledAlarmCount: alarmCountFormControl.value.enabledAlarmCount,\r\n DisabledAlarmCount: alarmCountFormControl.value.disabledAlarmCount,\r\n }\r\n\r\n if (!alarmCountFormControl.value.check) {\r\n this.uncheckedAlarmCounts = Object.assign([], this.uncheckedAlarmCounts);\r\n this.uncheckedAlarmCounts.push(alarmCount);\r\n }\r\n else {\r\n this.checkedAlarmCounts = Object.assign([], this.checkedAlarmCounts);\r\n this.checkedAlarmCounts.push(alarmCount);\r\n }\r\n }\r\n\r\n public addMultipleAlarmCounts() {\r\n this.checkedAlarmCounts = this.checkedAlarmCounts.filter((elem, index, self) => {\r\n return index === self.findIndex(alarmCount => alarmCount.Id === elem.Id && alarmCount.AlarmGroupId === elem.AlarmGroupId);\r\n });\r\n\r\n this.uncheckedAlarmCounts = this.uncheckedAlarmCounts.filter((elem, index, self) => {\r\n return index === self.findIndex(alarmCount => alarmCount.Id === elem.Id && alarmCount.AlarmGroupId === elem.AlarmGroupId);\r\n });\r\n\r\n this._store$.dispatch(fromCore.SitemapGroups.AlarmCounts.AddMultipleAlarmCounts({ alarmCounts: this.checkedAlarmCounts }));\r\n this._store$.dispatch(fromCore.SitemapGroups.AlarmCounts.DeleteMultipleAlarmCounts({ alarmCounts: this.uncheckedAlarmCounts }));\r\n\r\n this.checkedAlarmCounts = [];\r\n this.uncheckedAlarmCounts = [];\r\n }\r\n\r\n public getSelectedAssetCounts(form: UntypedFormGroup): number {\r\n let acc: number = 0;\r\n (form.get('children') as FormArray).controls.forEach(child => {\r\n acc += this.getSelectedAssetCounts(child as UntypedFormGroup);\r\n });\r\n return (form.get('assets') as FormArray).controls.filter(asset => !!asset.get('check').value && !!asset.get('visible').value).length + acc;\r\n }\r\n\r\n public getTotalAssetCounts(form: UntypedFormGroup): number {\r\n let acc: number = 0;\r\n (form.get('children') as FormArray).controls.forEach(child => {\r\n acc += this.getTotalAssetCounts(child as UntypedFormGroup);\r\n });\r\n return (form.get('assets') as FormArray).controls.filter(asset => !!asset.get('visible').value).length + acc;\r\n }\r\n\r\n public get sitemapTreeChildrenArray() {\r\n return (this.form?.get('children') || []) as FormArray\r\n };\r\n\r\n public sitemapTreeChildren(index: number) {\r\n return this.sitemapTreeChildrenArray.at(index) as UntypedFormGroup;\r\n }\r\n\r\n public getVisibleAssets(assetControls: UntypedFormGroup[]) {\r\n return assetControls.filter(asset => !!asset.get('visible').value);\r\n }\r\n\r\n public get childrenControls() {\r\n return this.sitemapTreeChildrenArray.controls as UntypedFormGroup[];\r\n }\r\n\r\n public get assetControls() {\r\n return (this.form.get('assets') as FormArray).controls as UntypedFormGroup[];\r\n }\r\n\r\n public assetAlarmCountControls(group: UntypedFormGroup) {\r\n return (group.get('alarmCounts') as FormArray).controls as FormControl[];\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\n\r\nimport { AlarmEditorDatapoints } from \"../models/alarm-editor-datapoints.model\";\r\nimport { AlarmEditor } from \"../models/alarm-editor.model\";\r\nimport { ThresholdEditorAlarms } from \"../models/threshold-alarms.model\";\r\n\r\n@Injectable()\r\nexport class AlarmEditorService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAlarmEditorDatapoints(assetIds: number[]) {\r\n return this._http.post(`/v2/datapoints/assets-identifiers`, assetIds);\r\n }\r\n\r\n public GetAlarmsBySitemapAndDataPointIdentifier(sitemapGroupId: number, datapointIdentifierId: number) {\r\n return this._http.get(`/v2/alarmsBySitemapAndDataPoint/${sitemapGroupId}`, {\r\n params: { datapointIdentifierId: datapointIdentifierId.toString() }\r\n });\r\n }\r\n\r\n public updateThresholdAlarms(alarms: ThresholdEditorAlarms[]) {\r\n return this._http.put(`/v2/thresholdEditorAlarms`, alarms);\r\n }\r\n\r\n}","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { AlarmEditorDatapoints } from '../models/alarm-editor-datapoints.model';\r\nimport { AlarmEditor } from '../models/alarm-editor.model';\r\nimport { ThresholdEditorAlarms } from '../models/threshold-alarms.model';\r\n\r\nexport const LoadDatapoints = createAction('[Threshold Editor] Load Threshold Editor Datapoints',\r\n (assetIds: number[]) => ({ assetIds }));\r\n\r\nexport const LoadDatapointsFail = createAction('[Threshold Editor] Load Threshold Editor Datapoints Fail',\r\n (error: ApiError) => error);\r\n\r\nexport const LoadDatapointsSuccess = createAction('[Threshold Editor] Load Threshold Editor Datapoints Success',\r\n (datapoints: AlarmEditorDatapoints[]) => ({ datapoints }));\r\n\r\nexport const LoadAlarmsBySitemapAndDatapoint = createAction('[Threshold Editor] Load Alarms',\r\n (sitemapGroupId: number, datapointIdentifierId) => ({ sitemapGroupId, datapointIdentifierId }));\r\n\r\nexport const LoadAlarmsBySitemapAndDatapointFail = createAction('[Threshold Editor] Load Alarms Fail',\r\n (error: ApiError) => error);\r\n\r\nexport const LoadAlarmsBySitemapAndDatapointSuccess = createAction('[Threshold Editor] Load Alarms Success',\r\n (alarms: AlarmEditor[]) => ({ alarms }));\r\n\r\nexport const ClearThresholdEditor = createAction('[Threshold Editor] Clear Threshold Editor');\r\n\r\nexport const SaveThresholdAlarms = createAction('[Threshold Editor] Save Threshold Alarms ',\r\n (alarms: ThresholdEditorAlarms[]) => ({ alarms }));\r\n\r\nexport const SaveThresholdAlarmsFail = createAction('[Threshold Editor] Save Threshold Alarms Fail',\r\n (error: ApiError) => error);\r\n\r\nexport const SaveThresholdAlarmsSuccess = createAction('[Threshold Editor] Save Threshold Alarms Success');\r\n\r\nexport const AlarmsToUpdate = createAction('[Threshold Editor] Alarms To Update',\r\n (alarms: AlarmEditor[]) => ({ alarms }));","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of, EMPTY, from } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { AlarmEditorService } from '@rfv/modules/dashboard/modules/alarm-editor/services/alarm-editor.service';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport * as AlarmEditorActions from './actions';\r\nimport { Store } from '@ngrx/store';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _AlarmEditorService: AlarmEditorService,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public LoadAlarmEditorDatapoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmEditorActions.LoadDatapoints),\r\n switchMap(action => this._AlarmEditorService.getAlarmEditorDatapoints(action.assetIds).pipe(\r\n map(alarmEditorDatapoints => AlarmEditorActions.LoadDatapointsSuccess(alarmEditorDatapoints)),\r\n catchError(error => from([\r\n AlarmEditorActions.LoadDatapointsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while loading Datapoints',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public LoadAlarms$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmEditorActions.LoadAlarmsBySitemapAndDatapoint),\r\n switchMap(action => this._AlarmEditorService.GetAlarmsBySitemapAndDataPointIdentifier(action.sitemapGroupId, action.datapointIdentifierId).pipe(\r\n mergeMap(alarms => [\r\n AlarmEditorActions.LoadAlarmsBySitemapAndDatapointSuccess(alarms),\r\n ]),\r\n catchError(error => from([\r\n AlarmEditorActions.LoadAlarmsBySitemapAndDatapointFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while loading Alarms',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public SaveAlarms$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmEditorActions.SaveThresholdAlarms),\r\n switchMap(action => this._AlarmEditorService.updateThresholdAlarms(action.alarms).pipe(\r\n mergeMap(() => [\r\n AlarmEditorActions.SaveThresholdAlarmsSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Alarm Updates Sent.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n AlarmEditorActions.SaveThresholdAlarmsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while sending Alarm Updates',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public SaveAlarmsSuccess$ = createEffect(() => this._actions$.pipe(\r\n ofType(AlarmEditorActions.SaveThresholdAlarmsSuccess),\r\n withLatestFrom(\r\n this._store$.select(fromAlarmEditor.getSelectedDatapointId),\r\n this._store$.select(fromDashboard.getSelectedSitemapGroupId),\r\n ),\r\n switchMap(([_, datapointId, sitemapgroupId]) => {\r\n\r\n if (datapointId && sitemapgroupId)\r\n return of(AlarmEditorActions.LoadAlarmsBySitemapAndDatapoint(sitemapgroupId, datapointId));\r\n\r\n return EMPTY;\r\n })\r\n ));\r\n}\r\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from '../store/state';\r\n\r\nexport const getState = createFeatureSelector('alarm-editor');\r\n\r\nexport const getAlarmEditorDatapoints = createSelector(\r\n getState,\r\n state => state.alarmEditorDatapoints\r\n);\r\n\r\nexport const getAlarms = createSelector(\r\n getState,\r\n state => state.alarms\r\n);\r\n\r\nexport const isAlarmsLoaded = createSelector(\r\n getState,\r\n state => state.isAlarmsLoaded\r\n);\r\n\r\nexport const isAlarmsLoading = createSelector(\r\n getState,\r\n state => state.isAlarmsLoading\r\n);\r\n\r\nexport const isLoadedDatapoints = createSelector(\r\n getState,\r\n state => state.isLoaded\r\n);\r\n\r\nexport const isLoadingDatapoints = createSelector(\r\n getState,\r\n state => state.isLoading\r\n);\r\n\r\nexport const getSelectedDatapointId = createSelector(\r\n getState,\r\n state => state.selectedDatapointId\r\n)\r\n\r\nexport const getIsSavingAlarms = createSelector(\r\n getState,\r\n state => state.isSavingAlarms\r\n)\r\n\r\nexport const getAlarmsToUpdate = createSelector(\r\n getState,\r\n state => state.alarmsToUpdate\r\n)\r\n\r\nexport const getSelectedAssets = createSelector(\r\n getState,\r\n state => state.selectedAssetIds\r\n)\r\n\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AlarmEditorActions from './actions';\r\n\r\n\r\nconst eulaReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmEditorActions.LoadDatapoints, (state, payload) => ({\r\n ...state,\r\n isLoading: true,\r\n selectedAssetIds: payload.assetIds\r\n })),\r\n\r\n on(AlarmEditorActions.LoadDatapointsFail, (state, error) => ({\r\n ...state,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmEditorActions.LoadDatapointsSuccess, (state, payload) => ({\r\n ...state,\r\n alarmEditorDatapoints: payload.datapoints,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmEditorActions.LoadAlarmsBySitemapAndDatapoint, (state, payload) => ({\r\n ...state,\r\n isAlarmsLoading: true,\r\n selectedDatapointId: payload.datapointIdentifierId,\r\n })),\r\n\r\n on(AlarmEditorActions.LoadAlarmsBySitemapAndDatapointFail, (state, error) => ({\r\n ...state,\r\n isAlarmsLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmEditorActions.LoadAlarmsBySitemapAndDatapointSuccess, (state, payload) => ({\r\n ...state,\r\n alarms: payload.alarms,\r\n isAlarmsLoading: false,\r\n isAlarmsLoaded: true,\r\n error: null\r\n })),\r\n\r\n on(AlarmEditorActions.ClearThresholdEditor, (state, payload) => ({\r\n ...state,\r\n alarms: null,\r\n alarmEditorDatapoints: null,\r\n isLoaded: false,\r\n isAlarmsLoaded: false,\r\n alarmsToUpdate: null,\r\n error: null\r\n })),\r\n\r\n on(AlarmEditorActions.SaveThresholdAlarms, (state) => ({\r\n ...state,\r\n isSavingAlarms: true,\r\n })),\r\n\r\n on(AlarmEditorActions.SaveThresholdAlarmsFail, (state, error) => ({\r\n ...state,\r\n isSavingAlarms: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmEditorActions.SaveThresholdAlarmsSuccess, (state, payload) => ({\r\n ...state,\r\n isSavingAlarms: false,\r\n alarmsToUpdate: null,\r\n error: null\r\n })),\r\n\r\n on(AlarmEditorActions.AlarmsToUpdate, (state, payload) => ({\r\n ...state,\r\n alarmsToUpdate: payload.alarms\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eulaReducer(state, action);\r\n}","import { ApiError } from '@rfv/modules/core/models';\r\nimport { AlarmEditorDatapoints } from '../models/alarm-editor-datapoints.model';\r\nimport { AlarmEditor } from '../models/alarm-editor.model';\r\n\r\nexport interface State {\r\n alarmEditorDatapoints: AlarmEditorDatapoints[];\r\n alarms: AlarmEditor[],\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isSavingAlarms: boolean;\r\n isAlarmsLoading: boolean;\r\n isAlarmsLoaded: boolean;\r\n selectedDatapointId: number;\r\n alarmsToUpdate: AlarmEditor[];\r\n selectedAssetIds: number[];\r\n\r\n error: ApiError | null;\r\n \r\n}\r\n\r\nexport const initialState: State = {\r\n alarmEditorDatapoints: null,\r\n alarms: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n isSavingAlarms: false,\r\n isAlarmsLoading: false,\r\n isAlarmsLoaded: false,\r\n selectedDatapointId: null,\r\n alarmsToUpdate: null,\r\n selectedAssetIds: null,\r\n\r\n error: null,\r\n}","import { PresentAlarm } from './../models/present-alarm.model';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { UnitPresentAlarms } from './../models/present-alarms-data.model';\r\n\r\n\r\nexport const Load = createAction('[PresentAlarms] Load Present Alarms Data Request');\r\n\r\nexport const SetLoading = createAction(\r\n '[PresentAlarms] Present Alarms Data Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFailure = createAction(\r\n '[PresentAlarms] Load Present Alarms Data Failure',\r\n (error: any) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[PresentAlarms] Load Present Alarms Data Success',\r\n (alarmList: UnitPresentAlarms[]) => ({ alarmList })\r\n);\r\n\r\nexport const SetPresentAlarm = createAction(\r\n '[PresentAlarms] Select Present Alarm',\r\n (selectedPresentAlarm: PresentAlarm) => ({ selectedPresentAlarm })\r\n);\r\n\r\nexport const ClearPresentAlarm = createAction('[PresentAlarms] Clear Present Alarm');\r\n","import { PresentAlarm } from './../models/present-alarm.model';\r\nimport { UnitPresentAlarms } from './../models/present-alarms-data.model';\r\nimport { AlarmsState } from './index';\r\nimport { EntityAdapter, createEntityAdapter, EntityState } from '@ngrx/entity';\r\n\r\nimport * as PresentAlarmsDataActions from '../actions/present-alarms-data.actions';\r\nimport { createReducer, on } from '@ngrx/store';\r\n\r\nexport const presentAlarmsAdapter: EntityAdapter<\r\n UnitPresentAlarms\r\n> = createEntityAdapter({\r\n selectId: alarm => alarm.Id\r\n});\r\n\r\nexport interface State extends EntityState {\r\n isLoading?: boolean;\r\n loaded?: boolean;\r\n error?: any;\r\n selectedPresentAlarm: PresentAlarm;\r\n}\r\n\r\nexport const initialState: State = presentAlarmsAdapter.getInitialState(\r\n {\r\n isLoading: false,\r\n loaded: false,\r\n error: null,\r\n selectedPresentAlarm: null\r\n }\r\n);\r\n\r\nexport const alarmsDataReducer = createReducer(\r\n initialState,\r\n on(PresentAlarmsDataActions.Load, state => ({ \r\n ...state,\r\n isLoading: true\r\n })),\r\n on(PresentAlarmsDataActions.SetLoading, state => (initialState)),\r\n on(PresentAlarmsDataActions.LoadSuccess, (state, { alarmList }) => {\r\n return presentAlarmsAdapter.setAll(alarmList, {\r\n ...state,\r\n isLoading: false,\r\n loaded: true,\r\n error: null\r\n });\r\n }),\r\n on(PresentAlarmsDataActions.LoadFailure, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n loaded: false,\r\n error: error\r\n })),\r\n on(PresentAlarmsDataActions.SetPresentAlarm, (state, { selectedPresentAlarm }) => ({\r\n ...state,\r\n selectedPresentAlarm: selectedPresentAlarm\r\n })),\r\n on(PresentAlarmsDataActions.ClearPresentAlarm, state => ({\r\n ...state,\r\n selectedPresentAlarm: null\r\n }))\r\n);\r\n\r\nexport const getError = (state: AlarmsState): any => state && state.presentAlarmsData && state.presentAlarmsData.error;\r\n\r\nexport const getIsLoading = (state: AlarmsState): boolean => state && state.presentAlarmsData && state.presentAlarmsData.isLoading;\r\n\r\nexport const getIsLoaded = (state: AlarmsState): boolean => state && state.presentAlarmsData && state.presentAlarmsData.loaded;\r\n\r\nexport const getSelectedPresentAlarm = (state: AlarmsState): PresentAlarm => state?.presentAlarmsData?.selectedPresentAlarm;\r\n","import {\r\n createFeatureSelector,\r\n MemoizedSelector,\r\n createSelector,\r\n ActionReducerMap\r\n} from '@ngrx/store';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport * as fromPresentAlarms from './present-alarms.reducer';\r\nimport { getError, getIsLoaded, getSelectedPresentAlarm } from './present-alarms.reducer';\r\nimport { AlarmStates } from '@rfv/modules/core/enums';\r\nimport { PresentAlarm } from '../models/present-alarm.model';\r\nimport { AlarmsTileData } from '@rfv/modules/tiles/models/alarms-tile-data.model';\r\n\r\nexport interface State extends fromRoot.State {\r\n alarms: fromPresentAlarms.State;\r\n}\r\nexport interface AlarmsState {\r\n presentAlarmsData: fromPresentAlarms.State;\r\n}\r\n\r\nexport const reducers: ActionReducerMap = {\r\n presentAlarmsData: fromPresentAlarms.alarmsDataReducer\r\n};\r\n\r\nexport const getPresentAlarmsState: MemoizedSelector<\r\n object,\r\n AlarmsState\r\n> = createFeatureSelector('presentAlarms');\r\n\r\nexport const getPresentAlarmsData = createSelector(\r\n getPresentAlarmsState,\r\n state => state.presentAlarmsData\r\n);\r\n\r\nexport const {\r\n selectAll: selectAllPresentAlarms,\r\n selectEntities: selectPresentAlarmsEntities,\r\n selectIds: selectPresentAlarmsIds,\r\n selectTotal: selectTotalPresentAlarms\r\n} = fromPresentAlarms.presentAlarmsAdapter.getSelectors(getPresentAlarmsData);\r\n\r\nexport const selectPresentAlarmsError: MemoizedSelector = createSelector(\r\n getPresentAlarmsState,\r\n getError\r\n);\r\n\r\nexport const selectPresentAlarmsLoaded: MemoizedSelector = createSelector(\r\n getPresentAlarmsState,\r\n getIsLoaded\r\n);\r\n\r\nexport const selectPresentAlarm: MemoizedSelector = createSelector(\r\n getPresentAlarmsState,\r\n getSelectedPresentAlarm\r\n);\r\n\r\nexport const selectPresentAlarmsIsLoading: MemoizedSelector = createSelector(\r\n getPresentAlarmsState,\r\n (presentAlarmsState) => presentAlarmsState && presentAlarmsState.presentAlarmsData.isLoading);\r\n\r\n\r\nexport const getAllAlarms = createSelector(\r\n selectAllPresentAlarms,\r\n (data) => {\r\n const result: PresentAlarm[] = [];\r\n data.forEach(asset => {\r\n asset.Alarms.forEach(alarm => {\r\n if (alarm.AlarmStateId === AlarmStates.Present) {\r\n result.push(alarm);\r\n }\r\n });\r\n });\r\n return result;\r\n }\r\n);\r\n\r\nexport const getAlarmGroups = createSelector(\r\n getAllAlarms,\r\n (data) => {\r\n const alarmGroups: AlarmsTileData[] = [];\r\n data.forEach(alarm => {\r\n const alarmGroup = alarmGroups.find(group => group.AlarmGroupColor === alarm.GroupColor && group.AlarmGroup === alarm.GroupName);\r\n if (alarmGroup) {\r\n alarmGroup.AlarmCount++;\r\n } else {\r\n const newGroup: AlarmsTileData = {\r\n AlarmGroupId: alarm.GroupId,\r\n AlarmColor: alarm.AlarmStateColor,\r\n AlarmCount: 1,\r\n AlarmGroup: alarm.GroupName,\r\n AlarmGroupColor: alarm.GroupColor,\r\n AlarmState: '',\r\n AlarmStateId: alarm.AlarmStateId\r\n };\r\n alarmGroups.push(newGroup);\r\n }\r\n });\r\n return alarmGroups;\r\n }\r\n);\r\n\r\nexport const getChartData = createSelector(\r\n fromCore.UserSession.getSessionThemeId,\r\n getAlarmGroups,\r\n (themeId, alarmGroups) => {\r\n const backgroundColor = themeId === 1 ? \"#2A2A2A\" : \"#D5D5D5\";\r\n const textColor = themeId === 1 ? \"#D5D5D5\" : \"#2A2A2A\";\r\n const tickColor = themeId === 1 ? \"#212121\" : \"828282\";\r\n\r\n let categories = [];\r\n\r\n const series = {\r\n type: 'column',\r\n name: 'count',\r\n data: [ ]\r\n };\r\n\r\n for (const alarmGroup of alarmGroups) {\r\n const chartItem = {\r\n name: alarmGroup.AlarmGroup,\r\n y: alarmGroup.AlarmCount,\r\n color: `#${alarmGroup.AlarmGroupColor}`,\r\n };\r\n series.data = [ ...series.data, chartItem ];\r\n categories = [...categories, alarmGroup.AlarmGroup];\r\n }\r\n\r\n return {\r\n chart: {\r\n type: \"column\",\r\n backgroundColor: \"transparent\",\r\n reflow: true,\r\n plotBorderWidth: 0,\r\n plotShadow: false,\r\n },\r\n title: {\r\n text: \"\"\r\n },\r\n subtitle: {\r\n text: \"\"\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n xAxis: {\r\n type: \"category\",\r\n categories,\r\n labels: {\r\n style: {\r\n fontSize: \"12px\",\r\n color: textColor\r\n }\r\n },\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n },\r\n yAxis: {\r\n title: {\r\n text: \"\"\r\n },\r\n labels: {\r\n style: {\r\n fontSize: \"12px\",\r\n fontFamily: \"Roboto\",\r\n color: textColor\r\n }\r\n },\r\n lineWidth: 1 / Number.MAX_SAFE_INTEGER,\r\n lineColor: backgroundColor,\r\n tickColor: tickColor\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n categories,\r\n series: [ series ],\r\n tooltip: {\r\n shared: true,\r\n useHTML: true,\r\n borderWidth: 0,\r\n borderRadius: 0,\r\n headerFormat: '

{point.key}

',\r\n backgroundColor: backgroundColor,\r\n shadow: true,\r\n style: {\r\n color: textColor,\r\n fontSize: \"12px\"\r\n }\r\n },\r\n plotOptions: {\r\n bar: {\r\n animation: {\r\n duration: 1000\r\n },\r\n dataLabels: {\r\n enabled: false\r\n },\r\n grouping: false\r\n },\r\n series: {\r\n stacking: \"normal\",\r\n borderColor: \"undefined\",\r\n animation: true,\r\n dataLabels: {\r\n enabled: false\r\n }\r\n }\r\n },\r\n credits: {\r\n enabled: false\r\n }\r\n };\r\n }\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DatapointLegend } from '@rfv/modules/core/models/datapoint/datapoint-legend.model';\r\n\r\nexport const Clear = createAction('[RuntimeSettings] Clear Datapoint Legends');\r\n\r\nexport const Load = createAction('[RuntimeSettings] Load Datapoint Legends', \r\n(datapointId: number) => ({ payload: { datapointId }}));\r\n\r\nexport const LoadMany = createAction('[RuntimeSettings] Load Many Datapoint Legends', \r\n (datapointIds: number[]) => ({ payload: { datapointIds }}));\r\n\r\nexport const LoadFail = createAction('[RuntimeSettings] Load Datapoint Legends Fail',\r\n props<{ error: ApiError }>());\r\n\r\nexport const LoadSuccess = createAction('[RuntimeSettings] Load Datapoint Legends Success',\r\n props<{legends: DatapointLegend[]}>());\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DatapointLegend } from '@rfv/modules/core/models/datapoint/datapoint-legend.model';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: legend => legend.Value\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DatapointLegendsActions from './actions';\r\n\r\nconst datapointLegendsReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointLegendsActions.Clear, () => ({\r\n ...initialState\r\n })),\r\n\r\n\r\n on(DatapointLegendsActions.Load, (state) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: true,\r\n })),\r\n\r\n on(DatapointLegendsActions.LoadMany, (state) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: true,\r\n })),\r\n\r\n on(DatapointLegendsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(DatapointLegendsActions.LoadSuccess, (state, { legends }) => adapter.setAll(legends, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointLegendsReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getDatapointLegendsState = createSelector(getParentState, state => state.datapointLegends);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getDatapointLegend,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getDatapointLegendsState);\r\n\r\nexport const isLoaded = createSelector(getDatapointLegendsState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getDatapointLegendsState, state => state.isLoading);\r\nexport const getError = createSelector(getDatapointLegendsState, state => state.error);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetDatapoint } from '@rfv/modules/core/models';\r\nimport { DatapointLegend } from '@rfv/modules/core/models/datapoint/datapoint-legend.model';\r\n\r\nexport const Load = createAction('[RuntimeSettings] Load Datapoints', (assetId: number) => ({ payload: { assetId }}));\r\nexport const LoadFail = createAction('[RuntimeSettings] Load Datapoints Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[RuntimeSettings] Load Datapoints Success', props<{datapoints: AssetDatapoint[]}>());\r\n\r\nexport const Clear = createAction('[RuntimeSettings] Clear Datapoints');\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError, AssetDatapoint } from '@rfv/modules/core/models';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: datapoint => datapoint.id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { merge } from 'lodash';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as DatapointActions from './actions';\r\n\r\nconst datapointReducer = createReducer(\r\n initialState,\r\n\r\n on(DatapointActions.Load, (state, { payload }) => merge({}, state, {\r\n index: {\r\n [payload.assetId]: {\r\n isLoading: true\r\n }\r\n },\r\n isLoaded: false,\r\n isLoading: true\r\n })),\r\n\r\n on(DatapointActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(DatapointActions.Clear, state => adapter.removeAll({\r\n ...state,\r\n datapoints: null\r\n })),\r\n\r\n on(DatapointActions.LoadSuccess, (state, { datapoints }) => adapter.setAll(datapoints, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return datapointReducer(state, action);\r\n}\r\n","import { createSelector, select } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getDatapointState = createSelector(getParentState, state => state.datapoints);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getDatapoints,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getDatapointState);\r\n\r\nexport const isLoaded = createSelector(getDatapointState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getDatapointState, state => state.isLoading);\r\nexport const getError = createSelector(getDatapointState, state => state.error);\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Action types */\r\nexport const Open = createAction('[RuntimeSettings Event Calculation Drawer] Open', () => ({payload: { isOpen: true }}));\r\nexport const Close = createAction('[RuntimeSettings Event Calculation Drawer] Close', () => ({payload: { isOpen: false }}));\r\n","import { State, initialState } from './state';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as DrawerAction from './actions';\r\nimport { merge } from 'lodash';\r\n\r\nconst eventCalculationDrawerReducer = createReducer(\r\n initialState,\r\n\r\n on(DrawerAction.Open, (state) => merge({}, state, {\r\n isOpen: true\r\n })\r\n ),\r\n\r\n on(DrawerAction.Close, (state) => merge({}, state, {\r\n isOpen: false\r\n })\r\n ),\r\n);\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eventCalculationDrawerReducer(state, action);\r\n}\r\n","export interface State {\r\n isOpen: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n isOpen: false\r\n};\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nexport const getDrawerState = createSelector(getParentState, state => state.eventCalculationDrawer);\r\n\r\nexport const getEventCalculationDrawerIsOpen = createSelector(\r\n getDrawerState,\r\n state => state.isOpen\r\n);\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventCalculationModel } from '../../models/event-calculation-edit.model';\r\nimport { EventCalculation } from '../../models/event-calculation.model';\r\n\r\nexport const Load = createAction('[RuntimeSettings] Load Event Calculation');\r\nexport const LoadFail = createAction('[RuntimeSettings] Load Event Calculation Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[RuntimeSettings] Load Event Calculation Success',\r\n props<{eventCalculation: EventCalculation[]}>());\r\n\r\nexport const UpdateEventCalculation = createAction('[Runtime Settings] Update Event Calculation',\r\n(model: EventCalculationModel) => ({payload: { model }}));\r\nexport const UpdateEventCalculationFail = createAction('[Runtime Settings] Update Event Calculation Fail',\r\n(model: EventCalculationModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const UpdateEventCalculationSuccess = createAction('[Runtime Settings] Update Event Calculation Success',\r\n(model: EventCalculationModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const CreateEventCalculation = createAction('[Runtime Settings] Create Event Calculation',\r\n(model: EventCalculationModel) => ({payload: { model }}));\r\nexport const CreateEventCalculationFail = createAction('[Runtime Settings] Create Event Calculation Fail',\r\n(model: EventCalculationModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const CreatEventCalculationSuccess = createAction('[Runtime Settings] Create Event Calculation Success',\r\n(model: EventCalculationModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const DeleteEventCalculation = createAction('[RuntimeSettings] Delete Event Calculation',\r\n(calculationId: number) => ({ payload: { calculationId }}));\r\nexport const DeleteEventCalculationFail = createAction('[RuntimeSettings] Delete Event Calculation Fail',\r\n(calculationId: number, error: ApiError) => ({ payload: { calculationId, error }}));\r\nexport const DeleteEventCalculationSuccess = createAction('[RuntimeSettings] Delete Event Calculation Success',\r\n(calculationId: number, success: boolean) => ({ payload: { calculationId, success }}));\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as EventCalculationActions from './actions';\r\n\r\nconst runtimeSettingsEventCalculationReducer = createReducer(\r\n initialState,\r\n\r\n on(EventCalculationActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(EventCalculationActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(EventCalculationActions.LoadSuccess, (state, { eventCalculation }) => adapter.setAll(eventCalculation, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return runtimeSettingsEventCalculationReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nimport * as Highcharts from 'highcharts';\r\n\r\nexport const getRuntimeSettingsEventCalculationState = createSelector(getParentState, state => state.eventCalculations);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getEventCalculations,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getRuntimeSettingsEventCalculationState);\r\n\r\nexport const isLoaded = createSelector(getRuntimeSettingsEventCalculationState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getRuntimeSettingsEventCalculationState, state => state.isLoading);\r\nexport const getError = createSelector(getRuntimeSettingsEventCalculationState, state => state.error);\r\n\r\nexport const getSampleCalcs = createSelector(\r\n getAll,\r\n calcs => calcs.filter(calc => !calc.IsDisable && calc.IsPercentCalculation)\r\n);\r\n\r\nexport const getSampleEventPieChart = createSelector(\r\n getSampleCalcs,\r\n (calcs): Highcharts.Options => calcs.length > 0 ? {\r\n title: {\r\n text: '0.00%'\r\n },\r\n subtitle: {\r\n text: 'Sample'\r\n },\r\n series: [\r\n {\r\n type: 'pie',\r\n data: calcs.map(calc => ({\r\n name: calc.Name,\r\n y: 1,\r\n color: '#' + calc.Color\r\n }))\r\n }\r\n ]\r\n } : null\r\n);","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventCalculation } from '../../models/event-calculation.model';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: tests => tests.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventCodeModel } from '../../models/event-code-edit.model';\r\n\r\nexport const UpdateEventCode = createAction('[Runtime Settings] Update Event Code',\r\n(model: EventCodeModel) => ({payload: { model }}));\r\nexport const UpdateEventCodeFail = createAction('[Runtime Settings] Update Event Code Fail',\r\n(model: EventCodeModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const UpdateEventCodeSuccess = createAction('[Runtime Settings] Update Event Code Success',\r\n(model: EventCodeModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const CreateEventCode = createAction('[Runtime Settings] Create Event Code',\r\n(model: EventCodeModel) => ({payload: { model }}));\r\nexport const CreateEventCodeFail = createAction('[Runtime Settings] Create Event Code Fail',\r\n(model: EventCodeModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const CreatEventCodeSuccess = createAction('[Runtime Settings] Create Event Code Success',\r\n(model: EventCodeModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const DeleteEventCode = createAction('[RuntimeSettings] Delete Event Code',\r\n(assetId: number) => ({ payload: { assetId }}));\r\nexport const DeleteEventCodeFail = createAction('[RuntimeSettings] Delete Event Code Fail',\r\n(assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const DeleteEventCodeSuccess = createAction('[RuntimeSettings] Delete Event Code Success',\r\n(assetId: number, success: boolean) => ({ payload: { assetId, success }}));\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Action types */\r\nexport const Open = createAction('[RuntimeSettings Event Party Drawer] Open', () => ({payload: { isOpen: true }}));\r\nexport const Close = createAction('[RuntimeSettings Event Party Drawer] Close', () => ({payload: { isOpen: false }}));\r\n","export interface State {\r\n isOpen: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n isOpen: false\r\n};\r\n","import { State, initialState } from './state';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as DrawerAction from './actions';\r\nimport { merge } from 'lodash';\r\n\r\nconst eventPartyDrawerReducer = createReducer(\r\n initialState,\r\n\r\n on(DrawerAction.Open, (state) => merge({}, state, {\r\n isOpen: true\r\n })\r\n ),\r\n\r\n on(DrawerAction.Close, (state) => merge({}, state, {\r\n isOpen: false\r\n })\r\n ),\r\n);\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eventPartyDrawerReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nexport const getDrawerState = createSelector(getParentState, state => state.eventPartyDrawer);\r\n\r\nexport const getEventPartyDrawerIsOpen = createSelector(\r\n getDrawerState,\r\n state => state.isOpen\r\n);\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { EventPartyModel } from '../../models/event-party-edit.model';\r\n\r\nexport const UpdateEventParty = createAction('[Runtime Settings] Update Event Party',\r\n(model: EventPartyModel) => ({payload: { model }}));\r\nexport const UpdateEventPartyFail = createAction('[Runtime Settings] Update Event Party Fail',\r\n(model: EventPartyModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const UpdateEventPartySuccess = createAction('[Runtime Settings] Update Event Party Success',\r\n(model: EventPartyModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const CreateEventParty = createAction('[Runtime Settings] Create Event Party',\r\n(model: EventPartyModel) => ({payload: { model }}));\r\nexport const CreateEventPartyFail = createAction('[Runtime Settings] Create Event Party Fail',\r\n(model: EventPartyModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const CreatEventPartySuccess = createAction('[Runtime Settings] Create Event Party Success',\r\n(model: EventPartyModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const DeleteEventParty = createAction('[RuntimeSettings] Delete Event Party',\r\n(partyId: number) => ({ payload: { partyId }}));\r\nexport const DeleteEventPartyFail = createAction('[RuntimeSettings] Delete Event Party Fail',\r\n(partyId: number, error: ApiError) => ({ payload: { partyId, error }}));\r\nexport const DeleteEventPartySuccess = createAction('[RuntimeSettings] Delete Event Party Success',\r\n(partyId: number, success: boolean) => ({ payload: { partyId, success }}));\r\n","import { Action, ActionReducerMap } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromRuntimeUnits from './units-table';\r\nimport * as fromRuntimeDrawer from './units-drawer';\r\nimport * as fromEventPartyDrawer from './event-party-drawer';\r\nimport * as fromDatapointLegends from './datapoint-legends';\r\nimport * as fromDatapoint from './datapoint';\r\nimport * as fromRuntimeTest from './runtimeTest';\r\nimport * as fromEventCalculation from './event-calculation';\r\nimport * as fromEventCalculationDrawer from './event-calculation-drawer';\r\n\r\nexport const reducers: ActionReducerMap ={\r\n runtimeSettingsTests: fromRuntimeTest.reducer,\r\n datapointLegends: fromDatapointLegends.reducer,\r\n datapoints: fromDatapoint.reducer,\r\n units: fromRuntimeUnits.reducer,\r\n unitsDrawer: fromRuntimeDrawer.reducer,\r\n eventPartyDrawer: fromEventPartyDrawer.reducer,\r\n eventCalculationDrawer: fromEventCalculationDrawer.reducer,\r\n eventCalculations: fromEventCalculation.reducer\r\n};","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { cloneDeep } from 'lodash';\r\n\r\n/* Settings Service */\r\nimport { AppSettingsService } from '@appsettings/app-settings.service';\r\n\r\n/* RxJS */\r\nimport { map } from 'rxjs/operators';\r\n\r\n/* Models */\r\nimport { Observable } from 'rxjs';\r\nimport { RuntimeSettingsUnit } from '../models/runtime-settings-unit';\r\nimport { AppColors } from '@rfv/modules/shared/types/app-colors';\r\nimport { RuntimeSettingsTest } from '../models/runtime-settings-test';\r\nimport { RuntimeSettingsUnitModel } from '../models/runtime-settings-unit.model';\r\nimport { EventCodeModel } from '../models/event-code-edit.model';\r\nimport { EventPartyModel } from '../models/event-party-edit.model';\r\nimport { EventCalculationModel } from '../models/event-calculation-edit.model';\r\nimport { EventCalculation } from '../models/event-calculation.model';\r\n\r\nconst rootUrl = `/v1/RuntimeSettings/`;\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class RuntimeSettingsService {\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n private _appSettings: AppSettingsService\r\n ) { }\r\n\r\n\r\n // units tabs\r\n\r\n getUnits(): Observable {\r\n const url = rootUrl + `units`;\r\n return this._http.get(url).pipe(\r\n map(units => {\r\n const newUnits = cloneDeep(units);\r\n newUnits.forEach(unit => this.setValues(unit));\r\n return newUnits;\r\n }\r\n ));\r\n }\r\n\r\n getRuntimeTests(): Observable {\r\n const url = rootUrl + `runtimeTests`;\r\n return this._http.get(url);\r\n }\r\n\r\n updateRuntimeSettings(model: RuntimeSettingsUnitModel): Observable {\r\n const url = rootUrl + `units`;\r\n return this._http.put(url, model);\r\n }\r\n\r\n createRuntimeSettings(model: RuntimeSettingsUnitModel): Observable {\r\n const url = rootUrl + `units`;\r\n return this._http.post(url, model);\r\n }\r\n\r\n deleteRuntimeSettings(id: number): Observable {\r\n const url = rootUrl + `units/${id}`;\r\n return this._http.delete(url);\r\n }\r\n\r\n private setValues(unit: RuntimeSettingsUnit) {\r\n if (unit.State === 'Not Setup') {\r\n unit.StateColor = AppColors.red.slice(1);\r\n } else if (unit.State === 'Invalid Data') {\r\n unit.StateColor = AppColors.yellow.slice(1);\r\n } else {\r\n unit.StateColor = AppColors.black_l3.slice(1);\r\n }\r\n unit.RuntimeThresholdValue = unit.RuntimeThreshold;\r\n unit.EventThresholdValue = unit.EventThreshold;\r\n unit.RuntimeThreshold = unit.RuntimeThresholdLabel || unit.RuntimeThreshold;\r\n unit.EventThreshold = unit.EventThresholdLabel || unit.EventThreshold;\r\n unit.EventDatapointInvalidIcon = unit.EventDatapointInvalid || unit.EventDataPointId === 0;\r\n unit.RuntimeDatapointInvalidIcon = unit.RuntimeDatapointInvalid || unit.RuntimeDataPointId === 0;\r\n unit.AvailableDatapointsInvalidIcon = unit.StateColor === AppColors.red.slice(1) ? true : false;\r\n }\r\n\r\n\r\n // event parties\r\n\r\n updateEventParties(model: EventPartyModel) {\r\n const url = rootUrl + `eventParty`;\r\n return this._http.put(url, model);\r\n }\r\n\r\n createEventParties(model: EventPartyModel) {\r\n const url = rootUrl + `eventParty`;\r\n return this._http.post(url, model);\r\n }\r\n\r\n deleteEventParties(id: number) {\r\n const url = rootUrl + `eventParty/${id}`;\r\n return this._http.delete(url);\r\n }\r\n\r\n // event code\r\n\r\n updateEventCode(model: EventCodeModel) {\r\n const url = rootUrl + `eventCode`;\r\n return this._http.put(url, model);\r\n }\r\n\r\n createEventCode(model: EventCodeModel) {\r\n const url = rootUrl + `eventCode`;\r\n return this._http.post(url, model);\r\n }\r\n\r\n deleteEventCode(id: number) {\r\n const url = rootUrl + `eventCode/${id}`;\r\n return this._http.delete(url);\r\n }\r\n\r\n // event calculation\r\n\r\n getEventCalculation(): Observable {\r\n const url = rootUrl + `eventCalculation`;\r\n return this._http.get(url);\r\n }\r\n\r\n updateEventCalculation(model: EventCalculationModel) {\r\n const url = rootUrl + `eventCalculation`;\r\n return this._http.put(url, model);\r\n }\r\n\r\n createEventCalculation(model: EventCalculationModel) {\r\n const url = rootUrl + `eventCalculation`;\r\n return this._http.post(url, model);\r\n }\r\n\r\n deleteEventCalculation(id: number) {\r\n const url = rootUrl + `eventCalculation/${id}`;\r\n return this._http.delete(url);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/* RxJS */\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, withLatestFrom, tap } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\n\r\n/* Service */\r\nimport { RuntimeSettingsService } from '../services/runtime-settings.service';\r\nimport { AssetService, DatapointsService } from '@rfv/modules/core/services';\r\n\r\nimport * as fromRuntimeTest from './runtimeTest';\r\nimport * as fromUnits from './units-table';\r\nimport * as fromDrawer from './units-drawer';\r\nimport * as fromDatapointLegends from './datapoint-legends';\r\nimport * as fromDatapoint from './datapoint';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromRuntime from '../../../modules/runtime-settings/store';\r\nimport * as fromRuntimeSettings from '../../../modules/runtime-settings/store';\r\n\r\nimport * as fromEventCode from './event-code';\r\n\r\nimport * as fromEventParty from './event-party';\r\nimport * as fromEventPartyDrawer from './event-party-drawer';\r\n\r\nimport * as fromEventCalculation from './event-calculation';\r\nimport * as fromEventCalculationDrawer from './event-calculation-drawer';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { EventCodeModel } from '../models/event-code-edit.model';\r\nimport { EventCalculationModel } from '../models/event-calculation-edit.model';\r\nimport { ModalType } from '@rfv/store/modal';\r\nimport { SidebarService } from '@rfv/modules/involve/side-bar/services/side-bar-service.service';\r\n\r\n@Injectable()\r\n\r\nexport class RuntimeSettingsEffect {\r\n constructor(private _actions$: Actions,\r\n private _datapointService: DatapointsService,\r\n private _assetService: AssetService,\r\n private _runtimeSettingsService: RuntimeSettingsService,\r\n private _store: Store,\r\n private _sidebarService: SidebarService\r\n ) { }\r\n\r\n loadRuntimeSettingsTests$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromRuntimeTest.Load),\r\n switchMap(action => this._runtimeSettingsService.getRuntimeTests().pipe(\r\n map(tests => fromRuntimeTest.LoadSuccess({ tests }),\r\n catchError(error => of(fromRuntimeTest.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n loadRuntimeSettingsUnits$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnits.Load),\r\n switchMap(action => this._runtimeSettingsService.getUnits().pipe(\r\n map(runtimeSettingsUnits => fromUnits.LoadSuccess({ runtimeSettingsUnits }),\r\n catchError(error => of(fromUnits.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n loadDatapointLegends$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapointLegends.Load),\r\n switchMap(action => this._datapointService.getDatapointLegends(action.payload.datapointId).pipe(\r\n map(legends => fromDatapointLegends.LoadSuccess({ legends }),\r\n catchError(error => of(fromDatapointLegends.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n\r\n loadDatapointLegendsMany$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapointLegends.LoadMany),\r\n switchMap(action => this._datapointService.getDatapointLegends(action.payload.datapointIds).pipe(\r\n map(legends => fromDatapointLegends.LoadSuccess({ legends }),\r\n catchError(error => of(fromDatapointLegends.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n loadDatapoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDatapoint.Load),\r\n switchMap(action => this._assetService.getDatapoints(action.payload.assetId)\r\n .pipe(\r\n switchMap((datapoints) => [\r\n fromDatapoint.Clear(),\r\n fromDatapoint.LoadSuccess({ datapoints })\r\n ]),\r\n catchError(error => of(fromDatapoint.LoadFail({ error })))\r\n ))\r\n )\r\n );\r\n\r\n\r\n\r\n updateRuntimeSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnits.UpdateRuntimeSettings),\r\n switchMap(action => this._runtimeSettingsService.updateRuntimeSettings(action.payload.model)\r\n .pipe(\r\n map(success => fromUnits.UpdateRuntimeSettingsSuccess(action.payload.model, success)),\r\n catchError(error => of(fromUnits.UpdateRuntimeSettingsFail(action.payload.model, error)))\r\n ))\r\n )\r\n );\r\n\r\n updateRuntimeSettingsSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnits.UpdateRuntimeSettingsSuccess),\r\n switchMap((action) => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromDatapoint.Load(action.payload.model.AssetId),\r\n fromUnits.Load()\r\n ]),\r\n tap(() => this._sidebarService.close())\r\n )\r\n );\r\n\r\n createRuntimeSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnits.CreateRuntimeSettings),\r\n switchMap(action => this._runtimeSettingsService.createRuntimeSettings(action.payload.model)\r\n .pipe(\r\n map(success => fromUnits.CreateRuntimeSettingsSuccess(action.payload.model, success)),\r\n catchError(error => of(fromUnits.CreateRuntimeSettingsFail(action.payload.model, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n createRuntimeSettingsSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnits.CreateRuntimeSettingsSuccess),\r\n switchMap((action) => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromDatapoint.Load(action.payload.model.AssetId),\r\n fromUnits.Load()\r\n ]),\r\n tap(() => this._sidebarService.close())\r\n )\r\n );\r\n\r\n deleteRuntimeSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnits.DeleteRuntimeSettings),\r\n switchMap(action => this._runtimeSettingsService.deleteRuntimeSettings(action.payload.assetId)\r\n .pipe(\r\n switchMap((success) => [\r\n fromUnits.DeleteRuntimeSettingsSuccess(action.payload.assetId, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Delete successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromDatapoint.Load(action.payload.assetId),\r\n fromUnits.Load()\r\n ]),\r\n catchError(error => of(fromUnits.DeleteRuntimeSettingsFail(action.payload.assetId, error)))\r\n ))\r\n )\r\n );\r\n\r\n // EVENT CODE\r\n\r\n updateEventCode$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCode.UpdateEventCode),\r\n switchMap(action => this._runtimeSettingsService.updateEventCode(action.payload.model)\r\n .pipe(\r\n switchMap((success) => [\r\n fromEventCode.UpdateEventCodeSuccess(action.payload.model, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n catchError(error => of(fromEventCode.UpdateEventCodeFail(action.payload.model, error)))\r\n ))\r\n )\r\n );\r\n\r\n createEventCode$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCode.CreateEventCode),\r\n switchMap(action => this._runtimeSettingsService.createEventCode(action.payload.model)\r\n .pipe(\r\n switchMap((success) => [\r\n fromEventCode.CreatEventCodeSuccess(action.payload.model, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n catchError(error => of(fromEventCode.CreateEventCodeFail(action.payload.model, error)))\r\n ))\r\n )\r\n );\r\n\r\n deleteEventCode$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCode.DeleteEventCode),\r\n switchMap(action => this._runtimeSettingsService.deleteEventCode(action.payload.assetId)\r\n .pipe(\r\n switchMap((success) => [\r\n fromEventCode.DeleteEventCodeSuccess(action.payload.assetId, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Delete successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n catchError(error => of(fromEventCode.DeleteEventCodeFail(action.payload.assetId, error)))\r\n ))\r\n )\r\n );\r\n\r\n // EVENT Party\r\n\r\n updateEventParty$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventParty.UpdateEventParty),\r\n switchMap(action => this._runtimeSettingsService.updateEventParties(action.payload.model)\r\n .pipe(\r\n switchMap((success) => [\r\n fromEventParty.UpdateEventPartySuccess(action.payload.model, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromEventPartyDrawer.Close(),\r\n fromCore.EventParties.Load(),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n catchError(error => of(fromEventParty.UpdateEventPartyFail(action.payload.model, error)))\r\n ))\r\n )\r\n );\r\n\r\n updateEventPartySuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventParty.UpdateEventPartySuccess),\r\n withLatestFrom(\r\n this._store.select(fromCore.EventParties.getDefault),\r\n this._store.select(fromCore.EventCodes.getAll),\r\n this._store.select(fromRuntimeSettings.EventCalculation.getAll)\r\n ),\r\n tap(([action, defaultEventParty, EventCodes, EventCalculation]) => {\r\n if (action.payload.model.IsDisable === true) {\r\n let EventCalculations = EventCalculation.filter(v => v.EventParties.find(v => v === action.payload.model.Id))\r\n\r\n if (EventCalculations.length > 0) {\r\n EventCalculations.forEach(v => {\r\n let EventParties = v.EventParties.filter(v => v != action.payload.model.Id)\r\n\r\n const eventCalculationModel: EventCalculationModel = {\r\n Id: v.Id,\r\n Name: v.Name,\r\n Abbr: v.Abbr,\r\n IsDisable: v.IsDisable,\r\n ColorId: v.ColorId,\r\n EventParties: v.EventParties.length === 1 ? [defaultEventParty.Id] : EventParties,\r\n IsPercentCalculation: v.IsPercentCalculation\r\n };\r\n this._store.dispatch(fromRuntime.EventCalculation.UpdateEventCalculation(eventCalculationModel));\r\n })\r\n\r\n this._store.dispatch(\r\n fromRoot.Modal.Open({\r\n options: {\r\n modalType: ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n data: 'All reference to ' + action.payload.model.Name + ' have been removed from the list of calculations',\r\n title: '',\r\n primaryText: 'ok',\r\n }\r\n },\r\n ));\r\n }\r\n\r\n let eventCodes = EventCodes.filter(v => v.AssignedEventPartyId === action.payload.model.Id);\r\n if (eventCodes.length > 0) {\r\n eventCodes.forEach(v => {\r\n const eventCodeModel: EventCodeModel = {\r\n Id: v.Id,\r\n Name: v.Name,\r\n OriginalName: v.Name,\r\n AssignedPartyId: defaultEventParty.Id,\r\n IncludeEvents: v.IncludeEvents,\r\n MinimumTimeThreshold: v.MinimumTimeThreshold,\r\n };\r\n\r\n this._store.dispatch(fromRuntime.EventCode.UpdateEventCode(eventCodeModel));\r\n })\r\n }\r\n }\r\n }),\r\n tap(() => this._sidebarService.close())\r\n ), { dispatch: false }\r\n );\r\n\r\n createEventParty$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventParty.CreateEventParty),\r\n switchMap(action => this._runtimeSettingsService.createEventParties(action.payload.model)\r\n .pipe(\r\n map((success) => fromEventParty.CreatEventPartySuccess(action.payload.model, success)),\r\n catchError(error => of(fromEventParty.CreateEventPartyFail(action.payload.model, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n createEventPartySuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventParty.CreatEventPartySuccess),\r\n switchMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.EventParties.Load(),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n tap(() => this._sidebarService.close())\r\n )\r\n );\r\n\r\n deleteEventParty$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventParty.DeleteEventParty),\r\n switchMap(action => this._runtimeSettingsService.deleteEventParties(action.payload.partyId)\r\n .pipe(\r\n switchMap((success) => [\r\n fromEventParty.DeleteEventPartySuccess(action.payload.partyId, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Delete successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.EventParties.Load(),\r\n fromCore.EventCodes.Load()\r\n ]),\r\n catchError(error => of(fromEventParty.DeleteEventPartyFail(action.payload.partyId, error)))\r\n ))\r\n )\r\n );\r\n\r\n // EVENT Calculation\r\n\r\n loadEventCalculations$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCalculation.Load),\r\n switchMap(action => this._runtimeSettingsService.getEventCalculation().pipe(\r\n map(eventCalculation => fromEventCalculation.LoadSuccess({ eventCalculation }),\r\n catchError(error => of(fromEventCalculation.LoadFail({ error })))\r\n )))\r\n )\r\n );\r\n\r\n updateEventCalculation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCalculation.UpdateEventCalculation),\r\n switchMap(action => this._runtimeSettingsService.updateEventCalculation(action.payload.model)\r\n .pipe(\r\n map(success => fromEventCalculation.UpdateEventCalculationSuccess(action.payload.model, success)),\r\n catchError(error => of(fromEventCalculation.UpdateEventCalculationFail(action.payload.model, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n updateEventCalculationSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCalculation.UpdateEventCalculationSuccess),\r\n switchMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromEventCalculationDrawer.Close(),\r\n fromEventCalculation.Load()\r\n ]),\r\n tap(() => this._sidebarService.close())\r\n )\r\n );\r\n\r\n createEventCalculation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCalculation.CreateEventCalculation),\r\n switchMap(action => this._runtimeSettingsService.createEventCalculation(action.payload.model)\r\n .pipe(\r\n map(success => fromEventCalculation.CreatEventCalculationSuccess(action.payload.model, success)),\r\n catchError(error => of(fromEventCalculation.CreateEventCalculationFail(action.payload.model, error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n createEventCalculationSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCalculation.CreatEventCalculationSuccess),\r\n switchMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Update successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromEventCalculationDrawer.Close(),\r\n fromEventCalculation.Load()\r\n ]),\r\n tap(() => this._sidebarService.close())\r\n )\r\n );\r\n\r\n deleteEventCalculation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromEventCalculation.DeleteEventCalculation),\r\n switchMap(action => this._runtimeSettingsService.deleteEventCalculation(action.payload.calculationId)\r\n .pipe(\r\n switchMap((success) => [\r\n fromEventCalculation.DeleteEventCalculationSuccess(action.payload.calculationId, success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Delete successful.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromEventCalculationDrawer.Close(),\r\n fromEventCalculation.Load()\r\n ]),\r\n catchError(error => of(fromEventCalculation.DeleteEventCalculationFail(action.payload.calculationId, error)))\r\n ))\r\n )\r\n );\r\n\r\n loadDatapointLegend$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDrawer.LoadRuntimeLegends),\r\n switchMap(action => this._datapointService.getDatapointLegends(action.payload.datapointId).pipe(\r\n map(legends => fromDrawer.LoadRuntimeLegendsSuccess(legends),\r\n catchError(error => of(fromDrawer.LoadRuntimeLegendsFail(error)))\r\n )))\r\n )\r\n );\r\n}\r\n\r\nexport const EFFECTS = [\r\n RuntimeSettingsEffect\r\n];\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n\r\nimport { reducers } from './reducers';\r\nimport { EFFECTS } from './effects';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n StoreModule.forFeature('runtimeSettings', reducers),\r\n EffectsModule.forFeature(EFFECTS)\r\n ]\r\n})\r\nexport class RuntimeStoreModule { }","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError, AssetDatapoint } from '@rfv/modules/core/models';\r\nimport { RuntimeSettingsTest } from '../../models/runtime-settings-test';\r\n\r\nexport const Load = createAction('[RuntimeSettings] Load Runtime Tests');\r\nexport const LoadFail = createAction('[RuntimeSettings] Load Runtime Tests Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[RuntimeSettings] Load Runtime Tests Success',\r\nprops<{tests: RuntimeSettingsTest[]}>());\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { RuntimeSettingsTest } from '../../models/runtime-settings-test';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: tests => tests.Id\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as RuntimeTestActions from './actions';\r\n\r\nconst runtimeSettingsTestReducer = createReducer(\r\n initialState,\r\n\r\n on(RuntimeTestActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(RuntimeTestActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(RuntimeTestActions.LoadSuccess, (state, { tests }) => adapter.setAll(tests, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return runtimeSettingsTestReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getRuntimeSettingsTestsState = createSelector(getParentState, state => state.runtimeSettingsTests);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getRuntimeSettingsTests,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getRuntimeSettingsTestsState);\r\n\r\nexport const isLoaded = createSelector(getRuntimeSettingsTestsState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getRuntimeSettingsTestsState, state => state.isLoading);\r\nexport const getError = createSelector(getRuntimeSettingsTestsState, state => state.error);\r\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\nimport { State } from './state';\r\n\r\nimport * as fromSitemapGroups from '@rfv/modules/core/store/sitemap-groups/selectors';\r\nimport * as fromEventParty from '@rfv/modules/core/store/event-parties/selectors';\r\nimport { RuntimeSettingsUnit } from '../models/runtime-settings-unit';\r\nimport { EventCalculationTable } from '../models/event-calculation.model';\r\n\r\nexport const getState = createFeatureSelector('runtimeSettings');\r\n\r\nexport const getList = (asset: RuntimeSettingsUnit) => createSelector(\r\n fromSitemapGroups.getPathString,\r\n (getPath) => {\r\n let path = getPath(asset.SitemapGroupId);\r\n path = path + (path === '' ? '' : '/');\r\n return path.slice(0, -1);\r\n });\r\n\r\nexport const getEventCalculation = createSelector(\r\n getState,\r\n (status) => {\r\n return status.eventCalculations.entities;\r\n }\r\n);\r\n\r\nexport const getEventCalculationTable = createSelector(\r\n fromEventParty.getAll,\r\n getEventCalculation,\r\n (eventParty, eventCalculations) => {\r\n const eventCalculationTable: EventCalculationTable[] = [];\r\n Object.keys(eventCalculations).map(key => {\r\n const calculation = eventCalculations[key];\r\n const parties = eventParty.filter(party => calculation.EventParties.includes(party.Id));\r\n eventCalculationTable.push(\r\n {\r\n Color: calculation.Color,\r\n ColorId: calculation.ColorId,\r\n EventParties: calculation.EventParties,\r\n EventPartiesName: parties.map(party => party.Name),\r\n Id: calculation.Id,\r\n IsDisable: calculation.IsDisable,\r\n IsPercentCalculation: calculation.IsPercentCalculation,\r\n Name: calculation.Name,\r\n Abbr: calculation.Abbr\r\n });\r\n });\r\n return eventCalculationTable;\r\n });\r\n","/* NgRx */\r\nimport { createAction, props } from '@ngrx/store';\r\n\r\nimport { DatapointLegend, ApiError } from \"@rfv/modules/core/models\";\r\n\r\n/* Action types */\r\nexport const Open = createAction('[RuntimeSettings Drawer] Open', () => ({payload: { isOpen: true }}));\r\nexport const Close = createAction('[RuntimeSettings Drawer] Close', () => ({payload: { isOpen: false }}));\r\n\r\nexport const LoadRuntimeLegends = createAction('[RuntimeSettings Drawer] Load Runtime Legends', \r\n(datapointId: number[]) => ({ payload: { datapointId }}));\r\n\r\nexport const LoadRuntimeLegendsFail = createAction('[RuntimeSettings Drawer] Load Runtime Legends Fail', \r\n(error: ApiError) => (error));\r\n\r\nexport const LoadRuntimeLegendsSuccess = createAction('[RuntimeSettings Drawer] Load Runtime Legends Success',\r\n(legends: DatapointLegend[]) => ( { legends }));\r\n","import { DatapointLegend } from \"@rfv/modules/core/models\";\r\n\r\nexport interface State {\r\n isOpen: boolean;\r\n dataPointLegend: DatapointLegend[];\r\n isLoadingRuntimeLegends: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n isOpen: false,\r\n dataPointLegend: null,\r\n isLoadingRuntimeLegends: false,\r\n};\r\n","import { State, initialState } from './state';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as DrawerAction from './actions';\r\nimport { merge } from 'lodash';\r\n\r\nconst runtimeDrawerReducer = createReducer(\r\n initialState,\r\n\r\n on(DrawerAction.Open, (state) => merge({}, state, {\r\n isOpen: true\r\n })),\r\n\r\n on(DrawerAction.Close, (state) => merge({}, state, {\r\n isOpen: false\r\n })),\r\n\r\n on(DrawerAction.LoadRuntimeLegendsSuccess, (state, payload) => ({\r\n ...state,\r\n dataPointLegend: payload.legends,\r\n isLoadingRuntimeLegends: false,\r\n })),\r\n\r\n on(DrawerAction.LoadRuntimeLegends, (state) => ({\r\n ...state,\r\n isLoadingRuntimeLegends: true\r\n })),\r\n\r\n on(DrawerAction.LoadRuntimeLegendsFail, (state, error) => ({\r\n ...state,\r\n isLoadingRuntimeLegends: false,\r\n error: error\r\n })),\r\n\r\n);\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return runtimeDrawerReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nexport const getDrawerState = createSelector(getParentState, state => state.unitsDrawer);\r\n\r\nexport const getDatapointDrawerIsOpen = createSelector(\r\n getDrawerState,\r\n state => state.isOpen\r\n);\r\n\r\nexport const getRuntimeLegends = createSelector(getDrawerState, state => state.dataPointLegend);\r\n\r\nexport const isLoadingRuntimeLegends = createSelector(getDrawerState, state => state.isLoadingRuntimeLegends);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { RuntimeSettingsUnit } from '../../models/runtime-settings-unit';\r\nimport { RuntimeSettingsUnitModel } from '../../models/runtime-settings-unit.model';\r\n\r\nexport const Load = createAction('[Runtime Settings] Load Runtime Settings Units');\r\nexport const LoadFail = createAction('[RuntimeSettings] Load Runtime Settings Units Fail', props<{ error: ApiError }>());\r\nexport const LoadSuccess = createAction('[RuntimeSettings] Load Runtime Settings Units Success',\r\nprops<{runtimeSettingsUnits: RuntimeSettingsUnit[]}>());\r\n\r\nexport const Clear = createAction('[Runtime Settings] Clear');\r\n\r\nexport const UpdateRuntimeSettings = createAction('[Runtime Settings] Update Runtime Settings',\r\n(model: RuntimeSettingsUnitModel) => ({payload: { model }}));\r\nexport const UpdateRuntimeSettingsFail = createAction('[Runtime Settings] Update Runtime Settings Fail',\r\n(model: RuntimeSettingsUnitModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const UpdateRuntimeSettingsSuccess = createAction('[Runtime Settings] Update Runtime Settings Success',\r\n(model: RuntimeSettingsUnitModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const CreateRuntimeSettings = createAction('[Runtime Settings] Create Runtime Settings',\r\n(model: RuntimeSettingsUnitModel) => ({payload: { model }}));\r\nexport const CreateRuntimeSettingsFail = createAction('[Runtime Settings] Create Runtime Settings Fail',\r\n(model: RuntimeSettingsUnitModel, error: ApiError) => ({payload: { model, error }}));\r\nexport const CreateRuntimeSettingsSuccess = createAction('[Runtime Settings] Create Runtime Settings Success',\r\n(model: RuntimeSettingsUnitModel, success: boolean) => ({payload: { model, success }}));\r\n\r\nexport const DeleteRuntimeSettings = createAction('[RuntimeSettings] Delete Runtime Settings Units',\r\n(assetId: number) => ({ payload: { assetId }}));\r\nexport const DeleteRuntimeSettingsFail = createAction('[RuntimeSettings] Delete Runtime Settings Units Fail',\r\n(assetId: number, error: ApiError) => ({ payload: { assetId, error }}));\r\nexport const DeleteRuntimeSettingsSuccess = createAction('[RuntimeSettings] Delete Runtime Settings Units Success',\r\n(assetId: number, success: boolean) => ({ payload: { assetId, success }}));\r\n","import { EntityState, createEntityAdapter } from '@ngrx/entity';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { RuntimeSettingsUnit } from '../../models/runtime-settings-unit';\r\n\r\nexport interface State extends EntityState {\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n error: ApiError | null\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: runtimeSettingsUnit => runtimeSettingsUnit.AssetId\r\n});\r\n\r\nexport const initialState: State = adapter.getInitialState({\r\n isLoaded: false,\r\n isLoading: false,\r\n error: null\r\n});\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, adapter, initialState } from './state';\r\n\r\nimport * as UnitsActions from './actions';\r\n\r\nconst runtimeSettingsReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitsActions.Clear, state => initialState),\r\n\r\n on(UnitsActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(UnitsActions.LoadSuccess, (state, { runtimeSettingsUnits }) => adapter.setAll(runtimeSettingsUnits, {\r\n ...state,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return runtimeSettingsReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\n\r\nimport { getState as getParentState } from '../selectors';\r\n\r\nimport { adapter } from './state';\r\n\r\nexport const getRuntimeUnitsState = createSelector(getParentState, state => state.units);\r\n\r\nexport const {\r\n selectAll: getAll,\r\n selectEntities: getRuntimeSettingsUnits,\r\n selectIds: getIds,\r\n selectTotal: getTotal\r\n} = adapter.getSelectors(getRuntimeUnitsState);\r\n\r\nexport const isLoaded = createSelector(getRuntimeUnitsState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getRuntimeUnitsState, state => state.isLoading);\r\nexport const getError = createSelector(getRuntimeUnitsState, state => state.error);\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\nimport { UnitAlarmHistory } from '../../models/unit-alarm-history.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[Fullscreen Unit Alarm History] Load Unit Alarm History',\r\n (assetId: number, dateFrom: Date, dateTo: Date, topNRecords: number) => ({ assetId, dateFrom, dateTo, topNRecords })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Fullscreen Unit Alarm History] Load Success',\r\n (payload: UnitAlarmHistory[]) => ({ payload })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[Fullscreen Unit Alarm History] Load Failed',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n","// NgRx\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { createAction } from '@ngrx/store';\r\n\r\n// Models\r\nimport { UnitAlarmHistoryRecipient } from '../../models/unit-alarm-history-recipient.model';\r\nimport { UserListNotificationSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-settings.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[Fullscreen Unit Alarm History] Load Alarm History Recipients',\r\n (alertHistoryId: number, assetId: number) => ({ alertHistoryId, assetId })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Fullscreen Unit Alarm History] Load Alarm History Recipients Success',\r\n (unitAlarmHistoryRecipients: UnitAlarmHistoryRecipient[]) => ({ unitAlarmHistoryRecipients })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[Fullscreen Unit Alarm History] Load Alarm History Recipients Failed',\r\n (error: HttpErrorResponse) => ({ error })\r\n);\r\n\r\nexport const LoadUserListNotificationSettings = createAction('[Fullscreen Unit Alarm History] Load User List Notification Settings');\r\n\r\nexport const LoadUserListNotificationSettingsSuccess = createAction(\r\n '[Fullscreen Unit Alarm History] Load User List Notification Settings Success',\r\n (userListNotificationSettings: UserListNotificationSettings[]) => ({ userListNotificationSettings })\r\n);\r\n\r\nexport const LoadUserListNotificationSettingsFail = createAction(\r\n '[Fullscreen Unit Alarm History] Load User List Notification Settings Failed',\r\n (error: HttpErrorResponse) => ({ error })\r\n);\r\n\r\nexport const Clear = createAction('[Fullscreen Unit Alarm History] Clear Alarm History Recipients');\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { UnitAlarmHistoryMessageAndLog } from '../../models/unit-alarm-history-message-and-log.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n\r\nexport const Load = createAction(\r\n '[Fullscreen Unit Alarm History] Load Alarm History Logs',\r\n (alertHistoryId: number) => ({ alertHistoryId })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Fullscreen Unit Alarm History] Load Alarm History Logs Success',\r\n (unitAlarmHistoryMessageAndLog: UnitAlarmHistoryMessageAndLog) => ({ unitAlarmHistoryMessageAndLog })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[Fullscreen Unit Alarm History] Load Alarm History Logs Failed',\r\n (error: HttpErrorResponse) => ({ error })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nexport const SaveDatapointLegendIds = createAction('[Fullscreen Unit Alarm History] Save Datapoint Legend Ids', (datapointIds: number[]) => ({ datapointIds }));\r\n","import { UnitAlarmHistory } from '../../models/unit-alarm-history.model';\r\nimport { unitAlarmHistoryActions } from '../actions';\r\n\r\nimport { createReducer, on } from '@ngrx/store';\r\n\r\nexport interface UnitAlarmHistoryState {\r\n loading: boolean;\r\n loaded: boolean;\r\n fromDate: Date;\r\n toDate: Date;\r\n topNRecords: number;\r\n unitAlarmHistory: UnitAlarmHistory[];\r\n error: string;\r\n}\r\n\r\nconst initialState: UnitAlarmHistoryState = {\r\n loading: false,\r\n loaded: false,\r\n fromDate: null,\r\n toDate: null,\r\n topNRecords: 10,\r\n unitAlarmHistory: [],\r\n error: ''\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(unitAlarmHistoryActions.Load, state => ({\r\n ...state,\r\n loading: true\r\n })),\r\n on(unitAlarmHistoryActions.LoadSuccess, (state, { payload }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n unitAlarmHistory: payload,\r\n error: ''\r\n })),\r\n on(unitAlarmHistoryActions.LoadFail, (state, { errorMessage }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n unitAlerts: [],\r\n error: errorMessage\r\n }))\r\n);\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { UserListNotificationSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-settings.model';\r\n\r\nimport { unitAlarmHistoryRecipientsActions } from '../actions';\r\nimport { UnitAlarmHistoryRecipient } from '../../models/unit-alarm-history-recipient.model';\r\nimport { createReducer, on } from '@ngrx/store';\r\n\r\nexport interface UnitAlarmHistoryRecipientsState {\r\n loading: boolean;\r\n loaded: boolean;\r\n recipients: UnitAlarmHistoryRecipient[];\r\n userListNotificationSettingsLoading: boolean;\r\n userListNotificationSettingsLoaded: boolean;\r\n userList: UserListNotificationSettings[];\r\n error: HttpErrorResponse;\r\n}\r\n\r\nconst initialState: UnitAlarmHistoryRecipientsState = {\r\n loading: false,\r\n loaded: false,\r\n recipients: null,\r\n userListNotificationSettingsLoading: false,\r\n userListNotificationSettingsLoaded: false,\r\n userList: null,\r\n error: null\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState, \r\n on(unitAlarmHistoryRecipientsActions.Load, state => ({\r\n ...state,\r\n recipients:null,\r\n loading: true\r\n })),\r\n on(unitAlarmHistoryRecipientsActions.LoadSuccess, (state, { unitAlarmHistoryRecipients }) => ({ \r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n recipients: unitAlarmHistoryRecipients,\r\n error: null\r\n })),\r\n on(unitAlarmHistoryRecipientsActions.LoadFail, (state, { error }) => ({ \r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n recipients: [],\r\n error: error\r\n })),\r\n on(unitAlarmHistoryRecipientsActions.LoadUserListNotificationSettings, state => ({\r\n ...state,\r\n userListNotificationSettingsLoading: true\r\n })),\r\n on(unitAlarmHistoryRecipientsActions.LoadUserListNotificationSettingsSuccess, (state, { userListNotificationSettings }) => ({\r\n ...state,\r\n userListNotificationSettingsLoading: false,\r\n userListNotificationSettingsLoaded: true,\r\n userList: userListNotificationSettings,\r\n error: null\r\n })),\r\n on(unitAlarmHistoryRecipientsActions.LoadUserListNotificationSettingsFail, (state, { error }) => ({\r\n ...state,\r\n userListNotificationSettingsLoading: false,\r\n userListNotificationSettingsLoaded: false,\r\n userList: null,\r\n error: error\r\n })),\r\n on(unitAlarmHistoryRecipientsActions.Clear, state => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n recipients: []\r\n }))\r\n);\r\n","import { createReducer, on } from '@ngrx/store';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { unitAlarmHistoryLogsActions } from '../actions';\r\nimport { UnitAlarmHistoryMessageAndLog } from '../../models/unit-alarm-history-message-and-log.model';\r\n\r\nexport interface UnitAlarmHistoryLogsState {\r\n loading: boolean;\r\n loaded: boolean;\r\n log: UnitAlarmHistoryMessageAndLog;\r\n error: HttpErrorResponse;\r\n}\r\n\r\nconst initialState: UnitAlarmHistoryLogsState = {\r\n loading: false,\r\n loaded: false,\r\n log: null,\r\n error: null\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(unitAlarmHistoryLogsActions.Load, state => ({\r\n ...state,\r\n loading: true,\r\n loaded:false\r\n })),\r\n on(unitAlarmHistoryLogsActions.LoadSuccess, (state, { unitAlarmHistoryMessageAndLog }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n log: unitAlarmHistoryMessageAndLog,\r\n error: null\r\n })),\r\n on(unitAlarmHistoryLogsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n log: null,\r\n error: error\r\n }))\r\n);\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { unitAlarmHistoryDatapointLegendsActions } from '../actions';\r\n\r\nexport interface UnitAlarmHistoryDatapointLegendsState {\r\n datapointIds: number[];\r\n}\r\n\r\nconst initialState: UnitAlarmHistoryDatapointLegendsState = {\r\n datapointIds: null\r\n};\r\n\r\nconst datapointLegendsReducer = createReducer(\r\n initialState,\r\n\r\n on(unitAlarmHistoryDatapointLegendsActions.SaveDatapointLegendIds, (state, { datapointIds }) => ({\r\n ...state,\r\n datapointIds: datapointIds\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): UnitAlarmHistoryDatapointLegendsState {\r\n return datapointLegendsReducer(state, action);\r\n}\r\n","import { getAlarmsState } from '@rfv/modules/dashboard/modules/unit-alarms/store/reducers';\r\nimport { getEntitiesState } from '@rfv/modules/core/store/assets/entities/selectors';\r\nimport { createFeatureSelector, createSelector, ActionReducerMap } from '@ngrx/store';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromUnitAlarmHistory from './unit-alarm-history.reducer';\r\nimport * as fromUnitAlarmHistoryRecipients from './unit-alarm-history-recipients.reducer';\r\nimport * as fromUnitAlarmHistoryLogs from './unit-alarm-history-logs.reducer';\r\nimport * as fromUnitAlarmHistoryDatapoints from './datapoint-legends.reducer';\r\n\r\nexport interface State extends fromRoot.State {\r\n unitAlarmHistory: fromUnitAlarmHistory.UnitAlarmHistoryState;\r\n}\r\n\r\nexport interface UnitAlarmHistoryState {\r\n unitAlarmHistory: fromUnitAlarmHistory.UnitAlarmHistoryState;\r\n unitAlarmHistoryRecipients: fromUnitAlarmHistoryRecipients.UnitAlarmHistoryRecipientsState;\r\n unitAlarmHistoryLogs: fromUnitAlarmHistoryLogs.UnitAlarmHistoryLogsState;\r\n datapoints: fromUnitAlarmHistoryDatapoints.UnitAlarmHistoryDatapointLegendsState;\r\n}\r\n\r\nexport const reducers: ActionReducerMap = {\r\n unitAlarmHistory: fromUnitAlarmHistory.reducer,\r\n unitAlarmHistoryRecipients: fromUnitAlarmHistoryRecipients.reducer,\r\n unitAlarmHistoryLogs: fromUnitAlarmHistoryLogs.reducer,\r\n datapoints: fromUnitAlarmHistoryDatapoints.reducer\r\n};\r\n\r\n/* Features Selector */\r\nconst getUnitAlarmHistoryFeature = createFeatureSelector('unitAlarmHistory');\r\n\r\n\r\n//\r\n// Unit alarm history selectors\r\n//\r\n\r\n// Get all unit alerts state\r\nexport const getUnitAlarmHistory = createSelector(\r\n getUnitAlarmHistoryFeature,\r\n state => state.unitAlarmHistory\r\n);\r\n\r\n// Get all unit alerts data\r\nexport const getUnitAlarmHistoryData = createSelector(\r\n getUnitAlarmHistory,\r\n state => state.unitAlarmHistory\r\n);\r\n\r\n// Get loading property (data are loaded from endpoint)\r\nexport const getUnitAlarmHistoryLoading = createSelector(\r\n getUnitAlarmHistory,\r\n state => state.loading\r\n);\r\n\r\n// Get loaded property (data were successfully loaded from service)\r\nexport const getUnitAlarmHistoryLoaded = createSelector(\r\n getUnitAlarmHistory,\r\n state => state.loaded\r\n);\r\n\r\n// Get response error (from service)\r\nexport const getUnitAlarmHistoryError = createSelector(\r\n getUnitAlarmHistory,\r\n state => state.error\r\n);\r\n\r\n\r\n//\r\n// Unit alerts recipients selectors\r\n//\r\n\r\n// Get all unit alerts recipients state\r\nexport const getUnitAlarmHistoryRecipients = createSelector(\r\n getUnitAlarmHistoryFeature,\r\n state => state.unitAlarmHistoryRecipients\r\n);\r\n\r\n// Get all unit alerts recipients data\r\nexport const getUnitAlarmHistoryRecipientsData = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.recipients\r\n);\r\n\r\n// Get the list of notification settings\r\nexport const getUserListNotificationSettings = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.userList\r\n);\r\n\r\n// Get User List Notification Settings Loading\r\nexport const getUserListNotificationSettingsLoading = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.userListNotificationSettingsLoading\r\n);\r\n\r\n// Get User List Notification Settings Loaded\r\nexport const getUserListNotificationSettingsLoaded = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.userListNotificationSettingsLoaded\r\n);\r\n\r\n// Get loading property (data are loaded from endpoint)\r\nexport const getUnitAlarmHistoryRecipientsLoading = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.loading\r\n);\r\n\r\n// Get loaded property (data were successfully loaded from service)\r\nexport const getUnitAlarmHistoryRecipientsLoaded = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.loaded\r\n);\r\n\r\n// Get response error (from service)\r\nexport const getUnitAlarmHistoryRecipientsError = createSelector(\r\n getUnitAlarmHistoryRecipients,\r\n state => state.error\r\n);\r\n\r\n\r\n//\r\n// Unit alerts Logs selectors\r\n//\r\n\r\n// Get all unit alerts recipients state\r\nexport const getUnitAlarmHistoryLogs = createSelector(\r\n getUnitAlarmHistoryFeature,\r\n state => state.unitAlarmHistoryLogs\r\n);\r\n\r\n// Get all unit alerts recipients data\r\nexport const getUnitAlarmHistoryLogsData = createSelector(\r\n getUnitAlarmHistoryLogs,\r\n state => state.log\r\n);\r\n\r\nexport const getAssetNameById = (id: number) => createSelector(\r\n getEntitiesState,\r\n entities => entities.entities[id].name\r\n);\r\n\r\nexport const getDataPointNameFromAlarm = (alarmId: number) => createSelector(\r\n getAlarmsState,\r\n entities => entities && entities.unitAlarmsFullscreen.unitAlarms.find(alarm => alarm.AlarmId === alarmId).DataPointName\r\n);\r\n\r\n// Get loading property (data are loaded from endpoint)\r\nexport const getUnitAlarmHistoryLogsLoading = createSelector(\r\n getUnitAlarmHistoryLogs,\r\n state => state.loading\r\n);\r\n\r\n// Get loaded property (data were successfully loaded from service)\r\nexport const getUnitAlarmHistoryLogsLoaded = createSelector(\r\n getUnitAlarmHistoryLogs,\r\n state => state.loaded\r\n);\r\n\r\n// Get response error (from service)\r\nexport const getUnitAlarmHistoryLogsError = createSelector(\r\n getUnitAlarmHistoryLogs,\r\n state => state.error\r\n);\r\n\r\n\r\n// Get datapoints state\r\nexport const getUnitAlarmHistoryDatapoints = createSelector(\r\n getUnitAlarmHistoryFeature,\r\n unitAlerts => unitAlerts && unitAlerts.datapoints\r\n);\r\n\r\n// Get datapoint legend ids\r\nexport const getUnitAlarmHistoryDatapointLegendIds = createSelector(\r\n getUnitAlarmHistoryDatapoints,\r\n datapoints => datapoints && datapoints.datapointIds\r\n);\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\nimport { UnitAlarm } from '@rfv/modules/dashboard/modules/unit-alarms/models/unit-alarm.model';\r\n\r\n\r\nexport const Open = createAction(\r\n '[Fullscreen Unit Alarms Drawer] Open',\r\n (unitAlarm: UnitAlarm) => ({ unitAlarm })\r\n);\r\n\r\nexport const Close = createAction('[Fullscreen Unit Alarms Drawer] Close');\r\n\r\nexport const Add = createAction(\r\n '[Fullscreen Unit Alarms Drawer] Add',\r\n (payload: any) => ({ payload })\r\n);\r\n\r\nexport const SetLookupValueThreshold = createAction(\r\n '[Fullscreen Unit Alarms Drawer] Set Lookup Value Threshold',\r\n (isLookupValueThreshold: boolean) => ({ isLookupValueThreshold })\r\n);\r\n\r\nexport const Suppression = createAction('[Fullscreen Unit Alarms Drawer] Manage Alert Suppression');\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { AssetAlertSuppression } from '../../models/asset-alert-suppression.model';\r\nimport { UnitAlarm } from '@rfv/modules/dashboard/modules/unit-alarms/models/unit-alarm.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[Fullscreen Unit Alarms] Load',\r\n (payload?: number) => ({ payload })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Fullscreen Unit Alarms] Load Success',\r\n (assetId: number, data: UnitAlarm[]) => ({ assetId, data })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[Fullscreen Unit Alarms] Load Failed',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const Clear = createAction(\r\n '[Fullscreen Unit Alarms] Clear',\r\n (payload: number) => ({ payload })\r\n);\r\n\r\nexport const Initialized = createAction('[Fullscreen Unit Alarms] Initialized');\r\n\r\nexport const RefreshTurnedOn = createAction('[Fullscreen Unit Alarms] Refresh Turned On');\r\n\r\nexport const RefreshTurnedOff = createAction('[Fullscreen Unit Alarms] Refresh Turned Off',);\r\n\r\nexport const UpdateAlarms = createAction(\r\n '[Fullscreen Unit Alarms] Update Alarms',\r\n (assetId: number, data: any) => ({ assetId, data })\r\n);\r\n\r\nexport const UpdateServerAlarms = createAction(\r\n '[Fullscreen Unit Alarms] Update Server Alarms Only',\r\n (assetId: number, data: any) => ({ assetId, data })\r\n);\r\n\r\nexport const UpdateAlarmsSuccess = createAction('[Fullscreen Unit Alarms] Update Alarms Success ');\r\n\r\nexport const UpdateAlarmsFail = createAction(\r\n '[Fullscreen Unit Alarms] Update Alarms Fail ',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const CreateAlarm = createAction(\r\n '[Fullscreen Unit Alarms] Create Alarm',\r\n (assetId: number, data: any) => ({ assetId, data })\r\n);\r\n\r\nexport const CreateAlarmSuccess = createAction('[Fullscreen Unit Alarms] Create Alarm Success');\r\n\r\nexport const CreateAlarmFail = createAction(\r\n '[Fullscreen Unit Alarms] Create Alarm Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const CreateAnotherAlarm = createAction(\r\n '[Fullscreen Unit Alarms] Create Another Alarm',\r\n (assetId: number, data: any) => ({ assetId, data })\r\n);\r\n\r\nexport const CreateAnotherAlarmSuccess = createAction('[Fullscreen Unit Alarms] Create Another Alarm Success');\r\n\r\nexport const CreateAnotherAlarmFail = createAction(\r\n '[Fullscreen Unit Alarms] Create Another Alarm Fail ',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const HideDisabledAlarms = createAction('[Fullscreen Unit Alarms] Hide Disabled Alarms');\r\n\r\nexport const ShowDisabledAlarms = createAction('[Fullscreen Unit Alarms] Show Disabled Alarms');\r\n\r\nexport const LoadAlarmSuppression = createAction('[Fullscreen Unit Alarms] Load Alarm Suppression');\r\n\r\nexport const LoadAlarmSuppressionFail = createAction(\r\n '[Fullscreen Unit Alarms] Load Alarm Suppression Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const LoadAlarmSuppressionSuccess = createAction(\r\n '[Fullscreen Unit Alarms] Load Alarm Suppression Success',\r\n (suppression: AssetAlertSuppression) => ({ suppression })\r\n);\r\n\r\nexport const SaveAlarmSuppression = createAction(\r\n '[Fullscreen Unit Alarms] Save Alarm Suppression',\r\n (alarmId: number) => ({ alarmId })\r\n);\r\n\r\nexport const SaveAlarmSuppressionFail = createAction(\r\n '[Fullscreen Unit Alarms] Save Alarm Suppression Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const SaveAlarmSuppressionSuccess = createAction('[Fullscreen Unit Alarms] Save Alarm Suppression Success');\r\n\r\nexport const SaveAlarmSuppressionEnabled = createAction(\r\n '[Fullscreen Unit Alarms] Save Alarms Suppression Enabled',\r\n (alarmId: number, isSuppressionEnabled: boolean) => ({ alarmId, isSuppressionEnabled })\r\n);\r\n\r\nexport const SaveAlarmSuppressionEnabledFail = createAction(\r\n '[Fullscreen Unit Alarms] Save Alarms Suppression Enabled Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const SaveAlarmSuppressionEnabledSuccess = createAction(\r\n '[Fullscreen Unit Alarms] Save Alarms Suppression Enabled Success',\r\n (alarmId: number) => ({ alarmId })\r\n);\r\n\r\nexport const AcknowledgeAlarm = createAction(\r\n '[Fullscreen Unit Alarms] Acknowledge Alarm',\r\n (alarmHistoricalId: number, assetId: number) => ({ alarmHistoricalId, assetId })\r\n);\r\n\r\nexport const AcknowledgeAlarmSuccess = createAction('[Fullscreen Unit Alarms] Acknowledged Alarm Success');\r\n\r\nexport const AcknowledgeAlarmFail = createAction(\r\n '[Fullscreen Unit Alarms] Acknowledged Alarm Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const ToggleAlarmSuccess = createAction(\r\n '[Asset Alarms Notifications] Toggle Alarm Success',\r\n (alarmId: number) => ({ alarmId })\r\n);\r\n","import { createReducer, on } from '@ngrx/store'\r\nimport { cloneDeep } from 'lodash';\r\nimport { UnitAlarm } from '@rfv/modules/dashboard/modules/unit-alarms/models/unit-alarm.model';\r\nimport { AssetAlertSuppression } from '../../models/asset-alert-suppression.model';\r\nimport { unitAlarmsActions } from '../actions';\r\n\r\nexport interface UnitAlarmsFullscreenState {\r\n loading: boolean;\r\n loaded: boolean;\r\n initialized: boolean;\r\n savedUnitAlarms: UnitAlarm[];//alarms that are saved in db\r\n unitAlarms: UnitAlarm[];//alarms displayed in table\r\n\r\n isSuppressionLoading: boolean;\r\n isSuppressionLoaded: boolean;\r\n isSuppressionSaving: boolean;\r\n isSuppressionSaved: boolean;\r\n alertSuppression: AssetAlertSuppression;\r\n\r\n error: string;\r\n refresh: boolean;\r\n}\r\n\r\nconst initialState: UnitAlarmsFullscreenState = {\r\n loading: false,\r\n loaded: false,\r\n initialized: false,\r\n savedUnitAlarms: [],\r\n unitAlarms: [],\r\n\r\n isSuppressionLoading: false,\r\n isSuppressionLoaded: false,\r\n isSuppressionSaving: false,\r\n isSuppressionSaved: false,\r\n alertSuppression: null,\r\n\r\n error: '',\r\n refresh: true\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(unitAlarmsActions.Load, state => ({\r\n ...state,\r\n loading: true\r\n })),\r\n on(unitAlarmsActions.LoadSuccess, (state, { data }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n savedUnitAlarms: data,\r\n unitAlarms: data,\r\n error: ''\r\n })),\r\n on(unitAlarmsActions.LoadFail, (state, { errorMessage }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n unitAlarms: [],\r\n error: errorMessage\r\n })),\r\n on(unitAlarmsActions.Initialized, state => ({\r\n ...state,\r\n initialized: true\r\n })),\r\n on(unitAlarmsActions.Clear, state => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n initialized: false,\r\n unitAlarms: [],\r\n error: ''\r\n })),\r\n on(unitAlarmsActions.RefreshTurnedOn, state => ({\r\n ...state,\r\n refresh: true\r\n })),\r\n on(unitAlarmsActions.RefreshTurnedOff, state => ({\r\n ...state,\r\n refresh: false\r\n })),\r\n on(unitAlarmsActions.HideDisabledAlarms, state => ({\r\n ...state,\r\n unitAlarms: cloneDeep(state.savedUnitAlarms.filter(alarm => alarm.IsDisabled === false))\r\n })),\r\n on(unitAlarmsActions.ShowDisabledAlarms, state => ({\r\n ...state,\r\n unitAlarms: state.savedUnitAlarms\r\n })),\r\n on(\r\n unitAlarmsActions.SaveAlarmSuppressionEnabled,\r\n unitAlarmsActions.SaveAlarmSuppression, \r\n state => ({ ...state, isSuppressionSaving: true })\r\n ),\r\n on(\r\n unitAlarmsActions.SaveAlarmSuppressionEnabledFail,\r\n unitAlarmsActions.SaveAlarmSuppressionFail,\r\n (state, { errorMessage }) => ({\r\n ...state,\r\n isSuppressionSaving: false,\r\n isSuppressionSaved: false,\r\n error: errorMessage\r\n })\r\n ),\r\n on(unitAlarmsActions.SaveAlarmSuppressionSuccess, state => ({\r\n ...state,\r\n isSuppressionSaving: false,\r\n isSuppressionSaved: true\r\n })),\r\n on(unitAlarmsActions.SaveAlarmSuppressionEnabledSuccess, (state, { alarmId }) => ({\r\n ...state,\r\n isSuppressionSaving: false,\r\n isSuppressionSaved: true,\r\n savedUnitAlarms: state.savedUnitAlarms.map(alarm => {\r\n if (alarm.AlarmId === alarmId) {\r\n return {\r\n ...alarm,\r\n SuppressionEnabled: !alarm.SuppressionEnabled,\r\n }\r\n }\r\n else {\r\n return alarm;\r\n }\r\n })\r\n })),\r\n on(unitAlarmsActions.LoadAlarmSuppression, state => ({\r\n ...state,\r\n isSuppressionLoading: true\r\n })),\r\n on(unitAlarmsActions.LoadAlarmSuppressionFail, (state, { errorMessage }) => ({\r\n ...state,\r\n isSuppressionLoading: false,\r\n isSuppressionLoaded: false,\r\n error: errorMessage\r\n })),\r\n on(unitAlarmsActions.LoadAlarmSuppressionSuccess, (state, { suppression }) => ({\r\n ...state,\r\n isSuppressionLoading: false,\r\n isSuppressionLoaded: true,\r\n alertSuppression: suppression\r\n })),\r\n on(unitAlarmsActions.ToggleAlarmSuccess, (state, { alarmId }) => ({\r\n ...state,\r\n unitAlarms: state.unitAlarms.map(alarm => {\r\n if (alarm.AlarmId === alarmId)\r\n return {\r\n ...alarm,\r\n IsEnabled: !alarm.IsEnabled,\r\n }\r\n else return alarm;\r\n })\r\n }))\r\n);\r\n","import { createFeatureSelector, createSelector, ActionReducerMap } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromUnitAlarms from './unit-alarms.reducer';\r\nimport * as fromUnitAlarmsDrawer from './unit-alarms-drawer.reducer';\r\n\r\nexport interface UnitAlarmsState {\r\n unitAlarmsFullscreen: fromUnitAlarms.UnitAlarmsFullscreenState;\r\n unitAlarmsDrawer: fromUnitAlarmsDrawer.UnitAlarmsDrawerState;\r\n}\r\n\r\nexport interface State extends fromRoot.State {\r\n unitAlarms: UnitAlarmsState;\r\n}\r\n\r\nexport const alarmReducers: ActionReducerMap = {\r\n unitAlarmsFullscreen: fromUnitAlarms.reducer,\r\n unitAlarmsDrawer: fromUnitAlarmsDrawer.reducer\r\n};\r\n\r\nexport const getAlarmsState = createFeatureSelector('unitAlarms');\r\n\r\n// STATES\r\n// Unit Alarms State\r\nexport const getUnitAlarmsFullscreenState = createSelector(\r\n getAlarmsState,\r\n state => state.unitAlarmsFullscreen\r\n);\r\n\r\n// Unit Alarms Drawer State\r\nexport const getUnitAlarmsDrawerState = createSelector(\r\n getAlarmsState,\r\n state => state.unitAlarmsDrawer\r\n);\r\n\r\n// Alarm Full Screen\r\nexport const getUnitAlarms = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.unitAlarms\r\n);\r\n\r\nexport const getSavedUnitAlarms = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.savedUnitAlarms.slice().sort((a, b) => a.AlarmName.toLowerCase() < b.AlarmName.toLowerCase() ? -1 : 1)\r\n);\r\n\r\nexport const getTotalUnitAlarms = createSelector(\r\n getUnitAlarms,\r\n alarms => alarms && alarms.length\r\n);\r\n\r\nexport const getUnitAlarmsLoading = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.loading\r\n);\r\n\r\nexport const getUnitAlarmsLoaded = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.loaded\r\n);\r\n\r\nexport const getUnitAlarmsError = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.error\r\n);\r\n\r\nexport const getUnitAlarmsInitialized = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.initialized\r\n);\r\n\r\nexport const getUnitAlarmsFirstLoad = createSelector(\r\n getUnitAlarmsLoaded,\r\n getUnitAlarmsError,\r\n (loaded, error) => loaded || !!error\r\n);\r\n\r\nexport const getUnitAlarmsAutoRefresh = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.refresh\r\n);\r\n\r\n// Alarm Fullscreen Drawer\r\nexport const getAlarmDrawerIsOpen = createSelector(\r\n getUnitAlarmsDrawerState,\r\n state => state.isOpen\r\n);\r\n\r\nexport const getIsLookUpValueThreshold = createSelector(\r\n getUnitAlarmsDrawerState,\r\n state => state.isLookupValueThreshold\r\n);\r\n\r\nexport const getActiveDrawerType = createSelector(\r\n getUnitAlarmsDrawerState,\r\n state => state.activeDrawerType\r\n);\r\n\r\nexport const getAlarmDrawerSelectedAlarm = createSelector(\r\n getUnitAlarmsDrawerState,\r\n state => state.unitAlarm\r\n);\r\n\r\nexport const getAssetAlertSuppressionLoading = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.isSuppressionLoading\r\n);\r\n\r\nexport const getAssetAlertSuppressionSaving = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.isSuppressionSaving\r\n);\r\n\r\nexport const getAssetAlertSuppressionLoaded = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.isSuppressionLoaded\r\n);\r\nexport const getAssetAlertSuppression = createSelector(\r\n getUnitAlarmsFullscreenState,\r\n state => state.alertSuppression\r\n);\r\n","import { UnitAlarm } from '@rfv/modules/dashboard/modules/unit-alarms/models/unit-alarm.model';\r\nimport { unitAlarmsDrawerActions } from '../actions';\r\nimport { createReducer, on } from '@ngrx/store';\r\n\r\nexport interface UnitAlarmsDrawerState {\r\n unitAlarm: UnitAlarm;\r\n isOpen: boolean;\r\n activeDrawerType: string | null;\r\n isLookupValueThreshold: boolean;\r\n}\r\n\r\nconst initialState: UnitAlarmsDrawerState = {\r\n unitAlarm: undefined,\r\n isOpen: false,\r\n activeDrawerType: '',\r\n isLookupValueThreshold: false\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(unitAlarmsDrawerActions.Open, (state, { unitAlarm }) => ({\r\n ...state,\r\n isOpen: true,\r\n activeDrawerType: 'edit',\r\n unitAlarm: unitAlarm\r\n })),\r\n on(unitAlarmsDrawerActions.Close, state => ({\r\n ...state,\r\n isOpen: false,\r\n activeDrawerType: null,\r\n unitAlarm: undefined\r\n })),\r\n on(unitAlarmsDrawerActions.Add, state => ({\r\n ...state,\r\n isOpen: true,\r\n activeDrawerType: 'add'\r\n })),\r\n on(unitAlarmsDrawerActions.Suppression, state => ({\r\n ...state,\r\n isOpen: true,\r\n activeDrawerType: 'suppression'\r\n })),\r\n on(unitAlarmsDrawerActions.SetLookupValueThreshold, (state, { isLookupValueThreshold }) => ({\r\n ...state,\r\n isLookupValueThreshold: isLookupValueThreshold\r\n }))\r\n);\r\n","import { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\nimport { UserAccessActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\n/* NgRx */\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n/* Models */\r\nimport { BannerOptions } from '@rfv/modules/shared/model/banner.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n// Confirm modal, when canceling user access changes without saving.\r\nexport function cancelChangesPayload(user: User): fromRoot.Modal.ModalOptions {\r\n return {\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Discard changes',\r\n data: `Are you sure you want to discard all changes?`,\r\n primaryText: 'Yes',\r\n secondaryText: 'No',\r\n // primaryAction: new FeatureAccessEditActions.ResetEditedUserAccess(),\r\n primaryAction: UserAccessActions.SetEditedUser(user)\r\n };\r\n}\r\n\r\n// Banner after successful operation (save, edit, delete)\r\nexport function successPayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `Feature access was successfully ${operation}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\n// Banner after failed operation (save, edit, delete)\r\nexport function failPayload(operation: string, error: HttpErrorResponse): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `There was a problem ${operation} user access. Error: ${error.status}: ${error.statusText}`,\r\n };\r\n}\r\n","import { createAction } from '@ngrx/store';\r\nimport { Favorites } from '../models/favorites.model';\r\nimport { FavoritesUser } from '../models/favorite-user.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[Favorites] Load');\r\nexport const LoadFail = createAction('[Favorites] Load Favorites Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Favorites] Load Favorites Success', (favorites: Favorites[]) => ({ favorites }));\r\n\r\nexport const CreateFavorites = createAction('[Favorites] Start Create Favorites', (favorite: FavoritesUser, isDefault: boolean) => ({ favorite, isDefault }));\r\nexport const CreateFavoritesFail = createAction('[Favorites] Create Favorites Fail', (error: ApiError) => ({ error }));\r\nexport const CreateFavoritesSuccess = createAction('[Favorites] Create Favorites Success', (payload: FavoritesUser) => ({ payload }));\r\n\r\nexport const ToggleSetHome = createAction('[Favorites] Toggle Set Favorites As Home', (favoriteId: number) => ({ favoriteId }));\r\nexport const ToggleSetHomeFail = createAction('[Favorites] Toggle Set Favorites As Home Fail', (error: ApiError) => ({ error }));\r\nexport const ToggleSetHomeSuccess = createAction('[Favorites] Toggle Set Favorites As Home Success', (favoriteId: number) => ({ favoriteId }));\r\n\r\nexport const DeleteFavorites = createAction('[Favorites] Start Delete Favorites', (favoriteId: number) => ({ favoriteId }));\r\nexport const DeleteFavoritesFail = createAction('[Favorites] Delete Favorites Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteFavoritesSuccess = createAction('[Favorites] Delete Favorites Success', (favoriteId: number) => ({ favoriteId }));\r\n\r\nexport const CreateHomePage = createAction('[Favorites] Start Create Homepage', (favorite: FavoritesUser, isDefault: boolean) => ({ favorite, isDefault}));\r\nexport const CreateHomePageFail = createAction('[Favorites] Create Homepage Fail', (error: ApiError) => ({ error }));\r\nexport const CreateHomePageSuccess = createAction('[Favorites] Create Homepage Success', (favorite: FavoritesUser) => ({ favorite }));\r\n","\r\nimport { createAction } from \"@ngrx/store\";\r\n\r\nimport { JobTitle } from \"../models/job-title\";\r\n\r\n\r\nexport const Load = createAction(\"[JobTitle] Load\");\r\nexport const LoadFail = createAction(\"[JobTitle] Load Fail\", (error: Error) => ({ error }));\r\nexport const LoadSuccess = createAction(\"[JobTitle] Load Success\", (jobTitles: JobTitle[]) => ({ jobTitles }));\r\n\r\nexport const Save = createAction(\"[JobTitle] Save\", (jobTitle: JobTitle[]) => ({ jobTitle }));\r\nexport const SaveFail = createAction(\"[JobTitle] Save Fail\", (error: Error) => ({ error }));\r\nexport const SaveSuccess = createAction(\"[JobTitle] Save Success\");\r\n\r\nexport const Delete = createAction(\"[JobTitle] Delete\", (jobTitleId: number) => ({ jobTitleId }));\r\nexport const DeleteFail = createAction(\"[JobTitle] Delete Fail\", (error: Error) => ({ error }));\r\nexport const DeleteSuccess = createAction(\"[JobTitle] Delete Success\", (jobTitleId: number) => ({ jobTitleId }));\r\n\r\nexport const Replace = createAction(\"[JobTitle] Replace Job Title\", (newJobTitleId: number, oldJobTitleId: number) => ({ newJobTitleId, oldJobTitleId }));\r\nexport const ReplaceFail = createAction(\"[JobTitle] Replace Job Title Fail\", (error: Error) => ({ error }));\r\nexport const ReplaceSuccess = createAction(\"[JobTitle] Replace Job Title Success\");\r\n\r\nexport const CreateJobTitle = createAction(\"[JobTitle] Create Job Title\", (jobTitle: JobTitle) => ({ jobTitle }));\r\nexport const CreateJobTitleFail = createAction(\"[JobTitle] Create Job Title Fail\", (error: Error) => ({ error }));\r\nexport const CreateJobTitleSuccess = createAction(\"[JobTitle] Create Job Title Success\");\r\n","import { createAction } from '@ngrx/store';\r\n\r\n\r\nexport const SetDrawerId = createAction(\r\n '[UserDrawer] Set Drawer Id',\r\n (drawerId: number, id: number) => ({ drawerId, id })\r\n);\r\n\r\nexport const CloseDrawer = createAction('[UserDrawer] Close Drawer');\r\n\r\nexport const SetDrawerIdFail = createAction('[UserDrawer] Set Drawer Id Fail');\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models*/\r\nimport { UserDashboard } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-dashboard.model';\r\n\r\nexport const LoadAllDashboards = createAction('[Feature Access] Load All User Dashboards');\r\nexport const LoadAllDashboardsFail = createAction('[Feature Access] Load All User Dashboards Fail', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadAllDashboardsSuccess = createAction('[Feature Access] Load All User Dashboards Success', (userDashboards: UserDashboard[]) => ({ userDashboards }));\r\n\r\nexport const AddToDisplayedTiles = createAction('[Feature Access] Add To Displayed Tiles', (tile: any) => ({ tile }));\r\nexport const RemoveFromDisplayedTiles = createAction('[Feature Access] Remove From Displayed Tiles', (tile: any) => ({ tile }));\r\n\r\nexport const Clear = createAction('[Feature Access] Clear Feature Access');\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { UserNotificationSettings, UserNotificationSettingsRecipient } from '../models/user-notification-settings.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[UserNotificationSettings] Load',\r\n (userId: number) => ({ userId })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[UserNotificationSettings] Load Success',\r\n (userNotificationSettings: UserNotificationSettings) => ({ userNotificationSettings })\r\n);\r\n\r\nexport const LoadFailed = createAction(\r\n '[UserNotificationSettings] Load Failure',\r\n (error: ApiError) => ({ error })\r\n);\r\n\r\nexport const Save = createAction(\r\n '[UserNotificationSettings] Save',\r\n (userId: number, userNotificationSettings: UserNotificationSettings) => ({ userId, userNotificationSettings })\r\n);\r\n\r\nexport const SaveSuccess = createAction(\r\n '[UserNotificationSettings] Save Success',\r\n (userId: number, userNotificationSettings: UserNotificationSettings) => ({ userId, userNotificationSettings })\r\n);\r\n\r\nexport const SaveFail = createAction(\r\n '[UserNotificationSettings] Save Fail',\r\n (error: Error) => ({ error })\r\n);\r\n\r\nexport const SendTest = createAction(\r\n '[UserNotificationSettings] Send Test',\r\n (userNotificationSettingsRecipient: UserNotificationSettingsRecipient) => ({ userNotificationSettingsRecipient })\r\n);\r\n\r\nexport const SendTestSuccess = createAction(\r\n '[UserNotificationSettings] Send Test Success',\r\n (userNotificationSettingsRecipient: UserNotificationSettingsRecipient) => ({ userNotificationSettingsRecipient })\r\n);\r\n\r\nexport const SendTestFail = createAction(\r\n '[UserNotificationSettings] Send Test Fail',\r\n (error: Error) => ({ error })\r\n);\r\n\r\nexport const Select = createAction(\r\n '[UserNotificationSettings] Select',\r\n (alertScheduleId: number) => ({ alertScheduleId })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nexport const ResetEditedUserAccess = createAction('[Feature Access] Reset Edited User Access');\r\nexport const DashboardToggle = createAction('[Feature Access] Dashboard Toggle', (dashboardId: number) => ({ dashboardId }));\r\nexport const HomeDashboardToggle = createAction('[Feature Access] Home Dashboard Toggle', (dashboardId: number) => ({ dashboardId }));\r\n\r\nexport const TileToggle = createAction('[Feature Access] Tile Toggle', (tileId: number) => ({ tileId }));\r\nexport const PermissionToggle = createAction('[Feature Access] Permission Toggle', (checked: boolean, change: any) => ({ checked, change }));\r\nexport const AllDashboardsToggle = createAction('[Feature Access] All Dashboards Toggle');\r\nexport const ModifyAllDashboards = createAction('[Feature Access] Modify All Dashboards', (dashboardIds: number[]) => ({ dashboardIds }));\r\nexport const AllTilesToggle = createAction('[Feature Access] All Tiles Toggle');\r\n\r\nexport const ModifyAllTiles = createAction('[Feature Access] Modify All Tiles', (tiles: {[key: string]: number[]}) => ({ tiles }));\r\n\r\nexport const Clear = createAction('[Feature Access] Clear Feature Access Edit State');\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { ColorTheme } from '../models/color-theme.model';\r\n\r\nexport const loadColorTheme = createAction('[User Preferences] Load Color Themes');\r\n\r\nexport const loadColorThemeSuccess = createAction(\r\n '[User Preferences] Load Color Themes Success',\r\n props<{ colorThemes: ColorTheme[] }>()\r\n);\r\n\r\nexport const loadColorThemeFailure = createAction(\r\n '[User Preferences] Load Color Themes Failure',\r\n props<{ error: HttpErrorResponse }>()\r\n);\r\n","import { createAction } from '@ngrx/store';\r\n\r\n\r\nexport const Delete = createAction(\r\n '[Asset] Delete Notification Recipient',\r\n (userId: number, alertRecipientId: number, deleteOne: boolean, openModal: boolean) => ({ userId, alertRecipientId, deleteOne, openModal })\r\n);\r\n\r\nexport const DeleteAll = createAction(\r\n '[Asset] Delete aLL Notification RecipientS',\r\n (userId: number, openModal: boolean) => ({ userId, openModal })\r\n);\r\n\r\nexport const DeleteSuccess = createAction(\r\n '[Asset] Delete Notification Recipient Success',\r\n (userId: number, alertRecipientId: number) => ({ userId, alertRecipientId })\r\n);\r\n\r\nexport const DeleteAllSuccess = createAction(\r\n '[Asset] Delete All Notification Recipients Success',\r\n (userId: number) => ({ userId })\r\n);\r\n\r\nexport const DeleteFail = createAction(\r\n '[Asset] Delete Notification Recipient Fail',\r\n (error: Error) => ({ error })\r\n);\r\n\r\nexport const DeleteAllFail = createAction(\r\n '[Asset] Delete All Notification Recipients Fail',\r\n (error: Error) => ({ error })\r\n);\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n\r\nexport const LoadUserSchedules = createAction('[User Schedules] Load User Schedules');\r\n\r\nexport const LoadUserSchedulesSuccess = createAction(\r\n '[User Schedules] Load User Schedules Success',\r\n (reportSchedules: ReportSchedules[]) => ({ reportSchedules })\r\n);\r\n\r\nexport const LoadUserSchedulesFail = createAction(\r\n '[User Schedules] Load User Schedules Fail',\r\n (error: HttpErrorResponse) => ({ error })\r\n);\r\n\r\nexport const DeleteUserSchedule = createAction(\r\n '[User Schedules] Delete User Schedule',\r\n (id: number) => ({ id })\r\n);\r\n\r\nexport const DeleteUserScheduleSuccess = createAction('[User Schedules] Delete User Schedule Success');\r\n\r\nexport const DeleteUserScheduleFail = createAction(\r\n '[User Schedules] Delete User Schedule Fail',\r\n (error: HttpErrorResponse) => ({ error })\r\n);\r\n\r\nexport const ClearUserSchedules = createAction('[User Schedules] Clear User Schedules');\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { AssetNamePreference } from '../models/asset-name-preference.model';\r\n\r\nexport const LoadAssetNamePreference = createAction('[User Preferences] Load Asset Name Preferences');\r\n\r\nexport const LoadAssetNamePreferenceSuccess = createAction(\r\n '[User Preferences] Load Asset Name Preferences Success',\r\n props<{ assetNamePreferences: AssetNamePreference[] }>()\r\n);\r\n\r\nexport const LoadAssetNamePreferenceFailure = createAction(\r\n '[User Preferences] Load Asset Name Preferences Failure',\r\n props<{ error: HttpErrorResponse }>()\r\n);\r\n","\r\nimport { createAction } from '@ngrx/store';\r\nimport { UserUnitAccessFleet } from '../models/user-unit-access-fleet';\r\nimport { User } from '../models/user';\r\n\r\nexport const Loading = createAction('[Unit Access] Loading');\r\nexport const Loaded = createAction('[Unit Access] Loaded');\r\n\r\nexport const SitemapGroupSelected = createAction('[Unit Access] Sitemap Selected',\r\n (sitemapGroupId: number) => ({ sitemapGroupId }));\r\n\r\nexport const SitemapGroupPerpetualSelected = createAction('[Unit Access] Sitemap Perpetual Selected',\r\n (sitemapGroupId: number, selected: boolean) => ({ sitemapGroupId, selected }));\r\n\r\nexport const SitemapAccordionToggle = createAction('[Unit Access] Sitemap Accordion Toggle',\r\n (sitemapGroupId: number, isOpen: boolean) => ({ sitemapGroupId, isOpen }));\r\n\r\nexport const AssetsSelected = createAction('[Unit Access] Assets Selected',\r\n (assetIds: number[], selected: boolean) => ({ assetIds, selected }));\r\n\r\nexport const UserSelected = createAction('[Unit Access] User Selected',\r\n (user: User) => ({ user }));\r\n\r\nexport const UserGroupSelected = createAction('[Unit Access] User Group Selected',\r\n (userGroupId: number) => ({ userGroupId }));\r\n\r\nexport const FullAccessSelected = createAction('[Unit Access] Full Access Selected',\r\n (hasFullAccess: boolean) => ({ hasFullAccess }));\r\n\r\nexport const UserFleetLoad = createAction('[Unit Access] User Fleet Load',\r\n (selectedUserId: number) => ({ selectedUserId }));\r\n\r\nexport const UserFleetLoadSuccess = createAction('[Unit Access] User Fleet Load Success',\r\n (userFleetAccess: UserUnitAccessFleet) => ({ userFleetAccess }));\r\n\r\nexport const SessionUserFleetLoad = createAction('[Unit Access] SessionUser Fleet Load',\r\n(selectedUserId: number) => ({ selectedUserId }));\r\n\r\nexport const SessionUserFleetLoadSuccess = createAction('[Unit Access] SessionUser User Fleet Load Success',\r\n (userFleetAccess: UserUnitAccessFleet) => ({ userFleetAccess }));\r\n\r\nexport const UserFleetLoadError = createAction('[Unit Access] User Fleet Load Error',\r\n (error: string) => ({ error }));\r\n\r\nexport const UserFleetSave = createAction('[Unit Access] User Fleet Save');\r\n\r\nexport const UserFleetSaveSuccess = createAction('[Unit Access] User Fleet Save Success',\r\n (result: boolean) => ({ result }));\r\n\r\nexport const UserFleetSaveError = createAction('[Unit Access] User Fleet Save Error',\r\n (error: string) => ({ error }));\r\n\r\nexport const ClearUnitAccess = createAction('[Unit Access] Clear Unit Access');\r\n\r\nexport const Changes = createAction('[Unit Access] User Fleet Changes',\r\n (change: boolean) => ({ change }));\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { UserAccess } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-permissions.model';\r\nimport { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\n\r\nexport const SetEditedUser = createAction('[Feature Access] Set Edited User', (user: User) => ({ user }));\r\n\r\nexport const LoadUserAccess = createAction('[Feature Access] Load User Access', (userId: number) => ({ userId }));\r\nexport const LoadUserAccessFail = createAction('[Feature Access] Load User Access Fail', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadUserAccessSuccess = createAction('[Feature Access] Load User Access Success', (userAccess: UserAccess) => ({ userAccess }));\r\n\r\nexport const SaveUserAccess = createAction('[Feature Access] Save User Access');\r\nexport const SaveUserAccessFail = createAction('[Feature Access] Save User Access Fail', (error: HttpErrorResponse) => ({ error }));\r\nexport const SaveUserAccessSuccess = createAction('[Feature Access] Save User Access Success');\r\n\r\nexport const ClearEditedUser = createAction('[Feature Access] Clear Edited User');\r\n","import { createAction } from \"@ngrx/store\";\r\nimport { User } from \"../models/user\";\r\n\r\n\r\ninterface UserSearchFilter {\r\n searchString: string | null;\r\n userGroupId: number | null;\r\n jobTitleId: number | null;\r\n userStatusId: number | null;\r\n filterOutDisabled: boolean | null;\r\n}\r\n\r\nexport const InitialLoad = createAction(\"[UserSearch] Initial Load\");\r\n\r\nexport const InitialLoadSuccess = createAction(\r\n \"[UserSearch] Intial Load Success\",\r\n (results: User[]) => ({ results })\r\n);\r\n\r\nexport const InitialLoadFail = createAction(\r\n \"[UserSearch] Initial Load Fail\",\r\n (error: Error) => ({ error })\r\n);\r\n\r\nexport const Search = createAction(\r\n \"[UserSearch] Search\",\r\n (filters: UserSearchFilter) => ({ filters })\r\n);\r\n\r\nexport const SearchSuccess = createAction(\r\n \"[UserSearch] Search Success\",\r\n (results: User[]) => ({ results })\r\n);\r\n\r\nexport const SearchFail = createAction(\r\n \"[UserSearch] Search Fail\",\r\n (error: Error) => ({ error })\r\n);\r\n\r\nexport const AddSearchResult = createAction(\r\n \"[UserSearch] Add Search Result\",\r\n (result: User) => ({ result })\r\n);\r\n\r\nexport const Save = createAction(\r\n \"[UserSearch] Save\",\r\n (userId: number, user: User) => ({ userId, user })\r\n);\r\n\r\nexport const SaveSuccess = createAction(\r\n \"[UserSearch] Save Success\",\r\n (userId: number, user: User) => ({ userId, user })\r\n);\r\n\r\nexport const SaveFail = createAction(\r\n \"[UserSearch] Save Fail\",\r\n (userId: number, error: Error) => ({ userId, error })\r\n);\r\n\r\nexport const Select = createAction(\r\n \"[UserSearch] Select\",\r\n (userId: number) => ({ userId })\r\n);\r\n\r\nexport const SelectPrev = createAction(\"[UserSearch] Select Prev\");\r\n\r\nexport const SelectNext = createAction(\"[UserSearch] Select Next\");\r\n","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { UserNotificationActions } from './../actions';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport { successUserNotificationSettingsPayload } from '../user-banner-messages';\r\nimport { UserNotificationSettingsService } from '@rfv/modules/core/services/user-notification-settings.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserNotificationSettingsEffects {\r\n constructor(\r\n private userNotificationSettingsService: UserNotificationSettingsService,\r\n private actions$: Actions) {}\r\n \r\n public onLoad$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(UserNotificationActions.Load),\r\n switchMap(action => this.userNotificationSettingsService.get(action.userId).pipe(\r\n map(response => UserNotificationActions.LoadSuccess(response)),\r\n catchError(response => of(UserNotificationActions.LoadFailed(response)))\r\n ))\r\n )\r\n );\r\n\r\n \r\n public onUpdate$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(UserNotificationActions.Save),\r\n map(action => action),\r\n switchMap(payload => this.userNotificationSettingsService.save(payload.userId, payload.userNotificationSettings).pipe(\r\n map(response => UserNotificationActions.SaveSuccess(payload.userId, response)),\r\n catchError(response => of(UserNotificationActions.SaveFail(response)))\r\n ))\r\n )\r\n );\r\n\r\n \r\n public onSendTest$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(UserNotificationActions.SendTest),\r\n map(action => action.userNotificationSettingsRecipient),\r\n switchMap(test => this.userNotificationSettingsService.sendTest(test).pipe(\r\n map(response => UserNotificationActions.SendTestSuccess(test)),\r\n catchError(response => of(UserNotificationActions.SendTestFail(response)))\r\n ))\r\n )\r\n );\r\n\r\n \r\n public onSaveSuccess$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(UserNotificationActions.SaveSuccess),\r\n map(action => action),\r\n switchMap(payload => [\r\n UserNotificationActions.Load(payload.userId), \r\n fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('Changes Saved') })]\r\n )\r\n )\r\n );\r\n\r\n \r\n public onSendTestSuccess$ = createEffect(\r\n () => this.actions$.pipe(\r\n ofType(UserNotificationActions.SendTestSuccess),\r\n map(action => action.userNotificationSettingsRecipient),\r\n switchMap(recipient => [\r\n fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('Test Sent to ' + recipient.value) })]\r\n )\r\n )\r\n );\r\n\r\n}\r\n","export enum DrawerTypeIds {\r\n Profile = 1,\r\n NewUser = 2,\r\n NewUserGroup = 3,\r\n NewAlarmGroup = 4,\r\n NewAlertSchedule = 5,\r\n EditUserGroupRootSitemapGroup = 6,\r\n EditAlarmGroup = 7,\r\n EditAlertSchedule = 8\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { FavoritesActions } from '../actions';\r\nimport { Favorites } from '../models/favorites.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isAssigning: boolean;\r\n isAssigned: boolean;\r\n data: Favorites[];\r\n error: ApiError | null;\r\n}\r\n\r\nconst initialState: State = {\r\n isLoading: false,\r\n isLoaded: false,\r\n isAssigning: false,\r\n isAssigned: false,\r\n data: [],\r\n error: null\r\n};\r\n\r\nconst userFavoritesReducer = createReducer(\r\n initialState,\r\n\r\n on(FavoritesActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(FavoritesActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n error: error\r\n })),\r\n\r\n on(FavoritesActions.LoadSuccess, (state, { favorites }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: favorites,\r\n error: null\r\n })),\r\n\r\n on(FavoritesActions.CreateHomePage, (state) => ({\r\n ...state,\r\n isAssigning: true,\r\n isAssigned: false\r\n })),\r\n\r\n on(FavoritesActions.CreateHomePageFail, (state) => ({\r\n ...state,\r\n isAssigning: false,\r\n isAssigned: false\r\n })),\r\n\r\n on(FavoritesActions.CreateHomePageSuccess, (state) => ({\r\n ...state,\r\n isAssigning: false,\r\n isAssigned: true\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return userFavoritesReducer(state, action);\r\n}\r\n\r\nexport const getLoading = (state: State) => state.isLoading;\r\n\r\nexport const getLoaded = (state: State) => state.isLoaded;\r\n\r\nexport const getIsAssigning = (state: State) => state.isAssigning;\r\n\r\nexport const getIsAssigned = (state: State) => state.isAssigned;\r\n\r\nexport const getData = (state: State) => state.data;\r\n\r\nexport const getError = (state: State) => state.error;\r\n","import { createReducer, on, Action } from '@ngrx/store';\r\n\r\nimport { ColorTheme } from '../models/color-theme.model';\r\nimport { ColorThemeActions } from '../actions';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nexport interface State {\r\n loading: boolean;\r\n loaded: boolean;\r\n error: HttpErrorResponse;\r\n colorThemes: ColorTheme[];\r\n}\r\n\r\nconst initialState: State = {\r\n loading: false,\r\n loaded: false,\r\n error: null,\r\n colorThemes: [],\r\n};\r\n\r\nexport const colorThemesReducer = createReducer(\r\n initialState,\r\n on(ColorThemeActions.loadColorTheme, state => ({ ...state, loading: true })),\r\n on(ColorThemeActions.loadColorThemeSuccess, (state, { colorThemes }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n error: null,\r\n colorThemes: colorThemes\r\n })),\r\n on(ColorThemeActions.loadColorThemeFailure, (state, { error }) => ({ ...state, error }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return colorThemesReducer(state, action);\r\n}\r\n","import { EntityState, createEntityAdapter } from \"@ngrx/entity\";\r\nimport { UserSearchActions } from \"../actions\";\r\nimport * as CoreCustomerActions from \"@rfv/modules/core/store/customers/actions\";\r\n\r\nimport { User } from \"../models/user\";\r\nimport { createReducer, on } from \"@ngrx/store\";\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n initialResults: User[];\r\n\r\n // these attributes are relative to the selected entity\r\n isInitialLoading: boolean;\r\n isSearching: boolean;\r\n isSaving: boolean;\r\n isLoadFail: boolean;\r\n isLoaded: boolean;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: (User) => User.UserId,\r\n sortComparer: false,\r\n});\r\n\r\nconst initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n initialResults: null,\r\n\r\n isInitialLoading: false,\r\n isSearching: false,\r\n isSaving: false,\r\n isLoadFail: false,\r\n isLoaded: false,\r\n});\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(CoreCustomerActions.Select, state => (initialState)),\r\n on(UserSearchActions.InitialLoad, state => ({\r\n ...state,\r\n isInitialLoading: true,\r\n selectedId: null\r\n })),\r\n on(UserSearchActions.InitialLoadFail, state => ({\r\n ...state,\r\n isLoadFail: true,\r\n isInitialLoading: false,\r\n isLoaded: false\r\n })),\r\n on(UserSearchActions.InitialLoadSuccess, (state, { results }) => {\r\n return adapter.setAll(results, {\r\n ...state,\r\n initialResults: results,\r\n isInitialLoading: false,\r\n isLoaded: true,\r\n })\r\n }),\r\n on(UserSearchActions.Search, state => {\r\n return adapter.removeAll({\r\n ...state,\r\n isSearching: true,\r\n selectedId: null,\r\n });\r\n }),\r\n on(UserSearchActions.SearchSuccess, (state, { results }) => {\r\n return adapter.upsertMany(results, {\r\n ...state,\r\n isSearching: false,\r\n });\r\n }),\r\n on(UserSearchActions.SearchFail, state => ({\r\n ...state,\r\n isSearching: false\r\n })),\r\n on(UserSearchActions.AddSearchResult, (state, { result }) => {\r\n return adapter.upsertOne(result, {\r\n ...state,\r\n initialResults: [...state.initialResults, result] // ToDo: Why is there inital results for unitAccess??\r\n });\r\n }),\r\n on(UserSearchActions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n on(UserSearchActions.SaveFail, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n on(UserSearchActions.SaveSuccess, (state, { user }) => {\r\n return adapter.upsertOne(user, {\r\n ...state,\r\n isSaving: false,\r\n })\r\n }),\r\n on(UserSearchActions.Select, (state, { userId }) => ({\r\n ...state,\r\n selectedId: userId\r\n })),\r\n on(UserSearchActions.SelectNext, state => {\r\n let nextIdx = (state.ids).indexOf(state.selectedId) + 1;\r\n return {\r\n ...state,\r\n selectedId:\r\n nextIdx >= state.ids.length\r\n ? state.ids[0]\r\n : state.ids[nextIdx],\r\n };\r\n }),\r\n on(UserSearchActions.SelectPrev, state => {\r\n let prevIdx = (state.ids).indexOf(state.selectedId) - 1;\r\n return {\r\n ...state,\r\n selectedId:\r\n prevIdx < 0\r\n ? state.ids[state.ids.length - 1]\r\n : state.ids[prevIdx],\r\n };\r\n })\r\n);\r\n","\r\nimport { EntityState, createEntityAdapter } from \"@ngrx/entity\";\r\nimport { JobTitleActions } from \"../actions\";\r\n\r\nimport { JobTitle } from \"../models/job-title\";\r\nimport { Action, createReducer, on } from \"@ngrx/store\";\r\n\r\nexport interface State extends EntityState {\r\n selectedId: number;\r\n\r\n isLoading: boolean;\r\n isDeleting: boolean;\r\n isSaving: boolean;\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: JobTitle => JobTitle.Id,\r\n sortComparer: false\r\n});\r\n\r\nconst initialState: State = adapter.getInitialState({\r\n selectedId: null,\r\n\r\n isLoading: false,\r\n isDeleting: false,\r\n isSaving: false\r\n});\r\n\r\nconst jobTitleReducer = createReducer(\r\n initialState,\r\n\r\n on(JobTitleActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(JobTitleActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(JobTitleActions.LoadSuccess, (state, { jobTitles }) => adapter.upsertMany(jobTitles, {\r\n ...state,\r\n isLoading: false\r\n })),\r\n\r\n on(JobTitleActions.Delete, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(JobTitleActions.DeleteFail, (state) => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(JobTitleActions.DeleteSuccess, (state, { jobTitleId }) => adapter.removeOne(jobTitleId, {\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n on(JobTitleActions.Save, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(JobTitleActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(JobTitleActions.SaveSuccess, (state) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return jobTitleReducer(state, action);\r\n}\r\n","import { UserNotificationSettings } from '../models/user-notification-settings.model';\r\nimport { UserNotificationActions } from '../actions';\r\nimport { createReducer, on } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface UserNotificationSettingsState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isSaving: boolean;\r\n isSendingTest: boolean;\r\n error: ApiError;\r\n isDirty: boolean;\r\n settings: UserNotificationSettings;\r\n}\r\n\r\nconst initialState: UserNotificationSettingsState = {\r\n isLoading: false,\r\n isLoaded: false,\r\n isSaving: false,\r\n isSendingTest: false,\r\n error: null,\r\n isDirty: false,\r\n settings: null\r\n};\r\n\r\nexport const UserNotificationSettingseReducer = createReducer(\r\n initialState,\r\n on(UserNotificationActions.Load, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n on(UserNotificationActions.LoadSuccess, (state, { userNotificationSettings }) => ({\r\n ...state,\r\n settings: userNotificationSettings,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n on(UserNotificationActions.LoadFailed, (state,{ error}) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: error\r\n \r\n })),\r\n on(UserNotificationActions.Save, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n on(UserNotificationActions.SaveFail, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n on(UserNotificationActions.SaveSuccess, state => ({\r\n ...state,\r\n isSaving: false,\r\n isDirty: false\r\n })),\r\n on(UserNotificationActions.SendTest, state => ({\r\n ...state,\r\n isSendingTest: true\r\n })),\r\n on(UserNotificationActions.SendTestFail, state => ({\r\n ...state,\r\n isSendingTest: false\r\n })),\r\n on(UserNotificationActions.SendTestSuccess, state => ({\r\n ...state,\r\n isSendingTest: false\r\n }))\r\n);\r\n","import { AssetNotificationRecipientActions } from '../actions';\r\nimport { createReducer, on } from '@ngrx/store';\r\n\r\nexport interface AssetNotificationRecipientState {\r\n isDeleting: boolean;\r\n}\r\n\r\nconst initialState: AssetNotificationRecipientState = {\r\n isDeleting: false,\r\n};\r\n\r\nexport const AssetNotificationSettingsReducer = createReducer(\r\n initialState,\r\n on(AssetNotificationRecipientActions.Delete, state => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n on(AssetNotificationRecipientActions.DeleteSuccess, state => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n on(AssetNotificationRecipientActions.DeleteFail, state => ({\r\n ...state,\r\n isDeleting: false\r\n })),\r\n\r\n);\r\n","import { createReducer, on } from '@ngrx/store';\r\nimport { UserDrawerActions } from '../actions';\r\n\r\nexport interface State {\r\n selectedId: number,\r\n selectedDrawerId: number\r\n}\r\n\r\nconst initialState: State = {\r\n selectedId: null,\r\n selectedDrawerId: null\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(UserDrawerActions.SetDrawerId, (state, { drawerId, id }) => ({\r\n ...state,\r\n selectedDrawerId: drawerId,\r\n selectedId: id\r\n })),\r\n on(UserDrawerActions.CloseDrawer, state => ({\r\n ...state,\r\n selectedDrawerId: null,\r\n selectedId: null\r\n }))\r\n);\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/* NgRx */\r\nimport { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { FeatureAccessActions } from '../../actions';\r\n\r\n/* Models */\r\nimport { UserDashboard } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-dashboard.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface FeatureAccessState extends EntityState {\r\n displayedTiles: { [key: string]: number[] };\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: HttpErrorResponse;\r\n}\r\n\r\nexport const featureAccessAdapter: EntityAdapter = createEntityAdapter({\r\n selectId: dashboard => dashboard.Id,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: FeatureAccessState = featureAccessAdapter.getInitialState({\r\n displayedTiles: {},\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null\r\n});\r\n\r\nconst featureAccessReducer = createReducer(\r\n initialState,\r\n\r\n on(FeatureAccessActions.LoadAllDashboards, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(FeatureAccessActions.LoadAllDashboardsFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(FeatureAccessActions.LoadAllDashboardsSuccess, (state, { userDashboards }) => featureAccessAdapter.setAll(userDashboards, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n\r\n on(FeatureAccessActions.Clear, () => initialState)\r\n\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action) {\r\n return featureAccessReducer(state, action);\r\n}\r\n\r\n/* Selectors */\r\nexport const { selectAll, selectIds ,selectEntities,selectTotal} = featureAccessAdapter.getSelectors();\r\n\r\nexport const selectUserDashboards = selectAll;\r\nexport const selectUserDashboardsIds = selectIds;\r\n","import { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/* NgRx */\r\nimport * as UserAccessActions from '@rfv/modules/dashboard/modules/user-admin/store/actions/user-access.actions';\r\n\r\n/* Models */\r\nimport { UserAccess } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-permissions.model';\r\nimport { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface UserAccessState extends EntityState {\r\n editedUser: User;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isSaving: boolean;\r\n error: HttpErrorResponse;\r\n};\r\n\r\nexport const userAccessAdapter: EntityAdapter = createEntityAdapter({\r\n selectId: accessPermissions => accessPermissions.UserId,\r\n sortComparer: false\r\n});\r\n\r\nexport const initialState: UserAccessState = userAccessAdapter.getInitialState({\r\n editedUser: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n isSaving: false,\r\n error: null\r\n});\r\n\r\nconst editedUserReducer = createReducer(\r\n initialState,\r\n\r\n on(UserAccessActions.SetEditedUser, (state, { user }) => ({\r\n ...state,\r\n editedUser: user\r\n })),\r\n\r\n on(UserAccessActions.LoadUserAccess, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(UserAccessActions.LoadUserAccessFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(UserAccessActions.LoadUserAccessSuccess, (state, { userAccess }) => userAccessAdapter.upsertOne(userAccess, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n\r\n on(UserAccessActions.SaveUserAccess, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UserAccessActions.SaveUserAccessFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(UserAccessActions.SaveUserAccessSuccess, (state) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UserAccessActions.ClearEditedUser, () => initialState)\r\n\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action) {\r\n return editedUserReducer(state, action);\r\n}\r\n\r\n/* Selectors */\r\nexport const { selectIds, selectEntities } = userAccessAdapter.getSelectors();\r\n\r\nexport const selectLoadedUserIds = selectIds;\r\nexport const selectAccessEntities = selectEntities;\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { FeatureAccessEditActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { difference, uniq, concat, cloneDeep } from 'lodash';\r\n\r\nexport interface CurrentlyEditedState {\r\n dashboards: number[];\r\n tiles: {\r\n [key: string]: number[]\r\n };\r\n}\r\n\r\nexport const initialState: CurrentlyEditedState = {\r\n dashboards: [],\r\n tiles: {}\r\n};\r\n\r\nconst currentlyEditedReducer = createReducer(\r\n initialState,\r\n\r\n on(FeatureAccessEditActions.DashboardToggle, (state, { dashboardId }) => ({\r\n ...state,\r\n dashboards: state.dashboards.includes(dashboardId) ? state.dashboards.filter(stateDashboardId => stateDashboardId !== dashboardId) : [...state.dashboards, dashboardId]\r\n })),\r\n\r\n on(FeatureAccessEditActions.TileToggle, (state, { tileId }, { [tileId]: _, ...updatedTiles } = state.tiles) => ({\r\n ...state,\r\n tiles: state.tiles[tileId] ? updatedTiles : { ...state.tiles, [tileId]: [] }\r\n })),\r\n\r\n on(FeatureAccessEditActions.PermissionToggle, (state, { change, checked }, newState = cloneDeep(state)) => (\r\n Object.keys(change).forEach(tileId => {\r\n if (state.tiles[tileId]) {\r\n if (checked) {\r\n newState.tiles[tileId] = uniq(concat(newState.tiles[tileId], change[tileId]));\r\n } else {\r\n newState.tiles[tileId] = uniq(difference(newState.tiles[tileId], change[tileId]));\r\n }\r\n } else {\r\n newState.tiles[tileId] = [...change[tileId]]\r\n }\r\n }),\r\n {\r\n ...newState\r\n })),\r\n\r\n on(FeatureAccessEditActions.ModifyAllDashboards, (state, { dashboardIds }) => ({\r\n ...state,\r\n dashboards: dashboardIds\r\n })),\r\n\r\n on(FeatureAccessEditActions.ModifyAllTiles, (state, { tiles }) => ({\r\n ...state,\r\n tiles: tiles\r\n })),\r\n\r\n on(FeatureAccessEditActions.Clear, () => initialState)\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): CurrentlyEditedState {\r\n return currentlyEditedReducer(state, action);\r\n}","import { combineReducers } from '@ngrx/store';\r\nimport * as fromAvailableFeatureAccess from './available-feature-access.reducer';\r\nimport * as fromEditedUser from './edited-user.reducer';\r\nimport * as fromFeatureAccessEdit from './currently-edited.reducer';\r\n\r\nexport interface FeatureAccessState {\r\n availableAccess: fromAvailableFeatureAccess.FeatureAccessState;\r\n userAccess: fromEditedUser.UserAccessState;\r\n currentlyEdited: fromFeatureAccessEdit.CurrentlyEditedState;\r\n}\r\n\r\nexport function reducer(state, action) {\r\n return combineReducers({\r\n availableAccess: fromAvailableFeatureAccess.reducer,\r\n userAccess: fromEditedUser.reducer,\r\n currentlyEdited: fromFeatureAccessEdit.reducer\r\n })(state, action);\r\n}\r\n","import { difference, intersectionBy, union, groupBy } from 'lodash';\r\nimport { Asset, SitemapGroup, UserGroup } from '@rfv/modules/core/models';\r\nimport { AssetExtended, SitemapGroupExtended } from './models/user-unit-access.types';\r\nimport { UserUnitAccessFleet } from './models/user-unit-access-fleet';\r\nimport { Tree } from '@rfv/modules/core/models/tree';\r\nimport { User } from './models/user';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nexport function processSitemapGroupSelection(perpetualSitemapGroupIds: number[], changedSitemapGroupIds: number[], selected: boolean) {\r\n return processSelections(perpetualSitemapGroupIds, changedSitemapGroupIds, selected);\r\n}\r\n\r\nexport function processAssetsSelection(selectedAssetIds: number[], changedAssetIds: number[], selected: boolean) {\r\n return processSelections(selectedAssetIds, changedAssetIds, selected);\r\n}\r\n\r\nexport function hasUserFullAccess(fleetAccess: UserUnitAccessFleet) {\r\n if (fleetAccess && fleetAccess.perpetualAccessList && fleetAccess.perpetualAssetAccessList) {\r\n return (fleetAccess.perpetualAccessList.length === 0 && fleetAccess.perpetualAssetAccessList.length === 0)\r\n }\r\n return false;\r\n}\r\n\r\nexport function processAccordionToggle(expandedSitemapGroupIds: number[], sitemapGroupId: number, isOpen: boolean) {\r\n const modifiedExpandedSitemapGroupIds = [...expandedSitemapGroupIds];\r\n const index = expandedSitemapGroupIds.indexOf(sitemapGroupId);\r\n\r\n if (isOpen && index === -1) {\r\n modifiedExpandedSitemapGroupIds.push(sitemapGroupId);\r\n } else if (!isOpen && index !== -1) {\r\n modifiedExpandedSitemapGroupIds.splice(index, 1);\r\n }\r\n\r\n return [...modifiedExpandedSitemapGroupIds];\r\n}\r\n\r\n// Adds or Removes incoming Ids based on the selected flag\r\nfunction processSelections(current: number[], changed: number[], selected: boolean) {\r\n if (selected === true) {\r\n return union(current, changed);\r\n } else if (selected === false) {\r\n return difference(current, changed);\r\n }\r\n return [...current];\r\n}\r\n\r\n// creates sitemap tree for session user\r\nexport function createSitemapGroupTree(sessionUser: User, sitemapGroups: SitemapGroup[], currentSitemap?: number): Tree {\r\n if (sessionUser === null || sessionUser === undefined) {\r\n return;\r\n }\r\n\r\n const rootSitemapGroupId = currentSitemap ? currentSitemap : sessionUser.SitemapGroupId;\r\n\r\n let tree: Tree;\r\n const rootGroup = sitemapGroups.find(group => group.id === rootSitemapGroupId);\r\n\r\n if (rootGroup) {\r\n const sitemapsByParentId = groupBy(sitemapGroups, 'parentId');\r\n\r\n const rootGroupExtended = createSitemapExtended(rootGroup);\r\n rootGroupExtended.pathIds.push(rootGroup.id);\r\n rootGroupExtended.path = rootGroup.name;\r\n\r\n tree = { value: rootGroupExtended, parent: null, children: [] };\r\n\r\n buildTree(tree, sitemapsByParentId);\r\n }\r\n return tree;\r\n}\r\n\r\nfunction buildTree(tree: Tree, sitemapsByParentId: any) {\r\n\r\n const children: SitemapGroup[] = sitemapsByParentId[tree.value.id];\r\n if (children && children.length > 0) {\r\n\r\n children.forEach(child => {\r\n\r\n const childExtended = createSitemapExtended(child);\r\n childExtended.pathIds.push(...tree.value.pathIds, child.id);\r\n childExtended.path = tree.value.path.concat(`/${child.name}`);\r\n\r\n // create sub-tree and push\r\n const subTree: Tree = {\r\n value: childExtended,\r\n parent: tree,\r\n children: []\r\n };\r\n\r\n tree.children.push(subTree);\r\n\r\n // build child trees\r\n buildTree(subTree, sitemapsByParentId);\r\n });\r\n }\r\n\r\n return;\r\n}\r\n\r\nexport function getPerpetualChildrenSitemapGroups(\r\n tree: Tree,\r\n perpetualSitemapGroupIds: number[]\r\n): Set {\r\n\r\n const collectedSitemapGroupIds = [];\r\n\r\n perpetualSitemapGroupIds.forEach(sitemapGroupId => {\r\n const treeNode: Tree = findSitemapGroupTreeNodeById(tree, sitemapGroupId);\r\n if (treeNode) {\r\n collectChildSitemapGroupIds(treeNode, collectedSitemapGroupIds);\r\n }\r\n });\r\n\r\n const set = new Set(collectedSitemapGroupIds);\r\n return new Set(set);\r\n}\r\n\r\nfunction collectChildSitemapGroupIds(tree: Tree, sitemapGroupIds: number[]) {\r\n sitemapGroupIds.push(tree.value.id);\r\n\r\n tree.children.forEach(child => {\r\n collectChildSitemapGroupIds(child, sitemapGroupIds);\r\n });\r\n}\r\n\r\n// gets all assets there are in selected sitemap and all children sub-trees\r\nexport function getSitemapGroupChildrenAssets(\r\n tree: Tree,\r\n allAssets: Asset[],\r\n selectedSitemapGroupId: number,\r\n selectedAssets: number[]\r\n): AssetExtended[] {\r\n\r\n const childrenAssets: AssetExtended[] = [];\r\n\r\n if (tree && allAssets && selectedSitemapGroupId && selectedAssets) {\r\n\r\n // group assets by site map so we can pick it by its sitemap easily\r\n const assetsBySitemapId = groupBy(allAssets, 'sitemapGroupId');\r\n const treeNode: Tree = findSitemapGroupTreeNodeById(tree, selectedSitemapGroupId);\r\n\r\n // collect children assets\r\n if (treeNode) {\r\n collectChildrenAssets(childrenAssets, treeNode, assetsBySitemapId);\r\n }\r\n\r\n // map selected assets to a Set to speed up search\r\n const selectedAssetsMap = new Set(selectedAssets);\r\n\r\n // set asset selection type\r\n childrenAssets.forEach(asset => {\r\n asset.selected = selectedAssetsMap.has(asset.id);\r\n });\r\n }\r\n\r\n return childrenAssets;\r\n}\r\n\r\n// finds sitemap in the tree\r\nfunction findSitemapGroupTreeNodeById(tree: Tree, sitemapGroupId: number): Tree {\r\n let result = null;\r\n if (tree) {\r\n if (tree.value.id === sitemapGroupId) {\r\n return tree;\r\n }\r\n if (tree.children && tree.children.length > 0) {\r\n for (const child of tree.children) {\r\n result = findSitemapGroupTreeNodeById(child, sitemapGroupId);\r\n if (result !== null) {\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n// collects recursively assets from the tree\r\nfunction collectChildrenAssets(\r\n assets: AssetExtended[],\r\n treeNode: Tree,\r\n assetsBySitemapId: Dictionary\r\n) {\r\n if (treeNode) {\r\n const sitemapAssets = assetsBySitemapId[treeNode.value.id];\r\n\r\n if (sitemapAssets) {\r\n assets.push(...sitemapAssets.map(asset => {\r\n const assetExtended = createAssetExtended(asset);\r\n\r\n assetExtended.path = treeNode.value.path;\r\n assetExtended.pathIds = [...treeNode.value.pathIds];\r\n\r\n return assetExtended;\r\n }));\r\n }\r\n\r\n if (treeNode.children && treeNode.children.length > 0) {\r\n treeNode.children.forEach(subTree => {\r\n collectChildrenAssets(assets, subTree, assetsBySitemapId);\r\n });\r\n }\r\n }\r\n\r\n return;\r\n}\r\n\r\nexport function getUserSitemapGroupTree(\r\n tree: Tree,\r\n assets: Asset[],\r\n userGroups: Dictionary,\r\n userGroupId: number,\r\n perpetualSitemapGroups: number[],\r\n selectedAssets: number[],\r\n expandedAccordions: number[]\r\n): Tree {\r\n const treeExtended: Tree = { value: null, parent: null, children: [] };\r\n\r\n if (tree && assets && userGroups && userGroupId && perpetualSitemapGroups && selectedAssets) {\r\n\r\n const perpetualSitemapsSet = new Set(perpetualSitemapGroups);\r\n const selectedAssetsSet = new Set(selectedAssets);\r\n const expandedAccordionsSet = new Set(expandedAccordions);\r\n\r\n // map assets based on its sitemap \r\n const assetsBySitemapId: Dictionary = groupBy(assets, 'sitemapGroupId');\r\n\r\n // find root sitemap for selected user group\r\n const userGroupRootSitemap = userGroups[userGroupId];\r\n // find node for selected user group = new root to render\r\n const userGroupTree: Tree = findSitemapGroupTreeNodeById(tree, userGroupRootSitemap?.SiteMapGroupId);\r\n\r\n // go through tree and build new user tree\r\n if (userGroupTree) {\r\n\r\n const rootSitemapGroup = createSitemapExtended(userGroupTree.value);\r\n rootSitemapGroup.perpetual = perpetualSitemapsSet.has(userGroupTree.value.id);\r\n rootSitemapGroup.expanded = expandedAccordionsSet.has(userGroupTree.value.id);\r\n rootSitemapGroup.pathIds = [userGroupTree.value.id];\r\n rootSitemapGroup.path = userGroupTree.value.name;\r\n rootSitemapGroup.assets = getSitemapGroupAssets(userGroupTree.value.id, assetsBySitemapId);\r\n\r\n treeExtended.value = rootSitemapGroup;\r\n\r\n // setAssetsPaths(rootSitemapGroup);\r\n selectSelectedAssets(rootSitemapGroup.assets, selectedAssetsSet);\r\n\r\n buildUserTree(userGroupTree, treeExtended, perpetualSitemapsSet, selectedAssetsSet, expandedAccordionsSet, assetsBySitemapId);\r\n\r\n calculateTreeAssetCounts(treeExtended, assetsBySitemapId);\r\n culateSelectedAssetCounts(treeExtended);\r\n }\r\n }\r\n\r\n return treeExtended;\r\n}\r\n\r\nfunction selectSelectedAssets(assets: AssetExtended[], selectedAssets: Set) {\r\n assets.forEach(asset => asset.selected = selectedAssets.has(asset.id))\r\n}\r\n\r\nfunction buildUserTree(\r\n tree: Tree,\r\n treeExtended: Tree,\r\n perpetualSitemapsSet: Set,\r\n selectedAssetsSet: Set,\r\n expandedAccordionsSet: Set,\r\n assetsBySitemapId: Dictionary\r\n) {\r\n if (tree.children) {\r\n tree.children.forEach(child => {\r\n\r\n const childSitemap = createSitemapExtended(child.value);\r\n childSitemap.perpetual = perpetualSitemapsSet.has(child.value.id);\r\n childSitemap.expanded = expandedAccordionsSet.has(child.value.id);\r\n childSitemap.pathIds = [...treeExtended.value.pathIds, child.value.id];\r\n childSitemap.path = treeExtended.value.path.concat(`/${child.value.name}`);\r\n childSitemap.assets = getSitemapGroupAssets(child.value.id, assetsBySitemapId);\r\n\r\n // create sub-tree and push\r\n const subTree: Tree = {\r\n value: childSitemap,\r\n parent: treeExtended,\r\n children: []\r\n };\r\n\r\n treeExtended.children.push(subTree);\r\n\r\n // mark assets as selected\r\n selectSelectedAssets(childSitemap.assets, selectedAssetsSet);\r\n\r\n // build child trees\r\n buildUserTree(child, subTree, perpetualSitemapsSet, selectedAssetsSet, expandedAccordionsSet, assetsBySitemapId);\r\n });\r\n }\r\n}\r\n\r\nfunction calculateTreeAssetCounts(tree: Tree, assetsBySitemapId: Dictionary) {\r\n tree.value.allAssetsCount += assetsBySitemapId[tree.value.id] ? assetsBySitemapId[tree.value.id].length : 0;\r\n\r\n tree.children.forEach(subTree => {\r\n tree.value.allAssetsCount += calculateTreeAssetCounts(subTree, assetsBySitemapId);\r\n });\r\n\r\n return tree.value.allAssetsCount;\r\n}\r\n\r\n// calculates total number of selected assets in own sitemap and all child sitemaps\r\nfunction culateSelectedAssetCounts(tree: Tree) {\r\n tree.value.selectedAssetsCount = 0;\r\n\r\n if (tree.value.perpetual === true) {\r\n tree.value.selectedAssetsCount = tree.value.allAssetsCount;\r\n return tree.value.selectedAssetsCount;\r\n }\r\n\r\n tree.value.selectedAssetsCount += tree.value.assets.filter(asset => asset.selected === true).length;\r\n\r\n tree.children.forEach(subTree => {\r\n tree.value.selectedAssetsCount += culateSelectedAssetCounts(subTree);\r\n });\r\n\r\n return tree.value.selectedAssetsCount;\r\n}\r\n\r\nfunction getSitemapGroupAssets(sitemapGroupId: number, assetsBySitemapId: Dictionary) {\r\n return assetsBySitemapId[sitemapGroupId]\r\n ? assetsBySitemapId[sitemapGroupId].map(asset => createAssetExtended(asset))\r\n : [];\r\n}\r\n\r\nfunction createSitemapExtended(sitemapGroup: SitemapGroup): SitemapGroupExtended {\r\n return {\r\n ...sitemapGroup,\r\n assets: [],\r\n perpetual: false,\r\n expanded: false,\r\n allAssetsCount: 0,\r\n selectedAssetsCount: 0,\r\n pathIds: [],\r\n path: ''\r\n }\r\n}\r\n\r\nfunction createAssetExtended(asset: Asset): AssetExtended {\r\n return {\r\n ...asset,\r\n perpetual: false,\r\n selected: false,\r\n pathIds: [],\r\n path: ''\r\n }\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as UnitAccessActions from '../actions/unit-access.actions';\r\nimport * as CustomerUserAccessActions from '@rfv/modules/core/store/customer-user-access-filters/actions';\r\nimport * as unitAccessHelpers from '../unit-access.helpers';\r\n\r\n\r\nexport interface State {\r\n loading: boolean;\r\n loaded: boolean;\r\n isChanged: boolean;\r\n selectedUserId: number;\r\n selectedUserGroupId: number;\r\n selectedSitemapGroupId: number;\r\n expandedSitemapGroupIds: number[];\r\n CustomerUserAccessFilterId: number;\r\n\r\n sessionUserPerpetualSitemapGroups: number[];\r\n sessionUserSelectedAssets: number[];\r\n\r\n perpetualSitemapGroups: number[];\r\n selectedAssets: number[];\r\n hasFullAccess: boolean;\r\n\r\n //for loading spinners in unit access\r\n isUserFleetLoaded: boolean;\r\n isUserFleetLoading: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n loading: false,\r\n loaded: false,\r\n isChanged: false,\r\n selectedUserId: null,\r\n selectedUserGroupId: null,\r\n selectedSitemapGroupId: null,\r\n expandedSitemapGroupIds: [],\r\n CustomerUserAccessFilterId: null,\r\n\r\n sessionUserPerpetualSitemapGroups: [],\r\n sessionUserSelectedAssets: [],\r\n\r\n perpetualSitemapGroups: [],\r\n selectedAssets: [],\r\n hasFullAccess: false,\r\n\r\n isUserFleetLoaded: false,\r\n isUserFleetLoading: false\r\n};\r\n\r\nconst unitAccessReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitAccessActions.Loading, (state) => ({\r\n ...state,\r\n loading: true,\r\n loaded: false,\r\n })),\r\n on(UnitAccessActions.Loaded, (state) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true\r\n })),\r\n on(UnitAccessActions.SitemapGroupSelected, (state, { sitemapGroupId }) => ({\r\n ...state,\r\n selectedSitemapGroupId: sitemapGroupId\r\n })),\r\n on(UnitAccessActions.SitemapAccordionToggle, (state, { sitemapGroupId, isOpen }) => ({\r\n ...state,\r\n selectedSitemapGroupId: sitemapGroupId,\r\n expandedSitemapGroupIds: unitAccessHelpers.processAccordionToggle(state.expandedSitemapGroupIds, sitemapGroupId, isOpen)\r\n })),\r\n on(UnitAccessActions.UserSelected, (state, { user }) => ({\r\n ...state,\r\n isChanged: false,\r\n selectedUserId: user.UserId,\r\n selectedUserGroupId: user.UserGroupId,\r\n CustomerUserAccessFilterId: user.CustomerUserAccessFilterId,\r\n expandedSitemapGroupIds: []\r\n })),\r\n on(UnitAccessActions.UserGroupSelected, (state, { userGroupId }) => ({\r\n ...state,\r\n isChanged: true,\r\n selectedUserGroupId: userGroupId,\r\n selectedSitemapGroupId: null\r\n })),\r\n on(UnitAccessActions.FullAccessSelected, (state, { hasFullAccess }) => ({\r\n ...state,\r\n isChanged: true,\r\n hasFullAccess: hasFullAccess\r\n })),\r\n on(UnitAccessActions.UserFleetLoadSuccess, (state, { userFleetAccess }) => ({\r\n ...state,\r\n isChanged: false,\r\n perpetualSitemapGroups: userFleetAccess.perpetualAccessList,\r\n selectedAssets: userFleetAccess.perpetualAssetAccessList,\r\n hasFullAccess: unitAccessHelpers.hasUserFullAccess(userFleetAccess),\r\n expandedSitemapGroupIds: []\r\n\r\n })),\r\n on(UnitAccessActions.SessionUserFleetLoadSuccess, (state, { userFleetAccess }) => ({\r\n ...state,\r\n sessionUserPerpetualSitemapGroups: userFleetAccess.perpetualAccessList,\r\n sessionUserSelectedAssets: userFleetAccess.perpetualAssetAccessList,\r\n\r\n })),\r\n on(UnitAccessActions.UserFleetSaveSuccess, (state, { result }) => ({\r\n ...state,\r\n isChanged: false\r\n })),\r\n on(UnitAccessActions.SitemapGroupPerpetualSelected, (state, { sitemapGroupId, selected }) => ({\r\n ...state,\r\n isChanged: true,\r\n perpetualSitemapGroups: unitAccessHelpers.processSitemapGroupSelection(state.perpetualSitemapGroups, [sitemapGroupId], selected)\r\n })),\r\n on(UnitAccessActions.AssetsSelected, (state, { assetIds, selected }) => ({\r\n ...state,\r\n isChanged: true,\r\n selectedAssets: unitAccessHelpers.processAssetsSelection(state.selectedAssets, assetIds, selected)\r\n })),\r\n on(UnitAccessActions.ClearUnitAccess, (state, action) => ({\r\n ...state,\r\n ...initialState\r\n })),\r\n\r\n on(UnitAccessActions.Changes, (state, {change}) => ({\r\n ...state,\r\n isChanged: change,\r\n })),\r\n\r\n //for unit access spinners\r\n on(UnitAccessActions.UserFleetLoad, (state) => ({\r\n ...state,\r\n isUserFleetLoading: true,\r\n isUserFleetLoaded: false\r\n })),\r\n on(UnitAccessActions.UserFleetLoadSuccess, (state) => ({\r\n ...state,\r\n isUserFleetLoading: false,\r\n isUserFleetLoaded: true\r\n })),\r\n on(UnitAccessActions.UserFleetLoadError, (state) => ({\r\n ...state,\r\n isUserFleetLoading: false,\r\n isUserFleetLoaded: false\r\n })),\r\n on(CustomerUserAccessActions.deleteFilter, (state, {filterId}) => ({\r\n ...state,\r\n CustomerUserAccessFilterId: filterId\r\n })),\r\n on(CustomerUserAccessActions.deleteFilterSuccess, (state) => ({\r\n ...state,\r\n isChanged: false,\r\n CustomerUserAccessFilterId: null\r\n })),\r\n \r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitAccessReducer(state, action);\r\n}\r\n\r\n\r\n\r\n\r\n","import { UserSchedulesActions } from '../actions';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\nimport { createReducer, on } from '@ngrx/store';\r\n\r\nexport interface UserSchedulesState {\r\n loading: boolean;\r\n loaded: boolean;\r\n isDeleting: boolean;\r\n allData: ReportSchedules[];\r\n error: HttpErrorResponse | null;\r\n}\r\n\r\nconst initialState: UserSchedulesState = {\r\n loading: false,\r\n loaded: false,\r\n isDeleting: false,\r\n allData: [],\r\n error: null\r\n};\r\n\r\nexport const UserSchedulesReducer = createReducer(\r\n initialState,\r\n on(UserSchedulesActions.LoadUserSchedules, state => ({\r\n ...state,\r\n loading: true\r\n })),\r\n on(UserSchedulesActions.LoadUserSchedulesSuccess, (state, { reportSchedules }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n allData: reportSchedules,\r\n error: null\r\n })),\r\n on(UserSchedulesActions.LoadUserSchedulesFail, (state, { error }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n allData: [],\r\n error: error\r\n })),\r\n on(UserSchedulesActions.ClearUserSchedules, state => ({\r\n ...state,\r\n loaded: false,\r\n loading: false,\r\n allData: [],\r\n error: null\r\n }))\r\n);\r\n","import { createReducer, on, Action } from '@ngrx/store';\r\n\r\nimport { AssetNamePreference } from '../models/asset-name-preference.model';\r\nimport { AssetNamePreferenceActions } from '../actions';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nexport interface State {\r\n loading: boolean;\r\n loaded: boolean;\r\n error: HttpErrorResponse;\r\n assetNamePreferences: AssetNamePreference[];\r\n}\r\n\r\nconst initialState: State = {\r\n loading: false,\r\n loaded: false,\r\n error: null,\r\n assetNamePreferences: [],\r\n};\r\n\r\nexport const assetNamePreferencesReducer = createReducer(\r\n initialState,\r\n on(AssetNamePreferenceActions.LoadAssetNamePreference, state => ({ ...state, loading: true })),\r\n on(AssetNamePreferenceActions.LoadAssetNamePreferenceSuccess, (state, { assetNamePreferences }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n error: null,\r\n assetNamePreferences: assetNamePreferences\r\n })),\r\n on(AssetNamePreferenceActions.LoadAssetNamePreferenceFailure, (state, { error }) => ({ ...state, error }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assetNamePreferencesReducer(state, action);\r\n}\r\n","import * as _ from 'lodash';\r\n\r\nimport { combineReducers, createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport * as fromFavorites from './favorites.reducer';\r\n\r\nimport * as fromColorTheme from './color-themes.reducer';\r\nimport * as fromSearch from './user-search.reducer';\r\nimport * as fromJobTitles from './job-titles';\r\nimport * as fromUserNotificationSettings from './user-notification-settings.reducer';\r\nimport * as fromAssetNotificationRecipients from './asset-notification-recipients.reducer';\r\nimport * as fromUserDrawer from './user-drawer.reducer';\r\nimport * as fromFeatureAccess from './feature-access';\r\nimport * as fromAvailableAccess from './feature-access/available-feature-access.reducer';\r\nimport * as fromEditedUser from './feature-access/edited-user.reducer';\r\nimport * as fromUnitAccess from './unit-access.reducer';\r\nimport * as unitAccessHelpers from '../unit-access.helpers';\r\nimport * as fromUserSchedules from './user-schedules.reducer';\r\nimport * as fromAssetNamePreferences from './asset-name-preferences.reducer';\r\n\r\n/* lodash */\r\nimport { uniqBy, isEqual } from 'lodash';\r\n\r\nexport interface State {\r\n search: fromSearch.State;\r\n favorites: fromFavorites.State;\r\n jobTitles: fromJobTitles.State;\r\n userNotificationSettings: fromUserNotificationSettings.UserNotificationSettingsState;\r\n userDrawer: fromUserDrawer.State;\r\n featureAccess: fromFeatureAccess.FeatureAccessState;\r\n unitAccess: fromUnitAccess.State;\r\n userPreferences: fromColorTheme.State;\r\n assetNotificationRecipients: fromAssetNotificationRecipients.AssetNotificationRecipientState;\r\n userSchedules: fromUserSchedules.UserSchedulesState;\r\n assetNamePreferencesState: fromAssetNamePreferences.State;\r\n}\r\nexport function reducer(state, action) {\r\n return combineReducers({\r\n search: fromSearch.reducer,\r\n favorites: fromFavorites.reducer,\r\n jobTitles: fromJobTitles.reducer,\r\n userNotificationSettings: fromUserNotificationSettings.UserNotificationSettingseReducer,\r\n userDrawer: fromUserDrawer.reducer,\r\n featureAccess: fromFeatureAccess.reducer,\r\n unitAccess: fromUnitAccess.reducer,\r\n userPreferences: fromColorTheme.reducer,\r\n assetNotificationRecipients: fromAssetNotificationRecipients.AssetNotificationSettingsReducer,\r\n userSchedules: fromUserSchedules.UserSchedulesReducer,\r\n assetNamePreferencesState: fromAssetNamePreferences.reducer\r\n })(state, action);\r\n}\r\nexport const getState = createFeatureSelector('users');\r\n\r\n// fromUserDrawer\r\nexport const getUserDrawerState = createSelector(\r\n getState,\r\n state => state.userDrawer\r\n);\r\n\r\nexport const getIsUserDrawerOpen = createSelector(\r\n getUserDrawerState,\r\n state => !!state.selectedDrawerId\r\n);\r\n\r\nexport const getUserDrawerSelectedId = createSelector(\r\n getUserDrawerState,\r\n state => state.selectedDrawerId\r\n);\r\n\r\n// fromSearch\r\nexport const getSearchEntitiesState = createSelector(\r\n getState,\r\n state => state.search\r\n);\r\n\r\nexport const {\r\n selectIds: getSearchUserIds,\r\n selectEntities: getSearchUserEntities,\r\n selectAll: getAllSearchResults,\r\n selectTotal: getTotalSearchResults\r\n} = fromSearch.adapter.getSelectors(getSearchEntitiesState);\r\n\r\nexport const getRoutedUser = createSelector(\r\n fromRoot.Router.getRouteParam('userId'),\r\n getSearchUserEntities,\r\n (userId, entities) => userId && entities[userId]\r\n);\r\n\r\nexport const getIsSearchInitialLoading = createSelector(\r\n getSearchEntitiesState,\r\n state => state.isInitialLoading\r\n);\r\n\r\nexport const getIsSearchInitialLoaded = createSelector(\r\n getSearchEntitiesState,\r\n state => state.isLoaded\r\n);\r\n\r\nexport const getIsSearchInitialLoadingFail = createSelector(\r\n getSearchEntitiesState,\r\n state => state.isLoadFail\r\n);\r\n\r\nexport const getIsSearchSearching = createSelector(\r\n getSearchEntitiesState,\r\n state => state.isSearching\r\n);\r\n\r\nexport const getSearchSelectedUserId = createSelector(\r\n getSearchEntitiesState,\r\n state => state.selectedId\r\n);\r\n\r\nexport const getInitialUserResults = createSelector(\r\n getSearchEntitiesState,\r\n (search) => {\r\n if (search.initialResults && search.initialResults.length > 0) {\r\n return search.initialResults;\r\n }\r\n }\r\n);\r\n\r\nexport const getSearchSelectedUser = createSelector(\r\n getSearchUserEntities,\r\n getSearchSelectedUserId,\r\n (entities, selectedId) => selectedId && entities[selectedId]\r\n);\r\n\r\nexport const getIsSearchSaving = createSelector(\r\n getSearchEntitiesState,\r\n state => state.isSaving\r\n);\r\n\r\nexport const getUserById = (userId: number) => createSelector(\r\n getSearchUserEntities,\r\n (entities) => entities[userId]\r\n);\r\n\r\n\r\n// fromUserNotificationSettings\r\nexport const getUserNotificationSettingsState = createSelector(\r\n getState,\r\n state => state.userNotificationSettings\r\n);\r\n\r\nexport const getIsUserNotificationSettingsLoading = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.isLoading\r\n);\r\nexport const getUserNotificationSettingsError = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.error\r\n);\r\n\r\nexport const getIsUserNotificationSettingsLoaded = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.isLoaded\r\n);\r\n\r\nexport const getUserNotificationSettings = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.settings\r\n);\r\n\r\nexport const getIsUserNotificationSettingsSaving = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.isSaving\r\n);\r\n\r\nexport const getIsUserNotificationSendingTest = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.isSendingTest\r\n);\r\n\r\nexport const getIsUserNotificationSettingsDirty = createSelector(\r\n getUserNotificationSettingsState,\r\n state => state.isDirty\r\n);\r\n\r\n// fromFavorites\r\nexport const getAssetNotificationRecipients = createSelector(\r\n getState,\r\n state => state.assetNotificationRecipients\r\n);\r\n\r\nexport const getAssetNotificationRecipientsIsDeleting = createSelector(\r\n getAssetNotificationRecipients,\r\n state => state.isDeleting\r\n);\r\n\r\n// fromFavorites\r\nexport const getFavorites = createSelector(\r\n getState,\r\n state => state.favorites\r\n);\r\n\r\nexport const getFavoritesIsLoading = createSelector(\r\n getFavorites,\r\n fromFavorites.getLoading\r\n);\r\n\r\nexport const getFavoritesIsLoaded = createSelector(\r\n getFavorites,\r\n fromFavorites.getLoaded\r\n);\r\n\r\nexport const getIsAssigning = createSelector(\r\n getFavorites,\r\n fromFavorites.getIsAssigning\r\n);\r\n\r\nexport const getFavoritesData = createSelector(\r\n getFavorites,\r\n fromFavorites.getData\r\n);\r\n\r\nexport const getFavoritesError = createSelector(\r\n getFavorites,\r\n fromFavorites.getError\r\n);\r\n\r\nexport const getFavoriteId = createSelector(\r\n getFavoritesData,\r\n fromDashboard.getSelectedDashboardId,\r\n fromDashboard.getSelectedSitemapGroupId,\r\n fromDashboard.getSelectedAssetId,\r\n fromDashboard.getSelectedTileId,\r\n (favorites, selectedDashboardId, selectedSitemapGroupId, selectedAssetId, selectedTileId) => {\r\n const favoriteAssetObject = (selectedAssetId || selectedSitemapGroupId) && favorites.find(favorite =>\r\n favorite[(selectedAssetId ? 'Asset' : 'SitemapGroup') + 'Id'] === (selectedAssetId ? selectedAssetId : selectedSitemapGroupId));\r\n const favoriteDashboard = favoriteAssetObject ?\r\n favoriteAssetObject.Dashboards.find(dashboard => dashboard.Id === selectedDashboardId) : null;\r\n\r\n if (favoriteAssetObject && favoriteDashboard) {\r\n const dashboardTiles = favoriteDashboard.Tiles.find(tile => tile.Id === selectedTileId);\r\n\r\n return selectedTileId ? (dashboardTiles && dashboardTiles.FavoriteId) : favoriteDashboard.FavoriteId;\r\n }\r\n\r\n return null;\r\n }\r\n);\r\n\r\nexport const getFavoriteObj = createSelector(\r\n getFavoritesData,\r\n fromDashboard.getSelectedDashboardId,\r\n fromDashboard.getSelectedSitemapGroupId,\r\n fromDashboard.getSelectedAssetId,\r\n fromDashboard.getSelectedTileId,\r\n (favorites, selectedDashboardId, selectedSitemapGroupId, selectedAssetId, selectedTileId) => {\r\n const favoriteAssetObject = (selectedAssetId || selectedSitemapGroupId) && favorites.find(favorite =>\r\n favorite[(selectedAssetId ? 'Asset' : 'SitemapGroup') + 'Id'] === (selectedAssetId ? selectedAssetId : selectedSitemapGroupId));\r\n const favoriteDashboard = favoriteAssetObject ?\r\n favoriteAssetObject.Dashboards.find(dashboard => dashboard.Id === selectedDashboardId) : null;\r\n\r\n if (favoriteAssetObject && favoriteDashboard) {\r\n const dashboardTiles = favoriteDashboard.Tiles.find(tile => tile.Id === selectedTileId);\r\n\r\n return selectedTileId ? (dashboardTiles && dashboardTiles) : favoriteDashboard;\r\n }\r\n\r\n return null;\r\n }\r\n);\r\n\r\n// fromJobTitles\r\nexport const getJobTitleState = createSelector(getState, state => state.jobTitles);\r\n\r\nexport const getIsDeleting = createSelector(getJobTitleState, state => state.isDeleting);\r\nexport const getIsLoading = createSelector(getJobTitleState, state => state.isLoading);\r\nexport const getIsSaving = createSelector(getJobTitleState, state => state.isSaving);\r\n\r\nexport const {\r\n selectIds: getJobTitleIds,\r\n selectEntities: getJobTitleEntities,\r\n selectAll: getAllJobTitles,\r\n selectTotal: getTotalJobTitles\r\n} = fromJobTitles.adapter.getSelectors(getJobTitleState);\r\n\r\nexport const getAllJobTitlesOrderByName = createSelector(getAllJobTitles, jobTitles => jobTitles.sort((a, b) => a.Name.localeCompare(b.Name)));\r\n\r\n// Feature Access\r\nexport const getFeatureAccessState = createSelector(\r\n getState,\r\n state => state.featureAccess\r\n);\r\n\r\nexport const getAvailableAccess = createSelector(\r\n getFeatureAccessState,\r\n state => state.availableAccess\r\n);\r\n\r\nexport const getUserAccess = createSelector(\r\n getFeatureAccessState,\r\n state => state.userAccess\r\n);\r\n\r\nexport const getCurrentlyEdited = createSelector(\r\n getFeatureAccessState,\r\n state => state.currentlyEdited\r\n);\r\n\r\nexport const getUserDashboards = createSelector(\r\n getAvailableAccess,\r\n fromAvailableAccess.selectUserDashboards\r\n);\r\n\r\nexport const getUserDashboardsIds = createSelector(\r\n getAvailableAccess,\r\n fromAvailableAccess.selectUserDashboardsIds\r\n);\r\n\r\nexport const getEditedUser = createSelector(\r\n getUserAccess,\r\n ({ editedUser }) => editedUser && ({ ...editedUser, fullName: editedUser.FirstName + ' ' + editedUser.LastName })\r\n);\r\n\r\nexport const getEditedUserId = createSelector(\r\n getEditedUser,\r\n state => state && state.UserId\r\n);\r\n\r\nexport const getLoadedUserIds = createSelector(\r\n getUserAccess,\r\n fromEditedUser.selectLoadedUserIds\r\n);\r\n\r\nexport const getAllUsersEntities = createSelector(\r\n getUserAccess,\r\n fromEditedUser.selectAccessEntities\r\n);\r\n\r\nexport const getUserAccessLoading = createSelector(\r\n getUserAccess,\r\n state => state.isLoading\r\n);\r\n\r\nexport const getUserAccessLoaded = createSelector(\r\n getUserAccess,\r\n state => state.isLoaded\r\n);\r\n\r\nexport const getUserAccessSaving = createSelector(\r\n getUserAccess,\r\n state => state.isSaving\r\n);\r\n\r\nexport const getEditedUserAccess = createSelector(\r\n getAllUsersEntities,\r\n getEditedUserId,\r\n (allUsersAccess, selectedUserId) => allUsersAccess[selectedUserId]\r\n);\r\n\r\nexport const getEditedUserSavedDashboards = createSelector(\r\n getEditedUserAccess,\r\n state => state && state.Dashboards\r\n);\r\n\r\nexport const getEditedUserCurrentDashboards = createSelector(\r\n getCurrentlyEdited,\r\n state => state.dashboards\r\n);\r\n\r\nexport const getEditedUserCurrentTiles = createSelector(\r\n getCurrentlyEdited,\r\n state => state.tiles\r\n);\r\n\r\nexport const getDisplayedTiles = createSelector(\r\n getUserDashboards,\r\n getEditedUserCurrentDashboards,\r\n (allDashboards, selectedDashboards) => {\r\n let displayedTiles = [];\r\n\r\n allDashboards.forEach(dashboard => {\r\n if (selectedDashboards.includes(dashboard.Id) && dashboard?.Tiles?.length) {\r\n displayedTiles = [\r\n ...displayedTiles,\r\n ...dashboard.Tiles\r\n ];\r\n }\r\n });\r\n\r\n return displayedTiles.length ? displayedTiles : [];\r\n }\r\n);\r\n\r\nexport const getDisplayedDashboards = createSelector(\r\n getUserDashboards,\r\n getEditedUserCurrentDashboards,\r\n getDisplayedTiles,\r\n (allDashboards, dashboardsIds, displayedTiles) => {\r\n\r\n let displayedDashboards = [];\r\n allDashboards.forEach(dashboard => {\r\n {\r\n if (dashboardsIds.indexOf(dashboard.Id) > -1) {\r\n let displayed = true;\r\n dashboard?.Tiles?.forEach(tile => {\r\n if (!displayedTiles.some(x => x.Id === tile.Id)) {\r\n displayed = false;\r\n }\r\n });\r\n if (displayed && dashboard?.Tiles?.length > 0) {\r\n displayedDashboards = [\r\n ...displayedDashboards,\r\n ...[dashboard],\r\n ];\r\n }\r\n }\r\n }\r\n });\r\n\r\n return displayedDashboards.length ? uniqBy(displayedDashboards, 'Id') : [];\r\n }\r\n);\r\n\r\nexport const getDisplayedTilesAsObj = createSelector(\r\n getDisplayedTiles,\r\n tiles => {\r\n const allDisplayedTiles = {};\r\n\r\n tiles.forEach(tile => allDisplayedTiles[tile.Id] = tile.Permissions.map(p => p.Id));\r\n return allDisplayedTiles;\r\n }\r\n);\r\n\r\nexport const getIsChangedAccess = createSelector(\r\n getEditedUserAccess,\r\n getCurrentlyEdited,\r\n (saved, edited) => {\r\n if (saved && edited) {\r\n return !isEqual([...saved.Dashboards].sort(), [...edited.dashboards].sort()) || !isEqual(saved.Tiles, edited.tiles);\r\n } else {\r\n return false;\r\n }\r\n }\r\n);\r\n\r\nexport const getAllDashboardsSelected = createSelector(\r\n getUserDashboardsIds,\r\n getEditedUserCurrentDashboards,\r\n (available, selected) => isEqual([...available].sort(), [...selected].sort())\r\n);\r\n\r\nexport const getAllTilesSelected = createSelector(\r\n getDisplayedTilesAsObj,\r\n getEditedUserCurrentTiles,\r\n (displayed, selected) => isEqual(displayed, selected)\r\n);\r\n\r\n// User preferences (Color theme)\r\nexport const getUserPreferences = createSelector(\r\n getState,\r\n userState => userState.userPreferences\r\n);\r\n\r\nexport const getColorThemes = createSelector(\r\n getUserPreferences,\r\n userState => userState.colorThemes\r\n);\r\n\r\nexport const getColorThemesLoading = createSelector(\r\n getUserPreferences,\r\n userState => userState.loading\r\n);\r\n\r\nexport const getColorThemesLoaded = createSelector(\r\n getUserPreferences,\r\n userState => userState.loaded\r\n);\r\n\r\nexport const getColorThemesError = createSelector(\r\n getUserPreferences,\r\n userState => userState.error\r\n);\r\n\r\n// Get Asset Name Preferences\r\nexport const getAssetNamePreferenceState = createSelector(\r\n getState,\r\n userState => userState.assetNamePreferencesState\r\n);\r\n\r\nexport const getAssetNamePreferences = createSelector(\r\n getAssetNamePreferenceState,\r\n userState => userState.assetNamePreferences\r\n);\r\n\r\nexport const getUserAssetNamePreferencesLoading = createSelector(\r\n getAssetNamePreferenceState,\r\n userState => userState.loading\r\n);\r\n\r\nexport const getUserAssetNamePreferencesLoaded = createSelector(\r\n getAssetNamePreferenceState,\r\n userState => userState.loaded\r\n);\r\n\r\nexport const getUserAssetNamePreferencesError = createSelector(\r\n getAssetNamePreferenceState,\r\n userState => userState.error\r\n);\r\n\r\n// Unit Access //\r\nexport const getUnitAccessState = createSelector(\r\n getState,\r\n state => state.unitAccess\r\n);\r\n\r\nexport const getIsUnitAccessChanged = createSelector(\r\n getUnitAccessState,\r\n state => state.isChanged\r\n);\r\n\r\nexport const getUnitAccessLoading = createSelector(\r\n getUnitAccessState,\r\n state => state.loading\r\n);\r\n\r\nexport const getUnitAccessLoaded = createSelector(\r\n getUnitAccessState,\r\n state => state.loaded\r\n);\r\n\r\nexport const getUnitAccessSelectedSitemapGroupId = createSelector(\r\n getUnitAccessState,\r\n state => state.selectedSitemapGroupId\r\n);\r\n\r\nexport const getExpandedAccordionSitemaps = createSelector(\r\n getUnitAccessState,\r\n state => state.expandedSitemapGroupIds\r\n);\r\n\r\nexport const getUnitAccessPerpetualSitemapGroups = createSelector(\r\n getUnitAccessState,\r\n state => state.perpetualSitemapGroups\r\n);\r\n\r\nexport const getUnitAccessSessionUserPerpetualSitemapGroups = createSelector(\r\n getUnitAccessState,\r\n state => state.sessionUserPerpetualSitemapGroups\r\n);\r\n\r\nexport const getUnitAccessSelectedAssets = createSelector(\r\n getUnitAccessState,\r\n state => state.selectedAssets\r\n);\r\n\r\nexport const getUnitAccessSessionUserSelectedAssets = createSelector(\r\n getUnitAccessState,\r\n state => state.sessionUserSelectedAssets\r\n);\r\n\r\nexport const getUnitAccessSelectedUserId = createSelector(\r\n getUnitAccessState,\r\n state => state.selectedUserId\r\n);\r\n\r\nexport const getCustomerUserAccessFilterId = createSelector(\r\n getUnitAccessState,\r\n state => state.CustomerUserAccessFilterId\r\n);\r\n\r\nexport const getIsCurrentUserFiltered = createSelector(\r\n fromCore.UserSession.getSession,\r\n (session) => session?.CustomerUserAccessFilterId > 0\r\n);\r\n\r\nexport const getUnitAccessSelectedUserGroupId = createSelector(\r\n getUnitAccessState,\r\n state => state.selectedUserGroupId\r\n);\r\n\r\nexport const getHasFullAccess = createSelector(\r\n getUnitAccessState,\r\n state => state.hasFullAccess\r\n);\r\n\r\nexport const getSessionUserHasFullAccess = createSelector(\r\n getUnitAccessState,\r\n state => {\r\n const isRestrictedSitemap = state.sessionUserPerpetualSitemapGroups && state.sessionUserPerpetualSitemapGroups.length > 0;\r\n const isRestrictedAsset = state.sessionUserSelectedAssets && state.sessionUserSelectedAssets.length > 0;\r\n\r\n return (!isRestrictedSitemap && !isRestrictedAsset);\r\n }\r\n);\r\n\r\nexport const getSitemapTree = createSelector(\r\n fromCore.UserSession.getSession,\r\n fromCore.SitemapGroups.getAll,\r\n (sessionUser, sitemapGroups) => unitAccessHelpers.createSitemapGroupTree(sessionUser, sitemapGroups)\r\n);\r\n\r\nexport const getAlarmEditorSitemapTree = createSelector(\r\n fromCore.UserSession.getSession,\r\n fromCore.SitemapGroups.getAll,\r\n fromDashboard.getSelectedSitemapGroupId,\r\n (sessionUser, sitemapGroups, selectedSitemapGroupId) => unitAccessHelpers.createSitemapGroupTree(sessionUser, sitemapGroups, selectedSitemapGroupId)\r\n);\r\n\r\nexport const getSitemapTreeName = createSelector(\r\n getAlarmEditorSitemapTree,\r\n (siteMapeTree) => siteMapeTree.value.name\r\n)\r\n\r\nexport const getUnitAccessPerpetualChildrenSitemapGroups = createSelector(\r\n getSitemapTree,\r\n getUnitAccessPerpetualSitemapGroups,\r\n (tree, perpetualSitemapGroupIds) => unitAccessHelpers.getPerpetualChildrenSitemapGroups(tree, perpetualSitemapGroupIds)\r\n);\r\n\r\nexport const getUnitAccessSessionUserPerpetualChildrenSitemapGroups = createSelector(\r\n getSitemapTree,\r\n getUnitAccessSessionUserPerpetualSitemapGroups,\r\n (tree, sessionPerpetualSitemapGroupIds) => unitAccessHelpers.getPerpetualChildrenSitemapGroups(tree, sessionPerpetualSitemapGroupIds)\r\n);\r\n\r\n\r\nexport const getSitemapGroupChildrenAssets = createSelector(\r\n getSitemapTree,\r\n fromCore.Assets.Entities.getAll,\r\n getUnitAccessSelectedSitemapGroupId,\r\n getUnitAccessSelectedAssets,\r\n (tree, allAssets, sitemapGroupId, selectedAssets) => {\r\n return unitAccessHelpers.getSitemapGroupChildrenAssets(tree, allAssets, sitemapGroupId, selectedAssets);\r\n }\r\n);\r\n\r\nexport const getUserSitemapGroupTree = createSelector(\r\n getSitemapTree,\r\n fromCore.Assets.Entities.getAll,\r\n fromCore.UserGroups.getEntities,\r\n getUnitAccessSelectedUserGroupId,\r\n getUnitAccessPerpetualSitemapGroups,\r\n getUnitAccessSelectedAssets,\r\n getExpandedAccordionSitemaps,\r\n (sitemapTree, assets, userGroups, userGroupId, perpetualSitemapGroups, selectedAssets, expandedAccordions) => {\r\n return unitAccessHelpers.getUserSitemapGroupTree(\r\n sitemapTree, assets, userGroups, userGroupId, perpetualSitemapGroups, selectedAssets, expandedAccordions\r\n );\r\n }\r\n);\r\n\r\nexport const getUnitAccessUserSitemapGroupTree = createSelector(\r\n getUnitAccessState,\r\n state => state.selectedAssets\r\n);\r\n\r\nexport const getUserSchedules = createSelector(\r\n getState,\r\n state => state.userSchedules\r\n);\r\n\r\nexport const getUserSchedulesData = createSelector(\r\n getUserSchedules,\r\n state => state.allData\r\n);\r\n\r\nexport const getIsUserFleetLoading = createSelector(\r\n getState,\r\n state => state.unitAccess.isUserFleetLoading\r\n);\r\n\r\nexport const getIsUserFleetLoaded = createSelector(\r\n getState,\r\n state => state.unitAccess.isUserFleetLoaded\r\n);","/* Models */\r\nimport { BannerOptions } from '@rfv/modules/shared/model/banner.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/*\r\n * Functions with messages and actions to send as payload to banner\r\n */\r\n\r\n// Banner after successful operation (save, edit, delete)\r\nexport function successAlarmGroupPayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `Alarm group was ${operation}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\nexport function successAlertSchedulePayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `Alert schedule was ${operation}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\n// Banner after failed operation (save, edit, delete)\r\nexport function failPayload(operation: string, error: HttpErrorResponse): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `There was a problem with ${operation}. Error: ${error.status}: ${error.statusText}`,\r\n };\r\n}\r\n\r\nexport function successUserNotificationSettingsPayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `${operation}`,\r\n autoClose: 3000\r\n };\r\n}\r\n","import { createAction } from '@ngrx/store';\r\nimport { SitemapGroup } from '@rfv/modules/core/models';\r\nimport { ApiError, User } from '@rfv/modules/core/models';\r\nimport { NewUserSearchResult } from '../models/new-user-search-result.model';\r\nimport { NewUserRequest } from '../models/new-user-request.model';\r\n\r\n// Search User Groups\r\nexport const SearchUserGroup = createAction('[User UI] User Groups Search', (filters: { searchString: string | null, parentUserGroupId: number | null }) => ({ filters }));\r\nexport const SearchUserGroupSuccess = createAction('[User UI] User Groups Search Success', (userGroupIds: number[]) => ({ userGroupIds }));\r\nexport const SearchUserGroupFail = createAction('[User UI] User Groups Search Fail', (error: ApiError) => ({ error }));\r\nexport const SearchUserGroupRefresh = createAction('[User UI] User Groups Refresh');\r\n\r\n// Sitemap Search\r\nexport const SitemapSearch = createAction('[User UI] Sitemap Search', (filters: { searchString: string | null }) => ({ filters }));\r\nexport const SitemapSearchSuccess = createAction('[User UI] Sitemap Search Success', (sitemapItemIds: number[]) => ({ sitemapItemIds }));\r\nexport const SitemapSearchFail = createAction('[User UI] Sitemap Search Fail', (error: string) => ({ error }));\r\nexport const SitemapSearchSelect = createAction('[User UI] Sitemap Search Select', (sitemapItem: SitemapGroup ) => ({ sitemapItem }));\r\nexport const SitemapSearchClear = createAction('[User UI] Sitemap Search Clear');\r\n\r\n// User Group Form\r\nexport const MarkUserGroupFormDirty = createAction('[User UI] Mark User Group Form Dirty');\r\nexport const MarkUserGroupFormClean = createAction('[User UI] Mark User Group Form Clean');\r\n\r\n// New User Drawer\r\nexport const SearchRfvUsers = createAction('[User UI] SearchRfvUsers', (cwsId: string) => ({ cwsId }));\r\nexport const SearchRfvUsersFail = createAction('[User UI] SearchRfvUsersFail', (error: ApiError) => ({ error }));\r\nexport const SearchRfvUsersSuccess = createAction('[User UI] SearchRfvUsersSuccess', (entities: NewUserSearchResult) => ({ entities: entities }));\r\n\r\nexport const SearchCwsUsers = createAction('[User UI] SearchCwsUsers', (searchString: string) => ({ searchString }));\r\nexport const SearchCwsUsersFail = createAction('[User UI] SearchCwsUsersFail', (error: ApiError) => ({ error }));\r\nexport const SearchCwsUsersSuccess = createAction('[User UI] SearchCwsUsersSuccess', (entities: NewUserSearchResult[]) => ({ entities: entities }));\r\n\r\nexport const LinkExistingCwsUser = createAction('[User UI] Link Existing Cws User', (newUserRequest: NewUserRequest) => ({ newUserRequest }));\r\nexport const LinkExistingCwsUserFail = createAction('[User UI] Link Existing Cws User Fail', (error: ApiError ) => ({ error }));\r\nexport const LinkExistingCwsUserSuccess = createAction('[User UI] Link Existing Cws Success', (user: User) => ({ user }));\r\n\r\nexport const CreateRfvUser = createAction('[User UI] Create Rfv User', (newUserRequest: NewUserRequest) => ({ newUserRequest }));\r\nexport const CreateRfvUserFail = createAction('[User UI] Create Rfv User Fail', (error: ApiError ) => ({ error }));\r\nexport const CreateRfvUserSuccess = createAction('[User UI] Create Rfv User Success', (user: User) => ({ user }));\r\n\r\nexport const CreateCustomerAccess = createAction('[User UI] Create Customer Access', (newUserRequest: NewUserRequest) => ({ newUserRequest }));\r\nexport const CreateCustomerAccessFail = createAction('[User UI] Create Customer Access Fail', (error: ApiError) => ({ error }));\r\nexport const CreateCustomerAccessSuccess = createAction('[User UI] Create Customer Access Success', (user: User) => ({ user }));\r\n\r\nexport const CopyUserPermisions = createAction('[User UI] Copy User Permissions', (fromUserId: number, toUserId: number) => ({ fromUserId, toUserId }));\r\nexport const CopyUserPermisionsFail = createAction('[User UI] Copy User Permissions Fail', (error: ApiError) => ({ error }));\r\nexport const CopyUserPermisionsSuccess = createAction('[User UI] Copy User Permissions Success', (User: any) => ({ User }));\r\n\r\nexport const ClearNewUser = createAction('[User UI] Clear New User');\r\n\r\nexport const ResendWelcomeEmail = createAction('[User UI] Resend Welcome Email', (cwsId: string) => ({ cwsId }));\r\nexport const ResendWelcomeEmailFail = createAction('[User UI] Resend Welcome Email Fail', (error: ApiError) => ({ error }));\r\nexport const ResendWelcomeEmailSuccess = createAction('[User UI] Resend Welcome Email Success');","import * as _ from 'lodash';\r\n\r\nimport { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nexport const getState = createFeatureSelector('user-ui');\r\n\r\nexport const getIsUserGroupSearching = createSelector(\r\n getState,\r\n state => state.isSearching\r\n);\r\n\r\nexport const getUserGroupSearchIds = createSelector(\r\n getState,\r\n state => state.searchUserGroupIds\r\n);\r\n\r\nexport const getUserGroupSearchResults = createSelector(\r\n fromCore.UserGroups.getEntities,\r\n getUserGroupSearchIds,\r\n (entities, searchUserGroupIds) => {\r\n return searchUserGroupIds.length > 0\r\n ? searchUserGroupIds.map(id => entities[id]).filter(p => p !== undefined)\r\n : [];\r\n }\r\n);\r\n\r\nexport const getAllUserGroupsWithRoot = createSelector(\r\n fromCore.UserGroups.getAll,\r\n fromCore.UserSession.getSession,\r\n (userGroups, sessionUser) => {\r\n\r\n // Get root userGroup\r\n const rootUserGroup = userGroups.find(p => p.Id === sessionUser.UserGroupId);\r\n\r\n if (!rootUserGroup) {\r\n return userGroups;\r\n }\r\n\r\n // @rmckavanagh: Do not display root if the name is blank\r\n return rootUserGroup.ParentName == '' ? [...userGroups] :\r\n [\r\n ...userGroups,\r\n {\r\n Id: rootUserGroup.ParentGroupId,\r\n Name: rootUserGroup.ParentName,\r\n SiteMapGroupId: null,\r\n SitemapGroupName: null,\r\n ParentGroupId: null,\r\n IsDisabled: false,\r\n ParentName: null\r\n }\r\n ];\r\n }\r\n);\r\n\r\nexport const getFilteredAllUserGroups = createSelector(\r\n getAllUserGroupsWithRoot, (userGroups) => {\r\n return userGroups.filter(v => v.ParentName != null);\r\n }\r\n)\r\n\r\nexport const getIsUserGroupSitemapSearching = createSelector(\r\n getState,\r\n state => state.isSitemapSearching\r\n);\r\n\r\nexport const getUserGroupSitemapSearchIds = createSelector(\r\n getState,\r\n state => state.searchSitemapItemIds\r\n);\r\n\r\nexport const getUserGroupSitemapSearchResults = createSelector(\r\n fromCore.SitemapGroups.getAll,\r\n getUserGroupSitemapSearchIds,\r\n (sitemapGroups, searchIds) => {\r\n\r\n if (searchIds.length === 0) {\r\n return [];\r\n }\r\n\r\n // Convert sitemapItems to dictionary for performance\r\n const dict = sitemapGroups.reduce((map, obj) => (map[obj.id] = obj, map), {});\r\n\r\n return searchIds.map(id => {\r\n\r\n const sitemapItem = _.cloneDeep(dict[id]);\r\n\r\n // Add sitemap path\r\n let i = 0;\r\n const path = [];\r\n let parentId = sitemapItem.parentId ? sitemapItem.parentId : -1;\r\n\r\n while (parentId >= 0) {\r\n const target = dict[parentId];\r\n\r\n path.push(target.name);\r\n parentId = target.parentId ? target.parentId : -1;\r\n i++;\r\n\r\n // Limit to 3 parent root\r\n if (i === 3) {\r\n parentId = -1;\r\n path.push('...');\r\n }\r\n }\r\n\r\n sitemapItem.path = path.reverse().join('/');\r\n\r\n return sitemapItem;\r\n });\r\n }\r\n);\r\n\r\nexport const getUserGroupSitemapSearchError = createSelector(\r\n getState,\r\n state => state.searchSitemapError\r\n);\r\n\r\nexport const getIsUserGroupDirty = createSelector(\r\n getState,\r\n state => state.isDirty\r\n);\r\n\r\nexport const getUserGroupSearchFilter = createSelector(\r\n getState,\r\n state => state.userGroupSearchFilter\r\n);\r\n\r\n// New User\r\nexport const getIsSearchingForRfvUsers = createSelector(getState, state => state.isSearchingForRfvUsers);\r\nexport const getSearchRfvUserResults = createSelector(getState, state => state.searchRfvUsersResults);\r\nexport const getIsSearchingForCwsUsers = createSelector(getState, state => state.isSearchingForCwsUsers);\r\nexport const getSearchCwsUserResults = createSelector(getState, state => state.searchCwsUsersResults);\r\nexport const getUniqueSearchCwsUserResults = createSelector(getSearchCwsUserResults, results => {\r\n return [...new Map(results?.map(item => [item['CwsLoginId'], item])).values()];\r\n})\r\nexport const getIsInserting = createSelector(getState, state => state.isInserting);\r\nexport const getErrors = createSelector(getState, state => state.errors);\r\nexport const getCreatedUser = createSelector(getState, state => state.createdUser);\r\nexport const getIsSearchCompleted = createSelector(getState, state => state.isSearchCompleted);","import { ApiError } from '@rfv/modules/core/models';\r\nimport { NewUserSearchResult } from '../models/new-user-search-result.model';\r\nimport { User } from '../models/user';\r\n\r\nexport interface State {\r\n isSearching: boolean;\r\n searchUserGroupIds: number[];\r\n isDirty: boolean;\r\n copyingUserPermissions: boolean;\r\n\r\n userGroupSearchFilter: {\r\n searchString : string | null,\r\n parentUserGroupId: number | null\r\n };\r\n\r\n // Sitemap drawer state\r\n searchSitemapItemIds: number[];\r\n isSitemapSearching: boolean;\r\n searchSitemapError: string;\r\n\r\n // New user state\r\n isSearchingForRfvUsers: boolean;\r\n searchRfvUsersResults: NewUserSearchResult;\r\n isSearchingForCwsUsers: boolean;\r\n searchCwsUsersResults: NewUserSearchResult[];\r\n isInserting: boolean;\r\n errors: ApiError,\r\n createdUser: User,\r\n isSearchCompleted: boolean; \r\n}\r\n\r\nexport const initialState: State = {\r\n isSearching: false,\r\n searchUserGroupIds: [],\r\n isDirty: false,\r\n copyingUserPermissions: false,\r\n \r\n userGroupSearchFilter: { \r\n searchString: null, \r\n parentUserGroupId: null\r\n },\r\n\r\n // Sitemap drawer state\r\n searchSitemapItemIds: [],\r\n isSitemapSearching: false,\r\n searchSitemapError: null,\r\n\r\n // New user state\r\n isSearchingForRfvUsers: false,\r\n searchRfvUsersResults: null,\r\n isSearchingForCwsUsers: false,\r\n searchCwsUsersResults: [],\r\n isInserting: false,\r\n errors: null,\r\n createdUser: null,\r\n isSearchCompleted: false\r\n}","\r\n\r\n \r\n Recipient Lists \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n Not a recipient of any notification\r\n
\r\n
\r\n \r\n \r\n \r\n

Unit Name — {{assetEntities[recipientUnit.UnitId].name}}

\r\n \r\n {{assetEntities[recipientUnit.UnitId].name}}\r\n \r\n \r\n {{ recipientUnit.Schedules.length | involvePlural:'Schedule'}}\r\n \r\n \r\n
\r\n
\r\n
\r\n {{schedule.AlarmGroupName}}\r\n {{schedule.AlertScheduleName}} \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n {{error.message}}\r\n \r\n \r\n Oops... Something unexpected happened\r\n \r\n \r\n\r\n \r\n
\r\n\r\n
\r\n\r\n","import { UserNotificationRecipientSchedule } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-recipients-list.model';\r\n\r\nimport { OnInit, OnDestroy, Component, Input } from \"@angular/core\";\r\nimport { Store, select } from \"@ngrx/store\";\r\nimport * as fromRoot from '@rfv/store';\r\nimport { Dictionary } from \"@ngrx/entity\";\r\nimport { Subject, Observable } from \"rxjs\";\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport { UserNotificationRecipientsList } from \"@rfv/modules/dashboard/modules/user-admin/store/models/user-notification-recipients-list.model\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\nimport { AssetNotificationRecipientActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { UserPermissionService } from \"@rfv/modules/shared/services/user-permission.service\";\r\n\r\nimport { Tiles } from '@rfv/modules/core/enums/tiles';\r\n\r\nimport { ApiError, Asset } from \"@rfv/modules/core/models\";\r\n\r\n@Component({\r\n selector: 'app-user-notification-recipient-list',\r\n templateUrl: './user-notification-recipient-list.component.html',\r\n styleUrls: ['./user-notification-recipient-list.component.scss']\r\n})\r\nexport class UserNotificationRecipientListComponent implements OnInit, OnDestroy {\r\n\r\n @Input() userId: number;\r\n @Input() hideViewAlarms: boolean = false;//true = alarm batch editor\r\n\r\n public notificationRecipientsList$: Observable;\r\n\r\n public notificationRecipientsPermission = false;\r\n\r\n private _destroyed$ = new Subject();\r\n public recipientList: UserNotificationRecipientsList;\r\n public isLoading$: Observable;\r\n public isLoaded$: Observable;\r\n public error$: Observable;\r\n public assetEntities: Dictionary;\r\n\r\n constructor(\r\n private _store: Store,\r\n private userPermissionService: UserPermissionService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.isLoading$ = this._store.select(fromCore.UserAlertRecipients.isLoading);\r\n this.isLoaded$ = this._store.select(fromCore.UserAlertRecipients.isLoaded);\r\n this.error$ = this._store.select(fromCore.UserAlertRecipients.getError);\r\n\r\n this._store.dispatch(fromCore.UserAlertRecipients.Load(this.userId));\r\n\r\n this.notificationRecipientsPermission = this.userPermissionService.hasAccess('NOTIFICATIONRECIPIENTS_FULLSCREEN');\r\n\r\n this._store.pipe(\r\n select(fromCore.Assets.Entities.getEntities),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(assetEntities => this.assetEntities = assetEntities);\r\n\r\n this._store.select(fromCore.UserAlertRecipients.getList).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(result => {\r\n this.recipientList = result;\r\n });\r\n }\r\n\r\n isActive(el: any) {\r\n let isActive = !(el.getAttribute('class') && el.getAttribute('class').indexOf('active') !== -1);\r\n return isActive;\r\n }\r\n\r\n getName(name: string) {\r\n return name.split(\"/\").pop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n goToNotificationRecipients(UnitId: number, schedule: UserNotificationRecipientSchedule) {\r\n this._store.dispatch(fromDashboard.NavigateToAsset(UnitId, Tiles.unitNotificationRecipients));\r\n\r\n this._store.dispatch(fromCore.UserAlertRecipients.AlarmGroupChange(schedule.AlarmGroupId));\r\n this._store.dispatch(fromCore.UserAlertRecipients.AlertScheduleIdChange(schedule.AlertScheduleId));\r\n }\r\n\r\n deleteNotificationRecipient(alarmGroupName: string, alertRecipientId: number, scheduleName: string, unitName: string) {\r\n this._store.dispatch(fromRoot.Modal.Open({ options: this.confirmDelete(alarmGroupName, alertRecipientId, scheduleName, unitName) }));\r\n }\r\n\r\n deleteAllRecipient(){\r\n this._store.dispatch(fromRoot.Modal.Open({ options: this.confirmDeleteAllRecipient()}));\r\n }\r\n\r\n confirmDelete(alarmGroupName: string, alertRecipientId: number, scheduleName: string, unitName: string): fromRoot.Modal.ModalOptions {\r\n return {\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.UnsubscribeAlertSchedule,\r\n title: 'Unsubscribe',\r\n data: { alarmGroupName, scheduleName, unitName },\r\n primaryText: 'Confirm',\r\n secondaryText: 'Cancel',\r\n primaryAction: AssetNotificationRecipientActions.Delete(this.userId, alertRecipientId, false, this.hideViewAlarms ? true : false)\r\n };\r\n }\r\n \r\n confirmDeleteAllRecipient(): fromRoot.Modal.ModalOptions {\r\n return {\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Delete All Recipients',\r\n data: `Selecting the confirmation will remove the selected user from all notification recipient lists `,\r\n primaryText: 'Yes',\r\n secondaryText: 'No',\r\n primaryAction: AssetNotificationRecipientActions.DeleteAll(this.userId, this.hideViewAlarms ? true : false)\r\n };\r\n }\r\n\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { RouterModule } from '@angular/router';\r\n \r\nimport { SharedModule } from '@rfv/modules/shared/shared.module';\r\nimport { UserNotificationRecipientListComponent } from './user-notification-recipient-list.component';\r\n \r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n FlexLayoutModule,\r\n RouterModule,\r\n \r\n ],\r\n declarations: [ \r\n UserNotificationRecipientListComponent\r\n ],\r\n exports: [ \r\n UserNotificationRecipientListComponent\r\n ]\r\n})\r\nexport class UserNotificationRecipientListModule {}","import { Params } from '@angular/router';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const SelectDashboard = createAction('[Dashboard] Select Dashboard', (id: number) => ({ payload: { id } }));\r\nexport const SelectTile = createAction('[Dashboard] Select Tile', (id: number) => ({ id }));\r\n\r\nexport const Reload = createAction('[Dashboard] Reload');\r\n\r\nexport const OpenDrawer = createAction('[Dashboard] Open Drawer', (id: number) => ({ id }));\r\nexport const CloseDrawer = createAction('[Dashboard] Close Drawer');\r\n\r\n// Site visualization methods\r\nexport const OpenSiteDrawer = createAction('[Dashboard] Open Site Drawer');\r\n\r\n// these should get moved to nested modules...\r\n\r\nexport const SelectSitemapGroup = createAction('[Dashboard] Select SitemapGroup', (id: number) => ({ id }));\r\nexport const LoadSelectedSitemapGroup = createAction('[Dashboard] Load Selected SitemapGroup');\r\nexport const LoadSelectedSitemapGroupFail = createAction('[Dashboard] Load Selected SitemapGroup Fail', (errors: ApiError[]) => ({ payload: errors }));\r\nexport const LoadSelectedSitemapGroupSuccess = createAction('[Dashboard] Load Selected SitemapGroup Success');\r\n\r\nexport const SelectAsset = createAction('[Dashboard] Select Asset', (id: number) => ({ id }));\r\n\r\nexport const LoadSelectedAsset = createAction('[Dashboard] Load Selected Asset');\r\nexport const LoadSelectedAssetFail = createAction('[Dashboard] Load Selected Asset Fail', (errors: ApiError[]) => ({ payload: errors }));\r\nexport const LoadSelectedAssetSuccess = createAction('[Dashboard] Load Selected Asset Success');\r\n\r\nexport const ClearSelectedAsset = createAction('[Dashboard] Clear Selected Asset');\r\n\r\nexport const SaveTimeStamp = createAction('[Dashboard] Save TimeStamp After Reload', (tileId: number) => ({ tileId }));\r\n\r\nexport const SaveIdOnTileHeaderClick = createAction(\r\n '[Dashboard] Save Tile Id On Tile Header Click',\r\n (tileHeaderId: number) => ({ tileHeaderId })\r\n);\r\n\r\nexport const NavigateToAsset = createAction('[Dashboard] Navigate to Asset', (assetId: number, tileId?: number, params?: Params) => ({ assetId, tileId, params}));\r\n\r\nexport const NavigateToSitemapGroup = createAction('[Dashboard] Navigate to Sitemap Group', (sitemapGroupId: number, tileId?: number, params?: Params) => ({sitemapGroupId, tileId, params}));\r\n\r\nexport const HideReloadButton = createAction(\r\n '[Dashboard] Hide Reload Button'\r\n);\r\n\r\nexport const ShowReloadButton = createAction(\r\n '[Dashboard] Show Reload Button'\r\n);\r\n\r\nexport const activateReload = createAction(\r\n '[Dashboard] Activate Reload'\r\n);\r\n\r\nexport const disactivateReload = createAction(\r\n '[Dashboard] Disactivate Reload'\r\n);\r\n\r\nexport const HideFavoriteButton = createAction(\r\n '[Dashboard] Hide Favorite Button'\r\n);\r\n\r\nexport const ShowFavoriteButton = createAction(\r\n '[Dashboard] Show Favorite Button'\r\n);\r\n\r\nexport const setActiveTabs = createAction('[Dashboard] set Active Tabs', (activeTabs: Params) => ({ activeTabs }));\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as DashboardActions from './actions';\r\n\r\nconst dashboardReducer = createReducer(\r\n initialState,\r\n\r\n on(fromCore.Customers.Select, state => initialState),\r\n\r\n on(DashboardActions.SelectDashboard, (state, { payload }) => ({\r\n ...state,\r\n selectedDashboardId: payload.id\r\n })),\r\n\r\n on(DashboardActions.SelectTile, (state, { id }) => ({\r\n ...state,\r\n selectedTileId: id\r\n })),\r\n\r\n on(DashboardActions.Reload, state => ({\r\n ...state,\r\n reload: state.reload + 1\r\n })),\r\n\r\n on(DashboardActions.OpenDrawer, (state, { id }) => ({\r\n ...state,\r\n activeDrawerId: id\r\n })),\r\n\r\n // Site visualization drawer methods\r\n on(DashboardActions.OpenSiteDrawer, state => ({\r\n ...state,\r\n activeDrawerId: 5,\r\n })),\r\n\r\n on(DashboardActions.CloseDrawer, state => ({\r\n ...state,\r\n activeDrawerId: null\r\n })),\r\n\r\n // move these to sub modules\r\n\r\n on(DashboardActions.SelectAsset, (state, { id }) => ({\r\n ...state,\r\n selectedAssetId: id,\r\n selectedSitemapGroupId: id ? null : state.selectedSitemapGroupId,\r\n isSelectedAssetLoaded: false\r\n })),\r\n\r\n on(DashboardActions.ClearSelectedAsset, (state) => ({\r\n ...state,\r\n selectedAssetId: null\r\n })),\r\n\r\n on(DashboardActions.LoadSelectedAsset, state => ({\r\n ...state,\r\n isSelectedAssetLoading: true\r\n })),\r\n\r\n on(DashboardActions.LoadSelectedAssetFail, (state, { payload }) => ({\r\n ...state,\r\n isSelectedAssetLoaded: false,\r\n isSelectedAssetLoading: false\r\n })),\r\n\r\n on(DashboardActions.LoadSelectedAssetSuccess, state => ({\r\n ...state,\r\n isSelectedAssetLoaded: true,\r\n isSelectedAssetLoading: false\r\n })),\r\n\r\n on(DashboardActions.SelectSitemapGroup, (state, { id }) => ({\r\n ...state,\r\n selectedAssetId: id ? null : state.selectedAssetId,\r\n selectedSitemapGroupId: id\r\n })),\r\n\r\n on(DashboardActions.LoadSelectedSitemapGroup, state => ({\r\n ...state,\r\n isSelectedSitemapGroupLoading: true\r\n })),\r\n\r\n on(DashboardActions.LoadSelectedSitemapGroupFail, (state, { payload }) => ({\r\n ...state,\r\n isSelectedSitemapGroupLoaded: false,\r\n isSelectedSitemapGroupLoading: false\r\n })),\r\n\r\n on(DashboardActions.LoadSelectedSitemapGroupSuccess, state => ({\r\n ...state,\r\n isSelectedSitemapGroupLoaded: true,\r\n isSelectedSitemapGroupLoading: false\r\n })),\r\n\r\n on(DashboardActions.SaveTimeStamp, (state, { tileId }) => ({\r\n ...state,\r\n lastReload: {\r\n tileId,\r\n timeStamp: Date.now()\r\n }\r\n })),\r\n\r\n on(DashboardActions.SaveIdOnTileHeaderClick, (state, { tileHeaderId }) => ({\r\n ...state,\r\n currentTileHeaderId: tileHeaderId\r\n })),\r\n\r\n //to hide E&D Dashboard Reload Button\r\n on(DashboardActions.HideReloadButton, (state) => ({\r\n ...state,\r\n isReloadHidden: true\r\n })),\r\n\r\n on(DashboardActions.ShowReloadButton, (state) => ({\r\n ...state,\r\n isReloadHidden: false\r\n })),\r\n\r\n on(DashboardActions.activateReload, (state) => ({\r\n ...state,\r\n reloadDisactivated: false\r\n })),\r\n\r\n on(DashboardActions.disactivateReload, (state) => ({\r\n ...state,\r\n reloadDisactivated: true\r\n })),\r\n\r\n //to hide/show Trip Reports Editor Favorite Button\r\n on(DashboardActions.HideFavoriteButton, (state) => ({\r\n ...state,\r\n isFavoriteHidden: true\r\n })),\r\n\r\n on(DashboardActions.ShowFavoriteButton, (state) => ({\r\n ...state,\r\n isFavoriteHidden: false\r\n })),\r\n\r\n on(DashboardActions.setActiveTabs, (state, { activeTabs }) => ({\r\n ...state,\r\n activeTabs: activeTabs\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return dashboardReducer(state, action);\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { zip, combineLatest } from 'rxjs';\r\nimport { filter, map, mergeMap, withLatestFrom, takeUntil, take, switchMap, first, tap } from 'rxjs/operators';\r\n\r\nimport { Action, Store, select } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\n\r\nimport * as DashboardActions from './actions';\r\nimport * as DashboardSelectors from './selectors';\r\n\r\nimport { Tiles } from '@rfv/modules/core/enums';\r\nimport { ApiError, Dashboard, Tile } from '@rfv/modules/core/models';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions: Actions,\r\n private _store: Store\r\n ) { }\r\n\r\n public navigateToAsset$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DashboardActions.NavigateToAsset),\r\n switchMap(action => combineLatest([\r\n this._store.select(fromCore.Assets.Entities.getEntities),\r\n this._store.select(fromCore.AssetTypes.getEntities),\r\n this._store.select(fromCore.Dashboards.getAll)\r\n ]).pipe(\r\n take(1),\r\n tap(([assets, assetTypes, dashboards]) => {\r\n const { assetId, tileId, params } = action;\r\n const asset = assets[assetId];\r\n const assetType = assetTypes[asset?.assetTypeId];\r\n\r\n if (asset && assetType && assetType.dashboards && assetType.dashboards.length) {\r\n \r\n // get the target dashboard and tile \r\n let dashboard: Dashboard;\r\n let tile: Tile;\r\n\r\n for (let i = 0; i < dashboards.length; i++) {\r\n const d = dashboards[i];\r\n\r\n const assetTypeHasDashboard = assetType.dashboards.some(dashboard => dashboard.id === d.id);\r\n\r\n if (!assetTypeHasDashboard)\r\n continue;\r\n\r\n const t = d.tiles.find(tile => tile.id === tileId);\r\n\r\n if (t) {\r\n dashboard = d;\r\n tile = t;\r\n break;\r\n }\r\n }\r\n \r\n if (dashboard && tile) {\r\n switch (tile.version) {\r\n case 2:\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.id, 'asset', assetId], { queryParams: { tileId: tile.id, ...params } }));\r\n return;\r\n case 1:\r\n default:\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.id, 'asset', assetId, 'fullscreen', tile.id], { queryParams: params }));\r\n return;\r\n }\r\n }\r\n\r\n // default to the first available dashboard\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', assetType.dashboards[0].id, 'asset', assetId]));\r\n \r\n }\r\n })\r\n ))\r\n ), { dispatch: false }\r\n );\r\n\r\n public navigateToSitemapGroup$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DashboardActions.NavigateToSitemapGroup),\r\n\r\n switchMap(action => combineLatest([\r\n this._store.select(fromCore.SitemapGroups.getEntities),\r\n this._store.select(fromCore.AssetTypes.getEntities),\r\n this._store.select(fromCore.Dashboards.getAll)\r\n ]).pipe(\r\n take(1),\r\n tap(([sitemapGroups, assetTypes, dashboards]) => {\r\n const { sitemapGroupId, tileId, params } = action;\r\n const sitemapGroup = sitemapGroups[action.sitemapGroupId];\r\n const assetType = assetTypes[sitemapGroup?.assetTypeId];\r\n \r\n if (sitemapGroup && assetType && assetType.dashboards && assetType.dashboards.length) {\r\n \r\n // get the target dashboard and tile \r\n let dashboard: Dashboard;\r\n let tile: Tile;\r\n\r\n for (let i = 0; i < dashboards.length; i++) {\r\n const d = dashboards[i];\r\n\r\n const assetTypeHasDashboard = assetType.dashboards.some(dashboard => dashboard.id === d.id);\r\n\r\n if (!assetTypeHasDashboard)\r\n continue;\r\n\r\n const t = d.tiles.find(tile => tile.id === tileId);\r\n\r\n if (t) {\r\n dashboard = d;\r\n tile = t;\r\n break;\r\n }\r\n }\r\n\r\n if (dashboard && tile) {\r\n switch (tile.version) {\r\n case 2:\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.id, 'sitemapGroup', sitemapGroupId], { queryParams: { tileId: tile.id, ...params } }));\r\n return;\r\n case 1:\r\n default:\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.id, 'sitemapGroup', sitemapGroupId, 'fullscreen', tile.id], { queryParams: params }));\r\n return;\r\n }\r\n }\r\n\r\n // default to first available dashboard\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', assetType.dashboards[0].id, 'sitemapGroup', sitemapGroupId]));\r\n }\r\n })\r\n ))\r\n\r\n ), { dispatch: false }\r\n );\r\n\r\n public onSelectSitemapGroup$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DashboardActions.SelectSitemapGroup),\r\n map(action => fromSitemap.SelectSitemapGroup(action.id))\r\n )\r\n );\r\n\r\n public onSelectAsset$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DashboardActions.SelectAsset),\r\n withLatestFrom(\r\n this._store.select(fromSitemap.getSelectedAssetId)\r\n ),\r\n tap(([action, selectedSitemapAssetId]) => {\r\n if (selectedSitemapAssetId !== action.id)\r\n this._store.dispatch(fromSitemap.SelectAsset(action.id));\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public loadSelectedAsset$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DashboardActions.LoadSelectedAsset),\r\n withLatestFrom(\r\n this._store.select(DashboardSelectors.getSelectedAssetId)\r\n ),\r\n mergeMap(([action, selectedAssetId]) => ([\r\n fromCore.Assets.Alarms.Load(selectedAssetId),\r\n fromCore.Assets.DatapointValues.Load(selectedAssetId),\r\n fromCore.Assets.Status.Load(selectedAssetId)\r\n ]))\r\n )\r\n );\r\n\r\n public loadSelectedAssetFail$ = createEffect(\r\n () => this._actions.pipe(\r\n takeUntil(\r\n this._store.pipe(\r\n select(DashboardSelectors.isSelectedAssetLoaded),\r\n filter(isLoaded => isLoaded)\r\n )\r\n ),\r\n ofType(\r\n fromCore.Assets.Alarms.LoadFail,\r\n fromCore.Assets.DatapointValues.LoadFail,\r\n fromCore.Assets.Status.LoadFail\r\n ),\r\n take(1),\r\n map(action => DashboardActions.LoadSelectedAssetFail([action.error]))\r\n )\r\n );\r\n\r\n public loadSelectedAssetSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(DashboardActions.LoadSelectedAsset),\r\n switchMap(action => zip(\r\n this._actions.pipe(ofType(fromCore.Assets.Alarms.LoadSuccess), first()),\r\n this._actions.pipe(ofType(fromCore.Assets.DatapointValues.LoadSuccess), first()),\r\n this._actions.pipe(ofType(fromCore.Assets.Status.LoadSuccess), first()),\r\n ).pipe(\r\n map(() => DashboardActions.LoadSelectedAssetSuccess())\r\n ))\r\n )\r\n );\r\n\r\n // TODO: modonnell: move me.. doesn't really belong here\r\n public createUnitCreationLogSuccess$ = createEffect(\r\n () => this._actions.pipe(\r\n ofType(fromCore.Support.UnitCreationLogs.CreateSuccess),\r\n withLatestFrom(\r\n this._store.select(DashboardSelectors.getSelectedDashboardId),\r\n this._store.select(DashboardSelectors.getSelectedSitemapGroupId)\r\n ),\r\n map(([action, dashboardId, sitemapGroupId]) => fromRoot.Router.Go([\r\n 'dashboard', dashboardId,\r\n 'sitemapGroup', sitemapGroupId,\r\n 'fullscreen', Tiles.addNewUnit,\r\n action.unitCreationLogId\r\n ]))\r\n )\r\n );\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n\r\nimport { reducer } from './reducer';\r\nimport { Effects } from './effects';\r\n\r\n@NgModule({\r\n imports: [\r\n StoreModule.forFeature('dashboard', reducer),\r\n EffectsModule.forFeature([\r\n Effects\r\n ])\r\n ]\r\n})\r\nexport class DashboardStoreModule { }","import { Tile } from \"@rfv/modules/core/models\";\r\n\r\nexport const TilesWithoutDashboards: Tile[] = [\r\n {\r\n id: 2,\r\n name: 'Alarm History',\r\n x: null,\r\n y: null,\r\n cols: null,\r\n rows: null,\r\n refreshRate: -1,\r\n hasFullMode: true,\r\n permissions: [],\r\n datapoints: [],\r\n actionIds: [],\r\n alwaysEnabled: false,\r\n icon: null,\r\n version: 1,\r\n tileNavigationMappings: []\r\n },\r\n {\r\n id: 60,\r\n name: 'Edit Mode',\r\n x: null,\r\n y: null,\r\n cols: null,\r\n rows: null,\r\n refreshRate: -1,\r\n hasFullMode: true,\r\n permissions: [],\r\n datapoints: [],\r\n actionIds: [],\r\n alwaysEnabled: false,\r\n icon: null,\r\n version: 1,\r\n tileNavigationMappings: []\r\n },\r\n {\r\n id: 11,\r\n name: 'Manage Notifications Recipients',\r\n x: null,\r\n y: null,\r\n cols: null,\r\n rows: null,\r\n refreshRate: 0,\r\n hasFullMode: true,\r\n permissions: [],\r\n datapoints: [],\r\n actionIds: [125],\r\n alwaysEnabled: false,\r\n icon: null,\r\n version: 1,\r\n tileNavigationMappings: []\r\n }\r\n];\r\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport { getEntities as getDashboardEntities } from '@rfv/modules/core/store/dashboards';\r\nimport { getEntities as getSitemapEntities } from '@rfv/modules/core/store/sitemap-groups';\r\nimport { getEntities as getAssetEntities } from '@rfv/modules/core/store/assets/entities';\r\nimport { getPath } from '@rfv/modules/core/store/sitemap-groups';\r\nimport { getEntities as getAssetTypesEntities } from '@rfv/modules/core/store/assetTypes';\r\nimport { getAll } from '@rfv/modules/core/store/dashboards';\r\nimport { RouterDashboardLog, Tile } from '@rfv/modules/core/models';\r\nimport { TilesWithoutDashboards } from './tiles-without-dashboards';\r\nimport { loadActions } from '../lookups/load-actions';\r\nimport { uniq, flatten } from 'lodash';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { getDashboards as getAssetTypeDashboards } from '@rfv/modules/core/store/assetTypes/selectors';\r\n\r\nexport const getState = createFeatureSelector('dashboard');\r\n\r\nexport const getReload = createSelector(getState, state => state.reload);\r\n\r\nexport const getSelectedDashboardId = createSelector(\r\n getState,\r\n state => state && state.selectedDashboardId\r\n);\r\n\r\nexport const getSelectedSitemapGroupId = createSelector(\r\n getState,\r\n state => state.selectedSitemapGroupId\r\n);\r\n\r\nexport const getSelectedSitemapGroup = createSelector(\r\n getSelectedSitemapGroupId,\r\n getSitemapEntities,\r\n (selectedSitemapGroupId, entities) =>\r\n selectedSitemapGroupId && entities && entities[selectedSitemapGroupId]\r\n);\r\n\r\nexport const getSelectedSitemapGroupName = createSelector(\r\n getSelectedSitemapGroup,\r\n state => state && state.name\r\n);\r\n\r\nexport const getSelectedAssetId = createSelector(\r\n getState,\r\n state => state.selectedAssetId\r\n);\r\nexport const getSelectedAsset = createSelector(\r\n getSelectedAssetId,\r\n getAssetEntities,\r\n (selectedAssetId, entities) =>\r\n selectedAssetId && entities && entities[selectedAssetId]\r\n);\r\n\r\nexport const getSelectedAssetName = createSelector(\r\n getSelectedAsset,\r\n state => state && state.name\r\n);\r\n\r\nexport const getSelectedPath = createSelector(\r\n getSelectedSitemapGroup,\r\n getSelectedAsset,\r\n getPath,\r\n (selectedSitemapGroup, selectedAsset, getPath) => {\r\n if (selectedSitemapGroup) return getPath(selectedSitemapGroup.parentId);\r\n else if (selectedAsset) return getPath(selectedAsset.sitemapGroupId);\r\n\r\n return [];\r\n }\r\n);\r\n\r\nexport const getSelectedAssetType = createSelector(\r\n getSelectedSitemapGroup,\r\n getSelectedAsset,\r\n getAssetTypesEntities,\r\n (sitemapGroup, asset, assetTypes) => {\r\n if (asset) return assetTypes[asset.assetTypeId];\r\n else if (sitemapGroup) return assetTypes[sitemapGroup.assetTypeId];\r\n\r\n return null;\r\n }\r\n);\r\n\r\nexport const getSelectedDashboards = createSelector(\r\n getSelectedSitemapGroup,\r\n getSelectedAsset,\r\n getAssetTypeDashboards,\r\n (selectedSitemapGroup, selectedAsset, getAssetTypeDashboards) => {\r\n if (selectedAsset)\r\n return getAssetTypeDashboards(selectedAsset.assetTypeId);\r\n else if (selectedSitemapGroup)\r\n return getAssetTypeDashboards(selectedSitemapGroup.assetTypeId);\r\n else\r\n return [];\r\n }\r\n);\r\n\r\nexport const getSelectedDashboard = createSelector(\r\n getSelectedDashboardId,\r\n getSelectedDashboards,\r\n getDashboardEntities,\r\n (selectedDashboardId, selectedDashboards, dashboardEntities) =>\r\n (selectedDashboards && selectedDashboards.find(dashboard => dashboard.id === selectedDashboardId)) ||\r\n (dashboardEntities && dashboardEntities[selectedDashboardId])\r\n);\r\n\r\nexport const getAllTiles = createSelector(\r\n getAll,\r\n (dashboards) => {\r\n let allTiles: Tile[] = [];\r\n dashboards.forEach(dashboard => dashboard.tiles.forEach(tiles => {\r\n allTiles.push(tiles);\r\n }));\r\n return allTiles;\r\n }\r\n);\r\n\r\nexport const getFirstTileIdOnTheScreen = createSelector(\r\n getSelectedDashboard,\r\n (selectedDashboard) => {\r\n if (selectedDashboard && selectedDashboard.tiles.length) {\r\n const tile = selectedDashboard.tiles.find(tile => tile.x === 0 && tile.y === 0);\r\n\r\n if (tile)\r\n return tile.id;\r\n\r\n return selectedDashboard.tiles[0].id;\r\n }\r\n\r\n return 0;\r\n }\r\n);\r\n\r\nexport const getSelectedDashboardName = createSelector(\r\n getSelectedDashboard,\r\n dashboard => dashboard.name\r\n);\r\n\r\nexport const getSelectedDashboardTiles = createSelector(\r\n getSelectedDashboard,\r\n getSelectedSitemapGroupId,\r\n getSelectedAssetId,\r\n (dashboard, sitemapGroupId, assetId) => dashboard?.tiles?.map(tile => ({\r\n ...tile,\r\n gridsterId: `${dashboard.id}-${sitemapGroupId || assetId || 'admin'}-${tile.id}`\r\n })) as Tile[] || []\r\n);\r\n\r\nexport const getSelectedDashboardHiddenTiles = createSelector(\r\n getSelectedDashboard,\r\n getSelectedSitemapGroupId,\r\n getSelectedAssetId,\r\n (dashboard, sitemapGroupId, assetId) => dashboard?.tiles?.reduce((acc, tile) => {\r\n for (let mapping of tile.tileNavigationMappings) {\r\n if (mapping.DestinationTile) {\r\n acc.push({\r\n ...mapping.DestinationTile,\r\n gridsterId: `${dashboard.id}-${sitemapGroupId || assetId || 'admin'}-${mapping.DestinationTileID}`\r\n })\r\n }\r\n }\r\n return acc;\r\n }, [] as Tile[]) || []\r\n);\r\n\r\nexport const getSelectedDashboardTileIds = createSelector(\r\n getSelectedDashboardTiles,\r\n tiles => tiles.map(tile => tile.id)\r\n);\r\n\r\nexport const getSelectedTileId = createSelector(\r\n getState,\r\n state => state.selectedTileId\r\n);\r\n\r\nexport const isTileSelected = createSelector(\r\n getSelectedTileId,\r\n selectedTileId => !!selectedTileId\r\n);\r\n\r\nexport const getCurrentHeaderTileId = createSelector(\r\n getState,\r\n (state) => state.currentTileHeaderId\r\n);\r\n\r\nexport const getSelectedTile = createSelector(\r\n getSelectedTileId,\r\n getSelectedDashboardTiles,\r\n (selectedTileId, selectedTiles) => {\r\n return (\r\n selectedTiles.find(tile => tile.id === selectedTileId) ||\r\n TilesWithoutDashboards.find(tile => tile.id === selectedTileId) ||\r\n null\r\n );\r\n }\r\n);\r\n\r\nexport const getSelectedTileName = createSelector(\r\n getSelectedTile,\r\n (selectedTile) => selectedTile && selectedTile.name\r\n);\r\n\r\nexport const getDatapointsByTileId = (tileId: number) => createSelector(\r\n getSelectedDashboardTiles,\r\n (tiles) => {\r\n return tiles && tiles.find(tile => tile.id === tileId) && tiles.find(tile => tile.id === tileId).datapoints\r\n }\r\n);\r\n\r\nexport const getAdminDashboards = createSelector(getAll, dashboards =>\r\n dashboards.filter(dashboard => dashboard.isAdmin && dashboard.tiles?.length)\r\n);\r\n\r\nexport const getActiveDrawerId = createSelector(\r\n getState,\r\n state => state.activeDrawerId\r\n);\r\nexport const isDrawerOpen = createSelector(\r\n getActiveDrawerId,\r\n activeDrawerId => !!activeDrawerId\r\n);\r\n\r\n//Site visualization methods\r\nexport const getSiteVisualization = createSelector(getState, state => state.siteVisualization);\r\nexport const getSiteVisualizationAssets = createSelector(getState, state => state.siteVisualizationAssets);\r\nexport const getSiteVisualizationDataPoints = createSelector(getState, state => state.siteVisualizationDatapoints);\r\nexport const getSiteVisualizationSelectedLink = createSelector(getState, state => state.siteVisualizationSelectedLink);\r\nexport const getDeleteSiteVisualizationLink = createSelector(getState, state => state.siteVisualizationDeletedLink);\r\nexport const getSaveSiteVisualizationLink = createSelector(getState, state => state.siteVisualizationSavedLink);\r\n\r\nexport const getAnyDrawerOpen = createSelector(\r\n fromRoot.Layout.getDrawerOpenState,\r\n isDrawerOpen,\r\n (layoutDrawerOpen, dashboardDrawerOpen) => layoutDrawerOpen || dashboardDrawerOpen\r\n);\r\n\r\nexport const getReloadDisactivated = createSelector(\r\n getState,\r\n state => state.reloadDisactivated\r\n);\r\n\r\nexport const getReloadDisactivatedOrAnyDrawerOpen = createSelector(\r\n getReloadDisactivated,\r\n getAnyDrawerOpen,\r\n (reloadDisactivated, anyDrawerOpen) => reloadDisactivated || anyDrawerOpen\r\n);\r\n\r\nexport const getLog = createSelector(\r\n getSelectedDashboard,\r\n getSelectedDashboardTiles,\r\n getSelectedTile,\r\n getSelectedSitemapGroup,\r\n getSelectedAsset,\r\n (\r\n selectedDashboard,\r\n selectedDashboardTiles,\r\n selectedTile,\r\n selectedSitemapGroup,\r\n selectedAsset\r\n ) =>\r\n ({\r\n dashboardId: selectedDashboard && selectedDashboard.id,\r\n dashboardName: selectedDashboard && selectedDashboard.name,\r\n\r\n fullscreenId: selectedTile && selectedTile.id,\r\n fullscreenName: selectedTile && selectedTile.name,\r\n\r\n tiles:\r\n selectedDashboardTiles &&\r\n selectedDashboardTiles.map(tile => ({\r\n id: tile.id,\r\n name: tile.name\r\n })),\r\n\r\n sitemapGroupId: selectedSitemapGroup && selectedSitemapGroup.id,\r\n sitemapGroupName: selectedSitemapGroup && selectedSitemapGroup.name,\r\n\r\n assetId: selectedAsset && selectedAsset.id,\r\n assetName: selectedAsset && selectedAsset.name\r\n } as RouterDashboardLog)\r\n);\r\n\r\nexport const getCurrentActionRateObj = createSelector(\r\n getSelectedDashboardTiles,\r\n getSelectedAssetId,\r\n getSelectedSitemapGroupId,\r\n getSelectedDashboardId,\r\n getSelectedDashboardTileIds,\r\n getReload,\r\n getReloadDisactivatedOrAnyDrawerOpen,\r\n fromRoot.Router.getAllRouterParams,\r\n (\r\n tiles,\r\n assetId,\r\n sitemapGroupId,\r\n dashboardId,\r\n selectedDashboardTileIds,\r\n reloadCount,\r\n reloadDisactivatedOrAnyDrawerOpen,\r\n {\r\n routeParams: {\r\n dashboardId: routeDashboardId,\r\n assetId: routeAssetId,\r\n sitemapGroupId: routeSitemapGroupId,\r\n tileId: routeFullscreenId\r\n },\r\n url\r\n }\r\n ) => {\r\n if (reloadDisactivatedOrAnyDrawerOpen) {\r\n return null;\r\n }\r\n return getActionRateObject(\r\n +routeDashboardId,\r\n dashboardId,\r\n +routeSitemapGroupId,\r\n sitemapGroupId,\r\n +routeFullscreenId,\r\n +routeAssetId,\r\n assetId,\r\n url,\r\n createActionRateObj(tiles)\r\n );\r\n }\r\n);\r\n\r\nfunction createActionRateObj(tiles) {\r\n const selectedRefreshRates = uniq(\r\n flatten(\r\n tiles\r\n .map(tile => ({\r\n rate: tile.refreshRate,\r\n actionIds: tile.actionIds\r\n }))\r\n )\r\n );\r\n return flatten(\r\n selectedRefreshRates\r\n .map((refreshObj: { actionIds: number[], rate: number }) => {\r\n return refreshObj.actionIds\r\n .map(actionId => {\r\n if (loadActions[actionId]) {\r\n return {\r\n rate: refreshObj.rate,\r\n actionType: loadActions[actionId]\r\n };\r\n }\r\n })\r\n .filter(actionRate => actionRate !== undefined);\r\n })\r\n .filter(refreshObj => refreshObj.length > 0)\r\n );\r\n}\r\n\r\nfunction getActionRateObject(\r\n routeDashboardId: number,\r\n dashboardId: number,\r\n routeSitemapGroupId: number,\r\n sitemapGroupId: number,\r\n routeFullscreenId: number,\r\n routeAssetId: number,\r\n assetId: number,\r\n url: string,\r\n actionRateObj\r\n) {\r\n if (routeDashboardId === dashboardId) {\r\n if (routeSitemapGroupId === sitemapGroupId && !routeFullscreenId) {\r\n return actionRateObj;\r\n } else if (routeAssetId === assetId && !routeFullscreenId) {\r\n return actionRateObj;\r\n } else if (\r\n !routeAssetId &&\r\n !routeFullscreenId &&\r\n url.includes('admin') &&\r\n url.includes('dashboard')\r\n ) {\r\n return actionRateObj;\r\n } else if (routeFullscreenId) {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n// move to sub modules\r\n\r\nexport const isSelectedAssetLoaded = createSelector(\r\n getState,\r\n state => state.isSelectedAssetLoaded\r\n);\r\nexport const isSelectedAssetLoading = createSelector(\r\n getState,\r\n state => state.isSelectedAssetLoading\r\n);\r\n\r\nexport const isSelectedSitemapGroupLoaded = createSelector(\r\n getState,\r\n state => state.isSelectedSitemapGroupLoaded\r\n);\r\nexport const isSelectedSitemapGroupLoading = createSelector(\r\n getState,\r\n state => state.isSelectedSitemapGroupLoading\r\n);\r\n\r\nexport const getLastReload = createSelector(\r\n getState,\r\n state => state.lastReload\r\n);\r\n\r\nexport const getIsReloadHidden = createSelector(\r\n getState,\r\n state => state.isReloadHidden\r\n);\r\n\r\nexport const getIsFavoriteHidden = createSelector(\r\n getState,\r\n state => state.isFavoriteHidden\r\n);\r\n\r\nexport const getActiveTabs = createSelector(\r\n getState,\r\n state => state.activeTabs\r\n);","import { Params } from '@angular/router';\r\nimport { Asset, AssetDatapointSetting } from '@rfv/modules/core/models';\r\nimport { SiteVisualization, SiteVisualizationMarker } from '@rfv/modules/shared/model/site-visualization.model';\r\n\r\nexport interface State {\r\n selectedDashboardId: number;\r\n selectedTileId: number | null;\r\n currentTileHeaderId: number | null;\r\n\r\n activeDrawerId: number | null;\r\n\r\n siteVisualization: SiteVisualization;\r\n siteVisualizationAssets: Asset[];\r\n siteVisualizationDatapoints: { [assetId: string]: { datapointSetting: Array } };\r\n siteVisualizationSelectedLink: SiteVisualizationMarker;\r\n siteVisualizationDeletedLink: SiteVisualizationMarker;\r\n siteVisualizationSavedLink: SiteVisualizationMarker;\r\n\r\n reload: number;\r\n\r\n // these should get moved to nested, lazy loaded, modules\r\n selectedAssetId: number | null;\r\n isSelectedAssetLoaded: boolean;\r\n isSelectedAssetLoading: boolean;\r\n\r\n selectedSitemapGroupId: number;\r\n isSelectedSitemapGroupLoaded: boolean;\r\n isSelectedSitemapGroupLoading: boolean;\r\n lastReload: { tileId: number, timeStamp: number };\r\n\r\n isReloadHidden: boolean;\r\n reloadDisactivated: boolean;\r\n\r\n isFavoriteHidden: boolean;\r\n\r\n activeTabs: Params;\r\n}\r\n\r\nexport const initialState: State = {\r\n selectedDashboardId: null,\r\n selectedTileId: null,\r\n currentTileHeaderId: null,\r\n\r\n activeDrawerId: null,\r\n\r\n siteVisualization: null,\r\n siteVisualizationAssets: [],\r\n siteVisualizationDatapoints: null,\r\n siteVisualizationSelectedLink: null,\r\n siteVisualizationDeletedLink: null,\r\n siteVisualizationSavedLink: null,\r\n\r\n reload: 0,\r\n\r\n selectedAssetId: null,\r\n isSelectedAssetLoaded: false,\r\n isSelectedAssetLoading: false,\r\n\r\n selectedSitemapGroupId: null,\r\n isSelectedSitemapGroupLoaded: false,\r\n isSelectedSitemapGroupLoading: false,\r\n\r\n lastReload: null,\r\n\r\n isReloadHidden: null,\r\n reloadDisactivated: false,\r\n\r\n isFavoriteHidden: null,\r\n activeTabs: null,\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\n\r\nimport { Section } from '../models/section.model';\r\nimport { SectionAssetType } from '../models/section-asset-type.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SectionService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public save(section: Section) {\r\n if (section.Id > 0)\r\n {\r\n return this._http.put(`/v1/support/sitemap-group`, section);\r\n }\r\n else\r\n {\r\n return this._http.post(`/v1/support/sitemap-group`, section);\r\n }\r\n }\r\n\r\n public delete(sectionId: number) {\r\n return this._http.delete(`/v1/support/sitemap-group/${sectionId}`);\r\n }\r\n\r\n public getAssetTypes() {\r\n return this._http.get(`/v1/support/sitemap-group/asset-types`);\r\n }\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { FilterCategory } from '@rfv/modules/global-filter/models/filter-category.model';\r\n\r\nexport const LoadCategories = createAction('[Global Filter] Load Categories');\r\nexport const LoadCategoriesFail = createAction('[Global Filter] Load Categories Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadCategoriesSuccess = createAction('[Global Filter] Load Categories Success', (filterCategories: FilterCategory[]) => ({ filterCategories }));\r\n","import { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { FilterPostCategory } from '@rfv/modules/global-filter/models/filter-post-category.model';\r\n\r\nexport const SetEditedFilterId = createAction('[Global Filter] Set Edited Filter Id', (filterId: number) => ({ filterId }));\r\nexport const SetEditedFilterData = createAction('[Global Filter] Set Edited Filter Data', (filterPostCategories: FilterPostCategory[]) => ({ filterPostCategories }));\r\nexport const SetEditedUnits = createAction('[Global Filter] Set Edited Unit', (unitIds: number[]) => ({ unitIds }));\r\n\r\nexport const Clear = createAction('[Global Filter] Clear Edited Filter');\r\n","import { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { Asset } from '@rfv/modules/core/models';\r\n\r\nexport const AddUnit = createAction('[Global Filter] Add Unit To Filter', (asset: Asset) => ({ asset }));\r\nexport const AddMultipleUnits = createAction('[Global Filter] Add Units To Filter', (assets: Asset[]) => ({ assets }));\r\n\r\nexport const RemoveUnit = createAction('[Global Filter] Remove Unit From Filter', (assetId: number) => ({ assetId }));\r\nexport const RemoveAll = createAction('[Global Filter] Remove All Units From Filter');\r\n\r\nexport const SearchUnits = createAction('[Global Filter] Search Units', (searchString: string) => ({ searchString }));\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { FilterAppliedCategory } from '@rfv/modules/global-filter/models/filter-applied-category.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nexport const SaveGlobalFilter = createAction('[Global Filter] Save New Filter');\r\nexport const SaveGlobalFilterFail = createAction('[Global Filter] Save New Filter Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const SaveGlobalFilterSuccess = createAction('[Global Filter] Save New Filter Success');\r\n\r\nexport const UpdateGlobalFilter = createAction('[Global Filter] Update Filter');\r\nexport const UpdateGlobalFilterFail = createAction('[Global Filter] Update Filter Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const UpdateGlobalFilterSuccess = createAction('[Global Filter] Update Filter Success');\r\n\r\nexport const AddAppliedOptionsCategory = createAction('[Global Filter] Add Changed Controls', (appliedFilterCategory: FilterAppliedCategory) => ({ appliedFilterCategory }));\r\nexport const RemoveAppliedOptionsCategory = createAction('[Global Filter] Remove Changed Controls', (filterName: string) => ({ filterName }));\r\nexport const RemoveAllApplied = createAction('[Global Filter] Remove All Applied Controls');\r\n\r\nexport const SetFilterName = createAction('[GlobalFilter] Set Filter Name', (filterName: string) => ({ filterName }));\r\n\r\nexport const ClearGlobalFilter = createAction('[Global Filter] Clear Global Filter');\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nexport const Load = createAction('[Global Filter] Load Options');\r\nexport const LoadFail = createAction('[Global Filter] Load Options Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[Global Filter] Load Options Success', (optionsList: FilterOptionsList) => ({ optionsList }));\r\n\r\nexport const LoadRequired = createAction('[Global Filter] Load Required Options', (mergedId: string) => ({ mergedId }));\r\nexport const LoadRequiredFail = createAction('[Global Filter] Load Required Options Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadRequiredSuccess = createAction('[Global Filter] Load Required Options Success', (requiredOptions: FilterOptionsList) => ({ requiredOptions }));\r\n\r\nexport const OptionsLoaded = createAction('[Global Filter] Options Loaded');\r\n\r\nexport const SetSelectedOptionsList = createAction('[Global Filter] Set Selected Category And Subcategory', (categoryId: string) => ({ categoryId }));\r\nexport const SetRequiredOptionsListKey = createAction('[Global Filter] Set Required Options List Key', (key: string) => ({ key }));\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\nexport const Load = createAction('[Global Filter] Load Saved Filters');\r\nexport const LoadFail = createAction('[Global Filter] Load Saved Filters Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[Global Filter] Load Saved Filters Success', (globalFilters: SavedGlobalFilter[]) => ({ globalFilters }));\r\n\r\nexport const Delete = createAction('[Global Filter] Delete Saved Filter', (globalFilterId: number) => ({ globalFilterId }));\r\nexport const DeleteFail = createAction('[Global Filter] Delete Saved Failed', (error: HttpErrorResponse) => ({ error }));\r\nexport const DeleteSuccess = createAction('[Global Filter] Delete Saved Filter Success');\r\n\r\n","import { createAction } from '@ngrx/store';\r\n\r\nexport const SetSelectedFilter = createAction(\r\n '[Global Filter] Set Selected Filter Id',\r\n (filterId: number) => ({ filterId })\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { FilterScreens } from '@rfv/modules/global-filter/enums/filter-screens.enum';\r\n\r\nexport const setMobileScreen = createAction('[Global Filter] Set mobile screen', props<{ displayedMobileScreen: FilterScreens }>());\r\n","/* NgRx */\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as globalFilterActions from '@rfv/modules/global-filter/actions';\r\n\r\n/* Models */\r\nimport { BannerOptions } from '@rfv/modules/shared/model/banner.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\n/*\r\n * Functions with messages and actions to send as payload to banner, or confirm modal actions\r\n */\r\n\r\n// Confirm modal, when deleting filter.\r\nexport function deleteConfirmPayload(filter: SavedGlobalFilter): fromRoot.Modal.ModalOptions {\r\n return {\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Delete Filter',\r\n data: `Are you sure, you want to delete filter '${filter.Name}'?`,\r\n primaryText: 'Delete',\r\n primaryAction: globalFilterActions.SavedFiltersActions.Delete(filter.FilterId),\r\n };\r\n}\r\n\r\n// Confirm modal, when canceling changes without saving.\r\nexport function cancelChangesPayload(): fromRoot.Modal.ModalOptions {\r\n return {\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Discard changes',\r\n data: `Are you sure you want to discard all changes?`,\r\n primaryText: 'Yes',\r\n secondaryText: 'No',\r\n primaryAction: globalFilterActions.GeneralFilterActions.ClearGlobalFilter()\r\n };\r\n}\r\n\r\n// Banner after successful operation (save, edit, delete)\r\nexport function successPayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `Filter was successfully ${operation}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\n// Banner after failed operation (save, edit, delete)\r\nexport function failPayload(operation: string, error: HttpErrorResponse): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `There was a problem ${operation} the filter. Error: ${error.status}: ${error.statusText}`,\r\n };\r\n}\r\n","export enum FilterScreens {\r\n Categories,\r\n Options,\r\n Selection\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/* NgRx */\r\nimport { CategoriesActions } from '../actions';\r\n\r\n/* Models */\r\nimport { FilterCategory } from '@rfv/modules/global-filter/models/filter-category.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface CategoriesState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n categories: FilterCategory[];\r\n error: HttpErrorResponse | null;\r\n}\r\n\r\nconst initialState = {\r\n isLoading: false,\r\n isLoaded: false,\r\n categories: [],\r\n error: null\r\n};\r\n\r\nconst categoriesReducer = createReducer(\r\n initialState,\r\n\r\n on(CategoriesActions.LoadCategories, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CategoriesActions.LoadCategoriesFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(CategoriesActions.LoadCategoriesSuccess, (state, { filterCategories }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n categories: filterCategories,\r\n error: null\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): CategoriesState {\r\n return categoriesReducer(state, action);\r\n}\r\n","/* NgRx */\r\nimport { GeneralFilterActions } from '../actions';\r\nimport { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { FilterAppliedCategory } from '@rfv/modules/global-filter/models/filter-applied-category.model';\r\n\r\n\r\nexport interface AppliedOptionsState extends EntityState {\r\n filterName: string;\r\n}\r\n\r\nexport const appliedOptionsAdapter: EntityAdapter = createEntityAdapter(\r\n {\r\n selectId: appliedOptions => appliedOptions.CategoryId + (appliedOptions.SubcategoryId ? '-' + appliedOptions.SubcategoryId : '')\r\n }\r\n);\r\n\r\nconst initialState: AppliedOptionsState = appliedOptionsAdapter.getInitialState({\r\n filterName: ''\r\n});\r\n\r\nconst changedControlsReducer = createReducer(\r\n initialState,\r\n\r\n on(GeneralFilterActions.AddAppliedOptionsCategory, (state, { appliedFilterCategory }) => appliedOptionsAdapter.upsertOne(appliedFilterCategory, {\r\n ...state\r\n })),\r\n\r\n on(GeneralFilterActions.RemoveAppliedOptionsCategory, (state, { filterName }) => appliedOptionsAdapter.removeOne(filterName, {\r\n ...state\r\n })),\r\n\r\n on(GeneralFilterActions.RemoveAllApplied, (state) => appliedOptionsAdapter.removeAll({\r\n ...state\r\n })),\r\n\r\n on(GeneralFilterActions.SetFilterName, (state, { filterName }) => ({\r\n ...state,\r\n filterName\r\n }))\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action): AppliedOptionsState {\r\n return changedControlsReducer(state, action);\r\n}\r\n\r\n/* Selectors */\r\nexport const { selectIds, selectEntities } = appliedOptionsAdapter.getSelectors();\r\n\r\nexport const selectAppliedOptionsIds = selectIds;\r\n\r\nexport const selectAppliedOptionsEntities = selectEntities;\r\n","/* NgRx */\r\nimport { EditFilterActions } from '@rfv/modules/global-filter/actions';\r\nimport { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\n\r\n/* Models */\r\nimport { FilterPostCategory } from '@rfv/modules/global-filter/models/filter-post-category.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface EditFilterState extends EntityState {\r\n editedFilterId: number | null;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n}\r\n\r\nexport const editFilterAdapter: EntityAdapter = createEntityAdapter(\r\n {\r\n selectId: optionsList => optionsList.CategoryId + (optionsList.SubcategoryId ? '-' + optionsList.SubcategoryId : ''),\r\n sortComparer: false\r\n});\r\n\r\nconst initialState: EditFilterState = editFilterAdapter.getInitialState( {\r\n editedFilterId: null,\r\n isLoading: false,\r\n isLoaded: false\r\n});\r\n\r\nconst editFilterReducer = createReducer(\r\n initialState,\r\n\r\n on(EditFilterActions.SetEditedFilterId, (state, { filterId }) => ({\r\n ...state,\r\n isLoading: !!filterId,\r\n isLoaded: false,\r\n editedFilterId: filterId\r\n })),\r\n\r\n on(EditFilterActions.SetEditedFilterData, (state, { filterPostCategories }) => editFilterAdapter.setAll(filterPostCategories, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n\r\n on(EditFilterActions.Clear, () => initialState)\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): EditFilterState {\r\n return editFilterReducer(state, action);\r\n}\r\n\r\n/* Selectors */\r\nexport const { selectIds, selectEntities, selectAll } = editFilterAdapter.getSelectors();\r\n","/* NgRx */\r\nimport { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { FilterUnitsActions } from '../actions';\r\n\r\n/* Models */\r\nimport { Asset } from '@rfv/modules/core/models';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface FilterUnitsState extends EntityState {\r\n searchQuery: string;\r\n}\r\n\r\nexport const filterUnitsAdapter: EntityAdapter = createEntityAdapter();\r\n\r\nexport const initialState: FilterUnitsState = filterUnitsAdapter.getInitialState({\r\n searchQuery: ''\r\n});\r\n\r\nconst filterUnitsReducer = createReducer(\r\n initialState,\r\n\r\n on(FilterUnitsActions.AddUnit, (state, { asset }) => filterUnitsAdapter.addOne(asset, {\r\n ...state\r\n })),\r\n\r\n on(FilterUnitsActions.AddMultipleUnits, (state, { assets }) => filterUnitsAdapter.setAll(assets, {\r\n ...state\r\n })),\r\n\r\n on(FilterUnitsActions.RemoveUnit, (state, { assetId }) => filterUnitsAdapter.removeOne(assetId, {\r\n ...state\r\n })),\r\n\r\n on(FilterUnitsActions.RemoveAll, (state) => filterUnitsAdapter.removeAll({\r\n ...state\r\n })),\r\n\r\n on(FilterUnitsActions.SearchUnits, (state, { searchString }) => ({\r\n ...state,\r\n searchQuery: searchString\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action) {\r\n return filterUnitsReducer(state, action);\r\n}\r\n\r\n/*Selectors */\r\nexport const { selectIds, selectAll } = filterUnitsAdapter.getSelectors();\r\n\r\nexport const selectUnitsList = selectAll;\r\nexport const selectUnitsIds = selectIds;\r\n","/* NgRx */\r\nimport { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { OptionsActions } from '../actions';\r\n/* Models */\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface OptionsState extends EntityState {\r\n selectedOptionsListId: string | null;\r\n // requiredOptionsListKey: string;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n}\r\n\r\nexport const optionsAdapter: EntityAdapter = createEntityAdapter(\r\n {\r\n selectId: optionsList => optionsList.CategoryId + (optionsList.SubCategoryId ? '-' + optionsList.SubCategoryId : ''),\r\n sortComparer: false\r\n }\r\n);\r\n\r\nexport const initialState: OptionsState = optionsAdapter.getInitialState({\r\n selectedOptionsListId: null,\r\n // requiredOptionsListKey: '',\r\n isLoading: false,\r\n isLoaded: false\r\n});\r\n\r\nconst optionsReducer = createReducer(\r\n initialState,\r\n\r\n on(OptionsActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(OptionsActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(OptionsActions.LoadSuccess, (state, { optionsList }) => optionsAdapter.addOne(optionsList, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true\r\n })),\r\n\r\n on(OptionsActions.LoadRequired, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(OptionsActions.LoadRequiredFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(OptionsActions.LoadRequiredSuccess, (state, { requiredOptions }) => optionsAdapter.addOne(requiredOptions, {\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false\r\n })),\r\n\r\n on(OptionsActions.OptionsLoaded, (state) => ({\r\n ...state,\r\n isLoaded: true\r\n })),\r\n\r\n on(OptionsActions.SetSelectedOptionsList, (state, { categoryId }) => ({\r\n ...state,\r\n selectedOptionsListId: categoryId,\r\n isLoading: false,\r\n isLoaded: false\r\n })),\r\n\r\n on(OptionsActions.SetRequiredOptionsListKey, (state, { key }) => ({\r\n ...state,\r\n requiredOptionsListKey: key\r\n }))\r\n\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action) {\r\n return optionsReducer(state, action);\r\n}\r\n\r\n/* Selectors */\r\nexport const { selectIds, selectEntities, selectAll } = optionsAdapter.getSelectors();\r\n\r\nexport const selectOptionsListIds = selectIds;\r\n\r\nexport const selectOptionsListEntities = selectEntities;\r\n\r\nexport const selectAllEntities = selectAll;\r\n\r\n\r\n","import { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { SavedFiltersActions } from '../actions';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface SavedFiltersState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n userFilters: SavedGlobalFilter[];\r\n error: HttpErrorResponse | null;\r\n}\r\n\r\nconst initialState: SavedFiltersState = {\r\n isLoading: false,\r\n isLoaded: false,\r\n userFilters: [],\r\n error: null\r\n};\r\n\r\nconst savedFiltersReducer = createReducer(\r\n initialState,\r\n\r\n on(SavedFiltersActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(SavedFiltersActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n userFilters: [],\r\n error\r\n })),\r\n\r\n on(SavedFiltersActions.LoadSuccess, (state, { globalFilters }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true, \r\n userFilters: globalFilters,\r\n error: null\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): SavedFiltersState {\r\n return savedFiltersReducer(state, action);\r\n}\r\n","import { createReducer, on } from '@ngrx/store';\r\nimport { SelectedFilterActions } from '../actions';\r\n\r\nexport interface SelectedFilterState {\r\n selectedFilterId: number | null;\r\n}\r\n\r\nconst initialState: SelectedFilterState = {\r\n selectedFilterId: null,\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(SelectedFilterActions.SetSelectedFilter, (state, { filterId }) => ({\r\n ...state,\r\n selectedFilterId: filterId\r\n }))\r\n);\r\n","import { FilterScreens } from '@rfv/modules/global-filter/enums/filter-screens.enum';\r\n\r\n/* NgRx */\r\nimport { createReducer, on } from '@ngrx/store';\r\nimport { Action } from '@ngrx/store/src/models';\r\nimport { LayoutActions } from '../actions';\r\n\r\nexport interface LayoutState {\r\n displayedMobileScreen: FilterScreens;\r\n}\r\n\r\nconst initialState = {\r\n displayedMobileScreen: FilterScreens.Categories\r\n};\r\n\r\nconst layoutReducer = createReducer(\r\n initialState,\r\n on(LayoutActions.setMobileScreen, (state, { displayedMobileScreen }) => ({ ...state, displayedMobileScreen }))\r\n);\r\n\r\nexport function reducer(state: LayoutState | undefined, action: Action) {\r\n return layoutReducer(state, action);\r\n}\r\n","import { ActionReducerMap, createFeatureSelector, createSelector } from '@ngrx/store';\r\nimport * as fromCategories from './categories.reducer';\r\nimport * as fromChangedControls from './changed-controls.reducer';\r\nimport * as fromEditFilter from './edit-filter.reducer';\r\nimport * as fromFilterUnits from './filter-units.reducer';\r\nimport * as fromOptionsList from './options.reducer';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromSavedFilters from './saved-filters.reducer';\r\nimport * as fromSelectedFilter from './selected-filter.reducer';\r\nimport * as fromLayout from './layout.reducer';\r\nimport { selectUnitsIds, selectUnitsList } from './filter-units.reducer';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n/* Lodash */\r\nimport { difference, isEqual } from 'lodash';\r\n\r\n\r\nexport interface GlobalFilterState {\r\n selectedFilter: fromSelectedFilter.SelectedFilterState;\r\n savedFilters: fromSavedFilters.SavedFiltersState;\r\n categories: fromCategories.CategoriesState;\r\n optionsList: fromOptionsList.OptionsState;\r\n changedControls: fromChangedControls.AppliedOptionsState;\r\n unitsList: fromFilterUnits.FilterUnitsState;\r\n editFilter: fromEditFilter.EditFilterState;\r\n layout: fromLayout.LayoutState;\r\n}\r\n\r\nexport interface State extends fromRoot.State {\r\n globalFilter: GlobalFilterState;\r\n}\r\n\r\nexport const reducers: ActionReducerMap = {\r\n selectedFilter: fromSelectedFilter.reducer,\r\n savedFilters: fromSavedFilters.reducer,\r\n categories: fromCategories.reducer,\r\n optionsList: fromOptionsList.reducer,\r\n changedControls: fromChangedControls.reducer,\r\n unitsList: fromFilterUnits.reducer,\r\n editFilter: fromEditFilter.reducer,\r\n layout: fromLayout.reducer\r\n};\r\n\r\n/* Selectors */\r\n\r\n// Feature Selector\r\nexport const getGlobalFilterState = createFeatureSelector('globalFilter');\r\n\r\n/*\r\n * SAVED FILTERS\r\n */\r\n// Get saved filter slice of state\r\nexport const getSavedFilters = createSelector(\r\n getGlobalFilterState,\r\n state => state.savedFilters\r\n);\r\n\r\n// Get filters saved by user\r\nexport const getUserSavedFilters = createSelector(\r\n getSavedFilters,\r\n state => state.userFilters\r\n);\r\n\r\n/**\r\n * LAYOUT\r\n */\r\nconst getLayoutSlice = createSelector(\r\n getGlobalFilterState,\r\n state => state.layout\r\n);\r\n\r\nexport const getMobileScreen = createSelector(\r\n getLayoutSlice,\r\n layout => layout.displayedMobileScreen\r\n);\r\n\r\n/*\r\n * SELECTED FILTER\r\n */\r\n// Get selected filter slice\r\nexport const getSelectedFilter = createSelector(\r\n getGlobalFilterState,\r\n state => state.selectedFilter\r\n);\r\n\r\n// Get selected filter id\r\nexport const getSelectedFilterId = createSelector(\r\n getSelectedFilter,\r\n state => state.selectedFilterId\r\n);\r\n\r\n// Get selected filter object\r\nexport const getSelectedFilterObj = createSelector(\r\n getUserSavedFilters,\r\n getSelectedFilterId,\r\n (savedFilters, selectedFilterId) => savedFilters && savedFilters.find(filter => filter.FilterId === selectedFilterId)\r\n);\r\n\r\n// Get selected filter name\r\nexport const getSelectedFilterName = createSelector(\r\n getSelectedFilterObj,\r\n state => state && state.Name\r\n);\r\n\r\n/*\r\n * CATEGORIES\r\n */\r\n// Get categories state\r\nexport const getCategoriesState = createSelector(\r\n getGlobalFilterState,\r\n state => state.categories\r\n);\r\n\r\n// Get categories loaded\r\nexport const getCategoriesLoaded = createSelector(\r\n getCategoriesState,\r\n state => state.isLoaded\r\n);\r\n\r\n// Get global filter categories\r\nexport const getFilterCategories = createSelector(\r\n getCategoriesState,\r\n state => state.categories\r\n);\r\n// Get global filter category by id\r\nexport const getFilterCategoryById = (id: number) => createSelector(\r\n getCategoriesState,\r\n state => state.categories?.find(category => category.CategoryId === id)\r\n);\r\n\r\n/*\r\n * OPTIONS\r\n */\r\n// Options List state.\r\nexport const getOptionsListState = createSelector(\r\n getGlobalFilterState,\r\n state => state.optionsList\r\n);\r\n\r\n// Single options list is loading.\r\nexport const getOptionsLoading = createSelector(\r\n getOptionsListState,\r\n state => state.isLoading\r\n);\r\n\r\n// Single options list is loaded.\r\nexport const getOptionsLoaded = createSelector(\r\n getOptionsListState,\r\n state => state.isLoaded\r\n);\r\n\r\n// All loaded options lists.\r\nexport const getOptionsEntities = createSelector(\r\n getOptionsListState,\r\n fromOptionsList.selectOptionsListEntities\r\n);\r\n\r\n// Array of loaded options lists ids.\r\nexport const getAllOptionsListsIds = createSelector(\r\n getOptionsListState,\r\n fromOptionsList.selectOptionsListIds\r\n);\r\n\r\n// Id of currently displayed options list.\r\nexport const getSelectedOptionsListId = createSelector(\r\n getOptionsListState,\r\n state => state.selectedOptionsListId\r\n);\r\n\r\n// Category name and subcategory name (if present) of currently displayed options list.\r\nexport const getOptionsListLabel = createSelector(\r\n getFilterCategories,\r\n getSelectedOptionsListId,\r\n (categoriesArray, selectedOptionsListId) => {\r\n if (selectedOptionsListId) {\r\n const [categoryId, subCategoryId] = selectedOptionsListId.split('-');\r\n if (categoriesArray && categoriesArray.length) {\r\n const categoryObject = categoriesArray.find(category => category.CategoryId === Number(categoryId));\r\n const subCategoryObject = categoryObject && categoryObject.Subcategories\r\n .find(subcategory => subcategory.SubcategoryId === Number(subCategoryId));\r\n\r\n return `${categoryObject ? categoryObject.CategoryName : ''}${subCategoryObject ? ', ' + subCategoryObject.SubcategoryName : ''}`;\r\n }\r\n return '';\r\n }\r\n }\r\n);\r\n\r\n// Selected options list.\r\nexport const getSelectedOptions = createSelector(\r\n getOptionsEntities,\r\n getSelectedOptionsListId,\r\n (optionsEntities, selectedOptionsListId) => optionsEntities[selectedOptionsListId]\r\n);\r\n\r\nexport const getAllOptions = createSelector(\r\n getOptionsListState,\r\n fromOptionsList.selectAllEntities\r\n);\r\n\r\nexport const getOptionsByCategoryId = (categoryId: number) => createSelector(\r\n getAllOptions,\r\n options => options.filter(option => option.CategoryId ===categoryId) \r\n)\r\n\r\n\r\n// Options list by id passed into selector\r\nexport const getOptionsById = createSelector(\r\n getOptionsEntities,\r\n optionsEntities => (id: string) => optionsEntities[id]\r\n);\r\n\r\n// Boolean, if selected options list is already saved in store\r\nexport const getIsSelectedOptionsListLoaded = createSelector(\r\n getAllOptionsListsIds,\r\n getSelectedOptionsListId,\r\n (allIds: string[], selectedOptionsListId: string) =>\r\n !selectedOptionsListId || allIds.includes(selectedOptionsListId)\r\n);\r\n\r\n/*\r\n * CHANGED CONTROLS\r\n */\r\nexport const getChangedControlsState = createSelector(\r\n getGlobalFilterState,\r\n state => state.changedControls\r\n);\r\n\r\nexport const getAppliedOptionsIds = createSelector(\r\n getChangedControlsState,\r\n fromChangedControls.selectIds\r\n);\r\n\r\nexport const getAppliedOptionsEntities = createSelector(\r\n getChangedControlsState,\r\n fromChangedControls.selectEntities\r\n);\r\n\r\nexport const getFilterName = createSelector(\r\n getChangedControlsState,\r\n state => state.filterName\r\n);\r\n\r\nexport const getBadgesCount = createSelector(\r\n getAppliedOptionsEntities,\r\n applied => {\r\n const badgesCount = {};\r\n Object.keys(applied).forEach(key => {\r\n badgesCount[key] = applied[key].Options.length;\r\n const [categoryId, subcategoryId] = key.split('-');\r\n if (subcategoryId) {\r\n badgesCount[categoryId] ? badgesCount[categoryId] += badgesCount[key] : badgesCount[categoryId] = badgesCount[key];\r\n }\r\n });\r\n return badgesCount;\r\n }\r\n);\r\n\r\nexport const getSelections = createSelector(\r\n getAppliedOptionsEntities,\r\n getOptionsEntities,\r\n getFilterCategories,\r\n (appliedOptions, optionsDefinitions, categories) => {\r\n let selections = [];\r\n Object.keys(appliedOptions).forEach(key => {\r\n const [categoryId, subcategoryId] = key.split('-');\r\n const categoryObj = categories.find(category => category.CategoryId === Number(categoryId));\r\n const subcategoryObj = (subcategoryId && categoryObj) &&\r\n categoryObj.Subcategories.find(subcategory => subcategory.SubcategoryId === Number(subcategoryId));\r\n const selectionControls = appliedOptions[key].Options.map(option => {\r\n\r\n if (optionsDefinitions[key]) {\r\n const optionDefinition = optionsDefinitions[key].Options.find(opt => opt.OptionId === Number(option.OptionId));\r\n const optionOperator = (optionDefinition.Operators && option.OperatorId) &&\r\n optionDefinition.Operators.find(operator => operator.Id === Number(option.OperatorId));\r\n\r\n return {\r\n id: option.OptionId,\r\n label: optionDefinition && optionDefinition.OptionLabel,\r\n operator: optionOperator && optionOperator.Value,\r\n value: `${option.Value}`,\r\n type: optionDefinition && optionDefinition.OptionType,\r\n path: `${key}.${option.OptionId}`\r\n };\r\n } else {\r\n return {};\r\n }\r\n });\r\n\r\n selections = [\r\n ...selections,\r\n {\r\n categoryLabel: categoryObj && categoryObj.CategoryName,\r\n subcategoryLabel: subcategoryObj && subcategoryObj.SubcategoryName,\r\n controls: selectionControls,\r\n }\r\n ];\r\n });\r\n return selections;\r\n }\r\n);\r\n\r\n/*\r\n * UNITS LIST\r\n */\r\nexport const getUnitsListState = createSelector(\r\n getGlobalFilterState,\r\n state => state.unitsList\r\n);\r\n\r\nexport const getUnitsList = createSelector(\r\n getUnitsListState,\r\n selectUnitsList\r\n);\r\n\r\nexport const getUnitsIds = createSelector(\r\n getUnitsListState,\r\n selectUnitsIds\r\n);\r\n\r\nexport const getSearchQuery = createSelector(\r\n getUnitsListState,\r\n state => state.searchQuery\r\n);\r\n\r\nexport const getUnitsSearchResults = createSelector(\r\n getSearchQuery,\r\n fromCore.Assets.Entities.getAll,\r\n (query, allAssets) => {\r\n if (query) {\r\n const matchString = query.toLowerCase();\r\n return allAssets.filter(asset => asset.name.toLowerCase().includes(matchString)).sort((a, b) => a.name.localeCompare(b.name));\r\n } else {\r\n return [];\r\n }\r\n }\r\n);\r\n\r\nexport const getIsSelectionsDisplayed = createSelector(\r\n getAppliedOptionsIds,\r\n getUnitsList,\r\n (appliedOptionsIds, unitsList) => appliedOptionsIds.length > 0 || unitsList.length > 0\r\n);\r\n\r\n/*\r\n * EDIT FILTER\r\n */\r\nexport const getEditedFilterState = createSelector(\r\n getGlobalFilterState,\r\n state => state.editFilter\r\n);\r\n\r\nexport const getEditedFilterId = createSelector(\r\n getEditedFilterState,\r\n state => state.editedFilterId\r\n);\r\n\r\nexport const getEditFilterIds = createSelector(\r\n getEditedFilterState,\r\n fromEditFilter.selectIds\r\n);\r\n\r\nexport const getEditedFilterEntities = createSelector(\r\n getEditedFilterState,\r\n fromEditFilter.selectEntities\r\n);\r\n\r\nexport const getEditFilterAll = createSelector(\r\n getEditedFilterState,\r\n fromEditFilter.selectAll\r\n);\r\n\r\nexport const getEditedFilterLoading = createSelector(\r\n getEditedFilterState,\r\n state => state.isLoading\r\n);\r\n\r\n// Return ids required for edited filter, but not yet loaded\r\nexport const getIdsToDownload = createSelector(\r\n getAllOptionsListsIds,\r\n getEditFilterIds,\r\n (loaded: string[], required: string[]) => difference(required, loaded)\r\n);\r\n\r\n// Return boolean, if something in new filter was added, or in edited changed\r\nexport const getIsFilterDirty = createSelector( // TODO: optimize\r\n getAppliedOptionsEntities,\r\n getUnitsIds,\r\n getEditedFilterEntities,\r\n getFilterName,\r\n (appliedOptions, units, editedFilter, filterName) => {\r\n const appliedIds = Object.keys(appliedOptions);\r\n const editedIds = Object.keys(editedFilter);\r\n\r\n if (!appliedIds.length && !units.length) {\r\n return false;\r\n }\r\n if (editedFilter[editedIds[0]] && filterName !== editedFilter[editedIds[0]].FilterLabel) {\r\n return true;\r\n }\r\n if (isEqual(appliedIds, editedIds) && !units.length) {\r\n let dirty = false;\r\n for (const categoryId of appliedIds) {\r\n const categoryApplied = appliedOptions[categoryId].Options;\r\n const categoryEdited = editedFilter[categoryId].Options;\r\n\r\n if (categoryApplied.length !== categoryEdited.length) {\r\n dirty = true;\r\n break;\r\n }\r\n\r\n for (const appliedOption of categoryApplied) {\r\n const editedOption = categoryEdited.find(edited => edited.OptionId === Number(appliedOption.OptionId));\r\n if (!editedOption || appliedOption.Value !== Number(editedOption.Value) ||\r\n appliedOption.OperatorId !== editedOption.OperatorId) {\r\n dirty = true;\r\n break;\r\n }\r\n }\r\n }\r\n return dirty;\r\n } else {\r\n return !(units.length && editedFilter['5'] && isEqual([...units].sort(), [...editedFilter['5'].AssetIds].sort()));\r\n }\r\n }\r\n);\r\n\r\n/**\r\n * POST\r\n */\r\nexport const getPostData = createSelector(\r\n getAppliedOptionsEntities,\r\n getUnitsList,\r\n getFilterName,\r\n getEditedFilterId,\r\n (appliedOptions, unitsList, filterName, editedId) => {\r\n if (unitsList.length) {\r\n return [{\r\n CategoryId: 5,\r\n FilterId: editedId || 0,\r\n FilterLabel: filterName,\r\n IsTemporary: false,\r\n Options: [ // Don't ask me why...\r\n {\r\n OptionId: null,\r\n Value: null,\r\n LegendValue: null,\r\n OperatorId: null\r\n }\r\n ],\r\n AssetIds: unitsList.map(unit => unit.id)\r\n }];\r\n } else {\r\n const postData = [];\r\n\r\n Object.keys(appliedOptions).forEach(key => {\r\n const [CategoryId, SubcategoryId] = key.split('-');\r\n const existingCategoryObj = postData.find(cat => cat.CategoryId === CategoryId);\r\n const Options = appliedOptions[key].Options.map(option => ({\r\n OptionId: option.OptionId,\r\n SubcategoryId: SubcategoryId || null,\r\n Value: option.Value,\r\n LegendValue: null,\r\n OperatorId: option.OperatorId\r\n }));\r\n\r\n if (existingCategoryObj) {\r\n existingCategoryObj.Options.push(...Options);\r\n } else {\r\n postData.push({\r\n CategoryId,\r\n FilterId: editedId || 0,\r\n FilterLabel: filterName,\r\n IsTemporary: false,\r\n Options: Options,\r\n AssetIds: null\r\n });\r\n }\r\n });\r\n return postData;\r\n }\r\n }\r\n);\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'ng-template[involveAccordionContent]'\r\n})\r\nexport class InvolveAccordionContentDirective {\r\n public constructor(\r\n public template: TemplateRef\r\n ) { }\r\n}","import { Component, ContentChildren, QueryList } from '@angular/core';\r\nimport { CdkAccordion } from '@angular/cdk/accordion';\r\nimport { InvolveAccordionComponent } from './accordion.component';\r\n\r\n@Component({\r\n selector: 'involve-accordion-group',\r\n templateUrl: 'accordion-group.component.html',\r\n styles: [\r\n ':host { display: flex; flex-direction: column; flex: 1 1 100% }'\r\n ]\r\n})\r\nexport class InvolveAccordionGroupComponent extends CdkAccordion {\r\n @ContentChildren(InvolveAccordionComponent)\r\n private _accordions: QueryList;\r\n\r\n public isOnlyExpanded(accordion: InvolveAccordionComponent) {\r\n if (!this._accordions)\r\n return false;\r\n\r\n for (let i = 0; i < this._accordions.length; i++)\r\n if (accordion !== this._accordions.get(i) && this._accordions.get(i).expanded)\r\n return false;\r\n\r\n return accordion.expanded;\r\n }\r\n}","","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-accordion-header',\r\n template: ''\r\n})\r\nexport class InvolveAccordionHeaderComponent { }","
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
","import { ChangeDetectorRef, Component, ContentChild, HostBinding, Input, Optional, ViewContainerRef } from '@angular/core';\r\nimport { CdkAccordionItem } from '@angular/cdk/accordion';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { filter, startWith, take, takeUntil } from 'rxjs/operators';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { InvolveAccordionContentDirective } from './accordion-content.component';\r\nimport { InvolveAccordionGroupComponent } from './accordion-group.component';\r\nimport { UniqueSelectionDispatcher } from '@angular/cdk/collections';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Component({\r\n selector: 'involve-accordion',\r\n exportAs: 'involveAccordion',\r\n templateUrl: 'accordion.component.html',\r\n styles: [\r\n `.accordion-max-width { max-width: 100% !important }`\r\n ]\r\n})\r\nexport class InvolveAccordionComponent extends CdkAccordionItem {\r\n /**\r\n * Whether this accordion should persist its state to localStorage.\r\n */\r\n @Input()\r\n public stateKey: string;\r\n\r\n @Input()\r\n public defaultExpanded: boolean = false;\r\n\r\n @Input()\r\n public showChevron: boolean = true;\r\n\r\n @Input()\r\n public activeStyling: boolean = true;\r\n\r\n @Input()\r\n public maxFlex: number;\r\n\r\n @Input('disabled')\r\n public set isDisabled(disabled: boolean) {\r\n this.disabled = disabled;\r\n }\r\n\r\n @HostBinding('style.flex')\r\n public get flex() {\r\n if (!this.maxFlex)\r\n return 'initial';\r\n\r\n if (this.expanded)\r\n return `1 1 ${this.maxFlex}%`;\r\n\r\n return 'none';\r\n }\r\n\r\n @HostBinding('style.max-height')\r\n public get maxHeight() {\r\n if (!this.maxFlex)\r\n return 'initial';\r\n\r\n if (this._accordionGroup) {\r\n if (!this._accordionGroup.isOnlyExpanded(this))\r\n return `${this.maxFlex}%`;\r\n } else if (this.expanded) {\r\n return `${this.maxFlex}%`;\r\n }\r\n }\r\n\r\n /**\r\n * Directive containing content to lazy load.\r\n */\r\n @ContentChild(InvolveAccordionContentDirective) _lazyContent: InvolveAccordionContentDirective;\r\n\r\n public portal: TemplatePortal;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n @Optional()\r\n private _accordionGroup: InvolveAccordionGroupComponent,\r\n private _uniqueSelectionDispatcher: UniqueSelectionDispatcher,\r\n private _cdr: ChangeDetectorRef,\r\n private _vcr: ViewContainerRef,\r\n private _store$: Store,\r\n ) {\r\n super(_accordionGroup, _cdr, _uniqueSelectionDispatcher);\r\n }\r\n\r\n\r\n public ngOnInit() {\r\n if (this.stateKey || this.defaultExpanded) {\r\n this._store$.pipe(take(1), select(fromRoot.Storage.getBooleanFromLocalStorage(this.stateKey))).subscribe(localStorage => {\r\n this.expanded = localStorage ? true : this.defaultExpanded;\r\n this._cdr.markForCheck();\r\n })\r\n }\r\n\r\n this.expandedChange.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(expanded => {\r\n if (this.stateKey) {\r\n if (expanded)\r\n this._store$.dispatch(fromRoot.Storage.SaveToLocalStorage(this.stateKey, 'true'));\r\n else\r\n this._store$.dispatch(fromRoot.Storage.RemoveFromLocalStorage(this.stateKey));\r\n }\r\n });\r\n }\r\n\r\n public ngAfterContentInit() {\r\n if (this._lazyContent) {\r\n // open lazy loaded content when accordion is opened\r\n this.opened.pipe(\r\n startWith(null!),\r\n filter(() => this.expanded && !this.portal),\r\n take(1)\r\n ).subscribe(() => {\r\n this.portal = new TemplatePortal(this._lazyContent.template, this._vcr)\r\n });\r\n }\r\n }\r\n\r\n public toggle() {\r\n if (this.disabled)\r\n return;\r\n\r\n this.expanded = !this.expanded;\r\n }\r\n\r\n public open() {\r\n this.expanded = true;\r\n }\r\n\r\n public close() {\r\n this.expanded = false;\r\n }\r\n}","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Component({\r\n selector: 'involve-badge-option',\r\n template: ``,\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'option' }\r\n ]\r\n})\r\nexport class InvolveBadgeOptionComponent { \r\n @Input() public value;\r\n @Input() public color = \"#000000\";\r\n @Input() public test: string; \r\n\r\n @ViewChild('template', { read: TemplateRef, static: true })\r\n public templateRef: TemplateRef;\r\n\r\n}\r\n","\r\n \r\n option.value\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n","import { Component, ContentChildren, Input, OnInit, QueryList } from '@angular/core';\r\nimport { InvolveBadgeOptionComponent } from './badge-option.component';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Component({\r\n selector: 'involve-badge',\r\n templateUrl: 'badge.component.html',\r\n styleUrls: ['badge.component.scss'],\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'badge' }\r\n ]\r\n})\r\nexport class InvolveBadgeComponent implements OnInit {\r\n @Input() public value: string | number;\r\n\r\n @ContentChildren(InvolveBadgeOptionComponent, { descendants: true })\r\n public options: QueryList; \r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n}\r\n","\r\n \r\n\r\n\r\n\r\n \r\n","import { Component, Renderer2, ElementRef, Host } from \"@angular/core\";\r\nimport { InvolveButtonComponent } from \"./button.component\";\r\n\r\n@Component({\r\n selector: 'button[involveButtonPrimary]',\r\n templateUrl: './button.component.html',\r\n })\r\n export class InvolvePrimaryButtonComponent extends InvolveButtonComponent {\r\n \r\n public constructor(\r\n @Host()\r\n protected _host: ElementRef,\r\n renderer: Renderer2\r\n ) {\r\n super(_host);\r\n\r\n renderer.addClass(_host.nativeElement, 'button-text-nowrap');\r\n renderer.addClass(_host.nativeElement, 'button');\r\n renderer.addClass(_host.nativeElement, 'primary-button');\r\n }\r\n \r\n }","import { Component, Renderer2, ElementRef, Host } from \"@angular/core\";\r\nimport { InvolveButtonComponent } from \"./button.component\";\r\n\r\n@Component({\r\n selector: 'button[involveButtonSecondary]',\r\n templateUrl: './button.component.html',\r\n })\r\n export class InvolveSecondaryButtonComponent extends InvolveButtonComponent {\r\n public constructor(\r\n @Host()\r\n protected _host: ElementRef,\r\n renderer: Renderer2\r\n ) {\r\n super(_host);\r\n\r\n renderer.addClass(_host.nativeElement, 'button-text-nowrap');\r\n renderer.addClass(_host.nativeElement, 'button');\r\n renderer.addClass(_host.nativeElement, 'secondary-button'); \r\n }\r\n}","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { AfterViewInit, Component, ElementRef, Host, Input } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Component({\r\n // selector: 'button[involveButtonPrimary], button[involveButtonSecondary]',\r\n templateUrl: './button.component.html',\r\n host: {\r\n '[style.overflow]': '\"hidden\"',\r\n '[style.width.px]': 'width > 0 ? width : undefined',\r\n '[attr.disabled]': 'isProcessing || disabled ? true : null'\r\n },\r\n\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'button' } ]\r\n})\r\nexport class InvolveButtonComponent {\r\n @Input()\r\n public isProcessing: boolean = false;\r\n\r\n @Input()\r\n public get disabled() { return this._disabled; }\r\n public set disabled(value: string | boolean) { this._disabled = coerceBooleanProperty(value); }\r\n private _disabled: boolean;\r\n\r\n public width: number = 0;\r\n\r\n public constructor(\r\n @Host()\r\n protected _host: ElementRef\r\n ) {}\r\n\r\n private _viewInit = false;\r\n public ngAfterViewInit() {\r\n this._viewInit = true;\r\n }\r\n\r\n public ngAfterContentChecked() {\r\n if (!this._viewInit)\r\n return;\r\n \r\n if (!this.width && this._host.nativeElement.clientWidth > 0)\r\n this.width = this._host.nativeElement.clientWidth;\r\n }\r\n}\r\n","\r\n","import { ChangeDetectorRef, Component, Input, Optional, Output, EventEmitter, HostListener } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\nimport { InvolveFormFieldControl } from '../form-field/form-field-control';\r\n\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n@Component({\r\n selector: 'involve-checkbox',\r\n templateUrl: 'checkbox.component.html',\r\n providers: [\r\n { provide: InvolveFormFieldControl, useExisting: InvolveCheckboxComponent },\r\n { provide: DATA_CY_TYPE, useValue: 'checkbox' }\r\n ],\r\n styles: [`\r\n :host {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n user-select: none;\r\n }\r\n\r\n .checkbox__input{\r\n width: 0px !important; \r\n height: 0px !important;\r\n margin: 0px !important; \r\n position: initial !important; \r\n }\r\n\r\n .checkbox__input:hover + .checkbox__label .checkbox__square,\r\n .checkbox__input:focus + .checkbox__label .checkbox__square {\r\n box-shadow: 0 0 0 1px #828282 inset;\r\n }\r\n \r\n .pseudo {\r\n pointer-events: none !important;\r\n }\r\n `]\r\n})\r\nexport class InvolveCheckboxComponent implements InvolveFormFieldControl, ControlValueAccessor {\r\n @Input()\r\n public get id() { return this._id; }\r\n public set id(value: string) { this._id = value; }\r\n protected _id = `involve-checkbox-${__id++}`;;\r\n\r\n @Input()\r\n public inverted: boolean = false;\r\n\r\n @Input()\r\n public indeterminate: boolean = false; \r\n\r\n /**\r\n * In pseudo mode the checkbox will only display its value and will not emit.\r\n */\r\n @Input()\r\n public pseudo: boolean = false;\r\n\r\n @Input('checked')\r\n private _value: boolean = false;\r\n\r\n public get value() { return this._value; }\r\n public set value(value: boolean) {\r\n this._value = value;\r\n this._onChange(value);\r\n this.checkedChange.emit(this._value);\r\n this._cdr.detectChanges();\r\n }\r\n\r\n @Output()\r\n public checkedChange = new EventEmitter();\r\n\r\n @Input()\r\n public get disabled(): boolean | string { return this._disabled; }\r\n public set disabled(value: boolean | string) { this._disabled = coerceBooleanProperty(value); }\r\n protected _disabled = false;\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef,\r\n \r\n @Optional()\r\n public control: NgControl,\r\n ) { \r\n if (this.control)\r\n this.control.valueAccessor = this; \r\n }\r\n\r\n @Input()\r\n public get required(): boolean { return this._required; }\r\n public set required(value: boolean) { this._required = coerceBooleanProperty(value); }\r\n protected _required = false;\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: MouseEvent) {\r\n if (!this.disabled && !this.pseudo) {\r\n this.toggle(event); \r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n public onKeydown(event: KeyboardEvent) {\r\n if ((event.code === 'Space' || event.code === 'Enter') && !this.disabled && !this.pseudo) {\r\n this.toggle(event);\r\n }\r\n }\r\n\r\n public writeValue(value: boolean): void {\r\n this._value = value;\r\n }\r\n\r\n private _onChange = (value: boolean): void => {};\r\n public registerOnChange(fn: (value: boolean) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n private _onTouch = (): void => {};\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouch = fn;\r\n }\r\n\r\n public toggle(event: Event) {\r\n if (this.indeterminate && this.inverted && this.value === null){\r\n this.value = false;\r\n }else{\r\n this.value = !this.value;\r\n }\r\n event.stopPropagation(); \r\n }\r\n\r\n public onContainerClick(event: MouseEvent) {\r\n if (!this.disabled && !this.pseudo) {\r\n this.toggle(event);\r\n }\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n \r\n}","
\r\n
\r\n
\r\n \r\n {{title}}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'collapsible-panel',\r\n templateUrl: './collapsible-panel.component.html',\r\n styleUrls: ['./collapsible-panel.component.scss'],\r\n animations: [\r\n trigger('openClose', [\r\n state('true', style({ width: '46px' })),\r\n state('false', style({ width: '' })),\r\n transition('false <=> true', animate(200))\r\n ])\r\n ]\r\n})\r\nexport class CollapsiblePanelComponent {\r\n\r\n @HostBinding('@openClose') get animationState(): boolean {\r\n return this.collapse;\r\n }\r\n\r\n @Input()\r\n public get collapse() { return this._collapse; }\r\n public set collapse(value: boolean) { this._collapse = value; }\r\n\r\n private _collapse: boolean = false;\r\n\r\n @Input() title: string = '';\r\n\r\n @Input() align: 'start' | 'end' = 'end';\r\n\r\n @Output() collapseChange = new EventEmitter();\r\n\r\n toggle() {\r\n //this.collapse = !this.collapse; // TODO(kluu): shouldn't rely on the implementer to capture the event and set this!\r\n this.collapseChange.emit(this.collapse);\r\n }\r\n}\r\n","\r\n\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n HostListener,\r\n SimpleChanges,\r\n OnChanges,\r\n Output,\r\n ViewChild,\r\n ViewEncapsulation,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\n\r\nimport { IColor, Color } from './color';\r\n\r\n/**\r\n * Color picker selector.\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n selector: 'color-picker-selector',\r\n templateUrl: 'color-picker-selector.component.html'\r\n})\r\nexport class InvolveColorPickerSelectorComponent implements AfterViewInit, OnChanges {\r\n private _color = new Color();\r\n\r\n private _value: string | IColor = 'red';\r\n\r\n @Input('color')\r\n public get value() {\r\n return this._value;\r\n }\r\n\r\n public set value(color: string | IColor) {\r\n this._value = color;\r\n }\r\n\r\n @Output()\r\n public colorChange = new EventEmitter();\r\n\r\n @Input()\r\n public alphaChannel: boolean = true;\r\n\r\n @Input()\r\n public hexMode: boolean = true;\r\n\r\n @Input()\r\n public format: 'html' | 'json' = 'html';\r\n\r\n @ViewChild('swatch', { static: false })\r\n private _swatchCanvas: ElementRef;\r\n private _swatchContext: CanvasRenderingContext2D;\r\n\r\n @ViewChild('swatchFrame', { static: false })\r\n private _swatchFrame: ElementRef;\r\n\r\n @ViewChild('swatchCursor', { static: false })\r\n private _swatchCursor: ElementRef;\r\n private _swatchPosition: { x: number, y: number; } = { x: 0, y: 0 };\r\n private _swatchMoving: boolean = false;\r\n\r\n @ViewChild('hue', { static: false })\r\n private _hueCanvas: ElementRef;\r\n private _hueContext: CanvasRenderingContext2D;\r\n\r\n @ViewChild('hueFrame', { static: false })\r\n private _hueFrame: ElementRef;\r\n\r\n @ViewChild('hueSlider', { static: false })\r\n private _hueSlider: ElementRef;\r\n private _huePosition: number = 0;\r\n private _hueMoving: boolean = false;\r\n\r\n @ViewChild('alpha', { static: false })\r\n private _alphaCanvas: ElementRef;\r\n private _alphaContext: CanvasRenderingContext2D;\r\n\r\n @ViewChild('alphaFrame', { static: false })\r\n private _alphaFrame: ElementRef;\r\n\r\n @ViewChild('alphaSlider', { static: false })\r\n private _alphaSlider: ElementRef;\r\n private _alphaPosition: number = 0;\r\n private _alphaMoving: boolean = false;\r\n\r\n @ViewChild('preview', { static: false })\r\n private _previewCanvas: ElementRef;\r\n private _previewContext: CanvasRenderingContext2D;\r\n\r\n @ViewChild('inputContainer', { static: false })\r\n private _inputContainer: ElementRef;\r\n @ViewChild('inputHint', { static: false })\r\n private _intputHint: ElementRef;\r\n @ViewChild('input', { static: false })\r\n private _inputElement: ElementRef;\r\n\r\n public hasInit = false;\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n public ngAfterViewInit() {\r\n setTimeout(() => {\r\n this._swatchContext = this._swatchCanvas.nativeElement.getContext('2d');\r\n this._swatchContext.canvas.width = this._swatchFrame.nativeElement.clientWidth;\r\n this._swatchContext.canvas.height = this._swatchFrame.nativeElement.clientHeight;\r\n\r\n this._hueContext = this._hueCanvas.nativeElement.getContext('2d');\r\n this._hueContext.canvas.width = this._hueFrame.nativeElement.clientWidth;\r\n this._hueContext.canvas.height = this._hueFrame.nativeElement.clientHeight;\r\n\r\n this._alphaContext = this._alphaCanvas.nativeElement.getContext('2d');\r\n this._alphaContext.canvas.width = this._alphaFrame.nativeElement.clientWidth;\r\n this._alphaContext.canvas.height = this._alphaFrame.nativeElement.clientHeight;\r\n\r\n this._previewContext = this._previewCanvas.nativeElement.getContext('2d');\r\n this._previewContext.canvas.width = this._inputContainer.nativeElement.clientWidth;\r\n this._previewContext.canvas.height = this._inputContainer.nativeElement.clientHeight;\r\n\r\n this.parseColor(this._value, this.format);\r\n this.colorToInput();\r\n this.invalidate(true, false);\r\n\r\n this.hasInit = true;\r\n this._cdr.markForCheck();\r\n });\r\n\r\n }\r\n\r\n private parseColor(value: string | IColor, format: 'html' | 'json') {\r\n switch (format) {\r\n case 'html':\r\n if (!this._color.parse(value))\r\n return;\r\n \r\n break;\r\n \r\n case 'json':\r\n if (!this._color.parse((value).color))\r\n return;\r\n\r\n this._color.alpha = (value).alpha;\r\n break;\r\n }\r\n\r\n // update swatch position\r\n this._swatchPosition.x = this._color.hsv.s * this._swatchFrame.nativeElement.clientWidth;\r\n this._swatchPosition.y = (1 - this._color.hsv.v) * this._swatchFrame.nativeElement.clientHeight;\r\n\r\n // update hue position\r\n this._huePosition = (this._color.hsv.h / 360) * this._hueFrame.nativeElement.clientHeight;\r\n\r\n // update alpha position\r\n this._alphaPosition = (1 - this._color.alpha) * this._hueFrame.nativeElement.clientHeight;\r\n\r\n return true;\r\n }\r\n\r\n private colorToInput() {\r\n if (this.hexMode) {\r\n this._inputElement.nativeElement.value = this._color.toString('hex', this.alphaChannel);\r\n this._intputHint.nativeElement.innerText = this._color.toString('rgb', this.alphaChannel);\r\n } else {\r\n this._inputElement.nativeElement.value = this._color.toString('rgb', this.alphaChannel);\r\n this._intputHint.nativeElement.innerText = this._color.toString('hex', this.alphaChannel);\r\n }\r\n }\r\n\r\n public inputToColor() {\r\n if (this.parseColor(this._inputElement.nativeElement.value, 'html')) {\r\n this.invalidate();\r\n\r\n this._intputHint.nativeElement.innerText = this.hexMode\r\n ? this._color.toString('rgb', this.alphaChannel)\r\n : this._color.toString('hex', this.alphaChannel);\r\n }\r\n }\r\n\r\n public toggleHexMode() {\r\n this.hexMode = !this.hexMode;\r\n this.colorToInput();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if (changes.color && !changes.color.firstChange) {\r\n if (this.parseColor(changes.color.currentValue, this.format)) {\r\n this.invalidate();\r\n this.colorToInput();\r\n }\r\n }\r\n }\r\n\r\n private invalidate(updateInput: boolean = true, emit: boolean = true) {\r\n // update swatch cursor\r\n this._swatchCursor.nativeElement.style.left = `${this._swatchPosition.x}px`;\r\n this._swatchCursor.nativeElement.style.top = `${this._swatchPosition.y}px`;\r\n this._swatchCursor.nativeElement.style.backgroundColor = this._color.toString('hex', false);\r\n\r\n // update hue slider\r\n this._hueSlider.nativeElement.style.top = `${this._huePosition}px`;\r\n this._hueSlider.nativeElement.style.backgroundColor = this._color.toString('hue', false);\r\n\r\n // update alpha slider\r\n this._alphaSlider.nativeElement.style.top = `${this._alphaPosition}px`;\r\n this._alphaSlider.nativeElement.style.backgroundColor = 'black';\r\n\r\n // update input color\r\n if ((this.alphaChannel && this._color.alpha < 0.4) || this._color.isLight) {\r\n this._inputContainer.nativeElement.classList.remove('light');\r\n } else {\r\n this._inputContainer.nativeElement.classList.add('light');\r\n }\r\n\r\n // draw\r\n this.drawHue();\r\n this.drawSwatch();\r\n this.drawAlpha();\r\n this.drawPreview();\r\n\r\n // emit\r\n this._value = this.alphaChannel ? this._color.toString('rgb', true) : this._color.toString('hex', false);\r\n\r\n if (emit) {\r\n switch (this.format) {\r\n case 'html':\r\n this.colorChange.emit(this._value);\r\n break;\r\n \r\n case 'json':\r\n this.colorChange.emit({\r\n color: this._color.toString('hex', false),\r\n alpha: this._color.alpha\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private drawSwatch() {\r\n if (!this._swatchContext)\r\n return;\r\n\r\n this._swatchContext.beginPath();\r\n this._swatchContext.rect(0, 0, this._swatchContext.canvas.width, this._swatchContext.canvas.height);\r\n this._swatchContext.closePath();\r\n\r\n const valueGradient = this._swatchContext.createLinearGradient(0, 1, 0, this._swatchContext.canvas.height);\r\n\r\n valueGradient.addColorStop(0, 'white');\r\n valueGradient.addColorStop(1, 'black');\r\n\r\n this._swatchContext.fillStyle = valueGradient;\r\n this._swatchContext.fill();\r\n\r\n const saturationGradient = this._swatchContext.createLinearGradient(1, 0, this._swatchContext.canvas.width, 0);\r\n\r\n saturationGradient.addColorStop(0, `hsla(${this._color.hsl.h},100%,50%,0)`);\r\n saturationGradient.addColorStop(1, `hsla(${this._color.hsl.h},100%,50%,1)`);\r\n\r\n this._swatchContext.globalCompositeOperation = 'multiply';\r\n this._swatchContext.fillStyle = saturationGradient;\r\n this._swatchContext.fill();\r\n\r\n this._swatchContext.globalCompositeOperation = 'source-over';\r\n }\r\n\r\n private drawHue() {\r\n if (!this._hueContext)\r\n return;\r\n\r\n this._hueContext.clearRect(0, 0, this._hueContext.canvas.width, this._hueContext.canvas.height);\r\n\r\n const hueGradient = this._hueContext.createLinearGradient(0, 1, 0, this._hueContext.canvas.height);\r\n\r\n hueGradient.addColorStop(0, 'rgb(255, 0, 0)');\r\n hueGradient.addColorStop(0.17, 'rgb(255, 255, 0)');\r\n hueGradient.addColorStop(0.33, 'rgb(0, 255, 0)');\r\n hueGradient.addColorStop(0.50, 'rgb(0, 255, 255)');\r\n hueGradient.addColorStop(0.67, 'rgb(0, 0, 255)');\r\n hueGradient.addColorStop(0.83, 'rgb(255, 0, 255)');\r\n hueGradient.addColorStop(1, 'rgb(255, 0, 0');\r\n\r\n this._hueContext.fillStyle = hueGradient;\r\n this._hueContext.fillRect(0, 0, this._hueContext.canvas.width, this._hueContext.canvas.height);\r\n }\r\n\r\n private drawAlpha() {\r\n if (!this._alphaContext)\r\n return;\r\n\r\n this.drawAlphaBackground(this._alphaContext, 5);\r\n\r\n const alphaGradient = this._alphaContext.createLinearGradient(0, 0, 0, this._alphaContext.canvas.height);\r\n\r\n alphaGradient.addColorStop(0, 'black');\r\n alphaGradient.addColorStop(1, 'rgba(255,255,255,0)');\r\n\r\n this._alphaContext.fillStyle = alphaGradient;\r\n this._alphaContext.fillRect(0, 0, this._alphaContext.canvas.width, this._alphaContext.canvas.height);\r\n }\r\n\r\n private drawPreview() {\r\n if (!this._previewContext)\r\n return;\r\n\r\n this.drawAlphaBackground(this._previewContext, 12);\r\n\r\n this._previewContext.fillStyle = this._color.toString('rgb', this.alphaChannel);\r\n this._previewContext.fillRect(0, 0, this._previewContext.canvas.width, this._previewContext.canvas.height);\r\n }\r\n\r\n private drawAlphaBackground(context: CanvasRenderingContext2D, blockSize: number = 6) {\r\n let width = context.canvas.width;\r\n let height = context.canvas.height;\r\n\r\n let rows = Math.floor(height / blockSize);\r\n let cols = Math.floor(width / blockSize);\r\n\r\n let blockWidth = blockSize * (width / (cols * blockSize));\r\n let blockHeight = blockSize * (height / (rows * blockSize));\r\n\r\n context.clearRect(0, 0, width, height);\r\n\r\n context.beginPath();\r\n\r\n for (let row = 0; row < rows; row++) {\r\n for (let col = 0; col < cols / 2; ++col) {\r\n context.rect(2 * col * blockWidth + (row % 2 ? 0 : blockWidth), row * blockHeight, blockWidth, blockHeight);\r\n }\r\n }\r\n\r\n context.closePath();\r\n\r\n context.fillStyle = '#efefef';\r\n context.fill();\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n public mousedown(event: MouseEvent) {\r\n if (event.button > 1)\r\n return;\r\n\r\n if (event.target === this._swatchFrame.nativeElement || event.target === this._swatchCursor.nativeElement) {\r\n this._swatchMoving = true;\r\n this.mousemove(event);\r\n } else if (event.target === this._hueFrame.nativeElement || event.target === this._hueSlider.nativeElement) {\r\n this._hueMoving = true;\r\n this.mousemove(event);\r\n } else if (this.alphaChannel && event.target === this._alphaFrame.nativeElement || event.target === this._alphaSlider.nativeElement) {\r\n this._alphaMoving = true;\r\n this.mousemove(event);\r\n }\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n public mouseup(event: MouseEvent) {\r\n this._hueMoving = false;\r\n this._alphaMoving = false;\r\n this._swatchMoving = false;\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n public mousemove(event: MouseEvent) {\r\n if (this._hueMoving) {\r\n const offset = this._hueFrame.nativeElement.getBoundingClientRect();\r\n\r\n if (event.clientY > offset.top) {\r\n if (event.clientY < offset.bottom) {\r\n this._huePosition = event.clientY - offset.top;\r\n } else {\r\n this._huePosition = offset.height;\r\n }\r\n } else {\r\n this._huePosition = 0;\r\n }\r\n\r\n this._color.hsv.h = (this._huePosition / offset.height) * 360;\r\n\r\n this.invalidate();\r\n this.colorToInput();\r\n\r\n } else if (this._alphaMoving) {\r\n const offset = this._alphaFrame.nativeElement.getBoundingClientRect();\r\n\r\n if (event.clientY > offset.top) {\r\n if (event.clientY < offset.bottom) {\r\n this._alphaPosition = event.clientY - offset.top;\r\n } else {\r\n this._alphaPosition = offset.height;\r\n }\r\n } else {\r\n this._alphaPosition = 0;\r\n }\r\n\r\n this._color.alpha = 1 - (this._alphaPosition / offset.height);\r\n\r\n this.invalidate();\r\n this.colorToInput();\r\n\r\n } else if (this._swatchMoving) {\r\n const offset = this._swatchFrame.nativeElement.getBoundingClientRect();\r\n\r\n if (event.clientY > offset.top) {\r\n if (event.clientY < offset.bottom) {\r\n this._swatchPosition.y = event.clientY - offset.top;\r\n } else {\r\n this._swatchPosition.y = offset.height;\r\n }\r\n } else {\r\n this._swatchPosition.y = 0;\r\n }\r\n\r\n if (event.clientX > offset.left) {\r\n if (event.clientX < offset.right) {\r\n this._swatchPosition.x = event.clientX - offset.left;\r\n } else {\r\n this._swatchPosition.x = offset.width;\r\n }\r\n } else {\r\n this._swatchPosition.x = 0;\r\n }\r\n\r\n this._color.hsv.s = this._swatchPosition.x / offset.width;\r\n this._color.hsv.v = 1 - (this._swatchPosition.y / offset.height);\r\n\r\n this.invalidate();\r\n this.colorToInput();\r\n }\r\n }\r\n}","
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
","\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
","// ng\r\nimport { ViewEncapsulation, Component, EventEmitter, HostBinding, Input, Output, OnDestroy, Directive } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { CdkOverlayOrigin } from '@angular/cdk/overlay';\r\n\r\n// rxjs\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { debounceTime, switchMap } from 'rxjs/operators';\r\n\r\nimport { IColor } from './color';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Directive({\r\n selector: 'involve-color-picker-content'\r\n})\r\nexport class InvolveColorPickerContentDirective {}\r\n\r\n/**\r\n * Displays a color picker.\r\n */\r\n@Component({\r\n //changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n exportAs: \"involveColorPicker\",\r\n selector: \"involve-color-picker\",\r\n templateUrl: \"color-picker.component.html\",\r\n styleUrls: [\"color-picker.component.scss\"],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: InvolveColorPickerComponent,\r\n multi: true\r\n },\r\n { provide: DATA_CY_TYPE, useValue: 'colorPicker' }\r\n ]\r\n})\r\nexport class InvolveColorPickerComponent implements ControlValueAccessor, OnDestroy {\r\n @HostBinding(\"class\")\r\n private class = \"color-picker\";\r\n\r\n @Input()\r\n public color: string | IColor;\r\n\r\n @Input()\r\n public hide$ = new BehaviorSubject(false);\r\n\r\n @Input()\r\n public origin: CdkOverlayOrigin;\r\n\r\n @Input()\r\n public iconSize: number = 30;\r\n\r\n @Output()\r\n public colorChange = new EventEmitter();\r\n private _colorChange$ = new Subject();\r\n\r\n @Input()\r\n public set debounce(value: number) {\r\n this._debounce$.next(value);\r\n }\r\n public _debounce$ = new BehaviorSubject(0);\r\n\r\n @Input()\r\n public alphaChannel: boolean = true;\r\n\r\n @Input()\r\n public format: 'html' | 'json' = 'html';\r\n\r\n @Input()\r\n public autoSelect: boolean = true;\r\n\r\n @Input()\r\n public open: boolean = false;\r\n\r\n @Input()\r\n public get disabled() { return this._disabled; }\r\n public set disabled(value: string | boolean) { this._disabled = coerceBooleanProperty(value); }\r\n protected _disabled: boolean;\r\n\r\n @Output()\r\n public openChange = new EventEmitter();\r\n\r\n public destroyed$ = new Subject();\r\n\r\n private _selectedColor: string | IColor;\r\n\r\n public constructor() {\r\n this._debounce$.pipe(\r\n switchMap(debounce => this._colorChange$.pipe(\r\n debounceTime(debounce)\r\n ))\r\n ).subscribe(value => this.colorChange.emit(value));\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._debounce$.complete();\r\n this._colorChange$.complete();\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n public writeValue(color: string | IColor) {\r\n this.color = color;\r\n }\r\n\r\n private _onchange(color: string | IColor) { }\r\n public registerOnChange(fn: (color: string | IColor) => void) {\r\n this._onchange = fn;\r\n }\r\n\r\n private _ontouch() { }\r\n public registerOnTouched(fn: any) {\r\n this._ontouch = fn;\r\n }\r\n\r\n public onColorChange(color: string | IColor) {\r\n this._selectedColor = color; \r\n\r\n if (this.autoSelect) {\r\n this.color = this._selectedColor;\r\n this._colorChange$.next(color);\r\n this._onchange(color);\r\n }\r\n }\r\n\r\n public toggle() {\r\n this.open = !this.open;\r\n this.openChange.emit(this.open);\r\n }\r\n\r\n public close() {\r\n this.open = false;\r\n this.openChange.emit(false);\r\n }\r\n\r\n public select() {\r\n this.color = this._selectedColor;\r\n this._colorChange$.next(this.color);\r\n this._onchange(this.color);\r\n this.close();\r\n }\r\n\r\n public getColor() {\r\n switch (this.format) {\r\n case 'html': return this.color;\r\n case 'json': return (this.color).color;\r\n }\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}","export const pad = (s: string) => s.length === 1 ? `0${s}` : s;\r\nexport const pinInt = (n: number, max: number = 255) => n < 0 ? 0 : n > max ? max : Math.round(n);\r\nexport const pinFloat = (n: number, max: number = 1, fractionDigits: number = 2) => n < 0 ? 0 : n > max ? max : +n.toFixed(fractionDigits);","import { pad, pinInt, pinFloat } from './misc';\r\n\r\n/**\r\n * Used when format is set to json.\r\n */\r\nexport interface IColor {\r\n color: string;\r\n alpha: number;\r\n}\r\n\r\n/**\r\n * Represents any color in the RGB, HSL, and HSV color spaces simultaneously.\r\n * \r\n * @todo Add support for CMYK\r\n */\r\nexport class Color {\r\n public static Random() {\r\n return new Color('#' + (0x1000000 + Math.random() * 0xffffff).toString(16).substr(1, 6));\r\n }\r\n\r\n //\r\n // RGB color space\r\n //\r\n\r\n private _rgb: IRgb = { r: 0, g: 0, b: 0 };\r\n\r\n private _rgbProxy = new Proxy(this._rgb, {\r\n get: (rgb: IRgb, property: keyof IRgb) => rgb[property],\r\n set: (rgb: IRgb, property: keyof IRgb, value: number) => {\r\n rgb[property] = pinInt(value, 255);\r\n return this.calc('rgb');\r\n }\r\n });\r\n\r\n public get rgb(): IRgb {\r\n return this._rgbProxy;\r\n }\r\n\r\n public set rgb(value: IRgb) {\r\n [this._rgb.r, this._rgb.g, this._rgb.b] = [\r\n pinInt(value.r, 255),\r\n pinInt(value.g, 255),\r\n pinInt(value.b, 255)\r\n ];\r\n\r\n this.calc('rgb');\r\n }\r\n\r\n //\r\n // HSL color space\r\n //\r\n\r\n private _hsl: IHsl = { h: 0, s: 0, l: 0 };\r\n\r\n private _hslProxy = new Proxy(this._hsl, {\r\n get: (hsl: IHsl, property: keyof IHsl) => hsl[property],\r\n set: (hsl: IHsl, property: keyof IHsl, value: number) => {\r\n hsl[property] = property === 'h' ? pinFloat(value, 360) : pinFloat(value, 1);\r\n return this.calc('hsl');\r\n }\r\n });\r\n\r\n public get hsl(): IHsl {\r\n return this._hslProxy;\r\n }\r\n\r\n public set hsl(value: IHsl) {\r\n [this._hsl.h, this._hsl.s, this._hsl.l] = [\r\n pinFloat(value.h, 360),\r\n pinFloat(value.s, 1),\r\n pinFloat(value.l, 1)\r\n ];\r\n\r\n this.calc('hsl');\r\n }\r\n\r\n //\r\n // HSV color space\r\n //\r\n\r\n private _hsv: IHsv = { h: 0, s: 0, v: 0 };\r\n\r\n private _hsvProxy = new Proxy(this._hsv, {\r\n get: (hsv: IHsv, property: keyof IHsv) => hsv[property],\r\n set: (hsv: IHsv, property: keyof IHsv, value: number) => {\r\n hsv[property] = property === 'h' ? pinFloat(value, 360) : pinFloat(value, 1);\r\n return this.calc('hsv');\r\n }\r\n });\r\n\r\n public get hsv(): IHsv {\r\n return this._hsvProxy;\r\n }\r\n\r\n public set hsv(value: IHsv) {\r\n [this._hsv.h, this._hsv.s, this._hsv.v] = [\r\n pinFloat(value.h, 360),\r\n pinFloat(value.s, 1),\r\n pinFloat(value.v, 1)\r\n ];\r\n\r\n this.calc('hsv');\r\n }\r\n\r\n //\r\n // Alpha\r\n //\r\n\r\n private _alpha: number = 1;\r\n\r\n public get alpha() { return this._alpha; }\r\n public set alpha(value: number) {\r\n this._alpha = pinFloat(value, 1);\r\n }\r\n\r\n //\r\n // Misc\r\n //\r\n\r\n public get brightness() {\r\n return Math.sqrt(\r\n this._rgb.r * this._rgb.r * .241\r\n + this._rgb.g * this._rgb.g * .691\r\n + this._rgb.b * this._rgb.b * .068\r\n );\r\n }\r\n\r\n public get isDark() {\r\n return this.brightness < 145;\r\n }\r\n\r\n public get isLight() {\r\n return !this.isDark;\r\n }\r\n\r\n /**\r\n * Constructor.\r\n */\r\n public constructor(\r\n color?: string | IRgba | IHsla | IHsva\r\n ) {\r\n if (color) {\r\n if (typeof color === 'string') {\r\n this.parse(color);\r\n } else {\r\n if (isRgb(color)) {\r\n this.rgb = color;\r\n } else if (isHsl(color)) {\r\n this.hsl = color;\r\n } else if (isHsv(color)) {\r\n this.hsv = color;\r\n }\r\n\r\n this._alpha = 'a' in color ? color.a : 1;\r\n }\r\n }\r\n }\r\n\r\n public parse(color: string) {\r\n if (!color)\r\n color = this.getRandomColor();\r\n color = color.toLowerCase();\r\n color = Palettes.standard[color] || color;\r\n\r\n const match = /(#(?:([\\da-f]{8})|([\\da-f]{6})|([\\da-f]{4})|([\\da-f]{3})))|(rgba?\\s*\\(\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*,\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*,\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*(?:,\\s*((?:\\d+|\\d*\\.\\d+)%?))?\\s*\\))|(rgba?\\s*\\(\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*(?:((?:\\d+|\\d*\\.\\d+)%?))?\\s*\\))|(hsla?\\s*\\(\\s*((?:-|\\+)?(?:\\d+|\\d*\\.\\d+)(?:deg|rad|grad|turn)?)\\s*,\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*,\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*(?:,\\s*((?:\\d+|\\d*\\.\\d+)%?))?\\s*\\))|(hsla?\\s*\\(\\s*((?:-|\\+)?(?:\\d+|\\d*\\.\\d+)(?:deg|rad|grad|turn)?)\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*((?:\\d+|\\d*\\.\\d+)%?)\\s*(?:((?:\\d+|\\d*\\.\\d+)%?))?\\s*\\))/.exec(color);\r\n\r\n if (match) {\r\n if (match[1]) {\r\n if (match[2]) {\r\n // #RRGGBBAA\r\n const rgba = parseInt(match[2], 16);\r\n const [r, g, b, a] = [(rgba >> 24) & 0xFF, (rgba >> 16) & 0xFF, (rgba >> 8) & 0xFF, rgba & 0xFF];\r\n this.rgb = { r, g, b };\r\n this.alpha = a / 0xFF;\r\n } else if (match[3]) {\r\n // #RRGGBB\r\n const rgb = parseInt(match[3], 16);\r\n const [r, g, b] = [(rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF];\r\n this.rgb = { r, g, b };\r\n this.alpha = 1;\r\n } else if (match[4]) {\r\n // #RGBA\r\n const rgba = parseInt(match[4], 16);\r\n const [r, g, b, a] = [(rgba >> 12) & 0xF, (rgba >> 8) & 0xF, (rgba >> 4) & 0xF, rgba & 0xF];\r\n this.rgb = { r: r + (r << 4), g: g + (g << 4), b: b + (b << 4) };\r\n this.alpha = a / 0xF;\r\n } else if (match[5]) {\r\n // #RGB\r\n const rgb = parseInt(match[5], 16);\r\n const [r, g, b] = [(rgb >> 8) & 0xF, (rgb >> 4) & 0xF, rgb & 0xF];\r\n this.rgb = { r: r + (r << 4), g: g + (g << 4), b: b + (b << 4) };\r\n this.alpha = 1;\r\n } else {\r\n throw new Error(`Failed to parse color: ${color}`);\r\n }\r\n } else if (match[6]) {\r\n // rgba(R, G, B[, A])\r\n const [r, g, b, a] = [match[7], match[8], match[9], match[10]];\r\n this.rgb = { r: parseCssUnit(r, 255), g: parseCssUnit(g, 255), b: parseCssUnit(b, 255) };\r\n this.alpha = a !== undefined ? parseCssUnit(a) : 1;\r\n } else if (match[11]) {\r\n // rgba(R G B[ A])\r\n const [r, g, b, a] = [match[12], match[13], match[14], match[15]];\r\n this.rgb = { r: parseCssUnit(r, 255), g: parseCssUnit(g, 255), b: parseCssUnit(b, 255) };\r\n this.alpha = a !== undefined ? parseCssUnit(a) : 1;\r\n } else if (match[16]) {\r\n // hsla(H, S, L[, A])\r\n const [h, s, l, a] = [typeof match[17] === 'number' ? match[17] + 'deg' : match[17], match[18], match[19], match[20]];\r\n this.hsl = { h: parseCssUnit(h), s: parseCssUnit(s), l: parseCssUnit(l) };\r\n this.alpha = a !== undefined ? parseCssUnit(a) : 1;\r\n } else if (match[21]) {\r\n // hsla(H S L[ A])\r\n const [h, s, l, a] = [typeof match[22] === 'number' ? match[22] + 'deg' : match[22], match[23], match[24], match[25]];\r\n this.hsl = { h: parseCssUnit(h), s: parseCssUnit(s), l: parseCssUnit(l) };\r\n this.alpha = a !== undefined ? parseCssUnit(a) : 1;\r\n } else {\r\n throw new Error(`Failed to parse color: ${color}`);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getRandomColor() {\r\n const letters = '0123456789ABCDEF';\r\n let color = '#';\r\n for (let i = 0; i < 6; i++) {\r\n color += letters[Math.floor(Math.random() * 16)];\r\n }\r\n return color;\r\n }\r\n\r\n public toString(type: 'hex' | 'rgb' | 'hsl' | 'hue' = 'hex', alphaChannel: boolean = true): string {\r\n alphaChannel = alphaChannel && this._alpha < 1;\r\n\r\n switch (type) {\r\n default:\r\n case 'hex':\r\n // ie doesn't support hex 8/4 yet so we'll ignore the alpha channel for now\r\n return '#' + pad(this._rgb.r.toString(16)) + pad(this._rgb.g.toString(16)) + pad(this._rgb.b.toString(16));\r\n\r\n case 'rgb':\r\n return alphaChannel\r\n ? `rgba(${this._rgb.r}, ${this._rgb.g}, ${this._rgb.b}, ${this._alpha})`\r\n : `rgb(${this._rgb.r}, ${this._rgb.g}, ${this._rgb.b})`;\r\n\r\n case 'hsl':\r\n return alphaChannel\r\n ? `hsla(${this._hsl.h}, ${this._hsl.s}%, ${this._hsl.l}%, ${this._alpha})`\r\n : `hsl(${this._hsl.h}, ${this._hsl.s}%, ${this._hsl.l}%)`;\r\n\r\n // fully saturated color\r\n case 'hue':\r\n return alphaChannel\r\n ? `hsl(${this._hsl.h}, 100%, 50%, ${this._alpha})`\r\n : `hsl(${this._hsl.h}, 100%, 50%)`;\r\n }\r\n }\r\n\r\n //\r\n // Color space conversions\r\n //\r\n\r\n private calc(from: 'rgb' | 'hsv' | 'hsl') {\r\n switch (from) {\r\n case 'rgb':\r\n this.rgbToHsl();\r\n this.rgbToHsv();\r\n break;\r\n\r\n case 'hsl':\r\n this.hslToRgb();\r\n this.hslToHsv();\r\n break;\r\n\r\n case 'hsv':\r\n this.hsvToRgb();\r\n this.hsvToHsl();\r\n break;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private rgbToHsv() {\r\n let [r, g, b] = [\r\n this._rgb.r / 255,\r\n this._rgb.g / 255,\r\n this._rgb.b / 255\r\n ];\r\n\r\n let max = Math.max(r, g, b);\r\n let min = Math.min(r, g, b);\r\n var d = max - min;\r\n\r\n let h = 0;\r\n let s = max === 0 ? 0 : d / max;\r\n let v = max;\r\n\r\n if (max === min) {\r\n // achromatic\r\n } else {\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n [this._hsv.h, this._hsv.s, this._hsv.v] = [\r\n pinInt(h * 360, 360),\r\n pinFloat(s, 1),\r\n pinFloat(v, 1)\r\n ];\r\n }\r\n\r\n private rgbToHsl() {\r\n let [r, g, b] = [\r\n this._rgb.r / 255,\r\n this._rgb.g / 255,\r\n this._rgb.b / 255\r\n ];\r\n\r\n let max = Math.max(r, g, b);\r\n let min = Math.min(r, g, b);\r\n\r\n let h = 0;\r\n let s = 0;\r\n let l = (max + min) / 2;\r\n\r\n if (max === min) {\r\n // achromatic\r\n } else {\r\n let d = max - min;\r\n\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n [this._hsl.h, this._hsl.s, this._hsl.l] = [\r\n pinInt(h * 360, 360),\r\n pinFloat(s, 1),\r\n pinFloat(l, 1)\r\n ];\r\n }\r\n\r\n private hsvToRgb() {\r\n let [h, s, v] = [\r\n this._hsv.h / 360 * 6,\r\n this._hsv.s,\r\n this._hsv.v\r\n ];\r\n\r\n let i = Math.floor(h),\r\n f = h - i,\r\n p = v * (1 - s),\r\n q = v * (1 - f * s),\r\n t = v * (1 - (1 - f) * s),\r\n mod = i % 6,\r\n r = [v, q, p, p, t, v][mod] * 255,\r\n g = [t, v, v, q, p, p][mod] * 255,\r\n b = [p, p, t, v, v, q][mod] * 255;\r\n\r\n [this._rgb.r, this._rgb.g, this._rgb.b] = [\r\n pinInt(r, 255),\r\n pinInt(g, 255),\r\n pinInt(b, 255)\r\n ];\r\n }\r\n\r\n private hsvToHsl() {\r\n let [h, s, v] = [\r\n this._hsv.h,\r\n this._hsv.s,\r\n this._hsv.v\r\n ];\r\n\r\n let l = (2 - s) * v / 2;\r\n\r\n if (l !== 0) {\r\n if (l === 1) {\r\n s = 0;\r\n } else if (l < 0.5) {\r\n s = s * v / (l * 2);\r\n } else {\r\n s = s * v / (2 - l * 2);\r\n }\r\n }\r\n\r\n [this._hsl.h, this._hsl.s, this._hsl.l] = [\r\n h,\r\n pinFloat(s, 1),\r\n pinFloat(l, 1)\r\n ];\r\n }\r\n\r\n private hslToRgb() {\r\n let [h, s, l] = [\r\n this._hsl.h / 360,\r\n this._hsl.s,\r\n this._hsl.l\r\n ];\r\n\r\n function hue2rgb(p, q, t) {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n }\r\n\r\n let r, g, b;\r\n\r\n if (s === 0) {\r\n // achromatic\r\n r = g = b = l;\r\n } else {\r\n let q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n let p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n\r\n [this._rgb.r, this._rgb.g, this._rgb.b] = [\r\n pinInt(r * 255, 255),\r\n pinInt(g * 255, 255),\r\n pinInt(b * 255, 255)\r\n ];\r\n }\r\n\r\n private hslToHsv() {\r\n let [h, s, l] = [\r\n this._hsl.h,\r\n this._hsl.s,\r\n this._hsl.l\r\n ];\r\n\r\n s *= l < 0.5 ? l : 1 - l;\r\n\r\n let v = l + s;\r\n\r\n s = 2 * s / (l + s);\r\n\r\n [this._hsv.h, this._hsv.s, this._hsv.v] = [\r\n h,\r\n pinFloat(s, 1),\r\n pinFloat(v, 1)\r\n ];\r\n }\r\n}\r\n\r\n//\r\n// Pre-defined color palettes\r\n//\r\n\r\nconst CSS1: IColorPalette = {\r\n black: '#000000',\r\n silver: '#c0c0c0',\r\n gray: '#808080',\r\n white: '#ffffff',\r\n maroon: '#800000',\r\n red: '#ff0000',\r\n purple: '#800080',\r\n fuchsia: '#ff00ff',\r\n green: '#008000',\r\n lime: '#00ff00',\r\n olive: '#808000',\r\n yellow: '#ffff00',\r\n navy: '#000080',\r\n blue: '#0000ff',\r\n teal: '#008080',\r\n aqua: '#00ffff'\r\n};\r\n\r\nconst CSS2: IColorPalette = {\r\n ...CSS1,\r\n orange: '#ffa500'\r\n};\r\n\r\nconst CSS3: IColorPalette = {\r\n ...CSS2,\r\n aliceblue: '#f0f8ff',\r\n antiquewhite: '#faebd7',\r\n aquamarine: '#7fffd4',\r\n azure: '#f0ffff',\r\n beige: '#f5f5dc',\r\n bisque: '#ffe4c4',\r\n blanchedalmond: '#ffebcd',\r\n blueviolet: '#8a2be2',\r\n brown: '#a52a2a',\r\n burlywood: '#deb887',\r\n cadetblue: '#5f9ea0',\r\n chartreuse: '#7fff00',\r\n chocolate: '#d2691e',\r\n coral: '#ff7f50',\r\n cornflowerblue: '#6495ed',\r\n cornsilk: '#fff8dc',\r\n crimson: '#dc143c',\r\n cyan: '#00ffff',\r\n darkblue: '#00008b',\r\n darkcyan: '#008b8b',\r\n darkgoldenrod: '#b8860b',\r\n darkgray: '#a9a9a9',\r\n darkgreen: '#006400',\r\n darkgrey: '#a9a9a9',\r\n darkkhaki: '#bdb76b',\r\n darkmagenta: '#8b008b',\r\n darkolivegreen: '#556b2f',\r\n darkorange: '#ff8c00',\r\n darkorchid: '#9932cc',\r\n darkred: '#8b0000',\r\n darksalmon: '#e9967a',\r\n darkseagreen: '#8fbc8f',\r\n darkslateblue: '#483d8b',\r\n darkslategray: '#2f4f4f',\r\n darkslategrey: '#2f4f4f',\r\n darkturquoise: '#00ced1',\r\n darkviolet: '#9400d3',\r\n deeppink: '#ff1493',\r\n deepskyblue: '#00bfff',\r\n dimgray: '#696969',\r\n dimgrey: '#696969',\r\n dodgerblue: '#1e90ff',\r\n firebrick: '#b22222',\r\n floralwhite: '#fffaf0',\r\n forestgreen: '#228b22',\r\n gainsboro: '#dcdcdc',\r\n ghostwhite: '#f8f8ff',\r\n gold: '#ffd700',\r\n goldenrod: '#daa520',\r\n greenyellow: '#adff2f',\r\n grey: '#808080',\r\n honeydew: '#f0fff0',\r\n hotpink: '#ff69b4',\r\n indianred: '#cd5c5c',\r\n indigo: '#4b0082',\r\n ivory: '#fffff0',\r\n khaki: '#f0e68c',\r\n lavender: '#e6e6fa',\r\n lavenderblush: '#fff0f5',\r\n lawngreen: '#7cfc00',\r\n lemonchiffon: '#fffacd',\r\n lightblue: '#add8e6',\r\n lightcoral: '#f08080',\r\n lightcyan: '#e0ffff',\r\n lightgoldenrodyellow: '#fafad2',\r\n lightgray: '#d3d3d3',\r\n lightgreen: '#90ee90',\r\n lightgrey: '#d3d3d3',\r\n lightpink: '#ffb6c1',\r\n lightsalmon: '#ffa07a',\r\n lightseagreen: '#20b2aa',\r\n lightskyblue: '#87cefa',\r\n lightslategray: '#778899',\r\n lightslategrey: '#778899',\r\n lightsteelblue: '#b0c4de',\r\n lightyellow: '#ffffe0',\r\n limegreen: '#32cd32',\r\n linen: '#faf0e6',\r\n magenta: '#ff00ff',\r\n mediumaquamarine: '#66cdaa',\r\n mediumblue: '#0000cd',\r\n mediumorchid: '#ba55d3',\r\n mediumpurple: '#9370db',\r\n mediumseagreen: '#3cb371',\r\n mediumslateblue: '#7b68ee',\r\n mediumspringgreen: '#00fa9a',\r\n mediumturquoise: '#48d1cc',\r\n mediumvioletred: '#c71585',\r\n midnightblue: '#191970',\r\n mintcream: '#f5fffa',\r\n mistyrose: '#ffe4e1',\r\n moccasin: '#ffe4b5',\r\n navajowhite: '#ffdead',\r\n oldlace: '#fdf5e6',\r\n olivedrab: '#6b8e23',\r\n orangered: '#ff4500',\r\n orchid: '#da70d6',\r\n palegoldenrod: '#eee8aa',\r\n palegreen: '#98fb98',\r\n paleturquoise: '#afeeee',\r\n palevioletred: '#db7093',\r\n papayawhip: '#ffefd5',\r\n peachpuff: '#ffdab9',\r\n peru: '#cd853f',\r\n pink: '#ffc0cb',\r\n plum: '#dda0dd',\r\n powderblue: '#b0e0e6',\r\n rosybrown: '#bc8f8f',\r\n royalblue: '#4169e1',\r\n saddlebrown: '#8b4513',\r\n salmon: '#fa8072',\r\n sandybrown: '#f4a460',\r\n seagreen: '#2e8b57',\r\n seashell: '#fff5ee',\r\n sienna: '#a0522d',\r\n skyblue: '#87ceeb',\r\n slateblue: '#6a5acd',\r\n slategray: '#708090',\r\n slategrey: '#708090',\r\n snow: '#fffafa',\r\n springgreen: '#00ff7f',\r\n steelblue: '#4682b4',\r\n tan: '#d2b48c',\r\n thistle: '#d8bfd8',\r\n tomato: '#ff6347',\r\n turquoise: '#40e0d0',\r\n violet: '#ee82ee',\r\n wheat: '#f5deb3',\r\n whitesmoke: '#f5f5f5',\r\n yellowgreen: '#9acd32',\r\n};\r\n\r\nconst CSS4: IColorPalette = {\r\n ...CSS3,\r\n rebeccapurple: '#663399'\r\n};\r\n\r\nexport const Palettes = {\r\n // standard css colors\r\n standard: CSS4,\r\n\r\n // pastel color set\r\n pastels: {\r\n\r\n },\r\n\r\n highContrast: {\r\n // colors that contrast well with white\r\n 'dark': {\r\n\r\n },\r\n\r\n // colors that contrast well with black\r\n 'light': {\r\n\r\n }\r\n }\r\n};\r\n\r\nexport interface IColorPalette {\r\n [colorName: string]: string;\r\n}\r\n\r\nexport class ColorPalette {\r\n private _palette: T;\r\n private _colors: string[];\r\n\r\n public get colors(): T {\r\n return this._palette;\r\n }\r\n\r\n private _currentIndex: number = -1;\r\n\r\n public constructor(palette: T) {\r\n this._palette = palette;\r\n this._colors = Object.keys(this._palette);\r\n }\r\n\r\n public next() {\r\n this._currentIndex++;\r\n\r\n const colorName = this._colors[this._currentIndex % this._colors.length];\r\n const color = this._palette[colorName];\r\n\r\n return new Color(color);\r\n }\r\n}\r\n\r\nlet a = new ColorPalette(CSS4);\r\n\r\n\r\n//\r\n// Utility\r\n//\r\n\r\nexport interface IRgb { r: number; g: number; b: number; }\r\nexport interface IRgba extends IRgb { a?: number; }\r\nexport const isRgb = (x: any): x is IRgb => 'r' in x && 'g' in x && 'b' in x;\r\n\r\nexport interface IHsl { h: number; s: number; l: number; }\r\nexport interface IHsla extends IHsl { a?: number; }\r\nexport const isHsl = (x: any): x is IHsl => 'h' in x && 's' in x && 'l' in x;\r\n\r\nexport interface IHsv { h: number; s: number; v: number; }\r\nexport interface IHsva extends IHsv { a?: number; }\r\nexport const isHsv = (x: any): x is IHsv => 'h' in x && 's' in x && 'v' in x;\r\n\r\nconst isPercent = (s: string) => s && s.endsWith('%');\r\nconst isDeg = (s: string) => s && /^.*deg$/i.test(s);\r\nconst isRad = (s: string) => s && /^.*rad$/i.test(s);\r\nconst isGrad = (s: string) => s && /^.*grad$/i.test(s);\r\nconst isTurn = (s: string) => s && /^.*turn$/i.test(s);\r\n\r\nconst parseCssUnit = (s: string, scale: number = 1): number => {\r\n const value = parseFloat(s);\r\n\r\n if (isPercent(s)) {\r\n const pct = value / 100 * scale;\r\n return pct < 0 ? 1 - pct : pct;\r\n } else if (isDeg(s)) {\r\n const deg = value % 360;\r\n return value < 0 ? 360 + deg : deg;\r\n } else if (isRad(s)) {\r\n const deg = (value * (180 / Math.PI)) % 360;\r\n return deg < 0 ? 360 + deg : deg;\r\n } else if (isGrad(s)) {\r\n const deg = (value * (180 / 200)) % 360;\r\n return deg < 0 ? 360 + deg : deg;\r\n } else if (isTurn(s)) {\r\n const deg = (value * 360) % 360;\r\n return deg < 0 ? 360 + deg : deg;\r\n } else {\r\n return value;\r\n }\r\n};\r\n","
\r\n
{{ content }}
\r\n
\r\n \r\n {{ copiedMessage }}\r\n
\r\n
\r\n","import { Component, Input, HostListener, ChangeDetectorRef } from '@angular/core';\r\n//import { Clipboard } from '@angular/cdk/clipboard'; // available in cdk 9\r\n\r\nimport { animate, keyframes, trigger, state, style, transition } from '@angular/animations';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Component({\r\n selector: 'involve-copy',\r\n templateUrl: 'copy.component.html',\r\n styleUrls: ['copy.component.scss'],\r\n animations: [\r\n trigger('copy', [\r\n state('hidden', style({\r\n opacity: 0,\r\n transform: 'translateY(-0.5rem)'\r\n })),\r\n transition('hidden => *', [\r\n animate('0.5s', keyframes([\r\n style({ opacity: 1 }),\r\n style({ transform: 'translateY(-1rem)', opacity: 0.1 })\r\n ]))\r\n ])\r\n ])\r\n ],\r\n host: {\r\n //'[style.width]': 'showContent ? \"100%\" : unset'\r\n },\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'copy' } ]\r\n})\r\nexport class InvolveCopyComponent {\r\n @Input()\r\n content: string;\r\n\r\n @Input()\r\n messageToCopy: string;\r\n\r\n @Input()\r\n showContent: boolean = true;\r\n\r\n @Input()\r\n alwaysShowIcon: boolean = false;\r\n\r\n @Input()\r\n copiedMessage: string = \"Copied!\";\r\n\r\n public state = 'hidden';\r\n\r\n private _hovering = false;\r\n public get isIconVisible() {\r\n return this.alwaysShowIcon || this._hovering || this.state != 'hidden';\r\n }\r\n\r\n public constructor(\r\n // private _clipboard: Clipboard\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n @HostListener('mouseover')\r\n public onMouseover() {\r\n this._hovering = true;\r\n }\r\n\r\n @HostListener('mouseleave')\r\n public onMouseout() {\r\n this._hovering = false;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: MouseEvent) {\r\n this.state = 'copied';\r\n //this._clipboard.copy(this.content);\r\n\r\n // temporary...\r\n const el = document.createElement('textarea');\r\n el.value = this.messageToCopy? this.messageToCopy: this.content;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n this._cdr.detectChanges();\r\n\r\n event.stopPropagation();\r\n }\r\n}","\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n {{ isInvalid ? 'Invalid' : '' }}\r\n \r\n\r\n \r\n {{unitOfMeasurement}}\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n {{ label == 'Not Applicable'? '' : label }}\r\n
\r\n
\r\n","import { Component, Input } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\ntype fontSizeType = 'small' | 'medium' | 'large';\r\ntype fontWeightType = 'light' | 'regular' | 'bold';\r\n\r\n@Component({\r\n selector: 'involve-data-item',\r\n templateUrl: 'data-item.component.html',\r\n styleUrls: [ 'data-item.component.scss' ],\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'dataItem'} ]\r\n})\r\nexport class InvolveDataItemComponent {\r\n @Input()\r\n public fontSize: fontSizeType = 'small';\r\n \r\n @Input()\r\n public fontWeight: fontWeightType = 'regular';\r\n \r\n @Input()\r\n public value: string | number;\r\n \r\n @Input()\r\n public unitOfMeasurement = '';\r\n\r\n @Input()\r\n public dividerColor: string;\r\n \r\n @Input()\r\n public label: string;\r\n \r\n @Input()\r\n public labelClass: string = '';\r\n\r\n @Input()\r\n public codeTag = '';\r\n\r\n @Input()\r\n public isInvalid: boolean = false;\r\n \r\n normalizeDividerColorFormat() {\r\n if (!this.dividerColor) {\r\n return;\r\n }\r\n\r\n return this.dividerColor.indexOf('#') > -1 ? this.dividerColor : '#' + this.dividerColor;\r\n }\r\n \r\n labelClasses() { \r\n let labelStyleClasses = 'text-center ';\r\n labelStyleClasses += `${this.fontWeight} `;\r\n switch (this.fontSize) {\r\n case 'small' : labelStyleClasses += 'font-size-14 '; break;\r\n case 'medium' : labelStyleClasses += 'font-size-16 '; break;\r\n case 'large' : labelStyleClasses += 'font-size-18 '; break;\r\n default: labelStyleClasses += 'font-size-14 '; \r\n } \r\n labelStyleClasses += this.labelClass ? `${this.labelClass} ` : '';\r\n return labelStyleClasses;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit, forwardRef, ViewEncapsulation, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ControlContainer } from '@angular/forms';\r\nimport { IDatePickerConfig } from './lib';\r\nimport { DateUtils } from '@rfv/modules/shared/utils';\r\nimport { takeUntil, startWith } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\n\r\n/* Lodash */\r\nimport { merge } from 'lodash';\r\nimport moment, { Moment } from 'moment';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n\r\n@Component({\r\n selector: 'involve-date-picker',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InvolveDatePickerComponent),\r\n multi: true\r\n },\r\n { provide: DATA_CY_TYPE, useValue: 'date' }\r\n ],\r\n styleUrls: ['./date-picker.component.scss'],\r\n templateUrl: './date-picker.component.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class InvolveDatePickerComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n defaultConfig: IDatePickerConfig = {\r\n format: 'MM/DD/YYYY',\r\n closeOnSelect: true,\r\n disableKeypress: true,\r\n unSelectOnClick: false,\r\n drops: 'down'\r\n };\r\n\r\n config: IDatePickerConfig;\r\n\r\n @Input('value') _value: DateUtils.Moment = DateUtils.moment();\r\n\r\n @Input() isDisabled = false;\r\n @Input() mode: 'day' | 'month' | 'time' | 'daytime' = 'daytime';\r\n @Input() userConfig: IDatePickerConfig;\r\n @Input() minDate: string;\r\n @Input() maxDate: string;\r\n\r\n @Input() minTime: string;\r\n @Input() maxTime: string;\r\n @Input() stepMinute: number;\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n _test = DateUtils.moment();\r\n\r\n _destroyed$ = new Subject();\r\n\r\n constructor(\r\n private _controlContainer: ControlContainer,\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.config = merge(this.defaultConfig, this.userConfig);\r\n\r\n if (this._controlContainer) {\r\n this.subscribeToDate(this.minDate, 'min');\r\n this.subscribeToDate(this.maxDate, 'max');\r\n }\r\n }\r\n\r\n subscribeToDate(controlName: string, propertyName: string) {\r\n if (!controlName)\r\n return;\r\n\r\n // Fetch the linked form control by it's name\r\n let formControl = this._controlContainer.control.get(controlName);\r\n\r\n if (formControl) {\r\n formControl.valueChanges.pipe(\r\n startWith(formControl.value),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(val => {\r\n this.config = { ...this.config };\r\n this.config[propertyName] = val;\r\n });\r\n } else {\r\n console.warn('Unable to find form control: ' + this.minDate);\r\n }\r\n\r\n // Sets the min or max date to today's date\r\n if (controlName == 'today') {\r\n this.config = { ...this.config };\r\n this.config[propertyName] = moment();\r\n }\r\n }\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(val: Moment) {\r\n this._value = val;\r\n this.valueChange.emit(val);\r\n this.onChange(val);\r\n this.onTouched();\r\n }\r\n\r\n public onModelChange(value: Moment): void {\r\n if (!value || value.isSame(this._value))\r\n return;\r\n\r\n this.value = value;\r\n }\r\n\r\n // Form handlers and properties\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n\r\n writeValue(value: Moment | Date) {\r\n value = moment(value);\r\n\r\n if (value && moment.isMoment(value) && !value.isSame(this._value)) {\r\n this._value = value;\r\n this._cdr.markForCheck();\r\n }\r\n }\r\n\r\n registerOnChange(fn) {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn) {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Allows Angular to disable the input.\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","
\r\n \r\n \r\n
","
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n Output,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dp-calendar-nav',\r\n templateUrl: './calendar-nav.component.html',\r\n styleUrls: ['./calendar-nav.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CalendarNavComponent {\r\n @Input() label: string;\r\n @Input() isLabelClickable: boolean = false;\r\n @Input() showLeftNav: boolean = true;\r\n @Input() showLeftSecondaryNav: boolean = false;\r\n @Input() showRightNav: boolean = true;\r\n @Input() showRightSecondaryNav: boolean = false;\r\n @Input() leftNavDisabled: boolean = false;\r\n @Input() leftSecondaryNavDisabled: boolean = false;\r\n @Input() rightNavDisabled: boolean = false;\r\n @Input() rightSecondaryNavDisabled: boolean = false;\r\n @Input() showGoToCurrent: boolean = true;\r\n @HostBinding('class') @Input() theme: string;\r\n\r\n @Output() onLeftNav: EventEmitter = new EventEmitter();\r\n @Output() onLeftSecondaryNav: EventEmitter = new EventEmitter();\r\n @Output() onRightNav: EventEmitter = new EventEmitter();\r\n @Output() onRightSecondaryNav: EventEmitter = new EventEmitter();\r\n @Output() onLabelClick: EventEmitter = new EventEmitter();\r\n @Output() onGoToCurrent: EventEmitter = new EventEmitter();\r\n\r\n leftNavClicked() {\r\n this.onLeftNav.emit();\r\n }\r\n\r\n leftSecondaryNavClicked() {\r\n this.onLeftSecondaryNav.emit();\r\n }\r\n\r\n rightNavClicked() {\r\n this.onRightNav.emit();\r\n }\r\n\r\n rightSecondaryNavClicked() {\r\n this.onRightSecondaryNav.emit();\r\n }\r\n\r\n labelClicked() {\r\n this.onLabelClick.emit();\r\n }\r\n}\r\n","import {ECalendarValue} from '../../types/calendar-value-enum';\r\nimport {SingleCalendarValue} from '../../types/single-calendar-value';\r\nimport {Injectable} from '@angular/core';\r\nimport moment, {Moment, unitOfTime} from 'moment';\r\nimport {CalendarValue} from '../../types/calendar-value';\r\nimport {IDate} from '../../models/date.model';\r\nimport {CalendarMode} from '../../types/calendar-mode';\r\nimport {DateValidator} from '../../types/validator.type';\r\nimport {ICalendarInternal} from '../../models/calendar.model';\r\n\r\nexport interface DateLimits {\r\n minDate?: SingleCalendarValue;\r\n maxDate?: SingleCalendarValue;\r\n minTime?: SingleCalendarValue;\r\n maxTime?: SingleCalendarValue;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsService {\r\n static debounce(func: Function, wait: number) {\r\n let timeout;\r\n return function () {\r\n const context = this, args = arguments;\r\n timeout = clearTimeout(timeout);\r\n setTimeout(() => {\r\n func.apply(context, args);\r\n }, wait);\r\n };\r\n };\r\n\r\n createArray(size: number): number[] {\r\n return new Array(size).fill(1);\r\n }\r\n\r\n convertToMoment(date: SingleCalendarValue, format: string): Moment {\r\n if (!date) {\r\n return null;\r\n } else if (typeof date === 'string') {\r\n return moment(date, format);\r\n } else {\r\n return date.clone();\r\n }\r\n }\r\n\r\n isDateValid(date: string, format: string): boolean {\r\n if (date === '') {\r\n return true;\r\n }\r\n\r\n return moment(date, format, true).isValid();\r\n }\r\n\r\n // todo:: add unit test\r\n getDefaultDisplayDate(current: Moment,\r\n selected: Moment[],\r\n allowMultiSelect: boolean,\r\n minDate: Moment): Moment {\r\n if (current) {\r\n return current.clone();\r\n } else if (minDate && minDate.isAfter(moment())) {\r\n return minDate.clone();\r\n } else if (allowMultiSelect) {\r\n if (selected && selected[selected.length]) {\r\n return selected[selected.length].clone();\r\n }\r\n } else if (selected && selected[0]) {\r\n return selected[0].clone();\r\n }\r\n\r\n return moment();\r\n }\r\n\r\n // todo:: add unit test\r\n getInputType(value: CalendarValue, allowMultiSelect: boolean): ECalendarValue {\r\n if (Array.isArray(value)) {\r\n if (!value.length) {\r\n return ECalendarValue.MomentArr;\r\n } else if (typeof value[0] === 'string') {\r\n return ECalendarValue.StringArr;\r\n } else if (moment.isMoment(value[0])) {\r\n return ECalendarValue.MomentArr;\r\n }\r\n } else {\r\n if (typeof value === 'string') {\r\n return ECalendarValue.String;\r\n } else if (moment.isMoment(value)) {\r\n return ECalendarValue.Moment;\r\n }\r\n }\r\n\r\n return allowMultiSelect ? ECalendarValue.MomentArr : ECalendarValue.Moment;\r\n }\r\n\r\n // todo:: add unit test\r\n convertToMomentArray(value: CalendarValue,\r\n config: {allowMultiSelect?: boolean, format?: string}): Moment[] {\r\n let retVal: Moment[];\r\n switch (this.getInputType(value, config.allowMultiSelect)) {\r\n case (ECalendarValue.String):\r\n retVal = value ? [moment(value, config.format, true)] : [];\r\n break;\r\n case (ECalendarValue.StringArr):\r\n retVal = (value).map(v => v ? moment(v, config.format, true) : null).filter(Boolean);\r\n break;\r\n case (ECalendarValue.Moment):\r\n retVal = value ? [(value).clone()] : [];\r\n break;\r\n case (ECalendarValue.MomentArr):\r\n retVal = (value || []).map(v => v.clone());\r\n break;\r\n default:\r\n retVal = [];\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n // todo:: add unit test\r\n convertFromMomentArray(format: string,\r\n value: Moment[],\r\n convertTo: ECalendarValue): CalendarValue {\r\n switch (convertTo) {\r\n case (ECalendarValue.String):\r\n return value[0] && value[0].format(format);\r\n case (ECalendarValue.StringArr):\r\n return value.filter(Boolean).map(v => v.format(format));\r\n case (ECalendarValue.Moment):\r\n return value[0] ? value[0].clone() : value[0];\r\n case (ECalendarValue.MomentArr):\r\n return value ? value.map(v => v.clone()) : value;\r\n default:\r\n return value;\r\n }\r\n }\r\n\r\n convertToString(value: CalendarValue, format: string): string {\r\n let tmpVal: string[];\r\n\r\n if (typeof value === 'string') {\r\n tmpVal = [value];\r\n } else if (Array.isArray(value)) {\r\n if (value.length) {\r\n tmpVal = (value).map((v) => {\r\n return this.convertToMoment(v, format).format(format);\r\n });\r\n } else {\r\n tmpVal = value;\r\n }\r\n } else if (moment.isMoment(value)) {\r\n tmpVal = [value.format(format)];\r\n } else {\r\n return '';\r\n }\r\n\r\n return tmpVal.filter(Boolean).join(' | ');\r\n }\r\n\r\n // todo:: add unit test\r\n clearUndefined(obj: T): T {\r\n if (!obj) {\r\n return obj;\r\n }\r\n\r\n Object.keys(obj).forEach((key) => (obj[key] === undefined) && delete obj[key]);\r\n return obj;\r\n }\r\n\r\n updateSelected(isMultiple: boolean,\r\n currentlySelected: Moment[],\r\n date: IDate,\r\n granularity: unitOfTime.Base = 'day'): Moment[] {\r\n if (isMultiple) {\r\n return !date.selected\r\n ? currentlySelected.concat([date.date])\r\n : currentlySelected.filter(d => !d.isSame(date.date, granularity));\r\n } else {\r\n return !date.selected ? [date.date] : [];\r\n }\r\n }\r\n\r\n closestParent(element: HTMLElement, selector: string): HTMLElement {\r\n if (!element) {\r\n return undefined;\r\n }\r\n const match = element.querySelector(selector);\r\n return match || this.closestParent(element.parentElement, selector);\r\n }\r\n\r\n onlyTime(m: Moment): Moment {\r\n return m && moment.isMoment(m) && moment(m.format('HH:mm:ss'), 'HH:mm:ss');\r\n }\r\n\r\n granularityFromType(calendarType: CalendarMode): unitOfTime.Base {\r\n switch (calendarType) {\r\n case 'time':\r\n return 'second';\r\n case 'daytime':\r\n return 'second';\r\n default:\r\n return calendarType;\r\n }\r\n }\r\n\r\n createValidator({minDate, maxDate, minTime, maxTime}: DateLimits,\r\n format: string,\r\n calendarType: CalendarMode): DateValidator {\r\n let isValid: boolean;\r\n let value: Moment[];\r\n const validators = [];\r\n const granularity = this.granularityFromType(calendarType);\r\n\r\n if (minDate) {\r\n const md = this.convertToMoment(minDate, format);\r\n validators.push({\r\n key: 'minDate',\r\n isValid: () => {\r\n const _isValid = value.every(val => val.isSameOrAfter(md, granularity));\r\n isValid = isValid ? _isValid : false;\r\n return _isValid;\r\n }\r\n });\r\n }\r\n\r\n if (maxDate) {\r\n const md = this.convertToMoment(maxDate, format);\r\n validators.push({\r\n key: 'maxDate',\r\n isValid: () => {\r\n const _isValid = value.every(val => val.isSameOrBefore(md, granularity));\r\n isValid = isValid ? _isValid : false;\r\n return _isValid;\r\n }\r\n });\r\n }\r\n\r\n if (minTime) {\r\n const md = this.onlyTime(this.convertToMoment(minTime, format));\r\n validators.push({\r\n key: 'minTime',\r\n isValid: () => {\r\n const _isValid = value.every(val => this.onlyTime(val).isSameOrAfter(md));\r\n isValid = isValid ? _isValid : false;\r\n return _isValid;\r\n }\r\n });\r\n }\r\n\r\n if (maxTime) {\r\n const md = this.onlyTime(this.convertToMoment(maxTime, format));\r\n validators.push({\r\n key: 'maxTime',\r\n isValid: () => {\r\n const _isValid = value.every(val => this.onlyTime(val).isSameOrBefore(md));\r\n isValid = isValid ? _isValid : false;\r\n return _isValid;\r\n }\r\n });\r\n }\r\n\r\n return (inputVal: CalendarValue) => {\r\n isValid = true;\r\n\r\n value = this.convertToMomentArray(inputVal, {\r\n format,\r\n allowMultiSelect: true\r\n }).filter(Boolean);\r\n\r\n if (!value.every(val => val.isValid())) {\r\n return {\r\n format: {\r\n given: inputVal\r\n }\r\n };\r\n }\r\n\r\n const errors = validators.reduce((map, err) => {\r\n if (!err.isValid()) {\r\n map[err.key] = {\r\n given: value\r\n };\r\n }\r\n\r\n return map;\r\n }, {});\r\n\r\n return !isValid ? errors : null;\r\n };\r\n }\r\n\r\n datesStringToStringArray(value: string): string[] {\r\n return (value || '').split('|').map(m => m.trim()).filter(Boolean);\r\n }\r\n\r\n getValidMomentArray(value: string, format: string): Moment[] {\r\n return this.datesStringToStringArray(value)\r\n .filter(d => this.isDateValid(d, format))\r\n .map(d => moment(d, format));\r\n }\r\n\r\n shouldShowCurrent(showGoToCurrent: boolean,\r\n mode: CalendarMode,\r\n min: Moment,\r\n max: Moment): boolean {\r\n return showGoToCurrent &&\r\n mode !== 'time' &&\r\n this.isDateInRange(moment(), min, max);\r\n }\r\n\r\n isDateInRange(date: Moment, from: Moment, to: Moment): boolean {\r\n return date.isBetween(from, to, 'day', '[]');\r\n }\r\n\r\n convertPropsToMoment(obj: {[key: string]: any}, format: string, props: string[]) {\r\n props.forEach((prop) => {\r\n if (obj.hasOwnProperty(prop)) {\r\n obj[prop] = this.convertToMoment(obj[prop], format);\r\n }\r\n });\r\n }\r\n\r\n shouldResetCurrentView(prevConf: T, currentConf: T): boolean {\r\n if (prevConf && currentConf) {\r\n if (!prevConf.min && currentConf.min) {\r\n return true;\r\n } else if (prevConf.min && currentConf.min && !prevConf.min.isSame(currentConf.min, 'd')) {\r\n return true;\r\n } else if (!prevConf.max && currentConf.max) {\r\n return true;\r\n } else if (prevConf.max && currentConf.max && !prevConf.max.isSame(currentConf.max, 'd')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n getNativeElement(elem: HTMLElement | string): HTMLElement {\r\n if (!elem) {\r\n return null;\r\n } else if (typeof elem === 'string') {\r\n return document.querySelector(elem);\r\n } else {\r\n return elem;\r\n }\r\n }\r\n}\r\n","export enum ECalendarMode {\r\n Day,\r\n DayTime,\r\n Month,\r\n Time\r\n}\r\n","export enum ECalendarValue {\r\n Moment = 1,\r\n MomentArr,\r\n String,\r\n StringArr\r\n}\r\n","import {EventEmitter, Injectable} from '@angular/core';\r\nimport {IDatePickerConfig, IDatePickerConfigInternal} from './date-picker-config.model';\r\nimport moment, {Moment} from 'moment';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IDayCalendarConfig} from '../day-calendar/day-calendar-config.model';\r\nimport {TimeSelectService} from '../time-select/time-select.service';\r\nimport {DayTimeCalendarService} from '../day-time-calendar/day-time-calendar.service';\r\nimport {ITimeSelectConfig} from '../time-select/time-select-config.model';\r\nimport {CalendarMode} from '../common/types/calendar-mode';\r\n\r\n@Injectable()\r\nexport class DatePickerService {\r\n readonly onPickerClosed: EventEmitter = new EventEmitter();\r\n private defaultConfig: IDatePickerConfigInternal = {\r\n closeOnSelect: true,\r\n closeOnSelectDelay: 100,\r\n closeOnEnter: true,\r\n format: 'DD-MM-YYYY',\r\n openOnFocus: true,\r\n openOnClick: true,\r\n onOpenDelay: 0,\r\n disableKeypress: false,\r\n showNearMonthDays: true,\r\n showWeekNumbers: false,\r\n enableMonthSelector: true,\r\n showGoToCurrent: true,\r\n locale: moment.locale(),\r\n hideOnOutsideClick: true\r\n };\r\n\r\n constructor(private utilsService: UtilsService,\r\n private timeSelectService: TimeSelectService,\r\n private daytimeCalendarService: DayTimeCalendarService) {\r\n }\r\n\r\n // todo:: add unit tests\r\n getConfig(config: IDatePickerConfig, mode: CalendarMode = 'daytime'): IDatePickerConfigInternal {\r\n const _config = {\r\n ...this.defaultConfig,\r\n format: this.getDefaultFormatByMode(mode),\r\n ...this.utilsService.clearUndefined(config)\r\n };\r\n\r\n this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);\r\n\r\n if (config && config.allowMultiSelect && config.closeOnSelect === undefined) {\r\n _config.closeOnSelect = false;\r\n }\r\n\r\n moment.locale(_config.locale);\r\n\r\n return _config;\r\n }\r\n\r\n getDayConfigService(pickerConfig: IDatePickerConfig): IDayCalendarConfig {\r\n return {\r\n min: pickerConfig.min,\r\n max: pickerConfig.max,\r\n isDayDisabledCallback: pickerConfig.isDayDisabledCallback,\r\n weekDayFormat: pickerConfig.weekDayFormat,\r\n weekDayFormatter: pickerConfig.weekDayFormatter,\r\n showNearMonthDays: pickerConfig.showNearMonthDays,\r\n showWeekNumbers: pickerConfig.showWeekNumbers,\r\n firstDayOfWeek: pickerConfig.firstDayOfWeek,\r\n format: pickerConfig.format,\r\n allowMultiSelect: pickerConfig.allowMultiSelect,\r\n monthFormat: pickerConfig.monthFormat,\r\n monthFormatter: pickerConfig.monthFormatter,\r\n enableMonthSelector: pickerConfig.enableMonthSelector,\r\n yearFormat: pickerConfig.yearFormat,\r\n yearFormatter: pickerConfig.yearFormatter,\r\n dayBtnFormat: pickerConfig.dayBtnFormat,\r\n dayBtnFormatter: pickerConfig.dayBtnFormatter,\r\n dayBtnCssClassCallback: pickerConfig.dayBtnCssClassCallback,\r\n monthBtnFormat: pickerConfig.monthBtnFormat,\r\n monthBtnFormatter: pickerConfig.monthBtnFormatter,\r\n monthBtnCssClassCallback: pickerConfig.monthBtnCssClassCallback,\r\n isMonthDisabledCallback: pickerConfig.isMonthDisabledCallback,\r\n multipleYearsNavigateBy: pickerConfig.multipleYearsNavigateBy,\r\n showMultipleYearsNavigation: pickerConfig.showMultipleYearsNavigation,\r\n locale: pickerConfig.locale,\r\n returnedValueType: pickerConfig.returnedValueType,\r\n showGoToCurrent: pickerConfig.showGoToCurrent,\r\n unSelectOnClick: pickerConfig.unSelectOnClick,\r\n numOfMonthRows: pickerConfig.numOfMonthRows\r\n };\r\n }\r\n\r\n getDayTimeConfigService(pickerConfig: IDatePickerConfig): ITimeSelectConfig {\r\n return this.daytimeCalendarService.getConfig(pickerConfig);\r\n }\r\n\r\n getTimeConfigService(pickerConfig: IDatePickerConfig): ITimeSelectConfig {\r\n return this.timeSelectService.getConfig(pickerConfig);\r\n }\r\n\r\n pickerClosed() {\r\n this.onPickerClosed.emit();\r\n }\r\n\r\n // todo:: add unit tests\r\n isValidInputDateValue(value: string, config: IDatePickerConfig): boolean {\r\n value = value ? value : '';\r\n const datesStrArr: string[] = this.utilsService.datesStringToStringArray(value);\r\n\r\n return datesStrArr.every(date => this.utilsService.isDateValid(date, config.format));\r\n }\r\n\r\n // todo:: add unit tests\r\n convertInputValueToMomentArray(value: string, config: IDatePickerConfig): Moment[] {\r\n value = value ? value : '';\r\n const datesStrArr: string[] = this.utilsService.datesStringToStringArray(value);\r\n\r\n return this.utilsService.convertToMomentArray(datesStrArr, config);\r\n }\r\n\r\n private getDefaultFormatByMode(mode: CalendarMode): string {\r\n switch (mode) {\r\n case 'day':\r\n return 'DD-MM-YYYY';\r\n case 'daytime':\r\n return 'DD-MM-YYYY HH:mm:ss';\r\n case 'time':\r\n return 'HH:mm:ss';\r\n case 'month':\r\n return 'MMM, YYYY';\r\n }\r\n }\r\n}\r\n","export enum SelectEvent {\r\n INPUT = 'input',\r\n SELECTION = 'selection'\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {TDrops, TOpens} from '../../types/poistions.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DomHelper {\r\n\r\n private static setYAxisPosition(element: HTMLElement, container: HTMLElement, anchor: HTMLElement, drops: TDrops) {\r\n const anchorRect = anchor.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n const bottom = anchorRect.bottom - containerRect.top;\r\n const top = anchorRect.top - containerRect.top;\r\n\r\n if (drops === 'down') {\r\n element.style.top = (bottom + 1 + 'px');\r\n } else {\r\n element.style.top = (top - 1 - element.scrollHeight) + 'px';\r\n }\r\n }\r\n\r\n private static setXAxisPosition(element: HTMLElement, container: HTMLElement, anchor: HTMLElement, dimElem: HTMLElement, opens: TOpens) {\r\n const anchorRect = anchor.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n const left = anchorRect.left - containerRect.left;\r\n\r\n if (opens === 'right') {\r\n element.style.left = left + 'px';\r\n } else {\r\n element.style.left = left - dimElem.offsetWidth + anchor.offsetWidth + 'px';\r\n }\r\n }\r\n\r\n private static isTopInView(el: HTMLElement): boolean {\r\n const {top} = el.getBoundingClientRect();\r\n return (top >= 0);\r\n }\r\n\r\n private static isBottomInView(el: HTMLElement): boolean {\r\n const {bottom} = el.getBoundingClientRect();\r\n return (bottom <= window.innerHeight);\r\n }\r\n\r\n private static isLeftInView(el: HTMLElement): boolean {\r\n const {left} = el.getBoundingClientRect();\r\n return (left >= 0);\r\n }\r\n\r\n private static isRightInView(el: HTMLElement): boolean {\r\n const {right} = el.getBoundingClientRect();\r\n return (right <= window.innerWidth);\r\n }\r\n\r\n appendElementToPosition(config: IAppendToArgs): void {\r\n const {container, element} = config;\r\n\r\n if (!container.style.position || container.style.position === 'static') {\r\n container.style.position = 'relative';\r\n }\r\n\r\n if (element.style.position !== 'absolute') {\r\n element.style.position = 'absolute';\r\n }\r\n\r\n element.style.visibility = 'hidden';\r\n\r\n setTimeout(() => {\r\n this.setElementPosition(config);\r\n\r\n element.style.visibility = 'visible';\r\n });\r\n }\r\n\r\n setElementPosition({element, container, anchor, dimElem, drops, opens}: IAppendToArgs) {\r\n DomHelper.setYAxisPosition(element, container, anchor, 'down');\r\n DomHelper.setXAxisPosition(element, container, anchor, dimElem, 'right');\r\n\r\n if (drops !== 'down' && drops !== 'up') {\r\n if (DomHelper.isBottomInView(dimElem)) {\r\n DomHelper.setYAxisPosition(element, container, anchor, 'down');\r\n } else if (DomHelper.isTopInView(dimElem)) {\r\n DomHelper.setYAxisPosition(element, container, anchor, 'up');\r\n }\r\n } else {\r\n DomHelper.setYAxisPosition(element, container, anchor, drops);\r\n }\r\n\r\n if (opens !== 'left' && opens !== 'right') {\r\n if (DomHelper.isRightInView(dimElem)) {\r\n DomHelper.setXAxisPosition(element, container, anchor, dimElem, 'right');\r\n } else if (DomHelper.isLeftInView(dimElem)) {\r\n DomHelper.setXAxisPosition(element, container, anchor, dimElem, 'left');\r\n }\r\n } else {\r\n DomHelper.setXAxisPosition(element, container, anchor, dimElem, opens);\r\n }\r\n }\r\n}\r\n\r\nexport interface IAppendToArgs {\r\n container: HTMLElement;\r\n element: HTMLElement;\r\n anchor: HTMLElement;\r\n dimElem: HTMLElement;\r\n drops: TDrops;\r\n opens: TOpens;\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n","import {IDate} from '../common/models/date.model';\r\nimport {DomHelper} from '../common/services/dom-appender/dom-appender.service';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {CalendarMode} from '../common/types/calendar-mode';\r\nimport {ECalendarMode} from '../common/types/calendar-mode-enum';\r\nimport {CalendarValue} from '../common/types/calendar-value';\r\nimport {ECalendarValue} from '../common/types/calendar-value-enum';\r\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\r\nimport {IDayCalendarConfig} from '../day-calendar/day-calendar-config.model';\r\nimport {DayCalendarComponent} from '../day-calendar/day-calendar.component';\r\nimport {DayCalendarService} from '../day-calendar/day-calendar.service';\r\nimport {IDayTimeCalendarConfig} from '../day-time-calendar/day-time-calendar-config.model';\r\nimport {DayTimeCalendarService} from '../day-time-calendar/day-time-calendar.service';\r\nimport {ITimeSelectConfig} from '../time-select/time-select-config.model';\r\nimport {TimeSelectComponent} from '../time-select/time-select.component';\r\nimport {TimeSelectService} from '../time-select/time-select.service';\r\nimport {IDatePickerConfig, IDatePickerConfigInternal} from './date-picker-config.model';\r\nimport {IDpDayPickerApi} from './date-picker.api';\r\nimport {DatePickerService} from './date-picker.service';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport {Moment, unitOfTime} from 'moment';\r\nimport {DateValidator} from '../common/types/validator.type';\r\nimport {MonthCalendarComponent} from '../month-calendar/month-calendar.component';\r\nimport {DayTimeCalendarComponent} from '../day-time-calendar/day-time-calendar.component';\r\nimport {INavEvent} from '../common/models/navigation-event.model';\r\nimport {SelectEvent} from '../common/types/selection-event.enum';\r\nimport {ISelectionEvent} from '../common/types/selection-event.model';\r\n\r\n@Component({\r\n selector: 'dp-date-picker',\r\n templateUrl: 'date-picker.component.html',\r\n styleUrls: ['date-picker.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n DatePickerService,\r\n DayTimeCalendarService,\r\n DayCalendarService,\r\n TimeSelectService,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatePickerComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => DatePickerComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DatePickerComponent implements OnChanges,\r\n OnInit,\r\n AfterViewInit,\r\n ControlValueAccessor,\r\n Validator,\r\n OnDestroy {\r\n\r\n isInitialized: boolean = false;\r\n @Input() config: IDatePickerConfig;\r\n @Input() mode: CalendarMode = 'day';\r\n @Input() placeholder: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() displayDate: SingleCalendarValue;\r\n @HostBinding('class') @Input() theme: string;\r\n @Input() minDate: SingleCalendarValue;\r\n @Input() maxDate: SingleCalendarValue;\r\n @Input() minTime: SingleCalendarValue;\r\n @Input() maxTime: SingleCalendarValue;\r\n @Output() open = new EventEmitter();\r\n @Output() close = new EventEmitter();\r\n @Output() onChange = new EventEmitter();\r\n @Output() onGoToCurrent: EventEmitter = new EventEmitter();\r\n @Output() onLeftNav: EventEmitter = new EventEmitter();\r\n @Output() onRightNav: EventEmitter = new EventEmitter();\r\n @Output() onSelect: EventEmitter = new EventEmitter();\r\n @ViewChild('container') calendarContainer: ElementRef;\r\n @ViewChild('dayCalendar') dayCalendarRef: DayCalendarComponent;\r\n @ViewChild('monthCalendar') monthCalendarRef: MonthCalendarComponent;\r\n @ViewChild('daytimeCalendar') dayTimeCalendarRef: DayTimeCalendarComponent;\r\n @ViewChild('timeSelect') timeSelectRef: TimeSelectComponent;\r\n componentConfig: IDatePickerConfigInternal;\r\n dayCalendarConfig: IDayCalendarConfig;\r\n dayTimeCalendarConfig: IDayTimeCalendarConfig;\r\n timeSelectConfig: ITimeSelectConfig;\r\n hideStateHelper: boolean = false;\r\n inputValue: CalendarValue;\r\n isFocusedTrigger: boolean = false;\r\n inputElementValue: string;\r\n calendarWrapper: HTMLElement;\r\n appendToElement: HTMLElement;\r\n inputElementContainer: HTMLElement;\r\n popupElem: HTMLElement;\r\n handleInnerElementClickUnlisteners: Function[] = [];\r\n globalListenersUnlisteners: Function[] = [];\r\n validateFn: DateValidator;\r\n api: IDpDayPickerApi = {\r\n open: this.showCalendars.bind(this),\r\n close: this.hideCalendar.bind(this),\r\n moveCalendarTo: this.moveCalendarTo.bind(this)\r\n };\r\n selectEvent = SelectEvent;\r\n private onOpenDelayTimeoutHandler;\r\n\r\n constructor(private readonly dayPickerService: DatePickerService,\r\n private readonly domHelper: DomHelper,\r\n private readonly elemRef: ElementRef,\r\n private readonly renderer: Renderer2,\r\n private readonly utilsService: UtilsService,\r\n public readonly cd: ChangeDetectorRef) {\r\n }\r\n\r\n get openOnFocus(): boolean {\r\n return this.componentConfig.openOnFocus;\r\n }\r\n\r\n get openOnClick(): boolean {\r\n return this.componentConfig.openOnClick;\r\n }\r\n\r\n _areCalendarsShown: boolean = false;\r\n\r\n get areCalendarsShown(): boolean {\r\n return this._areCalendarsShown;\r\n }\r\n\r\n set areCalendarsShown(value: boolean) {\r\n if (value) {\r\n this.startGlobalListeners();\r\n this.domHelper.appendElementToPosition({\r\n container: this.appendToElement,\r\n element: this.calendarWrapper,\r\n anchor: this.inputElementContainer,\r\n dimElem: this.popupElem,\r\n drops: this.componentConfig.drops,\r\n opens: this.componentConfig.opens\r\n });\r\n } else {\r\n this.stopGlobalListeners();\r\n this.dayPickerService.pickerClosed();\r\n }\r\n\r\n this._areCalendarsShown = value;\r\n }\r\n\r\n _selected: Moment[] = [];\r\n\r\n get selected(): Moment[] {\r\n return this._selected;\r\n }\r\n\r\n set selected(selected: Moment[]) {\r\n this._selected = selected;\r\n this.inputElementValue = (this.utilsService\r\n .convertFromMomentArray(this.componentConfig.format, selected, ECalendarValue.StringArr))\r\n .join(' | ');\r\n const val = this.processOnChangeCallback(selected);\r\n this.onChangeCallback(val, false);\r\n this.onChange.emit(val);\r\n }\r\n\r\n _currentDateView: Moment;\r\n\r\n get currentDateView(): Moment {\r\n return this._currentDateView;\r\n }\r\n\r\n set currentDateView(date: Moment) {\r\n this._currentDateView = date;\r\n\r\n if (this.dayCalendarRef) {\r\n this.dayCalendarRef.moveCalendarTo(date);\r\n }\r\n\r\n if (this.monthCalendarRef) {\r\n this.monthCalendarRef.moveCalendarTo(date);\r\n }\r\n\r\n if (this.dayTimeCalendarRef) {\r\n this.dayTimeCalendarRef.moveCalendarTo(date);\r\n }\r\n }\r\n\r\n @HostListener('click')\r\n onClick() {\r\n if (!this.openOnClick) {\r\n return;\r\n }\r\n\r\n if (!this.isFocusedTrigger && !this.disabled) {\r\n this.hideStateHelper = true;\r\n if (!this.areCalendarsShown) {\r\n this.showCalendars();\r\n }\r\n }\r\n }\r\n\r\n onBodyClick() {\r\n if (this.componentConfig.hideOnOutsideClick) {\r\n if (!this.hideStateHelper && this.areCalendarsShown) {\r\n this.hideCalendar();\r\n }\r\n\r\n this.hideStateHelper = false;\r\n }\r\n }\r\n\r\n @HostListener('window:resize')\r\n onScroll() {\r\n if (this.areCalendarsShown) {\r\n this.domHelper.setElementPosition({\r\n container: this.appendToElement,\r\n element: this.calendarWrapper,\r\n anchor: this.inputElementContainer,\r\n dimElem: this.popupElem,\r\n drops: this.componentConfig.drops,\r\n opens: this.componentConfig.opens\r\n });\r\n }\r\n }\r\n\r\n writeValue(value: CalendarValue): void {\r\n this.inputValue = value;\r\n\r\n if (value || value === '') {\r\n this.selected = this.utilsService\r\n .convertToMomentArray(value, this.componentConfig);\r\n this.init();\r\n } else {\r\n this.selected = [];\r\n }\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n onChangeCallback(_: any, changedByInput: boolean) {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouchedCallback = fn;\r\n }\r\n\r\n onTouchedCallback() {\r\n }\r\n\r\n validate(formControl: FormControl): ValidationErrors {\r\n return this.validateFn(formControl.value);\r\n }\r\n\r\n processOnChangeCallback(selected: Moment[] | string): CalendarValue {\r\n if (typeof selected === 'string') {\r\n return selected;\r\n } else {\r\n return this.utilsService.convertFromMomentArray(\r\n this.componentConfig.format,\r\n selected,\r\n this.componentConfig.returnedValueType || this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect)\r\n );\r\n }\r\n }\r\n\r\n initValidators(): void {\r\n this.validateFn = this.utilsService.createValidator(\r\n {\r\n minDate: this.minDate,\r\n maxDate: this.maxDate,\r\n minTime: this.minTime,\r\n maxTime: this.maxTime\r\n }, this.componentConfig.format, this.mode);\r\n\r\n this.onChangeCallback(this.processOnChangeCallback(this.selected), false);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isInitialized = true;\r\n this.init();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.isInitialized) {\r\n this.init();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setElementPositionInDom();\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cd.markForCheck();\r\n }\r\n\r\n setElementPositionInDom(): void {\r\n this.calendarWrapper = this.calendarContainer.nativeElement;\r\n this.setInputElementContainer();\r\n this.popupElem = this.elemRef.nativeElement.querySelector('.dp-popup');\r\n this.handleInnerElementClick(this.popupElem);\r\n\r\n const {appendTo} = this.componentConfig;\r\n if (appendTo) {\r\n if (typeof appendTo === 'string') {\r\n this.appendToElement = document.querySelector(appendTo);\r\n } else {\r\n this.appendToElement = appendTo;\r\n }\r\n } else {\r\n this.appendToElement = this.elemRef.nativeElement;\r\n }\r\n\r\n this.appendToElement.appendChild(this.calendarWrapper);\r\n }\r\n\r\n setInputElementContainer() {\r\n this.inputElementContainer = this.utilsService.getNativeElement(this.componentConfig.inputElementContainer)\r\n || this.elemRef.nativeElement.querySelector('.dp-input-container')\r\n || document.body;\r\n }\r\n\r\n handleInnerElementClick(element: HTMLElement) {\r\n this.handleInnerElementClickUnlisteners.push(\r\n this.renderer.listen(element, 'click', () => {\r\n this.hideStateHelper = true;\r\n })\r\n );\r\n }\r\n\r\n init() {\r\n this.componentConfig = this.dayPickerService.getConfig(this.config, this.mode);\r\n this.currentDateView = this.displayDate\r\n ? this.utilsService.convertToMoment(this.displayDate, this.componentConfig.format).clone()\r\n : this.utilsService\r\n .getDefaultDisplayDate(\r\n this.currentDateView,\r\n this.selected,\r\n this.componentConfig.allowMultiSelect,\r\n this.componentConfig.min\r\n );\r\n this.dayCalendarConfig = this.dayPickerService.getDayConfigService(this.componentConfig);\r\n this.dayTimeCalendarConfig = this.dayPickerService.getDayTimeConfigService(this.componentConfig);\r\n this.timeSelectConfig = this.dayPickerService.getTimeConfigService(this.componentConfig);\r\n this.initValidators();\r\n }\r\n\r\n inputFocused() {\r\n if (!this.openOnFocus) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.onOpenDelayTimeoutHandler);\r\n this.isFocusedTrigger = true;\r\n this.onOpenDelayTimeoutHandler = setTimeout(() => {\r\n if (!this.areCalendarsShown) {\r\n this.showCalendars();\r\n }\r\n\r\n this.hideStateHelper = false;\r\n\r\n this.isFocusedTrigger = false;\r\n this.cd.markForCheck();\r\n }, this.componentConfig.onOpenDelay);\r\n }\r\n\r\n inputBlurred() {\r\n clearTimeout(this.onOpenDelayTimeoutHandler);\r\n this.onTouchedCallback();\r\n }\r\n\r\n showCalendars() {\r\n this.hideStateHelper = true;\r\n this.areCalendarsShown = true;\r\n\r\n if (this.timeSelectRef) {\r\n this.timeSelectRef.api.triggerChange();\r\n }\r\n\r\n this.open.emit();\r\n this.cd.markForCheck();\r\n }\r\n\r\n hideCalendar() {\r\n this.areCalendarsShown = false;\r\n\r\n if (this.dayCalendarRef) {\r\n this.dayCalendarRef.api.toggleCalendarMode(ECalendarMode.Day);\r\n }\r\n\r\n this.close.emit();\r\n this.cd.markForCheck();\r\n }\r\n\r\n onViewDateChange(value: CalendarValue) {\r\n const strVal = value ? this.utilsService.convertToString(value, this.componentConfig.format) : '';\r\n if (this.dayPickerService.isValidInputDateValue(strVal, this.componentConfig)) {\r\n this.selected = this.dayPickerService.convertInputValueToMomentArray(strVal, this.componentConfig);\r\n this.currentDateView = this.selected.length\r\n ? this.utilsService.getDefaultDisplayDate(\r\n null,\r\n this.selected,\r\n this.componentConfig.allowMultiSelect,\r\n this.componentConfig.min\r\n )\r\n : this.currentDateView;\r\n\r\n this.onSelect.emit({\r\n date: strVal,\r\n type: SelectEvent.INPUT,\r\n granularity: null\r\n })\r\n } else {\r\n this._selected = this.utilsService\r\n .getValidMomentArray(strVal, this.componentConfig.format);\r\n this.onChangeCallback(this.processOnChangeCallback(strVal), true);\r\n }\r\n }\r\n\r\n dateSelected(date: IDate, granularity: unitOfTime.Base, type: SelectEvent, ignoreClose?: boolean) {\r\n this.selected = this.utilsService\r\n .updateSelected(this.componentConfig.allowMultiSelect, this.selected, date, granularity);\r\n if (!ignoreClose) {\r\n this.onDateClick();\r\n }\r\n\r\n this.onSelect.emit({\r\n date: date.date,\r\n granularity,\r\n type\r\n });\r\n }\r\n\r\n onDateClick() {\r\n if (this.componentConfig.closeOnSelect) {\r\n setTimeout(this.hideCalendar.bind(this), this.componentConfig.closeOnSelectDelay);\r\n }\r\n }\r\n\r\n onKeyPress(event: KeyboardEvent) {\r\n switch (event.keyCode) {\r\n case (9):\r\n case (27):\r\n this.hideCalendar();\r\n break;\r\n }\r\n }\r\n\r\n moveCalendarTo(date: SingleCalendarValue) {\r\n const momentDate = this.utilsService.convertToMoment(date, this.componentConfig.format);\r\n this.currentDateView = momentDate;\r\n }\r\n\r\n onLeftNavClick(change: INavEvent) {\r\n this.onLeftNav.emit(change);\r\n }\r\n\r\n onRightNavClick(change: INavEvent) {\r\n this.onRightNav.emit(change);\r\n }\r\n\r\n startGlobalListeners() {\r\n this.globalListenersUnlisteners.push(\r\n this.renderer.listen(document, 'keydown', (e: KeyboardEvent) => {\r\n this.onKeyPress(e);\r\n }),\r\n this.renderer.listen(document, 'scroll', () => {\r\n this.onScroll();\r\n }),\r\n this.renderer.listen(document, 'click', () => {\r\n this.onBodyClick();\r\n })\r\n );\r\n }\r\n\r\n stopGlobalListeners() {\r\n this.globalListenersUnlisteners.forEach((ul) => ul());\r\n this.globalListenersUnlisteners = [];\r\n }\r\n\r\n ngOnDestroy() {\r\n this.handleInnerElementClickUnlisteners.forEach(ul => ul());\r\n\r\n if (this.appendToElement) {\r\n this.appendToElement.removeChild(this.calendarWrapper);\r\n }\r\n }\r\n}\r\n","
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\r\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\r\nimport {ECalendarMode} from '../common/types/calendar-mode-enum';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChange,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {DayCalendarService} from './day-calendar.service';\r\nimport moment, {Moment, unitOfTime} from 'moment';\r\nimport {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model';\r\nimport {IDay} from './day.model';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport {CalendarValue} from '../common/types/calendar-value';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IMonthCalendarConfig} from '../month-calendar/month-calendar-config';\r\nimport {IMonth} from '../month-calendar/month.model';\r\nimport {DateValidator} from '../common/types/validator.type';\r\nimport {INavEvent} from '../common/models/navigation-event.model';\r\n\r\n@Component({\r\n selector: 'dp-day-calendar',\r\n templateUrl: 'day-calendar.component.html',\r\n styleUrls: ['day-calendar.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n DayCalendarService,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DayCalendarComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => DayCalendarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DayCalendarComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\r\n\r\n @Input() config: IDayCalendarConfig;\r\n @Input() displayDate: SingleCalendarValue;\r\n @Input() minDate: Moment;\r\n @Input() maxDate: Moment;\r\n @HostBinding('class') @Input() theme: string;\r\n @Output() onSelect: EventEmitter = new EventEmitter();\r\n @Output() onMonthSelect: EventEmitter = new EventEmitter();\r\n @Output() onNavHeaderBtnClick: EventEmitter = new EventEmitter();\r\n @Output() onGoToCurrent: EventEmitter = new EventEmitter();\r\n @Output() onLeftNav: EventEmitter = new EventEmitter();\r\n @Output() onRightNav: EventEmitter = new EventEmitter();\r\n CalendarMode = ECalendarMode;\r\n isInited: boolean = false;\r\n componentConfig: IDayCalendarConfigInternal;\r\n weeks: IDay[][];\r\n weekdays: Moment[];\r\n inputValue: CalendarValue;\r\n inputValueType: ECalendarValue;\r\n validateFn: DateValidator;\r\n currentCalendarMode: ECalendarMode = ECalendarMode.Day;\r\n monthCalendarConfig: IMonthCalendarConfig;\r\n _shouldShowCurrent: boolean = true;\r\n navLabel: string;\r\n showLeftNav: boolean;\r\n showRightNav: boolean;\r\n api = {\r\n moveCalendarsBy: this.moveCalendarsBy.bind(this),\r\n moveCalendarTo: this.moveCalendarTo.bind(this),\r\n toggleCalendarMode: this.toggleCalendarMode.bind(this)\r\n };\r\n\r\n constructor(public readonly dayCalendarService: DayCalendarService,\r\n public readonly utilsService: UtilsService,\r\n public readonly cd: ChangeDetectorRef) {\r\n }\r\n\r\n _selected: Moment[];\r\n\r\n get selected(): Moment[] {\r\n return this._selected;\r\n }\r\n\r\n set selected(selected: Moment[]) {\r\n this._selected = selected;\r\n this.onChangeCallback(this.processOnChangeCallback(selected));\r\n }\r\n\r\n _currentDateView: Moment;\r\n\r\n get currentDateView(): Moment {\r\n return this._currentDateView;\r\n }\r\n\r\n set currentDateView(current: Moment) {\r\n this._currentDateView = current.clone();\r\n this.weeks = this.dayCalendarService\r\n .generateMonthArray(this.componentConfig, this._currentDateView, this.selected);\r\n this.navLabel = this.dayCalendarService.getHeaderLabel(this.componentConfig, this._currentDateView);\r\n this.showLeftNav = this.dayCalendarService.shouldShowLeft(this.componentConfig.min, this.currentDateView);\r\n this.showRightNav = this.dayCalendarService.shouldShowRight(this.componentConfig.max, this.currentDateView);\r\n }\r\n ;\r\n\r\n ngOnInit() {\r\n this.isInited = true;\r\n this.init();\r\n this.initValidators();\r\n }\r\n\r\n init() {\r\n this.componentConfig = this.dayCalendarService.getConfig(this.config);\r\n this.selected = this.selected || [];\r\n this.currentDateView = this.displayDate\r\n ? this.utilsService.convertToMoment(this.displayDate, this.componentConfig.format).clone()\r\n : this.utilsService\r\n .getDefaultDisplayDate(\r\n this.currentDateView,\r\n this.selected,\r\n this.componentConfig.allowMultiSelect,\r\n this.componentConfig.min\r\n );\r\n this.weekdays = this.dayCalendarService\r\n .generateWeekdays(this.componentConfig.firstDayOfWeek);\r\n this.inputValueType = this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\r\n this.monthCalendarConfig = this.dayCalendarService.getMonthCalendarConfig(this.componentConfig);\r\n this._shouldShowCurrent = this.shouldShowCurrent();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.isInited) {\r\n const {minDate, maxDate, config} = changes;\r\n\r\n this.handleConfigChange(config);\r\n this.init();\r\n\r\n if (minDate || maxDate) {\r\n this.initValidators();\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: CalendarValue): void {\r\n this.inputValue = value;\r\n\r\n if (value) {\r\n this.selected = this.utilsService\r\n .convertToMomentArray(value, this.componentConfig);\r\n this.inputValueType = this.utilsService\r\n .getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\r\n } else {\r\n this.selected = [];\r\n }\r\n\r\n this.weeks = this.dayCalendarService\r\n .generateMonthArray(this.componentConfig, this.currentDateView, this.selected);\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n onChangeCallback(_: any) {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n }\r\n\r\n validate(formControl: FormControl): ValidationErrors | any {\r\n if (this.minDate || this.maxDate) {\r\n return this.validateFn(formControl.value);\r\n } else {\r\n return () => null;\r\n }\r\n }\r\n\r\n processOnChangeCallback(value: Moment[]): CalendarValue {\r\n return this.utilsService.convertFromMomentArray(\r\n this.componentConfig.format,\r\n value,\r\n this.componentConfig.returnedValueType || this.inputValueType\r\n );\r\n }\r\n\r\n initValidators() {\r\n this.validateFn = this.utilsService.createValidator(\r\n {minDate: this.minDate, maxDate: this.maxDate},\r\n this.componentConfig.format,\r\n 'day'\r\n );\r\n\r\n this.onChangeCallback(this.processOnChangeCallback(this.selected));\r\n }\r\n\r\n dayClicked(day: IDay) {\r\n if (day.selected && !this.componentConfig.unSelectOnClick) {\r\n return;\r\n }\r\n\r\n this.selected = this.utilsService\r\n .updateSelected(this.componentConfig.allowMultiSelect, this.selected, day);\r\n this.weeks = this.dayCalendarService\r\n .generateMonthArray(this.componentConfig, this.currentDateView, this.selected);\r\n this.onSelect.emit(day);\r\n }\r\n\r\n getDayBtnText(day: IDay): string {\r\n return this.dayCalendarService.getDayBtnText(this.componentConfig, day.date);\r\n }\r\n\r\n getDayBtnCssClass(day: IDay): {[klass: string]: boolean} {\r\n const cssClasses: {[klass: string]: boolean} = {\r\n 'dp-selected': day.selected,\r\n 'dp-current-month': day.currentMonth,\r\n 'dp-prev-month': day.prevMonth,\r\n 'dp-next-month': day.nextMonth,\r\n 'dp-current-day': day.currentDay\r\n };\r\n const customCssClass: string = this.dayCalendarService.getDayBtnCssClass(this.componentConfig, day.date);\r\n if (customCssClass) {\r\n cssClasses[customCssClass] = true;\r\n }\r\n\r\n return cssClasses;\r\n }\r\n\r\n onLeftNavClick() {\r\n const from = this.currentDateView.clone();\r\n this.moveCalendarsBy(this.currentDateView, -1, 'month');\r\n const to = this.currentDateView.clone();\r\n this.onLeftNav.emit({from, to});\r\n }\r\n\r\n onRightNavClick() {\r\n const from = this.currentDateView.clone();\r\n this.moveCalendarsBy(this.currentDateView, 1, 'month');\r\n const to = this.currentDateView.clone();\r\n this.onRightNav.emit({from, to});\r\n }\r\n\r\n onMonthCalendarLeftClick(change: INavEvent) {\r\n this.onLeftNav.emit(change);\r\n }\r\n\r\n onMonthCalendarRightClick(change: INavEvent) {\r\n this.onRightNav.emit(change);\r\n }\r\n\r\n onMonthCalendarSecondaryLeftClick(change: INavEvent) {\r\n this.onRightNav.emit(change);\r\n }\r\n\r\n onMonthCalendarSecondaryRightClick(change: INavEvent) {\r\n this.onLeftNav.emit(change);\r\n }\r\n\r\n getWeekdayName(weekday: Moment): string {\r\n if (this.componentConfig.weekDayFormatter) {\r\n return this.componentConfig.weekDayFormatter(weekday.day());\r\n }\r\n\r\n return weekday.format(this.componentConfig.weekDayFormat);\r\n }\r\n\r\n toggleCalendarMode(mode: ECalendarMode) {\r\n if (this.currentCalendarMode !== mode) {\r\n this.currentCalendarMode = mode;\r\n this.onNavHeaderBtnClick.emit(mode);\r\n }\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n monthSelected(month: IMonth) {\r\n this.currentDateView = month.date.clone();\r\n this.currentCalendarMode = ECalendarMode.Day;\r\n this.onMonthSelect.emit(month);\r\n }\r\n\r\n moveCalendarsBy(current: Moment, amount: number, granularity: unitOfTime.Base = 'month') {\r\n this.currentDateView = current.clone().add(amount, granularity);\r\n this.cd.markForCheck();\r\n }\r\n\r\n moveCalendarTo(to: SingleCalendarValue) {\r\n if (to) {\r\n this.currentDateView = this.utilsService.convertToMoment(to, this.componentConfig.format);\r\n }\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n shouldShowCurrent(): boolean {\r\n return this.utilsService.shouldShowCurrent(\r\n this.componentConfig.showGoToCurrent,\r\n 'day',\r\n this.componentConfig.min,\r\n this.componentConfig.max\r\n );\r\n }\r\n\r\n goToCurrent() {\r\n this.currentDateView = moment();\r\n this.onGoToCurrent.emit();\r\n }\r\n\r\n handleConfigChange(config: SimpleChange) {\r\n if (config) {\r\n const prevConf: IDayCalendarConfigInternal = this.dayCalendarService.getConfig(config.previousValue);\r\n const currentConf: IDayCalendarConfigInternal = this.dayCalendarService.getConfig(config.currentValue);\r\n\r\n if (this.utilsService.shouldResetCurrentView(prevConf, currentConf)) {\r\n this._currentDateView = null;\r\n }\r\n\r\n if (prevConf.locale !== currentConf.locale) {\r\n if (this.currentDateView) {\r\n this.currentDateView.locale(currentConf.locale);\r\n }\r\n\r\n this.selected.forEach(m => m.locale(currentConf.locale));\r\n }\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport moment, {Moment} from 'moment';\r\nimport {WeekDays} from '../common/types/week-days.type';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IDay} from './day.model';\r\nimport {IDayCalendarConfig, IDayCalendarConfigInternal} from './day-calendar-config.model';\r\nimport {IMonthCalendarConfig} from '../month-calendar/month-calendar-config';\r\n\r\n@Injectable()\r\nexport class DayCalendarService {\r\n readonly DEFAULT_CONFIG: IDayCalendarConfig = {\r\n showNearMonthDays: true,\r\n showWeekNumbers: false,\r\n firstDayOfWeek: 'su',\r\n weekDayFormat: 'ddd',\r\n format: 'DD-MM-YYYY',\r\n allowMultiSelect: false,\r\n monthFormat: 'MMM, YYYY',\r\n enableMonthSelector: true,\r\n locale: moment.locale(),\r\n dayBtnFormat: 'DD',\r\n unSelectOnClick: true\r\n };\r\n private readonly DAYS = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa'];\r\n\r\n constructor(private utilsService: UtilsService) {\r\n }\r\n\r\n getConfig(config: IDayCalendarConfig): IDayCalendarConfigInternal {\r\n const _config = {\r\n ...this.DEFAULT_CONFIG,\r\n ...this.utilsService.clearUndefined(config)\r\n };\r\n\r\n this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);\r\n\r\n moment.locale(_config.locale);\r\n\r\n return _config;\r\n }\r\n\r\n generateDaysMap(firstDayOfWeek: WeekDays) {\r\n const firstDayIndex = this.DAYS.indexOf(firstDayOfWeek);\r\n const daysArr = this.DAYS.slice(firstDayIndex, 7).concat(this.DAYS.slice(0, firstDayIndex));\r\n return daysArr.reduce((map, day, index) => {\r\n map[day] = index;\r\n\r\n return map;\r\n }, <{[key: string]: number}>{});\r\n }\r\n\r\n generateMonthArray(config: IDayCalendarConfigInternal, month: Moment, selected: Moment[]): IDay[][] {\r\n let monthArray: IDay[][] = [];\r\n const firstDayOfWeekIndex = this.DAYS.indexOf(config.firstDayOfWeek);\r\n const firstDayOfBoard = month.clone().startOf('month');\r\n\r\n while (firstDayOfBoard.day() !== firstDayOfWeekIndex) {\r\n firstDayOfBoard.subtract(1, 'day');\r\n }\r\n\r\n const current = firstDayOfBoard.clone();\r\n const prevMonth = month.clone().subtract(1, 'month');\r\n const nextMonth = month.clone().add(1, 'month');\r\n const today = moment();\r\n\r\n const daysOfCalendar: IDay[] = this.utilsService.createArray(42)\r\n .reduce((array: IDay[]) => {\r\n array.push({\r\n date: current.clone(),\r\n selected: !!selected.find(selectedDay => current.isSame(selectedDay, 'day')),\r\n currentMonth: current.isSame(month, 'month'),\r\n prevMonth: current.isSame(prevMonth, 'month'),\r\n nextMonth: current.isSame(nextMonth, 'month'),\r\n currentDay: current.isSame(today, 'day'),\r\n disabled: this.isDateDisabled(current, config)\r\n });\r\n current.add(1, 'day');\r\n\r\n return array;\r\n }, []);\r\n\r\n daysOfCalendar.forEach((day, index) => {\r\n const weekIndex = Math.floor(index / 7);\r\n\r\n if (!monthArray[weekIndex]) {\r\n monthArray.push([]);\r\n }\r\n\r\n monthArray[weekIndex].push(day);\r\n });\r\n\r\n if (!config.showNearMonthDays) {\r\n monthArray = this.removeNearMonthWeeks(month, monthArray);\r\n }\r\n\r\n return monthArray;\r\n }\r\n\r\n generateWeekdays(firstDayOfWeek: WeekDays): Moment[] {\r\n const weekdayNames: {[key: string]: Moment} = {\r\n su: moment().day(0),\r\n mo: moment().day(1),\r\n tu: moment().day(2),\r\n we: moment().day(3),\r\n th: moment().day(4),\r\n fr: moment().day(5),\r\n sa: moment().day(6)\r\n };\r\n const weekdays: Moment[] = [];\r\n const daysMap = this.generateDaysMap(firstDayOfWeek);\r\n\r\n for (const dayKey in daysMap) {\r\n if (daysMap.hasOwnProperty(dayKey)) {\r\n weekdays[daysMap[dayKey]] = weekdayNames[dayKey];\r\n }\r\n }\r\n\r\n return weekdays;\r\n }\r\n\r\n isDateDisabled(date: Moment, config: IDayCalendarConfigInternal): boolean {\r\n if (config.isDayDisabledCallback) {\r\n return config.isDayDisabledCallback(date);\r\n }\r\n\r\n if (config.min && date.isBefore(config.min, 'day')) {\r\n return true;\r\n }\r\n\r\n return !!(config.max && date.isAfter(config.max, 'day'));\r\n }\r\n\r\n // todo:: add unit tests\r\n getHeaderLabel(config: IDayCalendarConfigInternal, month: Moment): string {\r\n if (config.monthFormatter) {\r\n return config.monthFormatter(month);\r\n }\r\n\r\n return month.format(config.monthFormat);\r\n }\r\n\r\n // todo:: add unit tests\r\n shouldShowLeft(min: Moment, currentMonthView: Moment): boolean {\r\n return min ? min.isBefore(currentMonthView, 'month') : true;\r\n }\r\n\r\n // todo:: add unit tests\r\n shouldShowRight(max: Moment, currentMonthView: Moment): boolean {\r\n return max ? max.isAfter(currentMonthView, 'month') : true;\r\n }\r\n\r\n generateDaysIndexMap(firstDayOfWeek: WeekDays) {\r\n const firstDayIndex = this.DAYS.indexOf(firstDayOfWeek);\r\n const daysArr = this.DAYS.slice(firstDayIndex, 7).concat(this.DAYS.slice(0, firstDayIndex));\r\n return daysArr.reduce((map, day, index) => {\r\n map[index] = day;\r\n\r\n return map;\r\n }, <{[key: number]: string}>{});\r\n }\r\n\r\n getMonthCalendarConfig(componentConfig: IDayCalendarConfigInternal): IMonthCalendarConfig {\r\n return this.utilsService.clearUndefined({\r\n min: componentConfig.min,\r\n max: componentConfig.max,\r\n format: componentConfig.format,\r\n isNavHeaderBtnClickable: true,\r\n allowMultiSelect: false,\r\n locale: componentConfig.locale,\r\n yearFormat: componentConfig.yearFormat,\r\n yearFormatter: componentConfig.yearFormatter,\r\n monthBtnFormat: componentConfig.monthBtnFormat,\r\n monthBtnFormatter: componentConfig.monthBtnFormatter,\r\n monthBtnCssClassCallback: componentConfig.monthBtnCssClassCallback,\r\n isMonthDisabledCallback: componentConfig.isMonthDisabledCallback,\r\n multipleYearsNavigateBy: componentConfig.multipleYearsNavigateBy,\r\n showMultipleYearsNavigation: componentConfig.showMultipleYearsNavigation,\r\n showGoToCurrent: componentConfig.showGoToCurrent,\r\n numOfMonthRows: componentConfig.numOfMonthRows\r\n });\r\n }\r\n\r\n getDayBtnText(config: IDayCalendarConfigInternal, day: Moment): string {\r\n if (config.dayBtnFormatter) {\r\n return config.dayBtnFormatter(day);\r\n }\r\n\r\n return day.format(config.dayBtnFormat);\r\n }\r\n\r\n getDayBtnCssClass(config: IDayCalendarConfigInternal, day: Moment): string {\r\n if (config.dayBtnCssClassCallback) {\r\n return config.dayBtnCssClassCallback(day);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private removeNearMonthWeeks(currentMonth: Moment, monthArray: IDay[][]): IDay[][] {\r\n if (monthArray[monthArray.length - 1].find((day) => day.date.isSame(currentMonth, 'month'))) {\r\n return monthArray;\r\n } else {\r\n return monthArray.slice(0, -1);\r\n }\r\n }\r\n}\r\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\r\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport {Moment} from 'moment';\r\nimport {CalendarValue} from '../common/types/calendar-value';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IDate} from '../common/models/date.model';\r\nimport {DayCalendarService} from '../day-calendar/day-calendar.service';\r\nimport {TimeSelectService} from '../time-select/time-select.service';\r\nimport {IDayTimeCalendarConfig} from './day-time-calendar-config.model';\r\nimport {DayTimeCalendarService} from './day-time-calendar.service';\r\nimport {DateValidator} from '../common/types/validator.type';\r\nimport {DayCalendarComponent} from '../day-calendar/day-calendar.component';\r\nimport {INavEvent} from '../common/models/navigation-event.model';\r\n\r\n@Component({\r\n selector: 'dp-day-time-calendar',\r\n templateUrl: 'day-time-calendar.component.html',\r\n styleUrls: ['day-time-calendar.component.less'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n DayTimeCalendarService,\r\n DayCalendarService,\r\n TimeSelectService,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DayTimeCalendarComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => DayTimeCalendarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DayTimeCalendarComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\r\n\r\n @Input() config: IDayTimeCalendarConfig;\r\n @Input() displayDate: SingleCalendarValue;\r\n @Input() minDate: SingleCalendarValue;\r\n @Input() maxDate: SingleCalendarValue;\r\n @HostBinding('class') @Input() theme: string;\r\n @Output() onChange: EventEmitter = new EventEmitter();\r\n @Output() onGoToCurrent: EventEmitter = new EventEmitter();\r\n @Output() onLeftNav: EventEmitter = new EventEmitter();\r\n @Output() onRightNav: EventEmitter = new EventEmitter();\r\n @ViewChild('dayCalendar') dayCalendarRef: DayCalendarComponent;\r\n isInited: boolean = false;\r\n componentConfig: IDayTimeCalendarConfig;\r\n inputValue: CalendarValue;\r\n inputValueType: ECalendarValue;\r\n validateFn: DateValidator;\r\n api = {\r\n moveCalendarTo: this.moveCalendarTo.bind(this)\r\n };\r\n\r\n constructor(public dayTimeCalendarService: DayTimeCalendarService,\r\n public utilsService: UtilsService,\r\n public cd: ChangeDetectorRef) {\r\n }\r\n\r\n _selected: Moment;\r\n\r\n get selected(): Moment {\r\n return this._selected;\r\n }\r\n\r\n set selected(selected: Moment) {\r\n this._selected = selected;\r\n this.onChangeCallback(this.processOnChangeCallback(selected));\r\n }\r\n ;\r\n\r\n ngOnInit() {\r\n this.isInited = true;\r\n this.init();\r\n this.initValidators();\r\n }\r\n\r\n init() {\r\n this.componentConfig = this.dayTimeCalendarService.getConfig(this.config);\r\n this.inputValueType = this.utilsService.getInputType(this.inputValue, false);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.isInited) {\r\n const {minDate, maxDate} = changes;\r\n this.init();\r\n\r\n if (minDate || maxDate) {\r\n this.initValidators();\r\n }\r\n }\r\n }\r\n\r\n writeValue(value: CalendarValue): void {\r\n this.inputValue = value;\r\n\r\n if (value) {\r\n this.selected = this.utilsService\r\n .convertToMomentArray(value, {\r\n format: this.componentConfig.format,\r\n allowMultiSelect: false\r\n })[0];\r\n this.inputValueType = this.utilsService\r\n .getInputType(this.inputValue, false);\r\n } else {\r\n this.selected = null;\r\n }\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n onChangeCallback(_: any) {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n }\r\n\r\n validate(formControl: FormControl): ValidationErrors | any {\r\n if (this.minDate || this.maxDate) {\r\n return this.validateFn(formControl.value);\r\n } else {\r\n return () => null;\r\n }\r\n }\r\n\r\n processOnChangeCallback(value: Moment): CalendarValue {\r\n return this.utilsService.convertFromMomentArray(\r\n this.componentConfig.format,\r\n [value],\r\n this.componentConfig.returnedValueType || this.inputValueType\r\n );\r\n }\r\n\r\n initValidators() {\r\n this.validateFn = this.utilsService.createValidator(\r\n {\r\n minDate: this.minDate,\r\n maxDate: this.maxDate\r\n }, undefined, 'daytime');\r\n\r\n this.onChangeCallback(this.processOnChangeCallback(this.selected));\r\n }\r\n\r\n dateSelected(day: IDate) {\r\n this.selected = this.dayTimeCalendarService.updateDay(this.selected, day.date, this.config);\r\n this.emitChange();\r\n }\r\n\r\n timeChange(time: IDate) {\r\n this.selected = this.dayTimeCalendarService.updateTime(this.selected, time.date);\r\n this.emitChange();\r\n }\r\n\r\n emitChange() {\r\n this.onChange.emit({date: this.selected, selected: false});\r\n }\r\n\r\n moveCalendarTo(to: SingleCalendarValue) {\r\n if (to) {\r\n this.dayCalendarRef.moveCalendarTo(to);\r\n }\r\n }\r\n\r\n onLeftNavClick(change: INavEvent) {\r\n this.onLeftNav.emit(change);\r\n }\r\n\r\n onRightNavClick(change: INavEvent) {\r\n this.onRightNav.emit(change);\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport moment, {Moment} from 'moment';\r\n\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {DayCalendarService} from '../day-calendar/day-calendar.service';\r\nimport {TimeSelectService} from '../time-select/time-select.service';\r\nimport {IDayTimeCalendarConfig} from './day-time-calendar-config.model';\r\n\r\nconst DAY_FORMAT = 'YYYYMMDD';\r\nconst TIME_FORMAT = 'HH:mm:ss';\r\nconst COMBINED_FORMAT = DAY_FORMAT + TIME_FORMAT;\r\n\r\n@Injectable()\r\nexport class DayTimeCalendarService {\r\n readonly DEFAULT_CONFIG: IDayTimeCalendarConfig = {\r\n locale: moment.locale()\r\n };\r\n\r\n constructor(private utilsService: UtilsService,\r\n private dayCalendarService: DayCalendarService,\r\n private timeSelectService: TimeSelectService) {\r\n }\r\n\r\n getConfig(config: IDayTimeCalendarConfig): IDayTimeCalendarConfig {\r\n const _config = {\r\n ...this.DEFAULT_CONFIG,\r\n ...this.timeSelectService.getConfig(config),\r\n ...this.dayCalendarService.getConfig(config)\r\n };\r\n\r\n moment.locale(config.locale);\r\n\r\n return _config;\r\n }\r\n\r\n updateDay(current: Moment, day: Moment, config: IDayTimeCalendarConfig): Moment {\r\n const time = current ? current : moment();\r\n let updated = moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT);\r\n\r\n if (config.min) {\r\n const min = config.min;\r\n updated = min.isAfter(updated) ? min : updated;\r\n }\r\n\r\n if (config.max) {\r\n const max = config.max;\r\n updated = max.isBefore(updated) ? max : updated;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n updateTime(current: Moment, time: Moment): Moment {\r\n const day = current ? current : moment();\r\n\r\n return moment(day.format(DAY_FORMAT) + time.format(TIME_FORMAT), COMBINED_FORMAT);\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport moment, {Moment} from 'moment';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IMonth} from './month.model';\r\nimport {IMonthCalendarConfig, IMonthCalendarConfigInternal} from './month-calendar-config';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class MonthCalendarService {\r\n readonly DEFAULT_CONFIG: IMonthCalendarConfigInternal = {\r\n allowMultiSelect: false,\r\n yearFormat: 'YYYY',\r\n format: 'MM-YYYY',\r\n isNavHeaderBtnClickable: false,\r\n monthBtnFormat: 'MMM',\r\n locale: moment.locale(),\r\n multipleYearsNavigateBy: 10,\r\n showMultipleYearsNavigation: false,\r\n unSelectOnClick: true,\r\n numOfMonthRows: 3\r\n };\r\n\r\n constructor(private utilsService: UtilsService) {\r\n }\r\n\r\n getConfig(config: IMonthCalendarConfig): IMonthCalendarConfigInternal {\r\n const _config = {\r\n ...this.DEFAULT_CONFIG,\r\n ...this.utilsService.clearUndefined(config)\r\n };\r\n\r\n this.validateConfig(_config);\r\n\r\n this.utilsService.convertPropsToMoment(_config, _config.format, ['min', 'max']);\r\n moment.locale(_config.locale);\r\n\r\n return _config;\r\n }\r\n\r\n generateYear(config: IMonthCalendarConfig, year: Moment, selected: Moment[] = null): IMonth[][] {\r\n const index = year.clone().startOf('year');\r\n\r\n return this.utilsService.createArray(config.numOfMonthRows).map(() => {\r\n return this.utilsService.createArray(12 / config.numOfMonthRows).map(() => {\r\n const date = index.clone();\r\n const month = {\r\n date,\r\n selected: !!selected.find(s => index.isSame(s, 'month')),\r\n currentMonth: index.isSame(moment(), 'month'),\r\n disabled: this.isMonthDisabled(date, config),\r\n text: this.getMonthBtnText(config, date)\r\n };\r\n\r\n index.add(1, 'month');\r\n\r\n return month;\r\n });\r\n });\r\n }\r\n\r\n isMonthDisabled(date: Moment, config: IMonthCalendarConfig) {\r\n if (config.isMonthDisabledCallback) {\r\n return config.isMonthDisabledCallback(date);\r\n }\r\n\r\n if (config.min && date.isBefore(config.min, 'month')) {\r\n return true;\r\n }\r\n\r\n return !!(config.max && date.isAfter(config.max, 'month'));\r\n }\r\n\r\n shouldShowLeft(min: Moment, currentMonthView: Moment): boolean {\r\n return min ? min.isBefore(currentMonthView, 'year') : true;\r\n }\r\n\r\n shouldShowRight(max: Moment, currentMonthView: Moment): boolean {\r\n return max ? max.isAfter(currentMonthView, 'year') : true;\r\n }\r\n\r\n getHeaderLabel(config: IMonthCalendarConfig, year: Moment): string {\r\n if (config.yearFormatter) {\r\n return config.yearFormatter(year);\r\n }\r\n\r\n return year.format(config.yearFormat);\r\n }\r\n\r\n getMonthBtnText(config: IMonthCalendarConfig, month: Moment): string {\r\n if (config.monthBtnFormatter) {\r\n return config.monthBtnFormatter(month);\r\n }\r\n\r\n return month.format(config.monthBtnFormat);\r\n }\r\n\r\n getMonthBtnCssClass(config: IMonthCalendarConfig, month: Moment): string {\r\n if (config.monthBtnCssClassCallback) {\r\n return config.monthBtnCssClassCallback(month);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private validateConfig(config: IMonthCalendarConfigInternal): void {\r\n if (config.numOfMonthRows < 1 || config.numOfMonthRows > 12 || !Number.isInteger(12 / config.numOfMonthRows)) {\r\n throw new Error('numOfMonthRows has to be between 1 - 12 and divide 12 to integer');\r\n }\r\n }\r\n}\r\n","
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChange,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {IMonth} from './month.model';\r\nimport {MonthCalendarService} from './month-calendar.service';\r\nimport moment, {Moment} from 'moment';\r\nimport {IMonthCalendarConfig, IMonthCalendarConfigInternal} from './month-calendar-config';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport {CalendarValue} from '../common/types/calendar-value';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {DateValidator} from '../common/types/validator.type';\r\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\r\nimport {INavEvent} from '../common/models/navigation-event.model';\r\n\r\n@Component({\r\n selector: 'dp-month-calendar',\r\n templateUrl: 'month-calendar.component.html',\r\n styleUrls: ['month-calendar.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n MonthCalendarService,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MonthCalendarComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => MonthCalendarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class MonthCalendarComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\r\n\r\n @Input() config: IMonthCalendarConfig;\r\n @Input() displayDate: Moment;\r\n @Input() minDate: Moment;\r\n @Input() maxDate: Moment;\r\n @HostBinding('class') @Input() theme: string;\r\n @Output() onSelect: EventEmitter = new EventEmitter();\r\n @Output() onNavHeaderBtnClick: EventEmitter = new EventEmitter();\r\n @Output() onGoToCurrent: EventEmitter = new EventEmitter();\r\n @Output() onLeftNav: EventEmitter = new EventEmitter();\r\n @Output() onRightNav: EventEmitter = new EventEmitter();\r\n @Output() onLeftSecondaryNav: EventEmitter = new EventEmitter();\r\n @Output() onRightSecondaryNav: EventEmitter = new EventEmitter();\r\n isInited: boolean = false;\r\n componentConfig: IMonthCalendarConfigInternal;\r\n yearMonths: IMonth[][];\r\n inputValue: CalendarValue;\r\n inputValueType: ECalendarValue;\r\n validateFn: DateValidator;\r\n _shouldShowCurrent: boolean = true;\r\n navLabel: string;\r\n showLeftNav: boolean;\r\n showRightNav: boolean;\r\n showSecondaryLeftNav: boolean;\r\n showSecondaryRightNav: boolean;\r\n api = {\r\n toggleCalendar: this.toggleCalendarMode.bind(this),\r\n moveCalendarTo: this.moveCalendarTo.bind(this)\r\n };\r\n\r\n constructor(public readonly monthCalendarService: MonthCalendarService,\r\n public readonly utilsService: UtilsService,\r\n public readonly cd: ChangeDetectorRef) {\r\n }\r\n\r\n _selected: Moment[];\r\n\r\n get selected(): Moment[] {\r\n return this._selected;\r\n }\r\n\r\n set selected(selected: Moment[]) {\r\n this._selected = selected;\r\n this.onChangeCallback(this.processOnChangeCallback(selected));\r\n }\r\n\r\n _currentDateView: Moment;\r\n\r\n get currentDateView(): Moment {\r\n return this._currentDateView;\r\n }\r\n\r\n set currentDateView(current: Moment) {\r\n this._currentDateView = current.clone();\r\n this.yearMonths = this.monthCalendarService\r\n .generateYear(this.componentConfig, this._currentDateView, this.selected);\r\n this.navLabel = this.monthCalendarService.getHeaderLabel(this.componentConfig, this.currentDateView);\r\n this.showLeftNav = this.monthCalendarService.shouldShowLeft(this.componentConfig.min, this._currentDateView);\r\n this.showRightNav = this.monthCalendarService.shouldShowRight(this.componentConfig.max, this.currentDateView);\r\n this.showSecondaryLeftNav = this.componentConfig.showMultipleYearsNavigation && this.showLeftNav;\r\n this.showSecondaryRightNav = this.componentConfig.showMultipleYearsNavigation && this.showRightNav;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.isInited = true;\r\n this.init();\r\n this.initValidators();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.isInited) {\r\n const {minDate, maxDate, config} = changes;\r\n\r\n this.handleConfigChange(config);\r\n this.init();\r\n\r\n if (minDate || maxDate) {\r\n this.initValidators();\r\n }\r\n }\r\n }\r\n\r\n init(): void {\r\n this.componentConfig = this.monthCalendarService.getConfig(this.config);\r\n this.selected = this.selected || [];\r\n this.currentDateView = this.displayDate\r\n ? this.displayDate\r\n : this.utilsService\r\n .getDefaultDisplayDate(\r\n this.currentDateView,\r\n this.selected,\r\n this.componentConfig.allowMultiSelect,\r\n this.componentConfig.min\r\n );\r\n this.inputValueType = this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\r\n this._shouldShowCurrent = this.shouldShowCurrent();\r\n }\r\n\r\n writeValue(value: CalendarValue): void {\r\n this.inputValue = value;\r\n\r\n if (value) {\r\n this.selected = this.utilsService\r\n .convertToMomentArray(value, this.componentConfig);\r\n this.yearMonths = this.monthCalendarService\r\n .generateYear(this.componentConfig, this.currentDateView, this.selected);\r\n this.inputValueType = this.utilsService.getInputType(this.inputValue, this.componentConfig.allowMultiSelect);\r\n } else {\r\n this.selected = [];\r\n this.yearMonths = this.monthCalendarService\r\n .generateYear(this.componentConfig, this.currentDateView, this.selected);\r\n }\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n onChangeCallback(_: any): void {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n }\r\n\r\n validate(formControl: FormControl): ValidationErrors | any {\r\n if (this.minDate || this.maxDate) {\r\n return this.validateFn(formControl.value);\r\n } else {\r\n return () => null;\r\n }\r\n }\r\n\r\n processOnChangeCallback(value: Moment[]): CalendarValue {\r\n return this.utilsService.convertFromMomentArray(\r\n this.componentConfig.format,\r\n value,\r\n this.componentConfig.returnedValueType || this.inputValueType\r\n );\r\n }\r\n\r\n initValidators(): void {\r\n this.validateFn = this.validateFn = this.utilsService.createValidator(\r\n {minDate: this.minDate, maxDate: this.maxDate},\r\n this.componentConfig.format,\r\n 'month'\r\n );\r\n\r\n this.onChangeCallback(this.processOnChangeCallback(this.selected));\r\n }\r\n\r\n monthClicked(month: IMonth): void {\r\n if (month.selected && !this.componentConfig.unSelectOnClick) {\r\n return;\r\n }\r\n\r\n this.selected = this.utilsService\r\n .updateSelected(this.componentConfig.allowMultiSelect, this.selected, month, 'month');\r\n this.yearMonths = this.monthCalendarService\r\n .generateYear(this.componentConfig, this.currentDateView, this.selected);\r\n this.onSelect.emit(month);\r\n }\r\n\r\n onLeftNavClick() {\r\n const from = this.currentDateView.clone();\r\n this.currentDateView = this.currentDateView.clone().subtract(1, 'year');\r\n const to = this.currentDateView.clone();\r\n this.yearMonths = this.monthCalendarService.generateYear(this.componentConfig, this.currentDateView, this.selected);\r\n this.onLeftNav.emit({from, to});\r\n }\r\n\r\n onLeftSecondaryNavClick(): void {\r\n let navigateBy = this.componentConfig.multipleYearsNavigateBy;\r\n const isOutsideRange = this.componentConfig.min &&\r\n this.currentDateView.year() - this.componentConfig.min.year() < navigateBy;\r\n\r\n if (isOutsideRange) {\r\n navigateBy = this.currentDateView.year() - this.componentConfig.min.year();\r\n }\r\n\r\n const from = this.currentDateView.clone();\r\n this.currentDateView = this.currentDateView.clone().subtract(navigateBy, 'year');\r\n const to = this.currentDateView.clone();\r\n this.onLeftSecondaryNav.emit({from, to});\r\n }\r\n\r\n onRightNavClick(): void {\r\n const from = this.currentDateView.clone();\r\n this.currentDateView = this.currentDateView.clone().add(1, 'year');\r\n const to = this.currentDateView.clone();\r\n this.onRightNav.emit({from, to});\r\n }\r\n\r\n onRightSecondaryNavClick(): void {\r\n let navigateBy = this.componentConfig.multipleYearsNavigateBy;\r\n const isOutsideRange = this.componentConfig.max &&\r\n this.componentConfig.max.year() - this.currentDateView.year() < navigateBy;\r\n\r\n if (isOutsideRange) {\r\n navigateBy = this.componentConfig.max.year() - this.currentDateView.year();\r\n }\r\n\r\n const from = this.currentDateView.clone();\r\n this.currentDateView = this.currentDateView.clone().add(navigateBy, 'year');\r\n const to = this.currentDateView.clone();\r\n this.onRightSecondaryNav.emit({from, to});\r\n }\r\n\r\n toggleCalendarMode(): void {\r\n this.onNavHeaderBtnClick.emit();\r\n }\r\n\r\n getMonthBtnCssClass(month: IMonth): {[klass: string]: boolean} {\r\n const cssClass: {[klass: string]: boolean} = {\r\n 'dp-selected': month.selected,\r\n 'dp-current-month': month.currentMonth\r\n };\r\n const customCssClass: string = this.monthCalendarService.getMonthBtnCssClass(this.componentConfig, month.date);\r\n\r\n if (customCssClass) {\r\n cssClass[customCssClass] = true;\r\n }\r\n\r\n return cssClass;\r\n }\r\n\r\n shouldShowCurrent(): boolean {\r\n return this.utilsService.shouldShowCurrent(\r\n this.componentConfig.showGoToCurrent,\r\n 'month',\r\n this.componentConfig.min,\r\n this.componentConfig.max\r\n );\r\n }\r\n\r\n goToCurrent(): void {\r\n this.currentDateView = moment();\r\n this.onGoToCurrent.emit();\r\n }\r\n\r\n moveCalendarTo(to: SingleCalendarValue): void {\r\n if (to) {\r\n this.currentDateView = this.utilsService.convertToMoment(to, this.componentConfig.format);\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n handleConfigChange(config: SimpleChange): void {\r\n if (config) {\r\n const prevConf: IMonthCalendarConfigInternal = this.monthCalendarService.getConfig(config.previousValue);\r\n const currentConf: IMonthCalendarConfigInternal = this.monthCalendarService.getConfig(config.currentValue);\r\n\r\n if (this.utilsService.shouldResetCurrentView(prevConf, currentConf)) {\r\n this._currentDateView = null;\r\n }\r\n\r\n if (prevConf.locale !== currentConf.locale) {\r\n if (this.currentDateView) {\r\n this.currentDateView.locale(currentConf.locale)\r\n }\r\n\r\n (this.selected || []).forEach((m) => m.locale(currentConf.locale));\r\n }\r\n }\r\n }\r\n}\r\n","
    \r\n
  • \r\n \r\n \r\n this.max) this.value = this.max; if (this.value.length > this.maxLength) { this.value = this.value.slice(0, this.maxLength);}\"\r\n />\r\n \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n \r\n \r\n this.max) this.value = this.max; if (this.value.length > this.maxLength) { this.value = this.value.slice(0, this.maxLength);}\"\r\n (focusout)=\"minutesChange($event)\" />\r\n \r\n
  • \r\n \r\n
  • \r\n
  • \r\n
  • \r\n \r\n \r\n \r\n \r\n
  • \r\n
    \r\n
  • \r\n \r\n \r\n \r\n \r\n
  • \r\n
\r\n","import {ECalendarValue} from '../common/types/calendar-value-enum';\r\nimport {SingleCalendarValue} from '../common/types/single-calendar-value';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChange,\r\n SimpleChanges,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {TimeSelectService, TimeUnit} from './time-select.service';\r\nimport moment, {Moment} from 'moment';\r\nimport {ITimeSelectConfig, ITimeSelectConfigInternal} from './time-select-config.model';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport {CalendarValue} from '../common/types/calendar-value';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IDate} from '../common/models/date.model';\r\nimport {DateValidator} from '../common/types/validator.type';\r\nimport {IDayCalendarConfigInternal} from '../day-calendar/day-calendar-config.model';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'dp-time-select',\r\n templateUrl: 'time-select.component.html',\r\n styleUrls: ['time-select.component.less'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n TimeSelectService,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TimeSelectComponent),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class TimeSelectComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {\r\n\r\n @Input() config: ITimeSelectConfig;\r\n @Input() displayDate: SingleCalendarValue;\r\n @Input() minDate: SingleCalendarValue;\r\n @Input() maxDate: SingleCalendarValue;\r\n @Input() minTime: SingleCalendarValue;\r\n @Input() maxTime: SingleCalendarValue;\r\n @HostBinding('class') @Input() theme: string;\r\n @Output() onChange: EventEmitter = new EventEmitter();\r\n isInited: boolean = false;\r\n componentConfig: ITimeSelectConfigInternal;\r\n inputValue: CalendarValue;\r\n inputValueType: ECalendarValue;\r\n validateFn: DateValidator;\r\n hours: string;\r\n minutes: string;\r\n seconds: string;\r\n meridiem: string;\r\n showDecHour: boolean;\r\n showDecMinute: boolean;\r\n showDecSecond: boolean;\r\n showIncHour: boolean;\r\n showIncMinute: boolean;\r\n showIncSecond: boolean;\r\n showToggleMeridiem: boolean;\r\n api = {\r\n triggerChange: this.emitChange.bind(this)\r\n };\r\n\r\n constructor(public timeSelectService: TimeSelectService,\r\n public utilsService: UtilsService,\r\n public cd: ChangeDetectorRef) {\r\n }\r\n\r\n _selected: Moment;\r\n\r\n get selected(): Moment {\r\n return this._selected;\r\n }\r\n\r\n set selected(selected: Moment) {\r\n this._selected = selected;\r\n this.calculateTimeParts(this.selected);\r\n\r\n this.showDecHour = this.timeSelectService.shouldShowDecrease(this.componentConfig, this._selected, 'hour');\r\n this.showDecMinute = this.timeSelectService.shouldShowDecrease(this.componentConfig, this._selected, 'minute');\r\n this.showDecSecond = this.timeSelectService.shouldShowDecrease(this.componentConfig, this._selected, 'second');\r\n\r\n this.showIncHour = this.timeSelectService.shouldShowIncrease(this.componentConfig, this._selected, 'hour');\r\n this.showIncMinute = this.timeSelectService.shouldShowIncrease(this.componentConfig, this._selected, 'minute');\r\n this.showIncSecond = this.timeSelectService.shouldShowIncrease(this.componentConfig, this._selected, 'second');\r\n\r\n this.showToggleMeridiem = this.timeSelectService.shouldShowToggleMeridiem(this.componentConfig, this._selected);\r\n\r\n this.onChangeCallback(this.processOnChangeCallback(selected));\r\n }\r\n\r\n ngOnInit() {\r\n this.isInited = true;\r\n this.init();\r\n this.initValidators();\r\n }\r\n\r\n init() {\r\n this.componentConfig = this.timeSelectService.getConfig(this.config);\r\n this.selected = this.selected || moment();\r\n this.inputValueType = this.utilsService.getInputType(this.inputValue, false);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.isInited) {\r\n const {minDate, maxDate, minTime, maxTime} = changes;\r\n this.init();\r\n\r\n if (minDate || maxDate || minTime || maxTime) {\r\n this.initValidators();\r\n }\r\n\r\n this.handleConfigChange(changes.config);\r\n }\r\n }\r\n\r\n writeValue(value: CalendarValue): void {\r\n this.inputValue = value;\r\n\r\n if (value) {\r\n const momentValue = this.utilsService\r\n .convertToMomentArray(value, {\r\n allowMultiSelect: false,\r\n format: this.timeSelectService.getTimeFormat(this.componentConfig)\r\n })[0];\r\n if (momentValue.isValid()) {\r\n this.selected = momentValue;\r\n this.inputValueType = this.utilsService\r\n .getInputType(this.inputValue, false);\r\n }\r\n }\r\n\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChangeCallback = fn;\r\n }\r\n\r\n onChangeCallback(_: any) {\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n }\r\n\r\n validate(formControl: FormControl): ValidationErrors | any {\r\n if (this.minDate || this.maxDate || this.minTime || this.maxTime) {\r\n return this.validateFn(formControl.value);\r\n } else {\r\n return () => null;\r\n }\r\n }\r\n\r\n processOnChangeCallback(value: Moment): CalendarValue {\r\n return this.utilsService.convertFromMomentArray(\r\n this.timeSelectService.getTimeFormat(this.componentConfig),\r\n [value],\r\n this.componentConfig.returnedValueType || this.inputValueType\r\n );\r\n }\r\n\r\n initValidators() {\r\n this.validateFn = this.utilsService.createValidator(\r\n {\r\n minDate: this.minDate,\r\n maxDate: this.maxDate,\r\n minTime: this.minTime,\r\n maxTime: this.maxTime\r\n }, undefined, 'day');\r\n\r\n this.onChangeCallback(this.processOnChangeCallback(this.selected));\r\n }\r\n\r\n decrease(unit: TimeUnit) {\r\n this.selected = this.timeSelectService.decrease(this.componentConfig, this.selected, unit);\r\n this.emitChange();\r\n }\r\n\r\n increase(unit: TimeUnit) {\r\n this.selected = this.timeSelectService.increase(this.componentConfig, this.selected, unit);\r\n this.emitChange();\r\n }\r\n\r\n minutesChange(event: any) {\r\n let value = event.target.value; \r\n let unit: TimeUnit = 'minute';\r\n this.selected = this.timeSelectService.setTime(value, this.selected, unit);\r\n this.emitChange();\r\n }\r\n\r\n hoursChange(event: any) {\r\n let value = event.target.value;\r\n let unit: TimeUnit = 'hour';\r\n this.selected = this.timeSelectService.setTime(value, this.selected, unit);\r\n this.emitChange();\r\n }\r\n\r\n toggleMeridiem() {\r\n this.selected = this.timeSelectService.toggleMeridiem(this.selected);\r\n this.emitChange();\r\n }\r\n\r\n emitChange() {\r\n this.onChange.emit({date: this.selected, selected: false});\r\n this.cd.markForCheck();\r\n }\r\n\r\n calculateTimeParts(time: Moment) {\r\n this.hours = this.timeSelectService.getHours(this.componentConfig, time);\r\n this.minutes = this.timeSelectService.getMinutes(this.componentConfig, time);\r\n this.seconds = this.timeSelectService.getSeconds(this.componentConfig, time);\r\n this.meridiem = this.timeSelectService.getMeridiem(this.componentConfig, time);\r\n\r\n }\r\n \r\n\r\n private handleConfigChange(config: SimpleChange) {\r\n if (config) {\r\n const prevConf: IDayCalendarConfigInternal = this.timeSelectService.getConfig(config.previousValue);\r\n const currentConf: IDayCalendarConfigInternal = this.timeSelectService.getConfig(config.currentValue);\r\n\r\n if (prevConf.locale !== currentConf.locale) {\r\n this.selected = this.selected.clone().locale(currentConf.locale);\r\n }\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport moment, {Moment} from 'moment';\r\nimport {UtilsService} from '../common/services/utils/utils.service';\r\nimport {ITimeSelectConfig, ITimeSelectConfigInternal} from './time-select-config.model';\r\n\r\n\r\n\r\nexport type TimeUnit = 'hour' | 'minute' | 'second';\r\nexport const FIRST_PM_HOUR = 12;\r\n\r\n@Injectable()\r\nexport class TimeSelectService {\r\n readonly DEFAULT_CONFIG: ITimeSelectConfigInternal = {\r\n hours12Format: 'hh',\r\n hours24Format: 'HH',\r\n meridiemFormat: 'A',\r\n minutesFormat: 'mm',\r\n minutesInterval: 1,\r\n secondsFormat: 'ss',\r\n secondsInterval: 1,\r\n showSeconds: false,\r\n showTwentyFourHours: false,\r\n timeSeparator: ':',\r\n locale: moment.locale()\r\n };\r\n\r\n constructor(private readonly utilsService: UtilsService) {\r\n }\r\n\r\n getConfig(config: ITimeSelectConfig): ITimeSelectConfigInternal {\r\n const timeConfigs = {\r\n maxTime: this.utilsService.onlyTime(config && config.maxTime),\r\n minTime: this.utilsService.onlyTime(config && config.minTime)\r\n };\r\n\r\n const _config = {\r\n ...this.DEFAULT_CONFIG,\r\n ...this.utilsService.clearUndefined(config),\r\n ...timeConfigs\r\n };\r\n\r\n moment.locale(_config.locale);\r\n\r\n return _config;\r\n }\r\n\r\n getTimeFormat(config: ITimeSelectConfigInternal): string {\r\n return (config.showTwentyFourHours ? config.hours24Format : config.hours12Format)\r\n + config.timeSeparator + config.minutesFormat\r\n + (config.showSeconds ? (config.timeSeparator + config.secondsFormat) : '')\r\n + (config.showTwentyFourHours ? '' : ' ' + config.meridiemFormat);\r\n }\r\n\r\n getHours(config: ITimeSelectConfigInternal, t: Moment | null): string {\r\n const time = t || moment();\r\n return time && time.format(config.showTwentyFourHours ? config.hours24Format : config.hours12Format);\r\n }\r\n\r\n getMinutes(config: ITimeSelectConfigInternal, t: Moment | null): string {\r\n const time = t || moment();\r\n return time && time.format(config.minutesFormat);\r\n }\r\n\r\n getSeconds(config: ITimeSelectConfigInternal, t: Moment | null): string {\r\n const time = t || moment();\r\n return time && time.format(config.secondsFormat);\r\n }\r\n\r\n getMeridiem(config: ITimeSelectConfigInternal, time: Moment): string {\r\n return time && time.format(config.meridiemFormat);\r\n }\r\n\r\n decrease(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): Moment {\r\n let amount: number = 1;\r\n switch (unit) {\r\n case 'minute':\r\n amount = config.minutesInterval;\r\n break;\r\n case 'second':\r\n amount = config.secondsInterval;\r\n break;\r\n }\r\n return time.clone().subtract(amount, unit);\r\n }\r\n\r\n increase(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): Moment {\r\n let amount: number = 1;\r\n switch (unit) {\r\n case 'minute':\r\n amount = config.minutesInterval;\r\n break;\r\n case 'second':\r\n amount = config.secondsInterval;\r\n break;\r\n }\r\n return time.clone().add(amount, unit);\r\n }\r\n\r\n setTime(value:number, time: Moment, unit: TimeUnit): Moment {\r\n return time.clone().set(unit,value);\r\n }\r\n\r\n toggleMeridiem(time: Moment): Moment {\r\n if (time.hours() < FIRST_PM_HOUR) {\r\n return time.clone().add(12, 'hour');\r\n } else {\r\n return time.clone().subtract(12, 'hour');\r\n }\r\n }\r\n\r\n shouldShowDecrease(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): boolean {\r\n if (!config.min && !config.minTime) {\r\n return true;\r\n }\r\n const newTime = this.decrease(config, time, unit);\r\n\r\n return (!config.min || config.min.isSameOrBefore(newTime))\r\n && (!config.minTime || config.minTime.isSameOrBefore(this.utilsService.onlyTime(newTime)));\r\n }\r\n\r\n shouldShowIncrease(config: ITimeSelectConfigInternal, time: Moment, unit: TimeUnit): boolean {\r\n if (!config.max && !config.maxTime) {\r\n return true;\r\n }\r\n const newTime = this.increase(config, time, unit);\r\n\r\n return (!config.max || config.max.isSameOrAfter(newTime))\r\n && (!config.maxTime || config.maxTime.isSameOrAfter(this.utilsService.onlyTime(newTime)));\r\n }\r\n\r\n shouldShowToggleMeridiem(config: ITimeSelectConfigInternal, time: Moment): boolean {\r\n if (!config.min && !config.max && !config.minTime && !config.maxTime) {\r\n return true;\r\n }\r\n const newTime = this.toggleMeridiem(time);\r\n return (!config.max || config.max.isSameOrAfter(newTime))\r\n && (!config.min || config.min.isSameOrBefore(newTime))\r\n && (!config.maxTime || config.maxTime.isSameOrAfter(this.utilsService.onlyTime(newTime)))\r\n && (!config.minTime || config.minTime.isSameOrBefore(this.utilsService.onlyTime(newTime)));\r\n }\r\n}\r\n","
\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n
","import moment from 'moment';\r\n\r\nimport { Component, EventEmitter, Input, OnDestroy, Output, SimpleChanges } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { IDatePickerConfig } from '../date-picker/lib';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nexport interface DateRange {\r\n startDate: moment.Moment,\r\n endDate: moment.Moment\r\n}\r\n\r\nconst defaultStartDate = moment().startOf('day').subtract(1, 'weeks');\r\nconst defaultEndDate = moment();\r\n@Component({\r\n selector: 'involve-date-range',\r\n templateUrl: 'date-range.component.html',\r\n styleUrls: ['date-range.component.scss'],\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'dateRange' }\r\n ]\r\n})\r\n\r\nexport class InvolveDateRangeComponent implements OnDestroy {\r\n public form = this._fb.group({\r\n startDate: [defaultStartDate],\r\n endDate: [defaultEndDate],\r\n\r\n startDateMin: [null],\r\n startDateMax: [defaultEndDate],\r\n\r\n endDateMin: [defaultStartDate],\r\n });\r\n\r\n @Input() isDisabled = false;\r\n @Input() loading = false;\r\n @Input() showIcon: boolean = true;\r\n @Input() icon: string = 'refresh-right';\r\n\r\n @Input() format: string = 'MM/DD/YYYY';\r\n\r\n @Input() mode: 'time' | 'day' | 'month' | 'daytime' = 'day';\r\n\r\n @Input() width: number = 140;\r\n\r\n public get config(): IDatePickerConfig {\r\n return {\r\n format: this.format\r\n };\r\n }\r\n\r\n @Input()\r\n public set startDate(value: string | moment.Moment) {\r\n if (value) {\r\n value = moment.isMoment(value) ? value : moment(value, this.format);\r\n this.form.get('startDate').patchValue(value, { emitEvent: false });\r\n }\r\n }\r\n\r\n @Output()\r\n public startDateChange = new EventEmitter();\r\n\r\n @Input()\r\n public set startDateMin(value: string | moment.Moment) {\r\n this.form.get('startDateMin').patchValue(value ? moment.isMoment(value) ? value : moment(value, this.format) : null);\r\n }\r\n\r\n @Input()\r\n public set startDateMax(value: string | moment.Moment) {\r\n this.form.get('startDateMax').patchValue(value ? moment.isMoment(value) ? value : moment(value, this.format) : null);\r\n }\r\n\r\n @Input()\r\n public set endDate(value: string | moment.Moment) {\r\n if (value) {\r\n value = moment.isMoment(value) ? value : moment(value, this.format);\r\n this.form.get('endDate').patchValue(value, { emitEvent: false });\r\n }\r\n }\r\n\r\n @Output()\r\n public endDateChange = new EventEmitter();\r\n\r\n @Input()\r\n public endDateMin: string = null; // startDate || endDateMin\r\n\r\n @Output()\r\n public dateRangeChange = new EventEmitter();\r\n\r\n @Output()\r\n public reloadClicked = new EventEmitter();\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _fb: FormBuilder,\r\n ) {\r\n // needed here, ngOnInit is too late\r\n this.form.get('startDate').valueChanges.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(startDate => {\r\n this.setEndDateMin(startDate);\r\n this.startDateChange.emit(startDate.format(this.format));\r\n this.dateRangeChange.emit({\r\n startDate,\r\n endDate: this.form.get('endDate').value\r\n });\r\n });\r\n\r\n this.form.get('endDate').valueChanges.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(endDate => {\r\n this.setStartDateMax(endDate);\r\n this.endDateChange.emit(endDate.format(this.format));\r\n this.dateRangeChange.emit({\r\n startDate: this.form.get('startDate').value,\r\n endDate\r\n });\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if ('startDateMax' in changes)\r\n this.setStartDateMax(this.form.get('endDate').value);\r\n\r\n if ('endDateMin' in changes)\r\n this.setEndDateMin(this.form.get('startDate').value);\r\n }\r\n\r\n public onReloadClick() {\r\n if (this.loading === false) {\r\n this.reloadClicked.emit({\r\n startDate: this.form.get('startDate').value,\r\n endDate: this.form.get('endDate').value\r\n });\r\n }\r\n }\r\n\r\n private setStartDateMax(endDate: moment.Moment) {\r\n let max = endDate;\r\n\r\n if (this.startDateMax) {\r\n let startDateMax = moment(this.startDateMax, this.format);\r\n\r\n if (endDate > startDateMax)\r\n max = startDateMax;\r\n }\r\n\r\n this.form.get('startDateMax').patchValue(max);\r\n }\r\n\r\n private setEndDateMin(startDate: moment.Moment) {\r\n let min = startDate;\r\n\r\n if (this.endDateMin) {\r\n let endDateMin = moment(this.endDateMin, this.format);\r\n\r\n if (startDate < endDateMin)\r\n min = endDateMin;\r\n }\r\n\r\n this.form.get('endDateMin').patchValue(min);\r\n }\r\n}\r\n","import * as _ from 'lodash';\r\n\r\nimport { Directive, Inject, InjectionToken, Input, Optional, Self, SimpleChanges, SkipSelf, forwardRef } from '@angular/core';\r\nimport { AppSettingsService } from '@rfv/modules/core/services';\r\n\r\nexport const DATA_CY_TYPE = new InjectionToken('dataCy');\r\n\r\nexport abstract class CypressValueAccessor {\r\n abstract get dataCy(): string;\r\n abstract get enabled(): boolean;\r\n}\r\n\r\n/**\r\n * Builds the cypress tag for the element.\r\n * \r\n * Tags will be built hierarchically - -:\r\n * \r\n * If the type of the target component is known, the tag will be prefixed by the component type.\r\n * \r\n * Cypress tags can be enabled/disabled per environment via the appSettings service.\r\n * \r\n * @example\r\n *
// data-cy=\"one\"\r\n *
// data-cy=\"one-two\"\r\n *
\r\n *
\r\n *
// data-cy=\"three\"\r\n *
// data-cy=\"three-one\"\r\n *
\r\n *
\r\n * \r\n * @example\r\n * // data-cy=\"tile:myTile\"\r\n *
// data-cy=\"tile:myTile-myForm\"\r\n * // data-cy=\"tile:myTile-myForm-field:myField\"\r\n * // data-cy=\"tile:myTile-myForm-field:myField-label\"\r\n * // data-cy=\"tile:myTile-myForm-field:myField-input\"\r\n * // data-cy=\"tile:myTile-myForm-field:myField-error:required\"\r\n * // data-cy=\"tile:myTile-myForm-field:myField-error:invalid\"\r\n * \r\n *
\r\n *
\r\n */\r\n@Directive({\r\n selector: '[cypress]',\r\n exportAs: 'cypress',\r\n host: {\r\n '[attr.data-cy]': 'enabled ? dataCy : undefined'\r\n },\r\n providers: [ { provide: CypressValueAccessor, useExisting: forwardRef(() => CypressDirective) } ]\r\n})\r\nexport class CypressDirective extends CypressValueAccessor {\r\n // for collision detection\r\n private static __tags: {\r\n [tag: string]: CypressDirective;\r\n } = {}\r\n\r\n /**\r\n * Cypress id for this element.\r\n * If null, the tag defaults to -\r\n */\r\n @Input('cypress')\r\n public id: string | number | null = null;\r\n\r\n /**\r\n * Type override. You probably don't need this!!!\r\n * \r\n * Types will be injected automatically from supported components.\r\n */\r\n @Input('cypressType')\r\n public type: string | null = null;\r\n\r\n /**\r\n * Disables the tag on the element. Child tags will still be scoped to this element.\r\n */\r\n @Input('cypressEnabled')\r\n public cypressEnabled: boolean = true;\r\n \r\n private _dataCy: string | null = null;\r\n public get dataCy() { return this._dataCy; }\r\n\r\n public get enabled() { \r\n if (!this._appSettings.cypress)\r\n return false;\r\n else if (!this.cypressEnabled)\r\n return false;\r\n else if (!this.type && !this._type && (this.id === null || this.id === undefined))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public constructor(\r\n private _appSettings: AppSettingsService,\r\n\r\n @Inject(CypressValueAccessor) @Optional() @SkipSelf()\r\n private _parent?: CypressValueAccessor,\r\n\r\n @Inject(DATA_CY_TYPE) @Optional() @Self()\r\n private _type?: string\r\n ) {\r\n super();\r\n }\r\n\r\n public ngOnInit() {\r\n this.invalidate();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if ('id' in changes && !changes.id.firstChange)\r\n this.invalidate();\r\n if ('enabled' in changes && !changes.enabled.firstChange)\r\n this.invalidate();\r\n }\r\n\r\n public ngOnDestroy() {\r\n if (this._dataCy && CypressDirective.__tags[this._dataCy] === this)\r\n delete CypressDirective.__tags[this._dataCy];\r\n }\r\n\r\n private invalidate() {\r\n // build the tag... -:\r\n if (this._dataCy && CypressDirective.__tags[this._dataCy] === this)\r\n delete CypressDirective.__tags[this._dataCy];\r\n\r\n let tag: string;\r\n\r\n if (this.type)\r\n tag = this.type;\r\n else if (this._type)\r\n tag = this._type;\r\n\r\n if (this.id !== null && this.id !== undefined)\r\n tag = tag ? tag + ':' + _.camelCase(this.id.toString()) : _.camelCase(this.id.toString());\r\n\r\n this._dataCy = this._parent ? this._parent.dataCy + '-' + tag : tag;\r\n\r\n if (!this.enabled)\r\n return;\r\n\r\n if (!CypressDirective.__tags[this._dataCy]) {\r\n CypressDirective.__tags[this._dataCy] = this;\r\n } else if (CypressDirective.__tags[this._dataCy] !== this) {\r\n console.warn(`Cypress collision detected: ${this._dataCy}`);\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CypressDirective } from './cypress.directive';\r\nimport { InvolveTooltipModule } from '../tooltip/tooltip.module';\r\nimport { InvolveOverflowDirective } from './involve-overflow.directive';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n InvolveTooltipModule\r\n ],\r\n declarations: [\r\n CypressDirective,\r\n InvolveOverflowDirective\r\n ],\r\n exports: [\r\n CypressDirective,\r\n InvolveOverflowDirective\r\n ]\r\n})\r\nexport class InvolveDirectiveModule { }\r\n","
\r\n \r\n \r\n {{ htmlText }}\r\n \r\n
\r\n\r\n\r\n \r\n","import { ElementRef, Component, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core';\r\n\r\n\r\n@Component({\r\n selector: 'involve-overflow, [involve-overflow]',\r\n templateUrl: 'involve-overflow.html',\r\n styles: [`\r\n .involveOverflow {\r\n width: 100%;\r\n white-space: nowrap;\r\n }\r\n\r\n .involveOverflowEllipsis {\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n }\r\n `]\r\n})\r\nexport class InvolveOverflowDirective implements AfterViewInit {\r\n get htmlText(): string{\r\n return this.element.nativeElement.innerText;\r\n };\r\n\r\n get htmlElement(): HTMLElement {\r\n return this.element.nativeElement;\r\n };\r\n\r\n public overflow: boolean = false;\r\n\r\n @ViewChild('element') element: ElementRef;\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n public ngOnInit() {\r\n // fromEvent(window, 'resize').\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.checkOverflow();\r\n };\r\n\r\n public onResize() {\r\n this.checkOverflow();\r\n }\r\n\r\n private checkOverflow() {\r\n const prev = this.overflow;\r\n\r\n this.overflow = this.element.nativeElement.offsetHeight < this.element.nativeElement.scrollHeight \r\n || this.element.nativeElement.offsetWidth < this.element.nativeElement.scrollWidth;\r\n\r\n if (prev !== this.overflow)\r\n this._cdr.detectChanges();\r\n };\r\n};","\r\n\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self, SimpleChange, ViewChild } from \"@angular/core\";\r\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\r\nimport { Observable, Subject } from \"rxjs\";\r\nimport { InvolveFormFieldControl } from \"../form-field/form-field-control\";\r\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\r\n\r\nlet __id = 0;\r\n@Component({\r\n selector: 'involve-equation-editor',\r\n styleUrls: ['./equation-editor.component.scss'],\r\n template: ` \r\n
\r\n
\r\n
\r\n
\r\n `,\r\n providers: [\r\n { provide: InvolveFormFieldControl, useExisting: InvolveEquationEditorComponent }\r\n ]\r\n})\r\nexport class InvolveEquationEditorComponent implements OnInit, OnDestroy, ControlValueAccessor, InvolveFormFieldControl {\r\n\r\n @Input()\r\n public id: string = `involve-equation-editor-${__id}`;\r\n\r\n protected _value: string = null;\r\n\r\n @Input()\r\n public get value() { return this._value; }\r\n public set value(value: string) {\r\n if (!value) {\r\n this._value = null;\r\n }\r\n if (value !== this._value) {\r\n this._value = value;\r\n }\r\n }\r\n\r\n @Output()\r\n public valueChange = new EventEmitter();\r\n\r\n @Input()\r\n public inputs: { index: string | number, name?: string }[] = []\r\n\r\n @Input()\r\n public get disabled(): boolean | string { return this._disabled; }\r\n public set disabled(value: boolean | string) { this._disabled = coerceBooleanProperty(value); }\r\n protected _disabled = false;\r\n\r\n @Input()\r\n public get required(): boolean | string { return this._required; }\r\n public set required(value: boolean | string) { this._required = coerceBooleanProperty(value); }\r\n protected _required = false;\r\n\r\n @Output()\r\n private summaryChange = new EventEmitter();\r\n\r\n //displayed text\r\n @ViewChild('display', { static: true })\r\n private _display: ElementRef;\r\n\r\n //hidden text\r\n @ViewChild('hiddenText', { static: true })\r\n private _textEl: ElementRef;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public parseError = false;\r\n\r\n public get hasError() {\r\n return this.parseError || this.control.control.errors;\r\n }\r\n\r\n public constructor(\r\n @Optional()\r\n public control: NgControl\r\n ) {\r\n if (this.control)\r\n this.control.valueAccessor = this;\r\n }\r\n \r\n\r\n public ngOnInit(): void {\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this._textEl.nativeElement.innerText = this._value;\r\n\r\n this._textEl.nativeElement.addEventListener('scroll', () => this.scrollMirror())\r\n this._textEl.nativeElement.addEventListener('keyup', () => this.scrollMirror())\r\n this._textEl.nativeElement.addEventListener('input', ($event) => this.handleInput($event as InputEvent));\r\n this._textEl.nativeElement.addEventListener('paste', event => {\r\n event.preventDefault();\r\n document.execCommand('inserttext', false, event.clipboardData.getData('text/plain'));\r\n });\r\n\r\n this.scrollMirror();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChange) {\r\n if (changes['inputs']) {\r\n this.highlight();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete()\r\n }\r\n\r\n public onContainerClick(event: MouseEvent): void { }\r\n\r\n public handleInput = (event: InputEvent) => {\r\n //change control value\r\n this.value = this._textEl.nativeElement.innerText;\r\n this.onChange(this.value);\r\n\r\n //highlight input (textbox) and output (summary)\r\n this.highlight();\r\n }\r\n\r\n /**\r\n * Highlights the display element (textbox) and summary\r\n */\r\n private highlight() {\r\n // convert the raw value to html safe\r\n const span = document.createElement('span');\r\n span.innerText = this.value;\r\n const html = span.innerHTML;\r\n \r\n this._display.nativeElement.innerHTML = this.parse(html, false);\r\n this.summaryChange.emit(this.parse(html));\r\n }\r\n\r\n /**\r\n * Controls the scroll of the 'viewed' element\r\n */\r\n private scrollMirror() {\r\n this._display.nativeElement.scrollTo(this._textEl.nativeElement.scrollLeft, this._textEl.nativeElement.scrollTop);\r\n };\r\n\r\n /**\r\n * Parse a string\r\n * @param originalValue string to be parsed\r\n * @param allowReplace [Optional] flag for replacing index or not \r\n * @returns the parsed version with html tags of the string\r\n */\r\n private parse(originalValue: string, allowReplace: boolean = true) {\r\n if (!originalValue) \r\n return '';\r\n\r\n const allKeysFoundInString = originalValue.match(/\\{(.*?)\\}/g);\r\n if (!allKeysFoundInString?.length)\r\n return originalValue;\r\n\r\n let parsedValue = originalValue;\r\n\r\n let hadError = false;\r\n\r\n allKeysFoundInString.forEach(foundInString => {\r\n const input = this.inputs?.find(input => foundInString.includes(`\\{${input.index}\\}`))\r\n foundInString = foundInString.replace('{', '').replace('}', '')\r\n\r\n const regexp = new RegExp(`\\\\\\{${foundInString}\\\\\\}`, 'g')\r\n const space = allowReplace ? ' ' : '';\r\n if (!input) {\r\n hadError = true;\r\n parsedValue = parsedValue.replace(regexp, `${space}\\{${foundInString}\\}${space}`);\r\n } else {\r\n const replacement = !!input.name && allowReplace ? input.name : input.index;\r\n if (!input.name) {\r\n hadError = true;\r\n parsedValue = parsedValue.replace(regexp, `${space}\\{${replacement}\\}${space}`);\r\n } else {\r\n parsedValue = parsedValue.replace(regexp, `${space}\\{${replacement}\\}${space}`);\r\n }\r\n }\r\n });\r\n\r\n this.parseError = hadError;\r\n\r\n return parsedValue;\r\n }\r\n\r\n //\r\n // Control Value Accessor interface\r\n //\r\n\r\n public writeValue(val: string): void {\r\n if (!val)\r\n val = \"\";\r\n\r\n this.value = val;\r\n this._textEl.nativeElement.innerText = this.value;\r\n this.highlight();\r\n }\r\n\r\n public onChange: Function = () => { }\r\n public registerOnChange(fn: Function) {\r\n this.onChange = fn;\r\n }\r\n\r\n public onTouch: Function = () => { }\r\n public registerOnTouched(fn: Function): void {\r\n this.onTouch = fn;\r\n }\r\n \r\n public setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n }\r\n\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { InvolveInputModule } from '../input/input.module';\r\n\r\nimport { InvolveEquationEditorComponent } from './equation-editor.component' \r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n InvolveInputModule\r\n ],\r\n declarations: [\r\n InvolveEquationEditorComponent\r\n ],\r\n exports: [\r\n InvolveEquationEditorComponent\r\n ]\r\n})\r\nexport class InvolveEquationEditorModule { } ","
\r\n \r\n
\r\n\r\n\r\n {{ formats.entries | json }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ format.toUpperCase() }}\r\n \r\n \r\n \r\n","import moment from 'moment';\r\nimport * as xlsx from 'xlsx';\r\nimport { saveAs } from 'file-saver';\r\n\r\nimport { Component, Input } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n\r\n//new interface to use for data(columns)\r\nexport declare type InvolveExportColumn = {\r\n /**\r\n * Row header. If this is a 'nested' column, it can be the key of the value to use for the additional worksheet names.\r\n */\r\n header: string | keyof T,\r\n\r\n /**\r\n * Row value accessor (the propertyKey of the object).\r\n */\r\n key: keyof T | string, // the row value accessor (the propertyKey of the object)\r\n\r\n /**\r\n * If set (and exporting to xlsx), this field will create a new worksheet\r\n * for the array found at T[key]. The worksheet name will be the value\r\n * found at T[header].\r\n */\r\n columns?: InvolveExportColumn[];\r\n\r\n accessor?: (data: T, parent?: any) => any;\r\n}\r\n\r\n@Component({\r\n selector: 'involve-export',\r\n templateUrl: 'export.component.html'\r\n})\r\nexport class InvolveExportComponent {\r\n @Input()\r\n public get csv() { return this.formats.has('csv'); }\r\n public set csv(value: boolean) { value ? this.formats.add('csv') : this.formats.delete('csv'); }\r\n\r\n @Input()\r\n public get xlsx() { return this.formats.has('xlsx'); }\r\n public set xlsx(value: boolean) { value ? this.formats.add('xlsx') : this.formats.delete('xlsx'); }\r\n\r\n public readonly formats: Set<'csv' | 'xlsx'> = new Set(['csv', 'xlsx']);\r\n\r\n @Input()\r\n public columns: InvolveExportColumn[];\r\n\r\n @Input()\r\n public data: T[];\r\n\r\n @Input()\r\n public callback: () => Observable;\r\n\r\n @Input()\r\n public fileName: string = 'Remote Fleet Vision';\r\n\r\n @Input()\r\n public includeNestedOnly = false;\r\n\r\n public onExport(format?: 'csv' | 'xlsx') {\r\n if (!format && this.formats.size)\r\n [format] = this.formats;\r\n\r\n if (!format)\r\n return;\r\n\r\n this.callback\r\n ? this.callback().subscribe(data => this._export(format, data))\r\n : this._export(format, this.data);\r\n }\r\n\r\n private _export(format: 'csv' | 'xlsx', data: T[]) {\r\n if (!data?.length)\r\n return;\r\n\r\n const columns = this.columns || Object.keys(data[0]).map(key => ({ header: key, key: key as keyof T }));\r\n\r\n switch (format) {\r\n case 'csv': this.exportCsv(columns, data); break;\r\n case 'xlsx': this.exportXlsx(columns, data); break;\r\n }\r\n }\r\n\r\n private exportCsv(columns: InvolveExportColumn[], data: T[]) {\r\n const formatter = (value: any) => {\r\n if (value === undefined || value === null)\r\n return '';\r\n\r\n if (value instanceof Date || (typeof value === 'string' && moment(value, moment.ISO_8601).isValid()))\r\n return moment(value).format('MM-DD-YYYY HH:mm:ss A');\r\n\r\n switch (typeof(value)) {\r\n case 'bigint':\r\n case 'number': return value;\r\n case 'string': return `\"${value.replace(/\"/g, '\"\"')}\"`;\r\n case 'object': return `\"${JSON.stringify(value).replace(/\"/g, '\"\"')}\"`;\r\n case 'boolean': return value ? 'true' : 'false';\r\n default: return '';\r\n }\r\n }\r\n\r\n // ignore nested export in csv mode\r\n columns = columns.filter(column => !column.columns);\r\n\r\n const header = columns.map(column => formatter(column.header)).join(',');\r\n const rows = data.map(row => columns.map(column => formatter(this.getValue(row, column))).join(','));\r\n\r\n const csv = `${header}\\r\\n${rows.join('\\r\\n')}`;\r\n const blob = new Blob([csv], { type: 'text/csv' });\r\n\r\n saveAs(blob, `${this.fileName}.csv`);\r\n }\r\n\r\n private exportXlsx(columns: InvolveExportColumn[], data: T[]) {\r\n const workbook = xlsx.utils.book_new();\r\n\r\n const worksheets = this.createWorksheets(columns, data, this.fileName);\r\n\r\n if (this.includeNestedOnly) {\r\n worksheets.shift();\r\n }\r\n\r\n for (let ws of worksheets){\r\n\r\n let name = ws.name.slice(0, 30);\r\n\r\n const dupes = worksheets.filter(sheet => sheet.name === ws.name);\r\n if(dupes.indexOf(ws) !== 0)\r\n name = name + '(' + dupes.indexOf(ws) + ')';\r\n\r\n xlsx.utils.book_append_sheet(workbook, ws.worksheet, name);\r\n }\r\n\r\n xlsx.writeFile(workbook, `${this.fileName}.xlsx`);\r\n }\r\n\r\n private createWorksheets(columns: InvolveExportColumn[], data: T[], name: string, parent?: any) {\r\n let worksheets: {\r\n name: string,\r\n worksheet: xlsx.Sheet\r\n }[] = [];\r\n\r\n const rows = data.map(row => columns.reduce((acc, column) => {\r\n let value: any = this.getValue(row, column, parent);\r\n\r\n if (column.columns) {\r\n if (Array.isArray(value)) {\r\n let name: string;\r\n let nameValue = row[column.header as keyof T];\r\n nameValue ? name = nameValue.toString() : name = column.header.toString();\r\n worksheets = worksheets.concat(this.createWorksheets(column.columns, value, name, row));\r\n } else {\r\n console.warn(`Attempted to generate worksheet from non-array value.`);\r\n }\r\n } else {\r\n\r\n if (value === undefined || value === null) {\r\n value = { t: 's', v: '' };\r\n } else if (value instanceof Date || (typeof value === 'string' && moment(value, moment.ISO_8601).isValid())) {\r\n value = { t: 'd', v: moment(value, moment.ISO_8601).toDate().toLocaleString(), z: 'mm/dd/yyyy hh:mm:ss AM/PM' };\r\n } else {\r\n switch (typeof(value)) {\r\n case 'bigint':\r\n case 'number': value = { t: 'n', v: value }; break;\r\n case 'string':\r\n value = { t: 's', v: value };\r\n\r\n if (value.v.length > 32767)\r\n value.v = value.v.slice(0, 32767 - 15) + '***TRUNCATED***';\r\n\r\n break;\r\n\r\n case 'object':\r\n value = { t: 's', v: JSON.stringify(value) };\r\n\r\n if (value.v.length > 32767)\r\n value.v = value.v.slice(0, 32767 - 15) + '***TRUNCATED***';\r\n\r\n break;\r\n\r\n case 'boolean': value = { t: 's', v: value ? 'true' : 'false' }; break;\r\n default: value = { t: 's', v: '' }; break;\r\n }\r\n }\r\n\r\n acc[column.header] = value;\r\n }\r\n\r\n return acc;\r\n }, {} as any));\r\n\r\n const worksheet = xlsx.utils.json_to_sheet(rows);\r\n worksheets.unshift({ name, worksheet });\r\n\r\n return worksheets;\r\n }\r\n\r\n private getValue(row: T, column: InvolveExportColumn, parent?: any) {\r\n return column.accessor\r\n ? column.accessor(row, parent)\r\n : row[column.key as keyof T]\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
    \r\n
  • 1\" class=\"flex align-center bb pointer\">\r\n \r\n \r\n \r\n {{dashboard.name}}\r\n \r\n
  • \r\n \r\n
  • \r\n \r\n \r\n {{tile.name}}\r\n \r\n
  • \r\n
  • \r\n \r\n \r\n {{(getTileTooltip(subtile.ToolTipId) | async)?.ToolTipText ||\r\n getTile(subtile.TilePermissionId).name}}\r\n \r\n
  • \r\n
    \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit, Input, OnChanges, ChangeDetectorRef, NgZone } from '@angular/core';\r\nimport { Params } from '@angular/router';\r\n\r\nimport { BehaviorSubject, combineLatest, Subject } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\n\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { Tile, TileNavigationMapping } from '@rfv/modules/core/models';\r\nimport { Tiles } from '@rfv/modules/core/enums';\r\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: 'involve-feature-bar',\r\n templateUrl: 'feature-bar.component.html',\r\n styleUrls: ['feature-bar.component.scss']\r\n})\r\nexport class InvolveFeatureBarComponent {\r\n public static activeId: number = null; // prevent popups from showing on multiple components if the mouse is moving quickly\r\n\r\n @Input()\r\n public get assetTypeId() { return this._assetTypeId$.value; }\r\n public set assetTypeId(value: number) { this._assetTypeId$.next(value); }\r\n\r\n private _assetTypeId$ = new BehaviorSubject(null);\r\n private _destroyed$ = new Subject();\r\n\r\n @Input()\r\n public id: number;\r\n\r\n @Input()\r\n public queryParams: Params;\r\n\r\n public tiles: Tile[];\r\n\r\n public get activeId() { return InvolveFeatureBarComponent.activeId; }\r\n\r\n public hoverId: number = null;\r\n\r\n public hasMouse = false;\r\n public timeout: NodeJS.Timeout = null;\r\n\r\n public overlayPositions = [\r\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),\r\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }),\r\n new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }),\r\n new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' })\r\n ];\r\n\r\n public dashboards$ = combineLatest([\r\n this._store$.select(fromCore.AssetTypes.getDashboards),\r\n this._assetTypeId$\r\n ]).pipe(\r\n map(([getDashboards, assetTypeId]) => getDashboards(assetTypeId))\r\n );\r\n\r\n public constructor(\r\n private _store$: Store\r\n ) { }\r\n\r\n public go(dashboardId: number) {\r\n this._store$.pipe(\r\n select(fromCore.AssetTypes.getEntities),\r\n take(1),\r\n map(assetTypes => fromRoot.Router.Go([\r\n 'dashboard',\r\n dashboardId,\r\n assetTypes[this._assetTypeId$.value].isSitemapGroupType ? 'sitemapGroup' : 'asset',\r\n this.id\r\n ], { queryParams: this.queryParams }))\r\n ).subscribe(this._store$);\r\n }\r\n\r\n goToScreen(dashboardId: number, tile?: Tile) {\r\n if (tile && tile.name === \"Report History\" \r\n || tile.name === \"Request Report\"\r\n || tile.name === \"Scheduled Reports\"){\r\n return this.go(dashboardId);\r\n }\r\n\r\n this._store$.pipe(\r\n select(fromCore.AssetTypes.getEntities),\r\n take(1),\r\n map(assetTypes => {\r\n if (tile && tile.hasFullMode) {\r\n // go to maximized tile\r\n switch (tile.version) {\r\n case 2:\r\n return fromRoot.Router.Go(\r\n ['dashboard', dashboardId, assetTypes[this._assetTypeId$.value].isSitemapGroupType ? 'sitemapGroup' : 'asset', this.id], { queryParams: { tileId: tile.id } }\r\n );\r\n \r\n default:\r\n case 1:\r\n let tileId: number;\r\n switch (tile.id) {\r\n case Tiles.priorityData: tileId = Tiles.unitData; break;// special case task #14586\r\n default: tileId = tile.id;\r\n }\r\n return fromRoot.Router.Go(\r\n ['dashboard', dashboardId, assetTypes[this._assetTypeId$.value].isSitemapGroupType ? 'sitemapGroup' : 'asset', this.id, 'fullscreen', tileId]\r\n );\r\n }\r\n \r\n }\r\n })\r\n ).subscribe(this._store$);\r\n }\r\n\r\n filterTileNavigation(tileNavigationMappings: TileNavigationMapping[], tiles: Tile[]) {\r\n if (!tileNavigationMappings.length && tiles.length)\r\n return [];\r\n\r\n return tileNavigationMappings.filter(subtile => {\r\n tiles.find(tile => tile.permissions.find(permission => permission.Id === subtile.TilePermissionId))\r\n })\r\n }\r\n\r\n getTileTooltip(toolTipId: number) {\r\n return this._store$.select(fromCore.ToolTips.getToolTipById(toolTipId));\r\n }\r\n\r\n getTile(tilePermissionId: number) {//get tile from tilepermission id\r\n return this.tiles.find(tile => tile.permissions.some(perm => perm.Id === tilePermissionId));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n \r\n onMouseHover(dashboardId: number) {\r\n InvolveFeatureBarComponent.activeId = this.id;\r\n\r\n this.hasMouse = true;\r\n\r\n if (this.hoverId) {\r\n this.hoverId = dashboardId; // no delay when moving from icon to icon\r\n } else {\r\n setTimeout(() => {\r\n this.hoverId = dashboardId;\r\n }, 500); // half second delay on first hover\r\n }\r\n }\r\n\r\n\r\n onMouseLeave() {\r\n this.hasMouse = false;\r\n\r\n if (this.timeout)\r\n clearTimeout(this.timeout);\r\n\r\n // prevent closing the popup when moving between icons/overlay\r\n this.timeout = setTimeout(() => {\r\n if (!this.hasMouse)\r\n this.hoverId = null;\r\n }, 250);\r\n }\r\n}","\r\n\r\n\r\n \r\n","import { Component, InjectionToken, Input, Optional } from '@angular/core';\r\nimport { InvolveFormFieldComponent } from './form-field.component';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nexport const INVOLVE_ERROR = new InjectionToken('InvolveError');\r\n\r\nlet __id = 0;\r\n\r\n@Component({\r\n selector: 'involve-error',\r\n templateUrl: 'error.component.html',\r\n styleUrls: [ 'error.component.scss' ],\r\n host: {\r\n '[attr.id]': 'id'\r\n },\r\n providers: [\r\n { provide: INVOLVE_ERROR, useExisting: InvolveErrorComponent },\r\n { provide: DATA_CY_TYPE, useValue: 'error' }\r\n ]\r\n})\r\nexport class InvolveErrorComponent {\r\n @Input()\r\n public id: string = `involve-error-${__id++}`\r\n\r\n @Input()\r\n public showIcon: boolean = true;\r\n\r\n @Input()\r\n public iconName: string = 'troubleshoot';\r\n\r\n constructor(@Optional() public formField: InvolveFormFieldComponent) {}\r\n}\r\n","import { NgControl } from '@angular/forms';\r\n\r\nimport { Observable } from 'rxjs';\r\nexport abstract class InvolveFormFieldControl {\r\n public value: T | null;\r\n\r\n public readonly id: string;\r\n public readonly control: NgControl | null;\r\n \r\n public readonly required: boolean | string;\r\n public readonly disabled: boolean | string;\r\n\r\n public abstract onContainerClick?(event: MouseEvent): void;\r\n\r\n public readonly stateChanges?: Observable;\r\n}","
\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n","import { ChangeDetectorRef, Component, ContentChild, ContentChildren, InjectionToken, Input, Optional, QueryList, Self } from '@angular/core';\r\n\r\nimport { startWith } from 'rxjs/operators';\r\n\r\nimport { InvolveErrorComponent, INVOLVE_ERROR } from './error.component';\r\n\r\nimport { InvolvePrefixDirective } from './prefix.directive';\r\nimport { InvolveSuffixDirective } from './suffix.directive';\r\n\r\nimport { InvolveFormFieldControl } from './form-field-control';\r\nimport { InvolveHintDirective } from './hint.directive';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n/**\r\n * Involve form field wrapper component.\r\n * \r\n * ```\r\n *
\r\n * \r\n * My Control\r\n * \r\n * \r\n * {{ input.length }}/30\r\n * \r\n * This field is required.\r\n * \r\n * \r\n *
\r\n * ```\r\n */\r\n\r\nexport const INVOLVE_FORM_FIELD = new InjectionToken('InvolveFormField');\r\n\r\n@Component({\r\n selector: 'involve-form-field',\r\n exportAs: 'involveFormField',\r\n templateUrl: 'form-field.component.html',\r\n styleUrls: ['form-field.component.scss'],\r\n providers: [\r\n { provide: INVOLVE_FORM_FIELD, useExisting: InvolveFormFieldComponent },\r\n { provide: DATA_CY_TYPE, useValue: 'field' }\r\n ]\r\n})\r\nexport class InvolveFormFieldComponent {\r\n public readonly labelId = `involve-form-field-label-${__id++}`;\r\n\r\n @Input()\r\n public subscript = true;\r\n\r\n @Input()\r\n public hideLabel = false;\r\n\r\n @ContentChild(InvolveFormFieldControl, { static: true })\r\n private _controlStatic: InvolveFormFieldControl;\r\n\r\n @ContentChild(InvolveFormFieldControl, { static: false })\r\n private _controlNonStatic: InvolveFormFieldControl;\r\n\r\n @ContentChildren(InvolveErrorComponent, { descendants: true })\r\n private _errorChildren: QueryList;\r\n\r\n @ContentChildren(InvolveHintDirective, { descendants: true })\r\n private _hintChildren: QueryList;\r\n\r\n @ContentChildren(InvolvePrefixDirective, { descendants: true })\r\n private _prefixChildren: QueryList;\r\n\r\n @ContentChildren(InvolvePrefixDirective, { descendants: true })\r\n private _suffixChildren: QueryList;\r\n\r\n public get control() {\r\n return this._controlNonStatic || this._controlStatic;\r\n }\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n public hasPrefixChildren() {\r\n return this._prefixChildren && this._prefixChildren.length > 0;\r\n }\r\n\r\n public hasSuffixChildren() {\r\n return this._suffixChildren && this._suffixChildren.length > 0;\r\n }\r\n\r\n public getDisplayedMessages(subscript: boolean): 'error' | 'hint' | null {\r\n if (subscript !== this.subscript)\r\n return null;\r\n\r\n return this._errorChildren?.length > 0 ? 'error' : this._hintChildren?.length > 0 ? 'hint' : null;\r\n }\r\n\r\n public ngAfterContentInit() {\r\n this.control?.stateChanges?.pipe(\r\n startWith(null)\r\n ).subscribe(() => {\r\n this._cdr.markForCheck();\r\n })\r\n }\r\n}","import { Directive, Input } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\nlet __id = 0;\r\n\r\n@Directive({\r\n selector: 'involve-hint',\r\n host: {\r\n 'class': 'gray',\r\n '[class.right]': 'align === \"end\"',\r\n '[attr.id]': 'id',\r\n\r\n // remove align attribute\r\n '[attr.align]': 'undefined'\r\n },\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'hint' }\r\n ]\r\n})\r\nexport class InvolveHintDirective {\r\n @Input()\r\n public align: 'start' | 'end' = 'start';\r\n\r\n @Input()\r\n public id: string = `involve-hint-${__id++}`;\r\n}","import { Directive } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Directive({\r\n selector: 'involve-label',\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'label' }\r\n ]\r\n})\r\nexport class InvolveLabelDirective { }","import { Directive } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Directive({\r\n selector: '[involvePrefix]',\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'prefix' }\r\n ]\r\n})\r\nexport class InvolvePrefixDirective { }","import { Directive } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Directive({\r\n selector: '[involveSuffix]',\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'suffix' }\r\n ]\r\n})\r\nexport class InvolveSuffixDirective { }","\r\n","import * as highcharts from 'highcharts';\r\n\r\nimport { AfterViewInit, Component, EventEmitter, Input, NgZone, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n\r\n@Component({ \r\n selector: 'involve-highchart', \r\n templateUrl: 'template.html', \r\n styleUrls: ['template.scss'] \r\n})\r\nexport class InvolveHighChartComponent implements OnChanges, OnDestroy, AfterViewInit {\r\n public readonly highcharts: typeof highcharts = highcharts;\r\n\r\n public viewInit: boolean = false;\r\n\r\n @Output()\r\n public load = new EventEmitter();\r\n\r\n // options common to all charts\r\n private readonly _baseOptions: Highcharts.Options = {\r\n chart: {\r\n backgroundColor: 'transparent',\r\n style: {\r\n fontFamily: 'Roboto'\r\n },\r\n reflow: true\r\n },\r\n accessibility: {\r\n enabled: false\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n credits: {\r\n enabled: false\r\n }\r\n }\r\n\r\n // options set by derived classes\r\n protected get _options(): Highcharts.Options {\r\n return {};\r\n };\r\n\r\n // options set by the consumer\r\n @Input()\r\n public options: Highcharts.Options;\r\n\r\n private _chart: Highcharts.Chart;\r\n public get chart() { return this._chart; }\r\n\r\n private readonly _options$ = new BehaviorSubject(null);\r\n public readonly options$ = this._options$.asObservable().pipe(\r\n filter(options => options.series ? options.series.length > 0 : false)\r\n );\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n protected _ngZone: NgZone\r\n ) { }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n this._options$.next(this.mergeDeep({}, this._baseOptions, this._options, this.options));\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this.viewInit = true;\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._options$.complete();\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public readonly onChartCreated = ((chart: Highcharts.Chart) => {\r\n this._ngZone.run(() => {\r\n this._chart = chart;\r\n this.load.emit();\r\n });\r\n }).bind(this);\r\n\r\n // not using lodash on purpose (to be phased out)\r\n private mergeDeep(target: Highcharts.Options, ...sources: Highcharts.Options[]): Highcharts.Options {\r\n if (!sources.length)\r\n return target;\r\n\r\n const source = sources.shift();\r\n\r\n if (this.isObject(target) && this.isObject(source)) {\r\n for (const key in source) {\r\n if (this.isObject(source[key]) && source[key] !== this) {\r\n if (!target[key])\r\n Object.assign(target, { [key] : {} });\r\n\r\n this.mergeDeep(target[key], source[key]);\r\n } else {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return this.mergeDeep(target, ...sources);\r\n }\r\n\r\n private isObject(value: any) {\r\n return value && typeof value === 'object' && !Array.isArray(value);\r\n }\r\n}\r\n\r\n","\r\n \r\n\r\n\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map, filter, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { IconService } from './icon.service';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Component({\r\n selector: 'involve-icon',\r\n templateUrl: 'icon.component.html',\r\n host: {\r\n '[style.display]': '\"flex\"',\r\n '[style.pointer-events]': 'disabled ? \"none\" : \"auto\"'\r\n },\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'icon' } ]\r\n})\r\nexport class InvolveIconComponent {\r\n @Input()\r\n public name: string = null;\r\n\r\n @Input()\r\n public code: string = null;\r\n\r\n @Input()\r\n public fillColor: string = null;\r\n\r\n @Input()\r\n public set color (value: string) {\r\n this._color = value;\r\n }\r\n public get color() {\r\n return this.disabled ? 'fill-gray' : this._color;\r\n }\r\n \r\n private _color = 'fill-blue-yellow';\r\n \r\n\r\n @Input()\r\n public svgClass: string = '';\r\n\r\n @Input()\r\n public disabled?: Boolean;\r\n\r\n @Input()\r\n public get size(): number { return this._size; }\r\n public set size(value: number) {\r\n // only 0-30 supported in the involve CSS\r\n this._size = value < 0 ? 0 : value > 30 ? 30 : value % 1 === 0.5 ? value : Math.trunc(value);\r\n }\r\n\r\n public constructor(\r\n private _iconService: IconService\r\n ) {}\r\n\r\n protected _size: number = 1.5;\r\n\r\n public get sizeClasses() {\r\n return `w-${this.size} h-${this.size}`;\r\n }\r\n\r\n public get iconPath$(): Observable {\r\n return this._iconService.baseUrl$.pipe(\r\n filter(baseUrl => !!baseUrl),\r\n withLatestFrom(this._iconService.getIconByCode(this.code)),\r\n map(([baseUrl, icon]) => icon ? `${baseUrl}#${icon.IconName}` : `${baseUrl}#${this.name}`)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { InvolveIconComponent } from './icon.component'\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveIconComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n InvolveIconComponent\r\n ]\r\n})\r\nexport class InvolveIconModule { }","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { map, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nlet __t = new Date().getTime();\r\n\r\nimport { environment } from '@environments/environment';\r\n\r\n/**\r\n * Service to prevent loading the icon sprite svg (all icons) for each icon render.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IconService {\r\n public readonly baseUrl$ = new BehaviorSubject(null);\r\n\r\n public iconList: string[];\r\n\r\n public constructor(\r\n private _http: HttpClient,\r\n private _store: Store\r\n ) {\r\n this._http.get(`assets/sprites/sprite.svg?t=${__t}`, { responseType: 'blob' }).subscribe(blob => {\r\n \r\n if (environment.iconPlayground) {\r\n blob.text().then(svg => {\r\n const id = /id=\"([a-z-_]+)\"/ig;\r\n\r\n this.iconList = [];\r\n\r\n let matches: RegExpExecArray;\r\n while (matches = id.exec(svg))\r\n this.iconList.push(matches[1]);\r\n\r\n });\r\n }\r\n\r\n this.baseUrl$.next(URL.createObjectURL(blob));\r\n });\r\n }\r\n\r\n public getIconByCode(code: string) {\r\n return this._store.pipe(\r\n select(fromCore.Icons.getByCode, { code }),\r\n withLatestFrom(this._store.select(fromCore.UserSession.getSessionThemeId)),\r\n map(([icon, themeId]) => icon ? ({\r\n ...icon,\r\n IconName: icon.IconName.replace(/\\[THEME\\]/g, (() => {\r\n switch (themeId) {\r\n case 1:\r\n return 'dark';\r\n default:\r\n case 2:\r\n return 'light';\r\n }\r\n })())\r\n }) : null)\r\n );\r\n }\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\nexport const INVOLVE_INPUT_VALUE_ACCESSOR = new InjectionToken<{ value: any }>('INVOLVE_INPUT_VALUE_ACCESSOR');","import { Directive, ElementRef, Inject, Input, Optional, Self } from '@angular/core';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { NgControl } from '@angular/forms';\r\n\r\nimport { InvolveFormFieldControl } from '@rfv/modules/involve/form-field/form-field-control';\r\nimport { INVOLVE_INPUT_VALUE_ACCESSOR } from './input-value-accessor';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n/**\r\n * Involve input directive.\r\n */\r\n@Directive({\r\n selector: `input[involveInput], textarea[involveInput]`,\r\n exportAs: 'involveInput',\r\n host: {\r\n 'class': 'input',\r\n '[attr.id]': 'id',\r\n '[required]': 'required',\r\n '[disabled]': 'disabled'\r\n },\r\n providers: [\r\n { provide: InvolveFormFieldControl, useExisting: InvolveInputDirective },\r\n { provide: DATA_CY_TYPE, useValue: 'input' }\r\n ]\r\n})\r\nexport class InvolveInputDirective implements InvolveFormFieldControl {\r\n private _uid = `involve-input-${__id++}`;\r\n\r\n private _inputValueAccessor: any;\r\n\r\n @Input()\r\n public get id() { return this._id; }\r\n public set id(value: string) { this._id = value || this._uid; }\r\n protected _id: string;\r\n\r\n @Input()\r\n public get value() { return this._inputValueAccessor.value; }\r\n public set value(value: string) {\r\n if (value !== this.value) {\r\n this._inputValueAccessor.value = value;\r\n }\r\n }\r\n\r\n @Input()\r\n public get disabled(): boolean {\r\n if (this.control && this.control.disabled !== null)\r\n return this.control.disabled;\r\n \r\n return this._disabled;\r\n }\r\n public set disabled(value: boolean) {\r\n this._disabled = !!value;\r\n }\r\n protected _disabled = false;\r\n\r\n @Input()\r\n public get required(): boolean | string { return this._required; }\r\n public set required(value: boolean | string) { this._required = coerceBooleanProperty(value); }\r\n protected _required = false;\r\n\r\n public constructor(\r\n protected _elementRef: ElementRef,\r\n\r\n @Optional() @Self()\r\n public control: NgControl,\r\n\r\n @Optional() @Self() @Inject(INVOLVE_INPUT_VALUE_ACCESSOR)\r\n inputValueAccessor: any\r\n ) {\r\n this._inputValueAccessor = inputValueAccessor || this._elementRef.nativeElement;\r\n\r\n // set default id if not provided\r\n this.id = this.id;\r\n }\r\n}","import { NgModule } from '@angular/core';\r\n\r\nimport { InvolveInputDirective } from './input.directive'\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveInputDirective\r\n ],\r\n exports: [\r\n InvolveInputDirective\r\n ]\r\n})\r\nexport class InvolveInputModule { }","\r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n Involve Playground\r\n Dark Mode\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n

Inputs

\r\n
\r\n \r\n Basic Input\r\n \r\n \r\n \r\n Required Input\r\n \r\n \r\n This field is required!\r\n \r\n \r\n \r\n Max Length\r\n \r\n {{ rcwml.value.length }} / 10\r\n \r\n Field is too long!\r\n \r\n \r\n \r\n Number 0 <= n <=5\r\n \r\n \r\n Not a valid number!\r\n \r\n \r\n Enter a number >= 0\r\n \r\n \r\n Enter a number <= 5\r\n \r\n \r\n \r\n Disabled Input\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n

Checkboxes

\r\n
\r\n Select All\r\n One\r\n Two\r\n Three\r\n
\r\n
\r\n Disabled\r\n Inverted (I'm {{ invertedCheckbox }})\r\n
\r\n \r\n
\r\n \r\n

Select

\r\n
\r\n Disabled?\r\n Searchable?\r\n Clearable?\r\n
\r\n
\r\n Multi Select?\r\n \r\n Pill\r\n Checkbox\r\n \r\n
\r\n
\r\n \r\n Standard Dropdown\r\n \r\n {{ option.name }}\r\n \r\n \r\n This field is required!\r\n \r\n Raw Value: {{ form.get('dropdown1').value | json }}\r\n \r\n \r\n Virtual Scroll Dropdown\r\n \r\n {{ option.name }}\r\n \r\n \r\n This field is required!\r\n \r\n Raw Value: {{ form.get('dropdown2').value | json }}\r\n \r\n
\r\n\r\n
\r\n \r\n

Toggles

\r\n
\r\n Toggle Switch\r\n Disabled Switch\r\n \r\n \r\n Option 1\r\n Option 2\r\n Option 3\r\n \r\n
\r\n
\r\n\r\n
\r\n

More Inputs

\r\n\r\n
\r\n \r\n Text Area\r\n \r\n {{ textarea.value.length }} / 10\r\n \r\n Field is too long!\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n I have hints\r\n \r\n \r\n I'm required and show validation errors instead of hints!\r\n \r\n \r\n I'm a hint with HTML tags!\r\n \r\n \r\n Demo Customer  | \r\n RFV Testing Customer  | \r\n Marine Dev Customer  | \r\n Client Services\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n Prefix & Suffix\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n

Equation Editor

\r\n
\r\n \r\n \r\n \r\n This field is required!\r\n \r\n \r\n \r\n This field is required!\r\n \r\n \r\n Missing Indexes {{form.errors?.missingIndexes}} \r\n \r\n \r\n {{ equationData | json }}\r\n \r\n Summary:
\r\n
\r\n\r\n
\r\n \r\n

Buttons

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n

Badge

\r\n
\r\n \r\n 11\r\n 22\r\n 33\r\n \r\n \r\n 11\r\n 22\r\n 33\r\n \r\n \r\n 11\r\n 22\r\n 33\r\n \r\n
\r\n

Range Badge

\r\n
\r\n
\r\n \r\n
\r\n \r\n '\" [value]=\"0\" [color]=\"'green'\" >{{badgeRangeValue}}\r\n {{badgeRangeValue}}\r\n {{badgeRangeValue}}\r\n \r\n
\r\n
\r\n\r\n
\r\n

Color Picker

\r\n Alpha Channel?\r\n
\r\n \r\n
\r\n \r\n HTML Value: {{ color | json }}\r\n
\r\n
\r\n \r\n JSON Value: {{ colorJson | json }}\r\n
\r\n
\r\n\r\n

Progress Bars

\r\n \r\n \r\n \r\n
\r\n \r\n

Feature Bar

\r\n \r\n
\r\n\r\n

Menus

\r\n
\r\n \r\n \r\n Option 1\r\n Option 2\r\n Option 3\r\n \r\n \r\n \r\n Menu\r\n Option 1\r\n Option 2\r\n Option 3\r\n \r\n
\r\n\r\n
\r\n
\r\n

Accordions

\r\n
\r\n
\r\n \r\n \r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Group\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Group\r\n \r\n Group {{ group.groupKey }} ({{ group.rows.length }} Items)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Id\r\n \r\n \r\n {{ row.id }} ({{ row.nested.length }})\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Group\r\n \r\n \r\n \r\n \r\n {{ row.group }}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Icon \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Name \r\n \r\n \r\n \r\n \r\n {{ row.name }}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Date\r\n \r\n \r\n \r\n \r\n {{ row.date | rfvDate }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Value\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n Select\r\n \r\n \r\n \r\n \r\n \r\n {{ option.name }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n No data found\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Nested Id\r\n \r\n \r\n {{ row.id }}\r\n \r\n \r\n \r\n \r\n \r\n Nested Name\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Nested Value\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Header 1\r\n \r\n \r\n Details\r\n \r\n \r\n \r\n \r\n \r\n Header 2\r\n \r\n \r\n \r\n Header 3\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n No nested data found\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Deep Nested Id\r\n \r\n \r\n {{ row.id }}\r\n \r\n \r\n \r\n \r\n Deep Nested Name\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Deep Nested Value\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n No deep nested data found\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n {{ icon }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n

I don't scroll

\r\n
\r\n
\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla sapien sed erat ultrices egestas. Vivamus volutpat, dolor quis suscipit ultricies, justo libero venenatis urna, vel feugiat augue nisi vel nibh. Mauris ligula quam, consectetur in malesuada ac, egestas ac metus. Nulla sed nunc at risus egestas aliquam. Vivamus nec semper felis, ac varius justo. Pellentesque tempor eros sed urna dignissim, non eleifend dolor scelerisque. Integer felis est, varius non tempus at, mollis a nibh. Duis eleifend pulvinar urna, in vulputate tellus hendrerit quis. Mauris porttitor eleifend augue, dictum mattis sem scelerisque quis. Maecenas eu fermentum nisi. Suspendisse erat sem, ultrices vitae erat eu, cursus blandit nibh. Integer quis dui neque. Cras scelerisque lorem non varius feugiat. Donec condimentum ornare sodales.

\r\n

Donec sollicitudin purus ut ex egestas, vitae gravida orci commodo. In tristique tempor fermentum. Sed bibendum facilisis ligula ac condimentum. Integer laoreet eget augue sit amet condimentum. Fusce blandit dictum sem at sodales. Donec sed elit at elit interdum condimentum vel ac metus. Mauris augue enim, fringilla nec bibendum vel, malesuada ac lorem. Fusce lacinia consectetur mauris, eget tristique ante vestibulum nec.

\r\n

Integer finibus leo orci, eget efficitur eros euismod nec. Suspendisse id diam sed magna imperdiet lacinia. Etiam rhoncus vestibulum mattis. Phasellus ullamcorper tincidunt ipsum, dictum condimentum eros ultricies nec. Praesent vel lectus gravida sem semper suscipit at et neque. Sed finibus ex sed porta congue. Ut porttitor purus sed dignissim posuere. Praesent scelerisque ullamcorper mi, et scelerisque sapien congue nec. Fusce fringilla enim sit amet quam volutpat tincidunt. In condimentum enim risus, sit amet dapibus justo posuere sit amet. Aenean elementum, dolor non porta egestas, nibh nibh lacinia leo, luctus ultricies eros odio a mi. Vivamus dolor diam, semper eu placerat ac, efficitur sed leo. Sed est sapien, semper sit amet mi nec, pharetra cursus quam. Sed eu elit turpis. Curabitur quis ullamcorper erat.

\r\n
\r\n
\r\n
\r\n
\r\n

I scroll but cutoff the bottom

\r\n
\r\n
\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla sapien sed erat ultrices egestas. Vivamus volutpat, dolor quis suscipit ultricies, justo libero venenatis urna, vel feugiat augue nisi vel nibh. Mauris ligula quam, consectetur in malesuada ac, egestas ac metus. Nulla sed nunc at risus egestas aliquam. Vivamus nec semper felis, ac varius justo. Pellentesque tempor eros sed urna dignissim, non eleifend dolor scelerisque. Integer felis est, varius non tempus at, mollis a nibh. Duis eleifend pulvinar urna, in vulputate tellus hendrerit quis. Mauris porttitor eleifend augue, dictum mattis sem scelerisque quis. Maecenas eu fermentum nisi. Suspendisse erat sem, ultrices vitae erat eu, cursus blandit nibh. Integer quis dui neque. Cras scelerisque lorem non varius feugiat. Donec condimentum ornare sodales.

\r\n

Donec sollicitudin purus ut ex egestas, vitae gravida orci commodo. In tristique tempor fermentum. Sed bibendum facilisis ligula ac condimentum. Integer laoreet eget augue sit amet condimentum. Fusce blandit dictum sem at sodales. Donec sed elit at elit interdum condimentum vel ac metus. Mauris augue enim, fringilla nec bibendum vel, malesuada ac lorem. Fusce lacinia consectetur mauris, eget tristique ante vestibulum nec.

\r\n

Integer finibus leo orci, eget efficitur eros euismod nec. Suspendisse id diam sed magna imperdiet lacinia. Etiam rhoncus vestibulum mattis. Phasellus ullamcorper tincidunt ipsum, dictum condimentum eros ultricies nec. Praesent vel lectus gravida sem semper suscipit at et neque. Sed finibus ex sed porta congue. Ut porttitor purus sed dignissim posuere. Praesent scelerisque ullamcorper mi, et scelerisque sapien congue nec. Fusce fringilla enim sit amet quam volutpat tincidunt. In condimentum enim risus, sit amet dapibus justo posuere sit amet. Aenean elementum, dolor non porta egestas, nibh nibh lacinia leo, luctus ultricies eros odio a mi. Vivamus dolor diam, semper eu placerat ac, efficitur sed leo. Sed est sapien, semper sit amet mi nec, pharetra cursus quam. Sed eu elit turpis. Curabitur quis ullamcorper erat.

\r\n
\r\n
\r\n
\r\n
\r\n

I scroll correctly

\r\n
\r\n
\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla sapien sed erat ultrices egestas. Vivamus volutpat, dolor quis suscipit ultricies, justo libero venenatis urna, vel feugiat augue nisi vel nibh. Mauris ligula quam, consectetur in malesuada ac, egestas ac metus. Nulla sed nunc at risus egestas aliquam. Vivamus nec semper felis, ac varius justo. Pellentesque tempor eros sed urna dignissim, non eleifend dolor scelerisque. Integer felis est, varius non tempus at, mollis a nibh. Duis eleifend pulvinar urna, in vulputate tellus hendrerit quis. Mauris porttitor eleifend augue, dictum mattis sem scelerisque quis. Maecenas eu fermentum nisi. Suspendisse erat sem, ultrices vitae erat eu, cursus blandit nibh. Integer quis dui neque. Cras scelerisque lorem non varius feugiat. Donec condimentum ornare sodales.

\r\n

Donec sollicitudin purus ut ex egestas, vitae gravida orci commodo. In tristique tempor fermentum. Sed bibendum facilisis ligula ac condimentum. Integer laoreet eget augue sit amet condimentum. Fusce blandit dictum sem at sodales. Donec sed elit at elit interdum condimentum vel ac metus. Mauris augue enim, fringilla nec bibendum vel, malesuada ac lorem. Fusce lacinia consectetur mauris, eget tristique ante vestibulum nec.

\r\n

Integer finibus leo orci, eget efficitur eros euismod nec. Suspendisse id diam sed magna imperdiet lacinia. Etiam rhoncus vestibulum mattis. Phasellus ullamcorper tincidunt ipsum, dictum condimentum eros ultricies nec. Praesent vel lectus gravida sem semper suscipit at et neque. Sed finibus ex sed porta congue. Ut porttitor purus sed dignissim posuere. Praesent scelerisque ullamcorper mi, et scelerisque sapien congue nec. Fusce fringilla enim sit amet quam volutpat tincidunt. In condimentum enim risus, sit amet dapibus justo posuere sit amet. Aenean elementum, dolor non porta egestas, nibh nibh lacinia leo, luctus ultricies eros odio a mi. Vivamus dolor diam, semper eu placerat ac, efficitur sed leo. Sed est sapien, semper sit amet mi nec, pharetra cursus quam. Sed eu elit turpis. Curabitur quis ullamcorper erat.

\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n

Wizard & Rating

\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n Maintenance Type\r\n \r\n \r\n Top End\r\n \r\n
\r\n
\r\n \r\n Date\r\n \r\n \r\n 05/21/1997\r\n \r\n
\r\n
\r\n
\r\n Total Progress\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Category {{categoryIndex}}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Step {{stepIndex}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n

Turbocharger

\r\n \r\n \r\n \r\n {{index + 1}}. Turbocharger Performance\r\n Using IMAT/exhaust sensors and atmospheric/boost press sensors (If\r\n automated, we explain what is happening)\r\n Severity\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n item {{option}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n Drawer Header\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Drawer Footer\r\n \r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\n\r\nimport { InvolvePlaygroundComponent } from './playground.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: 'involve',\r\n pathMatch: 'full',\r\n component: InvolvePlaygroundComponent\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule.forChild(routes)\r\n ]\r\n})\r\nexport class InvolveRouterModule {}","\r\nimport { GridsterConfig, DisplayGrid, CompactType, GridType } from 'angular-gridster2';\r\nimport { Component, ChangeDetectorRef, OnInit } from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\n\r\nimport moment from \"moment\";\r\nimport { InvolveDataSource } from './table';\r\n\r\nimport { InvolveExportColumn } from './export/export.component';\r\nimport { IconService } from './icon/icon.service';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { IColor } from './color-picker/color';\r\n\r\nimport { Tiles } from '../core/enums/tiles';\r\nimport { SidebarService } from './side-bar/services/side-bar-service.service';\r\nimport { ITab } from './tab/tab.component';\r\n\r\ninterface IData {\r\n id: string,\r\n color: string,\r\n group?: string,\r\n name: string,\r\n date?: Date,\r\n value: number\r\n icon?: boolean,\r\n order: number;\r\n nested?: IData[]\r\n}\r\n\r\n@Component({\r\n selector: 'involve-playground',\r\n templateUrl: 'playground.component.html',\r\n styleUrls: ['playground.component.scss']\r\n})\r\nexport class InvolvePlaygroundComponent implements OnInit {\r\n public gridsterOptions: GridsterConfig = {\r\n compactType: CompactType.CompactLeftAndUp,\r\n displayGrid: DisplayGrid.None,\r\n // gridType: GridType.Fixed,\r\n\r\n draggable: { enabled: false },\r\n\r\n minCols: 1,\r\n maxCols: 12,\r\n\r\n minRows: 1,\r\n maxRows: 12,\r\n\r\n mobileBreakpoint: 960,\r\n keepFixedHeightInMobile: true,\r\n\r\n outerMargin: false,\r\n\r\n resizable: { enabled: false },\r\n\r\n useTransformPositioning: false\r\n };\r\n\r\n public badgeRangeValue: number = 0;\r\n\r\n public tabs: ITab[] = [\r\n { id: 'formControls', name: 'Form Controls' }, \r\n { id: 'components', name: 'Components' }, \r\n { id: 'table', name: 'Table' }, \r\n { id: 'icons', name: 'Icons' }, \r\n { id: 'flex', name: 'Flex' }\r\n ];\r\n public activeTab: string = 'Form Controls';\r\n\r\n public darkMode$ = this._store.select(fromCore.UserSession.isDarkMode);\r\n\r\n public setDarkMode(value: boolean) {\r\n this._store.dispatch(fromCore.UserSession.SetTheme(value ? 1 : 2));\r\n }\r\n\r\n //\r\n // Buttons\r\n //\r\n\r\n public isLoading: boolean = false;\r\n\r\n public buttonClicked(event) {\r\n console.log('Clicked!', event);\r\n this.isLoading = true;\r\n setTimeout(() => { this.isLoading = false; }, 5000);\r\n }\r\n\r\n //link button\r\n public rfvClick() {\r\n let assetId = 105397;\r\n this._store.dispatch(fromCore.Customers.Switch(1, `/dashboard/10/asset/${assetId}/fullscreen/${Tiles.assetRuntimeMetrics}`, true));\r\n }\r\n\r\n public demoClick() {\r\n let assetId = 42;\r\n this._store.dispatch(fromCore.Customers.Switch(2, `/dashboard/10/asset/${assetId}/fullscreen/${Tiles.assetRuntimeMetrics}`, true));\r\n }\r\n\r\n public marineDevClick() {\r\n let assetId = 1;\r\n this._store.dispatch(fromCore.Customers.Switch(7, `/dashboard/10/asset/${assetId}/fullscreen/${Tiles.unitAlarms}`, true));\r\n }\r\n\r\n public clientServicesClick() {\r\n let sitemapGroupId = 15;\r\n this._store.dispatch(fromCore.Customers.Switch(5, `/dashboard/22/sitemapGroup/${sitemapGroupId}`, true));\r\n\r\n }\r\n\r\n //\r\n // Table data\r\n //\r\n\r\n public colors: string[] = ['blue', 'gold', 'yellow', 'green', 'red', 'orange', 'purple'];\r\n\r\n private _currentDate = moment();\r\n\r\n public data: IData[] =\r\n new Array(1000).fill(null).map((x, i) => ({\r\n id: `${i}`,\r\n color: this.colors[i % this.colors.length],\r\n group: `Group ${1 + Math.round(Math.random() * 20)}`,\r\n name: `Parent Row ${1 + Math.round(Math.random() * 4)}`,\r\n date: this._currentDate.clone().subtract(Math.random() * 30, 'd').toDate(),\r\n icon: (Math.round(Math.random() * 2) % 2 === 1),\r\n value: Math.round(Math.random() * 10) + Number(Math.random().toFixed(3).slice(0, 6)),\r\n order: i,\r\n\r\n // form: this._fb.group({ dropdown: [ null ]}),\r\n nested: new Array(Math.round(Math.random() * 5)).fill(null).map((x, j) => ({\r\n id: `${i + 1}-${j + 1}`,\r\n color: this.colors[i % this.colors.length],\r\n group: `Group ${1 + Math.round(Math.random() * 9)}`,\r\n name: `Nested Row ${1 + Math.round(Math.random() * 2)}`,\r\n // icon: (Math.round(Math.random() * 2) % 2 ===1),\r\n value: Math.round(Math.random() * 10) + Number(Math.random().toFixed(3).slice(0, 6)),\r\n order: j,\r\n\r\n nested: new Array(Math.round(Math.random() * 10)).fill(null).map((x, k) => ({\r\n id: `${i + 1}-${j + 1}-${k + 1}`,\r\n color: this.colors[i % this.colors.length],\r\n // group: `Group ${1 + Math.round(Math.random() * 9)}`,\r\n name: `Deep Nested Row ${1 + Math.round(Math.random() * 2)}`,\r\n icon: (Math.round(Math.random() * 2) % 2 === 1),\r\n value: Math.round(Math.random() * 10) + Number(Math.random().toFixed(3).slice(0, 6)),\r\n order: k\r\n }))\r\n }))\r\n }));\r\n\r\n\r\n public dataSource = new InvolveDataSource(this.data);\r\n\r\n public exportColumns: InvolveExportColumn[] = [\r\n { header: 'ID', key: 'id' },\r\n { header: 'Color', key: 'color' },\r\n { header: 'Group', key: 'group' },\r\n { header: 'Group', key: 'group' },\r\n { header: 'Icon', key: 'icon' },\r\n {\r\n header: 'name', key: 'nested', columns: [\r\n { header: 'ID', key: 'id' },\r\n { header: 'Color', key: 'color' },\r\n { header: 'Group', key: 'group' },\r\n { header: 'Name', key: 'name' },\r\n {\r\n header: 'name', key: 'nested', columns: [\r\n { header: 'ID', key: 'id' },\r\n { header: 'Color', key: 'color' },\r\n { header: 'Group', key: 'group' },\r\n { header: 'Name', key: 'name' }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n\r\n public createNestedDataSource(data: IData) {\r\n return new InvolveDataSource(data.nested);\r\n }\r\n\r\n public selection = new SelectionModel(true, []);\r\n\r\n // public isAllSelected() { return this.selection.selected.length === this.dataSource.filteredRows.length; }\r\n\r\n //\r\n // Form\r\n //\r\n\r\n public form = this._fb.group({\r\n control: [null],\r\n requiredControl: [null, [Validators.required]],\r\n controlWithMaxLength: [null, [Validators.maxLength(10)]],\r\n textAreaControl: [null, [Validators.minLength(1), Validators.maxLength(10)]],\r\n hints: ['Delete my value to see an error instead!', [Validators.required]],\r\n disabledControl: [{ value: `I'm disabled!`, disabled: true }],\r\n numberControl: [0, [Validators.pattern(/^-?[0-9]+(\\.?[0-9]+)?$/), Validators.min(0), Validators.max(5)]],\r\n prefixesAndSuffixes: [null],\r\n textarea: [null],\r\n dropdown1: [null],\r\n dropdown2: [null],\r\n equation: [null],\r\n prefixSuffix: [null],\r\n primaryButtonText: ['Primary Button'],\r\n secondaryButtonText: ['Secondary Button'],\r\n toggleButton: [1]\r\n });\r\n\r\n public equationData = [\r\n {\r\n index: 1,\r\n name: 'Engine Speed',\r\n },\r\n {\r\n index: 2,\r\n name: 'Engine Oil Pressure',\r\n }\r\n ];\r\n\r\n public equationSummary: string;\r\n\r\n //\r\n // Checkboxes\r\n //\r\n\r\n public checkboxes = [false, false, false];\r\n public invertedCheckbox = false;\r\n\r\n public getIndeterminateState() {\r\n return this.checkboxes.every(value => value)\r\n ? true\r\n : this.checkboxes.some(value => value)\r\n ? null\r\n : false;\r\n }\r\n\r\n public updateCheckboxes(value: boolean) {\r\n this.checkboxes = [value, value, value];\r\n }\r\n\r\n //\r\n // Select options\r\n // \r\n\r\n public options = [\r\n { id: 0, name: 'Strawberry' },\r\n { id: 1, name: 'Lime' },\r\n { id: 2, name: 'Apple' },\r\n { id: 3, name: 'Mango' },\r\n { id: 4, name: 'Peach' },\r\n { id: 5, name: 'Grape' },\r\n { id: 6, name: 'Lemon' },\r\n { id: 7, name: 'Orange' },\r\n { id: 8, name: 'Cherry' },\r\n { id: 9, name: 'Dragonfruit' },\r\n { id: 10, name: 'Blueberry' },\r\n { id: 11, name: 'Raspberry' },\r\n { id: 12, name: 'Kiwi' },\r\n { id: 13, name: 'Apricot' },\r\n { id: 14, name: 'Watermelon' },\r\n { id: 15, name: 'Banana' },\r\n { id: 16, name: 'Pineapple' }\r\n ];\r\n\r\n public bigOptions = new Array(1000).fill(null).map((x, i) => ({ name: `Option ${i}`, value: i }));\r\n\r\n public disabled = false;\r\n public autoComplete = true;\r\n public clearable = true;\r\n public multiSelect = false;\r\n public multiSelectMode: 'pill' | 'checkbox' = 'pill';\r\n\r\n public disableDropdowns(disabled: boolean) {\r\n this.disabled = disabled;\r\n if (disabled) {\r\n this.form.get('dropdown1').disable();\r\n this.form.get('dropdown2').disable();\r\n } else {\r\n this.form.get('dropdown1').enable();\r\n this.form.get('dropdown2').enable();\r\n }\r\n }\r\n\r\n public colorAlpha: boolean = true;\r\n public colorJson: string | IColor = { color: '#ff0000', alpha: 1 };\r\n public color: string | IColor = '#ff0000';\r\n\r\n public constructor(\r\n private _fb: FormBuilder,\r\n private _cdr: ChangeDetectorRef,\r\n private _iconService: IconService,\r\n private _store: Store,\r\n private _sidebarService: SidebarService,\r\n ) {\r\n this.form.get('disabledControl').disable();\r\n }\r\n\r\n public iconFilter: string;\r\n public get iconList() {\r\n return this._iconService.iconList.filter(icon => this.iconFilter ? icon.indexOf(this.iconFilter.toLowerCase()) !== -1 : true).reduce((acc, icon, i) => {\r\n if (i % 6 === 0)\r\n acc.push([]);\r\n\r\n acc[acc.length - 1].push(icon);\r\n\r\n return acc;\r\n }, [] as string[][]);\r\n }\r\n\r\n public masterToggle(enabled: boolean) {\r\n if (enabled)\r\n this.data.forEach(data => this.selection.select(data));\r\n else\r\n this.selection.clear();\r\n }\r\n\r\n public get masterChecked() {\r\n return this.data.every(data => this.selection.isSelected(data))\r\n ? true\r\n : this.data.some(data => this.selection.isSelected(data))\r\n ? null\r\n : false;\r\n }\r\n\r\n public toggle($event, row) {\r\n this.selection.toggle(row);\r\n this._cdr.detectChanges();\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n public onKeydown(event) {\r\n event.preventDefault();\r\n }\r\n\r\n // Wizard\r\n public selectedStep: number = 0;\r\n public selectedCategory: number = 0;\r\n\r\n public openDrawer() {\r\n this._sidebarService.open(\"playgroundDrawer\")\r\n }\r\n\r\n}","import { NgModule } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\n\r\nimport { InvolveFormFieldComponent } from './form-field.component';\r\n\r\nimport { InvolveErrorComponent } from './error.component';\r\nimport { InvolveHintDirective } from './hint.directive';\r\nimport { InvolveLabelDirective } from './label.directive';\r\nimport { InvolvePrefixDirective } from './prefix.directive';\r\nimport { InvolveSuffixDirective } from './suffix.directive';\r\nimport { InvolveTooltipModule } from '../tooltip/tooltip.module';\r\n\r\nimport { InvolveDirectiveModule } from '../directive/directive.module';\r\n@NgModule({\r\n declarations: [\r\n InvolveFormFieldComponent,\r\n\r\n InvolveErrorComponent,\r\n InvolveHintDirective,\r\n InvolveLabelDirective,\r\n InvolvePrefixDirective,\r\n InvolveSuffixDirective\r\n ],\r\n\r\n imports: [\r\n CommonModule,\r\n InvolveIconModule,\r\n InvolveTooltipModule,\r\n InvolveDirectiveModule\r\n ],\r\n\r\n exports: [\r\n InvolveFormFieldComponent,\r\n\r\n InvolveErrorComponent,\r\n InvolveHintDirective,\r\n InvolveLabelDirective,\r\n InvolvePrefixDirective,\r\n InvolveSuffixDirective\r\n ]\r\n})\r\nexport class InvolveFormFieldModule {}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module'\r\n\r\nimport { InvolveAccordionGroupComponent } from './accordion-group.component';\r\nimport { InvolveAccordionComponent } from './accordion.component';\r\n\r\nimport { InvolveAccordionContentDirective } from './accordion-content.component';\r\nimport { InvolveAccordionHeaderComponent } from './accordion-header.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveAccordionGroupComponent,\r\n InvolveAccordionComponent,\r\n InvolveAccordionContentDirective,\r\n InvolveAccordionHeaderComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n PortalModule,\r\n \r\n InvolveIconModule\r\n ],\r\n exports: [\r\n InvolveAccordionGroupComponent,\r\n InvolveAccordionComponent,\r\n InvolveAccordionContentDirective,\r\n InvolveAccordionHeaderComponent\r\n ]\r\n})\r\nexport class InvolveAccordionModule { }","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { InvolveBadgeOptionComponent } from './badge-option.component';\r\nimport { InvolveBadgeComponent } from './badge.component';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n InvolveBadgeComponent,\r\n InvolveBadgeOptionComponent\r\n ],\r\n exports: [\r\n InvolveBadgeComponent,\r\n InvolveBadgeOptionComponent\r\n ]\r\n})\r\nexport class InvolveBadgeModule { } ","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveLoadingCirclesModule } from '../loading-circles/loading-circles.module';\r\nimport { InvolvePrimaryButtonComponent } from './button-primary.component';\r\nimport { InvolveSecondaryButtonComponent } from './button-secondary.component';\r\nimport { InvolveButtonComponent } from './button.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveButtonComponent,\r\n InvolveSecondaryButtonComponent,\r\n InvolvePrimaryButtonComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n InvolveLoadingCirclesModule\r\n ],\r\n exports: [\r\n InvolveSecondaryButtonComponent,\r\n InvolvePrimaryButtonComponent\r\n ]\r\n})\r\nexport class InvolveButtonModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveCarouselComponent } from './carousel';\r\nimport { InvolveCarouselSlideComponent } from './carousel-slide';\r\nimport { InvolveCarouselContentComponent, InvolveCarouselContentPortal } from './carousel-content';\r\nimport { InvolveCarouselIndicatorComponent } from './carousel-indicator';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule\r\n ],\r\n declarations: [\r\n InvolveCarouselComponent,\r\n InvolveCarouselSlideComponent,\r\n InvolveCarouselContentComponent,\r\n InvolveCarouselIndicatorComponent,\r\n\r\n InvolveCarouselContentPortal\r\n ],\r\n exports: [\r\n InvolveCarouselComponent,\r\n InvolveCarouselSlideComponent,\r\n InvolveCarouselContentComponent,\r\n InvolveCarouselIndicatorComponent\r\n ]\r\n})\r\nexport class InvolveCarouselModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { InvolveCheckboxComponent } from './checkbox.component'\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\nimport { InvolveDirectiveModule } from '../directive/directive.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveCheckboxComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n\r\n InvolveIconModule,\r\n InvolveDirectiveModule\r\n ],\r\n exports: [\r\n InvolveCheckboxComponent\r\n ]\r\n})\r\nexport class InvolveCheckboxModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule }from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\n\r\nimport { CollapsiblePanelComponent } from './collapsible-panel.component';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n\r\n InvolveIconModule\r\n ],\r\n declarations: [\r\n CollapsiblePanelComponent\r\n ],\r\n exports: [\r\n CollapsiblePanelComponent\r\n ]\r\n})\r\nexport class InvolveCollapsiblePanelModule {}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\n\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\nimport { InvolveInputModule } from '../input/input.module';\r\nimport { InvolveFormFieldModule } from '../form-field/form-field.module';\r\n\r\nimport { InvolveColorPickerComponent, InvolveColorPickerContentDirective } from './color-picker.component';\r\nimport { InvolveColorPickerSelectorComponent } from './color-picker-selector.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n\r\n OverlayModule,\r\n PortalModule,\r\n\r\n InvolveIconModule,\r\n InvolveInputModule,\r\n InvolveFormFieldModule\r\n ],\r\n declarations: [\r\n InvolveColorPickerComponent,\r\n InvolveColorPickerContentDirective,\r\n InvolveColorPickerSelectorComponent\r\n ],\r\n exports: [\r\n InvolveColorPickerComponent,\r\n InvolveColorPickerSelectorComponent,\r\n InvolveColorPickerContentDirective\r\n ]\r\n})\r\nexport class InvolveColorPickerModule { }","import { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { CommonModule } from '@angular/common';\r\nimport { InvolveCopyComponent } from './copy.component';\r\nimport { NgModule } from '@angular/core'\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\nimport { InvolveIconModule } from '@rfv/modules/involve/icon/icon.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n InvolveIconModule,\r\n FlexLayoutModule\r\n ],\r\n\r\n declarations: [\r\n InvolveCopyComponent\r\n ],\r\n\r\n exports: [\r\n InvolveCopyComponent\r\n ]\r\n})\r\nexport class InvolveCopyModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveDataItemComponent } from './data-item.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule\r\n ],\r\n declarations: [\r\n InvolveDataItemComponent\r\n ],\r\n exports: [\r\n InvolveDataItemComponent\r\n ]\r\n})\r\nexport class InvolveDataItemModule { }","import {UtilsService} from '../common/services/utils/utils.service';\r\nimport {IDatePickerDirectiveConfig} from './date-picker-directive-config.model';\r\nimport {ElementRef, Injectable} from '@angular/core';\r\n\r\n@Injectable()\r\nexport class DatePickerDirectiveService {\r\n constructor(public utilsService: UtilsService) {\r\n }\r\n\r\n convertToHTMLElement(attachTo: ElementRef | string, baseElement: HTMLElement): HTMLElement {\r\n if (typeof attachTo === 'string') {\r\n return this.utilsService.closestParent(baseElement, attachTo);\r\n } else if (attachTo) {\r\n return attachTo.nativeElement;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n getConfig(config: IDatePickerDirectiveConfig = {},\r\n baseElement?: ElementRef,\r\n attachTo?: ElementRef | string): IDatePickerDirectiveConfig {\r\n const _config: IDatePickerDirectiveConfig = {...config};\r\n _config.hideInputContainer = true;\r\n\r\n let native;\r\n\r\n if (config.inputElementContainer) {\r\n native = this.utilsService.getNativeElement(config.inputElementContainer);\r\n } else {\r\n native = baseElement ? baseElement.nativeElement : null;\r\n }\r\n\r\n if (native) {\r\n _config.inputElementContainer = attachTo\r\n ? this.convertToHTMLElement(attachTo, native)\r\n : native;\r\n }\r\n\r\n return _config;\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {FormsModule} from '@angular/forms';\r\nimport {CommonModule} from '@angular/common';\r\nimport {DatePickerComponent} from './date-picker/date-picker.component';\r\nimport { InvolveDatePickerComponent } from '../../date-picker/date-picker.component';\r\nimport {DatePickerDirective} from './date-picker/date-picker.directive';\r\nimport {DayCalendarComponent} from './day-calendar/day-calendar.component';\r\nimport {MonthCalendarComponent} from './month-calendar/month-calendar.component';\r\nimport {TimeSelectComponent} from './time-select/time-select.component';\r\nimport {CalendarNavComponent} from './calendar-nav/calendar-nav.component';\r\nimport {DayTimeCalendarComponent} from './day-time-calendar/day-time-calendar.component';\r\n\r\nexport {DatePickerComponent} from './date-picker/date-picker.component';\r\nexport {DatePickerDirective} from './date-picker/date-picker.directive';\r\nexport {DayCalendarComponent} from './day-calendar/day-calendar.component';\r\nexport {DayTimeCalendarComponent} from './day-time-calendar/day-time-calendar.component';\r\nexport {TimeSelectComponent} from './time-select/time-select.component';\r\nexport {MonthCalendarComponent} from './month-calendar/month-calendar.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n DatePickerComponent,\r\n DatePickerDirective,\r\n DayCalendarComponent,\r\n MonthCalendarComponent,\r\n CalendarNavComponent,\r\n TimeSelectComponent,\r\n DayTimeCalendarComponent,\r\n InvolveDatePickerComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n exports: [\r\n DatePickerComponent,\r\n DatePickerDirective,\r\n MonthCalendarComponent,\r\n DayCalendarComponent,\r\n TimeSelectComponent,\r\n DayTimeCalendarComponent,\r\n InvolveDatePickerComponent\r\n ]\r\n})\r\nexport class InvolveDatePickerModule {\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { InvolveDateRangeBarOptionOptionComponent } from './date-range-bar-option.component';\r\nimport { InvolveDateRangeBarComponent } from './date-range-bar.component';\r\n\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n InvolveDateRangeBarOptionOptionComponent,\r\n InvolveDateRangeBarComponent\r\n ],\r\n exports: [\r\n InvolveDateRangeBarOptionOptionComponent,\r\n InvolveDateRangeBarComponent\r\n ]\r\n})\r\nexport class InvolveDateRangeBarModule { } ","import { InvolveDatePickerModule } from './../date-picker/lib/date-picker.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { InvolveDateRangeComponent } from './date-range.component';\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { DatePickerComponent } from '@rfv/modules/shared/components/date-picker/date-picker.component';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n InvolveIconModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n InvolveDatePickerModule\r\n ],\r\n declarations: [\r\n InvolveDateRangeComponent,\r\n DatePickerComponent\r\n ],\r\n exports: [\r\n InvolveDateRangeComponent,\r\n DatePickerComponent\r\n ]\r\n})\r\nexport class InvolveDateRangeModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { InvolveFeatureBarComponent } from './feature-bar.component'\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { InvolveTooltipModule } from '../tooltip/tooltip.module';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveFeatureBarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n InvolveIconModule,\r\n InvolveTooltipModule,\r\n RouterModule,\r\n OverlayModule\r\n ],\r\n exports: [\r\n InvolveFeatureBarComponent\r\n ]\r\n})\r\nexport class InvolveFeatureBarModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveSparkChartComponent } from './spark-chart.component';\r\nimport { HighchartsChartModule } from 'highcharts-angular';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n HighchartsChartModule\r\n ],\r\n declarations: [\r\n InvolveSparkChartComponent\r\n ],\r\n exports: [\r\n InvolveSparkChartComponent\r\n ]\r\n})\r\nexport class InvolveSparkChartModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { HighchartsChartModule } from 'highcharts-angular';\r\n\r\nimport { InvolveBarChartComponent } from './bar.component';\r\nimport { InvolveColumnChartComponent } from './column.component';\r\nimport { InvolvePieChartComponent } from './pie.component';\r\n\r\nimport * as Highcharts from 'highcharts';\r\nimport * as Highstock from 'highcharts/highstock';\r\nimport { InvolveHighChartComponent } from './highchart.component';\r\nimport { InvolveSparkChartModule } from '../spark-chart/spark-chart.module';\r\n\r\nimport * as HighchartsMore from 'highcharts/highcharts-more';\r\n(HighchartsMore)(Highcharts);\r\nimport * as HighchartsBoost from 'highcharts/modules/boost';\r\n(HighchartsBoost)(Highcharts);\r\nimport * as HighchartsPatternFill from 'highcharts/modules/pattern-fill';\r\n(HighchartsPatternFill)(Highcharts);\r\nimport * as HighchartsSolidGauge from 'highcharts/modules/solid-gauge';\r\n(HighchartsSolidGauge)(Highcharts);\r\nimport * as HighchartsStock from 'highcharts/modules/stock';\r\n(HighchartsStock)(Highcharts);\r\nimport * as HighchartsXrange from 'highcharts/modules/xrange';\r\nimport * as HighchartsExport from 'highcharts/modules/exporting';\r\n(HighchartsXrange)(Highstock);\r\n(HighchartsXrange)(Highcharts);\r\n(HighchartsExport)(Highstock);\r\n@NgModule({\r\n imports: [\r\n HighchartsChartModule,\r\n InvolveSparkChartModule,\r\n CommonModule\r\n ],\r\n declarations: [\r\n InvolveHighChartComponent,\r\n\r\n InvolveBarChartComponent,\r\n InvolveColumnChartComponent,\r\n InvolvePieChartComponent\r\n ],\r\n exports: [\r\n InvolveHighChartComponent,\r\n \r\n InvolveBarChartComponent,\r\n InvolveColumnChartComponent,\r\n InvolvePieChartComponent,\r\n\r\n HighchartsChartModule\r\n ]\r\n})\r\nexport class InvolveHighchartsModule {\r\n public constructor() {\r\n Highcharts.setOptions({\r\n lang: {\r\n \"thousandsSep\": \",\"\r\n }\r\n }),\r\n Highstock.setOptions({\r\n lang: {\r\n \"thousandsSep\": \",\"\r\n }\r\n })\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveDataItemModule } from '../data-item/data-item.module';\r\n\r\nimport { InvolveGaugeComponent } from './gauge.component';\r\nimport { InvolveHighchartsModule } from '../highcharts/highcharts.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n InvolveDataItemModule,\r\n InvolveHighchartsModule\r\n ],\r\n declarations: [\r\n InvolveGaugeComponent\r\n ],\r\n exports: [\r\n InvolveGaugeComponent\r\n ]\r\n})\r\nexport class InvolveGaugeModule { }\r\n","import { NgModule } from '@angular/core'\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\nimport { InvolveIconModule } from '@rfv/modules/involve/icon/icon.module';\r\n\r\nimport { InvolveMenuComponent, InvolveMenuHeaderComponent, InvolveMenuButtonComponent } from './menu.component';\r\n\r\n@NgModule({\r\n imports: [\r\n OverlayModule,\r\n InvolveIconModule,\r\n ],\r\n\r\n declarations: [\r\n InvolveMenuComponent,\r\n InvolveMenuHeaderComponent,\r\n InvolveMenuButtonComponent\r\n ],\r\n\r\n exports: [\r\n InvolveMenuComponent,\r\n InvolveMenuHeaderComponent,\r\n InvolveMenuButtonComponent\r\n ]\r\n})\r\nexport class InvolveMenuModule { }","import { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { InvolveProgressBarComponent } from './progress.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule\r\n ],\r\n declarations: [\r\n InvolveProgressBarComponent\r\n ],\r\n exports: [\r\n InvolveProgressBarComponent\r\n ]\r\n})\r\nexport class InvolveProgressBarModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { InvolveFormFieldModule } from '../form-field/form-field.module';\r\nimport { InvolveCheckboxModule } from '../checkbox/checkbox.module';\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\n\r\nimport { InvolveSelectComponent } from './select.component';\r\nimport { InvolveOptionDef, InvolveOptionComponent } from './option.component';\r\nimport { InvolveOptionGroupComponent } from './option-group.component';\r\nimport { InvolveFooterComponent } from './footer.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveSelectComponent,\r\n InvolveOptionDef,\r\n InvolveOptionComponent,\r\n InvolveOptionGroupComponent,\r\n InvolveFooterComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n OverlayModule,\r\n ReactiveFormsModule,\r\n ScrollingModule,\r\n\r\n InvolveFormFieldModule,\r\n InvolveCheckboxModule,\r\n InvolveIconModule\r\n ],\r\n exports: [\r\n InvolveSelectComponent,\r\n InvolveOptionDef,\r\n InvolveOptionComponent,\r\n InvolveOptionGroupComponent,\r\n InvolveFooterComponent\r\n ]\r\n})\r\nexport class InvolveSelectModule {}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SidebarComponent, SidebarContentDirective, SidebarFooterDirective, SidebarHeaderDirective } from './side-bar.component';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { InvolveIconModule } from \"../icon/icon.module\";\r\n\r\n@NgModule({\r\n exports: [\r\n SidebarComponent,\r\n SidebarContentDirective,\r\n SidebarFooterDirective,\r\n SidebarHeaderDirective,\r\n ],\r\n declarations: [\r\n SidebarComponent,\r\n SidebarContentDirective,\r\n SidebarFooterDirective,\r\n SidebarHeaderDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n OverlayModule,\r\n PortalModule,\r\n InvolveIconModule\r\n ],\r\n})\r\n\r\nexport class InvolveSideBarModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SpinnerComponent } from '@rfv/modules/involve/spinner/spinner.component'\r\n\r\nimport { SmartContainerComponent } from './smart-container.component';\r\n\r\n\r\nimport { LottieModule } from 'ngx-lottie';\r\nimport player from 'lottie-web';\r\n\r\n\r\nexport function playerFactory() {\r\n return player;\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n SmartContainerComponent,\r\n SpinnerComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n LottieModule.forRoot({ player: playerFactory }),\r\n \r\n ],\r\n exports: [\r\n SmartContainerComponent,\r\n SpinnerComponent\r\n ]\r\n})\r\n\r\n\r\nexport class InvolveSmartContainerModule { }\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { InvolveStatusBarComponent } from './status-bar.component';\r\n\r\n@NgModule({\r\n imports: [],\r\n declarations: [\r\n InvolveStatusBarComponent\r\n ],\r\n exports: [\r\n InvolveStatusBarComponent\r\n ]\r\n})\r\nexport class InvolveStatusBarModule {}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport * as fromCell from './cell';\r\nimport * as fromRow from './row';\r\nimport * as fromTable from './table';\r\nimport * as fromView from './view';\r\n\r\nimport { InvolveSort } from './sort';\r\nimport { InvolveSortHeader } from './sort-header';\r\nimport { InvolveFilter } from './filter';\r\nimport { InvolveFilterHeader, InvolveFilterHeaderTemplate } from './filter-header';\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\nimport { InvolveCheckboxModule } from '../checkbox/checkbox.module';\r\nimport { InvolveMenuModule } from '../menu/menu.module';\r\nimport { InvolveDateRangeModule } from '../date-range/date-range.module';\r\nimport { InvolveFormFieldModule } from '../form-field/form-field.module';\r\nimport { InvolveInputModule } from '../input/input.module';\r\nimport { InvolveDirectiveModule } from '../directive/directive.module';\r\nimport { InvolveTooltipModule } from '../tooltip/tooltip.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n ScrollingModule,\r\n FormsModule,\r\n\r\n InvolveIconModule,\r\n InvolveCheckboxModule,\r\n InvolveMenuModule,\r\n InvolveFormFieldModule,\r\n InvolveInputModule,\r\n InvolveDateRangeModule,\r\n InvolveDirectiveModule,\r\n InvolveTooltipModule\r\n ],\r\n declarations: [\r\n fromCell.InvolveCell,\r\n fromCell.InvolveCellDef,\r\n fromCell.InvolveGroupCellDef,\r\n fromCell.InvolveColumnDef,\r\n fromCell.InvolveFooterCell,\r\n fromCell.InvolveFooterCellDef,\r\n fromCell.InvolveHeaderCell,\r\n fromCell.InvolveHeaderCellDef,\r\n fromCell.InvolveCellOutlet,\r\n\r\n fromRow.InvolveFooterRow,\r\n fromRow.InvolveFooterRowDef,\r\n fromRow.InvolveHeaderRow,\r\n fromRow.InvolveHeaderRowDef,\r\n fromRow.InvolveNoDataRowDef,\r\n fromRow.InvolveLoadingRowDef,\r\n fromRow.InvolveRow,\r\n fromRow.InvolveRowDef,\r\n fromRow.InvolveRowGroup,\r\n fromRow.InvolveRowGroupDef,\r\n fromRow.InvolveDataRowOutlet,\r\n fromRow.InvolveFooterRowOutlet,\r\n fromRow.InvolveHeaderRowOutlet,\r\n fromRow.InvolveNoDataRowOutlet,\r\n\r\n fromTable.InvolveTable,\r\n\r\n fromView.InvolveViewDef,\r\n\r\n InvolveSort,\r\n InvolveSortHeader,\r\n InvolveFilter,\r\n InvolveFilterHeader,\r\n InvolveFilterHeaderTemplate,\r\n\r\n\r\n ],\r\n exports: [\r\n fromCell.InvolveCell,\r\n fromCell.InvolveCellDef,\r\n fromCell.InvolveGroupCellDef,\r\n fromCell.InvolveColumnDef,\r\n fromCell.InvolveFooterCell,\r\n fromCell.InvolveFooterCellDef,\r\n fromCell.InvolveHeaderCell,\r\n fromCell.InvolveHeaderCellDef,\r\n \r\n fromRow.InvolveFooterRow,\r\n fromRow.InvolveFooterRowDef,\r\n fromRow.InvolveHeaderRow,\r\n fromRow.InvolveHeaderRowDef,\r\n fromRow.InvolveNoDataRowDef,\r\n fromRow.InvolveLoadingRowDef,\r\n fromRow.InvolveRowGroup,\r\n fromRow.InvolveRowGroupDef,\r\n fromRow.InvolveRow,\r\n fromRow.InvolveRowDef,\r\n\r\n fromTable.InvolveTable,\r\n\r\n fromView.InvolveViewDef,\r\n\r\n InvolveSort,\r\n InvolveSortHeader,\r\n InvolveFilter,\r\n InvolveFilterHeader,\r\n InvolveFilterHeaderTemplate,\r\n\r\n\r\n ]\r\n})\r\nexport class InvolveTableModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TabContentDirective, TabComponent, TabHeaderDirective } from './tab.component';\r\nimport { TabGroupComponent } from './tab-group.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n TabComponent,\r\n TabContentDirective,\r\n TabHeaderDirective,\r\n TabGroupComponent,\r\n ],\r\n exports: [\r\n TabComponent,\r\n TabGroupComponent,\r\n TabContentDirective,\r\n TabHeaderDirective,\r\n ]\r\n})\r\nexport class InvolveTabsModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module'\r\nimport { InvolveMenuModule } from '@rfv/modules/involve/menu/menu.module';\r\n\r\nimport { InvolveTileComponent } from './tile.component';\r\n\r\nimport { InvolveTileContentComponent } from './tile-content.component';\r\nimport { InvolveTileHeaderComponent } from './tile-header.component';\r\nimport { InvolveTileHeaderButtonComponent } from './tile-header-button.component';\r\nimport { InvolveTileHeaderTabsComponent } from './tile-header-tabs.component';\r\nimport { InvolveTabsModule } from '../tab/tab.module';\r\n\r\n@NgModule({\r\n declarations: [\r\n InvolveTileComponent,\r\n InvolveTileContentComponent,\r\n InvolveTileHeaderComponent,\r\n InvolveTileHeaderButtonComponent,\r\n InvolveTileHeaderTabsComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n InvolveIconModule,\r\n InvolveMenuModule,\r\n InvolveTabsModule,\r\n PortalModule,\r\n ],\r\n exports: [\r\n InvolveTileComponent,\r\n InvolveTileContentComponent,\r\n InvolveTileHeaderComponent,\r\n InvolveTileHeaderButtonComponent,\r\n InvolveTileHeaderTabsComponent\r\n ]\r\n})\r\nexport class InvolveTileModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InvolveToggleButtonComponent } from './toggle-button.component';\r\nimport { InvolveToggleOptionComponent } from './toggle-option.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n\r\n declarations: [\r\n InvolveToggleButtonComponent,\r\n InvolveToggleOptionComponent\r\n ],\r\n\r\n exports: [\r\n InvolveToggleButtonComponent,\r\n InvolveToggleOptionComponent\r\n ]\r\n})\r\nexport class InvolveToggleButtonModule {}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { InvolveToggleSwitchComponent } from './toggle-switch.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule\r\n ],\r\n declarations: [\r\n InvolveToggleSwitchComponent\r\n ],\r\n exports: [\r\n InvolveToggleSwitchComponent\r\n ]\r\n})\r\nexport class InvolveToggleSwitchModule {}","import { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core'\r\n\r\nimport { InvolveIconModule } from '@rfv/modules/involve/icon/icon.module';\r\nimport { InvolveMenuModule } from '@rfv/modules/involve/menu/menu.module';\r\nimport { InvolveExportComponent } from './export.component';\r\nimport { InvolveDirectiveModule } from '../directive/directive.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n\r\n InvolveIconModule,\r\n InvolveMenuModule,\r\n InvolveDirectiveModule\r\n ],\r\n\r\n declarations: [\r\n InvolveExportComponent\r\n ],\r\n\r\n exports: [\r\n InvolveExportComponent\r\n ]\r\n})\r\nexport class InvolveExportModule { }","import { NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\n\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\n\r\nimport { InvolveFormFieldModule } from '@rfv/modules/involve/form-field/form-field.module';\r\nimport { InvolveIconModule } from '@rfv/modules/involve/icon/icon.module';\r\nimport { InvolveInputModule } from '@rfv/modules/involve/input/input.module';\r\nimport { InvolveSelectModule } from '@rfv/modules/involve/select/select.module';\r\nimport { InvolveStatusBarModule } from '@rfv/modules/involve/status-bar/status-bar.module';\r\nimport { InvolveTableModule } from '@rfv/modules/involve/table/module';\r\nimport { InvolveCheckboxModule } from './../checkbox/checkbox.module';\r\nimport { InvolveMenuModule } from './../menu/menu.module';\r\n\r\nimport { InvolveToolbarComponent } from './toolbar.component';\r\n\r\nimport { InvolveDataSourceAutoFilterComponent } from './components/filter/auto-filter.component';\r\nimport { InvolveDataSourceFilterItemComponent } from './components/filter/filter-item.component';\r\n\r\nimport { InvolveDataSourceExportComponent } from './components/export/export.component';\r\n\r\nimport { InvolveDataSourceGroupComponent } from './components/group/group.component';\r\nimport { InvolveDataSourceGroupOptionComponent } from './components/group/group-option.component';\r\n\r\nimport { InvolveDataSourceSearchComponent } from './components/search/search.component';\r\n\r\nimport { InvolveToolbarActionsDirective } from './toolbar-actions.directive';\r\nimport { InvolveTooltipModule } from '../tooltip/tooltip.module';\r\nimport { InvolveExportModule } from '../export/export.module';\r\nimport { InvolveDirectiveModule } from '../directive/directive.module';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n FormsModule,\r\n OverlayModule,\r\n PortalModule,\r\n ReactiveFormsModule,\r\n\r\n InvolveCheckboxModule,\r\n InvolveFormFieldModule,\r\n InvolveIconModule,\r\n InvolveInputModule,\r\n InvolveExportModule,\r\n InvolveMenuModule,\r\n InvolveSelectModule,\r\n InvolveStatusBarModule,\r\n InvolveTableModule,\r\n InvolveTooltipModule,\r\n InvolveDirectiveModule\r\n ],\r\n\r\n declarations: [\r\n InvolveToolbarComponent,\r\n\r\n InvolveDataSourceAutoFilterComponent,\r\n InvolveDataSourceFilterItemComponent,\r\n\r\n InvolveDataSourceExportComponent,\r\n\r\n InvolveDataSourceGroupComponent,\r\n InvolveDataSourceGroupOptionComponent,\r\n InvolveDataSourceSearchComponent,\r\n\r\n InvolveToolbarActionsDirective\r\n ],\r\n\r\n exports: [\r\n InvolveToolbarComponent,\r\n \r\n InvolveDataSourceAutoFilterComponent,\r\n InvolveDataSourceFilterItemComponent,\r\n\r\n InvolveDataSourceExportComponent,\r\n\r\n InvolveDataSourceGroupComponent,\r\n InvolveDataSourceGroupOptionComponent,\r\n InvolveDataSourceSearchComponent,\r\n\r\n InvolveToolbarActionsDirective,\r\n ]\r\n})\r\nexport class InvolveToolbarModule {}","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from '@angular/common';\r\nimport { PortalModule } from \"@angular/cdk/portal\";\r\nimport { FlexLayoutModule } from \"@angular/flex-layout\";\r\nimport { ScrollingModule } from \"@angular/cdk/scrolling\";\r\n\r\nimport { InvolveTree } from './tree';\r\nimport { InvolveTreeNodeDirective, InvolveTreeNodeDef, InvolveTreeLeafDirective, InvolveTreeLeafDef } from './node';\r\n\r\nimport { InvolveIconModule } from \"../icon/icon.module\";\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n PortalModule,\r\n ScrollingModule,\r\n\r\n InvolveIconModule\r\n ],\r\n declarations: [\r\n InvolveTree,\r\n InvolveTreeNodeDirective,\r\n InvolveTreeNodeDef,\r\n InvolveTreeLeafDirective,\r\n InvolveTreeLeafDef\r\n ],\r\n exports: [\r\n InvolveTree,\r\n InvolveTreeNodeDirective,\r\n InvolveTreeNodeDef,\r\n InvolveTreeLeafDirective,\r\n InvolveTreeLeafDef\r\n ],\r\n})\r\nexport class InvolveTreeModule { }","import { InvolveRatingLabelDirective } from './../rating/rating.component';\r\nimport { InvolveAccordionModule } from './../accordion/accordion.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { InvolveWizardStepComponent } from './wizard-step.component';\r\nimport { InvolveIconModule } from './../icon/icon.module';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\nimport { InvolveProgressBarModule } from './../progress-bar/progress-bar.module';\r\nimport { InvolveWizardCategoryComponent } from './wizard-category.component';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { InvolveWizardComponent } from './wizard.component';\r\nimport { InvolveWizardHeaderComponent } from './wizard-header.component';\r\nimport { InvolveWizardCategoryHeaderComponent } from './wizard-category-header.component';\r\n\r\n@NgModule({\r\n imports: [\r\n InvolveProgressBarModule,\r\n FlexLayoutModule,\r\n InvolveIconModule,\r\n CommonModule,\r\n InvolveAccordionModule\r\n ],\r\n declarations: [\r\n InvolveWizardComponent,\r\n InvolveWizardHeaderComponent,\r\n InvolveWizardCategoryComponent,\r\n InvolveWizardCategoryHeaderComponent,\r\n InvolveWizardStepComponent,\r\n InvolveRatingLabelDirective\r\n ],\r\n exports: [\r\n InvolveWizardComponent,\r\n InvolveWizardHeaderComponent,\r\n InvolveWizardCategoryComponent,\r\n InvolveWizardCategoryHeaderComponent,\r\n InvolveWizardStepComponent,\r\n InvolveRatingLabelDirective\r\n ]\r\n})\r\nexport class InvolveWizardModule { }","import { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { InvolveRatingComponent, InvolveRatingTitleDirective, InvolveRatingDescriptionDirective, InvolveRatingSubTitleDirective, InvolveRatingActionBarDirective } from './rating.component';\r\nimport { InvolveRatingOptionComponent, InvolveRatingOptionRadioButtonDirective } from './rating-option.component';\r\nimport { InvolveRatingItemComponent } from './rating-item.component';\r\n\r\nimport { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n imports: [\r\n FlexLayoutModule,\r\n CommonModule,\r\n ],\r\n\r\n declarations: [\r\n InvolveRatingComponent,\r\n InvolveRatingItemComponent,\r\n InvolveRatingOptionComponent,\r\n InvolveRatingTitleDirective,\r\n InvolveRatingSubTitleDirective,\r\n InvolveRatingDescriptionDirective,\r\n InvolveRatingActionBarDirective,\r\n InvolveRatingOptionRadioButtonDirective\r\n ],\r\n\r\n exports: [\r\n InvolveRatingComponent,\r\n InvolveRatingItemComponent,\r\n InvolveRatingOptionComponent,\r\n InvolveRatingTitleDirective,\r\n InvolveRatingSubTitleDirective,\r\n InvolveRatingDescriptionDirective,\r\n InvolveRatingActionBarDirective,\r\n InvolveRatingOptionRadioButtonDirective\r\n ]\r\n})\r\nexport class InvolveRatingModule { }","import { NgModule } from '@angular/core';\r\nimport { GridsterModule } from 'angular-gridster2';\r\n\r\nimport { InvolveRouterModule } from './involve-router.module';\r\nimport { InvolveFormFieldModule } from './form-field/form-field.module';\r\n\r\nimport { InvolveAccordionModule } from './accordion/accordion.module';\r\nimport { InvolveBadgeModule } from './badge/badge.module';\r\nimport { InvolveButtonModule } from './button/button.module';\r\nimport { InvolveCarouselModule } from './carousel/carousel.module';\r\nimport { InvolveCheckboxModule } from './checkbox/checkbox.module';\r\nimport { InvolveCollapsiblePanelModule } from './collapsible-panel/module';\r\nimport { InvolveColorPickerModule } from './color-picker/color-picker.module';\r\nimport { InvolveCopyModule } from './copy/copy.module';\r\nimport { InvolveDataItemModule } from './data-item/data-item.module';\r\nimport { InvolveDatePickerModule } from './date-picker/lib/date-picker.module';\r\nimport { InvolveDateRangeBarModule } from './date-range-bar/date-range-bar.module';\r\nimport { InvolveDateRangeModule } from './date-range/date-range.module';\r\nimport { InvolveEquationEditorModule } from './equation-editor/equation-editor.module';\r\nimport { InvolveFeatureBarModule } from './feature-bar/feature-bar.module';\r\nimport { InvolveGaugeModule } from './gauge/gauge.module';\r\nimport { InvolveIconModule } from './icon/icon.module';\r\nimport { InvolveInputModule } from './input/input.module';\r\nimport { InvolveLoadingCirclesModule } from './loading-circles/loading-circles.module';\r\nimport { InvolveMapModule } from './map/map.module';\r\nimport { InvolveMenuModule } from './menu/menu.module';\r\nimport { InvolvePipesModule } from './pipes/pipes.module';\r\nimport { InvolveProgressBarModule} from './progress-bar/progress-bar.module';\r\nimport { InvolveSelectModule } from './select/select.module';\r\nimport { InvolveSideBarModule } from './side-bar/side-bar.module';\r\nimport { InvolveSmartContainerModule } from './smart-container/smart-container.module';\r\nimport { InvolveSparkChartModule } from './spark-chart/spark-chart.module';\r\nimport { InvolveStatusBarModule } from './status-bar/status-bar.module';\r\nimport { InvolveTableModule } from './table/module';\r\nimport { InvolveTabsModule } from './tab/tab.module';\r\nimport { InvolveTileModule } from './tile/tile.module';\r\nimport { InvolveToggleButtonModule } from './toggle-button/module';\r\nimport { InvolveToggleSwitchModule } from './toggle-switch/module';\r\nimport { InvolveToolbarModule } from './toolbar/toolbar.module';\r\nimport { InvolveTooltipModule } from './tooltip/tooltip.module';\r\nimport { InvolveTreeModule } from './tree/module';\r\nimport { InvolveWizardModule } from './wizard/wizard.module';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\nimport { InvolvePlaygroundComponent } from './playground.component';\r\nimport { InvolveRatingModule } from './rating/rating.module';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { InvolveExportModule } from './export/export.module';\r\n\r\nimport { InvolveDirectiveModule } from './directive/directive.module';\r\nimport { InvolveHighchartsModule } from './highcharts/highcharts.module';\r\n\r\n/**\r\n * Involve component library.\r\n *\r\n * This library heavily follows the design of Angular Material, but with involve styling/css.\r\n * @see: https://github.com/angular/components/tree/master/src/material\r\n */\r\n@NgModule({\r\n declarations: [\r\n InvolvePlaygroundComponent,\r\n \r\n ],\r\n imports: [\r\n InvolveRouterModule,\r\n DragDropModule,\r\n InvolveDirectiveModule,\r\n\r\n InvolveFormFieldModule,\r\n\r\n InvolveAccordionModule,\r\n InvolveBadgeModule,\r\n InvolveButtonModule,\r\n InvolveCarouselModule,\r\n InvolveCheckboxModule,\r\n InvolveCollapsiblePanelModule,\r\n InvolveColorPickerModule,\r\n InvolveCopyModule,\r\n InvolveDataItemModule,\r\n InvolveDatePickerModule, \r\n InvolveDateRangeBarModule,\r\n InvolveDateRangeModule,\r\n InvolveEquationEditorModule, \r\n InvolveExportModule, \r\n InvolveFeatureBarModule,\r\n InvolveGaugeModule,\r\n InvolveHighchartsModule,\r\n InvolveIconModule,\r\n InvolveInputModule,\r\n InvolveLoadingCirclesModule,\r\n InvolveMapModule,\r\n InvolveMenuModule,\r\n InvolvePipesModule,\r\n InvolveProgressBarModule,\r\n InvolveProgressBarModule,\r\n InvolveRatingModule,\r\n InvolveSelectModule,\r\n InvolveSideBarModule,\r\n InvolveSmartContainerModule,\r\n InvolveSmartContainerModule,\r\n InvolveSparkChartModule,\r\n InvolveStatusBarModule,\r\n InvolveTableModule,\r\n InvolveTabsModule,\r\n InvolveTileModule,\r\n InvolveToggleButtonModule,\r\n InvolveToggleSwitchModule,\r\n InvolveToolbarModule,\r\n InvolveTooltipModule,\r\n InvolveTreeModule,\r\n InvolveWizardModule,\r\n\r\n // playground (for testing)\r\n CommonModule,\r\n FlexLayoutModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n GridsterModule,\r\n ScrollingModule\r\n ],\r\n exports: [\r\n InvolveDirectiveModule,\r\n\r\n InvolveFormFieldModule,\r\n\r\n InvolveAccordionModule,\r\n InvolveBadgeModule,\r\n InvolveButtonModule,\r\n InvolveCarouselModule,\r\n InvolveCheckboxModule,\r\n InvolveCollapsiblePanelModule,\r\n InvolveColorPickerModule,\r\n InvolveCopyModule,\r\n InvolveDataItemModule,\r\n InvolveDatePickerModule,\r\n InvolveDateRangeBarModule,\r\n InvolveDateRangeModule,\r\n InvolveExportModule,\r\n InvolveFeatureBarModule,\r\n InvolveGaugeModule,\r\n InvolveHighchartsModule,\r\n InvolveIconModule,\r\n InvolveInputModule,\r\n InvolveLoadingCirclesModule,\r\n InvolveMapModule,\r\n InvolveMenuModule,\r\n InvolvePipesModule,\r\n InvolveProgressBarModule,\r\n InvolveRatingModule,\r\n InvolveSelectModule,\r\n InvolveSideBarModule,\r\n InvolveSmartContainerModule,\r\n InvolveSparkChartModule,\r\n InvolveStatusBarModule,\r\n InvolveTableModule,\r\n InvolveTabsModule,\r\n InvolveTileModule,\r\n InvolveToggleButtonModule,\r\n InvolveToggleSwitchModule,\r\n InvolveToolbarModule,\r\n InvolveTooltipModule,\r\n InvolveTreeModule,\r\n InvolveWizardModule,\r\n ]\r\n})\r\nexport class InvolveModule { }\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-loading-circles',\r\n templateUrl: './loading-circles.component.html',\r\n styleUrls: ['loading-circles.component.scss'],\r\n\r\n})\r\nexport class LoadingCirclesComponent {\r\n\r\n constructor() { }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LoadingCirclesComponent } from './loading-circles.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n exports: [LoadingCirclesComponent],\r\n declarations: [LoadingCirclesComponent]\r\n})\r\nexport class InvolveLoadingCirclesModule { }\r\n","import * as azmaps from 'azure-maps-control';\r\n\r\nlet __id = 0;\r\n\r\n// Provides an HTML element we can use to inject an angular component into the map\r\nexport class ControlStub implements azmaps.Control {\r\n public readonly id = `involve-map-control-stub-${__id++}`;\r\n\r\n private _stub: HTMLElement;\r\n\r\n public get stub() {\r\n return this._stub;\r\n }\r\n \r\n public onAdd(map: azmaps.Map, options?: azmaps.ControlOptions): HTMLElement {\r\n this._stub = document.createElement('div');\r\n \r\n this._stub.id = this.id;\r\n this._stub.classList.add('azure-maps-control-container');\r\n\r\n return this._stub;\r\n }\r\n\r\n public onRemove(): void {\r\n this._stub.remove();\r\n }\r\n}","import * as azmaps from \"azure-maps-control\";\r\nimport { FullscreenControlOptions } from './FullScreenControlOptions';\r\n\r\n/** The events supported by the `FullscreenControl`. */\r\nexport interface FullscreenControlEvents {\r\n /** Event fired when the fullscreen state changed. Returns a boolean indicating if the container is fullscreen or not. */\r\n fullscreenchanged: boolean;\r\n}\r\n\r\n/** A control that toggles the map or a specific container from its defined size to a fullscreen size. */\r\nexport class FullscreenControl extends azmaps.internal.EventEmitter implements azmaps.Control {\r\n\r\n /****************************\r\n * Private Properties\r\n ***************************/\r\n\r\n private _btnContainer: HTMLElement;\r\n private _button: HTMLButtonElement;\r\n private _options: FullscreenControlOptions = {\r\n style: 'light',\r\n hideIfUnsupported: true\r\n };\r\n private _hclStyle: azmaps.ControlStyle;\r\n private _darkColor = '#011c2c';\r\n private _map: azmaps.Map;\r\n\r\n /**\r\n * Resource values: 0 - Exit Fullscreen, 1 - View Fullscreen, 2 - Full Screen Control\r\n */\r\n private _resource: string[];\r\n private _container: HTMLElement;\r\n\r\n //TODO: consider converting images to SVGs for smaller file size.\r\n private static _fullscreenCss = '.azmaps-map-fullscreen-container:-webkit-full-screen{width:100%;height:100%;}.azmaps-map-fullscreen-container:-moz-full-screen{width:100%;height:100%;}.azmaps-map-fullscreen-container:-ms-fullscreen{width:100%;height:100%;}.azmaps-map-fullscreen-container:-o-full-screen{width:100%;height:100%;}.azmaps-map-fullscreen-container:-full-screen{width:100%;height:100%;}' +\r\n '.azmaps-map-fullscreen-btn{margin:0;padding:0;border:none;border-collapse:collapse;width:32px;height:32px;text-align:center;cursor:pointer;line-height:32px;background-repeat:no-repeat;background-size:20px;background-position:center center;z-index:200;box-shadow:0px 0px 4px rgba(0,0,0,0.16);}' +\r\n '.azmaps-map-fullscreen-expand{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAMAAAF6ePCOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAVUExURQAAAJacn5ean5idopicopicoZicoZbVOdIAAAAGdFJOUwBQYI+fucOe/hkAAAAJcEhZcwAAFxEAABcRAcom8z8AAADMSURBVDhPzZSNDoIwDITn397/kV27il9Rzmwq4Qux194VRmIombqqDzCvtV236LvRJos28rD6RlPGs5jpvHaZVTLWe0nEbCkxbnKkU4zcMw7xpvTqeHrho2WzzDfWHHPPmraCmAXWzRDrtZ7ZpCeNOe03c3xnL2bOdginc2Iz6/yYuDGxP+WG1Q8Qmvxxx6UGQUgNgpAaBCE1CEJqEITUIHhxXGquTjTHBa+mQRBSgyCkBkFIDYKQGgQhNQhCahDsMmGfoA1r351BSrkDTQQSzEhW2qYAAAAASUVORK5CYII=);}' +\r\n '.azmaps-map-fullscreen-expand:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAMAAAF6ePCOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAVUExURQAAADCszDCqzTKtzzKszzCszzGszvdFYikAAAAGdFJOUwBQYI+fucOe/hkAAAAJcEhZcwAAFxEAABcRAcom8z8AAADMSURBVDhPzZSNDoIwDITn397/kV27il9Rzmwq4Qux194VRmIombqqDzCvtV236LvRJos28rD6RlPGs5jpvHaZVTLWe0nEbCkxbnKkU4zcMw7xpvTqeHrho2WzzDfWHHPPmraCmAXWzRDrtZ7ZpCeNOe03c3xnL2bOdginc2Iz6/yYuDGxP+WG1Q8Qmvxxx6UGQUgNgpAaBCE1CEJqEITUIHhxXGquTjTHBa+mQRBSgyCkBkFIDYKQGgQhNQhCahDsMmGfoA1r351BSrkDTQQSzEhW2qYAAAAASUVORK5CYII=);}' +\r\n '.azmaps-map-fullscreen-collapse{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEWWnJ+Xmp+YnKKYnKKYnKHcteq5AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFxEAABcRAcom8z8AAAAHdElNRQfiCw8VGzLD58rvAAAANUlEQVQ4y2NgIB+wuLg4IKhRGUpkXGAAKgMFg0JmuIHBH9ajuYTaMszGxgZAiklJSYFg+gAAKrRnAIqOPxgAAAAASUVORK5CYII=);}' +\r\n '.azmaps-map-fullscreen-collapse:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEUwrMwwqs0yrM8yrM8xrM6kUFC0AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFxEAABcRAcom8z8AAAAHdElNRQfiCw8VGSuVugCtAAAANUlEQVQ4y2NgIB+wuLg4IKhRGUpkXGAAKgMFg0JmuIHBH9ajuYTaMszGxgZAiklJSYFg+gAAKrRnAIqOPxgAAAAASUVORK5CYII=);}';\r\n\r\n /****************************\r\n * Constructor\r\n ***************************/\r\n\r\n /**\r\n * A control that toggles the map or a specific container from its defined size to a fullscreen size.\r\n * @param options Options for defining how the control is rendered and functions.\r\n */\r\n constructor(options?: FullscreenControlOptions) {\r\n super();\r\n\r\n this._options = Object.assign(this._options, options || {});\r\n }\r\n\r\n /****************************\r\n * Public Methods\r\n ***************************/\r\n\r\n /** Disposes the control. */\r\n public dispose(): void {\r\n const self = this;\r\n\r\n if (self._map) {\r\n self._map.controls.remove(self);\r\n }\r\n\r\n Object.keys(self).forEach(k => {\r\n self[k] = null;\r\n });\r\n }\r\n\r\n /** Gets the options of the control. */\r\n public getOptions(): FullscreenControlOptions {\r\n return Object.assign({}, this._options);\r\n }\r\n\r\n /**\r\n * Action to perform when the control is added to the map.\r\n * @param map The map the control was added to.\r\n * @param options The control options used when adding the control to the map.\r\n * @returns The HTML Element that represents the control.\r\n */\r\n public onAdd(map: azmaps.Map, options?: azmaps.ControlOptions): HTMLElement {\r\n const self = this;\r\n self._map = map;\r\n\r\n const isSupported = FullscreenControl.isSupported();\r\n\r\n if (isSupported || (!isSupported && !this._options.hideIfUnsupported)) {\r\n const mcl = map.getMapContainer().classList;\r\n if (mcl.contains(\"high-contrast-dark\")) {\r\n self._hclStyle = 'dark';\r\n } else if (mcl.contains(\"high-contrast-light\")) {\r\n self._hclStyle = 'light';\r\n }\r\n\r\n const resx = self._getTranslations(map.getStyle().language);\r\n self._resource = resx;\r\n\r\n if (!self._container) {\r\n self._container = this._map.getMapContainer();\r\n\r\n if (!self._container.classList.contains('azmaps-map-fullscreen-container')) {\r\n self._container.classList.add('azmaps-map-fullscreen-container');\r\n }\r\n }\r\n\r\n //Add css for fullscreen. Add the CSS style for the control to the DOM.\r\n const style = document.createElement('style');\r\n style.innerHTML = FullscreenControl._fullscreenCss;\r\n document.body.appendChild(style);\r\n\r\n //Create the fullscreen button.\r\n const bc = document.createElement('div');\r\n bc.classList.add('azure-maps-control-container');\r\n bc.setAttribute('aria-label', resx[2]);\r\n bc.style.flexDirection = 'column';\r\n self._btnContainer = bc;\r\n\r\n const b = document.createElement(\"button\");\r\n b.classList.add('azmaps-map-fullscreen-btn');\r\n b.classList.add('azmaps-map-fullscreen-expand');\r\n b.setAttribute('title', resx[1]);\r\n b.setAttribute('alt', resx[1]);\r\n b.setAttribute('type', 'button');\r\n b.addEventListener('click', self._toggleFullscreen);\r\n self._button = b;\r\n self._updateBtn();\r\n self._btnContainer.appendChild(self._button);\r\n\r\n let changeEventName: string;\r\n\r\n if (document.fullscreenEnabled)\r\n changeEventName = 'fullscreenchange';\r\n else if (document['fullscreenchange']) {\r\n changeEventName = 'fullscreenchange';\r\n } else if (document['webkitCancelFullScreen']) {\r\n changeEventName = 'webkitfullscreenchange';\r\n } else if (document['mozCancelFullScreen']) {\r\n changeEventName = 'mozfullscreenchange';\r\n } else if (document['msExitFullscreen']) {\r\n changeEventName = 'MSFullscreenChange';\r\n }\r\n\r\n if (changeEventName) {\r\n document.addEventListener(changeEventName, () => { self._updateBtn() });\r\n }\r\n\r\n self.setOptions(self._options);\r\n\r\n return self._btnContainer;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Action to perform when control is removed from the map.\r\n */\r\n public onRemove(): void {\r\n const self = this;\r\n const c = self._container;\r\n const bc = self._btnContainer;\r\n\r\n if (c && c.classList.contains('azmaps-map-fullscreen-container')) {\r\n c.classList.remove('azmaps-map-fullscreen-container');\r\n }\r\n\r\n if (bc) {\r\n bc.remove();\r\n self._btnContainer = null;\r\n }\r\n\r\n if (self._options.style === 'auto') {\r\n self._map.events.remove('styledata', self._mapStyleChanged);\r\n }\r\n\r\n self._map = null;\r\n }\r\n\r\n /**\r\n * Sets the options of the control. \r\n * @param options The options.\r\n */\r\n public setOptions(options: FullscreenControlOptions): void {\r\n if (options) {\r\n const self = this;\r\n const map = self._map;\r\n const opt = self._options;\r\n\r\n if (options.container !== undefined) {\r\n var isFullscreen = self.isFullscreen();\r\n if (isFullscreen) {\r\n self._toggleFullscreen();\r\n }\r\n\r\n var c = self._container;\r\n\r\n if (c && c.classList.contains('azmaps-map-fullscreen-container')) {\r\n c.classList.remove('azmaps-map-fullscreen-container');\r\n }\r\n\r\n opt.container = options.container;\r\n c = null;\r\n\r\n if (options.container === null) {\r\n c = map.getMapContainer();\r\n } else if (typeof options.container === 'string') {\r\n c = document.getElementById(options.container);\r\n\r\n if (!c) {\r\n c = document.querySelector(options.container);\r\n }\r\n } else if (options.container instanceof HTMLElement) {\r\n c = options.container;\r\n }\r\n\r\n self._container = c;\r\n\r\n if (c && !c.classList.contains('azmaps-map-fullscreen-container')) {\r\n c.classList.add('azmaps-map-fullscreen-container');\r\n\r\n if (isFullscreen) {\r\n self._toggleFullscreen();\r\n }\r\n }\r\n }\r\n\r\n if (typeof options.hideIfUnsupported === 'boolean' && opt.hideIfUnsupported !== options.hideIfUnsupported) {\r\n opt.hideIfUnsupported = options.hideIfUnsupported;\r\n\r\n if (!FullscreenControl.isSupported() && map) {\r\n self.onRemove();\r\n self.onAdd(map);\r\n }\r\n }\r\n\r\n if (typeof options.style === 'string') {\r\n let color = 'white';\r\n\r\n if (self._hclStyle) {\r\n if (self._hclStyle === 'dark') {\r\n color = self._darkColor;\r\n }\r\n } else {\r\n if (opt.style === 'auto') {\r\n map.events.remove('styledata', self._mapStyleChanged);\r\n }\r\n\r\n opt.style = options.style;\r\n\r\n switch (options.style) {\r\n case 'dark':\r\n color = self._darkColor;\r\n break;\r\n case 'auto':\r\n //Color will change between light and dark depending on map style.\r\n map.events.add('styledata', self._mapStyleChanged);\r\n color = self._getColorFromMapStyle();\r\n break;\r\n case 'light':\r\n break;\r\n }\r\n }\r\n\r\n self._button.style.backgroundColor = color;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the map or specified container is in fullscreen mode or not. \r\n */\r\n public isFullscreen(): boolean {\r\n const d = document;\r\n return !(!d['fullscreenElement'] &&\r\n !d['msFullscreenElement'] &&\r\n !d['mozFullScreenElement'] &&\r\n !d['webkitFullscreenElement']);\r\n }\r\n\r\n /**\r\n * Checks to see if the browser supports going into fullscreen mode.\r\n */\r\n public static isSupported(): boolean {\r\n const d = document;\r\n return d['fullscreenEnabled'] ||\r\n d['msFullscreenEnabled'] ||\r\n d['mozFullScreenEnabled'] ||\r\n d['webkitFullscreenEnabled'];\r\n }\r\n\r\n /****************************\r\n * Private Methods\r\n ***************************/\r\n\r\n private _toggleFullscreen = () => {\r\n const self = this;\r\n\r\n if (self._container) {\r\n if (self.isFullscreen()) {\r\n const d = document;\r\n const closeFullscreenFn =\r\n d['webkitCancelFullScreen']\r\n || d['cancelFullScreen']\r\n || d['mozCancelFullScreen']\r\n || d['msExitFullscreen']\r\n || d.exitFullscreen;\r\n\r\n closeFullscreenFn.call(document);\r\n } else {\r\n let c = self._container;\r\n const openFullscreenFn =\r\n c.requestFullscreen\r\n || c['webkitRequestFullScreen']\r\n || c['requestFullScreen']\r\n || c['mozRequestFullScreen']\r\n || c['msRequestFullscreen'];\r\n \r\n openFullscreenFn.call(c);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * An event handler for when the map style changes. Used when control style is set to auto.\r\n */\r\n private _mapStyleChanged = () => {\r\n const self = this;\r\n if (self._button && !self._hclStyle) {\r\n self._button.style.backgroundColor = self._getColorFromMapStyle();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the background color for the button based on the map style. This is used when style is set to auto.\r\n */\r\n private _getColorFromMapStyle(): string {\r\n //When the style is dark (i.e. satellite, night), show the dark colored theme.\r\n if (['satellite', 'satellite_road_labels', 'grayscale_dark', 'night'].indexOf(this._map.getStyle().style) > -1) {\r\n return this._darkColor;\r\n }\r\n\r\n return 'white';\r\n }\r\n\r\n /**\r\n * Toggles the fullscreen state of the button.\r\n */\r\n private _updateBtn(): void {\r\n const self = this;\r\n const resx = self._resource;\r\n\r\n let ariaLabel = resx[1];\r\n let removeClass: string;\r\n let addClass: string;\r\n\r\n if (self.isFullscreen()) {\r\n //Is fullscreen, exit.\r\n ariaLabel = resx[0];\r\n\r\n removeClass = 'expand';\r\n addClass = 'collapse';\r\n\r\n self._invokeEvent('fullscreenchanged', true);\r\n } else {\r\n //Make map full screen.\r\n ariaLabel = resx[1];\r\n\r\n removeClass = 'collapse';\r\n addClass = 'expand';\r\n\r\n self._invokeEvent('fullscreenchanged', false);\r\n }\r\n\r\n const btn = self._button;\r\n\r\n btn.setAttribute('title', ariaLabel);\r\n btn.setAttribute('alt', ariaLabel);\r\n\r\n btn.classList.remove('azmaps-map-fullscreen-' + removeClass);\r\n btn.classList.add('azmaps-map-fullscreen-' + addClass);\r\n }\r\n\r\n /**\r\n * Returns the set of translation text resources needed for the fullscreen control for a given language. \r\n * Array values: 0 - View Fullscreen, 1 - Exit Fullscreen, 2 - Full Screen Control\r\n * @param lang The language code to retrieve the text resources for.\r\n * @returns An object containing text resources in the specified language.\r\n */\r\n private _getTranslations(lang?: string): string[] {\r\n if (lang && lang.indexOf('-') > 0) {\r\n lang = lang.substring(0, lang.indexOf('-'));\r\n }\r\n\r\n const t = FullscreenControl._translations;\r\n let r = t[lang];\r\n\r\n if (!r) {\r\n r = t['en']\r\n }\r\n\r\n return r;\r\n }\r\n\r\n private static _translations = {\r\n //Afrikaans\r\n 'af': ['Verlaat volskerm', 'Vertoon volskerm', 'Volskerm beheer'],\r\n //Arabic\r\n 'ar': ['الخروج من وضع ملئ للشاشة', 'المشاهدة بحجم الشاشة', 'تحكم ملء الشاشة'],\r\n //Basque\r\n 'eu': ['Irten pantaila osoko', 'ikusi pantaila osoan', 'Pantaila osoa kontrol'],\r\n //Bulgarian\r\n 'bg': ['Изход на цял екран', 'Преглед на цял екран', 'Контрол на цял екран'],\r\n //Chinese\r\n 'zh': ['退出全屏', '全屏查看', '全屏控制'],\r\n //Croatian\r\n 'hr': ['Izlaz na cijelom zaslonu', 'Prikaz na cijelom zaslonu', 'Puni zaslon kontrola'],\r\n //Czech\r\n 'cs': ['Ukončit celou obrazovku', 'pohled na celou obrazovku', 'fullscreen kontrola'],\r\n //Danish\r\n 'da': ['Afslut fuld skærm', 'Se fuld skærm', 'fullscreen kontrol'],\r\n //Dutch\r\n 'nl': ['Verlaat volledig scherm', 'Bekijk fullscreen', 'fullscreen controle'],\r\n //Estonian\r\n 'et': ['Välja täisekraani', 'Vaata täisekraani', 'Täisekraan kontrolli'],\r\n //Finnish\r\n 'fi': ['Poistu koko näytöstä', 'Koko näyttö', 'fullscreen ohjaus'],\r\n //French\r\n 'fr': ['Quitter le mode plein écran', 'Voir en plein écran', 'Contrôle plein écran'],\r\n //Galician\r\n 'gl': ['Saia da pantalla completa', 'Ver a pantalla completa', 'Control de pantalla completa'],\r\n //German\r\n 'de': ['Beenden Vollbild', 'Ansicht Vollbild', 'Vollbild-Steuerung'],\r\n //Greek\r\n 'el': ['Έξοδος από πλήρη οθόνη', 'Προβολή σε πλήρη οθόνη', 'Πλήρης οθόνη ελέγχου'],\r\n //Hindi\r\n 'hi': ['पूर्ण स्क्रीन से बाहर निकलें', 'पूर्णस्क्रीन देखें', 'पूर्ण स्क्रीन नियंत्रण'],\r\n //Hungarian\r\n 'hu': ['Kilépés a teljes képernyős', 'Megtekintés teljes képernyőn', 'Nagyítás ellenőrzés'],\r\n //Indonesian\r\n 'id': ['Keluar layar penuh', 'Lihat fullscreen', 'Kontrol layar penuh'],\r\n //Italian\r\n 'it': ['Esci da schermo intero', 'Visualizza schermo intero', 'controllo a tutto schermo'],\r\n //Japanese\r\n 'ja': ['出口フルスクリーン', '表示フルスクリーン', 'フルスクリーンコントロール'],\r\n //Kazakh\r\n 'kk': ['Толық экраннан шығу', 'View толық экран', 'Fullscreen бақылау'],\r\n //Korean\r\n 'ko': ['전체 화면 종료', '전체 화면보기', '전체 화면 제어'],\r\n //Spanish\r\n 'es': ['Salir de pantalla completa', 'Ver en pantalla completa', 'control de pantalla completa'],\r\n //Latvian\r\n 'lv': ['Iziet no pilnekrāna', 'Skatīt pilnekrāna režīmā', 'Pilnekrāna kontrole'],\r\n //Lithuanian\r\n 'lt': ['Išjungti viso ekrano režimą', 'Peržiūrėti per visą ekraną', 'Fullscreen kontrolė'],\r\n //Malay\r\n 'ms': ['keluar skrin penuh', 'paparan skrin penuh', 'kawalan skrin penuh'],\r\n //Norwegian\r\n 'nb': ['Avslutt full skjerm', 'Vis fullskjerm', 'Full skjermkontroll'],\r\n //Polish\r\n 'pl': ['Wyłączyć tryb pełnoekranowy', 'Zobacz na pełnym ekranie', 'kontrola na pełnym ekranie'],\r\n //Portuguese\r\n 'pt': ['Sair em tela cheia', 'Ver tela cheia', 'controle de tela cheia'],\r\n //Romanian\r\n 'ro': ['Ieșire ecran complet', 'Vezi tot ecranul', 'controlul pe tot ecranul'],\r\n //Russian\r\n 'ru': ['Выход из полноэкранного режима', 'Просмотреть весь экран', 'Полноэкранный контроль'],\r\n //Serbian\r\n 'sr': ['Излаз из целог екрана', 'Погледај преко целог екрана', 'фуллсцреен контрола'],\r\n //Slovak\r\n 'sk': ['Skončiť celú obrazovku', 'pohľad na celú obrazovku', 'fullscreen kontrola'],\r\n //Slovenian\r\n 'sl': ['Izhod celozaslonski', 'Poglej celozaslonski', 'celozaslonski nadzor'],\r\n //Swedish\r\n 'sv': ['Avsluta helskärm', 'Visa helskärm', 'Full skärms kontroll'],\r\n //Thai\r\n 'th': ['แบบเต็มหน้าจอออกจาก', 'ดูแบบเต็มจอ', 'การควบคุมแบบเต็มหน้าจอ'],\r\n //Turkish\r\n 'tr': ['Tam ekrandan çık', 'Tam ekran görüntüle', 'Tam Ekran kontrolü'],\r\n //Ukrainian\r\n 'uk': ['Вихід з повноекранного режиму', 'Переглянути весь екран', 'Редакція контроль'],\r\n //Vietnamese\r\n 'vi': ['Thoát toàn màn hình', 'Xem toàn màn hình', 'kiểm soát toàn màn hình'],\r\n //English\r\n 'en': ['Exit Fullscreen', 'View Fullscreen', 'Fullscreen Control']\r\n };\r\n}","import * as azmaps from \"azure-maps-control\";\r\nimport { HtmlMarkerLayerOptions } from './HtmlMarkerLayerOptions';\r\nimport { ExtendedHtmlMarker } from './ExtendedHtmlMarker';\r\n\r\n/**\r\n * A layer that renders point data from a data source as HTML elements on the map.\r\n */\r\nexport class HtmlMarkerLayer extends azmaps.layer.BubbleLayer {\r\n\r\n /*********************\r\n * Private Properties\r\n *********************/\r\n\r\n private _options: HtmlMarkerLayerOptions = {\r\n minZoom: 0,\r\n maxZoom: 24,\r\n visible: true,\r\n updateWhileMoving: false,\r\n filter: ['==', ['geometry-type'], 'Point'],\r\n markerCallback: (id, position, properties) => {\r\n if(properties.cluster){\r\n return new azmaps.HtmlMarker({\r\n position: position,\r\n text: properties.point_count_abbreviated\r\n });\r\n } else {\r\n return new azmaps.HtmlMarker({\r\n position: position\r\n });\r\n }\r\n }\r\n };\r\n\r\n private _map: azmaps.Map;\r\n\r\n private _markers: ExtendedHtmlMarker[] = [];\r\n private _markerIds: string[] = [];\r\n private _markerCache: any = {}; \r\n\r\n private _timer: number;\r\n \r\n /** Events supported by the HTML Marker Layer */\r\n private _supportedEvents = [\"click\", \"contextmenu\", \"dblclick\", \"drag\", \"dragstart\", \"dragend\", \"keydown\", \"keypress\", \"keyup\", \"mousedown\", \"mouseenter\", \"mouseleave\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\"];\r\n\r\n /*********************\r\n * Constructor\r\n *********************/\r\n\r\n /**\r\n * Constructs a new HtmlMarkerLayer.\r\n * @param source The id or instance of a data source which the layer will render.\r\n * @param id The id of the layer. If not specified a random one will be generated.\r\n * @param options The options of the Html marker layer.\r\n */\r\n constructor(source?: string | azmaps.source.Source, id?: string, options?: HtmlMarkerLayerOptions) {\r\n super(source, id);\r\n\r\n super.setOptions({\r\n color: 'transparent',\r\n radius: 0,\r\n strokeWidth: 0\r\n });\r\n\r\n this.setOptions(options || {});\r\n }\r\n\r\n /*********************\r\n * Public methods\r\n *********************/\r\n\r\n /**\r\n * Gets the options of the Html Marker layer.\r\n */\r\n public getOptions(): HtmlMarkerLayerOptions {\r\n return Object.assign({}, this._options);\r\n }\r\n\r\n /**\r\n * Sets the options of the Html marker layer.\r\n * @param options The new options of the Html marker layer.\r\n */\r\n public setOptions(options: HtmlMarkerLayerOptions): void {\r\n const self = this;\r\n const opt = self._options;\r\n\r\n const newBaseOptions = {};\r\n let cc = false;\r\n\r\n if (options.source && opt.source !== options.source) {\r\n opt.source = options.source\r\n newBaseOptions.source = options.source;\r\n cc = true;\r\n }\r\n\r\n if (options.sourceLayer && opt.sourceLayer !== options.sourceLayer) {\r\n opt.sourceLayer = options.sourceLayer\r\n newBaseOptions.sourceLayer = options.sourceLayer;\r\n cc = true;\r\n }\r\n\r\n if (options.filter && opt.filter !== options.filter) {\r\n opt.filter = options.filter\r\n newBaseOptions.filter = options.filter;\r\n cc = true;\r\n }\r\n\r\n if (typeof options.minZoom === 'number' && opt.minZoom !== options.minZoom) {\r\n opt.minZoom = options.minZoom\r\n newBaseOptions.minZoom = options.minZoom;\r\n }\r\n\r\n if (typeof options.maxZoom === 'number' && opt.maxZoom !== options.maxZoom) {\r\n opt.maxZoom = options.maxZoom\r\n newBaseOptions.maxZoom = options.maxZoom;\r\n }\r\n\r\n if (typeof options.visible !== 'undefined' && opt.visible !== options.visible) {\r\n opt.visible = options.visible\r\n newBaseOptions.visible = options.visible;\r\n }\r\n\r\n if (options.markerCallback && opt.markerCallback != options.markerCallback) {\r\n opt.markerCallback = options.markerCallback;\r\n cc = true;\r\n }\r\n\r\n if (typeof options.updateWhileMoving === 'boolean' && opt.updateWhileMoving !== options.updateWhileMoving) {\r\n opt.updateWhileMoving = options.updateWhileMoving;\r\n }\r\n\r\n if (cc) {\r\n self._clearCache(true);\r\n } else {\r\n self._updateMarkers();\r\n }\r\n\r\n super.setOptions(newBaseOptions);\r\n }\r\n\r\n /** Force the layer to refresh and update. */\r\n public update(): void {\r\n this._clearCache(true);\r\n this._updateMarkers();\r\n }\r\n\r\n /***************************\r\n * Public override methods\r\n ***************************/\r\n\r\n //Override the layers onAdd function. \r\n public onAdd(map: azmaps.Map): void {\r\n const self = this;\r\n let mapEvents = map.events;\r\n\r\n if (map) {\r\n mapEvents.remove('moveend', self._updateMarkers);\r\n mapEvents.remove('move', self._mapMoved);\r\n mapEvents.remove('sourcedata', self._sourceUpdated);\r\n }\r\n\r\n self._map = map;\r\n mapEvents = map.events;\r\n\r\n mapEvents.add('moveend', self._updateMarkers);\r\n mapEvents.add('move', self._mapMoved);\r\n mapEvents.add('sourcedata', self._sourceUpdated);\r\n\r\n //Call the underlying functionaly for this.\r\n super.onAdd(map);\r\n }\r\n\r\n //Override the layers onRemove function.\r\n public onRemove(): void {\r\n const self = this;\r\n const map = self._map;\r\n\r\n if (map) {\r\n const mapEvents = map.events;\r\n mapEvents.remove('moveend', self._updateMarkers);\r\n mapEvents.remove('move', self._mapMoved);\r\n mapEvents.remove('sourcedata', self._sourceUpdated);\r\n }\r\n\r\n self._clearCache(false);\r\n self._map = null;\r\n\r\n super.onRemove();\r\n }\r\n\r\n /*********************\r\n * Private methods\r\n *********************/\r\n\r\n /** Event handler for when the map moves. */\r\n private _mapMoved = () => {\r\n if (this._options.updateWhileMoving) {\r\n this._updateMarkers();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the source class of the layer.\r\n */\r\n private _getSourceClass(): azmaps.source.Source {\r\n const self = this;\r\n const s = self.getSource();\r\n if (typeof s === 'string' && self._map !== null) {\r\n return self._map.sources.getById(s);\r\n } else if (s instanceof azmaps.source.Source) {\r\n return s;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Event handler for when a data source in the map changes.\r\n */\r\n private _sourceUpdated = (e) => {\r\n const s = this._getSourceClass();\r\n \r\n if (s && s.getId() === e.source.id) {\r\n //this._clearCache(true);\r\n\r\n //Check to see if there is a timer already waiting, if so, remove it.\r\n if(this._timer){\r\n clearTimeout(this._timer);\r\n }\r\n\r\n //Wait 33ms (~30 frames per second) before processing the update. This will help throttle updates.\r\n //@ts-ignore\r\n this._timer = setTimeout(this._sourceUpdater, 33);\r\n }\r\n }\r\n\r\n /**\r\n * Throttled event handler for updating the clearing cache.\r\n */\r\n private _sourceUpdater = () => {\r\n //Clear the timer.\r\n this._timer = null;\r\n\r\n //Clear the cache and force an update if the data source has changed.\r\n this._clearCache(true);\r\n }\r\n\r\n /**\r\n * Clears the marker cache.\r\n * @param update A boolean indicating if the layer should rerender/update after clearing the cache.\r\n */\r\n private _clearCache(update): void {\r\n const self = this;\r\n\r\n self._markerCache = {}; //Clear marker cache. \r\n if (self._map) {\r\n for (let i = 0, len = self._markers.length; i < len; i++) {\r\n const m = self._markers[i];\r\n //Remove wrapped events from marker.\r\n self._removeEvents(m)\r\n m._eventsAttached = false;\r\n\r\n //Remove marker from map.\r\n self._map.markers.remove(m);\r\n }\r\n }\r\n self._markers = [];\r\n self._markerIds = [];\r\n\r\n if (update) {\r\n self._updateMarkers();\r\n }\r\n }\r\n\r\n /**\r\n * Main function that updates all displayed markers on the map.\r\n */\r\n private _updateMarkers = () => {\r\n const self = this;\r\n const map = self._map;\r\n const markers = self._markers;\r\n const opt = self._options;\r\n const zoom = (map) ? map.getCamera().zoom : undefined;\r\n\r\n if (opt.visible && zoom !== undefined && zoom >= opt.minZoom && zoom <= opt.maxZoom) {\r\n //TODO: Bug: this doesn't currently return clusters. Using underlying code to work around this.\r\n //const shapes = map.layers.getRenderedShapes(null, self, opt.filter);\r\n\r\n const source = self.getSource();\r\n const sourceId = (typeof source === 'string')? source : source.getId();\r\n\r\n //@ts-ignore\r\n const shapes = map.map.querySourceFeatures(sourceId, {\r\n sourceLayer: self.getOptions().sourceLayer,\r\n filter: opt.filter\r\n });\r\n\r\n const newMarkers = [];\r\n const newMarkerIds = [];\r\n\r\n let id: string;\r\n let properties: any;\r\n let position: azmaps.data.Position;\r\n let shape: azmaps.Shape;\r\n let feature: azmaps.data.Feature;\r\n let marker: ExtendedHtmlMarker;\r\n\r\n for (let i = 0, len = shapes.length; i < len; i++) {\r\n marker = null;\r\n\r\n if (shapes[i] instanceof azmaps.Shape) {\r\n shape = shapes[i];\r\n\r\n if (shape.getType() === 'Point') {\r\n position = shape.getCoordinates();\r\n properties = shape.getProperties();\r\n id = shape.getId();\r\n }\r\n } else {\r\n feature = >shapes[i];\r\n\r\n if (feature.geometry.type === 'Point') {\r\n position = feature.geometry.coordinates;\r\n properties = feature.properties;\r\n\r\n //Check to see if the point represents a clustered point from a GeoJSON data source. Vector tile sources may have cluster data, but may not align with the same property schema.\r\n if (properties && properties.cluster) {\r\n id = 'cluster_' + feature.properties.cluster_id;\r\n } else if (feature.id) {\r\n id = feature.id;\r\n }\r\n }\r\n }\r\n\r\n if (position) {\r\n marker = self._getMarker(id, position, properties);\r\n\r\n //Add marker events to wrap layer events.\r\n if (!marker._eventsAttached) {\r\n self._addEvents(marker);\r\n marker._eventsAttached = true;\r\n }\r\n\r\n if (marker) {\r\n if (marker.id) {\r\n newMarkerIds.push(marker.id);\r\n }\r\n\r\n if (!marker.id || self._markerIds.indexOf(marker.id) === -1) {\r\n newMarkers.push(marker);\r\n map.markers.add(marker);\r\n }\r\n }\r\n }\r\n }\r\n\r\n //Remove all markers that are no longer in view. \r\n for (let i = markers.length - 1; i >= 0; i--) {\r\n if (!markers[i].id || newMarkerIds.indexOf(markers[i].id) === -1) {\r\n map.markers.remove(markers[i]);\r\n markers.splice(i, 1);\r\n }\r\n }\r\n\r\n self._markers = markers.concat(newMarkers);\r\n self._markerIds = newMarkerIds;\r\n } else if(self._markers.length > 0) {\r\n map.markers.remove(self._markers);\r\n self._markers = [];\r\n }\r\n }\r\n\r\n /**\r\n * Gets a marker either from cache or from the rendering callback.\r\n * @param id The id of the marker.\r\n * @param position The position of the marker.\r\n * @param properties The properties of the marker.\r\n */\r\n private _getMarker(id: string, position: azmaps.data.Position, properties: any): ExtendedHtmlMarker {\r\n const self = this;\r\n const markerCache = self._markerCache;\r\n const opt = self._options;\r\n\r\n if(!id){\r\n //If no id, create an ID based on the position and properties.\r\n id = position.join(',') + JSON.stringify(properties || {});\r\n }\r\n\r\n //Check cache for existing marker.\r\n if (markerCache[id]) {\r\n return markerCache[id];\r\n } else {\r\n const m: ExtendedHtmlMarker = opt.markerCallback(id, position, properties);\r\n if (m) {\r\n m.properties = properties;\r\n m.id = id;\r\n\r\n //Make sure position is set.\r\n m.setOptions({\r\n position: position\r\n });\r\n\r\n //markerCache[id] = m;\r\n\r\n return m;\r\n }\r\n\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Wraps all events on a marker.\r\n * @param marker Marker to wrap events on.\r\n */\r\n private _addEvents(marker: azmaps.HtmlMarker): void {\r\n const self = this;\r\n self._supportedEvents.forEach(e => {\r\n //@ts-ignore\r\n self.map.events.add(e, marker, self._wrappedEvent);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all wrapped events on a marker.\r\n * @param marker Marker to remove events from.\r\n */\r\n private _removeEvents(marker: azmaps.HtmlMarker): void {\r\n const self = this;\r\n self._supportedEvents.forEach(e => {\r\n //@ts-ignore\r\n self.map.events.remove(e, marker, self._wrappedEvent);\r\n });\r\n }\r\n\r\n /**\r\n * A simple event handler wrapper.\r\n * @param e Event arg. Will be a TargetedEvent from an HTML Marker.\r\n */\r\n private _wrappedEvent = (e) => {\r\n this.map.events.invoke(e.type, this, e);\r\n }\r\n}","import * as azmaps from \"azure-maps-control\";\r\nimport { PieChartMarkerOptions } from './PieChartMarkerOptions';\r\nimport { ExtendedHtmlMarker } from './ExtendedHtmlMarker';\r\n\r\n/**\r\n * A class for creating Pie Charts as HTML Markers on a map. \r\n */\r\nexport class PieChartMarker extends azmaps.HtmlMarker implements ExtendedHtmlMarker {\r\n /********************\r\n * Private Properties\r\n ********************/\r\n\r\n private _options = {\r\n values: [],\r\n radius: 40,\r\n colors: ['#d7191c', '#fdae61', '#ffffbf', '#abdda4', '#2b83ba'],\r\n fillColor: 'transparent',\r\n strokeWidth: 0,\r\n strokeColor: '#666666',\r\n innerRadius: 0\r\n };\r\n\r\n /** The total of all values. */\r\n private _total: number = 0;\r\n\r\n /** Additional colors to use when enough haven't been specified. */\r\n public static _moreColors = [];\r\n\r\n /********************\r\n * Constructor\r\n ********************/\r\n\r\n /**\r\n * Creates an HTML Marker in the shape of a pie chart.\r\n * @param options Options for rendering the Pie Chart marker.\r\n */\r\n constructor(options: PieChartMarkerOptions) {\r\n super(options);\r\n super.setOptions({\r\n htmlContent: document.createElement('div'),\r\n pixelOffset: [0, 0],\r\n anchor: 'center'\r\n });\r\n\r\n this.setOptions(options);\r\n }\r\n\r\n /********************\r\n * Public Methods\r\n ********************/\r\n\r\n /** ID of the marker. */\r\n public id: string;\r\n\r\n /** Any additional properties that you want to store with the marker. */\r\n public properties: any = {};\r\n\r\n /**\r\n * Gets the total value of all slices summed togehter.\r\n * @returns The total value of all slices summed togehter.\r\n */\r\n public getTotalValue(): number {\r\n return this._total;\r\n }\r\n\r\n /**\r\n * Gets the value of a slice of the pie based on it's index.\r\n * @param idx The index of the slice.\r\n * @returns The value of a slice of the pie based on it's index.\r\n */\r\n public getSliceValue(idx: number): number {\r\n const vals = this._options.values;\r\n return (idx >= 0 && idx < vals.length) ? vals[idx] : 0;\r\n }\r\n\r\n /**\r\n * Gets the percentage value of a slice of the pie based on it's index. \r\n * @param idx The index of the slice.\r\n * @returns The percentage value of a slice of the pie based on it's index.\r\n */\r\n public getSlicePercentage(idx: number): number {\r\n const self = this;\r\n return (self._total > 0) ? Math.round(self.getSliceValue(idx) / self._total * 10000) / 100 : 0;\r\n }\r\n\r\n /**\r\n * Gets the options of the pie chart marker.\r\n * @returns The options of the pie chart marker.\r\n */\r\n public getOptions(): PieChartMarkerOptions {\r\n return Object.assign({}, super.getOptions(), this._options);\r\n }\r\n\r\n /**\r\n * Sets the options of the pie chart marker.\r\n * @param options The options to set on the marker.\r\n */\r\n public setOptions(options: PieChartMarkerOptions): void {\r\n const self = this;\r\n const opt = self._options;\r\n const stringify = JSON.stringify;\r\n let rerender = false;\r\n\r\n if (options.radius && options.radius > 0 && options.radius != opt.radius) {\r\n opt.radius = options.radius;\r\n rerender = true;\r\n }\r\n\r\n if (options.innerRadius >= 0 && options.innerRadius != opt.innerRadius) {\r\n opt.innerRadius = options.innerRadius;\r\n rerender = true;\r\n }\r\n if (options.colors && stringify(options.colors) !== stringify(opt.colors)) {\r\n opt.colors = options.colors;\r\n rerender = true;\r\n }\r\n\r\n if (options.fillColor && stringify(options.fillColor) !== stringify(opt.fillColor)) {\r\n opt.fillColor = options.fillColor;\r\n rerender = true;\r\n }\r\n\r\n if (options.strokeColor && options.strokeColor !== opt.strokeColor) {\r\n opt.strokeColor = options.strokeColor;\r\n rerender = true;\r\n }\r\n\r\n if (options.strokeWidth >= 0 && options.strokeWidth != opt.strokeWidth) {\r\n opt.strokeWidth = options.strokeWidth;\r\n rerender = true;\r\n }\r\n\r\n if (options.tooltipCallback !== undefined && opt.tooltipCallback != options.tooltipCallback) {\r\n opt.tooltipCallback = options.tooltipCallback;\r\n rerender = true;\r\n }\r\n\r\n if (options.values && stringify(options.values) !== stringify(opt.values)) {\r\n opt.values = options.values;\r\n rerender = true;\r\n }\r\n\r\n if (options.text !== opt.text) {\r\n //opt.text = options.text;\r\n super.setOptions({ text: options.text });\r\n rerender = true;\r\n }\r\n\r\n if (options.textClassName !== opt.textClassName) {\r\n opt.textClassName = options.textClassName;\r\n rerender = true;\r\n }\r\n\r\n if (rerender) {\r\n self._render();\r\n }\r\n\r\n super.setOptions(options);\r\n }\r\n\r\n /********************\r\n * Private Methods\r\n ********************/\r\n\r\n /**\r\n * Method that generates the SVG pie chart for the marker.\r\n */\r\n private _render() {\r\n const self = this;\r\n const opt = self._options;\r\n const data = opt.values;\r\n const radius = opt.radius;\r\n\r\n let startAngle = 0, angle = 0;\r\n\r\n if (data) {\r\n self._total = data.reduce((a, b) => {\r\n return a + b;\r\n }, 0);\r\n\r\n //Ensure that there are enough colors defined.\r\n const moreColors = PieChartMarker._moreColors;\r\n const random = Math.random;\r\n const round = Math.round;\r\n let mIdx = 0;\r\n\r\n while (data.length > opt.colors.length) {\r\n //Generate additional random colors, but try and stagger them such that there is a good variation between agenct colors.\r\n if (moreColors.length < data.length) {\r\n moreColors.push(`hsl(${round(random() * 360)},${round(random() * 20) + 70}%,${round(random() * 40) + 30}%)`);\r\n }\r\n\r\n //Grab the next additional color from the global pallet.\r\n opt.colors.push(moreColors[mIdx]);\r\n mIdx++;\r\n }\r\n\r\n //Origin for cx/cy\r\n const o = radius + opt.strokeWidth;\r\n const svg = [``];\r\n\r\n let tooltip = '';\r\n let maskId: string;\r\n\r\n if (opt.innerRadius > 0 && opt.innerRadius <= opt.radius) {\r\n maskId = 'piechart-innercircle-' + round(random() * 10000000);\r\n \r\n svg.push(`\r\n `);\r\n }\r\n\r\n if (self._total > 0) {\r\n const ttc = opt.tooltipCallback;\r\n const ratio = Math.PI * 2 / self._total;\r\n for (let i = 0; i < data.length; i++) {\r\n angle = ratio * data[i];\r\n\r\n if (ttc) {\r\n tooltip = ttc(self, i);\r\n }\r\n\r\n const c = (i < opt.colors.length) ? opt.colors[i] : moreColors[i];\r\n\r\n svg.push(self._createSlice(o, o, radius, startAngle, angle, c, tooltip, maskId));\r\n startAngle += angle;\r\n }\r\n }\r\n\r\n const text = super.getOptions().text;\r\n if (text !== undefined) {\r\n svg.push(`${text}`);\r\n }\r\n\r\n svg.push('');\r\n\r\n (super.getOptions().htmlContent).innerHTML = svg.join('');\r\n }\r\n }\r\n\r\n /**\r\n * Generates the SVG path for an arc slice of a pie.\r\n * @param cx Center x-origin of the arc.\r\n * @param cy Center y-origin of the arc.\r\n * @param r Radius of arc.\r\n * @param startAngle The start angle of the arc (0 = up, PI/2 = right, PI = down, 3/2 PI = left)\r\n * @param angle The angle width of the arc.\r\n * @param fillColor The fill color of the path.\r\n * @param tooltip The tooltip text to display when hovered.\r\n */\r\n private _createSlice(cx: number, cy: number, r: number, startAngle: number, angle: number, fillColor: string, tooltip: string, maskId: string): string {\r\n const opt = this._options;\r\n const pi = Math.PI;\r\n let mask = '';\r\n\r\n if(maskId){\r\n mask = ` mask=\"url(#${maskId}\"`;\r\n }\r\n\r\n if (angle > 2 * pi * 0.99) {\r\n //If the shape is nearly a complete circle, create a circle instead of an arc.\r\n return `${tooltip}`;\r\n }\r\n\r\n const sin = Math.sin;\r\n const cos = Math.cos;\r\n\r\n const x1 = cx + r * sin(startAngle);\r\n const y1 = cy - r * cos(startAngle);\r\n const x2 = cx + r * sin(startAngle + angle);\r\n const y2 = cy - r * cos(startAngle + angle);\r\n\r\n const x21 = cx + opt.innerRadius * sin(startAngle);\r\n const y21 = cy - opt.innerRadius * cos(startAngle);\r\n const x22 = cx + opt.innerRadius * sin(startAngle + angle);\r\n const y22 = cy - opt.innerRadius * cos(startAngle + angle);\r\n\r\n //Flag for when arcs are larger than 180 degrees in radians.\r\n let big = 0;\r\n if (angle > pi) {\r\n big = 1;\r\n }\r\n\r\n return `${tooltip}`;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Token } from '../models/token';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AzureService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getClientId() {\r\n return this._http.get('/v1/azureMaps/clientId', { responseType: 'text' });\r\n }\r\n\r\n public getToken() {\r\n return this._http.get('/v1/azureMaps/token', { responseType: 'json' });\r\n }\r\n}","
\r\n
\r\n
\r\n
\r\n Click on the map to add points to your polygon.\r\n
\r\n You do not need to close the polygon, a final point is added automatically.\r\n
\r\n Click the check mark when you are finished adding points to complete the polygon.\r\n
\r\n
\r\n Click and drag to draw a rectangle.\r\n
\r\n
\r\n Drag points to manipulate the shape.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n Enable Performance Cookies to view map.\r\n Cookie Settings\r\n
\r\n
\r\n","/* Angular */\r\nimport {\r\n Component, ComponentFactoryResolver, ComponentRef,\r\n ElementRef, EventEmitter, Inject,\r\n Injector, Input, Output,\r\n ViewChild, ViewContainerRef, SimpleChanges,\r\n AfterViewInit, OnDestroy, ApplicationRef,\r\n ContentChild, NgZone\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';\r\n\r\n/* RxJS */\r\nimport { BehaviorSubject, EMPTY, Subject, from } from 'rxjs';\r\nimport { catchError, debounceTime, map, switchMap, take, takeUntil, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n/* Models */\r\nimport { Token } from '@rfv/modules/core/models/token'\r\nimport _ from 'lodash';\r\nimport * as atlas from 'azure-maps-control';\r\nimport { drawing } from 'azure-maps-drawing-tools';\r\nimport { ControlStub, FullscreenControl, HtmlMarkerLayer, PieChartMarker } from './extensions';\r\nimport { IMapMarker, createMarkerSvg, IMapMarkerIcon } from './marker';\r\nimport { IMapGeoFence } from './geofence';\r\nimport { IMapCluster } from './cluster';\r\nimport * as polylabel from './polylabel';\r\nimport { InvolveMapToolbarComponent } from './toolbar.component';\r\nimport { InvolveMapTooltipComponent, InvolveMapTooltipDirective } from './tooltip.component';\r\n\r\n/* Services */\r\nimport { AzureService } from '@rfv/modules/core/services/azure.service';\r\nimport { OneTrustService } from '@rfv/modules/core/services/onetrust.service';\r\n\r\nlet __id = 0;\r\n\r\n\r\n@Component({\r\n selector: 'involve-map',\r\n templateUrl: 'map.component.html',\r\n styleUrls: ['map.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class InvolveMapComponent implements AfterViewInit, OnDestroy {\r\n\r\n /**\r\n * Enable auto clustering.\r\n */\r\n @Input()\r\n public autoCluster: boolean = true;\r\n\r\n /**\r\n * Auto cluster value field.\r\n */\r\n @Input()\r\n public clusterOn: string = 'title';\r\n\r\n /**\r\n * Auto cluster color field.\r\n */\r\n @Input()\r\n public clusterColor: string = 'color1';\r\n\r\n /**\r\n * Maximum zoom level\r\n */\r\n @Input()\r\n public maxZoom = 23;\r\n\r\n /**\r\n * Map marker clusters.\r\n */\r\n @Input()\r\n public get clusters() { return this._clusters; }\r\n public set clusters(value: IMapCluster[]) {\r\n this.autoCluster = false;\r\n this._clusters = value;\r\n }\r\n\r\n private _clusters: IMapCluster[];\r\n\r\n /**\r\n * Map markers.\r\n */\r\n @Input()\r\n public get markers() { return this._markers; }\r\n public set markers(value: IMapMarker[]) {\r\n if (!_.isEqual(this._markers, value)) {\r\n this._markers = value;\r\n this.invalidateMarkers();\r\n }\r\n }\r\n\r\n private _markers: IMapMarker[] = [];\r\n\r\n /**\r\n * Enable markers.\r\n */\r\n @Input()\r\n public get enableMarkers() { return this._enableMarkers; }\r\n public set enableMarkers(value: boolean) {\r\n this._enableMarkers = value;\r\n this.invalidateMarkers();\r\n }\r\n\r\n private _enableMarkers: boolean = true;\r\n\r\n /**\r\n * Map tracking markers.\r\n */\r\n @Input()\r\n public get trackingMarkers() { return this._trackingMarkers; }\r\n public set trackingMarkers(value: IMapMarker[]) {\r\n if (!_.isEqual(this._trackingMarkers, value)) {\r\n this._trackingMarkers = value;\r\n this.invalidateTracking();\r\n }\r\n }\r\n\r\n private _trackingMarkers: IMapMarker[] = [];\r\n\r\n /**\r\n * Enable \"tracking\" - lines will be shown between tracking markers with the same trackBy\r\n */\r\n @Input()\r\n public get enableTracking() { return this._enableTracking; }\r\n public set enableTracking(value: boolean) {\r\n this._enableTracking = value;\r\n this.invalidateTracking();\r\n }\r\n\r\n private _enableTracking: boolean = false;\r\n\r\n private _trackingDataSource: atlas.source.DataSource;\r\n private _trackingMarkerLayer: atlas.layer.SymbolLayer;\r\n private _trackingLineLayer: atlas.layer.LineLayer;\r\n private _trackingLineSymbolLayer: atlas.layer.SymbolLayer;\r\n\r\n /**\r\n * Map marker icons.\r\n */\r\n @Input()\r\n public get markerIcons() { return this._markerIcons; }\r\n public set markerIcons(value: IMapMarkerIcon[]) {\r\n this._markerIcons = value;\r\n this.invalidateImageSprites();\r\n }\r\n\r\n private _markerIcons: IMapMarkerIcon[] = [];\r\n\r\n /**\r\n * Map marker geofences.\r\n */\r\n @Input()\r\n public get geofences() { return this._geoFences; }\r\n public set geofences(value: IMapGeoFence[]) {\r\n if (!_.isEqual(this._geoFences, value)) {\r\n this._geoFences = value;\r\n this.invalidateGeoFences();\r\n }\r\n }\r\n\r\n @Input()\r\n public tooltip: InvolveMapTooltipDirective;\r\n\r\n @ContentChild(InvolveMapTooltipDirective, { static: false })\r\n private _contentTooltip: InvolveMapTooltipDirective;\r\n\r\n private get tooltipTemplateRef() {\r\n return this.tooltip?.templateRef || this._contentTooltip?.templateRef || null;\r\n }\r\n\r\n @Output()\r\n public geofenceChange = new EventEmitter<{ ref: number, name: string, fillColor: string, lineColor: string, alpha: number, vertices: IMapGeoFence['vertices'] }>();\r\n\r\n /**\r\n * The map has init - it is safe to set camera.\r\n */\r\n @Output() mapInit = new EventEmitter();\r\n\r\n /**\r\n * The map is displayed.\r\n */\r\n @Output() mapLoad = new EventEmitter();\r\n\r\n private _geoFences: IMapGeoFence[];\r\n\r\n private _geofenceDataSource: atlas.source.DataSource;\r\n private _geofenceClusterLayer: HtmlMarkerLayer;\r\n private _geofenceMarkerLayer: atlas.layer.SymbolLayer;\r\n private _geofencePolygonLayer: atlas.layer.PolygonLayer;\r\n private _geofencePolygonLineLayer: atlas.layer.LineLayer;\r\n\r\n @Input()\r\n public geofenceEditMode: boolean = false;\r\n\r\n @Input()\r\n public canEditGeoFences: boolean = false;\r\n\r\n @Output()\r\n public geofenceEditModeChange = new EventEmitter();\r\n\r\n @Input()\r\n public showToolbar: boolean = true;\r\n\r\n @Input()\r\n public showClusteringButton: boolean = true;\r\n\r\n @Input()\r\n public showGeoFenceButton: boolean = true;\r\n\r\n @Input()\r\n public showGeoFencePolygonTooltips: boolean = true;\r\n\r\n @Input()\r\n public showHeatmapButton: boolean = true;\r\n\r\n public enableClustering = false;\r\n public showGeoFences = true;\r\n public enableHeatmap = false;\r\n public keepTemplateMarkerAlive = false;\r\n\r\n private _toolbarComponentRef: ComponentRef;\r\n private _toolbarOutlet: DomPortalOutlet;\r\n private _toolbarStub: ControlStub;\r\n\r\n //\r\n // Map elements/layers\r\n //\r\n\r\n @ViewChild('map', { static: true })\r\n private _elementRef: ElementRef;\r\n\r\n private _map: atlas.Map;\r\n\r\n public _popup: atlas.Popup;\r\n private _popupId = `involve-map-popup-${__id++}`;\r\n private _popupComponentRef: ComponentRef;\r\n\r\n private _popupOverlayRef: OverlayRef;\r\n private _popupPortal: ComponentPortal;\r\n\r\n private _dataSource: atlas.source.DataSource;\r\n private _clusterLayer: HtmlMarkerLayer;\r\n private _markerLayer: atlas.layer.SymbolLayer;\r\n private _heatmapLayer: atlas.layer.HeatMapLayer;\r\n\r\n private _drawingColor: string;\r\n private _drawingManager: drawing.DrawingManager;\r\n\r\n private _selectedGeofenceRef: number | null = null;\r\n\r\n public get drawMode() {\r\n if (!this._drawingManager)\r\n return null;\r\n\r\n const options = this._drawingManager.getOptions();\r\n return options?.mode;\r\n }\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n private _token: Token = null;\r\n\r\n private _mapInit = false;\r\n private _mapReady = false;\r\n public get mapReady() { return this._mapReady; }\r\n\r\n private _hasPerformance: boolean;\r\n public get hasPerformance() { return this._hasPerformance };\r\n\r\n private _markersInit = false;\r\n private _geoFencesInit = false;\r\n private _drawingManagerInit = false;\r\n private _trackingInit = false;\r\n\r\n private _invalidatingMarkerIcons = false;\r\n private _invalidatingMarkers = false;\r\n private _invalidatingGeoFences = false;\r\n private _invalidatingTracking = false;\r\n\r\n public get invalidating() { return this._invalidatingMarkerIcons || this._invalidatingMarkers || this._invalidatingGeoFences || this._invalidatingTracking }\r\n\r\n public constructor(\r\n @Inject(DOCUMENT)\r\n private _document: Document,\r\n\r\n private _app: ApplicationRef,\r\n private _injector: Injector,\r\n private _componentFactoryResolver: ComponentFactoryResolver,\r\n private _overlay: Overlay,\r\n private _viewContainerRef: ViewContainerRef,\r\n\r\n private _store: Store,\r\n private _rootStore: Store,\r\n private _zone: NgZone,\r\n private _azureService: AzureService,\r\n public oneTrustService: OneTrustService\r\n ) { }\r\n\r\n public ngOnDestroy() {\r\n this._popup?.close();\r\n\r\n if (this._toolbarOutlet?.hasAttached())\r\n this._toolbarOutlet.detach();\r\n\r\n if (this._popupOverlayRef?.hasAttached())\r\n this._popupOverlayRef.detach();\r\n\r\n if (this._drawingManager)\r\n this._drawingManager.dispose();\r\n\r\n if (this._map)\r\n this._map.dispose();\r\n\r\n this._map = null;\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if ('showToolbar' in changes && !changes.showToolbar.firstChange) {\r\n if (this.showToolbar) {\r\n this.attachToolbar();\r\n } else {\r\n this.detachToolbar();\r\n }\r\n }\r\n\r\n if (this._toolbarOutlet?.hasAttached()) {\r\n if ('canEditGeofences' in changes && !changes.canEditGeofences.firstChange)\r\n this._toolbarComponentRef.instance.canEdit = this.canEditGeoFences;\r\n\r\n if ('geofenceEditMode' in changes && !changes.geofenceEditMode.firstChange)\r\n this._toolbarComponentRef.instance.editMode = this.geofenceEditMode;\r\n\r\n if ('drawMode' in changes && !changes.drawMode.firstChange)\r\n this._toolbarComponentRef.instance.drawMode = this.drawMode;\r\n }\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this._rootStore.select(fromRoot.OneTrust.hasPerformance).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe((hasPerformance) => {\r\n this._hasPerformance = hasPerformance;\r\n hasPerformance ? this.init() : this.dispose();\r\n });\r\n }\r\n\r\n private init(): void {\r\n // create map\r\n this._azureService.getClientId().pipe(\r\n take(1),\r\n withLatestFrom(this._store.select(fromCore.UserSession.getSessionThemeId))\r\n ).subscribe(([clientId, themeId]) => {\r\n this._map = new atlas.Map(this._elementRef.nativeElement, {\r\n authOptions: {\r\n authType: atlas.AuthenticationType.anonymous,\r\n clientId,\r\n getToken: (resolve, reject) => {\r\n if (this._token) {\r\n const now = Date.now();\r\n const expiry = new Date(this._token.expiration).getTime();\r\n\r\n if (expiry > now + 30000 /* 30s buffer */) {\r\n resolve(this._token.accessToken);\r\n return;\r\n }\r\n }\r\n\r\n this._azureService.getToken().pipe(\r\n take(1),\r\n catchError(err => {\r\n reject(err);\r\n return EMPTY;\r\n })\r\n ).subscribe(token => {\r\n this._token = token;\r\n resolve(this._token.accessToken);\r\n })\r\n\r\n }\r\n },\r\n\r\n autoResize: true,\r\n center: [0, 0],\r\n\r\n minZoom: 1,\r\n maxZoom: this.maxZoom,\r\n\r\n style: themeId === 1 ? 'night' : 'road',\r\n\r\n showBuildingModels: false,\r\n showFeedbackLink: false,\r\n showLogo: false,\r\n view: 'Auto',\r\n language: 'en-US'\r\n });\r\n\r\n // post-init\r\n this._map.events.add('ready', e => {\r\n this._zone.run(() => {\r\n // create controls\r\n this._toolbarStub = new ControlStub();\r\n this._map.controls.add(this._toolbarStub, {\r\n position: atlas.ControlPosition.TopLeft\r\n });\r\n\r\n this._map.controls.add(new atlas.control.CompassControl({ style: atlas.ControlStyle.auto, rotationDegreesDelta: 15 }), {\r\n position: atlas.ControlPosition.BottomRight\r\n });\r\n\r\n this._map.controls.add(new atlas.control.PitchControl({ style: atlas.ControlStyle.auto, pitchDegreesDelta: 10 }), {\r\n position: atlas.ControlPosition.BottomRight\r\n });\r\n\r\n this._map.controls.add(new atlas.control.ZoomControl({ style: atlas.ControlStyle.auto, zoomDelta: 1 }), {\r\n position: atlas.ControlPosition.BottomRight\r\n });\r\n\r\n this._map.controls.add(new atlas.control.StyleControl({\r\n style: atlas.ControlStyle.auto,\r\n mapStyles: [\r\n \"road\",\r\n \"satellite_road_labels\",\r\n \"grayscale_dark\",\r\n \"night\"\r\n ]\r\n }), {\r\n position: atlas.ControlPosition.BottomRight\r\n });\r\n\r\n this._map.controls.add(new FullscreenControl({ style: atlas.ControlStyle.auto }), {\r\n position: atlas.ControlPosition.BottomRight\r\n });\r\n\r\n // attach toolbar component\r\n this.attachToolbar();\r\n\r\n // create re-usable popup stub - this will be used to inject an angular component\r\n this._popup = new atlas.Popup({\r\n content: `
`,\r\n closeButton: false,\r\n pixelOffset: [-10, -12],\r\n showPointer: false\r\n });\r\n\r\n // create popup overlay\r\n this._popupOverlayRef = this._overlay.create({ hasBackdrop: false });\r\n\r\n // create popup portal\r\n this._popupPortal = new ComponentPortal(\r\n InvolveMapTooltipComponent,\r\n this._viewContainerRef,\r\n this._injector,\r\n this._componentFactoryResolver\r\n );\r\n\r\n this._map.events.add('zoomstart', e => {\r\n this.closePopup(true);\r\n });\r\n\r\n const mouseMove = new Subject();\r\n\r\n mouseMove.pipe(\r\n debounceTime(50), // throttle\r\n takeUntil(this._destroyed$),\r\n switchMap(e => from(this.getMarkersInProximity(e.position)).pipe(\r\n map(result => [e, result] as [ atlas.MapMouseEvent, [ IMapMarker[], IMapMarker[], IMapGeoFence[], IMapMarker[] ] ])\r\n ))\r\n ).subscribe(([e, [ markers, cluster, geoFences, tracking ]]) => {\r\n this._zone.run(() => {\r\n if (!markers.length && !cluster.length && !geoFences.length && !tracking.length) {\r\n this.closePopup(true);\r\n return;\r\n }\r\n\r\n // open popup\r\n if (!this.openPopup(e.position))\r\n return;\r\n\r\n this._popupComponentRef.instance.cluster = cluster;\r\n this._popupComponentRef.instance.geoFences = geoFences;\r\n this._popupComponentRef.instance.markers = markers;\r\n this._popupComponentRef.instance.tracking = tracking;\r\n this._popupComponentRef.changeDetectorRef.detectChanges();\r\n });\r\n })\r\n\r\n this._map.events.add('mousemove', e => mouseMove.next(e));\r\n\r\n this.mapInit.emit();\r\n this._mapInit = true;\r\n\r\n // invalidate\r\n this.invalidateImageSprites().then(() => setTimeout(() => this._zone.run(() => {\r\n this.mapLoad.emit();\r\n this._mapReady = true;\r\n }), 100));\r\n });\r\n });\r\n });\r\n }\r\n\r\n private dispose(): void {\r\n this._popup?.close();\r\n\r\n if (this._drawingManager)\r\n this._drawingManager.dispose();\r\n\r\n if (this._map)\r\n this._map.dispose();\r\n\r\n if (this._toolbarOutlet?.hasAttached())\r\n this._toolbarOutlet.detach();\r\n\r\n if (this._popupOverlayRef?.hasAttached())\r\n this._popupOverlayRef.detach();\r\n\r\n this._map\r\n = this._drawingManager\r\n = this._popup\r\n = this._toolbarOutlet\r\n = this._popupOverlayRef\r\n = this._clusterLayer\r\n = this._markerLayer\r\n = this._heatmapLayer = null;\r\n\r\n this._mapInit\r\n = this._mapReady\r\n = this._geoFencesInit\r\n = this._drawingManagerInit\r\n = this._trackingInit = false;\r\n }\r\n\r\n public ngAfterContentChecked() {\r\n if (!this._mapReady)\r\n return;\r\n\r\n const canvas = this._map?.getCanvas();\r\n\r\n if (!canvas)\r\n return;\r\n\r\n if (this._elementRef.nativeElement.clientWidth !== canvas.clientWidth ||\r\n this._elementRef.nativeElement.clientHeight !== canvas.clientHeight) {\r\n this._map.resize();\r\n }\r\n }\r\n\r\n public attachToolbar() {\r\n if (!this.showToolbar || !this._toolbarStub || this._toolbarOutlet?.hasAttached())\r\n return;\r\n\r\n this._zone.run(() => {\r\n // attach toolbar to control stub\r\n this._toolbarOutlet = new DomPortalOutlet(this._toolbarStub.stub, this._componentFactoryResolver, this._app, this._injector, this._document);\r\n this._toolbarComponentRef = this._toolbarOutlet.attachComponentPortal(\r\n new ComponentPortal(InvolveMapToolbarComponent, this._viewContainerRef, this._injector, this._componentFactoryResolver)\r\n );\r\n\r\n // map toolbar i/o\r\n this._toolbarComponentRef.instance.enableClustering = this.enableClustering;\r\n this._toolbarComponentRef.instance.enableClusteringChange.subscribe(enable => this.toggleClustering(enable));\r\n\r\n this._toolbarComponentRef.instance.showGeoFences = this.showGeoFences;\r\n this._toolbarComponentRef.instance.showGeoFencesChange.subscribe(visible => this.toggleGeoFences(visible));\r\n\r\n this._toolbarComponentRef.instance.enableHeatmap = this.enableHeatmap;\r\n this._toolbarComponentRef.instance.enableHeatmapChange.subscribe(visible => this.toggleHeatmap(visible));\r\n\r\n this._toolbarComponentRef.instance.canEdit = this.canEditGeoFences;\r\n this._toolbarComponentRef.instance.editMode = this.geofenceEditMode;\r\n this._toolbarComponentRef.instance.editModeChange.subscribe(editMode => this.setEditMode(editMode));\r\n\r\n this._toolbarComponentRef.instance.drawMode = this.drawMode;\r\n this._toolbarComponentRef.instance.drawModeChange.subscribe(drawMode => this.setDrawMode(drawMode));\r\n\r\n this._toolbarComponentRef.instance.showClusteringButton = this.showClusteringButton;\r\n this._toolbarComponentRef.instance.showGeoFenceButton = this.showGeoFenceButton;\r\n this._toolbarComponentRef.instance.showHeatmapButton = this.showHeatmapButton;\r\n\r\n this._toolbarComponentRef.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n public detachToolbar() {\r\n if (this._toolbarOutlet?.hasAttached())\r\n this._toolbarOutlet.detach();\r\n }\r\n\r\n public initTracking() {\r\n this._trackingDataSource = new atlas.source.DataSource();\r\n this._trackingMarkerLayer = this.createMarkerLayer(this._trackingDataSource);\r\n\r\n //Add a line layer for displaying the line.\r\n this._trackingLineLayer = new atlas.layer.LineLayer(this._trackingDataSource, null, {\r\n strokeWidth: 3,\r\n strokeDashArray: [1, 2]\r\n });\r\n\r\n //Add a symbol layer for rendering the arrow along the line.\r\n this._trackingLineSymbolLayer = new atlas.layer.SymbolLayer(\r\n this._trackingDataSource, null, {\r\n placement: 'line',\r\n iconOptions: {\r\n image: 'tracking-icon',\r\n allowOverlap: true,\r\n anchor: 'center'\r\n }\r\n });\r\n\r\n this._map.sources.add([ this._trackingDataSource ]);\r\n this._map.layers.add([ this._trackingLineLayer, this._trackingLineSymbolLayer, this._trackingMarkerLayer ], this._markerLayer);\r\n\r\n this._trackingInit = true;\r\n }\r\n\r\n public invalidateTracking() {\r\n if (!this._mapInit)\r\n return;\r\n\r\n this._invalidatingTracking = true;\r\n\r\n if (this._enableTracking && !this._trackingInit)\r\n this.initTracking();\r\n\r\n this._trackingMarkerLayer?.setOptions({ visible: this._enableTracking });\r\n this._trackingLineLayer?.setOptions({ visible: this._enableTracking });\r\n this._trackingLineSymbolLayer?.setOptions({ visible: this._enableTracking });\r\n this._trackingDataSource?.clear();\r\n\r\n if (!this._enableTracking) {\r\n this._invalidatingTracking = false;\r\n return;\r\n }\r\n\r\n if (this._trackingMarkers?.length > 0) {\r\n const groups = this._trackingMarkers.reduce((groups, marker) => {\r\n if (!marker.trackBy)\r\n return groups;\r\n\r\n if (!groups.has(marker.trackBy))\r\n groups.set(marker.trackBy, [ marker ]);\r\n else\r\n groups.get(marker.trackBy).push(marker);\r\n\r\n return groups;\r\n }, new Map);\r\n\r\n for (const [ trackBy, group ] of groups) {\r\n this._trackingDataSource.add(this.markersToShapes(group, 'tracking'));\r\n this._trackingDataSource.add(new atlas.data.LineString(group.map(marker => [ marker.longitude, marker.latitude ])));\r\n }\r\n }\r\n\r\n this._invalidatingTracking = false;\r\n }\r\n\r\n private invalidateImageSprites() {\r\n if (!this._mapInit)\r\n return;\r\n\r\n this._map.imageSprite.clear();\r\n\r\n const tasks: Promise[] = [\r\n this._map.imageSprite.createFromTemplate('tracking-icon', 'triangle-arrow-left', null, null, 0.5)\r\n ];\r\n\r\n if (this._markerIcons?.length) {\r\n this._markerIcons.forEach(markerIcon => {\r\n tasks.push(this._map.imageSprite.add(`involve-map-marker-${markerIcon.id}`, createMarkerSvg({ topColor: markerIcon.color1, bottomColor: markerIcon.color2, diameter: 20 })));\r\n });\r\n }\r\n\r\n return Promise.all(tasks).then(_ => {\r\n if (this._markers?.length)\r\n this.invalidateMarkers();\r\n\r\n if (this._geoFences?.length)\r\n this.invalidateGeoFences();\r\n\r\n if (this._trackingMarkers?.length)\r\n this.invalidateTracking();\r\n });\r\n }\r\n\r\n private initMarkers() {\r\n // TODO(modonnnell): version 2.3.7 seems to not update the clustering when calling dataSource.setOptions...\r\n // so I'm re-initing everything when clustering is toggled\r\n if (this._dataSource && this._clusterLayer && this._markerLayer && this._heatmapLayer) {\r\n this._map.layers.remove([this._clusterLayer, this._markerLayer, this._heatmapLayer]);\r\n this._map.sources.remove(this._dataSource);\r\n }\r\n\r\n // create data source\r\n this._dataSource = new atlas.source.DataSource();\r\n this.toggleDataSourceClustering(this.enableClustering, this._dataSource);\r\n\r\n // create cluster layer\r\n this._clusterLayer = this.createClusterLayer(this._dataSource, this.maxZoom);\r\n\r\n // create marker layer\r\n this._markerLayer = this.createMarkerLayer(this._dataSource);\r\n\r\n // create heatmap layer\r\n this._heatmapLayer = this.createHeatmapLayer(this._dataSource);\r\n\r\n // add layers to map\r\n this._map.sources.add([this._dataSource]);\r\n this._map.layers.add([this._clusterLayer, this._markerLayer, this._heatmapLayer]);\r\n\r\n this._markersInit = true;\r\n }\r\n\r\n public async toggleClustering(enable: boolean) {\r\n this.enableClustering = enable;\r\n\r\n // sigh.. see note above\r\n // this.toggleDataSourceClustering(this.enableClustering, this._dataSource);\r\n this.initMarkers()\r\n this.invalidateMarkers();\r\n\r\n this._popupOverlayRef.detach();\r\n this._popup.close();\r\n }\r\n\r\n public toggleDataSourceClustering(enable: boolean, dataSource: atlas.source.DataSource) {\r\n if (enable && this._clusters?.length) {\r\n dataSource.setOptions({\r\n cluster: true,\r\n clusterRadius: 100,\r\n // clusterMaxZoom: this.maxZoom,\r\n clusterProperties: {\r\n ...this._clusters.reduce((props, cluster, i) => {\r\n props[i] = ['+', ['case', ['==', ['get', 'clusterValue'], cluster.value], 1, 0]]\r\n return props;\r\n }, {})\r\n }\r\n });\r\n } else {\r\n dataSource.setOptions({ cluster: false });\r\n }\r\n }\r\n\r\n private initGeoFences() {\r\n this._geofenceDataSource = new atlas.source.DataSource(null, {\r\n buffer: 512, // reduces drawing artifacts but slower performance\r\n tolerance: 0\r\n });\r\n\r\n // create cluster layer (this is for geofence markers)\r\n this._geofenceClusterLayer = this.createClusterLayer(this._geofenceDataSource, this.maxZoom);\r\n\r\n // create marker layer (this is for unit markers when hideAssets is false)\r\n this._geofenceMarkerLayer = this.createMarkerLayer(this._geofenceDataSource);\r\n\r\n this._geofencePolygonLineLayer = new atlas.layer.LineLayer(this._geofenceDataSource, null, {\r\n filter: ['case', ['has', 'polygon'], ['get', 'visible'], false ],\r\n strokeColor: ['get', 'strokeColor'],\r\n strokeWidth: ['get', 'strokeWidth']\r\n });\r\n\r\n this._geofencePolygonLayer = new atlas.layer.PolygonLayer(this._geofenceDataSource, null, {\r\n filter: ['case', ['has', 'polygon'], ['get', 'visible'], false ],\r\n fillColor: ['get', 'fillColor'],\r\n fillOpacity: ['get', 'fillOpacity']\r\n });\r\n\r\n this._map.sources.add(this._geofenceDataSource);\r\n this._map.layers.add([this._geofencePolygonLayer, this._geofencePolygonLineLayer, this._geofenceClusterLayer, this._geofenceMarkerLayer]);\r\n\r\n this._geoFencesInit = true;\r\n }\r\n\r\n private initDrawingManager() {\r\n // when we edit a geofence, it will be hidden from the above layers and pushed into the drawing manager\r\n this._drawingManager = new drawing.DrawingManager(this._map, {\r\n interactionType: drawing.DrawingInteractionType.click,\r\n shapeRotationEnabled: false\r\n });\r\n\r\n // set the expression needed on the drawing layers for existing objects\r\n this.setDrawingColor();\r\n\r\n // attach color used to draw to the shape properties\r\n this._map.events.add('drawingcomplete', this._drawingManager, e => {\r\n const props = e.getProperties();\r\n\r\n if (!props.fillColor) {\r\n e.addProperty('fillColor', this._drawingColor);\r\n e.addProperty('lineColor', this._drawingColor);\r\n e.addProperty('alpha', 0.1);\r\n\r\n this._zone.run(() => this.emitGeofenceChangeEvent(e));\r\n\r\n // update drawing color (for next shape)\r\n setTimeout(() => this.setDrawingColor(), 1000);\r\n }\r\n });\r\n\r\n // this._map.events.add('drawingchanged', this._drawingManager, e => {\r\n // const props = e.getProperties();\r\n // console.log(this._drawingManager);\r\n // this.emitGeofenceChangeEvent(e, props.ref);\r\n // });\r\n\r\n // the drawing manager 'changed' event doesn't fire when in edit-geometry mode, so manually detect changes and emit on mouseup for now\r\n // see: https://feedback.azure.com/forums/909172-azure-maps/suggestions/42441205-drawing-events-fire-when-a-shape-is-being-entered\r\n this._map.events.add('mouseup', e => {\r\n if (this.drawMode === drawing.DrawingMode.editGeometry) {\r\n const dataSource = this._drawingManager.getSource();\r\n const shape = dataSource.getShapes()[0];\r\n\r\n if (!shape)\r\n return;\r\n\r\n const props = shape.getProperties();\r\n const geofence = this._geoFences[props.geofenceRef];\r\n\r\n if (!geofence)\r\n return;\r\n\r\n const coords = shape.getCoordinates()[0] as atlas.data.Position[];\r\n\r\n if (geofence) {\r\n if (geofence.vertices.length !== coords.length) {\r\n this._zone.run(() => this.emitGeofenceChangeEvent(shape, props.geofenceRef));\r\n return true;\r\n } else if (geofence.vertices.some((vertex, i) => vertex.lng !== coords[i][0] || vertex.lat !== coords[i][1])) {\r\n this._zone.run(() => this.emitGeofenceChangeEvent(shape, props.geofenceRef));\r\n return true;\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._drawingManagerInit = true;\r\n }\r\n\r\n public toggleGeoFences(visible: boolean) {\r\n if (!this._geoFencesInit)\r\n return;\r\n\r\n if (this.showGeoFences !== visible) {\r\n this._geofencePolygonLayer.setOptions({ visible });\r\n this._geofencePolygonLineLayer.setOptions({ visible });\r\n this._geofenceClusterLayer.setOptions({ visible });\r\n this._geofenceMarkerLayer.setOptions({ visible });\r\n\r\n this.showGeoFences = visible;\r\n\r\n this.invalidateMarkers();\r\n }\r\n }\r\n\r\n public toggleGeofence(ref: number, visible: boolean) {\r\n this._geofenceDataSource.getShapes().forEach(shape => {\r\n const props = shape.getProperties();\r\n const type = shape.getType();\r\n if (type === 'LineString' && props.geofenceRef === ref)\r\n shape.addProperty('visible', visible);\r\n })\r\n }\r\n\r\n public toggleHeatmap(visible: boolean) {\r\n if (this.enableHeatmap !== visible) {\r\n this._heatmapLayer.setOptions({ visible });\r\n this._markerLayer.setOptions({ visible: !visible });\r\n\r\n this.enableHeatmap = visible;\r\n }\r\n }\r\n\r\n public setEditMode(editMode: boolean) {\r\n if (editMode && !this._drawingManagerInit)\r\n this.initDrawingManager();\r\n\r\n if (editMode && this.enableHeatmap) {\r\n this.toggleHeatmap(false);\r\n }\r\n\r\n if (this.geofenceEditMode !== editMode) {\r\n this.geofenceEditMode = editMode;\r\n this.geofenceEditModeChange.emit(this.geofenceEditMode);\r\n\r\n if (!editMode) {\r\n this.selectGeofence(null);\r\n }\r\n\r\n }\r\n }\r\n\r\n public setDrawMode(drawMode: drawing.DrawingMode) {\r\n if (!this._drawingManagerInit)\r\n this.initDrawingManager();\r\n\r\n this._drawingManager.setOptions({ mode: drawMode });\r\n }\r\n\r\n private markersToShapes(markers: IMapMarker[], source: 'markers' | 'tracking') {\r\n return markers.reduce((shapes, marker, i) => {\r\n if (marker.iconId && this._map.imageSprite.hasImage('involve-map-marker-' + marker.iconId)) {\r\n shapes.push(new atlas.Shape(new atlas.data.Point([marker.longitude, marker.latitude]), null, {\r\n ref: i,\r\n source,\r\n iconId: marker.iconId,\r\n clusterValue: marker[this.clusterOn],\r\n visible: true\r\n }));\r\n }\r\n\r\n return shapes;\r\n }, [] as atlas.Shape[]);\r\n }\r\n\r\n private shapeToMarker(shape: atlas.Shape | atlas.data.Feature) {\r\n const props = shape instanceof atlas.Shape ? shape.getProperties() : shape.properties;\r\n\r\n if (!props)\r\n return null;\r\n\r\n if (props.source === 'markers')\r\n return this._markers[props.ref] || null;\r\n else if (props.source === 'geofences')\r\n return this._geoFences[props.geofenceRef]?.markers[props.ref] || null;\r\n else if (props.source === 'tracking')\r\n return this._trackingMarkers[props.ref] || null;\r\n\r\n return null;\r\n\r\n }\r\n\r\n private shapesToMarkers(shapes: (atlas.Shape | atlas.data.Feature)[]) {\r\n return shapes.reduce((markers, shape) => {\r\n const marker = this.shapeToMarker(shape);\r\n\r\n if (marker)\r\n markers.push(marker);\r\n\r\n return markers;\r\n }, [] as IMapMarker[]);\r\n }\r\n\r\n /**\r\n * Invalidates the marker & cluster layers\r\n */\r\n public invalidateMarkers() {\r\n if (!this._mapInit)\r\n return;\r\n\r\n this._invalidatingMarkers = true;\r\n\r\n if (this._enableMarkers && !this._markersInit)\r\n this.initMarkers();\r\n\r\n this._markerLayer?.setOptions({ visible: this.enableHeatmap ? !this._enableMarkers : this._enableMarkers });\r\n this._clusterLayer?.setOptions({ visible: this._enableMarkers });\r\n this._dataSource?.clear();\r\n\r\n if (!this._enableMarkers) {\r\n this._invalidatingMarkers = false;\r\n return;\r\n }\r\n\r\n if (this._markers?.length) {\r\n // build clusters\r\n if (this.autoCluster) {\r\n this._clusters = [];\r\n\r\n this._markers.forEach(marker => {\r\n if (!this._clusters.find(cluster => cluster.value === marker[this.clusterOn])) {\r\n this._clusters.push({\r\n value: marker[this.clusterOn],\r\n color: marker[this.clusterColor]\r\n });\r\n }\r\n });\r\n }\r\n\r\n // add markers\r\n this._dataSource.add(this.markersToShapes(this._markers, 'markers'));\r\n }\r\n\r\n // add geofence markers?\r\n // this is done when the geofence layers are toggled off\r\n if (!this.showGeoFences && this._geoFences?.length) {\r\n const ids: number[] = []\r\n this._geoFences.forEach((geofence, i) => {\r\n if (geofence.markers?.length) {\r\n geofence.markers.forEach((marker, j) => {\r\n if (~ids.indexOf(marker.id))\r\n return;\r\n\r\n ids.push(marker.id);\r\n\r\n this._dataSource.add(new atlas.Shape(new atlas.data.Point([marker.longitude, marker.latitude]), null, {\r\n ref: j,\r\n geofenceRef: i,\r\n source: 'geofences',\r\n iconId: marker.iconId,\r\n clusterValue: marker[this.clusterOn],\r\n visible: true\r\n }));\r\n });\r\n }\r\n });\r\n }\r\n\r\n this._invalidatingMarkers = false;\r\n }\r\n\r\n /**\r\n * Invalidates the geofence layers\r\n */\r\n public invalidateGeoFences() {\r\n if (!this._mapInit)\r\n return;\r\n\r\n this._invalidatingGeoFences = true;\r\n\r\n if (!this._geoFencesInit)\r\n this.initGeoFences();\r\n else\r\n this._geofenceDataSource.clear();\r\n\r\n if (!this._geoFences?.length) {\r\n this._invalidatingGeoFences = false;\r\n return;\r\n }\r\n\r\n // needed below\r\n const clusterMap = this._clusters?.reduce((map, cluster, i) => {\r\n map[cluster.value] = i;\r\n return map;\r\n }, {});\r\n\r\n this._geoFences.forEach((geofence, i) => {\r\n const vertices = geofence.vertices?.map(vertex => new atlas.data.Position(vertex.lng, vertex.lat)) || [];\r\n\r\n if (vertices.length > 0) {\r\n const center = polylabel([vertices]);\r\n\r\n this._geofenceDataSource.add([\r\n // add cluster marker\r\n new atlas.Shape(\r\n new atlas.data.Point([center[0], center[1]]),\r\n null,\r\n {\r\n geofenceRef: i,\r\n geofenceMarker: true,\r\n visible: geofence.hideMarkers,\r\n point_count: geofence.markers?.length || 0,\r\n\r\n // simulate clustering to make the cluster pie marker work\r\n ...geofence.markers?.reduce((props, marker) => {\r\n const i = clusterMap[marker[this.clusterOn]];\r\n\r\n if (!props[i])\r\n props[i] = 0;\r\n\r\n props[i]++;\r\n\r\n return props;\r\n }, {})\r\n }\r\n )\r\n ]);\r\n }\r\n\r\n this._geofenceDataSource.add([\r\n // add polygon\r\n new atlas.Shape(\r\n new atlas.data.LineString(vertices),\r\n null,\r\n {\r\n polygon: true,\r\n geofenceRef: i,\r\n visible: this._selectedGeofenceRef !== i,\r\n fillColor: geofence.fillColor,\r\n fillOpacity: geofence.alpha,\r\n strokeColor: geofence.lineColor,\r\n strokeWidth: 3\r\n }\r\n ),\r\n\r\n // add markers\r\n ...geofence.markers.map((marker, j) => new atlas.Shape(\r\n new atlas.data.Point([marker.longitude, marker.latitude]),\r\n null,\r\n {\r\n ref: j,\r\n geofenceRef: i,\r\n source: 'geofences',\r\n iconId: marker.iconId,\r\n visible: !geofence.hideMarkers\r\n }\r\n ))\r\n ]);\r\n });\r\n\r\n this._invalidatingGeoFences = false;\r\n }\r\n\r\n public showGeoFencedMarker(ref: number, id: number) {\r\n if (ref >= this._geoFences.length)\r\n return;\r\n\r\n this._geofenceDataSource.getShapes().some(shape => {\r\n const props = shape.getProperties();\r\n\r\n if (props.geofenceRef === ref && props.id === id) {\r\n shape.addProperty('visible', true);\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public updateGeofenceGemoetry(ref: number, vertices: atlas.data.Position[]) {\r\n this._geofenceDataSource.getShapes().forEach(shape => {\r\n const props = shape.getProperties();\r\n\r\n if (props.geofenceRef === ref) {\r\n const type = shape.getType();\r\n\r\n switch (type) {\r\n case 'LineString':\r\n shape.setCoordinates(vertices);\r\n break;\r\n case 'Point':\r\n if (props.geofenceMarker) {\r\n const center = polylabel([vertices]);\r\n shape.setCoordinates([center[0], center[1]]);\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n\r\n const geofence = this._geoFences[ref];\r\n\r\n if (geofence) {\r\n geofence.vertices = vertices.map(vertex => ({ lng: vertex[0], lat: vertex[1] }));\r\n }\r\n }\r\n\r\n public selectGeofence(ref: number | null) {\r\n if (!this._map || !this._drawingManager)\r\n return;\r\n\r\n const dataSource = this._drawingManager.getSource();\r\n\r\n if (ref === null) {\r\n dataSource.clear();\r\n this.setDrawMode(drawing.DrawingMode.idle);\r\n this._drawingManager.edit(null);\r\n } else if (ref !== this._selectedGeofenceRef) {\r\n const geofence = this._geoFences[ref];\r\n\r\n if (!geofence)\r\n return;\r\n\r\n const shape = new atlas.Shape(\r\n new atlas.data.Polygon(geofence.vertices.map(vertex => ([vertex.lng, vertex.lat]))), null, {\r\n geofenceRef: geofence.ref,\r\n name: geofence.name,\r\n fillColor: geofence.fillColor,\r\n lineColor: geofence.lineColor,\r\n alpha: geofence.alpha\r\n });\r\n\r\n dataSource.clear();\r\n dataSource.add(shape);\r\n\r\n this._map.setCamera({\r\n bounds: shape.getBounds(),\r\n padding: 100,\r\n type: 'ease',\r\n duration: 200\r\n });\r\n\r\n this.setDrawMode(drawing.DrawingMode.editGeometry);\r\n this._drawingManager.edit(shape);\r\n\r\n // hide this geofence\r\n this.toggleGeofence(ref, false);\r\n }\r\n\r\n // make sure to show the current selected geofence when we've changed selections\r\n if (this._selectedGeofenceRef !== null && ref !== this._selectedGeofenceRef)\r\n this.toggleGeofence(this._selectedGeofenceRef, true);\r\n\r\n this._selectedGeofenceRef = ref;\r\n }\r\n\r\n public geofenceColorChange(fillColor: string, lineColor: string, alpha: number) {\r\n if (this._selectedGeofenceRef === null)\r\n return;\r\n\r\n const dataSource = this._drawingManager.getSource();\r\n const shape = dataSource.getShapes()[0];\r\n const props = shape.getProperties();\r\n\r\n shape.setProperties({ ...props, fillColor, lineColor, alpha });\r\n }\r\n\r\n private emitGeofenceChangeEvent(shape: atlas.Shape, ref: number | null = null) {\r\n try {\r\n const props = shape.getProperties();\r\n const coords = shape.getCoordinates()[0] as atlas.data.Position[];\r\n const vertices = coords.map(coord => ({ lng: coord[0], lat: coord[1] }));\r\n\r\n // sync our internal copy\r\n if (ref !== null)\r\n this.updateGeofenceGemoetry(ref, coords);\r\n\r\n this.geofenceChange.emit({\r\n ref,\r\n name: props.name || 'New Geofence',\r\n fillColor: props.fillColor,\r\n lineColor: props.lineColor,\r\n alpha: props.alpha,\r\n vertices\r\n });\r\n } catch (err) {\r\n console.warn('Failed to emit shape change event', err);\r\n }\r\n }\r\n\r\n private setDrawingColor() {\r\n // generate random color\r\n this._drawingColor = '#' + (0x1000000 + Math.random() * 0xffffff).toString(16).substr(1, 6);\r\n\r\n // update layer options\r\n const drawingLayers = this._drawingManager.getLayers();\r\n\r\n drawingLayers.lineLayer.setOptions({\r\n strokeColor: ['case', ['has', 'lineColor'], ['get', 'lineColor'], this._drawingColor],\r\n strokeWidth: 6\r\n });\r\n\r\n drawingLayers.polygonLayer.setOptions({\r\n fillColor: ['case', ['has', 'fillColor'], ['get', 'fillColor'], this._drawingColor],\r\n fillOpacity: ['case', ['has', 'alpha'], ['get', 'alpha'], 0.1],\r\n });\r\n\r\n drawingLayers.polygonOutlineLayer.setOptions({\r\n strokeColor: ['case', ['has', 'lineColor'], ['get', 'lineColor'], this._drawingColor],\r\n strokeWidth: 6\r\n });\r\n }\r\n\r\n // needs to be [ [lng,lat], [lng,lat], ... ]\r\n public boundsTo(bounds: number[][], padding: number = 50) {\r\n if (!this._map)\r\n return;\r\n\r\n const boundingBox = atlas.data.BoundingBox.fromLatLngs(bounds);\r\n\r\n this._map.setCamera({\r\n bounds: boundingBox,\r\n padding,\r\n type: 'ease',\r\n duration: 200\r\n });\r\n }\r\n\r\n public boundsToMarkers(markers: IMapMarker[] = this._markers) {\r\n if (!markers?.length)\r\n return;\r\n\r\n this.boundsTo(markers.map(marker => [ marker.longitude, marker.latitude ]));\r\n }\r\n\r\n public zoomTo(lat: number, lng: number, zoom?: number) {\r\n if (!this._map || !InvolveMapComponent.isValidPosition(lat, lng))\r\n return;\r\n\r\n if (this._popupOverlayRef?.hasAttached())\r\n this._popupOverlayRef.detach();\r\n\r\n zoom = zoom === undefined ? this.maxZoom : zoom;\r\n\r\n this._map.setCamera({\r\n center: [lng, lat],\r\n zoom: zoom,\r\n type: 'ease',\r\n duration: 200\r\n });\r\n }\r\n\r\n public zoomToMarker(marker: IMapMarker, zoom?: number) {\r\n if (!marker)\r\n return;\r\n\r\n this.zoomTo(marker.latitude, marker.longitude, zoom);\r\n }\r\n\r\n public moveTo(lat: number, lng: number) {\r\n if (!this._map || !InvolveMapComponent.isValidPosition(lat, lng))\r\n return;\r\n\r\n if (this._popupOverlayRef?.hasAttached())\r\n this._popupOverlayRef.detach();\r\n\r\n this._map.setCamera({\r\n center: [lng, lat],\r\n type: 'ease',\r\n duration: 200\r\n });\r\n }\r\n\r\n public moveToMarker(marker: IMapMarker) {\r\n if (!marker)\r\n return;\r\n\r\n this.moveTo(marker.latitude, marker.longitude);\r\n }\r\n\r\n public createClusterLayer(dataSource: atlas.source.DataSource, maxZoom: number) {\r\n const layer = new HtmlMarkerLayer(dataSource, null, {\r\n filter: [\r\n 'all',\r\n ['has', 'point_count'],\r\n ['case', ['has', 'visible'], ['get', 'visible'], true]\r\n ],\r\n maxZoom,\r\n markerCallback: (id, position, properties) => {\r\n // clustered points get a pie chart\r\n let radius = 20;\r\n\r\n if (properties.point_count > 999)\r\n radius = 50;\r\n else if (properties.point_count > 99)\r\n radius = 40;\r\n else if (properties.point_count > 9)\r\n radius = 30;\r\n\r\n return new PieChartMarker({\r\n position,\r\n values: this._clusters.map((cluster, i) => properties[i] || 0),\r\n colors: this._clusters.map(cluster => cluster.color),\r\n radius,\r\n fillColor: 'white',\r\n strokeWidth: 1,\r\n strokeColor: 'white',\r\n innerRadius: radius * 0.5,\r\n text: properties.point_count_abbreviated || properties.point_count,\r\n });\r\n }\r\n });\r\n\r\n return layer;\r\n }\r\n\r\n public createMarkerLayer(dataSource: atlas.source.DataSource) {\r\n const layer = new atlas.layer.SymbolLayer(dataSource, null, {\r\n filter: [\r\n 'all',\r\n ['!', ['has', 'point_count']], // don't render for clusters\r\n ['case', ['has', 'visible'], ['get', 'visible'], true], // only render if visible\r\n ['case', ['has', 'iconId'], true, false]\r\n ],\r\n iconOptions: {\r\n allowOverlap: true,\r\n image: ['concat', 'involve-map-marker-', ['get', 'iconId']]\r\n }\r\n });\r\n\r\n return layer;\r\n }\r\n\r\n public createHeatmapLayer(dataSource: atlas.source.DataSource) {\r\n this._toolbarComponentRef.instance.enableHeatmap = false;\r\n this.enableHeatmap = false;\r\n\r\n const layer = new atlas.layer.HeatMapLayer(dataSource, null, {\r\n radius: 20,\r\n opacity: 0.8,\r\n visible: false\r\n });\r\n\r\n return layer;\r\n }\r\n\r\n private getProximityRange() {\r\n const scale = 2 ** this._map.getCamera().zoom; // exponent base 2 because each zoom increases by 2x\r\n return 1000 / scale; // 1000km at zoom level 0, gets smaller as we zoom in\r\n }\r\n\r\n private async getMarkersInProximity(source: atlas.data.Position) {\r\n const mapBounds = this._map.getCamera().bounds;\r\n const clusters = this._enableMarkers && this.enableClustering && this._dataSource && this._clusterLayer\r\n //@ts-ignore\r\n ? this._map.map.querySourceFeatures(this._dataSource.getId(), {\r\n sourceLayer: this._clusterLayer,\r\n filter: [\r\n 'all',\r\n ['has', 'cluster_id'],\r\n ['case', ['has', 'visible'], ['get', 'visible'], true]\r\n ]\r\n }) as atlas.data.Feature[]\r\n : [];\r\n\r\n const features = [\r\n ...clusters.reduce((acc, cluster) => {\r\n if (!~acc.findIndex(exists => exists.properties.cluster_id === cluster.properties.cluster_id))\r\n acc.push(cluster)\r\n return acc;\r\n }, [] as atlas.data.Feature[]),\r\n ...this._enableMarkers && this._dataSource ? this._dataSource.getShapes() : [],\r\n ...this.showGeoFences && this._geofenceDataSource ? this._geofenceDataSource?.getShapes() : [],\r\n ...this._enableTracking && this._trackingDataSource ? this._trackingDataSource.getShapes() : [],\r\n ];\r\n\r\n const range = this.getProximityRange();\r\n\r\n const result = { markers: new Set(), cluster: new Set(), geofences: new Set, tracking: new Set(), clustered: new Set() };\r\n\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n\r\n if (feature instanceof atlas.Shape) {\r\n const type = feature.getType();\r\n\r\n switch (type) {\r\n case 'Point': {\r\n const props = feature.getProperties();\r\n\r\n if (!props.visible)\r\n continue;\r\n\r\n const destination = feature.getCoordinates() as atlas.data.Position;\r\n const distance = atlas.math.getDistanceTo(source, destination, 'kilometers');\r\n\r\n if (distance > range)\r\n continue;\r\n\r\n if (props.geofenceMarker) {\r\n if (this._geoFences[props.geofenceRef]) {\r\n result.geofences.add(this._geoFences[props.geofenceRef]);\r\n }\r\n } else {\r\n const marker = this.shapeToMarker(feature);\r\n\r\n if (marker) {\r\n if (props.source === 'markers') {\r\n if (!result.clustered.has(marker)) // don't include if its been clustered\r\n result.markers.add(marker);\r\n } else if (props.source === 'geofences') {\r\n result.markers.add(marker); // intentional\r\n } else if (props.source === 'tracking') {\r\n result.tracking.add(marker);\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'LineString': {\r\n if (!this.showGeoFencePolygonTooltips)\r\n continue;\r\n\r\n const props = feature.getProperties();\r\n const geoFence = this._geoFences[props.geofenceRef];\r\n\r\n if (!props.polygon || props.geofenceRef === undefined || !geoFence)\r\n continue;\r\n\r\n // don't show the tooltip if the map is zoomed in past the edges of the polygon\r\n const bounds = feature.getBounds();\r\n\r\n if (bounds &&\r\n bounds[0] < mapBounds[0] &&\r\n bounds[1] < mapBounds[1] &&\r\n bounds[2] > mapBounds[2] &&\r\n bounds[3] > mapBounds[3]\r\n ) continue;\r\n\r\n // using this approach rather than tying into the mouseenter/leave events on the polygon layer because:\r\n // a. The built-in events do not support overlapping polygons\r\n // b. This allows us to control the contents of the tooltip with a single event hook\r\n if (InvolveMapComponent.pointInPolygon(source, feature.getCoordinates() as atlas.data.Position[])) {\r\n result.geofences.add(this._geoFences[props.geofenceRef]);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n\r\n } else {\r\n const destination = feature.geometry.coordinates as atlas.data.Position;\r\n const distance = atlas.math.getDistanceTo(source, destination, 'kilometers');\r\n\r\n if (distance > range * 2)\r\n continue;\r\n\r\n const leaves = await this._dataSource.getClusterLeaves(feature.properties.cluster_id, Infinity, 0);\r\n\r\n if (leaves.length > 25) {\r\n this.shapesToMarkers(leaves).forEach(marker => result.clustered.add(marker));\r\n\r\n for (let j = 0; j < this._clusters.length; j++) {\r\n const cluster = this._clusters[j];\r\n\r\n if (feature.properties[j] > 0) {\r\n result.cluster.add({\r\n id: j,\r\n latitude: null,\r\n longitude: null,\r\n color1: cluster.color,\r\n color2: cluster.color,\r\n name: `${cluster.value}: ${feature.properties[j]} (${Math.round(feature.properties[j] / feature.properties.point_count * 100)}%)`,\r\n title: null,\r\n priorityOrder: cluster.priorityOrder\r\n });\r\n }\r\n }\r\n } else {\r\n for (const leaf of leaves) {\r\n const marker = this.shapeToMarker(leaf);\r\n\r\n if (marker) {\r\n result.markers.add(marker);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return [\r\n Array.from(result.markers).sort(this.markerSortPredicate),\r\n Array.from(result.cluster),\r\n Array.from(result.geofences),\r\n Array.from(result.tracking)\r\n ] as [ IMapMarker[], IMapMarker[], IMapGeoFence[], IMapMarker[] ];\r\n };\r\n\r\n private openPopup(position: atlas.data.Position) {\r\n if (this._popupOverlayRef.hasAttached() && this._popupComponentRef) {\r\n // stabilize the popup location\r\n const range = this.getProximityRange() / 4;\r\n const distance = atlas.math.getDistanceTo(this._popupComponentRef.instance.position, position, 'kilometers');\r\n if (distance <= range) {\r\n this._popupComponentRef.instance.keepAlive = true;\r\n return true;\r\n } else {\r\n this._popupOverlayRef.detach();\r\n this._popup.close();\r\n }\r\n }\r\n\r\n // bail if we have no template\r\n if (!this.tooltipTemplateRef)\r\n return;\r\n\r\n // position & open popup stub\r\n this._popup.setOptions({ position });\r\n this._popup.open(this._map);\r\n\r\n // try to find it in the DOM\r\n const popupStub = this._document.getElementById(`${this._popupId}`);\r\n\r\n // bail if we couldn't find it\r\n if (!popupStub)\r\n return false;\r\n\r\n // inject component into stub\r\n const origin = new ElementRef(popupStub);\r\n\r\n this._popupOverlayRef.updatePositionStrategy(\r\n this._overlay.position().flexibleConnectedTo(origin).withPositions([\r\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'bottom' }\r\n ])\r\n );\r\n\r\n this._popupComponentRef = this._popupOverlayRef.attach(this._popupPortal);\r\n\r\n this._popupComponentRef.instance.templateRef = this.tooltipTemplateRef;\r\n this._popupComponentRef.instance.position = position;\r\n\r\n this._popupComponentRef.instance.close.subscribe(_ => {\r\n this.closePopup();\r\n });\r\n\r\n return true;\r\n }\r\n\r\n public closePopup(force: boolean = false) {\r\n // allow any mouseenter events to fire before trying to close the popup\r\n // this reduces flickering and gives the popup component a chance to steal focus\r\n setTimeout(() => {\r\n this._zone.run(() => {\r\n if (!force && this._popupComponentRef?.instance.keepAlive) {\r\n this._popupComponentRef.instance.keepAlive = false;\r\n } else if (force || !this._popupComponentRef?.instance.hasEntered || !this._popupComponentRef?.instance.hasFocus) {\r\n this._popupOverlayRef?.detach();\r\n this._popup?.close();\r\n }\r\n });\r\n }, 100);\r\n }\r\n\r\n private markerSortPredicate(a: IMapMarker, b: IMapMarker) {\r\n if (a.priorityOrder !== b.priorityOrder)\r\n return a.priorityOrder - b.priorityOrder;\r\n\r\n return a.name?.localeCompare(b.name, undefined, { numeric: true });\r\n }\r\n\r\n public hoverTrackingMarker(ref: number) {\r\n if (!this._mapInit || !this._trackingInit)\r\n return;\r\n\r\n this._zone.run(() => {\r\n const shapes = this._trackingDataSource.getShapes();\r\n const shape = shapes.find(shape => shape.getProperties().ref === ref);\r\n\r\n if (!shape) {\r\n this.closePopup(true);\r\n return;\r\n }\r\n\r\n const marker = this.shapeToMarker(shape);\r\n\r\n if (!marker) {\r\n this.closePopup(true);\r\n return;\r\n }\r\n\r\n // open popup\r\n if (!this.openPopup(shape.getCoordinates() as atlas.data.Position))\r\n return;\r\n\r\n this._popupComponentRef.instance.cluster = [];\r\n this._popupComponentRef.instance.geoFences = [];\r\n this._popupComponentRef.instance.markers = [];\r\n this._popupComponentRef.instance.tracking = [marker];\r\n this._popupComponentRef.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n public static pointInPolygon(position: atlas.data.Position, vertices: atlas.data.Position[]) {\r\n // http://alienryderflex.com/polygon/ algorithm\r\n const lng = position[0], lat = position[1];\r\n\r\n let oddNodes = false;\r\n let j = vertices.length - 1;\r\n\r\n for (let i = 0; i < vertices.length; i++) {\r\n const yLng = vertices[i][0], yLat = vertices[i][1], xLng = vertices[j][0], xLat = vertices[j][1];\r\n\r\n if ((yLng < lng && xLng >= lng || xLng < lng && yLng >= lng) && (yLat <= lat || xLat <= lat)) {\r\n if (yLat + (lng - yLng) / (xLng - yLng) * (xLat - yLat) < lat) {\r\n oddNodes = !oddNodes;\r\n }\r\n }\r\n\r\n j = i;\r\n }\r\n\r\n return oddNodes;\r\n }\r\n\r\n public static isValidPosition(lat: number, lng: number) {\r\n return lat >= -85 && lat <= 85 &&\r\n lng >= -180 && lng <= 180 &&\r\n lat !== 0 && lng !== 0;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { InvolveIconModule } from '../icon/icon.module';\r\nimport { InvolvePipesModule } from '../pipes/pipes.module';\r\n\r\nimport { InvolveMapComponent } from './map.component';\r\nimport { InvolveMapToolbarComponent } from './toolbar.component';\r\nimport { InvolveMapTooltipComponent, InvolveMapTooltipDirective } from './tooltip.component';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { InvolveLoadingCirclesModule } from '../loading-circles/loading-circles.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n OverlayModule,\r\n PortalModule,\r\n FlexLayoutModule,\r\n RouterModule,\r\n\r\n InvolveLoadingCirclesModule,\r\n InvolveIconModule,\r\n InvolvePipesModule\r\n ],\r\n declarations: [\r\n InvolveMapComponent,\r\n InvolveMapToolbarComponent,\r\n InvolveMapTooltipComponent,\r\n InvolveMapTooltipDirective\r\n ],\r\n exports: [\r\n InvolveMapComponent,\r\n InvolveMapTooltipDirective\r\n ]\r\n})\r\nexport class InvolveMapModule {}\r\n","/**\r\n * Map Marker interface.\r\n */\r\n\r\nexport interface IMapMarkerIcon {\r\n id: number | string;\r\n color1: string;\r\n color2: string;\r\n}\r\nexport interface IMapMarker {\r\n id: number;\r\n \r\n iconId?: string | number; // ref to IMapMarkerIcon\r\n\r\n name: string;\r\n title: string;\r\n color1?: string;\r\n color2?: string;\r\n latitude: number;\r\n longitude: number;\r\n priorityOrder?: number;\r\n routerLink?: string;\r\n\r\n trackBy?: any;\r\n\r\n data?: T;\r\n}\r\n\r\nconst svgCache = new Map();\r\n\r\nexport function createMarkerSvg(options: {\r\n // text\r\n color?: string,\r\n backgroundColor?: string,\r\n text?: string,\r\n\r\n // icon\r\n borderColor?: string,\r\n borderWidth?: number\r\n bottomColor?: string,\r\n topColor?: string,\r\n diameter?: number,\r\n}) {\r\n const hash = btoa(JSON.stringify(options));\r\n\r\n if (svgCache.has(hash))\r\n return svgCache.get(hash);\r\n\r\n let { color, backgroundColor, text, borderColor, borderWidth, bottomColor, topColor, diameter } = options;\r\n\r\n color = color || '#000000';\r\n backgroundColor = backgroundColor || '#dddddd';\r\n\r\n borderColor = borderColor || '#000000';\r\n borderWidth = borderWidth || 1;\r\n\r\n bottomColor = bottomColor || borderColor;\r\n topColor = topColor || borderColor; \r\n\r\n diameter = diameter || 32; // works better when even\r\n\r\n const innerDiameter = diameter - borderWidth;\r\n const radius = diameter / 2;\r\n\r\n const textRadius = radius / 1.5;\r\n \r\n text = text ? `\r\n \r\n \r\n ${text}\r\n \r\n `: ``;\r\n\r\n const svg = `\r\n \r\n \r\n \r\n ${text}\r\n \r\n `.replace(/\\s+/g, ' ').trim(); // strip excess whitespace (svgs are picky)\r\n\r\n svgCache.set(hash, svg);\r\n return svg;\r\n} ","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n","import * as draw from 'azure-maps-drawing-tools';\r\n\r\nimport { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\r\n\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { PlatformServiceSettings } from '@rfv/modules/core/models/PlatformServiceSettings/PlatformServiceSettings';\r\n\r\nexport declare type InvolveMapGeofenceEditModes = null | 'draw-rectangle' | 'draw-polygon' | 'edit-geometry';\r\n\r\n/**\r\n * Custom drawing toolbar with enhanced functionality over the built-in drawing manager toolbar\r\n */\r\n@Component({\r\n selector: 'involve-map-toolbar',\r\n templateUrl: 'toolbar.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class InvolveMapToolbarComponent implements OnInit, OnDestroy {\r\n public DrawingMode = draw.drawing.DrawingMode;\r\n\r\n @Input()\r\n public showClusteringButton: boolean = true;\r\n\r\n @Input()\r\n public enableClustering: boolean = true;\r\n\r\n @Output()\r\n public enableClusteringChange = new EventEmitter();\r\n\r\n @Input()\r\n public showGeoFences: boolean = true;\r\n\r\n @Output()\r\n public showGeoFencesChange = new EventEmitter();\r\n\r\n @Input()\r\n public showGeoFenceButton: boolean = true;\r\n\r\n @Input()\r\n public enableHeatmap: boolean = false;\r\n\r\n @Output()\r\n public enableHeatmapChange = new EventEmitter();\r\n\r\n @Input()\r\n public heatmapPermission$: Observable = this._store.select(fromCore.PlatformServiceSettings.getPlatFormSettingsByName('Show_Heatmap_Button'));\r\n public heatmapPermission: boolean;\r\n\r\n @Input()\r\n public showHeatmapButton: boolean = true; // conditional flag to hide heatmap on trips\r\n\r\n @Input()\r\n public canEdit: boolean = false;\r\n\r\n @Input()\r\n public editMode: boolean = false;\r\n\r\n @Output()\r\n public editModeChange = new EventEmitter();\r\n\r\n @Input()\r\n public drawMode: draw.drawing.DrawingMode = this.DrawingMode.idle;\r\n\r\n @Output()\r\n public drawModeChange = new EventEmitter();\r\n\r\n public _destroyed$ = new Subject();\r\n\r\n public expanded: boolean = true;\r\n\r\n public themeId$ = this._store.pipe(\r\n select(fromCore.UserSession.getSessionThemeId),\r\n filter(themeId => !!themeId)\r\n );\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.heatmapPermission$.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(heatmapPermission => {\r\n this.heatmapPermission = !!+heatmapPermission.value;\r\n })\r\n }\r\n\r\n public toggleClustering() {\r\n this.enableClustering = !this.enableClustering;\r\n this.enableClusteringChange.emit(this.enableClustering);\r\n }\r\n\r\n public toggleGeoFences() {\r\n this.showGeoFences = !this.showGeoFences;\r\n this.showGeoFencesChange.emit(this.showGeoFences);\r\n }\r\n\r\n public toggleHeatmap() {\r\n this.enableHeatmap = !this.enableHeatmap;\r\n this.enableHeatmapChange.emit(this.enableHeatmap);\r\n }\r\n\r\n public toggleEditMode(edit: boolean) {\r\n if (this.editMode !== edit) {\r\n this.editMode = edit;\r\n this.editModeChange.emit(edit);\r\n\r\n // force geofences on when editing\r\n if (edit) {\r\n if (!this.showGeoFences)\r\n this.toggleGeoFences();\r\n }\r\n }\r\n }\r\n\r\n public toggleDrawMode(mode: draw.drawing.DrawingMode) {\r\n this.toggleEditMode(true);\r\n\r\n if (this.drawMode !== mode) {\r\n this.drawMode = mode;\r\n this.drawModeChange.emit(this.drawMode);\r\n }\r\n }\r\n\r\n public toggleExpand() {\r\n this.expanded = !this.expanded;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","import atlas from 'azure-maps-control';\r\n\r\nimport { Component, Directive, Input, Output, EventEmitter, HostListener, TemplateRef } from '@angular/core';\r\n\r\nimport { IMapMarker } from './marker';\r\nimport { IMapGeoFence } from './geofence';\r\nimport { Observable } from 'rxjs';\r\n\r\ndeclare type getMarkerType = \r\n T extends IMapMarker\r\n ? T // is an IMapMarker\r\n : T extends (infer A)[]\r\n ? A extends IMapMarker\r\n ? A // is an IMapMarker[]\r\n : IMapMarker // is a TData[]\r\n : T extends Observable\r\n ? B extends IMapMarker\r\n ? B // is an Observable>\r\n : B extends (infer C)[]\r\n ? C extends IMapMarker\r\n ? C // is an Observable[]>\r\n : IMapMarker // is an Observable\r\n : IMapMarker // is an Observable\r\n : IMapMarker; // is TData\r\n\r\nexport interface InvolveMapTooltipContext {\r\n $implicit: getMarkerType[];\r\n cluster: IMapMarker[];\r\n geoFences: IMapGeoFence>[];\r\n tracking: getMarkerType[];\r\n}\r\n\r\n@Directive({\r\n selector: '[involveMapTooltip]',\r\n exportAs: 'involveMapTooltip',\r\n inputs: [\r\n 'markerType: involveMapTooltipMarkerType',\r\n 'geoFenceType: involveMapTooltipTrackingType',\r\n 'trackingType: involveMapTooltipTrackingType'\r\n ]\r\n})\r\nexport class InvolveMapTooltipDirective {\r\n public static ngTemplateContextGuard(\r\n dir: InvolveMapTooltipDirective, \r\n ctx: unknown\r\n ): ctx is InvolveMapTooltipContext {\r\n return true;\r\n }\r\n\r\n public markerType: TMarker; \r\n public geoFenceType: TGeoFence;\r\n public trackingType: TTracking;\r\n\r\n public constructor(\r\n public readonly templateRef: TemplateRef>\r\n ) { }\r\n}\r\n\r\n@Component({\r\n template: ``\r\n})\r\nexport class InvolveMapTooltipComponent {\r\n @Input()\r\n public position: atlas.data.Position;\r\n\r\n @Input()\r\n public cluster: IMapMarker[];\r\n\r\n @Input()\r\n public markers: IMapMarker[];\r\n\r\n @Input()\r\n public geoFences: IMapGeoFence[];\r\n\r\n @Input()\r\n public tracking: IMapMarker[];\r\n\r\n @Input()\r\n public keepAlive: boolean = false;\r\n\r\n @Input()\r\n public templateRef: TemplateRef;\r\n\r\n @Output()\r\n public close = new EventEmitter();\r\n\r\n private _hasEntered: boolean = false;\r\n public get hasEntered() { return this._hasEntered; }\r\n\r\n private _hasFocus: boolean = true; // assume focused by default\r\n public get hasFocus() { return this._hasFocus; }\r\n\r\n @HostListener('mouseenter')\r\n public onEnter() {\r\n this._hasEntered = true;\r\n this._hasFocus = true;\r\n }\r\n\r\n @HostListener('mouseleave')\r\n public onLeave() {\r\n this._hasFocus = false;\r\n this.close.emit();\r\n }\r\n}","
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
","import { OnDestroy, Optional, Self, Injector, forwardRef, HostListener } from '@angular/core';\r\nimport { Component, Input, EventEmitter, ContentChildren, QueryList, AfterViewInit, Output } from '@angular/core';\r\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n/**\r\n * Example:\r\n * \r\n \r\n Choose a page\r\n \r\n Page {{ pageNumber }}\r\n \r\n \r\n */\r\n\r\n/**\r\n * Menu Header\r\n * - bottom border, unclickable, no hover css\r\n */\r\n@Component({\r\n selector: 'involve-menu-header',\r\n template: `\r\n
\r\n \r\n
`,\r\n styleUrls: ['menu.component.scss']\r\n})\r\nexport class InvolveMenuHeaderComponent {\r\n @Input()\r\n public pointerEvents = false;\r\n}\r\n\r\nlet __id = 0;\r\n\r\n/**\r\n * Menu Button\r\n * - no event emitted if disabled, disabled and active css\r\n */\r\n@Component({\r\n selector: 'involve-menu-button',\r\n template: `\r\n
\r\n \r\n
`,\r\n styleUrls: ['menu.component.scss'],\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'item' } ]\r\n})\r\nexport class InvolveMenuButtonComponent {\r\n @Input()\r\n public id = `involve-menu-button-${__id++}`;\r\n\r\n @Input()//true - unclickable and disabled cursor\r\n public disabled: boolean = false;\r\n\r\n @Input()//true - bold yellow or blue color \r\n public active: boolean = false;\r\n\r\n @Output()// use (click) instead of (onClick) if you do not wish to filter disabled clicks\r\n public onClick = new EventEmitter();\r\n\r\n public click(event: Event) {// track click event to filter out disabled clicks\r\n if (this.disabled)\r\n return;\r\n\r\n this.onClick.emit(event);\r\n }\r\n}\r\n\r\n/**\r\n * Menu\r\n * - involve-menu-header is placed at the top of overlay\r\n * - closeUponSelect = false for use in auto-filter\r\n */\r\n@Component({\r\n selector: 'involve-menu',\r\n styleUrls: ['menu.component.scss'],\r\n host: {\r\n 'class': 'menu-width',\r\n },\r\n templateUrl: 'menu.component.html',\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'menu' } ]\r\n})\r\nexport class InvolveMenuComponent implements AfterViewInit, OnDestroy {\r\n public id = `involve-menu-${__id++}`;\r\n @ContentChildren(InvolveMenuButtonComponent, { descendants: true })\r\n private _menuButtonChildren: QueryList;\r\n\r\n @Input()//set false to keep selecting\r\n public closeOnSelect: boolean = true;\r\n\r\n public isOpen: boolean = false;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public overlayPositions = [\r\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),\r\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }),\r\n new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }),\r\n new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' })\r\n ];\r\n\r\n public ngAfterViewInit() {//track menu button click event\r\n this._menuButtonChildren.forEach(childComponent => {\r\n childComponent.onClick.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(_ => {\r\n if (this.closeOnSelect) this.isOpen = false;\r\n });\r\n });\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick($event: MouseEvent) {\r\n this.toggle();\r\n $event.stopPropagation();\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public toggle() {\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n}","import { NgModule } from '@angular/core';\r\nimport { SafeHtmlPipe } from './safe-html.pipe';\r\nimport { InvolvePluralPipe } from './plural.pipe';\r\n\r\nimport { RfvDatePipe } from './rfv-date.pipe';\r\nimport { RfvTimePipe } from './rfv-time.pipe';\r\nimport { RfvDateTimePipe } from './rfv-date-time.pipe';\r\nimport { InvolveNullToDashPipe } from './null-to-dash.pipe';\r\nimport { RfvFileSizePipe } from './rfv-filesize.pipe';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n SafeHtmlPipe,\r\n InvolvePluralPipe,\r\n InvolveNullToDashPipe,\r\n\r\n RfvDatePipe,\r\n RfvTimePipe,\r\n RfvDateTimePipe,\r\n RfvFileSizePipe,\r\n ],\r\n exports: [\r\n SafeHtmlPipe,\r\n InvolvePluralPipe,\r\n InvolveNullToDashPipe,\r\n\r\n RfvDatePipe,\r\n RfvTimePipe,\r\n RfvDateTimePipe,\r\n RfvFileSizePipe\r\n ],\r\n providers: [\r\n RfvDateTimePipe\r\n ]\r\n})\r\nexport class InvolvePipesModule { }\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'involvePlural'\r\n})\r\nexport class InvolvePluralPipe implements PipeTransform {\r\n public transform(value: number, output: string) {\r\n if (isNaN(value))\r\n value = 0;\r\n\r\n return `${value} ${output}${value === 1 ? '' : 's'}`;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Pipe({\r\n name: 'rfvDateTime'\r\n})\r\nexport class RfvDateTimePipe extends DatePipe implements PipeTransform {\r\n // Extends build-in Date Pipe and format date to 'app default' date-time format (based on Folklore designs, change here, if necessary)\r\n transform(value: any, placeholder: string = '-'): any {\r\n if (!value && placeholder)\r\n return placeholder;\r\n \r\n return super.transform(value, 'MM/dd/yyy hh:mm:ss a'); // consider creating date-time format variable somewhere in app config\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Pipe({\r\n name: 'rfvDate'\r\n})\r\nexport class RfvDatePipe extends DatePipe implements PipeTransform {\r\n // Extends build-in Date Pipe and format date to 'app default' date-time format (based on Folklore designs, change here, if necessary)\r\n transform(value: any): any {\r\n return super.transform(value, 'MM/dd/yyyy');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Pipe({\r\n name: 'rfvTime'\r\n})\r\nexport class RfvTimePipe extends DatePipe implements PipeTransform {\r\n // Extends build-in Date Pipe and format date to 'app default' date-time format (based on Folklore designs, change here, if necessary)\r\n transform(value: any): any {\r\n return super.transform(value, 'hh:mm:ss a');\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{ progress || 0 }}%\r\n \r\n
\r\n
","import { ElementRef, AfterViewInit } from '@angular/core';\r\nimport { Component, Input, ViewChild, Renderer2 } from '@angular/core';\r\n\r\n/**\r\n * Displays a vertical colored | to indicate status visually.\r\n */\r\n@Component({\r\n selector: 'involve-progress-bar',\r\n templateUrl: 'progress.component.html',\r\n styleUrls: ['progress.component.scss'],\r\n})\r\nexport class InvolveProgressBarComponent implements AfterViewInit {\r\n @ViewChild('bar', { static: false }) barElement: ElementRef;\r\n\r\n @Input()\r\n public progress: number = 0;\r\n\r\n @Input()\r\n public color: string;\r\n\r\n @Input()\r\n public pattern: 'hash';\r\n\r\n @Input()\r\n public shape: 'square' | 'round' = 'round';\r\n\r\n @Input()\r\n public hideText: boolean = false;\r\n\r\n constructor(private _renderer: Renderer2) { }\r\n\r\n ngAfterViewInit() {\r\n if (this.pattern && this.color)//if false then applies default green/blue\r\n this._renderer.setStyle(\r\n this.barElement.nativeElement,\r\n 'background',\r\n `repeating-linear-gradient(\r\n 135deg,\r\n rgba(0, 0, 0, 0),\r\n rgba(0, 0, 0, 0) 1px,\r\n ${this.color} 5px,\r\n ${this.color} 3px)`\r\n );\r\n }\r\n}","\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-rating-item',\r\n template: `\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n `\r\n})\r\nexport class InvolveRatingItemComponent { }","\r\nimport { Component, Directive } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-rating-option',\r\n template: `\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n `\r\n})\r\nexport class InvolveRatingOptionComponent { }\r\n\r\n/**\r\n * Directives\r\n */\r\n @Directive({\r\n selector: '[involveRatingOptionRadioButton]'\r\n})\r\nexport class InvolveRatingOptionRadioButtonDirective { }","\r\nimport { Component } from '@angular/core';\r\nimport { Directive } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-rating',\r\n host: {\r\n 'class': 'base-container'\r\n },\r\n templateUrl: 'rating.component.html'\r\n})\r\nexport class InvolveRatingComponent { }\r\n\r\n\r\n/**\r\n * Directives\r\n */\r\n@Directive({\r\n selector: '[involveRatingTitle]'\r\n})\r\nexport class InvolveRatingTitleDirective { }\r\n\r\n@Directive({\r\n selector: '[involveRatingSubTitle]'\r\n})\r\nexport class InvolveRatingSubTitleDirective { }\r\n\r\n@Directive({\r\n selector: '[involveRatingDescription]',\r\n host: {\r\n 'class': 'gray'\r\n }\r\n})\r\nexport class InvolveRatingDescriptionDirective { }\r\n\r\n@Directive({\r\n selector: '[involveRatingLabel]',\r\n host: {\r\n 'class': 'gray'\r\n }\r\n})\r\nexport class InvolveRatingLabelDirective { }\r\n\r\n@Directive({\r\n selector: '[involveRatingActionBar]'\r\n})\r\nexport class InvolveRatingActionBarDirective { }","
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
","import { Component, Input } from '@angular/core';\r\n\r\nlet __id = 0;\r\n\r\n@Component({\r\n selector: 'involve-option-group',\r\n exportAs: 'involveOptionGroup',\r\n templateUrl: 'option-group.component.html',\r\n styleUrls: ['option-group.component.scss']\r\n})\r\nexport class InvolveOptionGroupComponent {\r\n @Input() id: string = `involve-option-group-${__id++}`;\r\n \r\n @Input() value: any;\r\n}","
  • \r\n \r\n
      \r\n \r\n
    \r\n
  • ","
  • \r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n\r\n\r\n \r\n","import { Component, Input, HostListener, ElementRef, Directive, TemplateRef, Host, TrackByFunction, ChangeDetectorRef, Inject, Injector, ViewContainerRef, forwardRef } from '@angular/core';\r\nimport { Highlightable } from '@angular/cdk/a11y';\r\nimport { InvolveSelectComponent } from './select.component';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n@Directive({\r\n selector: '[involveOptionDef]',\r\n inputs: [\r\n 'options: involveOptionDefOptions', \r\n 'searchPredicate: involveOptionDefSearch', \r\n 'searchFields: involveOptionDefSearchFields', \r\n 'valueAccessor: involveOptionDefValueAccessor',\r\n 'valueField: involveOptionDefValueField',\r\n 'trackBy: involveOptionDefTrackBy',\r\n 'height: involveOptionDefHeight'\r\n ]\r\n})\r\nexport class InvolveOptionDef {\r\n public static ngTemplateContextGuard(dir: InvolveOptionDef, ctx: unknown): ctx is { $implicit: T } {\r\n return true;\r\n }\r\n\r\n public height: number = 29;\r\n private _options: T[] = [];\r\n\r\n public filter: string | null = null;\r\n private _filteredOptions: T[] = [];\r\n\r\n public rebuildFilteredOptions() {\r\n const filter = this.filter?.trim();\r\n\r\n if (filter)\r\n this._filteredOptions = this.options.filter(option => this.searchPredicate(option, filter));\r\n else\r\n this._filteredOptions = this._options;\r\n }\r\n\r\n public get options(){ return this._options};\r\n public set options(value: T[]){\r\n if (value && Array.isArray(value))\r\n this._options = value; \r\n else\r\n this._options = [];\r\n\r\n this.rebuildFilteredOptions();\r\n \r\n this._host.resetOptions();\r\n this._host.initializeSelection();\r\n }\r\n\r\n public get filteredOptions() {\r\n return this._filteredOptions;\r\n }\r\n\r\n public get selectedOptions() {\r\n return this.options.filter(option => this._host.isSelected(this.getValue(option)));\r\n }\r\n\r\n public get availableOptions() {\r\n if (this._host.multiple && this._host.multiMode === 'pill')\r\n return this.filteredOptions.filter(option => !this._host.isSelected(this.getValue(option)))\r\n\r\n return this.filteredOptions;\r\n }\r\n\r\n public activeValue: V;\r\n\r\n public get highlitableOptions(): ({ option: T } & Highlightable)[] {\r\n return this.options.map(option => ({\r\n option,\r\n setActiveStyles: () => this.activeValue = this.getValue(option),\r\n setInactiveStyles: () => { /* no-op */ },\r\n }));\r\n }\r\n\r\n public valueAccessor: (option: T) => V = null;\r\n public valueField: keyof T = null;\r\n\r\n public getValue(option: T): V {\r\n return this.valueAccessor\r\n ? this.valueAccessor(option)\r\n : this.valueField\r\n ? option[this.valueField] as V\r\n : option as unknown as V;\r\n }\r\n\r\n public getByValue(value: V): T {\r\n return this.options.find(option => this.getValue(option) === value);\r\n }\r\n\r\n public trackBy: TrackByFunction = (index: number, option: T) => {\r\n return this.getValue(option);\r\n }\r\n\r\n public searchFields: (keyof T)[];\r\n public searchPredicate: ((option: T, filter: string) => boolean) = (option: T, filter: string): boolean => {\r\n const fields = this.searchFields || Object.keys(option) as (keyof T)[];\r\n\r\n const search = fields.reduce((acc: string, key: keyof T) => {\r\n if (option[key] !== null || option[key] !== undefined)\r\n return acc + option[key] + '\\u03A9';\r\n\r\n return acc;\r\n }, '').toLowerCase();\r\n\r\n return search.indexOf(filter.toLowerCase()) !== -1;\r\n }\r\n\r\n public constructor(\r\n @Host()\r\n private _host: InvolveSelectComponent,\r\n public readonly templateRef: TemplateRef<{ $implicit: T }>\r\n ) { }\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'involve-option',\r\n exportAs: 'involveOption',\r\n templateUrl: 'option.component.html',\r\n styleUrls: ['option.component.scss'],\r\n host: {\r\n '[style.display]': 'visible ? \"block\" : \"none\"',\r\n '[attr.id]': 'id',\r\n '[attr.data-value]': 'value'\r\n },\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'selectOption' } ]\r\n})\r\nexport class InvolveOptionComponent implements Highlightable {\r\n @Input()\r\n public id = `involve-option-${__id++}`;\r\n\r\n @Input()\r\n public value: T;\r\n\r\n public get visible() {\r\n if (this._host.optionDef) {\r\n // virtual scroll mode - visibility handled in parent\r\n return true;\r\n } else {\r\n // standard mode\r\n if (this._host.multiple && this._host.multiMode === 'pill' && this.selected)\r\n return false;\r\n \r\n if (!this._host.autoComplete)\r\n return true;\r\n\r\n return !this._host.isFiltered(this.content);\r\n }\r\n }\r\n\r\n private _active: boolean = false;\r\n public get active() {\r\n if (this._host.optionDef) {\r\n return this._host.optionDef.activeValue === this.value;\r\n }\r\n \r\n return this._active;\r\n }\r\n\r\n @Input()\r\n public get selected() { \r\n return this._host.isSelected(this.value);\r\n }\r\n public set selected(selected: boolean) {\r\n selected\r\n ? this._host.select(this.value)\r\n : this._host.deselect(this.value);\r\n \r\n this._cdr.markForCheck();\r\n }\r\n\r\n public get content() {\r\n return (this.elementRef.nativeElement.textContent || '').trim();\r\n }\r\n\r\n public get checkbox() {\r\n return this._host.multiple && this._host.multiMode === 'checkbox';\r\n }\r\n\r\n public get disabled() {\r\n return !!this._host.disabled;\r\n }\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef,\r\n public readonly elementRef: ElementRef,\r\n \r\n @Host()\r\n private _host: InvolveSelectComponent\r\n ) { }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: MouseEvent) {\r\n if (this.checkbox && this.selected)\r\n this._host.deselect(this.value);\r\n else\r\n this._host.select(this.value);\r\n\r\n this._cdr.markForCheck();\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n public onKeydown(event: KeyboardEvent) {\r\n if (event.code === 'Enter' || event.code === 'Space') {\r\n if (this.checkbox && this.selected)\r\n this._host.deselect(this.value);\r\n else\r\n this._host.select(this.value);\r\n\r\n this._cdr.markForCheck();\r\n \r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n public onMouseEnter(event: KeyboardEvent) {\r\n this._host.setActiveValue(this.value);\r\n }\r\n\r\n //\r\n // Highlightable interface\r\n //\r\n\r\n public setActiveStyles() {\r\n this._active = true;\r\n this._cdr.detectChanges();\r\n }\r\n public setInactiveStyles() { \r\n this._active = false;\r\n this._cdr.detectChanges();\r\n }\r\n}","
    \r\n\r\n \r\n
    1\" class=\"involve-select-pill\" fxLayout=\"row\" fxLayoutAlign=\"center center\" cdkOverlayOrigin #pillOrigin=\"cdkOverlayOrigin\" (click)=\"togglePill($event)\">\r\n \r\n {{ selectedOptions[0]?.content }}\r\n \r\n \r\n \r\n {{ selectedOptions.length }} {{ pillPlaceholder }}\r\n \r\n \r\n
    \r\n \r\n
      \r\n
      \r\n
    • 1)\">\r\n {{ option.content }}\r\n 1)\" name=\"close-small\">\r\n
    • \r\n
      \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n\r\n
      \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n \r\n \r\n \r\n \r\n \r\n
      \r\n\r\n
      \r\n \r\n
      No Results Found
      \r\n
      \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    ","import { Component, ChangeDetectionStrategy, ContentChildren, ContentChild, ElementRef, OnInit, OnDestroy, Input, QueryList, ViewChild, EventEmitter, Output, ChangeDetectorRef, Optional, Inject, HostListener, NgZone } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ControlValueAccessor, FormBuilder, NgControl } from '@angular/forms';\r\nimport { ActiveDescendantKeyManager, Highlightable } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { CdkConnectedOverlay, ConnectionPositionPair } from '@angular/cdk/overlay';\r\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\nimport { state, transition, trigger, animate, style } from '@angular/animations';\r\n\r\nimport { Subject, merge, fromEvent } from 'rxjs';\r\nimport { debounceTime, startWith, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { InvolveFormFieldControl } from '../form-field/form-field-control';\r\nimport { InvolveOptionComponent, InvolveOptionDef } from './option.component';\r\nimport { InvolveOptionGroupComponent } from './option-group.component';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\nexport class InvolveSelectChange {\r\n public constructor(\r\n public source: InvolveSelectComponent,\r\n public value: T\r\n ) { }\r\n}\r\n\r\n@Component({\r\n selector: 'involve-select',\r\n templateUrl: 'select.component.html',\r\n styleUrls: ['select.component.scss'],\r\n providers: [\r\n { provide: InvolveFormFieldControl, useExisting: InvolveSelectComponent },\r\n { provide: DATA_CY_TYPE, useValue: 'select' }\r\n ],\r\n host: {\r\n '[attr.id]': 'id',\r\n '[attr.data-value]': 'value'\r\n },\r\n animations: [\r\n trigger('rotate', [\r\n state('true', style({ transform: 'rotate(180deg)' })),\r\n state('false', style({ transform: 'none' })),\r\n transition('false <=> true', animate(150))\r\n ])\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class InvolveSelectComponent implements InvolveFormFieldControl, OnInit, OnDestroy, ControlValueAccessor {\r\n /**\r\n * Sets the id for the select.\r\n */\r\n @Input()\r\n public id: string = `involve-select-${__id++}`;\r\n\r\n /**\r\n * Sets the placeholder for the select.\r\n */\r\n @Input()\r\n public set placeholder(placeholder: string) { this._placeholder = placeholder };\r\n public get placeholder() {\r\n if (this.dropdownOpen && this.autoComplete)\r\n return 'Search';\r\n\r\n if (!this.multiple && this.hasValue) {\r\n return this._options.find(option => this.isSelected(option.value))?.content || '';\r\n }\r\n\r\n if (this.multiple && this.multiMode === 'pill' && this.hasValue)\r\n return this.valuePlaceholder || this._placeholder;\r\n\r\n if (this.multiple && this.multiMode === 'checkbox' && this.hasValue)\r\n return this.selected.length > 1\r\n ? `${this.selected.length} items selected`\r\n : '1 item selected';\r\n\r\n return this._placeholder;\r\n }\r\n protected _placeholder: string = 'Select';\r\n\r\n /**\r\n * In multi-select pill mode, this placeholder will be used when the pill is shown.\r\n */\r\n @Input()\r\n public valuePlaceholder: string;\r\n\r\n @Input()\r\n public pillPlaceholder: string = 'items';\r\n\r\n /**\r\n * The selected value(s) of the component.\r\n */\r\n @Input()\r\n public get value() { return this._value; }\r\n public set value(value: T) {\r\n this._value = value;\r\n this.initializeSelection();\r\n }\r\n\r\n @Output()\r\n public readonly valueChange = new EventEmitter();\r\n\r\n @Output()\r\n public readonly selectionChange = new EventEmitter>();\r\n\r\n private _value: T | null = null;\r\n\r\n /**\r\n * When in multi mode, the selected values are treated as comma separated values.\r\n * TODO: This flag MUST be set before [multiple]=\"true\"\r\n */\r\n @Input()\r\n public get csv() { return this._csv; }\r\n public set csv(value: boolean) {\r\n this._csv = value;\r\n }\r\n private _csv: boolean = false;\r\n\r\n /**\r\n * Allows the component to select multiple values.\r\n */\r\n @Input()\r\n public get multiple() { return this._multiple; }\r\n public set multiple(value: boolean) {\r\n this._multiple = value;\r\n this._selectionModel = new SelectionModel(this._multiple);\r\n\r\n if (this._value !== undefined && this._value !== null) {\r\n if (this._multiple) {\r\n if (!this._csv && !Array.isArray(this._value))\r\n (this._value as unknown as T[]) = [this._value];\r\n } else {\r\n if (Array.isArray(this._value))\r\n this._value = this._value.length ? this._value[0] : null;\r\n }\r\n\r\n this.setSelectionByValue(this._value);\r\n this.propagateChanges();\r\n }\r\n }\r\n private _multiple: boolean = false;\r\n\r\n /**\r\n * Determines multi-select behavior, not used for single select.\r\n * In checkbox mode, selected values remain in the list and selection is displayed via a checkbox when the dropdown is open.\r\n * In pill mode, selected values are removed from the list and selection is displayed in a pill.\r\n * Defaults to pill.\r\n */\r\n @Input()\r\n public multiMode: 'checkbox' | 'pill' = 'pill';\r\n\r\n /**\r\n * Sets if the select is disabled.\r\n * This is ignored in reactive forms mode - disabled state will be read from NgControl.\r\n */\r\n @Input()\r\n public get disabled(): boolean | string { return this._disabled; }\r\n public set disabled(value: boolean | string) { this._disabled = coerceBooleanProperty(value); }\r\n protected _disabled = false;\r\n\r\n @Input()\r\n public get required(): boolean | string { return this._required; }\r\n public set required(value: boolean | string) { this._required = coerceBooleanProperty(value); }\r\n protected _required = false;\r\n\r\n /**\r\n * Determines if the select is allowed to be cleared. When cleared the selects value will be null.\r\n */\r\n @Input()\r\n public clearable: boolean = false;\r\n\r\n /**\r\n * If clearable is false, but the select has no value, setting this to true will prevent select from trying to default select the first value.\r\n */\r\n @Input()\r\n public allowEmpty: boolean = false;\r\n\r\n /**\r\n * Determines if the select is searchable.\r\n */\r\n @Input()\r\n public autoComplete: boolean = true;\r\n\r\n @ContentChildren(InvolveOptionComponent, { descendants: true })\r\n private _options: QueryList>;\r\n\r\n\r\n\r\n /**\r\n * If an InvolveOptionDef is provided, the select will render options in virtual mode.\r\n * Mixing standard options with InvolveOptionDef is not supported.\r\n */\r\n @ContentChild(InvolveOptionDef)\r\n public optionDef: InvolveOptionDef;\r\n\r\n @ContentChildren(InvolveOptionGroupComponent, { descendants: true })\r\n private _optionGroups: QueryList;\r\n\r\n @ViewChild('container')\r\n private _container: ElementRef;\r\n\r\n @ViewChild('input')\r\n private _input: ElementRef;\r\n\r\n @ViewChild('selectedVirtualOptionsContainer')\r\n private _selectedVirtualOptionsContainer: ElementRef;\r\n\r\n @ViewChild(CdkConnectedOverlay)\r\n protected _dropdown: CdkConnectedOverlay;\r\n\r\n @ViewChild('viewport')\r\n private _viewport: CdkVirtualScrollViewport;\r\n\r\n @ViewChild('dropdown')\r\n private _dropdownEl: ElementRef;\r\n\r\n @ViewChild('dropdownScroll')\r\n private _dropdownScroll: ElementRef;\r\n\r\n public get dropdownOpen() { return this._dropdownOpen; }\r\n private _dropdownOpen: boolean | null = false; // when null, signals closing the pill should re-open the dropdown\r\n\r\n @ViewChild('pill')\r\n private _pillEl: ElementRef;\r\n\r\n public get pillOpen() { return this._pillOpen; }\r\n private _pillOpen = false;\r\n\r\n public form = this._fb.group({ filter: [null] });\r\n\r\n private isMultiple(value: T | T[]): value is T[] {\r\n return this._multiple;\r\n }\r\n\r\n public stateChanges = new Subject();\r\n\r\n //\r\n // Selection model\r\n //\r\n\r\n private _selectionModel: SelectionModel = new SelectionModel(this.multiple);\r\n public get isEmpty() { return this._selectionModel.isEmpty(); }\r\n public get hasValue() { return this._selectionModel.hasValue(); }\r\n public get selected() { return this._selectionModel.selected; }\r\n\r\n private get availableOptions() {\r\n if (this._selectedVirtualOptionsContainer)\r\n return this._options.filter(option => !this._selectedVirtualOptionsContainer.nativeElement.contains(option.elementRef.nativeElement));\r\n\r\n return this._options;\r\n }\r\n\r\n public get selectedOptions() {\r\n if (this._selectedVirtualOptionsContainer)\r\n return this._options.filter(option => this._selectedVirtualOptionsContainer.nativeElement.contains(option.elementRef.nativeElement));\r\n\r\n return this.selected.map(value => this._options.find(option => option.value == value));\r\n }\r\n\r\n public get visibleOptions() {\r\n return this.availableOptions.filter(option => option.visible);\r\n }\r\n\r\n /**\r\n * The width of the dropdown in virtual scroll mode.\r\n */\r\n public get width() { return this._container.nativeElement.clientWidth - 20; }\r\n\r\n /**\r\n * The height of the dropdown in virtual scroll mode.\r\n */\r\n public get height() { return this.optionDef.height * Math.min(this.optionDef.availableOptions.length, 10); }\r\n\r\n public overlayPositions = [\r\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),\r\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' })\r\n ]\r\n\r\n private _keyManager: ActiveDescendantKeyManager | ({option: any} & Highlightable)>;\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef,\r\n @Inject(DOCUMENT)\r\n private _document: Document,\r\n private _elementRef: ElementRef,\r\n private _fb: FormBuilder,\r\n private _zone: NgZone,\r\n\r\n @Optional()\r\n public control: NgControl\r\n ) {\r\n if (this.control)\r\n this.control.valueAccessor = this;\r\n }\r\n\r\n\r\n public ngOnInit() {\r\n // handle outside clicks\r\n // done outside of change detection for performance\r\n this._zone.runOutsideAngular(() => {\r\n merge(\r\n fromEvent(this._document, 'touchstart', { capture: true }),\r\n fromEvent(this._document, 'mousedown', { capture: true }),\r\n fromEvent(this._document, 'scroll', { capture: true })\r\n ).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe((event: any) => {\r\n if (this._elementRef.nativeElement.contains(event.target)\r\n || this._dropdownEl?.nativeElement?.contains(event.target)\r\n || this._pillEl?.nativeElement?.contains(event.target))\r\n return;\r\n\r\n if (this._dropdownOpen || this._pillOpen) {\r\n this._zone.run(() => {\r\n this.closeDropdown();\r\n this.closePill();\r\n });\r\n }\r\n })\r\n });\r\n }\r\n\r\n public ngAfterContentInit() {\r\n this.initKeyManager();\r\n\r\n if (this.optionDef) {\r\n this.resetOptions();\r\n this.initializeSelection();\r\n\r\n this._options.changes.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(() => {\r\n if (!this._dropdownOpen)\r\n this._cdr.detectChanges();\r\n });\r\n\r\n } else {\r\n this._options.changes.pipe(\r\n startWith(null),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(() => {\r\n this.resetOptions();\r\n this.initializeSelection();\r\n });\r\n }\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this.form.get('filter').valueChanges.pipe(\r\n takeUntil(this._destroyed$),\r\n debounceTime(250) // debounced to improve performance\r\n ).subscribe(value => {\r\n if (this.optionDef) {\r\n this.optionDef.filter = value;\r\n this.optionDef.rebuildFilteredOptions();\r\n }\r\n\r\n this._zone.run(() => {\r\n this._cdr.detectChanges();\r\n\r\n const length = this.optionDef ? this.optionDef.availableOptions.length : this.visibleOptions.length;\r\n\r\n if (length)\r\n this._keyManager.setFirstItemActive();\r\n else\r\n this._keyManager.setActiveItem(-1);\r\n });\r\n });\r\n }\r\n\r\n public ngAfterContentChecked() {\r\n // console.log('select checked', this.id);\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._keyManager?.destroy();\r\n this.stateChanges.complete();\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n //\r\n // Selection\r\n //\r\n\r\n public initializeSelection() {\r\n // need to do this async so the lifecycle hooks have a chance to run\r\n Promise.resolve().then(() => {\r\n this.setSelectionByValue(this._value);\r\n });\r\n }\r\n\r\n public setSelectionByValue(value: T) {\r\n this._selectionModel.clear();\r\n\r\n if (this.multiple && this.csv && value) {\r\n value = (value as unknown as string).split(',') as unknown as T;\r\n }\r\n\r\n if (this.optionDef) {\r\n if (this.isMultiple(value)) {\r\n value?.forEach(value => {\r\n if (this.optionDef.getByValue(value) !== undefined){\r\n this._selectionModel.select(value);\r\n }\r\n })\r\n } else {\r\n if (this.optionDef.getByValue(value) !== undefined) {\r\n this.setActiveValue(value);\r\n this._selectionModel.select(value);\r\n }\r\n }\r\n } else {\r\n if (this.isMultiple(value)) {\r\n value?.forEach(value => {\r\n if (this._options.find(option => option.value === value) !== undefined){\r\n this._selectionModel.select(value);\r\n }\r\n })\r\n } else {\r\n if (this._options && this._options.find(option => option.value === value) !== undefined) {\r\n this.setActiveValue(value);\r\n this._selectionModel.select(value);\r\n }\r\n }\r\n }\r\n\r\n this._zone.run(() => {\r\n this.stateChanges.next();\r\n this._cdr.detectChanges();\r\n });\r\n }\r\n\r\n public isSelected(value: T) {\r\n return this._selectionModel.isSelected(value);\r\n }\r\n\r\n public isFiltered(content: string) {\r\n const filter: string = this.form.get('filter').value;\r\n\r\n if (!filter)\r\n return false;\r\n\r\n return content.toLowerCase().indexOf(filter.toLowerCase()) === -1;\r\n }\r\n\r\n public select(value: T) {\r\n if (this.disabled)\r\n return;\r\n\r\n if (this.optionDef){\r\n if (this.optionDef.getByValue(value) !== undefined) {\r\n this._selectionModel.select(value);\r\n }\r\n } else {\r\n if (this._options.find(option => option.value === value) !== undefined) {\r\n this._selectionModel.select(value);\r\n }\r\n }\r\n\r\n if (!this._multiple)\r\n this.closeDropdown();\r\n\r\n\r\n this.focus();\r\n\r\n this.propagateChanges();\r\n\r\n this.stateChanges.next();\r\n this._cdr.detectChanges();\r\n }\r\n\r\n public deselect(value: T, event?: Event) {\r\n if (this.disabled)\r\n return;\r\n\r\n if (this.clearable || this.selected.length > 1) {\r\n this._selectionModel.deselect(value);\r\n this.propagateChanges();\r\n }\r\n\r\n if (this.isEmpty)\r\n this.closePill(event);\r\n\r\n if (!this.multiple && this.hasValue)\r\n this.closeDropdown(event);\r\n\r\n this.focus();\r\n\r\n this.stateChanges.next();\r\n this._cdr.detectChanges();\r\n\r\n event?.stopPropagation();\r\n }\r\n\r\n public clear(event?: Event) {\r\n this._selectionModel.clear();\r\n this.form.patchValue({ filter: null });\r\n this.propagateChanges();\r\n\r\n this.focus();\r\n\r\n this.stateChanges.next();\r\n this._cdr.detectChanges();\r\n\r\n event?.stopPropagation();\r\n }\r\n\r\n private propagateChanges() {\r\n if (this._multiple) {\r\n if (this.csv) {\r\n this._value = this.selected.join(',') as unknown as T || null;\r\n } else {\r\n (this._value as unknown as T[]) = this.selected;\r\n }\r\n } else if (this.selected.length > 0) {\r\n this._value = this.selected[0];\r\n } else {\r\n this._value = null;\r\n }\r\n\r\n this._onChange(this._value);\r\n\r\n this.valueChange.emit(this._value);\r\n this.selectionChange.emit(new InvolveSelectChange(this, this._value));\r\n }\r\n\r\n public resetOptions() {\r\n if (!this.clearable && !this.allowEmpty && this._value === null) {\r\n if (this.optionDef) {\r\n if (this.optionDef.options.length)\r\n this.value = this.optionDef.options[0].value;\r\n else\r\n this.value = null;\r\n } else {\r\n if (this._options && this._options.first)\r\n this.value = this._options.first.value;\r\n else\r\n this.value = null;\r\n }\r\n\r\n this.initKeyManager();\r\n this.propagateChanges();\r\n this.stateChanges.next();\r\n this._cdr.detectChanges();\r\n }\r\n }\r\n\r\n //\r\n // Keyboard interaction\r\n //\r\n\r\n private isMetaKey(event: KeyboardEvent) { return event.key === 'Shift' || event.key === 'Alt' || event.key === 'Control' || event.key === 'Meta' }\r\n private isArrowKey(event: KeyboardEvent) { return event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'ArrowLeft' || event.key === 'ArrowRight'; }\r\n private isNavKey(event: KeyboardEvent) { return this.isArrowKey(event) || (!event.shiftKey && (event.key === 'Home' || event.key === 'End')); }\r\n private isInteractionKey(event: KeyboardEvent) { return event.key === 'Enter' || (!this.autoComplete && event.key === 'Space'); }\r\n\r\n private _keyManagerActive: boolean = false;\r\n\r\n public initKeyManager() {\r\n if (this._keyManager)\r\n this._keyManager.destroy();\r\n\r\n if (this.optionDef) {\r\n this._keyManager = new ActiveDescendantKeyManager<{ option: any } & Highlightable>(this.optionDef.highlitableOptions);\r\n this._keyManager.skipPredicate((item: { option: any } & Highlightable) => !this.optionDef.availableOptions.includes(item.option));\r\n } else {\r\n this._keyManager = new ActiveDescendantKeyManager>(this.availableOptions)\r\n this._keyManager.skipPredicate((option: InvolveOptionComponent) => option.disabled || !option.visible);\r\n }\r\n\r\n this._keyManager\r\n .withVerticalOrientation(true)\r\n .withHomeAndEnd(true)\r\n .withWrap();\r\n\r\n this._keyManager.change.subscribe(index => {\r\n if (index < 0)\r\n return;\r\n\r\n this._keyManagerActive = true;\r\n\r\n if (this._viewport) {\r\n // calculate the true start/end range that is in the visible area of the viewport\r\n const visible = this._viewport.getViewportSize() / this.optionDef.height;\r\n let start = this._viewport.measureScrollOffset('top') / this.optionDef.height;\r\n let end = start + visible - 1;\r\n\r\n // make sure to not include items partially in view\r\n start = Math.ceil(start);\r\n end = Math.floor(end);\r\n\r\n // we also need to find the true render index of the option\r\n const option = this.optionDef.options[index];\r\n const renderIndex = this.optionDef.availableOptions.findIndex(available => available === option);\r\n\r\n // console.log(renderIndex, start, end);\r\n\r\n // scroll if not in view\r\n if (renderIndex < start)\r\n this._viewport.scrollToIndex(renderIndex);\r\n else if (renderIndex > end)\r\n this._viewport.scrollToIndex(renderIndex - visible + 1);\r\n\r\n } else if (this._dropdownScroll) {\r\n const dropdown = this._dropdownScroll.nativeElement;\r\n\r\n if (index === 0) {\r\n dropdown.scrollTop = 0;\r\n } else {\r\n const option = this._options.toArray()[index];\r\n const element = option.elementRef.nativeElement;\r\n\r\n if (element.offsetTop < dropdown.scrollTop) {\r\n dropdown.scrollTop = element.offsetTop;\r\n } else if (element.offsetTop + element.offsetHeight > dropdown.scrollTop + dropdown.offsetHeight) {\r\n dropdown.scrollTop = Math.max(0, element.offsetTop - dropdown.offsetHeight + element.offsetHeight);\r\n }\r\n }\r\n }\r\n\r\n setTimeout(() => this._keyManagerActive = false);\r\n });\r\n\r\n this._keyManager.tabOut.subscribe(() => {\r\n if (this.dropdownOpen) {\r\n if (!this.multiple && this._keyManager.activeItem) {\r\n if (this.optionDef) {\r\n const value = this.optionDef.getValue(this.optionDef.options[this._keyManager.activeItemIndex]);\r\n this.select(value);\r\n } else {\r\n const option = this._keyManager.activeItem as InvolveOptionComponent;\r\n this.select(option.value);\r\n }\r\n }\r\n\r\n this.closeDropdown();\r\n }\r\n\r\n if (this.pillOpen) {\r\n this.closePill();\r\n }\r\n });\r\n }\r\n\r\n public setActiveValue(value: T) {\r\n if (this._keyManagerActive)\r\n return;\r\n\r\n let index: number;\r\n\r\n if (this.optionDef) {\r\n index = this.optionDef.options.findIndex(option => this.optionDef.getValue(option) === value);\r\n } else {\r\n index = this._options.toArray().findIndex(option => option.value === value);\r\n }\r\n\r\n if (index !== -1) {\r\n this._keyManager.setActiveItem(index);\r\n this._cdr.detectChanges();\r\n }\r\n }\r\n\r\n @HostListener('click')\r\n public onClick() {\r\n this.toggleDropdown();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n public onKeydown(event: KeyboardEvent) {\r\n if (this.disabled)\r\n return;\r\n\r\n if (this.isMetaKey(event)) {\r\n return;\r\n } else if (event.key === 'Escape') {\r\n this.closeDropdown();\r\n } else if (!this.dropdownOpen && event.key !== 'Tab') {\r\n this.openDropdown();\r\n\r\n if (this.isArrowKey(event)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n } else if (this.dropdownOpen && event.key === 'Tab') {\r\n // this.closeDropdown();\r\n this._keyManager.onKeydown(event);\r\n }\r\n\r\n this.dropdownOpen ? this.handleOpenKeydown(event) : this.handleClosedKeydown(event);\r\n }\r\n\r\n public handleOpenKeydown(event: KeyboardEvent) {\r\n const isArrowKey = this.isArrowKey(event);\r\n const isNavKey = this.isNavKey(event);\r\n const isInteractionKey = this.isInteractionKey(event);\r\n const isBackspace = event.key === 'Backspace';\r\n\r\n if (isArrowKey && event.altKey) {\r\n this.closeDropdown();\r\n event.preventDefault();\r\n } else if (isNavKey) {\r\n this._keyManager.onKeydown(event);\r\n } else if (isInteractionKey && this._keyManager.activeItem) {\r\n let value: T;\r\n\r\n if (this.optionDef) {\r\n const item = this._keyManager.activeItem as { option: any } & Highlightable;\r\n value = this.optionDef.getValue(item.option);\r\n } else {\r\n const option = this._keyManager.activeItem as InvolveOptionComponent;\r\n value = option.value;\r\n }\r\n\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n\r\n if (this._multiple && this.multiMode === 'pill') {\r\n const length = this.optionDef ? this.optionDef.availableOptions.length : this.visibleOptions.length;\r\n\r\n if (length)\r\n this._keyManager.setNextItemActive();\r\n else\r\n this._keyManager.setActiveItem(-1);\r\n }\r\n }\r\n\r\n event.preventDefault();\r\n } else if (isBackspace) {\r\n if (!this.form.get('filter').value && this._multiple && this.multiMode === 'pill' && this.clearable)\r\n this.clear();\r\n }\r\n }\r\n\r\n public handleClosedKeydown(event: KeyboardEvent) {\r\n // do we need to do anything? I think everything is covered...\r\n }\r\n\r\n public toggleDropdown() {\r\n if (this._disabled)\r\n return;\r\n\r\n if (this._dropdownOpen) {\r\n if (!this.autoComplete)\r\n this.closeDropdown();\r\n } else {\r\n this.openDropdown();\r\n }\r\n }\r\n\r\n public openDropdown(event?: Event) {\r\n if (this._disabled)\r\n return;\r\n\r\n this._dropdownOpen = true;\r\n this._pillOpen = false;\r\n\r\n this.focus();\r\n\r\n this._cdr.detectChanges();\r\n\r\n event?.stopPropagation();\r\n }\r\n\r\n public closeDropdown(event?: Event) {\r\n this._dropdownOpen = false;\r\n this.form.patchValue({ filter: null });\r\n\r\n this._cdr.detectChanges();\r\n\r\n event?.stopPropagation();\r\n }\r\n\r\n public dropdownAttach() {\r\n this._zone.run(() => this._cdr.detectChanges());\r\n\r\n // this._dropdown.positionChange.pipe(\r\n // take(1)\r\n // ).subscribe(() => {\r\n // this._cdr.detectChanges();\r\n // });\r\n }\r\n\r\n //\r\n // Pill open/close\r\n //\r\n\r\n public togglePill(event?: Event) {\r\n this._pillOpen ? this.closePill(event) : this.openPill(event);\r\n }\r\n\r\n public openPill(event?: Event) {\r\n if (this.selected.length > 1) {\r\n this._pillOpen = true;\r\n\r\n if (this._dropdownOpen)\r\n this._dropdownOpen = null;\r\n\r\n this._cdr.detectChanges();\r\n }\r\n\r\n event?.stopPropagation();\r\n }\r\n\r\n public closePill(event?: Event) {\r\n this._pillOpen = false;\r\n\r\n if (this._dropdownOpen === null)\r\n this._dropdownOpen = true;\r\n\r\n this._cdr.detectChanges();\r\n\r\n event?.stopPropagation();\r\n }\r\n\r\n public onContainerClick(event: MouseEvent) {\r\n this.focus();\r\n }\r\n\r\n public focus(options?: FocusOptions) {\r\n if (this._document.activeElement !== this._input.nativeElement) {\r\n this._input.nativeElement.focus();\r\n return;\r\n }\r\n }\r\n\r\n //\r\n // ControlValueAccessor interface\r\n //\r\n\r\n public writeValue(value: T): void {\r\n this._value = value;\r\n this.initializeSelection();\r\n }\r\n\r\n private _onChange: (value: T) => void = () => { };\r\n public registerOnChange(fn: () => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n private _onTouched: () => void = () => { };\r\n public registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.stateChanges.next();\r\n this._cdr.detectChanges();\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SidebarService {\r\n private _activeId: string = null;\r\n\r\n open(id: string) {\r\n this._activeId = id;\r\n }\r\n\r\n close(){\r\n this._activeId = null;\r\n }\r\n \r\n public get activeId() : string {\r\n return this._activeId;\r\n }\r\n}","\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n
    ","import { Component, ContentChild, Directive, ElementRef, HostListener, Inject, Input, OnDestroy, TemplateRef } from '@angular/core';\r\nimport { CdkOverlayOrigin, ConnectionPositionPair } from '@angular/cdk/overlay';\r\nimport { trigger, style, animate, transition } from '@angular/animations';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { BreakpointObserver } from '@angular/cdk/layout';\r\n\r\nimport { SidebarService } from './services/side-bar-service.service';\r\nimport { map } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[involveSidebarHeader]'\r\n})\r\nexport class SidebarHeaderDirective {\r\n\r\n constructor(public readonly templateRef: TemplateRef) { }\r\n}\r\n\r\n@Directive({\r\n selector: '[involveSidebarContent]',\r\n})\r\nexport class SidebarContentDirective {\r\n\r\n constructor(public readonly templateRef: TemplateRef) { }\r\n}\r\n\r\n@Directive({\r\n selector: '[involveSidebarFooter]',\r\n})\r\nexport class SidebarFooterDirective {\r\n\r\n constructor(public readonly templateRef: TemplateRef) { }\r\n}\r\n\r\n@Component({\r\n selector: 'involve-sidebar',\r\n templateUrl: './side-bar.component.html',\r\n styleUrls: ['./side-bar.component.scss'],\r\n animations: [\r\n trigger('slideInOut', [\r\n transition(':enter', [\r\n style({\r\n transform: 'translateX(100%)',\r\n }),\r\n animate('400ms ease-in', style({\r\n opacity: 1,\r\n transform: 'translateX(0%)'\r\n }))\r\n ]),\r\n transition(':leave', [\r\n animate('300ms ease-in', style({\r\n opacity: 0,\r\n transform: 'translateX(100%)',\r\n }))\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class SidebarComponent implements OnDestroy {\r\n private static readonly __usedIds: { [id: string]: SidebarComponent } = {};\r\n\r\n @ContentChild(SidebarContentDirective, { descendants: true }) public sideBarContent: SidebarContentDirective;\r\n @ContentChild(SidebarHeaderDirective, { descendants: true }) public sideBarHeader: SidebarHeaderDirective;\r\n @ContentChild(SidebarFooterDirective, { descendants: true }) public sideBarFooter: SidebarFooterDirective;\r\n\r\n @HostListener('document:keydown.escape') onKeydownHandler() {\r\n this.closeDrawer();\r\n }\r\n\r\n @Input() set id(stringId: string) {\r\n if (SidebarComponent.__usedIds[stringId] && SidebarComponent.__usedIds[stringId] !== this) {\r\n console.warn(`side bar collision detected: ${stringId}`);\r\n return;\r\n }\r\n\r\n SidebarComponent.__usedIds[stringId] = this;\r\n this._id = stringId;\r\n };\r\n\r\n @Input() width: number = 50;\r\n\r\n readonly position = [\r\n new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'top' })\r\n ];\r\n\r\n private _id: string;\r\n\r\n public origin: CdkOverlayOrigin;\r\n\r\n public mobile$ = this._breakpointObserver.observe('(max-width: 480px)').pipe(\r\n map(breakpoint => breakpoint.matches)\r\n );\r\n\r\n constructor(\r\n private _sidebarService: SidebarService,\r\n @Inject(DOCUMENT) document: Document,\r\n private _breakpointObserver: BreakpointObserver\r\n ) {\r\n this.origin = new CdkOverlayOrigin(new ElementRef(document.body));\r\n }\r\n\r\n get isOpen() {\r\n return this._sidebarService.activeId === this._id;\r\n }\r\n\r\n public closeDrawer() {\r\n this._sidebarService.close();\r\n }\r\n\r\n public ngOnDestroy() {\r\n if (this._id && SidebarComponent.__usedIds[this._id] === this) {\r\n delete SidebarComponent.__usedIds[this._id];\r\n }\r\n\r\n this.closeDrawer();\r\n }\r\n}\r\n\r\n","\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n {{errorMessage}}\r\n \r\n \r\n\r\n
    ","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n\r\n@Component({\r\n selector: 'involve-smart-container',\r\n templateUrl: './smart-container.component.html',\r\n styleUrls: ['./smart-container.component.css']\r\n})\r\n\r\n\r\n\r\nexport class SmartContainerComponent implements OnInit {\r\n\r\n @Input()\r\n public isLoading = false;\r\n\r\n @Input()\r\n public isLoaded = false;\r\n\r\n @Input()\r\n public errorMessage;\r\n\r\n constructor() { \r\n }\r\n\r\n ngOnInit() {\r\n \r\n\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { map } from 'rxjs/operators';\r\nimport { AnimationOptions } from 'ngx-lottie';\r\n\r\n@Component({\r\n selector: 'app-spinner',\r\n template: `\r\n \r\n \r\n `\r\n})\r\nexport class SpinnerComponent implements OnInit {\r\n\r\n @Input() height: number = 300;\r\n\r\n public lottieConfig$: Observable;\r\n\r\n public styles: Partial = {\r\n margin: '0 auto'\r\n };\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.lottieConfig$ = this._store.pipe(\r\n select(fromCore.UserSession.getSessionThemeId),\r\n map(themeId => ({\r\n path: this.getSpinnerJson(themeId),\r\n renderer: 'svg',\r\n autoplay: true,\r\n loop: true\r\n }))\r\n )\r\n }\r\n\r\n private getSpinnerJson(themeId: number) {\r\n switch (themeId) {\r\n default:\r\n case 2:\r\n return 'assets/spinner-light.json';\r\n case 1:\r\n return 'assets/spinner-dark.json';\r\n }\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n/**\r\n * Displays a vertical colored | to indicate status visually.\r\n */\r\n@Component({\r\n selector: 'involve-status-bar',\r\n templateUrl: 'status-bar.component.html'\r\n})\r\nexport class InvolveStatusBarComponent {\r\n @Input()\r\n public color: string = 'transparent';\r\n\r\n @Input()\r\n public width = 4;\r\n\r\n @Input()\r\n public height = 28;\r\n}","
    ","
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n \r\n
    \r\n
    \r\n","import { ActivatedRoute, Params, Router } from '@angular/router';\r\nimport { Component, ContentChildren, EventEmitter, Input, Output, QueryList } from '@angular/core';\r\nimport { Store } from '@ngrx/store';\r\nimport { asapScheduler, Subject, takeUntil } from 'rxjs';\r\nimport { TabComponent } from './tab.component';\r\n\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Component({\r\n selector: 'involve-tab-group',\r\n templateUrl: './tab-group.component.html',\r\n styleUrls: ['tab-group.component.scss']\r\n})\r\nexport class TabGroupComponent {\r\n private static _params: Params = {};\r\n\r\n @ContentChildren(TabComponent)\r\n public tabs!: QueryList;\r\n\r\n @Input()\r\n public hasHeader: boolean = true;\r\n\r\n @Input()\r\n public tileHeaderTabs: boolean = false;\r\n\r\n @Input()\r\n public name: string | null = null;\r\n\r\n @Input()\r\n public headerAlignment: 'left' | 'center' | 'right' = 'left'; // Default is left\r\n\r\n @Input()\r\n public isDisabled: boolean = false;\r\n\r\n @Input()\r\n public defaultTabId: string;\r\n\r\n public selectedTabId: string;\r\n\r\n @Output()\r\n public tabChange = new EventEmitter();\r\n\r\n public selectedTab: TabComponent;\r\n\r\n public viewInit = false;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private router: Router,\r\n private route: ActivatedRoute,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public ngOnInit() {\r\n if (this.route.snapshot.queryParamMap.has(this.name)) {\r\n this.selectedTabId = this.route.snapshot.queryParamMap.get(this.name);\r\n }\r\n\r\n if (this.name && TabGroupComponent._params[this.name]) {\r\n console.warn(`TabGroup collision detected for '${this.name}'!`);\r\n }\r\n }\r\n\r\n public ngAfterContentInit() {\r\n if (this.selectedTabId) {\r\n this.setActiveTab(this.selectedTabId);\r\n } else if (this.defaultTabId && this.tabs.find(tab => tab.id == this.defaultTabId)) {\r\n this.setActiveTab(this.defaultTabId);\r\n } else {\r\n this.setActiveTab(this.tabs.first?.id);\r\n }\r\n\r\n this.viewInit = true;\r\n\r\n this.route.queryParams.pipe(takeUntil(this._destroyed$)).subscribe(params => {\r\n if (!this.tabs.find(tab => tab.id == params[this.name])) {\r\n this.setActiveTab(this.tabs.find(tab => tab.id == this.selectedTabId) ? this.selectedTabId : this.tabs.first?.id);\r\n }\r\n else if (this.selectedTabId !== params[this.name]) {\r\n this.setActiveTab(params[this.name]);\r\n }\r\n })\r\n\r\n }\r\n\r\n public setActiveTab(tabId: string) {\r\n if (tabId) {\r\n const tab = this.tabs.find(tab => tab.id == tabId);\r\n\r\n if (tab) {\r\n if (this.selectedTab !== tab) {\r\n this.selectedTab = tab;\r\n this.selectedTabId = tab.id;\r\n this.tabChange.emit(tab.id);\r\n }\r\n }\r\n }\r\n\r\n if (this.name) {\r\n TabGroupComponent._params[this.name] = tabId;\r\n\r\n const filteredParams = Object.fromEntries(\r\n Object.entries(TabGroupComponent._params).filter(([key, value]) => value !== undefined)\r\n );\r\n\r\n this._store$.dispatch(fromDashboard.setActiveTabs(filteredParams))\r\n\r\n const nav = this.router.getCurrentNavigation();\r\n\r\n if (!nav)\r\n //need the asapScheduler because the navigate sometimes ovrrides the navigate in ngOnDestroy\r\n asapScheduler.schedule(() => {\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: TabGroupComponent._params,\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true\r\n });\r\n });\r\n }\r\n }\r\n\r\n getAlignmentStyle(): { [c: string]: string; } {\r\n switch (this.headerAlignment) {\r\n case 'center':\r\n return { 'justify-content': 'center' };\r\n case 'right':\r\n return { 'justify-content': 'flex-end' };\r\n default:\r\n return { 'justify-content': 'flex-start' };\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n\r\n if (this.name) {\r\n TabGroupComponent._params[this.name] = undefined;\r\n const nav = this.router.getCurrentNavigation();\r\n const filteredParams = Object.fromEntries(Object.entries(TabGroupComponent._params).filter(([key, value]) => value !== undefined));\r\n this._store$.dispatch(fromDashboard.setActiveTabs(filteredParams));\r\n\r\n if (!nav) {\r\n asapScheduler.schedule(() => {\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: TabGroupComponent._params,\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true\r\n });\r\n });\r\n\r\n }\r\n }\r\n }\r\n} \r\n","import { Component, ContentChild, Directive, Input, OnInit, TemplateRef } from '@angular/core';\r\n\r\nexport interface ITab {\r\n id: string;\r\n name: string;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveTabContent]',\r\n})\r\nexport class TabContentDirective {\r\n\r\n constructor(public readonly templateRef: TemplateRef) { }\r\n}\r\n\r\n@Directive({\r\n selector: '[involveTabHeader]',\r\n})\r\nexport class TabHeaderDirective {\r\n\r\n constructor(public readonly templateRef: TemplateRef) { }\r\n}\r\n\r\n@Directive({\r\n selector: 'involve-tab', \r\n})\r\nexport class TabComponent {\r\n @Input() \r\n public id!: string; \r\n\r\n @ContentChild(TabContentDirective, { descendants: true , static: true})\r\n public content: TabContentDirective;\r\n\r\n @ContentChild(TabHeaderDirective, { descendants: true , static: true}) \r\n public header: TabHeaderDirective;\r\n\r\n}\r\n","import { ContentChild, Directive, Input, ElementRef, TemplateRef, Inject, OnDestroy, ViewContainerRef, Component, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core';\r\nimport { InvolveDataSource } from './data-source';\r\nimport { InvolveTable } from './table';\r\n\r\n\r\nimport { INVOLVE_COLUMN_DEF, INVOLVE_TABLE } from './tokens';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Directive()\r\nexport class InvolveBaseCellDef {\r\n public constructor(\r\n public templateRef: TemplateRef,\r\n\r\n @Inject(INVOLVE_TABLE)\r\n public table: InvolveTable\r\n ) { }\r\n}\r\n\r\nexport interface InvolveCellContext {\r\n $implicit: T;\r\n\r\n // relative to the post search/filtered/grouped set\r\n index: number;\r\n count: number;\r\n first: boolean;\r\n last: boolean;\r\n even: boolean;\r\n odd: boolean;\r\n\r\n nestedLevel: number;\r\n toggleView: (name: string) => void;\r\n isViewVisible: (name: string) => boolean;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveCellDef]',\r\n inputs: ['useTypeFrom: involveCellDefUseTypeFrom']\r\n})\r\nexport class InvolveCellDef extends InvolveBaseCellDef {\r\n public static ngTemplateContextGuard(dir: InvolveCellDef, ctx: unknown): ctx is InvolveCellContext {\r\n return true;\r\n }\r\n\r\n public useTypeFrom: InvolveDataSource;\r\n}\r\n\r\nexport interface InvolveGroupCellContext {\r\n $implicit: {\r\n rows: T[];\r\n\r\n groupKey: any;\r\n isExpanded: boolean;\r\n\r\n expand: () => void;\r\n collapse: () => void;\r\n toggle: () => void;\r\n };\r\n}\r\n\r\n@Directive({\r\n selector: '[involveGroupCellDef]',\r\n inputs: ['useTypeFrom: involveGroupCellDefUseTypeFrom']\r\n})\r\nexport class InvolveGroupCellDef extends InvolveBaseCellDef> {\r\n public static ngTemplateContextGuard(dir: InvolveGroupCellDef, ctx: unknown): ctx is InvolveGroupCellContext {\r\n return true;\r\n }\r\n\r\n public useTypeFrom: InvolveDataSource;\r\n}\r\n\r\n@Directive({ selector: '[involveHeaderCellDef]'})\r\nexport class InvolveHeaderCellDef extends InvolveBaseCellDef {}\r\n\r\n@Directive({ selector: '[involveFooterCellDef]'})\r\nexport class InvolveFooterCellDef extends InvolveBaseCellDef {}\r\n\r\n@Directive({ \r\n selector: '[involveColumnDef]',\r\n providers: [\r\n { provide: INVOLVE_COLUMN_DEF, useExisting: InvolveColumnDef }\r\n ]\r\n})\r\nexport class InvolveColumnDef {\r\n @Input('involveColumnDef')\r\n public get name() {\r\n return this._name;\r\n }\r\n public set name(value: string) {\r\n if (value)\r\n this._name = value;\r\n }\r\n protected _name: string;\r\n\r\n public get columnCssClassName() {\r\n return [`involve-column-${this._name.replace(/[^a-z0-9_-]/gi, '-')}`];\r\n }\r\n\r\n @ContentChild(InvolveCellDef)\r\n public cell: InvolveCellDef;\r\n\r\n @ContentChild(InvolveGroupCellDef)\r\n public groupCell: InvolveGroupCellDef;\r\n\r\n @ContentChild(InvolveHeaderCellDef)\r\n public headerCell: InvolveHeaderCellDef;\r\n\r\n @ContentChild(InvolveFooterCellDef)\r\n public footerCell: InvolveFooterCellDef;\r\n\r\n public constructor(\r\n public readonly parent: InvolveTable\r\n ) { }\r\n}\r\n\r\n@Directive()\r\nexport class BaseInvolveCell {\r\n public constructor(columnDef: InvolveColumnDef, elementRef: ElementRef) {\r\n const classList = elementRef.nativeElement.classList;\r\n for (const className of columnDef.columnCssClassName) {\r\n classList.add(className);\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'involve-header-cell, th[involve-header-cell]',\r\n host: {\r\n 'class': 'involve-header-cell',\r\n 'role': 'columnheader'\r\n },\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'headerCell' }\r\n ]\r\n})\r\nexport class InvolveHeaderCell extends BaseInvolveCell {}\r\n\r\n@Directive({\r\n selector: 'involve-footer-cell, td[involve-footer-cell]',\r\n host: {\r\n 'class': 'involve-footer-cell',\r\n 'role': 'cell'\r\n },\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'footerCell' }\r\n ]\r\n})\r\nexport class InvolveFooterCell extends BaseInvolveCell { }\r\n\r\n@Directive({\r\n selector: 'involve-cell, td[involve-cell]',\r\n host: {\r\n 'class': 'involve-cell',\r\n 'role': 'cell'\r\n },\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'cell' }\r\n ]\r\n})\r\nexport class InvolveCell extends BaseInvolveCell { }\r\n\r\n@Directive({\r\n selector: '[involveCellOutlet]'\r\n})\r\nexport class InvolveCellOutlet implements OnDestroy {\r\n public static mostRecentCellOutlet: InvolveCellOutlet = null;\r\n\r\n public constructor(\r\n public viewContainerRef: ViewContainerRef\r\n ) {\r\n InvolveCellOutlet.mostRecentCellOutlet = this;\r\n }\r\n\r\n public ngOnDestroy() {\r\n if (InvolveCellOutlet.mostRecentCellOutlet === this)\r\n InvolveCellOutlet.mostRecentCellOutlet = null;\r\n }\r\n}\r\n","import { CollectionViewer, SelectionModel } from '@angular/cdk/collections';\r\nimport moment from 'moment';\r\n\r\nimport { BehaviorSubject, Observable, Subscription, combineLatest, of, isObservable } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, filter, map, mergeMap, shareReplay, startWith, switchMap, tap, windowToggle } from 'rxjs/operators';\r\n\r\nimport { InvolvePaginator } from './paginator';\r\nimport { InvolveSort, SortDirection } from './sort';\r\n\r\n\r\nexport declare type InvolveDataSourceFilterRangeType = 'range' | 'date-range';\r\nexport declare type InvolveDataSourceFilterType = 'value' | InvolveDataSourceFilterRangeType;\r\n\r\n// TODO(modonnell): this is a useful operator and should move somewhere else for easier reusability\r\nfunction pause(signal: Observable, comparator: (value: T) => boolean = value => !!value) {\r\n return function (source: Observable) {\r\n return source.pipe(\r\n windowToggle(\r\n signal.pipe(\r\n distinctUntilChanged(),\r\n filter(value => !comparator(value))\r\n ),\r\n () => signal.pipe(\r\n distinctUntilChanged(),\r\n filter(value => comparator(value))\r\n ),\r\n ),\r\n mergeMap(source => source)\r\n );\r\n };\r\n}\r\n\r\ninterface IRange {\r\n start: T extends 'date-range' ? BehaviorSubject : BehaviorSubject;\r\n end: T extends 'date-range' ? BehaviorSubject : BehaviorSubject;\r\n}\r\n\r\ninterface IRangeMap extends Map, IRange> {\r\n get(key: InvolveDataSourceFilter): IRange;\r\n set(key: InvolveDataSourceFilter, value: IRange): this;\r\n}\r\n\r\nexport interface InvolveDataSourceFilter {\r\n id: string;\r\n type: T;\r\n\r\n // field names\r\n value: string;\r\n display?: string;\r\n color?: string;\r\n order?: string;\r\n\r\n // cascading filters will generate filter items based on the data set of previously selected cascading filters\r\n // non-cascading filters are considered 'global' and will pre-filter the data before the cascading filters are checked\r\n // cascading filters are inverted - if the filter is on the matching rows will NOT be included\r\n cascade?: boolean;\r\n}\r\n\r\nexport interface InvolveDataSourceFilterValueItem {\r\n id: string;\r\n\r\n source: InvolveDataSourceFilter<'value'>;\r\n\r\n value: any;\r\n\r\n totalCount: number;\r\n searchedCount: number;\r\n\r\n name?: string;\r\n color?: string;\r\n order?: number;\r\n}\r\n\r\nexport class InvolveDataSourceFilterRangeItem {\r\n public constructor(\r\n public readonly id: string,\r\n public readonly source: InvolveDataSourceFilter<'range'>,\r\n public searchedCount: number,\r\n public min: number,\r\n public max: number,\r\n private _range: IRange<'range'>\r\n ) { }\r\n\r\n public get start() { return this._range.start.value; }\r\n public set start(value: number) { this._range.start.next(value); }\r\n\r\n public get end() { return this._range.end.value; }\r\n public set end(value: number) { this._range.end.next(value); }\r\n}\r\n\r\nexport class InvolveDataSourceFilterDateRangeItem {\r\n public constructor(\r\n public readonly id: string,\r\n public readonly source: InvolveDataSourceFilter<'date-range'>,\r\n public searchedCount: number,\r\n public min: Date,\r\n public max: Date,\r\n private _range: IRange<'date-range'>\r\n ) { }\r\n\r\n public get start() { return this._range.start.value; }\r\n public set start(value: Date) { this._range.start.next(value); }\r\n\r\n public get end() { return this._range.end.value; }\r\n public set end(value: Date) { this._range.end.next(value); }\r\n}\r\n\r\nexport declare type InvolveDataSourceFilterItem\r\n = InvolveDataSourceFilterValueItem\r\n | InvolveDataSourceFilterRangeItem\r\n | InvolveDataSourceFilterDateRangeItem\r\n\r\nexport interface InvolveDataSourceRow {\r\n index: number; // this will always be the raw index of the record into the input array, pre search/filter/sort/group\r\n data: T,\r\n searchMatch?: boolean;\r\n}\r\nexport interface InvolveDataSourceRowGroup {\r\n sort: number;\r\n groupKey: string;\r\n isExpanded: boolean;\r\n rows: InvolveDataSourceRow[];\r\n};\r\n\r\nexport abstract class InvolveDataSourceAccessor {\r\n abstract get dataSource(): InvolveDataSource\r\n}\r\n\r\nexport class InvolveDataSource {\r\n\r\n private _parent: {\r\n\r\n dataSource: InvolveDataSource;\r\n subscription: Subscription;\r\n };\r\n\r\n private _children = new Set>();\r\n\r\n public addChild(dataSource: InvolveDataSource) {\r\n if (dataSource._parent)\r\n throw new Error(\"InvolveDataSource is already parented.\")\r\n\r\n const subscription = this._search.subscribe(search => dataSource._search.next(search));\r\n\r\n dataSource._parent = { dataSource: this, subscription };\r\n\r\n this._children.add(dataSource);\r\n\r\n }\r\n\r\n public removeChild(dataSource: InvolveDataSource) {\r\n if (this._children.has(dataSource)) {\r\n dataSource._parent.subscription.unsubscribe();\r\n dataSource._parent = null;\r\n this._children.delete(dataSource);\r\n }\r\n }\r\n\r\n private readonly _data: BehaviorSubject;\r\n public get data() { return this._data.value; };\r\n public set data(value: T[]) { this._data.next(value); }\r\n public get data$() { return this._data.asObservable(); }\r\n\r\n private readonly _groupBy: BehaviorSubject;\r\n public get groupBy() { return this._groupBy.value; }\r\n public set groupBy(value: string) { this._groupBy.next(value); }\r\n\r\n public defaultGroupExpanded: boolean = true;\r\n\r\n private readonly _groups: BehaviorSubject<{\r\n [groupKey: string]: InvolveDataSourceRowGroup\r\n }>;\r\n\r\n public toggleGroup(groupKey: string) {\r\n this._groups.next({\r\n ...this._groups.value,\r\n [groupKey]: {\r\n ...this._groups.value[groupKey],\r\n isExpanded: !this._groups.value[groupKey].isExpanded\r\n }\r\n });\r\n }\r\n\r\n public collapse(groupKey: string) {\r\n this._groups.next({\r\n ...this._groups.value,\r\n [groupKey]: {\r\n ...this._groups.value[groupKey],\r\n isExpanded: false\r\n }\r\n });\r\n }\r\n\r\n public expand(groupKey: string) {\r\n this._groups.next({\r\n ...this._groups.value,\r\n [groupKey]: {\r\n ...this._groups.value[groupKey],\r\n isExpanded: true\r\n }\r\n });\r\n }\r\n\r\n public collapseAll() {\r\n const groups = this._groups.value;\r\n\r\n this._groups.next(Object.keys(groups).reduce((accumulator, groupKey) => {\r\n accumulator[groupKey] = {\r\n ...groups[groupKey],\r\n isExpanded: false\r\n };\r\n\r\n return accumulator;\r\n }, {}));\r\n }\r\n\r\n public expandAll() {\r\n const groups = this._groups.value;\r\n\r\n this._groups.next(Object.keys(groups).reduce((accumulator, groupKey) => {\r\n accumulator[groupKey] = {\r\n ...groups[groupKey],\r\n isExpanded: true\r\n };\r\n\r\n return accumulator;\r\n }, {}));\r\n }\r\n\r\n public get isAllExpanded() {\r\n const groups = this._groups.value;\r\n return !Object.keys(groups).some(groupKey => !groups[groupKey].isExpanded);\r\n }\r\n\r\n public get isAnyExpanded() {\r\n const groups = this._groups.value;\r\n return Object.keys(groups).some(groupKey => groups[groupKey].isExpanded);\r\n }\r\n\r\n /**\r\n * The search applied to the data source.\r\n */\r\n private _isSearching = new BehaviorSubject(false);\r\n public readonly isSearching$ = this._isSearching.asObservable().pipe(\r\n distinctUntilChanged()\r\n );\r\n\r\n\r\n private readonly _search = new BehaviorSubject('');\r\n public get search() { return this._search.value; }\r\n public set search(value: string) { this._search.next(value); }\r\n\r\n private _firstSearch: boolean = true;\r\n private readonly _search$: Observable = this._search.pipe(\r\n distinctUntilChanged(),\r\n tap(_ => this._firstSearch ? this._firstSearch = false : this._isSearching.next(true)),\r\n map(value => value?.trim().toLowerCase() || '')\r\n );\r\n\r\n // post search results\r\n private _searchSet: Set>;\r\n public searchSet$: Observable>>;\r\n\r\n public readonly searchedRows$: Observable[]>;\r\n\r\n private _searchedData = new BehaviorSubject(null);\r\n public readonly searchedData$ = this._searchedData.asObservable();\r\n public readonly searchedDataCount$ = this.searchedData$.pipe(\r\n map(searchedData => searchedData?.length || null)\r\n );\r\n\r\n /**\r\n * The filter applied to the data source.\r\n */\r\n private _filters: BehaviorSubject;\r\n public get filters() { return this._filters.value; }\r\n public set filters(value: InvolveDataSourceFilter[]) { this._filters.next(value); }\r\n\r\n public addFilter(filter: InvolveDataSourceFilter) {\r\n this._filters.next([\r\n ...this.filters,\r\n filter\r\n ]);\r\n }\r\n\r\n private _filterItems: BehaviorSubject;\r\n public get filterItems$() { return this._filterItems.asObservable(); }\r\n public readonly filterSelection = new SelectionModel(true);\r\n\r\n private _pauseSignal = new BehaviorSubject(false);\r\n\r\n private _filterRanges = new BehaviorSubject(null);\r\n\r\n public readonly filterSelectionChange$ = this.filterSelection.changed.asObservable().pipe(\r\n pause(this._pauseSignal)\r\n );\r\n\r\n private readonly filterRangeChange$ = this._filterRanges.asObservable().pipe(\r\n switchMap(filterRanges => filterRanges ? combineLatest(Array.from(filterRanges.keys()).map(filter =>\r\n combineLatest([\r\n filterRanges.get(filter).start.asObservable(),\r\n filterRanges.get(filter).end.asObservable()\r\n ]).pipe(\r\n map(([start, end]) => filter)\r\n ))\r\n ) : of(null)),\r\n pause(this._pauseSignal)\r\n );\r\n\r\n // post search + filter result\r\n private _filteredRows$: Observable[]>;\r\n public readonly filteredData$: Observable;\r\n public readonly filteredDataCount$: Observable;\r\n\r\n public readonly sortedData$ = new BehaviorSubject(null);\r\n\r\n /**\r\n * The sort operation applied to the data source.\r\n */\r\n private _sort: InvolveSort;\r\n public get sort() { return this._sort; }\r\n public set sort(value: InvolveSort) {\r\n this._sort = value;\r\n this.invalidate();\r\n }\r\n\r\n public readonly rows$: Observable[]>;\r\n\r\n /**\r\n * The pagination operation applied to the data source.\r\n */\r\n private _paginator: InvolvePaginator;\r\n public get paginator() { return this._paginator; }\r\n public set paginator(value: InvolvePaginator) {\r\n this._paginator = value;\r\n this.invalidate();\r\n }\r\n\r\n /**\r\n * The number of rows on the page.\r\n */\r\n private readonly _rowCount = new BehaviorSubject(0);\r\n public readonly rowCount$ = this._rowCount.asObservable();\r\n\r\n /**\r\n * Number of rows available after searching/cascading filters\r\n */\r\n private readonly _allFilterCount = new BehaviorSubject(0);\r\n public readonly allFilterCount$ = this._allFilterCount.asObservable();\r\n\r\n /**\r\n * Render set.\r\n */\r\n private readonly _renderRows = new BehaviorSubject<(InvolveDataSourceRow | InvolveDataSourceRowGroup)[]>(null);\r\n public readonly renderData = this._renderRows.asObservable();\r\n private _renderSubscription = Subscription.EMPTY;\r\n\r\n public constructor(\r\n initialData: T[] | Observable = null,\r\n\r\n // allow customizing how we get columns (to search), and values (to filter)\r\n private _columnAccessor: (data: T) => string[] = (data) => Object.keys(data),\r\n private _valueAccessor: (data: T, columnName: string) => any = (data, columnName) => data[columnName]\r\n ) {\r\n\r\n if (isObservable(initialData)) {\r\n this._data = new BehaviorSubject(null);\r\n initialData.subscribe(data => this._data.next(data))\r\n } else {\r\n this._data = new BehaviorSubject(initialData);\r\n }\r\n\r\n // create rows\r\n this.rows$ = this._data.pipe(\r\n map(data => data?.map((data, index) => ({ index, data })) || null),\r\n tap(data => this._searchCache = new WeakMap()),\r\n shareReplay(1)\r\n );\r\n\r\n // search \r\n this.searchedRows$ = combineLatest([\r\n this.rows$,\r\n this._search$.pipe(\r\n debounceTime(300)\r\n )\r\n ]).pipe(\r\n map(([rows, search]) => {\r\n if (!search)\r\n return rows;\r\n\r\n const filteredRows = rows.filter(row => this.searchPredicate(row.data, search));\r\n\r\n if (filteredRows.length === 0 && this._parent) {\r\n return rows;\r\n }\r\n\r\n return filteredRows;\r\n }),\r\n tap(data => this._searchedData.next(data?.map(row => row.data) || [])),\r\n shareReplay(1)\r\n );\r\n\r\n\r\n // filter\r\n this._filters = new BehaviorSubject([]);\r\n this._filterItems = new BehaviorSubject([]);\r\n\r\n this._filteredRows$ = combineLatest([\r\n combineLatest([\r\n this.rows$,\r\n this._filters.pipe(\r\n debounceTime(0),\r\n )\r\n ]).pipe(\r\n tap(_ => this._pauseSignal.next(true)),\r\n map(([rows, filters]) => {\r\n // save selections\r\n const [valueSelections, rangeSelections] = this.filterSelection.selected.reduce((acc, filterItem) => {\r\n if (InvolveDataSource.isFilterValueItem(filterItem)) {\r\n if (!acc[0].has(filterItem.source))\r\n acc[0].set(filterItem.source, new Set());\r\n\r\n acc[0].get(filterItem.source).add(filterItem.value);\r\n } else {\r\n acc[1].add(filterItem.source);\r\n }\r\n\r\n return acc;\r\n }, [\r\n new Map, Set>(),\r\n new Set>()\r\n ]);\r\n\r\n // clear existing selections\r\n this.filterSelection.clear();\r\n\r\n const prevRanges = this._filterRanges.value;\r\n this._filterRanges.next(null);\r\n\r\n // sanity check\r\n if (!rows?.length || !filters?.length)\r\n return [];\r\n\r\n const [valueFilters, rangeFilters] = filters.reduce((acc, filter) => {\r\n if (InvolveDataSource.isDataSourceFilterValue(filter))\r\n acc[0].push(filter);\r\n else if (InvolveDataSource.isFilterRange(filter) || InvolveDataSource.isFilterDateRange(filter))\r\n acc[1].push(filter);\r\n\r\n return acc;\r\n }, [[], []] as [InvolveDataSourceFilter<'value'>[], InvolveDataSourceFilter<'range' | 'date-range'>[]]);\r\n\r\n // (re)build filter items\r\n const filterItems: InvolveDataSourceFilterItem[] = [];\r\n\r\n if (rangeFilters.length) {\r\n const filterRanges: IRangeMap = new Map();\r\n\r\n rangeFilters.forEach(filter => {\r\n let filterItem: InvolveDataSourceFilterDateRangeItem | InvolveDataSourceFilterRangeItem;\r\n\r\n if (InvolveDataSource.isFilterRange(filter)) {\r\n const range = prevRanges?.get(filter) || { start: new BehaviorSubject(null), end: new BehaviorSubject(null) };\r\n filterItem = new InvolveDataSourceFilterRangeItem(`${filter.id}-${filter.value}`, filter, 0, null, null, range);\r\n filterRanges.set(filter, range);\r\n } else if (InvolveDataSource.isFilterDateRange(filter)) {\r\n\r\n const range = prevRanges?.get(filter) || { start: new BehaviorSubject(null), end: new BehaviorSubject(null) };\r\n filterItem = new InvolveDataSourceFilterDateRangeItem(`${filter.id}-${filter.value}`, filter, 0, null, null, range);\r\n filterRanges.set(filter, range);\r\n }\r\n\r\n filterItems.push(filterItem);\r\n\r\n if (rangeSelections.has(filter))\r\n this.filterSelection.select(filterItem);\r\n });\r\n\r\n this._filterRanges.next(filterRanges);\r\n }\r\n\r\n if (!valueFilters.length)\r\n return filterItems;\r\n\r\n return rows.reduce((filterItems, row) => {\r\n valueFilters.forEach(filter => {\r\n const value = this._valueAccessor(row.data, filter.value);\r\n\r\n let filterItem: InvolveDataSourceFilterValueItem;\r\n\r\n filterItem = filterItems.find(item => InvolveDataSource.isFilterValueItem(item) && item.source === filter && item.value === value) as InvolveDataSourceFilterValueItem;\r\n\r\n if (filterItem) {\r\n filterItem.totalCount++;\r\n } else {\r\n const name = this._valueAccessor(row.data, filter.display ? filter.display : filter.value);\r\n const color = filter.color ? this._valueAccessor(row.data, filter.color) : null;\r\n const order = filter.order ? this._valueAccessor(row.data, filter.order) : 0;\r\n\r\n filterItem = {\r\n id: `${filter.id}-${value?.toString() || value}`,\r\n source: filter,\r\n value,\r\n name,\r\n color,\r\n totalCount: 1,\r\n searchedCount: 0,\r\n order\r\n };\r\n\r\n filterItems.push(filterItem);\r\n\r\n if (valueSelections.has(filter) && valueSelections.get(filter).has(value))\r\n this.filterSelection.select(filterItem);\r\n }\r\n });\r\n\r\n rangeFilters.forEach(filter => {\r\n const value = this._valueAccessor(row.data, filter.value);\r\n\r\n let filterItem: InvolveDataSourceFilterDateRangeItem | InvolveDataSourceFilterRangeItem;\r\n\r\n filterItem = filterItems.find(item => !InvolveDataSource.isFilterValueItem(item) && item.source === filter) as InvolveDataSourceFilterDateRangeItem | InvolveDataSourceFilterRangeItem;\r\n\r\n if (value === null || value === undefined) { //null or undefined or \"\"\r\n return; //continue forloop\r\n }\r\n\r\n if (typeof value === \"number\" || value instanceof Date) {\r\n if (filterItem.min === null || value < filterItem.min)\r\n filterItem.min = value;\r\n\r\n if (filterItem.max === null || value > filterItem.max)\r\n filterItem.max = value;\r\n }\r\n\r\n });\r\n\r\n return filterItems;\r\n\r\n }, filterItems);\r\n }),\r\n tap(_ => this._pauseSignal.next(false)),\r\n shareReplay(1)\r\n ),\r\n // also emit when the search, selected filters, or ranges change\r\n combineLatest([\r\n this.filterSelectionChange$.pipe(startWith(null)),\r\n this.filterRangeChange$.pipe(startWith(null))\r\n ]).pipe(\r\n debounceTime(300)\r\n )\r\n ]).pipe(\r\n switchMap(([filterItems, [filterChange, rangeChange]]) => this.searchedRows$.pipe(\r\n map(searchedRows => {\r\n if (!filterItems.length) {\r\n if (this._filterItems.value?.length)\r\n this._filterItems.next([]);\r\n\r\n this._allFilterCount.next(searchedRows?.length || 0);\r\n return searchedRows;\r\n }\r\n\r\n const [globalFilterItems, selectedGlobalFilterItems] = filterItems.reduce((acc, filterItem) => {\r\n if (!filterItem.source.cascade) {\r\n acc[0].push(filterItem);\r\n\r\n if (this.filterSelection.isSelected(filterItem))\r\n acc[1].push(filterItem);\r\n }\r\n\r\n filterItem.searchedCount = 0; // sneaking this here to avoid an extra loop\r\n\r\n return acc;\r\n }, [[], []] as [InvolveDataSourceFilterItem[], InvolveDataSourceFilterItem[]]);\r\n\r\n // sort cascading filter items in order of selection\r\n const cascadingFilterItems = this.filterSelection.selected\r\n .filter(filterItem => filterItem.source.cascade)\r\n .concat(filterItems.filter(filterItem => filterItem.source.cascade && !this.filterSelection.isSelected(filterItem)));\r\n\r\n // then group them by filter\r\n const cascadingFilters = cascadingFilterItems.reduce((acc, filterItem) => {\r\n if (!acc.has(filterItem.source))\r\n acc.set(filterItem.source, new Set());\r\n\r\n acc.get(filterItem.source).add(filterItem);\r\n\r\n return acc;\r\n }, new Map>());\r\n\r\n const availableFilterItems = new Set(globalFilterItems);\r\n\r\n const globalFilterMap = new Map, Set>();\r\n\r\n // handle global filters\r\n const globalFilteredRows = globalFilterItems.length && searchedRows?.length\r\n ? searchedRows.filter(row => {\r\n let include = selectedGlobalFilterItems.length ? false : true;\r\n\r\n for (const filterItem of globalFilterItems) {\r\n let match = false;\r\n\r\n const value = this._valueAccessor(row.data, filterItem.source.value);\r\n\r\n if (InvolveDataSource.isFilterValueItem(filterItem)) {\r\n if (filterItem.value === value) {\r\n filterItem.searchedCount++;\r\n include ||= this.filterSelection.isSelected(filterItem);\r\n match = true;\r\n }\r\n } else {\r\n if (filterItem.start !== null && filterItem.end !== null) {\r\n if (value >= filterItem.start && value <= filterItem.end) {\r\n filterItem.searchedCount++;\r\n include ||= this.filterSelection.isSelected(filterItem);\r\n match = true;\r\n }\r\n } else if (filterItem.start !== null) {\r\n if (value >= filterItem.start) {\r\n filterItem.searchedCount++;\r\n include ||= this.filterSelection.isSelected(filterItem);\r\n match = true;\r\n }\r\n } else if (filterItem.end !== null) {\r\n if (value <= filterItem.end) {\r\n filterItem.searchedCount++;\r\n include ||= this.filterSelection.isSelected(filterItem);\r\n match = true;\r\n }\r\n }\r\n }\r\n\r\n if (match) {\r\n if (!globalFilterMap.has(row))\r\n globalFilterMap.set(row, new Set());\r\n\r\n globalFilterMap.get(row).add(filterItem);\r\n }\r\n }\r\n\r\n return include;\r\n }) : searchedRows;\r\n\r\n\r\n let allFilterCount = searchedRows?.length || 0;\r\n\r\n // handle cascading filters\r\n const cascadingFilteredRows = cascadingFilterItems.length && globalFilteredRows?.length\r\n ? globalFilteredRows.filter(row => {\r\n let includeValue = true;\r\n let includeRange = true;\r\n\r\n let includedOnPreviousFilter = true;\r\n for (const [filter, filterItems] of cascadingFilters) {\r\n for (const filterItem of filterItems) {\r\n const isSelected = this.filterSelection.isSelected(filterItem);\r\n const value = this._valueAccessor(row.data, filterItem.source.value);\r\n\r\n if (InvolveDataSource.isFilterValueItem(filterItem)) {\r\n // cascading value filters are inverted\r\n // if the filter is on, that row will not be included\r\n if (filterItem.value === value) {\r\n filterItem.searchedCount++;\r\n\r\n if (isSelected)\r\n includeValue = false;\r\n\r\n if (includedOnPreviousFilter)\r\n availableFilterItems.add(filterItem);\r\n }\r\n } else {\r\n availableFilterItems.add(filterItem);\r\n\r\n if (isSelected) {\r\n if (value === null || value === undefined) { //null or undefined or \"\"\r\n if (filterItem.start !== null || filterItem.end !== null) {\r\n includeRange = false;\r\n }\r\n continue;\r\n }\r\n\r\n if (typeof value === \"number\" || value instanceof Date) {\r\n if (filterItem.start !== null && filterItem.end !== null) {\r\n if (value >= filterItem.start && value <= filterItem.end) {\r\n filterItem.searchedCount++\r\n } else {\r\n includeRange = false;\r\n }\r\n } else if (filterItem.start !== null) {\r\n if (value >= filterItem.start) {\r\n filterItem.searchedCount++\r\n } else {\r\n includeRange = false;\r\n }\r\n } else if (filterItem.end !== null) {\r\n if (value <= filterItem.end) {\r\n filterItem.searchedCount++\r\n } else {\r\n includeRange = false;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n includedOnPreviousFilter = includeValue && includeRange;\r\n }\r\n\r\n const include = includeValue && includeRange;\r\n\r\n if (!include) {\r\n allFilterCount--;\r\n\r\n if (globalFilterMap.has(row)) {\r\n for (const filterItem of globalFilterMap.get(row))\r\n filterItem.searchedCount--;\r\n }\r\n }\r\n\r\n return include;\r\n }) : globalFilteredRows;\r\n\r\n this._allFilterCount.next(allFilterCount);\r\n\r\n this._filterItems.next(Array.from(availableFilterItems.values()));\r\n\r\n return cascadingFilteredRows;\r\n })\r\n )),\r\n shareReplay(1)\r\n );\r\n\r\n this.filteredData$ = this._filteredRows$.pipe(\r\n map(rows => rows?.map(row => row.data))\r\n );\r\n\r\n this.filteredDataCount$ = this.filteredData$.pipe(\r\n map(data => data?.length)\r\n );\r\n\r\n // init group by\r\n this._groupBy = new BehaviorSubject(null);\r\n this._groups = new BehaviorSubject({});\r\n\r\n this.invalidate();\r\n }\r\n\r\n public connect(collectionView: CollectionViewer) {\r\n return this.renderData;\r\n }\r\n\r\n public disconnect() { }\r\n\r\n public invalidate() {\r\n\r\n // sort\r\n const sortedRows$ = combineLatest([\r\n this._filteredRows$,\r\n this._sort ? this._sort.sortChange.pipe(startWith(null)) : of(null),\r\n this._groupBy\r\n ]).pipe(\r\n map(([rows, sortChange, groupBy]) => {\r\n if (!this.sort || !rows?.length)\r\n return rows;\r\n\r\n // modonnell: how expensive is this??\r\n const map = new Map>();\r\n const data = rows.map((row => {\r\n map.set(row.data, row);\r\n return row.data;\r\n }));\r\n\r\n const sortedData = this.sortData(data, this.sort);\r\n this.sortedData$.next(sortedData);\r\n\r\n return sortedData.map(data => map.get(data));\r\n })\r\n );\r\n\r\n // paginate\r\n const pagedRows$ = combineLatest([\r\n sortedRows$,\r\n this._paginator ? this._paginator.pageChange.pipe(startWith(null)) : of(null)\r\n ]).pipe(\r\n map(([rows, pageChange]) => {\r\n if (!this.paginator)\r\n return rows;\r\n\r\n // update paginator, done async to avoid change detection errors\r\n Promise.resolve().then(() => {\r\n this.paginator.length = rows.length;\r\n\r\n if (this.paginator.pageIndex > 0) {\r\n const lastPageIndex = Math.ceil(this.paginator.length / this.paginator.pageSize) - 1 || 0;\r\n const newPageIndex = Math.min(this.paginator.pageIndex, lastPageIndex);\r\n\r\n if (newPageIndex !== this.paginator.pageIndex)\r\n this.paginator.pageIndex = newPageIndex;\r\n }\r\n\r\n });\r\n\r\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\r\n return rows.slice(startIndex, startIndex + this.paginator.pageSize);\r\n })\r\n );\r\n\r\n // group\r\n const groupedRows$ = combineLatest([\r\n pagedRows$,\r\n this._groupBy\r\n ]).pipe(\r\n switchMap(([rows, groupBy]) => {\r\n if (!groupBy || !rows?.length)\r\n return of(rows);\r\n\r\n // create groups\r\n const groups = this._groups.value;\r\n\r\n this._groups.next(\r\n rows.reduce((accumulator, row, i) => {\r\n const groupKey = this._valueAccessor(row.data, groupBy);\r\n\r\n if (!accumulator[groupKey]) {\r\n accumulator[groupKey] = {\r\n groupKey,\r\n sort: i,\r\n // try to preserve expanded state\r\n isExpanded: groups[groupKey] ? groups[groupKey].isExpanded : this.defaultGroupExpanded,\r\n rows: []\r\n };\r\n }\r\n\r\n accumulator[groupKey].rows.push(row);\r\n\r\n return accumulator;\r\n }, {} as { [groupKey: string]: InvolveDataSourceRowGroup })\r\n );\r\n\r\n // inject grouping rows into dataset\r\n return this._groups.pipe(\r\n map(groups => Object.keys(groups)\r\n .map(groupKey => groups[groupKey])\r\n .sort((a, b) => a.sort - b.sort)\r\n .reduce((accumulator, group) => {\r\n return accumulator\r\n .concat(group)\r\n .concat(group.isExpanded ? group.rows : []);\r\n }, [] as (InvolveDataSourceRow | InvolveDataSourceRowGroup)[]))\r\n );\r\n }),\r\n tap(rows => {\r\n this._rowCount.next(rows?.length || 0);\r\n })\r\n );\r\n\r\n // render\r\n this._renderSubscription.unsubscribe();\r\n this._renderSubscription = groupedRows$.subscribe(rows => {\r\n this._renderRows.next(rows);\r\n this._isSearching.next(false);\r\n });\r\n }\r\n\r\n private _searchCache: WeakMap;\r\n public getSearchString(data: T) {\r\n if (this._searchCache.has(data))\r\n return this._searchCache.get(data);\r\n\r\n // Transform the data into a lowercase string of all property values.\r\n const string = this._columnAccessor(data).reduce((acc: string, key: string) => {\r\n return acc + this._valueAccessor(data, key) + '\\u03A9';\r\n }, '').toLowerCase();\r\n\r\n // cache results\r\n this._searchCache.set(data, string);\r\n\r\n return string;\r\n }\r\n\r\n /**\r\n * Default search predicate. Can be overridden for customization.\r\n */\r\n public searchPredicate: ((data: T, filter: string) => boolean) = (data: T, search: string): boolean => {\r\n return this.getSearchString(data).indexOf(search) !== -1;\r\n }\r\n\r\n /**\r\n * Default sort comparator. Can be overridden for customization.\r\n */\r\n public sortData: ((data: T[], sort: InvolveSort) => T[]) = (data: T[], sort: InvolveSort): T[] => {\r\n if (!sort.active || !sort.direction)\r\n return data;\r\n\r\n return data.sort((a, b) => this.defaultSortComparator(a, b, sort.active, sort.direction));\r\n };\r\n\r\n public defaultSortComparator(a: T, b: T, columnName: string, direction: SortDirection) {\r\n // nothing to do...\r\n if (!columnName || !direction)\r\n return 0;\r\n\r\n let valueA = this.sortingDataAccessor(a, columnName);\r\n let valueB = this.sortingDataAccessor(b, columnName);\r\n\r\n let result = 0;\r\n\r\n // compare nulls\r\n if (valueA === null || valueB === null) {\r\n if (valueA === null && valueB !== null) {\r\n result = -1;\r\n } else if (valueA !== null && valueB === null) {\r\n result = 1;\r\n }\r\n } else {\r\n if (moment.isMoment(valueA) && moment.isMoment(valueB)) {\r\n result = valueA.isBefore(valueB) ? -1 : 1;\r\n } else {\r\n const valueAType = typeof valueA;\r\n const valueBType = typeof valueB;\r\n\r\n if (valueAType !== valueBType) {\r\n if (valueAType === 'number')\r\n valueA += '';\r\n\r\n if (valueBType === 'number')\r\n valueB += '';\r\n }\r\n\r\n result = valueA?.toString().localeCompare(valueB?.toString(), undefined, { sensitivity: 'base', 'numeric': true });\r\n }\r\n }\r\n\r\n return result * (direction === 'asc' ? -1 : 1);\r\n }\r\n\r\n /**\r\n * Default sort data accessor. Can be overridden for customization.\r\n */\r\n public sortingDataAccessor: ((data: T, sortHeaderId: string) => string | number | moment.Moment) = (data: T, sortHeaderId: string): string | number | moment.Moment => {\r\n const value = this._valueAccessor(data, sortHeaderId);\r\n\r\n if (value === null)\r\n return value;\r\n\r\n const n = +value;\r\n\r\n if (isNaN(n)) {\r\n let date: moment.Moment;\r\n\r\n date = moment(value, true)\r\n if (date.isValid())\r\n return date;\r\n\r\n date = moment(value, \"MM/DD/YYYY hh:mm:ss a\", true);\r\n if (date.isValid())\r\n return date;\r\n\r\n return value;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n /**\r\n * Get a data item in the set.\r\n * @param index \r\n * @returns \r\n */\r\n public getItem(index: number) {\r\n return this._data.value[index];\r\n }\r\n\r\n /**\r\n * Move a data item in the set.\r\n * @param originalIndex \r\n * @param newIndex \r\n */\r\n public moveItem: (originalIndex: number, newIndex: number | null) => void = (originalIndex, newIndex) => {\r\n const data = this._data.value;\r\n data.splice(newIndex, 0, data.splice(originalIndex, 1)[0]);\r\n this._data.next(data);\r\n }\r\n\r\n /**\r\n * Insert a data item into the set.\r\n * @param index \r\n * @param item \r\n */\r\n public insertItem: (index: number, item: T) => void = (index, item) => {\r\n const data = this._data.value;\r\n data.splice(index, 0, item);\r\n this._data.next(data);\r\n }\r\n\r\n /**\r\n * Remove a data item from the set.\r\n * @param index \r\n * @returns \r\n */\r\n public removeItem: (index: number) => T = (index) => {\r\n const data = this._data.value;\r\n const removed = data.splice(index, 1)[0];\r\n this._data.next(data);\r\n return removed;\r\n }\r\n\r\n public static isDataSourceFilterValue(filter: InvolveDataSourceFilter): filter is InvolveDataSourceFilter<'value'> {\r\n return filter.type === 'value';\r\n }\r\n\r\n public static isFilterRange(filter: InvolveDataSourceFilter): filter is InvolveDataSourceFilter<'range'> {\r\n return filter.type === 'range';\r\n }\r\n\r\n public static isFilterDateRange(filter: InvolveDataSourceFilter): filter is InvolveDataSourceFilter<'date-range'> {\r\n return filter.type === 'date-range';\r\n }\r\n\r\n public static isFilterValueItem(item: InvolveDataSourceFilterItem): item is InvolveDataSourceFilterValueItem {\r\n return this.isDataSourceFilterValue(item.source);\r\n }\r\n\r\n public static isFilterRangeItem(item: InvolveDataSourceFilterItem): item is InvolveDataSourceFilterRangeItem {\r\n return this.isFilterRange(item.source);\r\n }\r\n\r\n public static isFilterDateRangeItem(item: InvolveDataSourceFilterItem): item is InvolveDataSourceFilterDateRangeItem {\r\n return this.isFilterDateRange(item.source);\r\n }\r\n}","
    \r\n \r\n\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    0\" class=\"active-filter-dot\">{{activeFilterCount.count}}
    \r\n
    \r\n
    \r\n \r\n Select All\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{filterItem.value || '-'}}\r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n Min\r\n \r\n \r\n \r\n\r\n \r\n Max\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { Component, Input, Inject, OnInit, Directive, TemplateRef, ContentChild, ViewChild, Output, EventEmitter } from '@angular/core';\r\nimport moment from 'moment';\r\n\r\nimport { INVOLVE_COLUMN_DEF, INVOLVE_TABLE } from './tokens';\r\nimport { Observable } from 'rxjs';\r\nimport { InvolveDataSource, InvolveDataSourceFilter, InvolveDataSourceFilterDateRangeItem, InvolveDataSourceFilterItem, InvolveDataSourceFilterRangeItem, InvolveDataSourceFilterType, InvolveDataSourceFilterValueItem } from './data-source';\r\nimport { map, switchMap, take, tap, startWith, shareReplay } from 'rxjs/operators';\r\nimport { InvolveColumnDef } from './cell';\r\nimport { InvolveTable } from './table';\r\nimport { DateRange, InvolveDateRangeComponent } from '../date-range/date-range.component';\r\nimport { NgModel } from '@angular/forms';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n\r\n@Directive({ selector: '[involveFilterHeaderTemplate]' })\r\nexport class InvolveFilterHeaderTemplate {\r\n public static ngTemplateContextGuard(dir: InvolveFilterHeaderTemplate, ctx: unknown): ctx is { $implicit: InvolveDataSourceFilterValueItem } {\r\n return true;\r\n }\r\n\r\n public constructor(\r\n public readonly templateRef: TemplateRef<{ $implicit: InvolveDataSourceFilterValueItem }>\r\n ) { }\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'involve-filter-header, [involve-filter-header]',\r\n exportAs: 'involveFilterHeader',\r\n templateUrl: 'filter-header.html',\r\n host: {\r\n 'class': 'involve-filter-header',\r\n },\r\n // style for dot will need to react to light/dark mode\r\n styles: [\r\n `:host { cursor: pointer }`,\r\n ],\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'filter' }\r\n ]\r\n})\r\nexport class InvolveFilterHeader implements OnInit {\r\n @Input('value')\r\n public id: string;\r\n\r\n @Input('type')\r\n public type: InvolveDataSourceFilterType = 'value';\r\n\r\n @Output() selectAll = new EventEmitter()\r\n\r\n @ViewChild('dateRange')\r\n private dateRange: InvolveDateRangeComponent;\r\n\r\n public filterId: string;\r\n\r\n public startDate: moment.Moment;\r\n public startDateMin: moment.Moment;\r\n public endDate: moment.Moment;\r\n public endDateMax: moment.Moment;\r\n\r\n public minValue: number = null;\r\n public maxValue: number = null;\r\n\r\n public filterItems$: Observable;\r\n\r\n public filterDateRangeItems$: Observable;\r\n public filterRangeItems$: Observable;\r\n public filterValueItems$: Observable;\r\n\r\n @ContentChild(InvolveFilterHeaderTemplate)\r\n public templateDef: InvolveFilterHeaderTemplate;\r\n\r\n public dataSource: InvolveDataSource;\r\n\r\n private _filter: InvolveDataSourceFilter;\r\n\r\n public get selectedFilters() {\r\n return this.dataSource.filterSelection.selected.filter(filterItem => filterItem.source === this._filter)\r\n }\r\n\r\n public indeterminateState$: Observable;\r\n public activeFilterCount$: Observable<{ count: number }>;\r\n\r\n public constructor(\r\n @Inject(INVOLVE_TABLE)\r\n private _table: InvolveTable,\r\n\r\n @Inject(INVOLVE_COLUMN_DEF)\r\n private _columnDef: InvolveColumnDef\r\n ) { }\r\n\r\n public ngOnInit() {\r\n if (!this.id && this._columnDef) {\r\n this.id = this._columnDef.name;\r\n }\r\n\r\n this.dataSource = this._table.dataSource;\r\n\r\n this.filterId = 'filter-header-' + this.id;\r\n\r\n this._filter = {\r\n id: this.filterId,\r\n value: this.id,\r\n type: this.type,\r\n cascade: true\r\n };\r\n\r\n this.dataSource.addFilter(this._filter);\r\n\r\n this.filterItems$ = this.dataSource.filterItems$.pipe(\r\n map(filterItems => filterItems.filter(filterItem => filterItem.source === this._filter)),\r\n shareReplay(1)\r\n );\r\n\r\n if (this.type === 'value') {\r\n this.filterValueItems$ = this.filterItems$.pipe(\r\n map(filterItems => filterItems\r\n .filter(filterItem => filterItem.source.type === 'value')\r\n .sort((a: InvolveDataSourceFilterValueItem, b: InvolveDataSourceFilterValueItem) => {\r\n if (a.order !== b.order)\r\n return a.order - b.order;\r\n\r\n const typeofA = typeof a.value;\r\n const typeofB = typeof b.value;\r\n\r\n if (typeofA !== typeofB)\r\n return 0;\r\n\r\n if (typeofA === 'string')\r\n return a.value.localeCompare(b.value, undefined, { numeric: true });\r\n else if (typeofA === 'number')\r\n return a.value - b.value;\r\n }) as InvolveDataSourceFilterValueItem[]\r\n ),\r\n shareReplay(1)\r\n );\r\n } else if (this.type === 'date-range') {\r\n this.filterDateRangeItems$ = this.filterItems$.pipe(\r\n map(filterItems => filterItems\r\n .filter(filterItem => filterItem.source.type === 'date-range') as InvolveDataSourceFilterDateRangeItem[]\r\n ),\r\n tap(filterItems => {\r\n if (filterItems.length) {\r\n\r\n if (filterItems[0].min === null || filterItems[0].max === null) {\r\n return;\r\n }\r\n\r\n this.startDateMin = this.toMoment(filterItems[0].min);\r\n this.endDateMax = this.toMoment(filterItems[0].max);\r\n\r\n if (!this.startDate || this.startDate < this.startDateMin || this.startDate > this.endDateMax) {\r\n this.startDate = this.startDateMin;\r\n }\r\n\r\n if (!this.endDate || this.endDate > this.endDateMax || this.endDate < this.startDateMin) {\r\n this.endDate = this.endDateMax;\r\n }\r\n\r\n }\r\n }),\r\n shareReplay(1)\r\n );\r\n } else if (this.type === 'range') {\r\n this.filterRangeItems$ = this.filterItems$.pipe(\r\n map(filterItems => filterItems\r\n .filter(filterItem => filterItem.source.type === 'range') as InvolveDataSourceFilterRangeItem[]\r\n ),\r\n shareReplay(1)\r\n );\r\n }\r\n\r\n this.activeFilterCount$ = this.dataSource.filterSelectionChange$.pipe(\r\n startWith(null),\r\n switchMap(changes => this.filterItems$),\r\n map(filterItems => {\r\n const selectedFilters = filterItems.filter(filterItem => this.dataSource.filterSelection.isSelected(filterItem));\r\n\r\n if (this.selectedFilters.length > selectedFilters.length)\r\n return { count: filterItems.length - selectedFilters.length };\r\n\r\n if (!selectedFilters.length) {\r\n return null\r\n }\r\n\r\n return { count: filterItems.length - selectedFilters.length };\r\n })\r\n );\r\n\r\n this.indeterminateState$ = this.dataSource.filterSelectionChange$.pipe(\r\n startWith(null),\r\n switchMap(changes => this.filterItems$),\r\n map(filterItems => {\r\n const selectedFilters = filterItems.filter(filterItem => this.dataSource.filterSelection.isSelected(filterItem));\r\n\r\n return selectedFilters.length === filterItems.length\r\n ? true\r\n : selectedFilters.length > 0\r\n ? null\r\n : false\r\n })\r\n );\r\n }\r\n\r\n public selectAllFilterValueItems(value: boolean) {\r\n this.selectAll.emit();\r\n this.filterValueItems$.pipe(\r\n take(1)\r\n ).subscribe(filterItems => value\r\n ? this.dataSource.filterSelection.select(...filterItems)\r\n : this.dataSource.filterSelection.deselect(...filterItems)\r\n );\r\n\r\n return false;\r\n }\r\n\r\n public isSelected(filterItem: InvolveDataSourceFilterItem) {\r\n return this.dataSource.filterSelection.isSelected(filterItem);\r\n }\r\n\r\n public toggleFilterItem(filter: InvolveDataSourceFilterItem) {\r\n this.dataSource.filterSelection.toggle(filter);\r\n }\r\n\r\n public toMoment(date: Date) {\r\n return moment(date);\r\n }\r\n\r\n public dateRangeChange(range: DateRange, filterItem: InvolveDataSourceFilterDateRangeItem) {\r\n filterItem.start = range.startDate.startOf('day').toDate();\r\n filterItem.end = range.endDate.endOf('day').toDate();\r\n\r\n if (filterItem.start || filterItem.end) {\r\n this.dataSource.filterSelection.select(filterItem);\r\n } else {\r\n this.dataSource.filterSelection.deselect(filterItem);\r\n }\r\n return false;\r\n }\r\n\r\n public dateRangeClear(filterItem: InvolveDataSourceFilterDateRangeItem) {\r\n this.dateRange.startDate = this.startDateMin;\r\n this.dateRange.endDate = this.endDateMax;\r\n setTimeout(() => {\r\n this.dataSource.filterSelection.deselect(filterItem);\r\n }, 100); // avoids race condition with dateRangeChange event\r\n return false;\r\n }\r\n\r\n public updateMinValue(minValue: number, filterItem: InvolveDataSourceFilterRangeItem, ngModel?: NgModel) {\r\n if (ngModel) {\r\n ngModel.control.markAsPristine();\r\n }\r\n\r\n filterItem.start = minValue;\r\n\r\n if (filterItem.start == null && filterItem.end == null) {\r\n this.dataSource.filterSelection.deselect(filterItem);\r\n } else {\r\n this.dataSource.filterSelection.select(filterItem);\r\n }\r\n }\r\n\r\n public updateMaxValue(maxValue: number, filterItem: InvolveDataSourceFilterRangeItem, ngModel?: NgModel) {\r\n if (ngModel) {\r\n ngModel.control.markAsPristine();\r\n }\r\n\r\n filterItem.end = maxValue;\r\n\r\n if (filterItem.start == null && filterItem.end == null) {\r\n this.dataSource.filterSelection.deselect(filterItem);\r\n } else {\r\n this.dataSource.filterSelection.select(filterItem);\r\n }\r\n }\r\n\r\n public trackByFilterId(index: number, filterItem: T) {\r\n return filterItem.id;\r\n }\r\n}\r\n","import { Directive, Input, Output, EventEmitter, Inject } from \"@angular/core\";\r\nimport { InvolveDataSource } from \"./data-source\";\r\nimport { InvolveTable } from \"./table\";\r\n\r\n@Directive({\r\n selector: '[involveFilter]',\r\n exportAs: 'involveFilter',\r\n host: {\r\n 'class': 'involve-filter'\r\n }\r\n})\r\nexport class InvolveFilter {\r\n\r\n /**\r\n * The dataSource to filter.\r\n */\r\n @Input('involveFilterDataSource')\r\n public get dataSource() {\r\n return this._dataSource;\r\n }\r\n public set dataSource(value: InvolveDataSource) {\r\n this._dataSource = value;\r\n }\r\n private _dataSource: InvolveDataSource;\r\n}","import { Directive, EmbeddedViewRef, IterableDiffers, TemplateRef } from '@angular/core';\r\n\r\nimport { InvolveTable } from './table';\r\nimport { InvolveFooterRowDef, InvolveHeaderRowDef, InvolveLoadingRowDef, InvolveNoDataRowDef, InvolveRowDef, InvolveRowGroupDef } from './row';\r\nimport { InvolveViewDef } from './view';\r\n\r\nimport { InvolveDataSource, InvolveDataSourceRow, InvolveDataSourceRowGroup } from './data-source';\r\n\r\n@Directive()\r\nexport class InvolveRenderDef {\r\n public constructor(\r\n public templateRef: TemplateRef,\r\n protected readonly differs: IterableDiffers,\r\n public readonly parent: InvolveTable\r\n ) { }\r\n}\r\n\r\n\r\ntype GetContext> = T extends InvolveRenderDef ? U : never;\r\n\r\ninterface InvolveBaseRenderItem> {\r\n def: T;\r\n table: InvolveTable;\r\n viewRef?: EmbeddedViewRef>;\r\n}\r\n\r\nexport interface InvolveRenderHeaderRow extends InvolveBaseRenderItem {}\r\nexport interface InvolveRenderFooterRow extends InvolveBaseRenderItem {}\r\nexport interface InvolveRenderNoDataRow extends InvolveBaseRenderItem {}\r\nexport interface InvolveRenderLoadingRow extends InvolveBaseRenderItem {}\r\n\r\nexport interface InvolveRenderRow extends InvolveBaseRenderItem> {\r\n row: InvolveDataSourceRow;\r\n views: Map>;\r\n \r\n // actual position this is rendered at\r\n renderIndex?: number;\r\n\r\n trackBy: any;\r\n\r\n // these are relative to the post search/filter/grouping set\r\n index?: number;\r\n first?: boolean;\r\n last?: boolean;\r\n even?: boolean;\r\n odd?: boolean;\r\n count?: number;\r\n}\r\n\r\nexport interface InvolveRenderRowGroup extends InvolveBaseRenderItem> {\r\n group: InvolveDataSourceRowGroup;\r\n}\r\n\r\nexport interface InvolveRenderView extends InvolveBaseRenderItem> {\r\n name: string,\r\n isVisible: boolean;\r\n\r\n renderRow: InvolveRenderRow;\r\n dataSource?: InvolveDataSource;\r\n}\r\n\r\nexport interface InvolveRenderContext {} // dummy context to satisfy type checking\r\nexport declare type InvolveRenderItem\r\n = InvolveRenderHeaderRow\r\n | InvolveRenderFooterRow\r\n | InvolveRenderNoDataRow\r\n | InvolveRenderLoadingRow\r\n | InvolveRenderRow\r\n | InvolveRenderRowGroup\r\n | InvolveRenderView;","import { Directive, Component, OnChanges, SimpleChanges, IterableDiffer, IterableDiffers, TemplateRef, OnDestroy, ViewContainerRef, ChangeDetectionStrategy, ViewEncapsulation, Inject, ElementRef, Renderer2, RendererStyleFlags2, Optional, ChangeDetectorRef, Input, ViewChild, ContentChild, ContentChildren, QueryList, ViewChildren } from '@angular/core';\r\nimport { InvolveDataSourceRowGroup } from './data-source';\r\nimport { InvolveColumnDef } from './cell';\r\nimport { INVOLVE_TABLE } from './tokens';\r\nimport { InvolveTable } from './table';\r\nimport { InvolveRenderDef } from './render';\r\nimport { InvolveDataSourceRow } from './data-source';\r\n\r\nimport { InvolveDataSource } from './data-source';\r\n\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\nimport { Subscription } from 'rxjs';\r\n\r\nexport interface InvolveRowOutlet {\r\n viewContainerRef: ViewContainerRef\r\n}\r\n\r\n@Directive({ selector: '[involveHeaderRowOutlet]' })\r\nexport class InvolveHeaderRowOutlet implements InvolveRowOutlet {\r\n public constructor(\r\n public viewContainerRef: ViewContainerRef\r\n ) { }\r\n}\r\n\r\n@Directive({ selector: '[involveFooterRowOutlet]' })\r\nexport class InvolveFooterRowOutlet implements InvolveRowOutlet {\r\n public constructor(\r\n public viewContainerRef: ViewContainerRef\r\n ) { }\r\n}\r\n\r\n@Directive({ selector: '[involveDataRowOutlet]' })\r\nexport class InvolveDataRowOutlet implements InvolveRowOutlet {\r\n public constructor(\r\n public viewContainerRef: ViewContainerRef\r\n ) { }\r\n}\r\n\r\n@Directive({ selector: '[involveNoDataRowOutlet]' })\r\nexport class InvolveNoDataRowOutlet implements InvolveRowOutlet {\r\n public constructor(\r\n public viewContainerRef: ViewContainerRef\r\n ) { }\r\n}\r\n\r\n@Directive()\r\nexport abstract class InvolveBaseRowDef extends InvolveRenderDef implements OnChanges {\r\n public columns: string[];\r\n private _columnsDiffer: IterableDiffer;\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if (!this._columnsDiffer) {\r\n const columns = (changes['columns'] && changes['columns'].currentValue) || [];\r\n\r\n this._columnsDiffer = this.differs.find(columns).create();\r\n this._columnsDiffer.diff(columns);\r\n }\r\n }\r\n\r\n public getColumnsDiff() {\r\n return this._columnsDiffer?.diff(this.columns) || false;\r\n }\r\n\r\n public extractCellTemplate(column: InvolveColumnDef) {\r\n if (this instanceof InvolveHeaderRowDef)\r\n return column.headerCell.templateRef;\r\n else if (this instanceof InvolveFooterRowDef)\r\n return column.footerCell.templateRef;\r\n else if (this instanceof InvolveRowDef)\r\n return column.cell.templateRef;\r\n else if (this instanceof InvolveRowGroupDef)\r\n return column.groupCell.templateRef;\r\n else if (this instanceof InvolveNoDataRowDef)\r\n return column.cell.templateRef;\r\n else if (this instanceof InvolveLoadingRowDef)\r\n return column.cell.templateRef;\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[involveHeaderRowDef]',\r\n inputs: ['columns: involveHeaderRowDef']\r\n})\r\nexport class InvolveHeaderRowDef extends InvolveBaseRowDef { }\r\n\r\n@Directive({\r\n selector: '[involveFooterRowDef]',\r\n inputs: ['columns: involveFooterRowDef']\r\n})\r\nexport class InvolveFooterRowDef extends InvolveBaseRowDef { }\r\n\r\n@Directive({\r\n selector: '[involveNoDataRowDef]',\r\n inputs: ['columns: involveNoDataRowDef']\r\n})\r\nexport class InvolveNoDataRowDef extends InvolveBaseRowDef { }\r\n\r\n@Directive({\r\n selector: '[involveLoadingRowDef]',\r\n inputs: ['columns: involveLoadingRowDef']\r\n})\r\nexport class InvolveLoadingRowDef extends InvolveBaseRowDef { }\r\n\r\nexport interface InvolveRowGroupContext {\r\n $implicit: InvolveDataSourceRowGroup;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveRowGroupDef]',\r\n inputs: ['useTypeFrom: involveRowGroupDefUseTypeFrom', 'columns: involveRowGroupDefColumns']\r\n})\r\nexport class InvolveRowGroupDef extends InvolveBaseRowDef> implements OnChanges {\r\n public static ngTemplateContextGuard(dir: InvolveRowGroupDef, ctx: unknown): ctx is InvolveRowGroupContext {\r\n return true;\r\n }\r\n\r\n /**\r\n * Used to extract the data type from the data source.\r\n */\r\n public useTypeFrom: InvolveDataSource;\r\n}\r\n\r\nexport interface InvolveRowContext {\r\n $implicit: InvolveDataSourceRow;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveRowDef]',\r\n inputs: ['useTypeFrom: involveRowDefUseTypeFrom', 'columns: involveRowDefColumns', 'when: involveRowDefWhen', 'views: involveRowDefViews']\r\n})\r\nexport class InvolveRowDef extends InvolveBaseRowDef> implements OnChanges {\r\n public static ngTemplateContextGuard(dir: InvolveRowDef, ctx: unknown): ctx is InvolveRowContext {\r\n return true;\r\n }\r\n\r\n /**\r\n * Used to extract the data type from the data source.\r\n */\r\n public useTypeFrom: InvolveDataSource;\r\n\r\n /**\r\n * If provided, function will be used to determine if the row should be rendered.\r\n */\r\n public when: (row: InvolveDataSourceRow) => boolean = null;\r\n \r\n /**\r\n * Views (nested tables) attached to this row.\r\n */\r\n public views: Iterable;\r\n private _viewsDiffer: IterableDiffer;\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n\r\n if (!this._viewsDiffer) {\r\n const views = (changes['views'] && changes['views'].currentValue) || [];\r\n\r\n this._viewsDiffer = this.differs.find(views).create();\r\n this._viewsDiffer.diff(views);\r\n }\r\n }\r\n\r\n public getViewsDiff() {\r\n return this._viewsDiffer.diff(this.views);\r\n }\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'involve-header-row, tr[involve-header-row]',\r\n template: '',\r\n host: {\r\n 'class': 'involve-header-row',\r\n 'role': 'row'\r\n },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'headerRow' }\r\n ]\r\n})\r\nexport class InvolveHeaderRow {\r\n private subscription: Subscription;\r\n\r\n public constructor(\r\n @Inject(INVOLVE_TABLE)\r\n private _table: InvolveTable,\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2\r\n ) { }\r\n\r\n public ngAfterViewInit() {\r\n if (this._table.isNested) {\r\n this.renderer.addClass(this.elementRef.nativeElement, 'involve-nested-row');\r\n this.subscription = this._table.rowHeight$.subscribe(rowHeight => this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${rowHeight}px`, RendererStyleFlags2.Important));\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'involve-footer-row, tr[involve-footer-row]',\r\n template: '',\r\n host: {\r\n 'class': 'involve-footer-row',\r\n 'role': 'row'\r\n },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'footerRow' }\r\n ]\r\n})\r\nexport class InvolveFooterRow {\r\n private subscription: Subscription;\r\n\r\n public constructor(\r\n @Inject(INVOLVE_TABLE)\r\n private _table: InvolveTable,\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2\r\n ) { }\r\n\r\n public ngAfterViewInit() {\r\n if (this._table.isNested) {\r\n this.renderer.addClass(this.elementRef.nativeElement, 'involve-nested-row');\r\n this.subscription = this._table.rowHeight$.subscribe(rowHeight => this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${rowHeight}px`, RendererStyleFlags2.Important));\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'involve-row-group, tr[involve-row]',\r\n template: '',\r\n host: {\r\n 'class': 'involve-row involve-row-group',\r\n 'role': 'row'\r\n },\r\n styles: [`\r\n .placeholder {\r\n background: #666;\r\n border: dotted 3px #222;\r\n min-height: 40px;\r\n transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'rowGroup' }\r\n ]\r\n})\r\nexport class InvolveRowGroup {\r\n private subscription: Subscription;\r\n \r\n public constructor(\r\n public readonly elementRef: ElementRef,\r\n\r\n private _renderer: Renderer2,\r\n\r\n @Inject(INVOLVE_TABLE)\r\n private _table: InvolveTable\r\n ) {}\r\n\r\n public ngAfterViewInit() {\r\n if (this._table.isNested)\r\n this._renderer.addClass(this.elementRef.nativeElement, 'involve-nested-row');\r\n \r\n this.subscription = this._table.rowHeight$.subscribe(rowHeight => this._renderer.setStyle(this.elementRef.nativeElement, 'height', `${rowHeight}px`, RendererStyleFlags2.Important)); \r\n }\r\n\r\n public ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'involve-row, tr[involve-row]',\r\n template: `\r\n \r\n
    \r\n `,\r\n host: {\r\n 'class': 'involve-row',\r\n 'role': 'row'\r\n },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'row' }\r\n ]\r\n})\r\nexport class InvolveRow {\r\n private subscription: Subscription;\r\n \r\n public constructor(\r\n public readonly elementRef: ElementRef,\r\n public readonly changeDetectorRef: ChangeDetectorRef,\r\n\r\n private _renderer: Renderer2,\r\n\r\n @Inject(INVOLVE_TABLE)\r\n private _table: InvolveTable\r\n ) {}\r\n\r\n public ngAfterViewInit() {\r\n if (this._table.isNested)\r\n this._renderer.addClass(this.elementRef.nativeElement, 'involve-nested-row');\r\n \r\n this.subscription = this._table.rowHeight$.subscribe(rowHeight => this._renderer.setStyle(this.elementRef.nativeElement, 'height', `${rowHeight}px`, RendererStyleFlags2.Important)); \r\n }\r\n\r\n public ngOnDestroy() {\r\n this.subscription?.unsubscribe();\r\n }\r\n}","
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    ","import { Component, Input, Inject, Optional, OnInit, HostListener, ChangeDetectorRef, Directive } from '@angular/core';\r\n\r\nimport { InvolveSort, InvolveSortable } from './sort';\r\nimport { INVOLVE_COLUMN_DEF } from './tokens';\r\nimport { InvolveColumnDef } from './cell';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\n@Component({\r\n selector: 'involve-sort-header, [involve-sort-header]',\r\n exportAs: 'involveSortHeader',\r\n templateUrl: 'sort-header.html',\r\n host: {\r\n 'class': 'involve-sort-header',\r\n },\r\n styles: [\r\n `:host { cursor: pointer }`,\r\n `.sort-padding { padding: 12px; }`,\r\n ],\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'sort' }\r\n ]\r\n})\r\nexport class InvolveSortHeader implements OnInit, InvolveSortable {\r\n @Input('involve-sort-header')\r\n public id: string;\r\n\r\n @Input()\r\n public start: 'asc' | 'desc' = 'desc';\r\n\r\n @Input()\r\n public disableClear: boolean = false;\r\n\r\n @Input('involveSortDefault')\r\n public defaultSort: 'asc' | 'desc' = null;\r\n\r\n private _showHint: boolean = false;\r\n\r\n public get showHint() {\r\n return !this.isSorted && this._showHint;\r\n }\r\n\r\n public get isSorted() {\r\n return this._sort.active === this.id && this._sort.direction !== null;\r\n }\r\n\r\n public get direction() {\r\n return this.isSorted ? this._sort.direction : this.showHint ? this.start : null;\r\n }\r\n\r\n public constructor(\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private _sort: InvolveSort,\r\n\r\n @Inject(INVOLVE_COLUMN_DEF) @Optional()\r\n private _columnDef: InvolveColumnDef\r\n ) {}\r\n\r\n public ngOnInit() {\r\n if (!this.id && this._columnDef)\r\n this.id = this._columnDef.name;\r\n\r\n this._sort.register(this);\r\n\r\n if (this.defaultSort) {\r\n this._sort.sort({\r\n id: this.id,\r\n start: this.defaultSort,\r\n disableClear: this.disableClear\r\n });\r\n\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n }\r\n\r\n public ngAfterViewInit() {\r\n\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._sort.deregister(this);\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: MouseEvent) {\r\n this._sort.sort(this);\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n public onMouseEnter(event: MouseEvent) {\r\n this._showHint = true;\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n\r\n @HostListener('mouseleave', ['$event'])\r\n public onMouseLeave(event: MouseEvent) {\r\n this._showHint = false;\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n}","import { Directive, Input, Output, EventEmitter, Inject, ChangeDetectorRef } from \"@angular/core\";\r\nimport { InvolveDataSource } from \"./data-source\";\r\n\r\nexport type SortDirection = 'asc' | 'desc' | null;\r\n\r\nexport interface InvolveSortable {\r\n id: string;\r\n start: 'asc' | 'desc';\r\n disableClear: boolean;\r\n}\r\n\r\nexport interface SortEvent {\r\n active: string;\r\n direction: SortDirection;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveSort]',\r\n exportAs: 'involveSort',\r\n host: {\r\n 'class': 'involve-sort'\r\n }\r\n})\r\nexport class InvolveSort {\r\n /**\r\n * The id of the most recently sorted InvolveSortable.\r\n */\r\n @Input('involveSortActive')\r\n public active: string = null;\r\n\r\n /**\r\n * The sort direction of the active sort.\r\n */\r\n @Input('involveSortDirection')\r\n public direction: SortDirection = null;\r\n\r\n /**\r\n * The initial sort direction.\r\n */\r\n @Input('involveSortStart')\r\n public start: 'asc' | 'desc' = 'desc';\r\n\r\n /**\r\n * Clearing allows a 'natural' sort.\r\n */\r\n @Input('involveSortDisableClear')\r\n public disableClear: boolean = false;\r\n\r\n /**\r\n * The dataSource to sort.\r\n */\r\n @Input('involveSortDataSource')\r\n public get dataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n public set dataSource(value: InvolveDataSource) {\r\n // detach from existing\r\n if (this._dataSource && this._dataSource.sort === this)\r\n this._dataSource.sort = null;\r\n\r\n // attach to new\r\n this._dataSource = value;\r\n this._dataSource.sort = this;\r\n }\r\n private _dataSource: InvolveDataSource;\r\n\r\n @Output()\r\n public readonly sortChange = new EventEmitter();\r\n\r\n public sortables = new Map();\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n public register(sortable: InvolveSortable) {\r\n this.sortables.set(sortable.id, sortable);\r\n }\r\n\r\n public deregister(sortable: InvolveSortable) {\r\n this.sortables.delete(sortable.id);\r\n }\r\n\r\n public sort(sortable: InvolveSortable) {\r\n if (this.active !== sortable.id) {\r\n this.active = sortable.id;\r\n this.direction = sortable.start ? sortable.start : this.start;\r\n } else {\r\n this.direction = this.getNextSortDirection(sortable);\r\n }\r\n\r\n this.sortChange.emit({ active: this.active, direction: this.direction });\r\n }\r\n\r\n private getNextSortDirection(sortable: InvolveSortable): SortDirection {\r\n if (!sortable)\r\n return null;\r\n\r\n const disableClear = sortable.disableClear !== null ? sortable.disableClear : this.disableClear;\r\n const cycle = this.getSortDirectionCycle(sortable.start || this.start, disableClear);\r\n\r\n let next = cycle.indexOf(this.direction) + 1;\r\n\r\n if (next >= cycle.length)\r\n next = 0;\r\n\r\n return cycle[next];\r\n }\r\n\r\n private getSortDirectionCycle(start: 'asc' | 'desc', disableClear: boolean) {\r\n let cycle: SortDirection[] = ['desc', 'asc'];\r\n\r\n if (start === 'asc')\r\n cycle.reverse();\r\n\r\n if (!disableClear)\r\n cycle.push(null);\r\n\r\n return cycle;\r\n }\r\n}\r\n\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { VirtualScrollStrategy, CdkVirtualScrollViewport } from \"@angular/cdk/scrolling\";\r\n\r\nimport { Observable, Subject, Subscription } from 'rxjs';\r\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport { INVOLVE_TABLE } from \"./tokens\";\r\nimport { InvolveTable } from \"./table\";\r\n@Injectable()\r\nexport class InvolveTableVirtualScrollStrategy implements VirtualScrollStrategy {\r\n private rowHeightSubscription: Subscription;\r\n\r\n private _rowHeight: number = 50;\r\n\r\n private _indexChange: Subject;\r\n\r\n public get scrolledIndexChange() {\r\n return this._indexChange.asObservable().pipe(\r\n distinctUntilChanged()\r\n );\r\n }\r\n\r\n private _viewport: CdkVirtualScrollViewport;\r\n \r\n public constructor(\r\n @Inject(INVOLVE_TABLE)\r\n private _table: InvolveTable\r\n ) { }\r\n\r\n public attach(viewport: CdkVirtualScrollViewport): void {\r\n this._viewport = viewport;\r\n\r\n this._indexChange = new Subject();\r\n\r\n this.rowHeightSubscription = this._table.rowHeight$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(rowHeight => {\r\n this._rowHeight = rowHeight;\r\n });\r\n }\r\n\r\n public detach(): void {\r\n this._indexChange?.complete();\r\n this.rowHeightSubscription?.unsubscribe();\r\n }\r\n\r\n public onContentScrolled(): void {\r\n this.updateContent();\r\n }\r\n\r\n public onDataLengthChanged(): void {\r\n this.updateContent();\r\n }\r\n\r\n public onContentRendered(): void {\r\n // no-op\r\n }\r\n\r\n public onRenderedOffsetChanged(): void {\r\n // no-op\r\n }\r\n\r\n public scrollToIndex(index: number, behavior?: ScrollBehavior): void {\r\n if (!this._viewport)\r\n return;\r\n\r\n const offset = this._rowHeight * index;\r\n\r\n this._viewport.scrollToOffset(offset, behavior);\r\n }\r\n\r\n private updateContent() {\r\n if (!this._viewport)\r\n return;\r\n\r\n const visible = Math.ceil(this._viewport.getViewportSize() / this._rowHeight) || 20;\r\n const offset = this._viewport.measureScrollOffset();\r\n const buffer = Math.ceil(visible * 0.6); // playing with this will affect render times\r\n\r\n const skip = Math.round(offset / this._rowHeight);\r\n const index = Math.max(0, skip);\r\n\r\n let start = Math.max(0, index - buffer);\r\n\r\n // keep start even to not mess up alternating row patterns\r\n if (start % 2 != 0)\r\n start--;\r\n\r\n const end = index + visible + buffer;\r\n\r\n const renderedOffset = start * this._rowHeight;\r\n\r\n this._viewport.setRenderedContentOffset(renderedOffset);\r\n this._viewport.setRenderedRange({ start, end });\r\n\r\n this._indexChange.next(index);\r\n }\r\n}\r\n","
    \r\n \r\n\r\n \r\n \r\n\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n No data found!\r\n \r\n\r\n\r\n\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n\r\n\r\n\r\n","\r\nimport { CollectionViewer, ListRange } from \"@angular/cdk/collections\";\r\nimport { CdkVirtualScrollViewport, VIRTUAL_SCROLL_STRATEGY } from \"@angular/cdk/scrolling\";\r\n\r\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, map, pairwise, scan, startWith, takeUntil, tap } from \"rxjs/operators\";\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n ElementRef,\r\n Inject,\r\n Injector,\r\n Input,\r\n IterableDiffer,\r\n IterableDiffers,\r\n NgZone,\r\n Optional,\r\n QueryList,\r\n Renderer2,\r\n SimpleChanges,\r\n SkipSelf,\r\n TrackByFunction,\r\n ViewChild,\r\n ViewChildren,\r\n ViewContainerRef,\r\n ViewEncapsulation\r\n} from \"@angular/core\";\r\n\r\nimport {\r\n InvolveCellContext,\r\n InvolveCellOutlet,\r\n InvolveColumnDef,\r\n InvolveGroupCellContext\r\n} from \"./cell\";\r\n\r\nimport {\r\n InvolveBaseRowDef,\r\n InvolveDataRowOutlet,\r\n InvolveFooterRowDef,\r\n InvolveFooterRowOutlet,\r\n InvolveHeaderRowDef,\r\n InvolveHeaderRowOutlet,\r\n InvolveLoadingRowDef,\r\n InvolveNoDataRowDef,\r\n InvolveNoDataRowOutlet,\r\n InvolveRow,\r\n InvolveRowContext,\r\n InvolveRowDef,\r\n InvolveRowGroupContext,\r\n InvolveRowGroupDef\r\n} from \"./row\";\r\n\r\nimport {\r\n InvolveRenderContext,\r\n InvolveRenderDef,\r\n InvolveRenderFooterRow,\r\n InvolveRenderHeaderRow,\r\n InvolveRenderItem,\r\n InvolveRenderLoadingRow,\r\n InvolveRenderNoDataRow,\r\n InvolveRenderRow,\r\n InvolveRenderRowGroup,\r\n InvolveRenderView,\r\n} from './render';\r\n\r\nimport {\r\n InvolveDataSource,\r\n InvolveDataSourceAccessor,\r\n InvolveDataSourceRow,\r\n InvolveDataSourceRowGroup\r\n} from \"./data-source\";\r\n\r\nimport { InvolveViewDef } from './view';\r\n\r\nimport { InvolveTableVirtualScrollStrategy } from \"./virtual-scroll-strategy\";\r\n\r\nimport { DATA_CY_TYPE } from \"../directive/cypress.directive\";\r\nimport { INVOLVE_RENDER_VIEW, INVOLVE_TABLE } from \"./tokens\";\r\n\r\n\r\ntype GetDefType[]> = T extends QueryList[] ? U[] : never;\r\n\r\n@Component({\r\n selector: 'involve-table, table[involve-table]',\r\n exportAs: 'involveTable',\r\n templateUrl: 'table.html',\r\n styleUrls: ['table.scss'],\r\n host: {\r\n 'class': 'involve-table',\r\n 'role': 'table',\r\n '[style.overflow]': 'parent ? \"initial\" : \"auto\"',\r\n '[style.height]': 'parent ? \"auto\" : \"100%\"'\r\n },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n providers: [\r\n { provide: INVOLVE_TABLE, useExisting: InvolveTable },\r\n { provide: InvolveDataSourceAccessor, useExisting: InvolveTable },\r\n { provide: VIRTUAL_SCROLL_STRATEGY, useClass: InvolveTableVirtualScrollStrategy },\r\n { provide: DATA_CY_TYPE, useValue: 'table' }\r\n ]\r\n})\r\nexport class InvolveTable implements InvolveDataSourceAccessor, CollectionViewer {\r\n @Input()\r\n public dataSource: InvolveDataSource;\r\n\r\n @Input()\r\n public get trackBy() { return this._trackByFn };\r\n public set trackBy(value: TrackByFunction>) { this._trackByFn = value; }\r\n private _trackByFn: TrackByFunction> = (index, item) => item;\r\n\r\n /**\r\n * Set the STATIC row height for the table. This is required for virtual scrolling.\r\n * NOTE: This only works on the root table, any nested tables must inherit the row height of their parent table.\r\n */\r\n @Input()\r\n public get rowHeight() { return this.root._rowHeight.value; }\r\n public set rowHeight(value: number) {\r\n if (this.isNested) {\r\n console.warn(\"Can't set the rowHeight of nested tables, nested table rows will inherit the rowHeight of the root table.\");\r\n return;\r\n }\r\n\r\n this._rowHeight.next(value);\r\n }\r\n\r\n private _rowHeight = new BehaviorSubject(50);\r\n\r\n public get rowHeight$() { return this.root._rowHeight.asObservable(); }\r\n\r\n @Input()\r\n public minRows: number = 0;\r\n\r\n public viewChange: Observable;\r\n\r\n @Input()\r\n public allowNestedSearch = false;\r\n\r\n @ViewChild(InvolveHeaderRowOutlet)\r\n private _headerRowOutlet: InvolveHeaderRowOutlet;\r\n\r\n @ViewChild(InvolveFooterRowOutlet)\r\n private _footerRowOutlet: InvolveFooterRowOutlet\r\n\r\n @ViewChild(InvolveDataRowOutlet)\r\n private _dataRowOutlet: InvolveDataRowOutlet;\r\n\r\n @ViewChild(InvolveNoDataRowOutlet)\r\n private _noDataRowOutlet: InvolveNoDataRowOutlet;\r\n\r\n @ViewChild(CdkVirtualScrollViewport)\r\n private _viewport: CdkVirtualScrollViewport;\r\n\r\n @ContentChildren(InvolveColumnDef, { descendants: true })\r\n private _columnDefs: QueryList>;\r\n private _columnDefsByName = new Map>();\r\n\r\n @ViewChildren(InvolveColumnDef)\r\n private _defaultColumnDefs: QueryList>;\r\n private _defaultColumnDefsByName = new Map>();\r\n\r\n @ContentChildren(InvolveHeaderRowDef, { descendants: true })\r\n private _headerRowDefs: QueryList;\r\n private _headerRenderRows: InvolveRenderHeaderRow[];\r\n\r\n public get hasHeaderRow(){\r\n return this._headerRowDefs?.length > 0\r\n }\r\n\r\n @ContentChildren(InvolveFooterRowDef, { descendants: true })\r\n private _footerRowDefs: QueryList;\r\n private _footerRenderRows: InvolveRenderFooterRow[];\r\n\r\n @ContentChildren(InvolveRowDef, { descendants: true })\r\n private _rowDefs: QueryList>;\r\n\r\n @ContentChildren(InvolveRowGroupDef, { descendants: true })\r\n private _rowGroupDefs: QueryList>;\r\n\r\n @ContentChildren(InvolveViewDef, { descendants: true })\r\n private _viewDefs: QueryList>;\r\n private _viewDefsByName = new Map>();\r\n\r\n @ContentChild(InvolveNoDataRowDef)\r\n private _noDataRowDef: InvolveNoDataRowDef;\r\n\r\n @ViewChild(InvolveNoDataRowDef)\r\n private _defaultNoDataRowDef: InvolveNoDataRowDef;\r\n\r\n @Input()\r\n public noDataRow: boolean = true;\r\n private _noDataRenderRow: InvolveRenderNoDataRow;\r\n\r\n @ContentChild(InvolveLoadingRowDef)\r\n private _loadingRowDef: InvolveLoadingRowDef;\r\n\r\n @ViewChild(InvolveLoadingRowDef)\r\n private _defaultLoadingRowDef: InvolveLoadingRowDef;\r\n\r\n @Input()\r\n private loadingRow: boolean = true;\r\n private _loadingRenderRow: InvolveRenderLoadingRow;\r\n\r\n private _data: (InvolveDataSourceRow | InvolveDataSourceRowGroup)[];\r\n private _dataSubscription: Subscription;\r\n\r\n private _renderDefsCache = new Map | void>, InvolveRenderItem[]>>();\r\n private _renderItems: InvolveRenderItem[];\r\n private _renderItemsCache: InvolveRenderItem[];\r\n private _renderItemsDiffer: IterableDiffer>;\r\n private _renderRange: ListRange;\r\n\r\n private _dirty = false;\r\n\r\n //private _renderRowRefs = new WeakMap>();\r\n\r\n private _renderSignal = new Subject();\r\n private _renderSubscription: Subscription;\r\n\r\n private _trackByCache = new Map>();\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public isSearching$: Observable;\r\n\r\n /**\r\n * Get the root table if this table is nested.\r\n */\r\n public get root(): InvolveTable {\r\n if (this.parent)\r\n return this.parent.root;\r\n\r\n return this;\r\n }\r\n\r\n public get isNested(): boolean {\r\n return this.parent ? true : false;\r\n }\r\n\r\n public constructor(\r\n protected readonly changeDetectorRef: ChangeDetectorRef,\r\n protected readonly differs: IterableDiffers,\r\n public readonly elementRef: ElementRef,\r\n protected readonly ngZone: NgZone,\r\n protected readonly renderer: Renderer2,\r\n protected readonly injector: Injector,\r\n\r\n @SkipSelf() @Optional()\r\n public readonly parent: InvolveTable,\r\n\r\n @Optional() @Inject(INVOLVE_RENDER_VIEW)\r\n renderView?: InvolveRenderView\r\n ) {\r\n if (renderView)\r\n renderView.table = this;\r\n }\r\n\r\n public ngOnInit() {\r\n this._renderItemsDiffer = this.createRenderItemsDiffer();\r\n }\r\n\r\n public createRenderItemsDiffer() {\r\n return this.differs.find([]).create>((index: number, item: InvolveRenderItem) => this.isInvolveRenderRow(item) ? this.trackBy(index, item.row): item);\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if ('dataSource' in changes && !changes.dataSource.firstChange)\r\n this.invalidate();\r\n\r\n if ('rowHeight' in changes && !changes.rowHeight.firstChange)\r\n this.markForRender();\r\n }\r\n\r\n public ngAfterViewInit() {\r\n if (this._viewport) {\r\n this.viewChange = this._viewport.renderedRangeStream;\r\n\r\n this.viewChange.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(range => {\r\n this._renderRange = range;\r\n this.render(); // internal render, not debounced\r\n });\r\n }\r\n\r\n this._headerRenderRows = this.getOwnDefs(this._headerRowDefs).map(def => ({ def, table: this }));\r\n this._footerRenderRows = this.getOwnDefs(this._footerRowDefs).map(def => ({ def, table: this }));\r\n\r\n if (this._noDataRowDef) {\r\n this._noDataRenderRow = { def: this._noDataRowDef, table: this };\r\n } else if (this._defaultNoDataRowDef) {\r\n this._noDataRenderRow = { def: this._defaultNoDataRowDef, table: this };\r\n }\r\n\r\n if (this._loadingRowDef) {\r\n this._loadingRenderRow = { def: this._loadingRowDef, table: this };\r\n } else if (this._defaultLoadingRowDef) {\r\n this._loadingRenderRow = { def: this._defaultLoadingRowDef, table: this };\r\n }\r\n\r\n if (!this.parent) {\r\n this.renderHeaderRows();\r\n this.renderFooterRows();\r\n }\r\n\r\n this._defaultColumnDefs.forEach(columnDef => {\r\n this._defaultColumnDefsByName.set(columnDef.name, columnDef);\r\n });\r\n\r\n this.invalidate();\r\n }\r\n\r\n public ngAfterContentChecked() {\r\n this._columnDefsByName.clear();\r\n this.getOwnDefs(this._columnDefs).forEach(columnDef => {\r\n this._columnDefsByName.set(columnDef.name, columnDef);\r\n });\r\n\r\n this._viewDefsByName.clear();\r\n this.getOwnDefs(this._viewDefs).forEach(viewDef => {\r\n this._viewDefsByName.set(viewDef.name, viewDef);\r\n });\r\n\r\n // render any changes to column definitions\r\n const columnsDiffReducer = (acc: boolean, rowDef: InvolveBaseRowDef | void>) => acc || !!rowDef.getColumnsDiff();\r\n\r\n const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\r\n const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\r\n const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\r\n\r\n if (dataColumnsChanged) {\r\n // force cells re-render\r\n this._renderItemsDiffer = this.createRenderItemsDiffer();\r\n this._dataRowOutlet.viewContainerRef.clear();\r\n }\r\n\r\n if (this.parent) {\r\n if (dataColumnsChanged || headerColumnsChanged || footerColumnsChanged) {\r\n this.markForRender();\r\n }\r\n } else {\r\n if (headerColumnsChanged)\r\n this.renderHeaderRows();\r\n\r\n if (dataColumnsChanged) {\r\n this.markForRender();\r\n }\r\n\r\n if (footerColumnsChanged)\r\n this.renderFooterRows();\r\n }\r\n\r\n if (!this.parent && this._viewport) {\r\n const el = this._viewport.getElementRef();\r\n\r\n if (el.nativeElement.clientHeight !== this._viewport.getViewportSize())\r\n this._viewport.checkViewportSize();\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._dataRowOutlet?.viewContainerRef.clear();\r\n this._noDataRowOutlet?.viewContainerRef.clear();\r\n this._headerRowOutlet?.viewContainerRef.clear();\r\n this._footerRowOutlet?.viewContainerRef.clear();\r\n\r\n this._dataSubscription?.unsubscribe();\r\n this._renderSubscription?.unsubscribe();\r\n\r\n this._rowHeight.complete();\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n\r\n if (this.dataSource)\r\n this.dataSource.disconnect();\r\n }\r\n\r\n private getOwnDefs[]>(...items: I): GetDefType[number][] {\r\n return items.reduce((acc, items) => {\r\n acc.push(...items.filter(item => item.parent === this))\r\n return acc;\r\n }, [] as GetDefType[number][]);\r\n }\r\n\r\n private invalidate() {\r\n if (this._dataSubscription)\r\n this._dataSubscription.unsubscribe();\r\n\r\n if (!this.dataSource)\r\n return;\r\n \r\n if (!this.parent)\r\n this.isSearching$ = this.dataSource.isSearching$.pipe(\r\n // debounced incase the search is fast\r\n debounceTime(100),\r\n tap(_ => this.changeDetectorRef.detectChanges())\r\n );\r\n\r\n this._dataSubscription = this.dataSource.connect(this).subscribe(rows => {\r\n this._data = rows;\r\n this._dirty = true;\r\n this.markForRender();\r\n });\r\n\r\n if (!this.parent && !this._renderSubscription) {\r\n this._renderSubscription = this._renderSignal.pipe(\r\n scan(renderCalls => ++renderCalls, -1),\r\n debounceTime(0),\r\n pairwise(),\r\n map(([prev, curr]) => curr - prev)\r\n ).subscribe(renderCalls => {\r\n // console.log(`coalesced ${renderCalls} render calls`);\r\n this.render();\r\n });\r\n\r\n this.markForRender();\r\n }\r\n }\r\n\r\n protected renderHeaderRows() {\r\n if (this._headerRowOutlet.viewContainerRef.length > 0)\r\n this._headerRowOutlet.viewContainerRef.clear();\r\n\r\n this.getOwnDefs(this._headerRowDefs).forEach((def, index) => {\r\n if (def.columns?.length)\r\n this.renderRow(this._headerRowOutlet.viewContainerRef, { def, table: this }, index);\r\n });\r\n }\r\n\r\n protected renderFooterRows() {\r\n if (this._footerRowOutlet.viewContainerRef.length > 0)\r\n this._footerRowOutlet.viewContainerRef.clear();\r\n\r\n this.getOwnDefs(this._footerRowDefs).forEach((def, index) => {\r\n if (def.columns?.length)\r\n this.renderRow(this._footerRowOutlet.viewContainerRef, { def, table: this}, index);\r\n });\r\n }\r\n\r\n public markForRender() {\r\n this.root._renderSignal.next();\r\n }\r\n\r\n private render(toRender: InvolveRenderItem[] = []) {\r\n if (!this.parent) {\r\n if (!this._renderRange)\r\n return;\r\n\r\n const allRenderItems = this.getAllRenderItems();\r\n \r\n let start = this._renderRange.start;\r\n let end = this._renderRange.end;\r\n\r\n let index = 0;\r\n\r\n for (let i = 0; i < allRenderItems.length; i++) {\r\n const renderItem = allRenderItems[i];\r\n\r\n if (this.isInvolveRenderView(renderItem)) {\r\n toRender.push(renderItem);\r\n } else {\r\n index++;\r\n\r\n if ((index >= start && index < end)) {\r\n toRender.push(renderItem);\r\n }\r\n }\r\n }\r\n\r\n const totalContentSize = this.rowHeight * index;\r\n\r\n this._viewport.setTotalContentSize(totalContentSize);\r\n }\r\n\r\n this._renderItems = toRender.reduce((acc, renderItem) => {\r\n if (this.isInvolveRenderView(renderItem)) {\r\n if (renderItem.renderRow.table === this) {\r\n acc.push(renderItem);\r\n\r\n if (renderItem.viewRef)\r\n renderItem.table?.render(toRender);\r\n }\r\n } else if (renderItem.table === this) {\r\n acc.push(renderItem);\r\n }\r\n\r\n return acc;\r\n }, [] as InvolveRenderItem[]);\r\n\r\n const changes = this._renderItemsDiffer.diff(this._renderItems);\r\n\r\n if (!changes)\r\n return;\r\n\r\n this.ngZone.runGuarded(() => {\r\n changes.forEachOperation((record, previousIndex, currentIndex) => {\r\n if (previousIndex === null) {\r\n // insert\r\n if (this.isInvolveRenderView(record.item)) {\r\n this.renderView(this._dataRowOutlet.viewContainerRef, record.item, currentIndex);\r\n } else if (record.item.def.columns?.length) {\r\n this.renderRow(this._dataRowOutlet.viewContainerRef, record.item, currentIndex);\r\n }\r\n } else if (currentIndex === null) {\r\n // remove\r\n this._dataRowOutlet.viewContainerRef.remove(previousIndex);\r\n record.item.viewRef = null;\r\n } else {\r\n // move\r\n const viewRef = this._dataRowOutlet.viewContainerRef.get(previousIndex);\r\n this._dataRowOutlet.viewContainerRef.move(viewRef, currentIndex);\r\n }\r\n });\r\n });\r\n }\r\n\r\n protected renderRow(\r\n viewContainerRef: ViewContainerRef,\r\n renderRow: InvolveRenderRow | InvolveRenderRowGroup | InvolveRenderHeaderRow | InvolveRenderFooterRow | InvolveRenderNoDataRow | InvolveRenderLoadingRow,\r\n index: number\r\n ) {\r\n let context: InvolveCellContext | InvolveGroupCellContext | void = null;\r\n\r\n if (this.isInvolveRenderRowGroup(renderRow)) {\r\n renderRow.viewRef = viewContainerRef.createEmbeddedView>(renderRow.def.templateRef, {\r\n $implicit: renderRow.group\r\n }, index);\r\n\r\n context = {\r\n $implicit: {\r\n rows: renderRow.group.rows.map(row => row.data),\r\n\r\n isExpanded: renderRow.group.isExpanded,\r\n groupKey: renderRow.group.groupKey,\r\n\r\n expand: () => this.dataSource.expand(renderRow.group.groupKey),\r\n collapse: () => this.dataSource.collapse(renderRow.group.groupKey),\r\n toggle: () => this.dataSource.toggleGroup(renderRow.group.groupKey)\r\n }\r\n };\r\n } else if (this.isInvolveRenderRow(renderRow)) {\r\n renderRow.viewRef = viewContainerRef.createEmbeddedView>(renderRow.def.templateRef, {\r\n $implicit: renderRow.row\r\n }, index);\r\n\r\n context = {\r\n $implicit: renderRow.row.data,\r\n\r\n index: renderRow.index,\r\n first: renderRow.first,\r\n last: renderRow.last,\r\n even: renderRow.even,\r\n odd: renderRow.odd,\r\n count: 0,\r\n\r\n nestedLevel: this.getNestedLevel(renderRow.table),\r\n isViewVisible: this.isViewVisible.bind(this, renderRow),\r\n toggleView: this.toggleView.bind(this, renderRow)\r\n };\r\n } else {\r\n renderRow.viewRef = viewContainerRef.createEmbeddedView(renderRow.def.templateRef, null, index);\r\n }\r\n\r\n for (let column of renderRow.def.columns) {\r\n const columnDef = renderRow.table.getColumnDef(column);\r\n\r\n if (!columnDef) {\r\n console.warn(`Unknown column definition: ${column}`);\r\n continue;\r\n }\r\n\r\n const template = renderRow.def.extractCellTemplate(columnDef);\r\n\r\n if (InvolveCellOutlet.mostRecentCellOutlet) {\r\n const viewRef = InvolveCellOutlet.mostRecentCellOutlet.viewContainerRef.createEmbeddedView | InvolveGroupCellContext | void>(template, context);\r\n viewRef.markForCheck();\r\n }\r\n }\r\n }\r\n\r\n protected renderView(viewContainerRef: ViewContainerRef, renderView: InvolveRenderView, index: number) {\r\n renderView.viewRef = viewContainerRef.createEmbeddedView(renderView.def.templateRef, {\r\n $implicit: renderView.dataSource,\r\n row: renderView.renderRow.row.data,\r\n }, {\r\n index,\r\n injector: Injector.create({\r\n parent: this.injector,\r\n providers: [\r\n { provide: INVOLVE_RENDER_VIEW, useValue: renderView }\r\n ] \r\n })\r\n });\r\n }\r\n\r\n protected getRenderItems() {\r\n if (!this._dirty && this._renderItemsCache)\r\n return this._renderItemsCache;\r\n\r\n const renderItems: InvolveRenderItem[] = [];\r\n\r\n const prevTrackByCache = this._trackByCache;\r\n const prevRenderRowsCache = this._renderDefsCache;\r\n\r\n this._trackByCache = new Map();\r\n this._renderDefsCache = new Map();\r\n\r\n // if we are rendering in a parent table, include our headers as rows\r\n if (this.parent)\r\n renderItems.push(...this._headerRenderRows);\r\n\r\n const rowDefs = this.getOwnDefs(this._rowDefs);\r\n const rowGroupDefs = this.getOwnDefs(this._rowGroupDefs);\r\n\r\n if (this._data?.length) {\r\n for (let i = 0; i < this._data.length; i++) {\r\n const data = this._data[i];\r\n const trackBy = this.isInvolveDataSourceRowGroup(data) ? data : this.trackBy(i, data);\r\n \r\n if (!this.isInvolveDataSourceRowGroup(data)) {\r\n if (!prevTrackByCache.has(trackBy)) {\r\n this._trackByCache.set(trackBy, new BehaviorSubject(data.data));\r\n } else {\r\n const prevTrackBySubject = prevTrackByCache.get(trackBy);\r\n\r\n this._trackByCache.set(trackBy, prevTrackBySubject);\r\n\r\n if (data.data !== prevTrackBySubject.value) {\r\n prevTrackBySubject.next(data.data);\r\n }\r\n }\r\n\r\n // reduce needed looping below...\r\n prevTrackByCache.delete(trackBy);\r\n }\r\n\r\n const prevRenderRowCache = prevRenderRowsCache.get(trackBy);\r\n\r\n // convert data rows to render rows\r\n // render row objects are cached to facilitate change tracking\r\n const renderRows = this.isInvolveDataSourceRowGroup(data)\r\n ? rowGroupDefs\r\n .map(def => {\r\n const cache = prevRenderRowCache?.has(def) ? prevRenderRowCache.get(def) : [];\r\n\r\n if (cache.length)\r\n return cache.shift();\r\n\r\n const renderRowGroup: InvolveRenderRowGroup = {\r\n def,\r\n table: this,\r\n group: data\r\n };\r\n\r\n return renderRowGroup;\r\n })\r\n : rowDefs\r\n .filter(def => def.when ? def.when(data) : true)\r\n .map(def => {\r\n const cache = prevRenderRowCache?.has(def) ? prevRenderRowCache.get(def) : [];\r\n\r\n let renderRow: InvolveRenderRow;\r\n\r\n if (cache.length) {\r\n renderRow = cache.shift() as InvolveRenderRow;\r\n\r\n const data = this._trackByCache.get(trackBy);\r\n\r\n if (data)\r\n renderRow.row.data = data.value;\r\n\r\n } else {\r\n renderRow = {\r\n def,\r\n table: this,\r\n trackBy,\r\n row: data,\r\n views: new Map>()\r\n };\r\n\r\n if (def.views) {\r\n for (let view of def.views) {\r\n const def = this.getViewDef(view);\r\n\r\n if (def) {\r\n renderRow.views.set(view, {\r\n def,\r\n name: view,\r\n isVisible: false,\r\n renderRow,\r\n dataSource: null,\r\n table: null\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n renderRow.index = i;\r\n renderRow.first = i === 0;\r\n renderRow.last = i === this._data.length - 1;\r\n renderRow.even = i % 2 === 0;\r\n renderRow.odd = !renderRow.even;\r\n renderRow.count = this._data.length;\r\n\r\n return renderRow;\r\n });\r\n\r\n if (!this._renderDefsCache.has(trackBy))\r\n this._renderDefsCache.set(trackBy, new WeakMap());\r\n\r\n const renderRowCache = this._renderDefsCache.get(trackBy);\r\n\r\n for (let j = 0; j < renderRows.length; j++) {\r\n const renderRow = renderRows[j];\r\n\r\n if (renderRowCache.has(renderRow.def))\r\n renderRowCache.get(renderRow.def).push(renderRow);\r\n else\r\n renderRowCache.set(renderRow.def, [renderRow]);\r\n\r\n renderItems.push(renderRow);\r\n }\r\n }\r\n } else if (this._data?.length === 0) {\r\n if (this.noDataRow && this._noDataRenderRow) {\r\n // if data is null, we don't want to render the no data template\r\n // so explicity check for length === 0\r\n renderItems.push(this._noDataRenderRow);\r\n }\r\n } else if (this.loadingRow && this._loadingRenderRow) {\r\n // data has not emit an array yet...\r\n renderItems.push(this._loadingRenderRow);\r\n }\r\n\r\n // clean up possible hanging subscription in dataSource\r\n for (const [trackBy, subject] of prevTrackByCache) {\r\n if (!this._trackByCache.has(trackBy)) {\r\n subject.complete();\r\n }\r\n }\r\n\r\n // if we are rendering in a parent table, include our footers as rows\r\n if (this.parent)\r\n renderItems.push(...this._footerRenderRows);\r\n\r\n this._dirty = false;\r\n this._renderItemsCache = renderItems;\r\n\r\n return renderItems;\r\n }\r\n\r\n protected getAllRenderItems(allRenderItems: InvolveRenderItem[] = [], renderIndex: { i: number } = { i: 0 } /* need this passed by ref */) {\r\n const renderItems = this.getRenderItems();\r\n\r\n for (let i = 0; i < renderItems.length; i++) {\r\n const renderItem = renderItems[i];\r\n\r\n allRenderItems.push(renderItem);\r\n\r\n if (this.isInvolveRenderRow(renderItem) && renderItem.views) {\r\n renderItem.renderIndex = renderIndex.i;\r\n renderIndex.i++;\r\n\r\n // inject visible views into set\r\n for (const [ view, renderView ] of renderItem.views) {\r\n if (renderView.isVisible) {\r\n allRenderItems.push(renderView);\r\n\r\n if (renderView.table)\r\n renderView.table.getAllRenderItems(allRenderItems, renderIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return allRenderItems;\r\n }\r\n\r\n public scrollToIndex(index: number) {\r\n // only works for parent tables\r\n if (this.parent)\r\n return;\r\n\r\n setTimeout(() => {\r\n // the index in the parent set might not be its render index in the table if\r\n // nested tables above it are expanded, or there are grouping rows, so we\r\n // need to find the render index\r\n const data = this._data[index];\r\n\r\n if (!data || this.isInvolveDataSourceRowGroup(data))\r\n return;\r\n\r\n const allRenderItems = this.getAllRenderItems();\r\n\r\n const renderRow = allRenderItems.find(renderItem => (>renderItem).row === data) as InvolveRenderRow;\r\n\r\n if (!renderRow)\r\n return;\r\n\r\n this._viewport.scrollToIndex(renderRow.renderIndex);\r\n });\r\n }\r\n\r\n public expandViews(index: number, views: string[]) {\r\n // using setTimeout here incase scrollToIndex was called first, need to give the table time to update its renderRows\r\n setTimeout(() => {\r\n const data = this._data[index];\r\n\r\n // groups can't have views\r\n if (!data || this.isInvolveDataSourceRowGroup(data))\r\n return;\r\n\r\n const renderRow = this._renderItems.find(renderItem => (>renderItem).row === data) as InvolveRenderRow;\r\n\r\n if (!renderRow)\r\n return;\r\n\r\n views.forEach(view => this.showView(renderRow, view));\r\n }, 100);\r\n }\r\n\r\n protected getColumnDef(column: string) {\r\n if (this._columnDefsByName.has(column))\r\n return this._columnDefsByName.get(column);\r\n else if (this._defaultColumnDefsByName.has(column))\r\n return this._defaultColumnDefsByName.get(column);\r\n\r\n // if (this.parent)\r\n // return this.parent.getColumnDef(column);\r\n\r\n return null;\r\n }\r\n\r\n protected getViewDef(view: string): InvolveViewDef | null {\r\n if (this._viewDefsByName.has(view))\r\n return this._viewDefsByName.get(view);\r\n\r\n if (this.parent)\r\n return this.parent.getViewDef(view);\r\n\r\n return null;\r\n }\r\n\r\n public isViewVisible(renderRow: InvolveRenderRow, view: string) {\r\n if (renderRow.views.has(view))\r\n return renderRow.views.get(view).isVisible;\r\n }\r\n\r\n public showView(renderRow: InvolveRenderRow, view: string) {\r\n if (renderRow.views.has(view)) {\r\n const renderView = renderRow.views.get(view);\r\n\r\n // // will only ever be called on real rows (not header/footer/grouping rows)\r\n if (!renderView.dataSource) {\r\n\r\n const data$ = this._trackByCache.get(renderView.renderRow.trackBy);\r\n const dataSource = renderView.def.dataSourceFactory(renderView.renderRow.row.data, data$.asObservable());\r\n\r\n if (dataSource) {\r\n Promise.resolve(dataSource).then(dataSource => {\r\n renderView.dataSource = dataSource;\r\n renderView.isVisible = true;\r\n this.dataSource.addChild(dataSource);\r\n this.markForRender();\r\n }).catch(err => {\r\n // todo\r\n })\r\n } else {\r\n // todo\r\n }\r\n\r\n } else {\r\n renderView.isVisible = true;\r\n this.markForRender();\r\n }\r\n }\r\n }\r\n\r\n public hideView(renderRow: InvolveRenderRow, view: string) {\r\n if (renderRow.views.has(view)) {\r\n const renderView = renderRow.views.get(view);\r\n\r\n renderView.isVisible = false;\r\n this.markForRender();\r\n }\r\n }\r\n\r\n public toggleView(renderRow: InvolveRenderRow, ...views: string[]) {\r\n for (let view of views) {\r\n if (renderRow.views.has(view)) {\r\n const ctx = renderRow.views.get(view);\r\n\r\n ctx.isVisible\r\n ? this.hideView(renderRow, view)\r\n : this.showView(renderRow, view);\r\n }\r\n }\r\n }\r\n\r\n protected getNestedLevel(table?: InvolveTable) {\r\n table = table || this;\r\n\r\n if (table.parent)\r\n return this.getNestedLevel(table.parent) + 1;\r\n\r\n return 1;\r\n }\r\n\r\n private isInvolveRenderRow(item: InvolveRenderItem): item is InvolveRenderRow {\r\n return item ? 'row' in item : false;\r\n }\r\n\r\n private isInvolveRenderRowGroup(item: InvolveRenderItem): item is InvolveRenderRowGroup {\r\n return item ? 'group' in item : false;\r\n }\r\n\r\n private isInvolveRenderView(item: InvolveRenderItem): item is InvolveRenderView {\r\n return item ? 'name' in item : false;\r\n }\r\n\r\n private isInvolveDataSourceRowGroup(item: InvolveDataSourceRow | InvolveDataSourceRowGroup): item is InvolveDataSourceRowGroup {\r\n return item ? 'groupKey' in item : false;\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const INVOLVE_TABLE = new InjectionToken('INVOLVE_TABLE');\r\nexport const INVOLVE_RENDER_VIEW = new InjectionToken('INVOLVE_RENDER_VIEW');\r\nexport const INVOLVE_TABLE_RENDER_ROW = new InjectionToken('INVOLVE_TABLE_RENDER_ROW');\r\n\r\nexport const INVOLVE_VIEW_DEF = new InjectionToken('INVOLVE_VIEW_DEF');\r\n\r\nexport const INVOLVE_ROW_DEF = new InjectionToken('INVOLVE_ROW_DEF');\r\nexport const INVOLVE_ROW = new InjectionToken('INVOLVE_ROW');\r\n\r\nexport const INVOLVE_COLUMN_DEF = new InjectionToken('INVOLVE_COLUMN_DEF');","import { Directive, Input } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { InvolveDataSource } from \"./data-source\";\r\nimport { InvolveRenderDef } from \"./render\";\r\n\r\nexport interface InvolveViewContext {\r\n\r\n}\r\n\r\n@Directive({\r\n selector: '[involveViewDef]'\r\n})\r\nexport class InvolveViewDef extends InvolveRenderDef> {\r\n @Input('involveViewDefName')\r\n public get name() {\r\n return this._name;\r\n }\r\n public set name(value: string) {\r\n if (value)\r\n this._name = value;\r\n }\r\n protected _name: string;\r\n\r\n @Input('involveViewDefDataSourceFactory')\r\n public get dataSourceFactory() {\r\n return this._dataSourceFactory;\r\n }\r\n public set dataSourceFactory(value: (data: any, data$: Observable) => InvolveDataSource | Promise>) {\r\n this._dataSourceFactory = value;\r\n }\r\n protected _dataSourceFactory: (data: any, data$: Observable) => InvolveDataSource | Promise>;\r\n\r\n @Input('involveViewDefDefaultVisible')\r\n public defaultVisible: boolean = false;\r\n}","import { Component } from '@angular/core';\r\n@Component({\r\n selector: 'involve-tile-content',\r\n template: ``,\r\n host: {\r\n class: 'w-full',\r\n }\r\n})\r\nexport class InvolveTileContentComponent { }","
    \r\n\r\n \r\n @for (tab of tabs; track tab) \r\n {\r\n \r\n \r\n {{ tab.name }}\r\n \r\n \r\n }\r\n \r\n\r\n \r\n \r\n \r\n \r\n {{ tab.name }}\r\n \r\n \r\n \r\n\r\n
    ","import { Component, Input, EventEmitter, Output, HostListener } from '@angular/core';\r\nimport { ITab } from '../tab/tab.component';\r\n\r\n@Component({\r\n selector: 'involve-tile-header-tabs',\r\n templateUrl: 'tile-header-tabs.component.html',\r\n styleUrls: ['tile-header-tabs.component.scss']\r\n})\r\nexport class InvolveTileHeaderTabsComponent {\r\n @Input() name: string; //param name\r\n\r\n shouldDisplayKebabMenu: boolean = false;\r\n\r\n public constructor() {\r\n this.checkWindowSize()\r\n }\r\n\r\n private _tabs: ITab[];\r\n\r\n @Input()\r\n public get tabs() {\r\n return this._tabs;\r\n }\r\n public set tabs(value: ITab[]) {\r\n this._tabs = value;\r\n\r\n if (!this._tabs?.length) {\r\n this.defaultTabId = null;\r\n return;\r\n }\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize() {\r\n this.checkWindowSize()\r\n }\r\n\r\n @Output() onSelect = new EventEmitter();\r\n\r\n @Input()\r\n public defaultTabId: string;\r\n\r\n public selectTab(tabId: string) {\r\n this.onSelect.emit(this.tabs?.find(tab => tab?.id == tabId));\r\n }\r\n\r\n public checkWindowSize() {\r\n if (window.innerWidth < 1800) {\r\n this.shouldDisplayKebabMenu = false\r\n } else {\r\n this.shouldDisplayKebabMenu = true\r\n }\r\n }\r\n\r\n}\r\n","\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-tile-header',\r\n host: {\r\n class: 'w-full',\r\n '[style.z-index]': '1',\r\n },\r\n template: `\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n

    \r\n \r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n `\r\n})\r\nexport class InvolveTileHeaderComponent {\r\n @Input() tooltip: string;\r\n}","import { Component } from '@angular/core';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n@Component({\r\n selector: 'involve-tile',\r\n templateUrl: 'tile.component.html',\r\n providers: [ { provide: DATA_CY_TYPE, useValue: 'tile' } ]\r\n})\r\nexport class InvolveTileComponent {\r\n}","
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport interface InvolveToggleButtonAccessor {\r\n id: string;\r\n name: string;\r\n value: any;\r\n}\r\n\r\nexport const INVOLVE_TOGGLE_BUTTON_ACCESSOR = new InjectionToken<{ value: any }>('INVOLVE_TOGGLE_BUTTON_ACCESSOR');","import { Component, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { InvolveToggleButtonAccessor, INVOLVE_TOGGLE_BUTTON_ACCESSOR } from './toggle-button-accessor';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n@Component({\r\n selector: 'involve-toggle-button',\r\n templateUrl: 'toggle-button.component.html',\r\n providers: [\r\n { provide: INVOLVE_TOGGLE_BUTTON_ACCESSOR, useExisting: InvolveToggleButtonComponent },\r\n { provide: NG_VALUE_ACCESSOR, useExisting: InvolveToggleButtonComponent, multi: true },\r\n { provide: DATA_CY_TYPE, useValue: 'toggleButton' }\r\n ]\r\n})\r\nexport class InvolveToggleButtonComponent implements InvolveToggleButtonAccessor, ControlValueAccessor {\r\n @Input()\r\n public id = `involve-toggle-button-${__id++}`;\r\n\r\n @Input()\r\n public name = this.id;\r\n\r\n @Input()\r\n public get value() { return this._value; }\r\n public set value(value: any) {\r\n if (value !== this._value) {\r\n this._value = value;\r\n this._onChange(value);\r\n this.valueChange.emit(value);\r\n }\r\n }\r\n private _value: boolean = false;\r\n\r\n @Output()\r\n public valueChange = new EventEmitter();\r\n\r\n public writeValue(value: boolean) {\r\n this._value = value;\r\n }\r\n\r\n private _onChange: (value: any) => void = () => {};\r\n public registerOnChange(fn: (value: any) => void) {\r\n this._onChange = fn;\r\n }\r\n\r\n private _onTouched: () => void = () => {};\r\n public registerOnTouched(fn: () => void) {\r\n this._onTouched = fn;\r\n }\r\n}","
    \r\n \r\n
    ","import { Component, Inject, Input } from '@angular/core';\r\nimport { InvolveToggleButtonComponent } from './toggle-button.component';\r\n\r\nimport { INVOLVE_TOGGLE_BUTTON_ACCESSOR } from './toggle-button-accessor';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n@Component({\r\n selector: 'involve-toggle-option',\r\n templateUrl: 'toggle-option.component.html',\r\n providers: [\r\n { provide: DATA_CY_TYPE, useValue: 'toggleOption' }\r\n ]\r\n})\r\nexport class InvolveToggleOptionComponent {\r\n @Input()\r\n public id = `involve-toggle-option-${__id++}`;\r\n\r\n public readonly name = this.toggleButtonAccessor.name;\r\n\r\n @Input()\r\n public value: any;\r\n\r\n public get checked() {\r\n return this.value === this.toggleButtonAccessor.value;\r\n }\r\n\r\n public constructor(\r\n @Inject(INVOLVE_TOGGLE_BUTTON_ACCESSOR)\r\n public readonly toggleButtonAccessor: InvolveToggleButtonComponent\r\n ) { }\r\n\r\n public select(event: Event) {\r\n this.toggleButtonAccessor.value = this.value;\r\n }\r\n}","\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DATA_CY_TYPE } from '../directive/cypress.directive';\r\n\r\nlet __id = 0;\r\n\r\n@Component({\r\n selector: 'involve-toggle-switch',\r\n templateUrl: 'toggle-switch.component.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: InvolveToggleSwitchComponent, multi: true },\r\n { provide: DATA_CY_TYPE, useValue: 'toggleSwitch' }\r\n ]\r\n})\r\nexport class InvolveToggleSwitchComponent implements ControlValueAccessor {\r\n\r\n @Input()\r\n public get disabled() { return this._disabled; }\r\n public set disabled(value: string | boolean) { this._disabled = coerceBooleanProperty(value); }\r\n private _disabled: boolean;\r\n\r\n @Input()\r\n public id = `involve-toggle-switch-${__id++}`;\r\n\r\n @Input()\r\n public get value() { return this._value; }\r\n public set value(value: boolean) {\r\n if (value !== this._value) {\r\n this._value = value;\r\n\r\n if (!this._firstChange) {\r\n this._onChange(value);\r\n this.valueChange.emit(value);\r\n }\r\n }\r\n }\r\n private _value: boolean = false;\r\n\r\n private _firstChange = true;\r\n\r\n @Output()\r\n public valueChange = new EventEmitter();\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if ('value' in changes && changes.value.firstChange)\r\n this._firstChange = false;\r\n }\r\n\r\n public writeValue(value: boolean) { \r\n this._value = value;\r\n this._firstChange = false;\r\n }\r\n\r\n private _onChange: (value: boolean) => void = () => { };\r\n public registerOnChange(fn: (value: boolean) => void) {\r\n this._onChange = fn;\r\n }\r\n\r\n private _onTouched: () => void = () => { };\r\n public registerOnTouched(fn: () => void) {\r\n this._onTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean) {\r\n this.disabled = isDisabled;\r\n }\r\n}","
    \r\n
    \r\n \r\n\r\n \r\n
    \r\n
    ","import { Component, Input, Optional } from \"@angular/core\";\r\n \r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { InvolveDataSource, InvolveDataSourceAccessor } from \"@rfv/modules/involve/table\";\r\nimport { InvolveExportComponent } from '../../../export/export.component';\r\n\r\n@Component({\r\n selector: 'involve-datasource-export',\r\n templateUrl: '../../../export/export.component.html'\r\n})\r\nexport class InvolveDataSourceExportComponent extends InvolveExportComponent {\r\n @Input()\r\n public dataSource: InvolveDataSource;\r\n\r\n private _subscription: Subscription;\r\n\r\n public constructor(\r\n @Optional()\r\n private _dataSourceAccessor?: InvolveDataSourceAccessor\r\n ) {\r\n super();\r\n }\r\n\r\n public ngOnInit() {\r\n this.dataSource = this.dataSource || this._dataSourceAccessor?.dataSource;\r\n\r\n if (!this.dataSource)\r\n throw new Error(`No data source provided for export.`);\r\n\r\n this._subscription = this.dataSource.sortedData$.subscribe(data => this.data = data);\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._subscription?.unsubscribe();\r\n }\r\n}","
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n\r\n \r\n\r\n
    \r\n
    {{ dataSource.filterSelection?.selected.length }}
    \r\n \r\n
    \r\n \r\n {{ menuTitle }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n\r\n\r\n
    \r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n\r\n\r\n
    \r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n
    \r\n
    ","import { ConnectionPositionPair } from '@angular/cdk/overlay';\r\nimport { MediaObserver } from '@angular/flex-layout';\r\nimport { Component, Input, Optional, ChangeDetectorRef, ViewChild, ElementRef, AfterViewInit, TemplateRef, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { Observable, BehaviorSubject, fromEvent, combineLatest } from 'rxjs';\r\nimport { debounceTime, map, startWith, take } from 'rxjs/operators';\r\n\r\n\r\nimport { InvolveDataSourceFilterValueItem, InvolveDataSource, InvolveDataSourceAccessor, InvolveDataSourceFilter } from '@rfv/modules/involve/table/data-source';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\n\r\nlet __id = 0;\r\n@Component({\r\n selector: 'involve-datasource-auto-filter',\r\n templateUrl: 'auto-filter.component.html',\r\n styles: [`\r\n :host {\r\n width: 100%;\r\n }\r\n .dropdown {\r\n margin-left: 1rem;\r\n width: 275px;\r\n position: initial;\r\n top: initial;\r\n padding: 0.5rem 0.5rem;\r\n }\r\n\r\n .offscreen {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n opacity: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .filter-button:hover {\r\n background: none;\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class InvolveDataSourceAutoFilterComponent implements AfterViewInit {\r\n private _uid = `involve-auto-filter-${__id++}`;\r\n\r\n public filterItems$: Observable;\r\n public selectedFilterItems$: Observable;\r\n \r\n\r\n @Input()\r\n public dataSource: InvolveDataSource;\r\n\r\n @Input()\r\n public showAllFilter: boolean = true;\r\n\r\n @Input()\r\n public value: string;\r\n\r\n @Input()\r\n public color: string;\r\n\r\n @Input()\r\n public display: string;\r\n\r\n @Input()\r\n public order: string = null;\r\n\r\n @Input()\r\n public menuTitle: string;\r\n\r\n @Input()\r\n public set values(value: any[]) {\r\n this._values.next(value);\r\n }\r\n private _values = new BehaviorSubject(null);\r\n\r\n @Input()\r\n public select: string;\r\n private _select: InvolveDataSourceFilterValueItem = null;\r\n\r\n public isMobile$: Observable;\r\n\r\n private _filter: InvolveDataSourceFilter<'value'>;\r\n\r\n public constructor(\r\n @Optional()\r\n private _dataSourceAccessor: InvolveDataSourceAccessor,\r\n private _cdr: ChangeDetectorRef,\r\n private _mediaObserver: MediaObserver\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.isMobile$ = this._mediaObserver.asObservable().pipe(\r\n map(media => this._mediaObserver.isActive('lt-md') ? true : false),\r\n startWith(false)\r\n );\r\n\r\n this.dataSource = this.dataSource || this._dataSourceAccessor?.dataSource;\r\n\r\n if (!this.dataSource)\r\n throw new Error('Filter must have a data source.');\r\n\r\n const exists = this.dataSource.filters.find(filter => filter.type === 'value' && filter.value === this.value) as InvolveDataSourceFilter<'value'>;\r\n\r\n if (exists) {\r\n this._filter = exists;\r\n if (exists.id !== this._uid) {\r\n this._filter.id = this._uid;\r\n }\r\n\r\n } else {\r\n this._filter = {\r\n id: this._uid,\r\n value: this.value,\r\n type: 'value',\r\n color: this.color,\r\n display: this.display,\r\n order: this.order\r\n };\r\n\r\n this.dataSource.addFilter(this._filter);\r\n }\r\n\r\n this.filterItems$ = combineLatest([\r\n this.dataSource.filterItems$.pipe(\r\n map(filterItems => filterItems.filter(filterItem => filterItem.source === this._filter) as InvolveDataSourceFilterValueItem[])\r\n ),\r\n this._values\r\n ]).pipe(\r\n map(([filterItems, values]) => filterItems.filter(filterItem => {\r\n if (filterItem.value == this.select && !this._select) {\r\n this._select = filterItem;\r\n this.dataSource.filterSelection.select(this._select);\r\n }\r\n\r\n let display = filterItem.source.id === this._uid;\r\n\r\n if (display && values)\r\n display = values.find(value => filterItem.value === value);\r\n\r\n return display;\r\n }).sort((a, b) => a.order - b.order))\r\n );\r\n\r\n this.selectedFilterItems$ = this.filterItems$.pipe(\r\n map(filterItems => filterItems.filter(filterItem => this.dataSource.filterSelection.isSelected(filterItem)))\r\n );\r\n }\r\n\r\n public clear() {\r\n this.selectedFilterItems$.pipe(\r\n take(1)\r\n ).subscribe(filterItems => this.dataSource.filterSelection.deselect(...filterItems));\r\n }\r\n\r\n /**\r\n * Template Portal\r\n */\r\n @ViewChild('container') container: ElementRef;\r\n @ViewChild('small') public small: ElementRef;\r\n @ViewChild('medium') public medium: ElementRef;\r\n @ViewChild('large') public large: ElementRef;\r\n\r\n @ViewChild('smallTemplate')\r\n private _smallTemplate: TemplateRef;\r\n @ViewChild('mediumTemplate')\r\n private _mediumTemplate: TemplateRef;\r\n @ViewChild('largeTemplate')\r\n private _largeTemplate: TemplateRef;\r\n\r\n public selectedTemplate: TemplateRef;\r\n\r\n viewInit: boolean;\r\n\r\n ngAfterViewInit() {\r\n this.onResize();\r\n\r\n fromEvent(window, 'resize').pipe(\r\n debounceTime(100)\r\n ).subscribe(e => {\r\n this.onResize();\r\n });\r\n\r\n this.viewInit = true;\r\n }\r\n\r\n ngAfterContentChecked() {\r\n if (this.viewInit)\r\n this.onResize();\r\n }\r\n\r\n public onResize() {\r\n\r\n if (this.container.nativeElement.clientWidth > this.large.nativeElement.clientWidth)\r\n this.selectedTemplate = this._largeTemplate;\r\n else if (this.container.nativeElement.clientWidth > this.medium.nativeElement.clientWidth)\r\n this.selectedTemplate = this._mediumTemplate;\r\n else\r\n this.selectedTemplate = this._smallTemplate;\r\n\r\n this._cdr.detectChanges();\r\n }\r\n}","
    \r\n \r\n {{ name }}\r\n
    \r\n ({{ count }})\r\n \r\n \r\n ({{ count }}/{{ totalCount }})\r\n \r\n \r\n ({{ totalCount }})\r\n \r\n \r\n
    \r\n
    ","import { Component, Input } from '@angular/core';\r\n@Component({\r\n selector: 'involve-datasource-filter-item',\r\n templateUrl: 'filter-item.component.html'\r\n})\r\nexport class InvolveDataSourceFilterItemComponent {\r\n @Input()\r\n public name: string;\r\n \r\n @Input()\r\n public showName: boolean = true;\r\n\r\n @Input()\r\n public color: string = 'transparent';\r\n\r\n @Input()\r\n public count: number;\r\n\r\n @Input()\r\n public totalCount: number;\r\n\r\n @Input()\r\n public active: boolean = false;\r\n}","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'involve-datasource-group-option',\r\n template: ``\r\n})\r\nexport class InvolveDataSourceGroupOptionComponent {\r\n @Input()\r\n public value: any;\r\n\r\n @ViewChild('template', { read: TemplateRef, static: true })\r\n public templateRef: TemplateRef;\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n","import { Component, Input, Optional, ContentChildren, QueryList, OnInit } from '@angular/core';\r\n \r\nimport { BehaviorSubject } from 'rxjs';\r\n \r\nimport { InvolveDataSource, InvolveDataSourceAccessor } from '@rfv/modules/involve/table';\r\n \r\nimport { InvolveDataSourceGroupOptionComponent } from './group-option.component';\r\n \r\n@Component({\r\n selector: 'involve-datasource-group',\r\n templateUrl: 'group.component.html'\r\n})\r\nexport class InvolveDataSourceGroupComponent implements OnInit {\r\n @Input()\r\n public dataSource: InvolveDataSource;\r\n \r\n @Input()\r\n public allowUngroup: boolean = true;\r\n\r\n @Input()\r\n public placeHolder: string = 'Group By';\r\n\r\n @Input()\r\n public subscript = false;\r\n \r\n private _value: BehaviorSubject;\r\n \r\n @Input()\r\n public get value() { return this.dataSource.groupBy; }\r\n public set value(value: string) { this._value?.next(value); }\r\n \r\n @ContentChildren(InvolveDataSourceGroupOptionComponent)\r\n public options: QueryList>;\r\n \r\n public constructor(\r\n @Optional()\r\n private _dataSourceAccessor: InvolveDataSourceAccessor\r\n ) { }\r\n \r\n public ngOnInit() {\r\n this.dataSource = this.dataSource || this._dataSourceAccessor?.dataSource;\r\n\r\n this._value = new BehaviorSubject(this.dataSource.groupBy);\r\n\r\n this._value.subscribe(value => {\r\n if (value !== this.dataSource.groupBy)\r\n this.dataSource.groupBy = value;\r\n });\r\n }\r\n \r\n public ngOnDestroy() {\r\n this._value.complete();\r\n }\r\n}","\r\n \r\n \r\n \r\n","import { Component, Input, Optional } from '@angular/core';\r\n\r\nimport { InvolveDataSource, InvolveDataSourceAccessor } from '@rfv/modules/involve/table';\r\n\r\n@Component({\r\n selector: 'involve-datasource-search',\r\n templateUrl: 'search.component.html'\r\n})\r\nexport class InvolveDataSourceSearchComponent {\r\n @Input()\r\n public dataSource: InvolveDataSource;\r\n\r\n public constructor(\r\n @Optional()\r\n private _dataSourceAccessor: InvolveDataSourceAccessor\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.dataSource = this.dataSource || this._dataSourceAccessor?.dataSource;\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'involve-toolbar-actions'\r\n})\r\nexport class InvolveToolbarActionsDirective {}","
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n\r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n","\r\nimport { Component, Input, Optional, SkipSelf, ChangeDetectorRef } from '@angular/core';\r\nimport { MediaObserver } from '@angular/flex-layout';\r\nimport { Observable } from 'rxjs';\r\nimport { map, startWith } from 'rxjs/operators';\r\n\r\nimport { InvolveDataSource, InvolveDataSourceAccessor } from '../table';\r\n\r\n@Component({\r\n selector: 'involve-toolbar',\r\n templateUrl: 'toolbar.component.html',\r\n styleUrls: ['toolbar.component.scss'],\r\n providers: [\r\n { provide: InvolveDataSourceAccessor, useExisting: InvolveToolbarComponent }\r\n ]\r\n})\r\nexport class InvolveToolbarComponent implements InvolveDataSourceAccessor {\r\n @Input()\r\n public dataSource: InvolveDataSource;\r\n\r\n public isMobile$: Observable;\r\n\r\n public showDropdownFilter: boolean = false;\r\n\r\n public constructor(\r\n @Optional() @SkipSelf()\r\n private _dataSourceAccessor: InvolveDataSourceAccessor,\r\n private _mediaObserver: MediaObserver,\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.isMobile$ = this._mediaObserver.asObservable().pipe(\r\n map(media => this._mediaObserver.isActive('lt-md') ? true : false),\r\n startWith(false)\r\n );\r\n\r\n this.dataSource = this.dataSource || this._dataSourceAccessor?.dataSource;\r\n }\r\n}\r\n","
    \r\n\r\n {{message}} \r\n\r\n \r\n \r\n \r\n \r\n\r\n
    \r\n\r\n","/** \r\n * EXAMPLE:\r\n * \r\n *
    \r\n * ... some content ...\r\n *
    \r\n * \r\n *
    \r\n * ... some content ...\r\n *
    \r\n * \r\n */\r\n\r\nimport { AnimationEvent } from '@angular/animations';\r\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { BooleanInput, coerceBooleanProperty, NumberInput } from '@angular/cdk/coercion';\r\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\r\nimport { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\r\nimport {\r\n FlexibleConnectedPositionStrategy,\r\n HorizontalConnectionPos,\r\n OriginConnectionPosition,\r\n Overlay,\r\n OverlayConnectionPosition,\r\n OverlayRef,\r\n ScrollStrategy,\r\n VerticalConnectionPos,\r\n} from '@angular/cdk/overlay';\r\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Directive,\r\n ElementRef,\r\n Inject,\r\n InjectionToken,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n Optional,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n AfterViewInit,\r\n OnInit,\r\n Renderer2,\r\n TemplateRef,\r\n ContentChild,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { take, takeUntil } from 'rxjs/operators';\r\n\r\n// ngrx\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport {\r\n animate,\r\n AnimationTriggerMetadata,\r\n keyframes,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n} from '@angular/animations';\r\n\r\nconst involveTooltipAnimations: {\r\n readonly tooltipState: AnimationTriggerMetadata;\r\n} = {\r\n /** Animation that transitions a tooltip in and out. */\r\n tooltipState: trigger('state', [\r\n state('initial, void, hidden', style({ opacity: 0, transform: 'scale(0)' })),\r\n state('visible', style({ transform: 'scale(1)' })),\r\n transition('* => visible', animate('200ms cubic-bezier(0, 0, 0.2, 1)', keyframes([\r\n style({ opacity: 0, transform: 'scale(0)', offset: 0 }),\r\n style({ opacity: 0.5, transform: 'scale(0.99)', offset: 0.5 }),\r\n style({ opacity: 1, transform: 'scale(1)', offset: 1 })\r\n ]))),\r\n transition('* => hidden', animate('100ms cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 0 }))),\r\n ])\r\n};\r\n\r\n/** Possible positions for a tooltip. */\r\nexport type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after';\r\n\r\n/**\r\n * Options for how the tooltip trigger should handle touch gestures.\r\n * See `InvolveTooltip.touchGestures` for more information.\r\n */\r\nexport type TooltipTouchGestures = 'auto' | 'on' | 'off';\r\n\r\n/** Possible visibility states of a tooltip. */\r\nexport type TooltipVisibility = 'initial' | 'visible' | 'hidden';\r\n\r\n/** Time in ms to throttle repositioning after scroll events. */\r\nexport const SCROLL_THROTTLE_MS = 20;\r\n\r\n/** CSS class that will be attached to the overlay panel. */\r\nexport const TOOLTIP_PANEL_CLASS = 'involve-tooltip-panel';\r\n\r\n/** Options used to bind passive event listeners. */\r\nconst passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });\r\n\r\n/**\r\n * Time between the user putting the pointer on a tooltip\r\n * trigger and the long press event being fired.\r\n */\r\nconst LONGPRESS_DELAY = 500;\r\n\r\n/**\r\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\r\n * @docs-private\r\n */\r\nexport function getInvolveTooltipInvalidPositionError(position: string) {\r\n return Error(`Tooltip position \"${position}\" is invalid.`);\r\n}\r\n\r\n/** Injection token that determines the scroll handling while a tooltip is visible. */\r\nexport const INVOLVE_TOOLTIP_SCROLL_STRATEGY =\r\n new InjectionToken<() => ScrollStrategy>('involve-tooltip-scroll-strategy');\r\n\r\n/** @docs-private */\r\nexport function INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\r\n return () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS });\r\n}\r\n\r\n/** @docs-private */\r\nexport const INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\r\n provide: INVOLVE_TOOLTIP_SCROLL_STRATEGY,\r\n deps: [Overlay],\r\n useFactory: INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY,\r\n};\r\n\r\n/** Default `involveTooltip` options that can be overridden. */\r\nexport interface InvolveTooltipDefaultOptions {\r\n showDelay: number;\r\n hideDelay: number;\r\n touchendHideDelay: number;\r\n touchGestures?: TooltipTouchGestures;\r\n position?: TooltipPosition;\r\n}\r\n\r\n/** Injection token to be used to override the default options for `involveTooltip`. */\r\nexport const INVOLVE_TOOLTIP_DEFAULT_OPTIONS =\r\n new InjectionToken('involve-tooltip-default-options', {\r\n providedIn: 'root',\r\n factory: INVOLVE_TOOLTIP_DEFAULT_OPTIONS_FACTORY\r\n });\r\n\r\n/** @docs-private */\r\nexport function INVOLVE_TOOLTIP_DEFAULT_OPTIONS_FACTORY(): InvolveTooltipDefaultOptions {\r\n return {\r\n showDelay: 0,\r\n hideDelay: 0,\r\n touchendHideDelay: 1500,\r\n };\r\n}\r\n\r\n/**\r\n * Directive used to show the content of the tooltip\r\n */\r\n@Directive({\r\n selector: '[involveTooltipContent]',\r\n})\r\nexport class InvolveTooltipContent {\r\n constructor(public templateRef: TemplateRef) { }\r\n}\r\n\r\n/**\r\n * Directive that attaches a tooltip to the host element. Animates the showing and\r\n * hiding of a tooltip provided position (defaults to below the element).\r\n */\r\n@Directive({\r\n selector: '[involveTooltip], [involveTooltipTag]',\r\n exportAs: 'involveTooltip',\r\n host: {\r\n 'class': 'involve-tooltip-trigger'\r\n }\r\n})\r\nexport class InvolveTooltipDirective implements OnDestroy, AfterViewInit, OnInit {\r\n _overlayRef: OverlayRef | null;\r\n _tooltipInstance: InvolveTooltipComponent | null;\r\n\r\n private _portal: ComponentPortal;\r\n private _position: TooltipPosition = 'below';\r\n private _disabled: boolean = false;\r\n private _tooltipClass: string | string[] | Set | { [key: string]: any };\r\n private _scrollStrategy: () => ScrollStrategy;\r\n private _viewInitialized = false;\r\n private _pointerExitEventsInitialized = false;\r\n private _destroyed$ = new Subject();\r\n\r\n @ContentChild(InvolveTooltipContent) public tooltipContent: InvolveTooltipContent;\r\n\r\n /** Tag to reference tooltip value that is in the ngrx store */\r\n @Input() involveTooltipTag = '';\r\n\r\n /** Allows the user to define the position of the tooltip relative to the parent element */\r\n @Input('involveTooltipPosition')\r\n get position(): TooltipPosition { return this._position; }\r\n set position(value: TooltipPosition) {\r\n if (value !== this._position) {\r\n this._position = value;\r\n\r\n if (this._overlayRef) {\r\n this._updatePosition();\r\n\r\n if (this._tooltipInstance) {\r\n this._tooltipInstance!.show(0);\r\n }\r\n\r\n this._overlayRef.updatePosition();\r\n }\r\n }\r\n }\r\n\r\n /** Disables the display of the tooltip. */\r\n @Input('involveTooltipDisabled')\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value) {\r\n this._disabled = coerceBooleanProperty(value);\r\n\r\n // If tooltip is disabled, hide immediately.\r\n if (this._disabled) {\r\n this.hide(0);\r\n } else {\r\n this._setupPointerEnterEventsIfNeeded();\r\n }\r\n }\r\n\r\n /** The default delay in ms before showing the tooltip after show is called */\r\n @Input('involveTooltipShowDelay') showDelay: number = this._defaultOptions.showDelay;\r\n\r\n /** The default delay in ms before hiding the tooltip after hide is called */\r\n @Input('involveTooltipHideDelay') hideDelay: number = this._defaultOptions.hideDelay;\r\n\r\n /**\r\n * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\r\n * uses a long press gesture to show and hide, however it can conflict with the native browser\r\n * gestures. To work around the conflict, native gestures are disabled on the\r\n * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\r\n * elements). The different values for this option configure the touch event handling as follows:\r\n * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\r\n * browser gestures on particular elements. In particular, it allows text selection on inputs\r\n * and textareas, and preserves the native browser dragging on elements marked as `draggable`.\r\n * - `on` - Enables touch gestures for all elements and disables native\r\n * browser gestures with no exceptions.\r\n * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\r\n * showing on touch devices.\r\n */\r\n @Input('involveTooltipTouchGestures') touchGestures: TooltipTouchGestures = 'auto';\r\n\r\n /** The message to be displayed in the tooltip */\r\n @Input('involveTooltip')\r\n get message() { return this._message; }\r\n set message(value: string) {\r\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, this._message);\r\n\r\n // If the message is not a string (e.g. number), convert it to a string and trim it.\r\n // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\r\n // away the string-conversion: https://github.com/angular/components/issues/20684\r\n this._message = value != null ? String(value).trim() : '';\r\n\r\n if (!this._message && this._isTooltipVisible()) {\r\n this.hide(0);\r\n } else {\r\n this._setupPointerEnterEventsIfNeeded();\r\n this._updateTooltipMessage();\r\n this._ngZone.runOutsideAngular(() => {\r\n // The `AriaDescriber` has some functionality that avoids adding a description if it's the\r\n // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\r\n // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\r\n // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\r\n Promise.resolve().then(() => {\r\n this._ariaDescriber.describe(this._elementRef.nativeElement, this.message);\r\n });\r\n });\r\n }\r\n }\r\n private _message = '';\r\n\r\n /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\r\n @Input('involveTooltipClass')\r\n get tooltipClass() { return this._tooltipClass; }\r\n set tooltipClass(value: string | string[] | Set | { [key: string]: any }) {\r\n this._tooltipClass = value;\r\n if (this._tooltipInstance) {\r\n this._setTooltipClass(this._tooltipClass);\r\n }\r\n }\r\n\r\n /** Manually-bound passive event listeners. */\r\n private readonly _passiveListeners:\r\n (readonly [string, EventListenerOrEventListenerObject])[] = [];\r\n\r\n /**\r\n * Reference to the current document.\r\n * @breaking-change 11.0.0 Remove `| null` typing for `document`.\r\n */\r\n private _document: Document | null;\r\n\r\n /** Timer started at the last `touchstart` event. */\r\n private _touchstartTimeout: number;\r\n\r\n /** Emits when the component is destroyed. */\r\n private readonly _destroyed = new Subject();\r\n\r\n private domElement;\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private elementRef: ElementRef,\r\n private _store$: Store,\r\n private _overlay: Overlay,\r\n private _elementRef: ElementRef,\r\n private _scrollDispatcher: ScrollDispatcher,\r\n private _viewContainerRef: ViewContainerRef,\r\n private _ngZone: NgZone,\r\n private _platform: Platform,\r\n private _ariaDescriber: AriaDescriber,\r\n private _focusMonitor: FocusMonitor,\r\n @Inject(INVOLVE_TOOLTIP_SCROLL_STRATEGY) scrollStrategy: any,\r\n @Optional() private _dir: Directionality,\r\n @Optional() @Inject(INVOLVE_TOOLTIP_DEFAULT_OPTIONS)\r\n private _defaultOptions: InvolveTooltipDefaultOptions,\r\n\r\n @Inject(DOCUMENT) _document: any) {\r\n\r\n this.domElement = this.elementRef.nativeElement;\r\n\r\n this._scrollStrategy = scrollStrategy;\r\n\r\n if (_defaultOptions) {\r\n if (_defaultOptions.position) {\r\n this.position = _defaultOptions.position;\r\n }\r\n\r\n if (_defaultOptions.touchGestures) {\r\n this.touchGestures = _defaultOptions.touchGestures;\r\n }\r\n }\r\n\r\n _ngZone.runOutsideAngular(() => {\r\n _elementRef.nativeElement.addEventListener('keydown', this._handleKeydown);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this._store$.select(fromCore.ToolTips.getAll).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe((tooltips) => {\r\n if (tooltips && this.involveTooltipTag != \"\") {\r\n let tooltip = tooltips.find(t => t.CodeTag == this.involveTooltipTag);\r\n if (tooltip)\r\n this.message = tooltip.ToolTipText;\r\n }\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n // This needs to happen after view init so the initial values for all inputs have been set.\r\n this._viewInitialized = true;\r\n this._setupPointerEnterEventsIfNeeded();\r\n\r\n this._focusMonitor.monitor(this._elementRef)\r\n .pipe(takeUntil(this._destroyed))\r\n .subscribe(origin => {\r\n // Note that the focus monitor runs outside the Angular zone.\r\n if (!origin) {\r\n this._ngZone.run(() => this.hide(0));\r\n } else if (origin === 'keyboard') {\r\n this._ngZone.run(() => this.show());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Dispose the tooltip when destroyed.\r\n */\r\n ngOnDestroy() {\r\n const nativeElement = this._elementRef.nativeElement;\r\n\r\n clearTimeout(this._touchstartTimeout);\r\n\r\n if (this._overlayRef) {\r\n this._overlayRef.dispose();\r\n this._tooltipInstance = null;\r\n }\r\n\r\n // Clean up the event listeners set in the constructor\r\n nativeElement.removeEventListener('keydown', this._handleKeydown);\r\n this._passiveListeners.forEach(([event, listener]) => {\r\n nativeElement.removeEventListener(event, listener, passiveListenerOptions);\r\n });\r\n this._passiveListeners.length = 0;\r\n\r\n this._destroyed.next();\r\n this._destroyed.complete();\r\n\r\n this._ariaDescriber.removeDescription(nativeElement, this.message);\r\n this._focusMonitor.stopMonitoring(nativeElement);\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\r\n show(delay: number = this.showDelay): void {\r\n if (this.disabled || (!this.message && !this.tooltipContent) || (this._isTooltipVisible() &&\r\n !this._tooltipInstance!._showTimeoutId && !this._tooltipInstance!._hideTimeoutId)) {\r\n return;\r\n }\r\n\r\n const overlayRef = this._createOverlay();\r\n this._detach();\r\n this._portal = this._portal || new ComponentPortal(InvolveTooltipComponent, this._viewContainerRef);\r\n this._tooltipInstance = overlayRef.attach(this._portal).instance;\r\n this._tooltipInstance.afterHidden()\r\n .pipe(takeUntil(this._destroyed))\r\n .subscribe(() => this._detach());\r\n this._setTooltipClass(this._tooltipClass);\r\n this._updateTooltipMessage();\r\n this._tooltipInstance!.show(delay);\r\n }\r\n\r\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\r\n hide(delay: number = this.hideDelay): void {\r\n if (this._tooltipInstance) {\r\n this._tooltipInstance.hide(delay);\r\n }\r\n }\r\n\r\n /** Shows/hides the tooltip */\r\n toggle(): void {\r\n this._isTooltipVisible() ? this.hide() : this.show();\r\n }\r\n\r\n /** Returns true if the tooltip is currently visible to the user */\r\n _isTooltipVisible(): boolean {\r\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\r\n }\r\n\r\n /**\r\n * Handles the keydown events on the host element.\r\n * Needs to be an arrow function so that we can use it in addEventListener.\r\n */\r\n private _handleKeydown = (event: KeyboardEvent) => {\r\n if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._ngZone.run(() => this.hide(0));\r\n }\r\n }\r\n\r\n /** Create the overlay config and position strategy */\r\n private _createOverlay(): OverlayRef {\r\n if (this._overlayRef) {\r\n return this._overlayRef;\r\n }\r\n\r\n const scrollableAncestors =\r\n this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\r\n\r\n // Create connected position strategy that listens for scroll events to reposition.\r\n const strategy = this._overlay.position()\r\n .flexibleConnectedTo(this._elementRef)\r\n .withTransformOriginOn('.involve-tooltip')\r\n .withFlexibleDimensions(false)\r\n .withViewportMargin(8)\r\n .withScrollableContainers(scrollableAncestors);\r\n\r\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\r\n if (this._tooltipInstance) {\r\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\r\n // After position changes occur and the overlay is clipped by\r\n // a parent scrollable then close the tooltip.\r\n this._ngZone.run(() => this.hide(0));\r\n }\r\n }\r\n });\r\n\r\n this._overlayRef = this._overlay.create({\r\n direction: this._dir,\r\n positionStrategy: strategy,\r\n panelClass: TOOLTIP_PANEL_CLASS,\r\n scrollStrategy: this._scrollStrategy()\r\n });\r\n\r\n this._updatePosition();\r\n\r\n this._overlayRef.detachments()\r\n .pipe(takeUntil(this._destroyed))\r\n .subscribe(() => this._detach());\r\n\r\n return this._overlayRef;\r\n }\r\n\r\n /** Detaches the currently-attached tooltip. */\r\n private _detach() {\r\n if (this._overlayRef && this._overlayRef.hasAttached()) {\r\n this._overlayRef.detach();\r\n }\r\n\r\n this._tooltipInstance = null;\r\n }\r\n\r\n /** Updates the position of the current tooltip. */\r\n private _updatePosition() {\r\n const position =\r\n this._overlayRef!.getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\r\n const origin = this._getOrigin();\r\n const overlay = this._getOverlayPosition();\r\n\r\n position.withPositions([\r\n { ...origin.main, ...overlay.main },\r\n { ...origin.fallback, ...overlay.fallback }\r\n ]);\r\n }\r\n\r\n /**\r\n * Returns the origin position and a fallback position based on the user's position preference.\r\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\r\n */\r\n _getOrigin(): { main: OriginConnectionPosition, fallback: OriginConnectionPosition } {\r\n const isLtr = !this._dir || this._dir.value == 'ltr';\r\n const position = this.position;\r\n let originPosition: OriginConnectionPosition;\r\n\r\n if (position == 'above' || position == 'below') {\r\n originPosition = { originX: 'center', originY: position == 'above' ? 'top' : 'bottom' };\r\n } else if (\r\n position == 'before' ||\r\n (position == 'left' && isLtr) ||\r\n (position == 'right' && !isLtr)) {\r\n originPosition = { originX: 'start', originY: 'center' };\r\n } else if (\r\n position == 'after' ||\r\n (position == 'right' && isLtr) ||\r\n (position == 'left' && !isLtr)) {\r\n originPosition = { originX: 'end', originY: 'center' };\r\n }\r\n // else if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n // throw getInvolveTooltipInvalidPositionError(position);\r\n // }\r\n\r\n const { x, y } = this._invertPosition(originPosition!.originX, originPosition!.originY);\r\n\r\n return {\r\n main: originPosition!,\r\n fallback: { originX: x, originY: y }\r\n };\r\n }\r\n\r\n /** Returns the overlay position and a fallback position based on the user's preference */\r\n _getOverlayPosition(): { main: OverlayConnectionPosition, fallback: OverlayConnectionPosition } {\r\n const isLtr = !this._dir || this._dir.value == 'ltr';\r\n const position = this.position;\r\n let overlayPosition: OverlayConnectionPosition;\r\n\r\n if (position == 'above') {\r\n overlayPosition = { overlayX: 'center', overlayY: 'bottom' };\r\n } else if (position == 'below') {\r\n overlayPosition = { overlayX: 'center', overlayY: 'top' };\r\n } else if (\r\n position == 'before' ||\r\n (position == 'left' && isLtr) ||\r\n (position == 'right' && !isLtr)) {\r\n overlayPosition = { overlayX: 'end', overlayY: 'center' };\r\n } else if (\r\n position == 'after' ||\r\n (position == 'right' && isLtr) ||\r\n (position == 'left' && !isLtr)) {\r\n overlayPosition = { overlayX: 'start', overlayY: 'center' };\r\n }\r\n // else if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n // throw getInvolveTooltipInvalidPositionError(position);\r\n // }\r\n\r\n const { x, y } = this._invertPosition(overlayPosition!.overlayX, overlayPosition!.overlayY);\r\n\r\n return {\r\n main: overlayPosition!,\r\n fallback: { overlayX: x, overlayY: y }\r\n };\r\n }\r\n\r\n /** Updates the tooltip message and repositions the overlay according to the new message length */\r\n private _updateTooltipMessage() {\r\n // Must wait for the message to be painted to the tooltip so that the overlay can properly\r\n // calculate the correct positioning based on the size of the text.\r\n if (this._tooltipInstance) {\r\n this._tooltipInstance.message = this.message;\r\n this._tooltipInstance.content = this.tooltipContent?.templateRef;\r\n\r\n this._tooltipInstance._markForCheck();\r\n\r\n this._ngZone.onMicrotaskEmpty.pipe(\r\n take(1),\r\n takeUntil(this._destroyed)\r\n ).subscribe(() => {\r\n if (this._tooltipInstance) {\r\n this._overlayRef!.updatePosition();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** Updates the tooltip class */\r\n private _setTooltipClass(tooltipClass: string | string[] | Set | { [key: string]: any }) {\r\n if (this._tooltipInstance) {\r\n this._tooltipInstance.tooltipClass = tooltipClass;\r\n this._tooltipInstance._markForCheck();\r\n }\r\n }\r\n\r\n /** Inverts an overlay position. */\r\n private _invertPosition(x: HorizontalConnectionPos, y: VerticalConnectionPos) {\r\n if (this.position === 'above' || this.position === 'below') {\r\n if (y === 'top') {\r\n y = 'bottom';\r\n } else if (y === 'bottom') {\r\n y = 'top';\r\n }\r\n } else {\r\n if (x === 'end') {\r\n x = 'start';\r\n } else if (x === 'start') {\r\n x = 'end';\r\n }\r\n }\r\n\r\n return { x, y };\r\n }\r\n\r\n /** Binds the pointer events to the tooltip trigger. */\r\n private _setupPointerEnterEventsIfNeeded() {\r\n // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\r\n if (this._disabled || (!this.message && !this.tooltipContent) || !this._viewInitialized ||\r\n this._passiveListeners.length) {\r\n return;\r\n }\r\n\r\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\r\n // first tap from firing its click event or can cause the tooltip to open for clicks.\r\n if (this._platformSupportsMouseEvents()) {\r\n this._passiveListeners\r\n .push(['mouseenter', () => {\r\n this._setupPointerExitEventsIfNeeded();\r\n this.show();\r\n }]);\r\n } else if (this.touchGestures !== 'off') {\r\n this._disableNativeGesturesIfNecessary();\r\n\r\n this._passiveListeners\r\n .push(['touchstart', () => {\r\n // Note that it's important that we don't `preventDefault` here,\r\n // because it can prevent click events from firing on the element.\r\n this._setupPointerExitEventsIfNeeded();\r\n clearTimeout(this._touchstartTimeout);\r\n this._touchstartTimeout = window.setTimeout(() => this.show(), LONGPRESS_DELAY);\r\n }]);\r\n }\r\n\r\n this._addListeners(this._passiveListeners);\r\n }\r\n\r\n private _setupPointerExitEventsIfNeeded() {\r\n if (this._pointerExitEventsInitialized) {\r\n return;\r\n }\r\n this._pointerExitEventsInitialized = true;\r\n\r\n const exitListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\r\n if (this._platformSupportsMouseEvents()) {\r\n exitListeners.push(\r\n ['mouseleave', () => this.hide()],\r\n ['wheel', event => this._wheelListener(event as WheelEvent)]\r\n );\r\n } else if (this.touchGestures !== 'off') {\r\n this._disableNativeGesturesIfNecessary();\r\n const touchendListener = () => {\r\n clearTimeout(this._touchstartTimeout);\r\n this.hide(this._defaultOptions.touchendHideDelay);\r\n };\r\n\r\n exitListeners.push(\r\n ['touchend', touchendListener],\r\n ['touchcancel', touchendListener],\r\n );\r\n }\r\n\r\n this._addListeners(exitListeners);\r\n this._passiveListeners.push(...exitListeners);\r\n }\r\n\r\n private _addListeners(\r\n listeners: ReadonlyArray) {\r\n listeners.forEach(([event, listener]) => {\r\n this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\r\n });\r\n }\r\n\r\n private _platformSupportsMouseEvents() {\r\n return !this._platform.IOS && !this._platform.ANDROID;\r\n }\r\n\r\n /** Listener for the `wheel` event on the element. */\r\n private _wheelListener(event: WheelEvent) {\r\n if (this._isTooltipVisible()) {\r\n // @breaking-change 11.0.0 Remove `|| document` once the document is a required param.\r\n const doc = this._document || document;\r\n const elementUnderPointer = doc.elementFromPoint(event.clientX, event.clientY);\r\n const element = this._elementRef.nativeElement;\r\n\r\n // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\r\n // won't fire if the user scrolls away using the wheel without moving their cursor. We\r\n // work around it by finding the element under the user's cursor and closing the tooltip\r\n // if it's not the trigger.\r\n if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\r\n this.hide();\r\n }\r\n }\r\n }\r\n\r\n /** Disables the native browser gestures, based on how the tooltip has been configured. */\r\n private _disableNativeGesturesIfNecessary() {\r\n const gestures = this.touchGestures;\r\n\r\n if (gestures !== 'off') {\r\n const element = this._elementRef.nativeElement;\r\n const style = element.style;\r\n\r\n // If gestures are set to `auto`, we don't disable text selection on inputs and\r\n // textareas, because it prevents the user from typing into them on iOS Safari.\r\n if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\r\n style.userSelect = (style as any).msUserSelect = style.webkitUserSelect =\r\n (style as any).MozUserSelect = 'none';\r\n }\r\n\r\n // If we have `auto` gestures and the element uses native HTML dragging,\r\n // we don't set `-webkit-user-drag` because it prevents the native behavior.\r\n if (gestures === 'on' || !element.draggable) {\r\n (style as any).webkitUserDrag = 'none';\r\n }\r\n\r\n style.touchAction = 'none';\r\n // style.webkitTapHighlightColor = 'transparent';\r\n }\r\n }\r\n\r\n static ngAcceptInputType_disabled: BooleanInput;\r\n static ngAcceptInputType_hideDelay: NumberInput;\r\n static ngAcceptInputType_showDelay: NumberInput;\r\n}\r\n\r\n/**\r\n * Internal component that wraps the tooltip's content.\r\n * @docs-private\r\n */\r\n@Component({\r\n selector: 'involve-tooltip',\r\n templateUrl: './tooltip.html',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [involveTooltipAnimations.tooltipState],\r\n host: {\r\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\r\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\r\n '[style.zoom]': '_visibility === \"visible\" ? 1 : null',\r\n '(body:click)': 'this._handleBodyInteraction()',\r\n 'aria-hidden': 'true',\r\n }\r\n})\r\nexport class InvolveTooltipComponent implements OnDestroy {\r\n /** Message to display in the tooltip */\r\n message: string;\r\n\r\n /** Used to shows the content in the tooltip */\r\n content: TemplateRef;\r\n\r\n /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\r\n tooltipClass: string | string[] | Set | { [key: string]: any };\r\n\r\n /** The timeout ID of any current timer set to show the tooltip */\r\n _showTimeoutId: number | null;\r\n\r\n /** The timeout ID of any current timer set to hide the tooltip */\r\n _hideTimeoutId: number | null;\r\n\r\n /** Property watched by the animation framework to show or hide the tooltip */\r\n _visibility: TooltipVisibility = 'initial';\r\n\r\n /** Whether interactions on the page should close the tooltip */\r\n private _closeOnInteraction: boolean = false;\r\n\r\n /** Subject for notifying that the tooltip has been hidden from the view */\r\n private readonly _onHide: Subject = new Subject();\r\n\r\n /** Stream that emits whether the user has a handset-sized display. */\r\n _isHandset: Observable = this._breakpointObserver.observe(Breakpoints.Handset);\r\n\r\n constructor(\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private _breakpointObserver: BreakpointObserver) { }\r\n\r\n /**\r\n * Shows the tooltip with an animation originating from the provided origin\r\n * @param delay Amount of milliseconds to the delay showing the tooltip.\r\n */\r\n show(delay: number): void {\r\n // Cancel the delayed hide if it is scheduled\r\n if (this._hideTimeoutId) {\r\n clearTimeout(this._hideTimeoutId);\r\n this._hideTimeoutId = null;\r\n }\r\n\r\n // Body interactions should cancel the tooltip if there is a delay in showing.\r\n this._closeOnInteraction = true;\r\n this._showTimeoutId = window.setTimeout(() => {\r\n this._visibility = 'visible';\r\n this._showTimeoutId = null;\r\n\r\n // Mark for check so if any parent component has set the\r\n // ChangeDetectionStrategy to OnPush it will be checked anyways\r\n this._markForCheck();\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Begins the animation to hide the tooltip after the provided delay in ms.\r\n * @param delay Amount of milliseconds to delay showing the tooltip.\r\n */\r\n hide(delay: number): void {\r\n // Cancel the delayed show if it is scheduled\r\n if (this._showTimeoutId) {\r\n clearTimeout(this._showTimeoutId);\r\n this._showTimeoutId = null;\r\n }\r\n\r\n this._hideTimeoutId = window.setTimeout(() => {\r\n this._visibility = 'hidden';\r\n this._hideTimeoutId = null;\r\n\r\n // Mark for check so if any parent component has set the\r\n // ChangeDetectionStrategy to OnPush it will be checked anyways\r\n this._markForCheck();\r\n }, delay);\r\n }\r\n\r\n /** Returns an observable that notifies when the tooltip has been hidden from view. */\r\n afterHidden(): Observable {\r\n return this._onHide;\r\n }\r\n\r\n /** Whether the tooltip is being displayed. */\r\n isVisible(): boolean {\r\n return this._visibility === 'visible';\r\n }\r\n\r\n ngOnDestroy() {\r\n this._onHide.complete();\r\n }\r\n\r\n _animationStart() {\r\n this._closeOnInteraction = false;\r\n }\r\n\r\n _animationDone(event: AnimationEvent): void {\r\n const toState = event.toState as TooltipVisibility;\r\n\r\n if (toState === 'hidden' && !this.isVisible()) {\r\n this._onHide.next();\r\n }\r\n\r\n if (toState === 'visible' || toState === 'hidden') {\r\n this._closeOnInteraction = true;\r\n }\r\n }\r\n\r\n /**\r\n * Interactions on the HTML body should close the tooltip immediately\r\n */\r\n _handleBodyInteraction(): void {\r\n if (this._closeOnInteraction) {\r\n this.hide(0);\r\n }\r\n }\r\n\r\n /**\r\n * Marks that the tooltip needs to be checked in the next change detection run.\r\n * Mainly used for rendering the initial text before positioning a tooltip, which\r\n * can be problematic in components with OnPush change detection.\r\n */\r\n _markForCheck(): void {\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { InvolveTooltipDirective, InvolveTooltipComponent, INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, InvolveTooltipContent } from './tooltip.directive';\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ],\r\n declarations: [\r\n InvolveTooltipDirective,\r\n InvolveTooltipComponent,\r\n InvolveTooltipContent\r\n ],\r\n exports: [\r\n InvolveTooltipDirective,\r\n InvolveTooltipContent\r\n ],\r\n providers: [\r\n INVOLVE_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ]\r\n})\r\nexport class InvolveTooltipModule {}","import { Component } from '@angular/core';\r\n\r\n/**\r\n * Wizard Category Header - appears on left side of category\r\n */\r\n@Component({\r\n selector: 'involve-wizard-category-header',\r\n template: `\r\n
    \r\n \r\n
    \r\n `\r\n})\r\nexport class InvolveWizardCategoryHeaderComponent {\r\n}","import { OnDestroy, AfterContentChecked } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { tap, takeUntil } from 'rxjs/operators';\r\nimport { AfterViewInit } from '@angular/core';\r\nimport { InvolveAccordionComponent } from '../accordion/accordion.component';\r\nimport { InvolveWizardStepComponent } from './wizard-step.component';\r\nimport { Component, Input, ContentChildren, QueryList, ViewChild } from '@angular/core';\r\n\r\n/**\r\n * Wizard Category\r\n */\r\n@Component({\r\n selector: 'involve-wizard-category',\r\n template: `\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n `\r\n})\r\nexport class InvolveWizardCategoryComponent implements AfterViewInit, AfterContentChecked, OnDestroy {\r\n @Input() public progress: number = 0;\r\n\r\n @ContentChildren(InvolveWizardStepComponent, { descendants: true })\r\n private _steps: QueryList;\r\n\r\n @ViewChild(InvolveAccordionComponent) accordion: InvolveAccordionComponent;\r\n\r\n private _destroyed$ = new Subject();\r\n public isActive: boolean;\r\n\r\n ngAfterViewInit() {\r\n this._steps.forEach(step =>\r\n step.setActive.pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(active => {\r\n this.isActive = active;\r\n\r\n if (this._steps.find(step => step.active) || this.isActive)\r\n this.accordion.open();\r\n else\r\n this.accordion.close();\r\n })\r\n );\r\n }\r\n\r\n ngAfterContentChecked() {\r\n this.isActive = !!this._steps?.find(step => step.active);\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}","import { Component } from '@angular/core';\r\n\r\n/**\r\n * Wizard Header\r\n */\r\n@Component({\r\n selector: 'involve-wizard-header',\r\n template: ``\r\n})\r\nexport class InvolveWizardHeaderComponent {\r\n}","import { Subject } from 'rxjs';\r\nimport { Component, Input, HostBinding, Output, EventEmitter } from '@angular/core';\r\n\r\n/**\r\n * Wizard\r\n */\r\n@Component({\r\n selector: 'involve-wizard-step',\r\n template: `\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n `,\r\n host: {\r\n '[class.blue-yellow]': 'active',\r\n '[class.pointer]':'!disabled',\r\n '[class.gray]':'disabled'\r\n }\r\n})\r\nexport class InvolveWizardStepComponent {\r\n @Input()//green check\r\n public complete: boolean = false;\r\n\r\n @Input()\r\n public disabled: boolean = false;\r\n\r\n @Input()//true = force open whole category and apply color\r\n public set active(active: boolean) {\r\n this._active = active;\r\n this.setActive.emit(active);\r\n }\r\n\r\n private _active: boolean;\r\n public get active() {\r\n return this._active;\r\n }\r\n\r\n @Output()\r\n public setActive = new EventEmitter();\r\n}","import { Component, Input } from '@angular/core';\r\n\r\n/**\r\n * Wizard\r\n */\r\n@Component({\r\n selector: 'involve-wizard',\r\n templateUrl: 'wizard.component.html',\r\n host: {\r\n class: 'h-full'\r\n }\r\n})\r\nexport class InvolveWizardComponent {}","
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    ","/* NgRx */\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n/* Models */\r\nimport * as fromUserUI from \"@rfv/modules/dashboard/modules/user-admin/store/user-ui-store\";\r\nimport { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\n\r\nexport function copyUserPermissionsModel(ToUser: User): fromRoot.Modal.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.NoButtons,\r\n contentType: fromRoot.Modal.ModalContentType.CopyUserPermissions,\r\n title: 'Select a user to copy from',\r\n data: ToUser,\r\n primaryText: 'Confirm',\r\n primaryAction: null,\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n\r\nexport function confirmCopyModel(fromUser: User, toUser: User): fromRoot.Modal.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: '',\r\n data: '\"' + toUser.FirstName + ' ' + toUser.LastName + '\" will inherit permissions from \"' + fromUser.FirstName + ' ' + fromUser.LastName + '\"',\r\n //data: 'Copy permissions from \"' + fromUser.FirstName + ' ' + fromUser.LastName + '\" to \"' + toUser.FirstName + ' ' + toUser.LastName + '\"',\r\n primaryText: 'Confirm',\r\n primaryAction: fromUserUI.CopyUserPermisions(fromUser.UserId, toUser.UserId),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n","import { JobTitleActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { JobTitle } from '@rfv/modules/dashboard/modules/user-admin/store/models/job-title';\r\n\r\n/* NgRx */\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nexport function replaceJobTitleModel(jobTitles: JobTitle): fromRoot.Modal.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.NoButtons,\r\n contentType: fromRoot.Modal.ModalContentType.ReplaceJobTitle,\r\n title: 'Replace User Job Title',\r\n data: jobTitles,\r\n primaryText: 'Confirm',\r\n primaryAction: null,\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n\r\nexport function confirmReplaceModel(newJobTitle: JobTitle, oldJobTitle: JobTitle, numberOfUsers: number): fromRoot.Modal.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Replace User Job Title',\r\n data: `${numberOfUsers} Users with the job title ${oldJobTitle.Name} replace them with ${newJobTitle.Name}?`,\r\n primaryText: 'Confirm',\r\n primaryAction: JobTitleActions.Replace(newJobTitle.Id, oldJobTitle.Id),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n","/* Modules */\r\nimport { SharedModule } from \"@rfv/modules/shared/shared.module\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n/* Components */\r\nimport { ModalComponent } from \"./components/modal/modal.component\";\r\nimport { UnitAlarmsModalContentComponent } from \"@rfv/modules/modal/components/unit-alarms-modal-content/unit-alarms-modal-content.component\";\r\nimport { ReportScheduleModalComponent } from \"./components/report-schedule-modal/report-schedule-modal.component\";\r\nimport { EventsDiagnosticsModalContentComponent } from \"./components/events-diagnostics-modal-content/events-diagnostics-modal-content.component\";\r\nimport { DeviceSearchModalContentComponent } from \"./components/device-search-modal-content/device-search-modal-content.component\";\r\nimport { CopyUserPermissionsModalComponent } from \"./components/copy-user-permissions/copy-user-permissions.component\";\r\nimport { ReplaceJobtitleModalComponent } from \"./components/replace-job-title/replace-job-title.component\";\r\nimport { UserAccessUnitModalComponent } from \"./components/user-access-unit-model/user-access-unit-modal.component\";\r\nimport { UserRecipientsModalComponent } from \"./components/user-recipients-modal/user-recipients-modal.component\";\r\nimport { ThresholdEditorPreviewModalComponent } from \"./components/threshold-editor-preview-modal/threshold-editor-preview-modal.component\";\r\nimport { AlarmPreviewItemComponent } from \"./components/threshold-editor-preview-modal/alarm-preview-item/alarm-preview-item.component\";\r\nimport { EventCodePreviewModalComponent } from './components/event-code-preview-modal/event-code-preview-modal.component';\r\nimport { DatapointOccurrenceEditorModalComponent } from './components/datapoint-occurrence-editor-modal/datapoint-occurrence-editor-modal.component';\r\nimport { DatapointOccurrencePreviewItemComponent } from './components/datapoint-occurrence-editor-modal/datapoint-occurrence-preview-item/datapoint-occurrence-preview-item.component';\r\nimport { DataPointEditorModalComponent } from './components/data-point-editor-modal/data-point-editor-modal.component';\r\nimport { AssessmentRecModalComponent } from './components/assessment-recommendation/assessment-recommendation.component';\r\nimport { AssessmentImportModalComponent } from './components/assessment-import/assessment-import.component';\r\nimport { AssociateStreamingConfigModalComponent } from './components/associate-streaming-config-modal/associate-streaming-config-modal.component';\r\nimport { ViewVimsAssetsModalComponent } from './components/view-vims-assets-modal/view-vims-assets-modal.component';\r\nimport { CreateVimsModalComponent } from './components/create-vims-modal/create-vims-modal.component';\r\nimport { CreateDealerVimsModalComponent } from \"./components/create-dealer-vims-modal/create-dealer-vims-modal.component\";\r\nimport { RemoveDealerVimsModalComponent } from \"./components/remove-dealer-vims-modal/remove-dealer-vims-modal.component\";\r\nimport { OnboardingEventLogComponent } from \"./components/onboarding-event-log/onboarding-event-log.component\";\r\nimport { UserLogModalComponent } from './components/user-log/user-log.component';\r\nimport { DeleteSuppressingAlarmModalComponent } from \"./components/delete-suppressing-alarm-modal/delete-suppressing-alarm-modal.component\";\r\nimport { DeleteSectionModalComponent } from \"./components/delete-section-modal/delete-section-modal.component\";\r\nimport { CopyDerivedDatapointModalComponent } from \"./components/copy-derived-datapoint/copy-derived-datapoint.component\";\r\nimport { UnsubscribeAlertScheduleModalComponent } from \"./components/unsubscribe-alert-schedule/unsubscribe-alert-schedule.component\";\r\nimport { MarineAssetRuntimeEventModifyModalContentComponent } from '@rfv/modules/modal/components/marine-asset-runtime-modify-modal/marine-asset-runtime-modify-modal-content.component';\r\nimport { UserNotificationRecipientListModule } from \"../dashboard/modules/user-profile/components/user-notification-recipient-list/user-notification-recipient-list.module\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n UserNotificationRecipientListModule,\r\n ],\r\n declarations: [\r\n ModalComponent,\r\n UnitAlarmsModalContentComponent,\r\n ReportScheduleModalComponent,\r\n EventsDiagnosticsModalContentComponent,\r\n DeviceSearchModalContentComponent,\r\n CopyUserPermissionsModalComponent,\r\n ReplaceJobtitleModalComponent,\r\n UserAccessUnitModalComponent,\r\n UserRecipientsModalComponent,\r\n ThresholdEditorPreviewModalComponent,\r\n AlarmPreviewItemComponent,\r\n EventCodePreviewModalComponent,\r\n DatapointOccurrenceEditorModalComponent,\r\n DatapointOccurrencePreviewItemComponent,\r\n DataPointEditorModalComponent,\r\n AssessmentRecModalComponent,\r\n AssessmentImportModalComponent,\r\n AssociateStreamingConfigModalComponent,\r\n ViewVimsAssetsModalComponent,\r\n CreateVimsModalComponent,\r\n CreateDealerVimsModalComponent,\r\n RemoveDealerVimsModalComponent,\r\n OnboardingEventLogComponent,\r\n UserLogModalComponent,\r\n DeleteSuppressingAlarmModalComponent,\r\n DeleteSectionModalComponent,\r\n CopyDerivedDatapointModalComponent,\r\n UnsubscribeAlertScheduleModalComponent,\r\n MarineAssetRuntimeEventModifyModalContentComponent,\r\n ],\r\n exports: [ModalComponent],\r\n})\r\nexport class ModalModule { }\r\n","import { Action } from \"@ngrx/store\";\r\n\r\n/* Modal Types */\r\nexport enum ModalType {\r\n Ok = \"Ok\",\r\n Cancel = \"Cancel\",\r\n OkCancel = \"OkCancel\",\r\n YesNoCancel = \"YesNoCancel\",\r\n}\r\n\r\n// export type ModalTypeUnion = ModalType.Ok | ModalType.Cancel | ModalType.OkCancel | ModalType.YesNoCancel;\r\n\r\n/* Modal Content Types*/\r\nexport enum ModalContentType {\r\n Text = \"Text\",\r\n AlarmUpdate = \"AlarmUpdate\",\r\n ReportScheduleTimeUpdate = \"ReportScheduleUpdate\",\r\n ReportScheduleDelete = \"ReportScheduleDelete\",\r\n LegendEditor = \"LegendEditor\",\r\n TroubleShootingLinks = \"TroubleShootingLinks\",\r\n}\r\n\r\nexport interface ModalOptions {\r\n customClass?: string;\r\n modalType: ModalType;\r\n contentType: ModalContentType;\r\n isOpen?: boolean;\r\n title: string;\r\n data: any;\r\n primaryText?: string;\r\n primaryAction?: Action;\r\n secondaryText?: string;\r\n secondaryAction?: Action;\r\n tertiaryText?: string;\r\n tertiaryAction?: Action;\r\n}\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ReportGroup } from '../models/report-group.model';\r\nimport { Report } from '../models/report.model';\r\nimport { ReportElement } from '../models/report-element.model';\r\nimport { CreateScheduleReportRequest } from '../models/create-schedule-report-request';\r\nimport { CreateDemandReportRequest } from '../models/create-demand-report-request';\r\n\r\nexport const GenerateReport = createAction('[Reports] Generate Report', (reportRequest: CreateDemandReportRequest, callback?: Function) => ({ reportRequest, callback }));\r\nexport const GenerateScheduleReport = createAction('[Reports] Generate Schedule Report', (scheduledReportRequest: CreateScheduleReportRequest) => ({ scheduledReportRequest }));\r\nexport const GenerateReportFail = createAction('[Reports] Generate Report Failure', (error: HttpErrorResponse | string) => ({ error }));\r\nexport const GenerateReportSuccess = createAction('[Reports] Generate Report Success', (callback?: Function) => ({ callback }));\r\n\r\nexport const RetryReportRequest = createAction('[Reports] Re-Generate Report', (pendingReportId: number) => ({ pendingReportId }));\r\nexport const RetryReportRequestFail = createAction('[Reports] Re-Generate Report Failure', (error: HttpErrorResponse) => ({ error }));\r\nexport const RetryReportRequestSuccess = createAction('[Reports] Re-Generate Report Success');\r\n\r\nexport const LoadReportGroups = createAction('[Reports] Load Report Groups');\r\nexport const LoadReportGroupsFail = createAction('[Reports] Load Report Groups Failure', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadReportGroupsSuccess = createAction('[Reports] Load Report Groups Success', (reportGroup: ReportGroup[]) => ({ reportGroup }));\r\n\r\nexport const LoadReportElements = createAction('[Reports] Load Report Elements', (reportGroups: ReportGroup[]) => ({ reportGroups }));\r\nexport const LoadReportElementsFail = createAction('[Reports] Load Report Elements Failure', (error: string) => ({ error }));\r\nexport const LoadReportElementsSuccess = createAction('[Reports] Load Report Elements Success', (reportElements: ReportElement[]) => ({ reportElements }));\r\n\r\nexport const SetReportType = createAction('[Reports] Set Report Type', (report: Report) => ({ report }));\r\nexport const SetScheduledRunNowReportType = createAction('[Reports] Set Report Type for Instant request of Scheduled report', (report: Report) => ({ report }));\r\nexport const ClearReportTypes = createAction('[Reports] Clear Report Types');\r\n\r\nexport const SetSelectedReportCustomerSettingId = createAction('[Reports] Set Selected Report Customer Setting Id', (reportCustomerSettingId: number) => ({ reportCustomerSettingId }));\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { TimeZones } from '../models/time-zones';\r\n\r\nexport const Load = createAction('[Reports] Load Time Zones');\r\nexport const LoadFail = createAction('[Reports] Load Time Zones Failure', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[Reports] Load Time Zones Success', (timeZones: TimeZones[]) => ({ timeZones }));\r\n\r\nexport const SelectTimeZone = createAction('[Reports] Select Time Zone', (timeZone: TimeZones) => ({ timeZone }));\r\n\r\nexport const ClearTimeZones = createAction('[Reports] Clear Time Zones');\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { DateRanges } from '../models/date-ranges';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { DeliveryTime } from '../models/delivery-time.model';\r\n\r\nexport const Load = createAction('[Reports] Load Date Ranges');\r\nexport const LoadFail = createAction('[Reports] Load Date Ranges Failure', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[Reports] Load Date Ranges Success', (dateRanges: DateRanges[]) => ({ dateRanges }));\r\n\r\nexport const AddSchedule = createAction('[Reports] Add Schedule By User', (frequencyId: number) => ({ frequencyId }));\r\nexport const SetTimeRange = createAction('[Reports] Set Time Range', (timeRange: DateRanges) => ({ timeRange }));\r\nexport const SetStart = createAction('[Reports] Set Start', (startDate: Date) => ({ startDate }));\r\nexport const SetEnd = createAction('[Reports] Set End', (endDate: Date) => ({ endDate }));\r\nexport const SetNoon = createAction('[Reports] Set Noon', (dateRange: DateRanges) => ({ dateRange }));\r\nexport const ClearDateRanges = createAction('[Reports] Clear Date Ranges');\r\nexport const SetScheduleSetting = createAction('[Reports] Set Schedule Setting', (scheduleSettingId: number) => ({ scheduleSettingId }));\r\n\r\nexport const SetDeliveryTime = createAction('[Reports] Set Delivery Time', (deliveryTimes: DeliveryTime[]) => ({ deliveryTimes })); // TODO: Remove this\r\n\r\n// Custom delievery Times for scheduling a report \r\nexport const AddDeliveryTime = createAction('[Reports] Add Delivery Time', (deliveryTime: DeliveryTime) => ({ deliveryTime }));\r\nexport const UpdateDeliveryTime = createAction('[Reports] Update Delivery Time', (idx: number, deliveryTime: DeliveryTime) => ({ idx, deliveryTime }));\r\nexport const RemoveDeliveryTime = createAction('[Reports] Remove Delivery Time', (deliveryTimeIdx: number) => ({ deliveryTimeIdx }));\r\n\r\nexport const ClearDeliveryTimes = createAction('[Reports] Clear Delivery Times');\r\n","import { createAction } from '@ngrx/store';\r\nimport { CreatedReport } from '@rfv/modules/report/models/created-report';\r\n\r\nexport const Load = createAction('[ReportHistory] Load Report History');\r\nexport const LoadFail = createAction('[ReportHistory] Load Report History Failure', (error: string) => ({ error }));\r\nexport const LoadSuccess = createAction('[ReportHistory] Load Report History Success', (createdReports: CreatedReport[]) => ({ createdReports }));\r\n\r\nexport const SetSelectedDateRange = createAction('[ReportHistory] Set Selected Date Range', (dateRangeId: number) => ({ dateRangeId }));\r\nexport const AddCreateReportRequest = createAction('[ReportHistory] Add Create Report Request', (createReportRequest: CreatedReport) => ({ createReportRequest }));\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { FileType } from '../models/file-type.model';\r\n\r\nexport const Load = createAction('[Reports] Load File Types', (reportId: number) => ({ reportId }));\r\nexport const LoadFail = createAction('[Reports] Load File Types Failure', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[Reports] Load File Types Success', (fileTypes: FileType[]) => ({ fileTypes }));\r\n\r\nexport const SetFileType = createAction('[Reports] Set File Types', (fileType: FileType) => ({ fileType }));\r\nexport const SaveNote = createAction('[Reports] Save Note', (note: string) => ({ note }));\r\nexport const ClearFileTypes = createAction('[Reports] Clear File Types');\r\n","import { createAction } from '@ngrx/store';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules'; \r\nimport { ScheduleUpdate } from '../models/schedule-update.model';\r\nimport { ReportScheduleDetails } from '../models/report-schedule-details.model';\r\nimport { ReportSetting } from '../models/report-setting.model';\r\nimport { RunScheduleReportRequest } from '../models/run-schedule-report-request';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const Load = createAction('[ReportSchedules] LoadAllScheduledReports', (sitemapGroupId: number) => ({ sitemapGroupId }));\r\nexport const LoadFail = createAction('[ReportSchedules] LoadAllScheduledReports ReportSchedules Failure', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[ReportSchedules] LoadAllScheduledReports ReportSchedules Success', (schedules: ReportSchedules[]) => ({ schedules }));\r\n\r\nexport const SetSelectedSchedulesUsers = createAction('[ReportSchedules] Set Selected Users for Schedule', (tabId: number) => ({ tabId }));\r\nexport const SetSelectedScheduleId = createAction('[ReportSchedules] Set Selected Report Schedule Id', (reportCustomerSettingRecipientId: number) => ({ reportCustomerSettingRecipientId }));\r\n\r\nexport const SetSelectedRunHour = createAction('[ReportSchedules] Set Default Schedule Hour', (hour: number) => ({ hour }));\r\nexport const SetSelectedRunMinute = createAction('[ReportSchedules] Set Default Schedule Minute', (minute: number) => ({ minute }));\r\n\r\nexport const DeleteScheduleTimeReport = createAction('[Reports] Delete Schedule Time of Report', (id: number, runHour: number, runMinute: number) => ({ id, runHour, runMinute }));\r\nexport const DeleteScheduleTimeReportFail = createAction('[Reports] Delete Schedule Time of Report Failure', (error: ApiError) => ({ error }));\r\nexport const DeleteScheduleTimeReportSuccess = createAction('[Reports] Delete Schedule Time of Report Success');\r\n\r\nexport const DeleteScheduleReport = createAction('[Reports] Delete Schedule Report', (id: number) => ({ id }));\r\nexport const DeleteScheduleReportFail = createAction('[Reports] Delete Schedule Report Failure', (error: ApiError | string) => ({ error }));\r\nexport const DeleteScheduleReportSuccess = createAction('[Reports] Delete Schedule Report Success', (reportCustomerSettingRecipientId: number) => ({ reportCustomerSettingRecipientId }));\r\n\r\nexport const UpdateAllScheduleDeliveryTimes = createAction('[ReportSchedules] Update All Report Schedule Delivery Times', (scheduleId: number, data: ScheduleUpdate) => ({ scheduleId, data }));\r\nexport const UpdateAllScheduleDeliveryTimesFailure = createAction('[ReportSchedules] Update All Report Schedule Delivery Times Failure', (error: string) => ({ error }));\r\nexport const UpdateAllScheduleDeliveryTimesSuccess = createAction('[ReportSchedules] Update All Report Schedule Delivery Times Success', (schedule: ReportSchedules) => ({ schedule }));\r\n\r\nexport const UpdateScheduleDeliveryTime = createAction('[ReportSchedules] Update Report Schedule Delivery Time', (scheduleId: number, date: ScheduleUpdate) => ({ scheduleId, date }));\r\nexport const UpdateScheduleDeliveryTimeFailure = createAction('[ReportSchedules] Update Report Schedule Delivery Time Failure', (error: string) => ({ error }));\r\nexport const UpdateScheduleDeliveryTimeSuccess = createAction('[ReportSchedules] Update Report Schedule Delivery Time Success');\r\n\r\nexport const LoadScheduledReportDetails = createAction('[ReportSchedules] Load Selected Schedule Details', (runHour: number, runMinute: number, reportSettingId: number, reportCustomerSettingRecipientId: number) => ({ runHour, runMinute, reportSettingId, reportCustomerSettingRecipientId }));\r\nexport const LoadScheduledReportDetailsFailure = createAction('[ReportSchedules] Load Selected Schedule Details Failure', (error: ApiError) => ({ error }));\r\nexport const LoadScheduledReportDetailsSuccess = createAction('[ReportSchedules] Load Selected Schedule Details Success', (reportScheduleDetails: ReportScheduleDetails) => ({ reportScheduleDetails }));\r\n\r\nexport const LoadScheduledReportSettingId = createAction('[ReportSchedules] Load Selected Schedule Setting Id', (runHour: number, runMinute: number) => ({ runHour, runMinute }));\r\nexport const LoadScheduledReportSettingIdFailure = createAction('[ReportSchedules] Load Selected Schedule Setting Id Failure', (error: ApiError) => ({ error }));\r\nexport const LoadScheduledReportSettingIdSuccess = createAction('[ReportSchedules] Load Selected Schedule Setting Id Success', (reportSettings: ReportSetting[]) => ({ reportSettings }));\r\n\r\nexport const AddScheduledReport = createAction('[ReportSchedules] Add Scheduled Report', (reportSchedule: ReportSchedules[]) => ({ reportSchedule }));\r\n\r\nexport const LoadUserScheduledReports = createAction('[ReportSchedules] Load User Scheduled Reports');\r\n\r\nexport const RunScheduledReport = createAction('[ReportSchedules] Run Scheduled Report', (runReportRequest: RunScheduleReportRequest) => ({ runReportRequest }));\r\nexport const RunScheduledReportFailure = createAction('[ReportSchedules] Run Scheduled Report Failure');\r\nexport const RunScheduledReportSuccess = createAction('[ReportSchedules] Run Scheduled Report Success');\r\n\r\nexport const Clear = createAction('[ReportSchedules] Drawer Closed - Clear schedule Data');\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\n\r\nexport const Load = createAction('[Reports] Load Report Filters');\r\nexport const LoadFail = createAction('[Reports] Load Report Filters Failure', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[Reports] Load Report Filters Success', (savedFilters: SavedGlobalFilter[]) => ({ savedFilters }));\r\n\r\nexport const AddFilter = createAction('[Reports] Add Filter', (filter: SavedGlobalFilter) => ({ filter }));\r\nexport const RemoveFilter = createAction('[Reports] Remove Filter');\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\nexport const SetRecipients = createAction('[Reports] Set Recipients', (recipientIds: number[]) => ({ recipientIds }));\r\nexport const AddRecipient = createAction('[Reports] Add Recipient', (recipientId: number) => ({ recipientId }));\r\nexport const RemoveRecipient = createAction('[Reports] Remove Recipient', (recipientId: number) => ({ recipientId }));\r\nexport const RemoveAllRecipients = createAction('[Reports] Remove All Recipients');\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\nexport const SetReport = createAction('[Reports] Set Instant/Schedule Report', (reportKind: string) => ({ reportKind }));\r\nexport const ClearReportKind = createAction('[Reports] Clear Report Kind');\r\n","import { TimeZonesActionTypes } from '../actions/index';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { TimeZones } from '../models/time-zones';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface TimeZoneState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n data: TimeZones[];\r\n selectedTimeZone: TimeZones;\r\n error: HttpErrorResponse | null;\r\n}\r\nconst initialState: TimeZoneState = {\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n selectedTimeZone: null,\r\n error: null\r\n};\r\n\r\nconst timeZoneReducer = createReducer(\r\n initialState,\r\n\r\n on(TimeZonesActionTypes.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(TimeZonesActionTypes.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(TimeZonesActionTypes.LoadSuccess, (state, { timeZones }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: timeZones,\r\n error: null\r\n })),\r\n\r\n on(TimeZonesActionTypes.SelectTimeZone, (state, { timeZone }) => ({\r\n ...state,\r\n selectedTimeZone: timeZone\r\n })),\r\n\r\n on(TimeZonesActionTypes.ClearTimeZones, (state) => ({\r\n ...state,\r\n selectedTimeZone: null\r\n }))\r\n\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action): TimeZoneState {\r\n return timeZoneReducer(state, action);\r\n}\r\n\r\nexport const getLoading = (state: TimeZoneState) => state.isLoading;\r\nexport const getLoaded = (state: TimeZoneState) => state.isLoaded;\r\nexport const getData = (state: TimeZoneState) => state.data;\r\nexport const getError = (state: TimeZoneState) => state.error;\r\n","import { DateRangesActionTypes } from '../actions/index';\r\nimport { DateRanges } from '../models/date-ranges';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { DeliveryTime } from '../models/delivery-time.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface DateRangesState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n data: DateRanges[];\r\n selectedFrequency: number;\r\n setTimeRange: DateRanges;\r\n setStart: Date;\r\n setEnd: Date;\r\n DeliveryTimes: DeliveryTime[];\r\n setNoon: DateRanges;\r\n selectedSettingId: number;\r\n error: HttpErrorResponse | null;\r\n}\r\nconst initialState: DateRangesState = {\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n selectedFrequency: null,\r\n setTimeRange: null,\r\n setStart: null,\r\n setEnd: null,\r\n DeliveryTimes: [],\r\n setNoon: null,\r\n selectedSettingId: null,\r\n error: null\r\n};\r\n\r\nconst dateRangeReducer = createReducer(\r\n initialState,\r\n\r\n on(DateRangesActionTypes.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(DateRangesActionTypes.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(DateRangesActionTypes.LoadSuccess, (state, { dateRanges }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: dateRanges,\r\n error: null\r\n })),\r\n\r\n on(DateRangesActionTypes.AddSchedule, (state, { frequencyId }) => ({\r\n ...state,\r\n selectedFrequency: frequencyId\r\n })),\r\n\r\n on(DateRangesActionTypes.SetTimeRange, (state, { timeRange }) => ({\r\n ...state,\r\n setTimeRange: timeRange\r\n })),\r\n\r\n on(DateRangesActionTypes.SetStart, (state, { startDate }) => ({\r\n ...state,\r\n setStart: startDate\r\n })),\r\n\r\n on(DateRangesActionTypes.SetEnd, (state, { endDate }) => ({\r\n ...state,\r\n setEnd: endDate\r\n })),\r\n\r\n on(DateRangesActionTypes.SetNoon, (state, { dateRange }) => ({\r\n ...state,\r\n setNoon: dateRange\r\n })),\r\n\r\n on(DateRangesActionTypes.ClearDateRanges, (state) => ({\r\n ...state,\r\n selectedFrequency: null,\r\n setTimeRange: null,\r\n setStart: null,\r\n setEnd: null,\r\n setNoon: null,\r\n selectedSettingId: null,\r\n DeliveryTimes: []\r\n })),\r\n\r\n on(DateRangesActionTypes.SetScheduleSetting, (state, { scheduleSettingId }) => ({\r\n ...state,\r\n setScheduleSetting: scheduleSettingId\r\n })),\r\n\r\n on(DateRangesActionTypes.SetDeliveryTime, (state, { deliveryTimes }) => ({\r\n ...state,\r\n DeliveryTimes: deliveryTimes\r\n })),\r\n\r\n on(DateRangesActionTypes.AddDeliveryTime, (state, { deliveryTime }) => ({\r\n ...state,\r\n DeliveryTimes: [...state.DeliveryTimes, deliveryTime]\r\n })),\r\n\r\n on(DateRangesActionTypes.UpdateDeliveryTime, (state, { idx, deliveryTime }) => ({\r\n ...state,\r\n DeliveryTimes: state.DeliveryTimes.map((item, index) => {\r\n return index !== idx ? item : { ...deliveryTime }\r\n })\r\n })),\r\n\r\n on(DateRangesActionTypes.RemoveDeliveryTime, (state, { deliveryTimeIdx }) => ({\r\n ...state,\r\n DeliveryTimes: state.DeliveryTimes.filter((item, index) => index !== deliveryTimeIdx)\r\n })),\r\n\r\n on(DateRangesActionTypes.ClearDeliveryTimes, (state) => ({\r\n ...state,\r\n DeliveryTimes: []\r\n }))\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action): DateRangesState {\r\n return dateRangeReducer(state, action);\r\n}\r\nexport const getLoading = (state: DateRangesState) => state.isLoading;\r\nexport const getLoaded = (state: DateRangesState) => state.isLoaded;\r\nexport const getReportsData = (state: DateRangesState) => state.data;\r\nexport const getError = (state: DateRangesState) => state.error;\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { ReportHistoryActions } from '../actions';\r\nimport { CreatedReport } from '@rfv/modules/report/models/created-report';\r\n\r\nexport interface State {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n data: CreatedReport[];\r\n error: string;\r\n selectedDateRange: number;\r\n}\r\n\r\nconst initialState: State = {\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n error: '',\r\n selectedDateRange: 0\r\n};\r\n\r\nconst reportHistoryReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportHistoryActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportHistoryActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(ReportHistoryActions.LoadSuccess, (state, { createdReports }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: createdReports,\r\n error: null\r\n })),\r\n\r\n on(ReportHistoryActions.SetSelectedDateRange, (state, { dateRangeId }) => ({\r\n ...state,\r\n selectedDateRange: dateRangeId\r\n })),\r\n\r\n on(ReportHistoryActions.AddCreateReportRequest, (state, { createReportRequest }) => {\r\n let pendingReportIdx = state.data.findIndex(p => p.PendingReportId === createReportRequest.PendingReportId);\r\n return pendingReportIdx >= 0 ? {...state} : {...state, data: [createReportRequest, ...state.data]}\r\n })\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return reportHistoryReducer(state, action);\r\n}\r\n\r\n\r\nexport const getLoading = (state: State) => state.isLoading;\r\n\r\nexport const getLoaded = (state: State) => state.isLoaded;\r\n\r\nexport const getHistoryData = (state: State) => state.data;\r\n\r\nexport const getError = (state: State) => state.error;\r\n","import { ReportSchedulesActions } from '../actions';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\nimport { HttpErrorResponse } from '../../../../../node_modules/@angular/common/http';\r\nimport { ReportSetting } from '../models/report-setting.model';\r\nimport { ReportScheduleDetails } from '../models/report-schedule-details.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n allData: ReportSchedules[];\r\n reportSettingId: ReportSetting[];\r\n reportScheduleDetails: ReportScheduleDetails;\r\n error: ApiError;\r\n selectedUsersTab: number;\r\n selectedReportScheduleId: number;\r\n}\r\n\r\nconst initialState: State = {\r\n isLoading: false,\r\n isLoaded: false,\r\n allData: [],\r\n reportSettingId: null,\r\n reportScheduleDetails: null,\r\n error: null,\r\n selectedUsersTab: 0,\r\n selectedReportScheduleId: null,\r\n};\r\n\r\nconst reportSchedulesReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportSchedulesActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadSuccess, (state, { schedules }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n allData: schedules,\r\n error: null\r\n })),\r\n\r\n on(ReportSchedulesActions.SetSelectedScheduleId, (state, { reportCustomerSettingRecipientId }) => ({\r\n ...state,\r\n selectedReportScheduleId: reportCustomerSettingRecipientId\r\n })),\r\n\r\n on(ReportSchedulesActions.SetSelectedSchedulesUsers, (state, { tabId }) => ({\r\n ...state,\r\n selectedUsersTab: tabId\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadScheduledReportDetails, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadScheduledReportDetailsFailure, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadScheduledReportDetailsSuccess, (state, { reportScheduleDetails }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n reportScheduleDetails,\r\n error: null\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadScheduledReportSettingId, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadScheduledReportSettingIdFailure, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadScheduledReportSettingIdSuccess, (state, { reportSettings }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n reportSettingId: reportSettings,\r\n error: null\r\n })),\r\n\r\n on(ReportSchedulesActions.Clear, (state) => ({\r\n ...state,\r\n reportSettingId: null,\r\n reportScheduleDetails: null\r\n })),\r\n\r\n on(ReportSchedulesActions.DeleteScheduleReportSuccess, (state, { reportCustomerSettingRecipientId }) => ({\r\n ...state,\r\n allData: state.allData.filter(item => item.ReportCustomerSettingRecipientId !== reportCustomerSettingRecipientId)\r\n })),\r\n\r\n on(ReportSchedulesActions.AddScheduledReport, (state, { reportSchedule }) => ({\r\n ...state,\r\n allData: [...state.allData, ...reportSchedule]\r\n })),\r\n\r\n on(ReportSchedulesActions.LoadUserScheduledReports, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportSchedulesActions.UpdateAllScheduleDeliveryTimesSuccess, (state, { schedule }) => ({\r\n ...state,\r\n allData: state.allData.map(data => {\r\n return data.ReportCustomerSettingRecipientId == schedule.ReportCustomerSettingRecipientId ? schedule : data;\r\n })\r\n }))\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return reportSchedulesReducer(state, action);\r\n}\r\n\r\n\r\nexport const getLoading = (state: State) => state.isLoading;\r\n\r\nexport const getLoaded = (state: State) => state.isLoaded;\r\n\r\nexport const getAllData = (state: State) => state.allData;\r\n\r\nexport const getError = (state: State) => state.error;\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\nimport { ReportFilterActionTypes } from '../actions';\r\n\r\nexport interface State {\r\n filter: SavedGlobalFilter | null;\r\n}\r\n\r\nconst initialState: State = {\r\n filter: null\r\n};\r\n\r\nconst reportFilterReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportFilterActionTypes.AddFilter, (state, { filter }) => ({\r\n ...state,\r\n filter: filter\r\n })),\r\n\r\n on(ReportFilterActionTypes.RemoveFilter, (state) => ({\r\n ...state,\r\n filter: null\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return reportFilterReducer(state, action);\r\n}\r\n","/* NgRx */\r\nimport { createEntityAdapter, EntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { ReportRecipientActionTypes } from '@rfv/modules/report/actions';\r\n\r\nexport interface State extends EntityState { }\r\n\r\nexport const userAdapter: EntityAdapter = createEntityAdapter({\r\n selectId: userId => userId,\r\n sortComparer: false,\r\n});\r\n\r\nconst initialState: State = userAdapter.getInitialState();\r\n\r\nconst recipientsReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportRecipientActionTypes.SetRecipients, (state, { recipientIds }) => userAdapter.setAll(recipientIds, {\r\n ...state\r\n })),\r\n\r\n on(ReportRecipientActionTypes.AddRecipient, (state, { recipientId }) => userAdapter.addOne(recipientId, {\r\n ...state\r\n })),\r\n\r\n on(ReportRecipientActionTypes.RemoveRecipient, (state, { recipientId }) => userAdapter.removeOne(recipientId, {\r\n ...state\r\n })),\r\n\r\n on(ReportRecipientActionTypes.RemoveAllRecipients, (state) => userAdapter.removeAll({\r\n ...state\r\n }))\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return recipientsReducer(state, action);\r\n}\r\n\r\nexport const { selectAll } = userAdapter.getSelectors();","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { ReportActionKind } from '../actions';\r\n\r\nexport interface State {\r\n kind: string;\r\n}\r\n\r\nconst initialState: State = {\r\n kind: '',\r\n};\r\n\r\nconst reportKindReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportActionKind.SetReport, (state, { reportKind }) => ({\r\n ...state,\r\n kind: reportKind\r\n })),\r\n\r\n on(ReportActionKind.ClearReportKind, () => initialState)\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return reportKindReducer(state, action);\r\n}\r\n\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { ReportTypesActions } from '../actions';\r\n\r\nimport { ReportElement } from '../models/report-element.model';\r\n\r\nexport interface State {\r\n reportElements: ReportElement[];\r\n}\r\n\r\nconst initialState: State = {\r\n reportElements: []\r\n};\r\n\r\nconst reportElementReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportTypesActions.LoadReportElementsSuccess, (state, { reportElements } ) => ({\r\n ...state,\r\n reportElements: reportElements\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action){\r\n return reportElementReducer(state, action);\r\n}\r\n\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { ReportGroup } from '../models/report-group.model';\r\nimport { Report } from '../models/report.model';\r\n\r\nimport { ReportTypesActions } from '../actions';\r\n\r\nexport interface State {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n data: ReportGroup[];\r\n selectedReportType: Report;\r\n selectedScheduledReportType: Report;\r\n selectedReportCustomerSettingId: number;\r\n error: HttpErrorResponse | null;\r\n}\r\n\r\nconst initialState: State = {\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n selectedReportType: null,\r\n selectedScheduledReportType: null,\r\n selectedReportCustomerSettingId: null,\r\n error: null\r\n};\r\n\r\nconst reportTypesReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportTypesActions.LoadReportGroups, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportTypesActions.LoadReportGroupsFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(ReportTypesActions.LoadReportGroupsSuccess, (state, { reportGroup }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: reportGroup,\r\n error: null\r\n })),\r\n\r\n on(ReportTypesActions.SetReportType, (state, { report }) => ({\r\n ...state,\r\n selectedReportType: report\r\n })),\r\n\r\n on(ReportTypesActions.SetScheduledRunNowReportType, (state, { report }) => ({\r\n ...state,\r\n selectedScheduledReportType: report\r\n })),\r\n\r\n on(ReportTypesActions.SetSelectedReportCustomerSettingId, (state, { reportCustomerSettingId }) => ({\r\n ...state,\r\n selectedReportCustomerSettingId: reportCustomerSettingId\r\n })),\r\n\r\n on(ReportTypesActions.ClearReportTypes, () => initialState)\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): State {\r\n return reportTypesReducer(state, action);\r\n}\r\n\r\nexport const getLoading = (state: State) => state.isLoading;\r\n\r\nexport const getLoaded = (state: State) => state.isLoaded;\r\n\r\nexport const getData = (state: State) => state.data;\r\n\r\nexport const getError = (state: State) => state.error;\r\n\r\n","import { ReportFileTypes } from '../actions/index';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { FileType } from '../models/file-type.model';\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nexport interface FileTypeState {\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n data: FileType[];\r\n selectedFileType: FileType;\r\n savedNote: string;\r\n error: HttpErrorResponse | null;\r\n}\r\nconst initialState: FileTypeState = {\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n selectedFileType: null,\r\n savedNote: '',\r\n error: null\r\n};\r\n\r\nconst fileTypesReducer = createReducer(\r\n initialState,\r\n\r\n on(ReportFileTypes.Load, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ReportFileTypes.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(ReportFileTypes.LoadSuccess, (state, { fileTypes }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: fileTypes,\r\n error: null\r\n })),\r\n\r\n on(ReportFileTypes.SetFileType, (state, { fileType }) => ({\r\n ...state,\r\n selectedFileType: fileType\r\n })),\r\n\r\n on(ReportFileTypes.SaveNote, (state, { note }) => ({\r\n ...state,\r\n savedNote: note\r\n })),\r\n\r\n on(ReportFileTypes.ClearFileTypes, (state) => ({\r\n ...state,\r\n selectedFileType: null,\r\n savedNote: ''\r\n }))\r\n)\r\n\r\nexport function reducer(state = initialState, action: Action): FileTypeState {\r\n return fileTypesReducer(state, action);\r\n}\r\n","import { ActionReducerMap, createFeatureSelector, createSelector, MemoizedSelector } from '@ngrx/store';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\n\r\nimport * as fromTimeZones from './time-zones.reducer';\r\nimport * as fromDateRange from './frequency.reducers';\r\nimport * as fromReportHistory from './report-history.reducer';\r\nimport * as fromReportSchedules from './report-schedules.reducer';\r\nimport * as fromReportFilter from './report-filter.reducer';\r\nimport * as fromReportRecipient from './recipients.reducer';\r\nimport * as fromReportKind from './report-kind.reducer';\r\nimport * as fromReportElements from './report-element.reducer';\r\nimport * as fromSitemapGroups from '@rfv/modules/core/store/sitemap-groups/selectors';\r\n\r\nimport { CreatedReport } from '@rfv/modules/report/models/created-report';\r\nimport * as fromReportTypes from './report-types.reducer';\r\nimport * as fromFileTypes from './file-types.reducer';\r\nimport { DateRangesState } from './frequency.reducers';\r\nimport { DateUtils } from '@rfv/modules/shared/utils';\r\n\r\nexport interface ReportTypesState {\r\n reportTypes: fromReportTypes.State;\r\n timeZones: fromTimeZones.TimeZoneState;\r\n dateRange: fromDateRange.DateRangesState;\r\n fileTypes: fromFileTypes.FileTypeState;\r\n reportHistory: fromReportHistory.State;\r\n reportSchedules: fromReportSchedules.State;\r\n reportFilter: fromReportFilter.State;\r\n reportRecipients: fromReportRecipient.State;\r\n reportKind: fromReportKind.State;\r\n reportHistoryTab: fromReportHistory.State;\r\n reportElement: fromReportElements.State;\r\n}\r\n\r\nexport interface State extends fromRoot.State {\r\n reports: ReportTypesState;\r\n}\r\n\r\nexport const reducers: ActionReducerMap = {\r\n reportTypes: fromReportTypes.reducer,\r\n timeZones: fromTimeZones.reducer,\r\n dateRange: fromDateRange.reducer,\r\n fileTypes: fromFileTypes.reducer,\r\n reportHistory: fromReportHistory.reducer,\r\n reportSchedules: fromReportSchedules.reducer,\r\n reportFilter: fromReportFilter.reducer,\r\n reportRecipients: fromReportRecipient.reducer,\r\n reportKind: fromReportKind.reducer,\r\n reportHistoryTab: fromReportHistory.reducer,\r\n reportElement: fromReportElements.reducer,\r\n};\r\n\r\n/* Selectors */\r\nexport const getReports = createFeatureSelector('reports');\r\n\r\n// Report Elements Data\r\nexport const getReportElements = createSelector(\r\n getReports,\r\n state => state.reportElement.reportElements\r\n);\r\n\r\n// Report Types data\r\nexport const getRequestReportsTypes = createSelector(\r\n getReports,\r\n state => state.reportTypes,\r\n);\r\n\r\nexport const getRequestReportsTypesLoading = createSelector(\r\n getReports,\r\n state => state.reportTypes.isLoading\r\n);\r\n\r\nexport const getRequestReportsTypesLoaded = createSelector(\r\n getReports,\r\n state => state.reportTypes.isLoaded\r\n);\r\n\r\nexport const getRequestReportsTypesData = createSelector(\r\n getRequestReportsTypes,\r\n fromReportTypes.getData\r\n);\r\n\r\nexport const getReportTypeNote = createSelector(\r\n getRequestReportsTypes,\r\n state => state.selectedReportType && state.selectedReportType.Notes\r\n);\r\n\r\nexport const getReportType = createSelector(\r\n getReports,\r\n state => state.reportTypes && state.reportTypes.selectedReportType\r\n);\r\n\r\nexport const getScheduledReportType = createSelector(\r\n getReports,\r\n state => state.reportTypes && state.reportTypes.selectedScheduledReportType\r\n);\r\n\r\nexport const getReportDateRangeSettings = createSelector(\r\n getReportType,\r\n state => state.ReportCustomerSettings\r\n);\r\n\r\n\r\nexport const getReportCustomerSettingId = createSelector(\r\n getReports,\r\n state => state.reportTypes.selectedReportCustomerSettingId\r\n);\r\n\r\nexport const getReportTypeName = createSelector(\r\n getReports,\r\n state => state.reportTypes && state.reportTypes.selectedReportType && state.reportTypes.selectedReportType.Name\r\n);\r\n\r\nexport const getReportTypeId = createSelector(\r\n getReportType,\r\n state => state && state.Id\r\n);\r\n\r\nexport const getScheduledReportTypeId = createSelector(\r\n getScheduledReportType,\r\n state => state && state.Id\r\n);\r\n\r\nexport const getScheduleReportTypeMaxDeliveryTimes = createSelector(\r\n getReportType,\r\n state => state && state.MaxSchedules\r\n);\r\n\r\n// Time zone data\r\nexport const getTimeZones = createSelector(\r\n getReports,\r\n state => state.timeZones\r\n);\r\n\r\nexport const selectedTimeZone = createSelector(\r\n getTimeZones,\r\n state => state.selectedTimeZone && state.selectedTimeZone.Description\r\n);\r\n\r\nexport const selectedTimeZoneId = createSelector(\r\n getTimeZones,\r\n state => state.selectedTimeZone && state.selectedTimeZone.Id\r\n);\r\n\r\nexport const getTimeZonesData = createSelector(\r\n getTimeZones,\r\n fromTimeZones.getData\r\n);\r\n\r\nexport const getTimeZonesDataWithExtendedFormat = createSelector(\r\n getTimeZonesData,\r\n state => state.map(tz => (\r\n { \r\n ...tz, \r\n ExtendedName: tz.Name + ' (UTC' + ((tz.HourOffset >= 0) \r\n ? ('+' + tz.HourOffset) \r\n : ('-' + tz.HourOffset)) + ':00)' }))\r\n)\r\n\r\nexport const getTimeZoneId = createSelector(\r\n getReports,\r\n state => state.timeZones.selectedTimeZone && state.timeZones.selectedTimeZone.Id\r\n);\r\n\r\nexport const getFileTypeId = createSelector(\r\n getReports,\r\n state => state.fileTypes && state.fileTypes.selectedFileType && state.fileTypes.selectedFileType.Id\r\n);\r\n\r\nexport const getTimeZonesIsLoaded = createSelector(\r\n getTimeZones,\r\n fromTimeZones.getLoaded\r\n);\r\n\r\n// Additional Notes\r\nexport const getAdditionalNotes = createSelector(\r\n getReports,\r\n state => state.fileTypes && state.fileTypes.savedNote\r\n);\r\n\r\n// Date ranges data\r\nexport const getDateRanges = createSelector(\r\n getReports,\r\n state => state.dateRange\r\n);\r\n\r\nexport const selectedDateRange = createSelector(\r\n getReportDateRangeSettings,\r\n getDateRanges,\r\n (settings, dateRanges: DateRangesState) => {\r\n if (settings && dateRanges && dateRanges.selectedSettingId) {\r\n return settings.find(setting => setting.DateRangeSettingId === dateRanges.selectedSettingId).DateRangeSettingDescription;\r\n }\r\n }\r\n);\r\n\r\nexport const getDateRangeId = createSelector(\r\n getDateRanges,\r\n state => state.setTimeRange && state.setTimeRange.Id\r\n);\r\n\r\nexport const selectedTimeRange = createSelector(\r\n getDateRanges,\r\n state => state.setTimeRange && state.setTimeRange.DateRange\r\n);\r\n\r\nexport const getDeliveryTimes = createSelector(\r\n getReports,\r\n state => state.dateRange.DeliveryTimes\r\n);\r\nexport const getReportScheduleSetting = createSelector(\r\n getDateRangeId,\r\n getDeliveryTimes,\r\n getFileTypeId,\r\n getAdditionalNotes,\r\n (DateRangeSettingId, DeliveryTimes, ExportTypeId, Notes) => ({ DateRangeSettingId, DeliveryTimes, ExportTypeId, Notes })\r\n);\r\n\r\nexport const getStartDate = createSelector(\r\n getReports,\r\n state => state.dateRange.setStart\r\n);\r\n\r\nexport const getEndDate = createSelector(\r\n getReports,\r\n state => state.dateRange && state.dateRange.setEnd\r\n);\r\n\r\nexport const getSelectedSettingId = createSelector(\r\n getReports,\r\n state => state.dateRange && state.dateRange.selectedSettingId\r\n);\r\n\r\nexport const getSelectedScheduleDetails = createSelector(\r\n getReports,\r\n state => state.reportSchedules && state.reportSchedules.reportScheduleDetails\r\n);\r\n\r\nexport const getSelectedScheduleSettingId = createSelector(\r\n getReports,\r\n state => state.reportSchedules && state.reportSchedules.reportSettingId\r\n);\r\n\r\nexport const getReportTime = createSelector(\r\n getStartDate,\r\n getEndDate,\r\n (StartDate, EndDate) => ({ StartDate, EndDate })\r\n);\r\n\r\nexport const getDateRangesData = createSelector(\r\n getDateRanges,\r\n state => state.data\r\n);\r\n\r\nexport const getReportFileTypes = createSelector(\r\n getReports,\r\n state => state.fileTypes\r\n);\r\n\r\nexport const getReportFileTypesData = createSelector(\r\n getReportFileTypes,\r\n state => state.data\r\n);\r\n\r\nexport const getReportFileTypeId = createSelector(\r\n getReportFileTypes,\r\n state => state.selectedFileType && state.selectedFileType.Extension\r\n);\r\n\r\nexport const getReportFileType = createSelector(\r\n getReportFileTypes,\r\n state => state.selectedFileType && state.selectedFileType.ShortName\r\n);\r\n\r\nexport const getSelectedReportFileTypeId = createSelector(\r\n getReportFileTypes,\r\n state => state.selectedFileType && state.selectedFileType.Id\r\n);\r\n\r\n// Filter data\r\nexport const getFilter = createSelector(\r\n getReports,\r\n state => state.reportFilter.filter\r\n);\r\n\r\nexport const getFilterId = createSelector(\r\n getReports,\r\n state => state.reportFilter.filter && state.reportFilter.filter.FilterId\r\n);\r\n\r\n// Recipients data\r\nexport const getRecipientsState = createSelector(\r\n getReports,\r\n state => state.reportRecipients\r\n);\r\n\r\nexport const getRecipientsIds = createSelector(\r\n getRecipientsState,\r\n fromReportRecipient.selectAll\r\n);\r\n\r\nexport const getRecipients = createSelector(\r\n getRecipientsIds,\r\n fromUser.getSearchUserEntities,\r\n (userIds, users) => userIds.map(userId => users[userId]).filter(user => !!user)\r\n);\r\n\r\n\r\n// Setting data\r\nexport const getSettingState = createSelector(\r\n getReports,\r\n state => state.reportRecipients\r\n);\r\n\r\n// Kind of Report\r\nexport const getKindOfReport = createSelector(\r\n getReports,\r\n state => state.reportKind.kind\r\n);\r\n\r\n// Report History\r\nexport const getReportHistory = createSelector(\r\n getReports,\r\n state => state.reportHistory.data\r\n);\r\n\r\nexport const getReportHistoryLoading = createSelector(\r\n getReports,\r\n state => state.reportHistory.isLoading\r\n);\r\n\r\nexport const getReportHistoryLoaded = createSelector(\r\n getReports,\r\n state => state.reportHistory.isLoaded\r\n);\r\n\r\nexport const getSelectedTab = createSelector(\r\n getReports,\r\n state => state.reportHistory.selectedDateRange\r\n);\r\n\r\nexport const getSelectedTabReportHistory = createSelector(\r\n getSelectedTab,\r\n getReportHistory,\r\n (selectedTab, reportHistoryData) => {\r\n const today = new Date();\r\n switch (selectedTab) {\r\n // today\r\n case 0:\r\n return (reportHistoryData.filter(item => {\r\n return DateUtils.moment(item.QueueDate).isSame(DateUtils.moment(), 'day'); \r\n }));\r\n // this week\r\n case 1:\r\n return reportHistoryData.filter(item => DateUtils.moment(item.QueueDate).isAfter(DateUtils.moment().subtract(7, 'd').startOf('day')))\r\n //return (reportHistoryData.filter(item => new Date(item.QueueDate).getTime() > (today.getTime() - 7 * 24 * 3600 * 1000)));\r\n // this month, so no need to filter data\r\n case 2:\r\n return reportHistoryData;\r\n\r\n }\r\n }\r\n);\r\n\r\n// Report Schedules data\r\nexport const getReportSchedulesLoading = createSelector(\r\n getReports,\r\n state => state.reportSchedules.isLoading\r\n);\r\n\r\nexport const getReportSchedulesLoaded = createSelector(\r\n getReports,\r\n state => state.reportSchedules.isLoaded\r\n);\r\nexport const getReportSchedulesError = createSelector(\r\n getReports,\r\n state => state.reportSchedules.error\r\n);\r\n\r\nexport const getSelectedReportSchedulesTab = createSelector(\r\n getReports,\r\n state => state.reportSchedules.selectedUsersTab\r\n);\r\n\r\nexport const getAllReportSchedules = createSelector(\r\n getReports,\r\n state => state.reportSchedules.allData\r\n);\r\n\r\nexport const getSelectedReportScheduleId = createSelector(\r\n getReports,\r\n state => state.reportSchedules.selectedReportScheduleId\r\n);\r\n\r\nexport const getReportScheduleDataById = createSelector(\r\n getSelectedReportScheduleId,\r\n getAllReportSchedules,\r\n (ReportCustomerSettingRecipientId, state) => {\r\n return state.find(item => item.ReportCustomerSettingRecipientId === ReportCustomerSettingRecipientId);\r\n }\r\n);\r\n\r\nexport const getSelectedTabReportSchedulesFiltered = createSelector(\r\n fromCore.UserSession.getSession,\r\n getSelectedReportSchedulesTab,\r\n getAllReportSchedules,\r\n (sessionUser, selectedTab, reportSchedulesData) => {\r\n switch (selectedTab) {\r\n case 0:\r\n return (reportSchedulesData.filter(item => item.User.UserId === sessionUser.UserId));\r\n default:\r\n return reportSchedulesData;\r\n }\r\n }\r\n);\r\n\r\nexport const getSelectedTabReportSchedules = createSelector(\r\n getSelectedTabReportSchedulesFiltered,\r\n fromSitemapGroups.getPathString,\r\n (reportSchedulesData, getPathString) => {\r\n let reportSchedulesDataRet = [];\r\n\r\n reportSchedulesData.map(element => {\r\n let newElement = {...element};\r\n newElement.SitemapGroup = getPathString(element.SitemapGroupId);\r\n reportSchedulesDataRet.push(newElement);\r\n });\r\n\r\n return reportSchedulesDataRet;\r\n }\r\n);\r\n\r\nexport const getSelectedReportSchedulesById = createSelector(\r\n getSelectedReportScheduleId,\r\n getAllReportSchedules,\r\n (selectedScheduleId, reportSchedulesData) => reportSchedulesData.find(item =>\r\n item.ReportCustomerSettingRecipientId === selectedScheduleId).UserNotes\r\n );\r\n\r\nexport const getReportScheduleDefaultRunHourByReportName = createSelector(\r\n getAllReportSchedules,\r\n getReportTypeName,\r\n (allReportSchedules, selectedReportName) => {\r\n const report = allReportSchedules.find(item => item.ReportName === selectedReportName)\r\n return report && report.RunHour || 0;\r\n }\r\n);\r\n\r\nexport const getReportScheduleDefaultRunMinuteByReportName = createSelector(\r\n getAllReportSchedules,\r\n getReportTypeName,\r\n (allReportSchedules, selectedReportName) => {\r\n const report = allReportSchedules.find(item => item.ReportName === selectedReportName)\r\n return report && report.RunMinute || 0;\r\n }\r\n);\r\n\r\nexport const getReportScheduleDefaultRunHourById = createSelector(\r\n getAllReportSchedules,\r\n getSelectedReportScheduleId,\r\n (allReportSchedules, selectedReportScheduleId) => allReportSchedules.find(item =>\r\n item.ReportCustomerSettingRecipientId === selectedReportScheduleId).RunHour\r\n);\r\n\r\nexport const getReportScheduleDefaultRunMinuteById = createSelector(\r\n getAllReportSchedules,\r\n getSelectedReportScheduleId,\r\n (allReportSchedules, selectedReportScheduleId) => allReportSchedules.find(item =>\r\n item.ReportCustomerSettingRecipientId === selectedReportScheduleId).RunMinute\r\n);\r\n\r\nexport const getReportSchedulesById = createSelector(\r\n getAllReportSchedules,\r\n getSelectedReportScheduleId,\r\n (allReportSchedules, selectedReportScheduleId) => allReportSchedules.find(item =>\r\n item.ReportCustomerSettingRecipientId === selectedReportScheduleId).ScheduleTimes\r\n);\r\n\r\nexport const getAllReportSchedulesState: MemoizedSelector<\r\n object,\r\n CreatedReport\r\n> = createFeatureSelector('ReportSchedules');\r\n\r\nexport const getAllReportSchedulesData = createSelector(\r\n getAllReportSchedulesState,\r\n state => state.ReportName\r\n);\r\n\r\nexport const getReportScheduleUserNotes = createSelector(\r\n getAllReportSchedules,\r\n getSelectedReportScheduleId,\r\n (reportSchedules, selectedReportScheduleId) => reportSchedules.find(item =>\r\n item.ReportCustomerSettingRecipientId === selectedReportScheduleId).UserNotes\r\n);\r\n\r\nexport const getReportTypeInfo = createSelector(\r\n fromDashboard.getSelectedSitemapGroup,\r\n getReportTime,\r\n getFilterId,\r\n getReportTypeId,\r\n (SitemapGroup, ReportTime, GlobalFilterId, FileTypeId) => ({ SitemapGroup, ...ReportTime, GlobalFilterId, FileTypeId })\r\n);\r\n\r\nexport const getTimeInfo = createSelector(\r\n getTimeZoneId,\r\n getDeliveryTimes,\r\n (TimeZoneId, deliveryTimes12h) => {\r\n\r\n let DeliveryTimes = deliveryTimes12h.map(p => ({\r\n Hour: p.Meridiem === 'PM' && p.Hour != 12 ? p.Hour + 12 : p.Hour,\r\n Minute: p.Minute\r\n }))\r\n\r\n return { TimeZoneId, DeliveryTimes }\r\n }\r\n);\r\n\r\n// combined settings selectors\r\nconst getSettingsData = createSelector(\r\n getFileTypeId,\r\n getTimeZoneId,\r\n getStartDate,\r\n getEndDate,\r\n getAdditionalNotes,\r\n (FileTypeId, TimeZoneId, ReportStartDate, ReportEndDate, Notes) => ({\r\n FileTypeId,\r\n TimeZoneId,\r\n ReportStartDate,\r\n ReportEndDate,\r\n Notes\r\n })\r\n);\r\n\r\nexport const getPostData = createSelector(\r\n fromDashboard.getSelectedSitemapGroup,\r\n getReportTypeId,\r\n getReportCustomerSettingId,\r\n getFilterId,\r\n getRecipientsIds,\r\n getSettingsData,\r\n (\r\n SitemapGroup,\r\n ReportId,\r\n ReportSettingId,\r\n GlobalFilterId,\r\n Recipients,\r\n SettingsData\r\n ) => {\r\n return {\r\n SitemapGroup,\r\n ReportId,\r\n ReportSettingId,\r\n Recipients,\r\n FileTypeId: SettingsData.FileTypeId,\r\n TimeZoneId: SettingsData.TimeZoneId,\r\n ReportStartDate: SettingsData.ReportStartDate,\r\n ReportEndDate: SettingsData.ReportEndDate,\r\n Notes: SettingsData.Notes,\r\n GlobalFilterId,\r\n };\r\n }\r\n);\r\n\r\n/**\r\n * POST Schedule Report\r\n */\r\nexport const getSchedulePostData = createSelector(\r\n getTimeInfo,\r\n getReportTypeId,\r\n getReportCustomerSettingId,\r\n fromDashboard.getSelectedSitemapGroup,\r\n getFilterId,\r\n getRecipientsIds,\r\n getSettingsData,\r\n getSelectedSettingId,\r\n (\r\n TimeInfo,\r\n ReportId,\r\n ReportSettingId,\r\n SitemapGroup,\r\n GlobalFilterId,\r\n Recipients,\r\n SettingsData,\r\n SelectedSettingId\r\n ) => {\r\n return {\r\n ...TimeInfo,\r\n ReportId,\r\n ReportSettingId,\r\n SitemapGroup,\r\n GlobalFilterId,\r\n TimeZoneId: SettingsData.TimeZoneId,\r\n Recipients,\r\n FileTypeId: SettingsData.FileTypeId,\r\n Notes: SettingsData.Notes\r\n };\r\n }\r\n);\r\n\r\nexport const getFormIsValid = createSelector(\r\n getRecipients,\r\n getTimeZoneId,\r\n (recipients, timeZoneId) => {\r\n if (!recipients || !recipients.length || !timeZoneId || !timeZoneId) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n);\r\n","/* Models */\r\nimport { BannerOptions } from '@rfv/modules/shared/model/banner.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/*\r\n * Functions with messages and actions to send as payload to banner\r\n */\r\n\r\n// Banner after successful operation (save, edit, delete)\r\nexport function successPayload(operation: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `Report request was ${operation}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\n// Banner after failed operation (save, edit, delete)\r\nexport function failPayload(operation: string, error: HttpErrorResponse | ReportBannerFailPayload): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `There was a problem with save report request. Error: ${error.status}: ${error.statusText}`,\r\n };\r\n}\r\n\r\nexport interface ReportBannerFailPayload {\r\n status: number;\r\n statusText: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\n/* Models */\r\nimport { TimeZones } from '@rfv/modules/report/models/time-zones';\r\nimport { DateRanges } from '@rfv/modules/report/models/date-ranges';\r\nimport { FileType } from '@rfv/modules/report/models/file-type.model';\r\nimport { CreatedReport } from '@rfv/modules/report/models/created-report';\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\nimport { map } from '../../../../node_modules/rxjs/operators';\r\n\r\nimport { ScheduleUpdate } from './models/schedule-update.model';\r\nimport { ReportGroup } from './models/report-group.model';\r\nimport { ReportScheduleDetails } from './models/report-schedule-details.model';\r\nimport { ReportSetting } from './models/report-setting.model';\r\nimport { CreateScheduleReportRequest } from './models/create-schedule-report-request';\r\nimport { CreateDemandReportRequest } from './models/create-demand-report-request';\r\nimport { RunScheduleReportRequest } from './models/run-schedule-report-request';\r\nimport { ReportElement } from './models/report-element.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReportService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * Load list of reports types\r\n */\r\n loadReportGroups() {\r\n const url = `/v1/reports/getreportgroups`;\r\n\r\n return this._http.get(url);\r\n }\r\n\r\n loadTimeZones() {\r\n const url = `/v1/reports/gettimezones`;\r\n\r\n return this._http.get(url);\r\n }\r\n\r\n loadDateRange() {\r\n const url = `/v1/reports/GetReportDateRanges`;\r\n\r\n return this._http.get(url);\r\n }\r\n\r\n loadFileTypes(reportId: number) {\r\n const url = `/v1/reports/GetReportFileTypes/${reportId}`;\r\n\r\n return this._http.get(url);\r\n }\r\n\r\n loadReportHistory() {\r\n const url = `/v1/reports/GetCreatedReports`;\r\n\r\n return this._http.get(url).pipe(\r\n map(data => data.sort((a, b) => new Date(b.QueueDate).getTime() - new Date(a.QueueDate).getTime()))\r\n );\r\n }\r\n\r\n loadReportSchedules(sitemapGroupId: number) {\r\n const url = `/v1/reports/GetScheduledReports/${sitemapGroupId}`;\r\n\r\n return this._http.get(url);\r\n }\r\n\r\n getUserReportSchedules() {\r\n const url = '/v1/reports/GetReportSchedulesByUserId';\r\n return this._http.get(url);\r\n }\r\n\r\n getReportSettingId(RunHour: number, RunMinute: number) {\r\n const url = `/v1/reports/GetReportSchedules`;\r\n const params = new HttpParams().set('RunHour', RunHour).set('RunMinute', RunMinute);\r\n\r\n return this._http.get(url, { params: params });\r\n }\r\n\r\n getReportRecipientsInfo(RunHour: number, RunMinute: number, ReportCustomerSettingRecipientId: number, ReportSettingId: number) {\r\n const url = `/v1/reports/GetReportRecipientsInfo`;\r\n const params = new HttpParams().set('RunHour', RunHour).set('RunMinute', RunMinute).set('ReportSettingId',\r\n ReportSettingId).set('ReportCustomerSettingRecipientId', ReportCustomerSettingRecipientId);\r\n\r\n return this._http.get(url, { params: params });\r\n }\r\n\r\n getReportFile(reportId: number) {\r\n const url = `/v1/reports/GetCreatedReportFile/${reportId}`;\r\n // this.http refers to HttpClient. Note here that you cannot use the generic get as\r\n // it does not compile: instead you \"choose\" the appropriate API in this way.\r\n return this._http.get(url, { responseType: 'blob' });\r\n }\r\n\r\n generateReport(postData: CreateDemandReportRequest) {\r\n const url = `/v1/Reports/CreateDemandReport`;\r\n return this._http.post(url, postData);\r\n }\r\n\r\n regenerateReport(pendingReportId: number) {\r\n const url = `/v1/Reports/RetryDemandReport`;\r\n return this._http.post(url, { PendingReportId: pendingReportId });\r\n }\r\n\r\n generateScheduleReport(postData: CreateScheduleReportRequest) {\r\n const url = `/v1/Reports/CreateScheduleReport`;\r\n return this._http.post(url, postData);\r\n }\r\n\r\n deleteScheduleTimeReport(reportCustomerSettingRecipientId: number, runHour: number, runMinute: number) {\r\n const url = `/v1/Reports/RemoveScheduleTimeReport/${reportCustomerSettingRecipientId}`;\r\n return this._http.delete(url, {\r\n params: {\r\n Id: reportCustomerSettingRecipientId.toString(),\r\n runHour: runHour.toString(),\r\n runMinute: runMinute.toString()\r\n }\r\n });\r\n }\r\n\r\n deleteScheduleReport(reportCustomerSettingRecipientId: number) {\r\n const url = `/v1/Reports/RemoveScheduleReport/${reportCustomerSettingRecipientId}`;\r\n return this._http.delete(url);\r\n }\r\n\r\n updateScheduledReportTime(reportCustomerSettingRecipientId: number, oldRunHour: number, oldRunMinute: number,\r\n runHour: number, runMinute: number) {\r\n const url = `/v1/Reports/EditScheduleReportTime/${reportCustomerSettingRecipientId}`;\r\n return this._http.put(url, {\r\n oldRunHour: oldRunHour.toString(),\r\n oldRunMinute: oldRunMinute.toString(),\r\n runHour: runHour.toString(),\r\n runMinute: runMinute.toString()\r\n });\r\n }\r\n\r\n updateReportSchedule(updateData: ScheduleUpdate) {\r\n const url = `/v1/Reports/EditBulkScheduleReport`;\r\n return this._http.put(url, {\r\n AssetId: updateData.assetId,\r\n FileTypeId: updateData.fileTypeId,\r\n GlobalFilterId: updateData.globalFilterId > 0 ? updateData.globalFilterId : null,\r\n UserGlobalFilterDataPointGroupId: updateData.userGlobalFilterDataPointGroupId,\r\n Notes: updateData.notes,\r\n ReportId: updateData.reportId,\r\n ReportCustomerSettingId: updateData.reportCustomerSettingId,\r\n ReportCustomerSettingRecipientId: updateData.reportCustomerSettingRecipientId,\r\n SitemapGroupId: updateData.sitemapGroupId,\r\n TimeZoneId: updateData.timeZoneId,\r\n UserId: updateData.userId,\r\n DeliveryTimes: updateData.deliveryTimes\r\n });\r\n }\r\n\r\n updateBulkScheduledReportTime(reportCustomerSettingRecipientId: number, updateData: ScheduleUpdate[]) {\r\n const url = `/v1/Reports/EditBulkScheduleReportTime/${reportCustomerSettingRecipientId}`;\r\n return this._http.put(url, {\r\n ReportScheduleTimeModels: updateData\r\n });\r\n }\r\n\r\n runScheduledReport(request: RunScheduleReportRequest) {\r\n const url = `/v1/Reports/RunScheduledReport`;\r\n return this._http.post(url, request);\r\n }\r\n\r\n loadReportElements(reportGroups: ReportGroup[])\r\n {\r\n var reportElements: ReportElement[] = [];\r\n\r\n reportGroups.forEach(x => x.Reports.forEach(report => {\r\n let instantReportElement: ReportElement = \r\n {\r\n id: report.Id,\r\n name: report.Name,\r\n reportKind: 'InstantReport',\r\n recipient: true,\r\n filter: true,\r\n assetFilter: true,\r\n datapointFilter: true,\r\n setSchedule: false,\r\n setTimezone: true,\r\n start: report.UsesDateRange,\r\n end: report.UsesDateRange,\r\n setDeliveryTime: false,\r\n exportOption: true,\r\n additionalNotes: true\r\n }\r\n\r\n reportElements.push(instantReportElement);\r\n let scheduledReportElement: ReportElement = \r\n {\r\n id: report.Id,\r\n name: report.Name,\r\n reportKind: 'ScheduleReport',\r\n recipient: true,\r\n filter: true,\r\n assetFilter: true,\r\n datapointFilter: true,\r\n setSchedule: true,\r\n setTimezone: true,\r\n start: false,\r\n end: false,\r\n setDeliveryTime: true,\r\n exportOption: true,\r\n additionalNotes: true\r\n }\r\n\r\n reportElements.push(scheduledReportElement);\r\n\r\n }))\r\n\r\n return reportElements;\r\n }\r\n}\r\n","\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n Alarm Group\r\n \r\n {{ option.Name }}\r\n \r\n {{ formMessages[1] }}\r\n \r\n
    \r\n\r\n
    \r\n \r\n Data Point Name\r\n \r\n {{ datapoint.Name }}\r\n \r\n \r\n Dropdown must not be empty\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Alarm Name\r\n \r\n {{ formMessages[1] }}\r\n {{ formMessages[14] }}\r\n {{ formMessages[9] }}\r\n \r\n
    \r\n\r\n
    \r\n \r\n Test\r\n \r\n {{ test.Name }}\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Threshold\r\n 0; else input\"\r\n formControlName=\"threshold\"\r\n [autoComplete]=\"true\"\r\n [clearable]=\"false\">\r\n \r\n {{ '(' + legend.Value + ') ' }} {{ legend.Name }}\r\n \r\n \r\n \r\n \r\n {{ formMessages[9] }}\r\n {{ formMessages[1] }}\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Alarm Enabled\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Alert Enabled\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Deadband\r\n \r\n {{ formMessages[12] }}\r\n \r\n
    \r\n\r\n
    \r\n \r\n Alert Every\r\n \r\n {{option.Name}}\r\n \r\n {{ formMessages[1] }}\r\n \r\n
    \r\n\r\n
    \r\n \r\n Alert Suppression (sec)\r\n \r\n {{ formMessages[13] }}\r\n \r\n
    \r\n\r\n
    \r\n \r\n Debounce (sec)\r\n \r\n {{ formMessages[12] }}\r\n \r\n
    \r\n\r\n
    \r\n \r\n Allow Consecutive Present Alarms\r\n \r\n \r\n
    \r\n\r\n\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n \r\n\r\n","\r\n/* angular */\r\nimport { UntypedFormGroup, FormControl, FormGroupDirective } from '@angular/forms';\r\nimport { Component, OnInit, OnDestroy, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n/* core */\r\nimport { AlarmType } from '@rfv/modules/core/models/asset/status';\r\nimport { AlarmGroup, AlarmTest, DatapointLegend, AssetDatapointSetting, TimeIntervalDropdown } from '@rfv/modules/core/models';\r\nimport { formMessages } from '@rfv/modules/shared/components/form-validation-error/form-errors';\r\n\r\n\r\n@Component({\r\n selector: 'shared-alarm-drawer',\r\n templateUrl: 'alarms-drawer.component.html',\r\n styleUrls: ['alarms-drawer.component.scss']\r\n})\r\nexport class SharedAlarmDrawerComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @Input() isNew: boolean;//true = addMode; false = editMode\r\n @Input() assetId: number;//required to display\r\n\r\n @Input() hideActionButtons: boolean = false;//set to true if you have your own action buttons\r\n\r\n @Input() assetDatapoints: AssetDatapointSetting[];\r\n @Input() datapointLegends: DatapointLegend[];\r\n\r\n /**\r\n * Output Button clicks\r\n */\r\n @Output() onAddButtonClick = new EventEmitter();\r\n @Output() onApplyButtonClick = new EventEmitter();\r\n @Output() onDeleteButtonClick = new EventEmitter();\r\n @Output() onCancelButtonClick = new EventEmitter();\r\n @Output() onResetButtonClick = new EventEmitter();\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n /** Loading spinner logic */\r\n public isLoading$: Observable;\r\n public isLoaded$: Observable;\r\n\r\n /** Dropdown Values */\r\n public alarmTests$: Observable;\r\n public alarmGroups$: Observable;\r\n public alertEveryOptions: TimeIntervalDropdown[];\r\n\r\n public alarmsDataPointIdentifier$: Observable;\r\n\r\n public alarmTypes: AlarmType[];\r\n public alarmTypeName: string;\r\n\r\n public editedAlarm: UntypedFormGroup;\r\n public selectedAlarm: UntypedFormGroup;\r\n\r\n public constructor(\r\n private _store: Store,\r\n private controlContainer: FormGroupDirective\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.isLoaded$ = this._store.select(fromCore.Assets.DatapointSettings.isLoaded(this.assetId));\r\n this.isLoading$ = this._store.select(fromCore.Assets.DatapointSettings.isLoading(this.assetId));\r\n\r\n this.editedAlarm = this.controlContainer.control;\r\n\r\n if (!this.hideActionButtons) {//temporary fix - if not unit alarms\r\n this.selectedAlarm = this.controlContainer.control;\r\n };\r\n \r\n /** Alarm - Groups, Tests, Types */\r\n this.alarmGroups$ = this._store.select(fromCore.AlarmGroups.getAll);\r\n this.alarmTests$ = this._store.select(fromCore.AlarmTests.getAll);\r\n\r\n this._store.pipe(\r\n select(fromCore.TimeIntervalDropdown.getAll),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(\r\n alertEveryDropdownOptions => {\r\n this.alertEveryOptions = alertEveryDropdownOptions?.filter(option => option.Tag == \"ALARM_REPEAT_DROPDOWN\")\r\n }\r\n );\r\n\r\n this._store.pipe(\r\n select(fromCore.AlarmTypes.getEnabledAlarmTypes),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(\r\n alarmTypes => {\r\n this.alarmTypeName = alarmTypes?.find(type => type.AlarmTypeId == this.editedAlarm.value.alarmTypeId)?.Name\r\n }\r\n );\r\n\r\n };\r\n\r\n public ngAfterViewInit(): void {\r\n this.editedAlarm.markAsPristine();\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n };\r\n\r\n\r\n /** \r\n * Custom Actions\r\n */\r\n get formMessages() {\r\n return formMessages;\r\n };\r\n\r\n add(addAnother: boolean) {\r\n if (this.editedAlarm.valid) {\r\n this.onAddButtonClick.emit({\r\n addAnother: addAnother,\r\n editedAlarm: this.editedAlarm\r\n });\r\n\r\n this.reset();\r\n };\r\n };\r\n\r\n apply() {\r\n if (this.editedAlarm.invalid) return;\r\n this.onApplyButtonClick.emit(this.editedAlarm);\r\n };\r\n\r\n reset() {\r\n this.editedAlarm.markAsPristine();\r\n this.onResetButtonClick.emit();\r\n };\r\n\r\n delete() {\r\n this.onDeleteButtonClick.emit();\r\n };\r\n\r\n getDatapoint(selectedDataPointId: number): AssetDatapointSetting {\r\n return this.assetDatapoints.find(dp => dp.Id === selectedDataPointId);\r\n };\r\n\r\n datapointChanged() {\r\n const datapoint = this.getDatapoint(this.editedAlarm.get('datapointId').value);\r\n this.editedAlarm.get(`alarmName`).patchValue(datapoint?.Name);\r\n\r\n this.datapointLegends = datapoint?.Legends;\r\n\r\n const allowSequential = this.editedAlarm.get('allowSequentialPresent');\r\n allowSequential.patchValue(false);\r\n\r\n this.onAllowSequentialPresentChanged();\r\n\r\n if (this.datapointLegends?.length > 0) {\r\n const control = this.editedAlarm.get('threshold');\r\n allowSequential.enable();\r\n if (control) {\r\n control.patchValue(this.datapointLegends[0].Value);\r\n }\r\n } else {\r\n allowSequential.disable();\r\n };\r\n };\r\n\r\n onAllowSequentialPresentChanged() {\r\n let alertRepeatIntervalFormControl = this.editedAlarm.get('alertRepeatInterval') as FormControl;\r\n let AllowSequentialPresentFormControl = this.editedAlarm.get('allowSequentialPresent') as FormControl;\r\n let datapointControl = this.editedAlarm.get('datapointId') as FormControl; \r\n if (datapointControl.value==null || AllowSequentialPresentFormControl.value) {\r\n // Disable repeat alerts\r\n this.editedAlarm.patchValue({ alertRepeatInterval: 0 });\r\n alertRepeatIntervalFormControl.disable();\r\n } else {\r\n // Enable repeat alerts\r\n alertRepeatIntervalFormControl.enable();\r\n };\r\n \r\n };\r\n\r\n public sortLegends(legends: DatapointLegend[]) {\r\n return legends.slice().sort((a, b) => a.Value - b.Value)\r\n };\r\n};\r\n","/* angular */\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { Component, forwardRef, Input, EventEmitter, Output } from \"@angular/core\";\r\n/* rxjs */\r\n\r\n/* ngrx */\r\n\r\n/* core */\r\n\r\n@Component({\r\n selector: 'app-toggle-button',\r\n styleUrls: ['toggle-button.component.scss'],\r\n template: `\r\n
    \r\n
    \r\n \r\n \r\n
    {{ text }}\r\n
    \r\n `,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ToggleButtonComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ToggleButtonComponent implements ControlValueAccessor {\r\n\r\n public _value: boolean;\r\n\r\n @Input() text: string;\r\n @Input() toggleButtonId: string;\r\n @Input() isDisabled: boolean;\r\n\r\n /**\r\n * If value is true, toggle will be on\r\n */\r\n @Input() set value(val: boolean) {\r\n // if (this.reverseValue) val = !val;\r\n this._value = val;\r\n\r\n if (this._mapToString) {\r\n switch (this._mapToString) {\r\n case 'onoff': this.onChange(val ? 'on' : 'off'); break;\r\n case 'yesno': this.onChange(val ? 'yes' : 'no'); break;\r\n case 'truefalse': this.onChange(val ? 'true' : 'false'); break;\r\n }\r\n } else {\r\n this.onChange(val);\r\n }\r\n\r\n this.onTouched();\r\n this.valueChange.emit(this._value);\r\n }\r\n\r\n // only works on ControlValueAccessor, set by default\r\n private _mapToString: 'onoff' | 'yesno' | 'truefalse' | null;\r\n\r\n get value(): boolean {\r\n return this._value;\r\n }\r\n\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n\r\n writeValue(value: boolean | string) {\r\n if (typeof value === 'string') {\r\n switch (value.toLowerCase()) {\r\n case 'yes':\r\n this._mapToString = 'yesno';\r\n this._value = true;\r\n return;\r\n case 'true':\r\n this._mapToString = 'truefalse';\r\n this._value = true;\r\n return;\r\n case 'on':\r\n this._mapToString = 'onoff';\r\n this._value = true;\r\n return;\r\n case 'no':\r\n this._mapToString = 'yesno';\r\n this._value = false;\r\n return;\r\n case 'false':\r\n this._mapToString = 'truefalse';\r\n this._value = false;\r\n return;\r\n case 'off':\r\n this._mapToString = 'onoff';\r\n this._value = false;\r\n return;\r\n\r\n // fallthrough, coerce to boolean\r\n }\r\n }\r\n\r\n this._value = !!value;\r\n }\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n registerOnChange(fn) {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn) {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n this.isDisabled = isDisabled;\r\n }\r\n}\r\n","import {\r\n forwardRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n Directive,\r\n EventEmitter,\r\n ElementRef,\r\n Input,\r\n Output,\r\n Inject,\r\n ViewContainerRef,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\n\r\nimport {\r\n animate,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n AnimationEvent\r\n} from '@angular/animations';\r\n\r\nimport { CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\r\n\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil, startWith, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nexport type CarouselContentPositionState =\r\n 'left' | 'center' | 'right' | 'left-origin-center' | 'right-origin-center';\r\n\r\n \r\n@Component({\r\n selector: 'rfv-carousel-content',\r\n templateUrl: 'carousel-content.html',\r\n styleUrls: ['carousel-content.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('translateSlide', [\r\n state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })),\r\n state('left', style({ transform: 'translate3d(-100%, 0, 0)', minHeight: '1px' })),\r\n state('right', style({ transform: 'translate3d(100%, 0, 0)', minHeight: '1px' })),\r\n\r\n transition('* => left, * => right, left => center, right => center',\r\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')),\r\n transition('void => left-origin-center', [\r\n style({ transform: 'translate3d(-100%, 0, 0)' }),\r\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\r\n ]),\r\n transition('void => right-origin-center', [\r\n style({ transform: 'translate3d(100%, 0, 0)' }),\r\n animate('{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)')\r\n ])\r\n ])\r\n ],\r\n host: {\r\n class: 'carousel-content'\r\n }\r\n})\r\nexport class CarouselContentComponent implements OnInit, OnDestroy {\r\n private _destroyed$ = new Subject();\r\n public translateSlideComplete$ = new Subject();\r\n\r\n @Input('content')\r\n public content: TemplatePortal;\r\n\r\n @Input('origin')\r\n public origin: number;\r\n\r\n public positionState: CarouselContentPositionState;\r\n\r\n @Output()\r\n public readonly _onCentering = new EventEmitter();\r\n\r\n @Output()\r\n public readonly _onCentered = new EventEmitter(true);\r\n\r\n @Output()\r\n public readonly _beforeCentering = new EventEmitter();\r\n\r\n @Output()\r\n public readonly _afterLeavingCenter = new EventEmitter();\r\n\r\n @ViewChild(CdkPortalOutlet, { static: false })\r\n public portalHost: CdkPortalOutlet;\r\n\r\n private _positionIndex: number;\r\n\r\n @Input()\r\n public set position(value: number) {\r\n this._positionIndex = value;\r\n\r\n if (this._positionIndex < 0) {\r\n this.positionState = 'left';\r\n } else if (this._positionIndex > 0) {\r\n this.positionState = 'right'\r\n } else {\r\n this.positionState = 'center';\r\n }\r\n }\r\n\r\n @Input()\r\n public animationDuration: string = '500ms';\r\n\r\n public constructor(\r\n private _elementRef: ElementRef\r\n ) {\r\n this.translateSlideComplete$.pipe(\r\n distinctUntilChanged((x, y) => {\r\n return x.fromState === y.fromState && x.toState === y.toState;\r\n })\r\n ).subscribe(event => {\r\n if (this.isCenterPosition(event.toState) && this.isCenterPosition(this.positionState)) {\r\n this._onCentered.emit();\r\n }\r\n\r\n if (this.isCenterPosition(event.fromState) && !this.isCenterPosition(this.positionState)) {\r\n this._afterLeavingCenter.emit();\r\n }\r\n });\r\n }\r\n\r\n public ngOnInit() {\r\n if (this.positionState == 'center' && this.origin != null) {\r\n if (this.origin <= 0) {\r\n this.positionState = 'left-origin-center';\r\n } else {\r\n this.positionState = 'right-origin-center';\r\n }\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n\r\n this.translateSlideComplete$.complete();\r\n }\r\n\r\n public isCenterPosition(positionState: CarouselContentPositionState | string): boolean {\r\n return positionState === 'center' ||\r\n positionState === 'left-origin-center' ||\r\n positionState === 'right-origin-center';\r\n }\r\n\r\n public onTranslateSlideStarted(event: AnimationEvent) {\r\n const isCentering = this.isCenterPosition(event.toState);\r\n this._beforeCentering.emit(isCentering);\r\n\r\n if (isCentering)\r\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[rfvCarouselContentHost]'\r\n})\r\nexport class CarouselContentPortal extends CdkPortalOutlet implements OnDestroy {\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n public componentFactoryResolver: ComponentFactoryResolver,\r\n public viewContainerRef: ViewContainerRef,\r\n\r\n @Inject(forwardRef(() => CarouselContentComponent))\r\n private _host: CarouselContentComponent\r\n ) {\r\n super(componentFactoryResolver, viewContainerRef);\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this._host._beforeCentering.pipe(\r\n startWith(this._host.isCenterPosition(this._host.positionState)),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(isCentering => {\r\n if (isCentering && !this.hasAttached())\r\n this.attach(this._host.content);\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","\r\n
    \r\n \r\n \r\n
    ","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-carousel-indicator',\r\n templateUrl: 'carousel-indicator.html',\r\n styleUrls: [ 'carousel-indicator.scss' ]\r\n})\r\nexport class CarouselIndicatorComponent {\r\n @Input()\r\n public active: boolean = false;\r\n}","
    ","","import { Component, OnInit, ViewChild, TemplateRef, ViewContainerRef, ViewEncapsulation } from '@angular/core';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\n\r\n/**\r\n * Carousel slide component. \r\n */\r\n@Component({\r\n selector: 'rfv-carousel-slide',\r\n templateUrl: 'carousel-slide.html',\r\n styleUrls: [ 'carousel-slide.scss' ],\r\n})\r\nexport class CarouselSlideComponent {\r\n public position: number | null = null;\r\n public origin: number | null = null;\r\n public active: boolean;\r\n \r\n private _contentPortal: TemplatePortal | null = null;\r\n \r\n @ViewChild('template', { static: true })\r\n private _content: TemplateRef;\r\n \r\n public get content(): TemplatePortal | null {\r\n return this._contentPortal;\r\n }\r\n \r\n public constructor(\r\n private _viewContainerRef: ViewContainerRef\r\n ) { }\r\n \r\n public ngOnInit() {\r\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\r\n }\r\n}","
    \r\n
    \r\n
    1\" (click)=\"onSwipeLeft()\"> \r\n \r\n
    \r\n \r\n \r\n
    1\">\r\n \r\n
    \r\n
    \r\n
    1\">\r\n \r\n \r\n
    \r\n
    ","import { Component, ContentChildren, AfterContentInit, QueryList, AfterContentChecked, OnDestroy, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { CarouselSlideComponent } from './carousel-slide';\r\n\r\n/**\r\n * Slide change event\r\n */\r\nexport class SlideChangeEvent {\r\n public constructor(\r\n public index: number,\r\n public slide: CarouselSlideComponent\r\n ) {}\r\n}\r\n\r\n/**\r\n * Carousel component. \r\n * Based largely off the angular material tab component.\r\n */\r\n@Component({\r\n selector: 'rfv-carousel',\r\n templateUrl: 'carousel.html',\r\n styleUrls: [ 'carousel.scss' ]\r\n})\r\nexport class CarouselComponent implements OnDestroy, AfterContentInit, AfterContentChecked {\r\n private _destroyed$ = new Subject();\r\n\r\n @ContentChildren(CarouselSlideComponent)\r\n public slides: QueryList;\r\n\r\n private _indexToSelect: number | null = 0;\r\n private _selectedIndex: number | null = null;\r\n\r\n @Input()\r\n public get selectedIndex(): number | null {\r\n return this._selectedIndex;\r\n }\r\n\r\n public set selectedIndex(value: number | null) {\r\n this._indexToSelect = value;\r\n }\r\n\r\n @Output()\r\n public readonly selectedIndexChange = new EventEmitter();\r\n \r\n @Output()\r\n public readonly selectedSlideChange = new EventEmitter();\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.slides.changes.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(() => {\r\n const indexToSelect = this._clampSlideIndex(this._indexToSelect);\r\n\r\n if (indexToSelect === this._selectedIndex) {\r\n const slides = this.slides.toArray();\r\n\r\n for (let i = 0; i < slides.length; i++) {\r\n if (slides[i].active) {\r\n this._indexToSelect = this._selectedIndex = i;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n public ngAfterContentChecked(): void {\r\n const indexToSelect = this._indexToSelect = this._clampSlideIndex(this._indexToSelect);\r\n\r\n if (this._selectedIndex != indexToSelect) {\r\n const isFirstRun = this._selectedIndex === null;\r\n\r\n if (!isFirstRun)\r\n this.selectedSlideChange.emit(new SlideChangeEvent(indexToSelect, this.slides && this.slides.length ? this.slides.toArray()[indexToSelect] : null));\r\n\r\n Promise.resolve().then(() => {\r\n this.slides.forEach((slide, index) => slide.active = index === indexToSelect);\r\n\r\n if (!isFirstRun)\r\n this.selectedIndexChange.emit(indexToSelect);\r\n });\r\n }\r\n\r\n this.slides.forEach((slide, index) => {\r\n slide.position = index - indexToSelect;\r\n\r\n if (this._selectedIndex != null && slide.position === 0 && !slide.origin)\r\n slide.origin = indexToSelect - this._selectedIndex;\r\n });\r\n\r\n if (this._selectedIndex !== indexToSelect) {\r\n this._selectedIndex = indexToSelect;\r\n this._cdr.markForCheck();\r\n }\r\n }\r\n\r\n public onClick(index: number) {\r\n this.selectedIndex = index;\r\n }\r\n\r\n public onSwipeLeft() {\r\n if (this.selectedIndex === 0)\r\n this.selectedIndex = this.selectedIndex = this.slides.length - 1;\r\n else\r\n this.selectedIndex--;\r\n \r\n }\r\n\r\n public onSwipeRight() {\r\n if (this.selectedIndex === this.slides.length - 1)\r\n this.selectedIndex = 0;\r\n else\r\n this.selectedIndex++;\r\n }\r\n\r\n private _clampSlideIndex(index: number | null): number {\r\n return Math.min(this.slides.length - 1, Math.max(index || 0, 0));\r\n }\r\n}","
    \r\n
    \r\n {{ title }}\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n
    ","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-collapsable-section',\r\n templateUrl: 'collapsable-section.component.html',\r\n styleUrls: [ 'collapsable-section.component.scss' ]\r\n})\r\nexport class CollapsableSectionComponent {\r\n @Input()\r\n public open: boolean = false;\r\n\r\n @Input()\r\n public title: string = '';\r\n}","import { Component, Input, Output, EventEmitter, OnDestroy, ViewContainerRef } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { ColorPickerService } from 'ngx-color-picker';\r\nimport { OutputFormat } from 'ngx-color-picker/lib/helpers';\r\n\r\nexport interface ColorPickerEventObj {\r\n data: string;\r\n eventName?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'rfv-color-picker',\r\n styleUrls: ['./color-picker.component.scss'],\r\n template: `\r\n \r\n `\r\n})\r\n\r\nexport class ColorPickerComponent implements OnDestroy {\r\n\r\n @Input() set value(color: string) {\r\n this.setColorValue(color);\r\n }\r\n @Input() set valueObj(colorObj: { color: string }) {\r\n this.setColorValue(colorObj.color);\r\n }\r\n @Input() label: string;\r\n @Input() presetColors: string[];\r\n @Input() isDisabled: boolean;\r\n @Input() outputFormat: OutputFormat = 'hex';\r\n\r\n @Output() valueChange = new EventEmitter();\r\n\r\n _destroyed$ = new Subject();\r\n private _value: string;\r\n\r\n constructor(public vcRef: ViewContainerRef, private cpService: ColorPickerService) {\r\n\r\n }\r\n\r\n public onEventLog(event: string, data: any): void {\r\n this.valueChange.emit({ data: data.toUpperCase(), eventName: event });\r\n }\r\n\r\n get colorValue() {\r\n return this.value;\r\n }\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set colorValue(val) {\r\n this.value = val;\r\n this.valueChange.emit({ data: val });\r\n this.onChange(val);\r\n this.onTouched();\r\n }\r\n\r\n // Form handlers and properties\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n\r\n writeValue(value) {\r\n if (value) {\r\n this.value = value;\r\n }\r\n }\r\n\r\n registerOnChange(fn) {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn) {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Allows Angular to disable the input.\r\n setDisabledState(isDisabled: boolean): void {\r\n //this.colorPicker.isDisabled = isDisabled;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n private setColorValue(color: string) {\r\n if (color) {\r\n if (this.outputFormat === 'hex' && color !== '') {\r\n this._value = color.includes('#') ? color : '#' + color;\r\n }\r\n }\r\n }\r\n}\r\n","\r\n \r\n\r\n\r\n \r\n
    \r\n
    \r\n \r\n \r\n {{ (!value && value !== 0) ? '—' : value }} \r\n
    \r\n\r\n \r\n {{unitOfMeasurement}}\r\n \r\n
    \r\n\r\n \r\n \r\n\r\n \r\n \r\n {{ label || '—' }} \r\n
    \r\n \r\n\r\n","import { Component, Input, OnChanges } from '@angular/core';\r\n\r\ntype fontSizeType = 'small' | 'medium' | 'large';\r\ntype fontWeightType = 'light' | 'regular' | 'bold';\r\n\r\n@Component({\r\n selector: 'app-data-item',\r\n templateUrl: './data-item.component.html',\r\n})\r\nexport class DataItemComponent {\r\n @Input() fontSize: fontSizeType = 'small';\r\n @Input() fontWeight: fontWeightType = 'regular';\r\n @Input() value: string | number;\r\n @Input() dividerColor: string;\r\n @Input() label: string;\r\n @Input() labelClass: string = '';\r\n @Input() unitOfMeasurement = '';\r\n @Input() codeTag = '';\r\n\r\n normalizeDividerColorFormat() {\r\n if (!this.dividerColor) {\r\n return;\r\n }\r\n return this.dividerColor.indexOf('#') > -1 ? this.dividerColor : '#' + this.dividerColor;\r\n }\r\n\r\n labelClasses() { \r\n let labelStyleClasses = 'text-center ';\r\n labelStyleClasses += `${this.fontWeight} `;\r\n switch (this.fontSize) {\r\n case 'small' : labelStyleClasses += 'font-size-14 '; break;\r\n case 'medium' : labelStyleClasses += 'font-size-16 '; break;\r\n case 'large' : labelStyleClasses += 'font-size-18 '; break;\r\n default: labelStyleClasses += 'font-size-14 '; \r\n } \r\n labelStyleClasses += this.labelClass ? `${this.labelClass} ` : '';\r\n return labelStyleClasses;\r\n }\r\n}\r\n\r\n","
    \r\n \r\n \r\n
    \r\n Device Information\r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n SHA1\r\n \r\n \r\n
    \r\n {{ row.sha1 }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Comm Method\r\n \r\n \r\n
    \r\n {{ row.communicationMethod }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Device Type\r\n \r\n \r\n
    \r\n {{ row.commercialType }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Software Part Number\r\n \r\n \r\n
    \r\n {{ row.softwarePartNumber }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Serial Number\r\n \r\n \r\n
    \r\n {{ row.serialNumber }}\r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n\r\n \r\n \r\n
    \r\n Radio Information\r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n Device Type\r\n \r\n \r\n
    \r\n {{ row.communicationMethod }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Hardware Part Number\r\n \r\n \r\n
    \r\n {{ row.hardwarePartNumber }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n IMEI\r\n \r\n \r\n
    \r\n {{ row.imei }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n MEID\r\n \r\n \r\n
    \r\n {{ row.meid }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Radio Serial Number\r\n \r\n \r\n
    \r\n {{ row.serialNumber }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Sim Card Id\r\n \r\n \r\n
    \r\n {{ row.iccid }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Software Part Number\r\n \r\n \r\n
    \r\n {{ row.softwarePartNumber }}\r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n\r\n \r\n \r\n
    \r\n ECMS Information\r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n Base Description\r\n \r\n \r\n
    \r\n {{ row.description }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Description\r\n \r\n \r\n
    \r\n {{ row.description }} {{ row.ecuId }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n ECM Serial Number\r\n \r\n \r\n
    \r\n {{ row.serialNumber }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n ECU Id\r\n \r\n \r\n
    \r\n {{ row.ecuId }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Firmware Part Number\r\n \r\n \r\n
    \r\n {{ row.softwarePartNumber }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Hardware Part Number\r\n \r\n \r\n
    \r\n {{ row.hardwarePartNumber }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Sync Clock Enabled\r\n \r\n \r\n
    \r\n {{ row.syncClockEnabled }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Sync Clock Level\r\n \r\n \r\n
    \r\n {{ row.syncClockMaster }}\r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n
    ","/* angular */\r\nimport { Component, OnInit, Input } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { Subject } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\n\r\n/* core */\r\nimport { DeviceItem, Radio, EcmItem } from '@rfv/modules/support/modules/device-info/models';\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table';\r\n\r\n/**\r\n * DeviceInfo RMS\r\n */\r\n@Component({\r\n selector: 'ple-table',\r\n templateUrl: 'ple-table.component.html',\r\n styleUrls: ['ple-table.component.scss']\r\n})\r\nexport class PleTableComponent implements OnInit {\r\n\r\n @Input() public open: boolean = false;\r\n\r\n /**\r\n * Table columns for Device, Radio, ECMs accordions\r\n */\r\n public deviceColumns: string[] = ['sha1', 'communicationMethod', 'commercialType', 'softwarePartNumber', 'serialNumber'];\r\n public radioColumns: string[] = ['communicationMethod', 'hardwarePartNumber', 'imei', 'meid', 'serialNumber', 'iccid', 'softwarePartNumber'];\r\n public ecmsColumns: string[] = ['basedescription', 'description', 'serialNumber', 'ecuId', 'softwarePartNumber', 'hardwarePartNumber', 'syncClockEnabled', 'syncClockMaster'];\r\n\r\n public deviceInfo = new InvolveDataSource([], data => this.deviceColumns);\r\n public radioInfo = new InvolveDataSource([], data => this.radioColumns);\r\n public ecmsInfo = new InvolveDataSource([], data => this.ecmsColumns);\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _store: Store,\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this._store.select(fromSupport.DeviceInfo.getDeviceInfo).pipe(takeUntil(this._destroyed$)).subscribe(data => {\r\n this.deviceInfo.data = data || [];\r\n })\r\n\r\n this._store.select(fromSupport.DeviceInfo.getRadioInfo).pipe(takeUntil(this._destroyed$)).subscribe(data => {\r\n this.radioInfo.data = data || [];\r\n })\r\n\r\n this._store.select(fromSupport.DeviceInfo.getEcmsInfo).pipe(takeUntil(this._destroyed$)).subscribe(data => {\r\n this.ecmsInfo.data = data || [];\r\n })\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}\r\n","\r\n
    \r\n

    Device Information

    \r\n
    \r\n
    \r\n
    \r\n {{ deviceInformationForm.Description }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    {{ deviceInformationForm.Name }}

    \r\n
    \r\n No associations found. Please contact Client Services.\r\n
    \r\n
    \r\n
    \r\n

    {{ deviceInformationForm.Name }}

    \r\n
    \r\n \r\n {{ deviceInformationForm.HeadingText }}\r\n \r\n
    \r\n
    \r\n {{ deviceInformationForm.SetupText }}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {{ item.DisplayText }}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n Device ID:\r\n {{(selectedDspItem$ | async)?.M2M?.GatewayId || '-'}}\r\n Unit ID:\r\n {{(selectedDspItem$ | async)?.SerialNumber || '-'}} \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n Loading devices list...\r\n Loading device association...\r\n Loading device information...\r\n Updating device association... \r\n
    \r\n
    \r\n
    ","/* angular */\r\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { combineLatest, Observable, Subject } from 'rxjs';\r\nimport { filter, map, mergeMap, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\n\r\n/* models */\r\nimport {\r\n DeviceInformationForm,\r\n DeviceItem,\r\n DSPAssociationItem,\r\n EcmItem,\r\n Radio\r\n} from '@rfv/modules/support/modules/device-info/models';\r\n\r\n/* permissions */\r\nimport { UserPermissionService } from '@rfv/modules/shared/services/user-permission.service';\r\nimport { FormControl } from '@angular/forms';\r\n\r\ninterface DeviceAssociation extends DSPAssociationItem {\r\n DisplayText: string;\r\n}\r\n\r\n/**\r\n * Device Info PLE\r\n */\r\n@Component({\r\n selector: 'device-info-ple',\r\n templateUrl: 'ple.component.html',\r\n styleUrls: ['ple.component.scss']\r\n})\r\nexport class DeviceInfoPleComponent implements OnInit, OnDestroy {\r\n public syncAssetName: boolean = false;\r\n public deviceInformationForm$: Observable;\r\n public isUnassociated$: Observable;\r\n\r\n public isLoaded$: Observable;\r\n public isLoading$: Observable;\r\n\r\n public isLocked$: Observable = this._store.select(fromSupport.Navigation.getUnitIsLocked);\r\n\r\n public isDevicesLoading$: Observable;\r\n public isDevicesLoaded$: Observable;\r\n\r\n public isSelectedDeviceLoading$: Observable;\r\n public isSelectedDeviceLoaded$: Observable;\r\n public isSelectedDeviceSaving$: Observable;\r\n\r\n public isSelectedDeviceInfoLoading$: Observable;\r\n public isSelectedDeviceInfoLoaded$: Observable;\r\n\r\n public dspItems$: Observable;\r\n public dspItems: DSPAssociationItem[];\r\n public selectedDspItem$: Observable;\r\n public currentDspItem: DSPAssociationItem;\r\n\r\n private _unitCreationLogId: number;\r\n\r\n public deviceInfo: DeviceItem[];\r\n public radioInfo: Radio[];\r\n public ecmsInfo: EcmItem[];\r\n\r\n public disableSave: boolean = true;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public editDevicePermission = false;\r\n\r\n public selectedDeviceControl = new FormControl(null);\r\n\r\n public constructor(\r\n private _store: Store,\r\n private _userPermissionService: UserPermissionService,\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n public ngOnInit(): void {\r\n this.editDevicePermission = this._userPermissionService.hasAccess('FLEETEDITOR_DEVICE_SELECT');\r\n // disable control\r\n if (!this.editDevicePermission) {\r\n this.selectedDeviceControl.disable();\r\n }\r\n\r\n /** Determines whether or not to display loading spinner */\r\n this.isDevicesLoading$ = this._store.select(fromSupport.DeviceInfo.isDspAssociationItemsLoading);\r\n this.isDevicesLoaded$ = this._store.select(fromSupport.DeviceInfo.isDspAssociationItemsLoaded);\r\n\r\n this.isSelectedDeviceLoading$ = this._store.select(fromSupport.DeviceInfo.isSelectedDeviceLoading);\r\n this.isSelectedDeviceLoaded$ = this._store.select(fromSupport.DeviceInfo.isSelectedDeviceLoaded);\r\n this.isSelectedDeviceSaving$ = this._store.select(fromSupport.DeviceInfo.isSelectedDeviceSaving);\r\n\r\n this.isSelectedDeviceInfoLoading$ = this._store.select(fromSupport.DeviceInfo.isSelectedDeviceInfoLoading);\r\n this.isSelectedDeviceInfoLoaded$ = this._store.select(fromSupport.DeviceInfo.isSelectedDeviceInfoLoaded);\r\n\r\n this.isLoading$ = combineLatest([\r\n this.isDevicesLoading$,\r\n this.isSelectedDeviceLoading$,\r\n this.isSelectedDeviceInfoLoading$,\r\n this.isSelectedDeviceSaving$\r\n ]).pipe(\r\n map(([a, b, c, d]) => a || b || c || d)\r\n );\r\n\r\n this.isLoaded$ = combineLatest([\r\n this.isDevicesLoaded$,\r\n this.isSelectedDeviceLoaded$,\r\n this.isSelectedDeviceInfoLoaded$,\r\n ]).pipe(\r\n map(([a, b, c]) => a && b && c)\r\n )\r\n\r\n // get form data\r\n this.deviceInformationForm$ = this._store.select(fromSupport.DeviceInfo.getForm);\r\n this.isUnassociated$ = this._store.select(fromSupport.DeviceInfo.getAssociationFilter);\r\n\r\n\r\n // load current association\r\n this._store.pipe(\r\n select(fromSupport.Navigation.getNavigation),\r\n takeUntil(this._destroyed$),\r\n tap(navigation => {\r\n this._unitCreationLogId = navigation.UnitCreationLogId;\r\n\r\n // virtual device?\r\n if (navigation.UnitCreationTypeId === 5)\r\n this.disableSave = false;\r\n\r\n if (navigation.AssetName === `Untitled Asset ${navigation.UnitCreationLogId}`) this.syncAssetName = true;\r\n }),\r\n map(navigation => fromSupport.DeviceInfo.LoadPleDeviceAssociation(navigation.AssetId))\r\n ).subscribe(this._store);\r\n\r\n // load initial device list\r\n this._store.pipe(\r\n select(fromSupport.DeviceInfo.isSelectedDeviceLoaded),\r\n filter(isSelectedDeviceLoaded => !!isSelectedDeviceLoaded),\r\n takeUntil(this._destroyed$),\r\n switchMap(() => this._store.pipe(\r\n select(fromSupport.DeviceInfo.getSelectedDevice),\r\n mergeMap(selectedDevice => selectedDevice && selectedDevice.Make && selectedDevice.SerialNumber\r\n ? [\r\n fromSupport.DeviceInfo.LoadDspAssociationItems(false),\r\n fromSupport.DeviceInfo.LoadPleDeviceInformation(selectedDevice.Make, selectedDevice.SerialNumber)\r\n ] : [\r\n fromSupport.DeviceInfo.LoadDspAssociationItems(true)\r\n ]\r\n )\r\n ))\r\n ).subscribe(this._store);\r\n\r\n // load dropdown items\r\n this.dspItems$ = this._store.pipe(\r\n select(fromSupport.DeviceInfo.getDPSAssociationItems),\r\n tap(dspItems => this.dspItems = dspItems),\r\n map(dspItems => dspItems.map(dspItem => ({\r\n DisplayText: dspItem.Make + ' - ' + dspItem.SerialNumber,\r\n ...dspItem\r\n })))\r\n );\r\n\r\n // load selected item\r\n this.selectedDspItem$ = combineLatest([\r\n this.dspItems$,\r\n this._store.select(fromSupport.DeviceInfo.getSelectedDevice).pipe(\r\n filter(v => !!v)\r\n )\r\n ]).pipe(\r\n map(([dspItems, selectedDspItem]) => dspItems.find(dspItem => dspItem.Make === selectedDspItem.Make && dspItem.SerialNumber === selectedDspItem.SerialNumber)),\r\n tap(item => {\r\n if (item && item.SerialNumber !== this.currentDspItem?.SerialNumber) {\r\n this.currentDspItem = item;\r\n this.selectedDeviceControl.patchValue(item.DisplayText);\r\n }\r\n })\r\n );\r\n\r\n // handle selectedDSP change\r\n this.selectedDeviceControl.valueChanges.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(displayText => {\r\n this.disableSave = false;\r\n if(displayText) {\r\n const [make, serialNumber] = displayText?.split(' - ');\r\n if (make && serialNumber) {\r\n this.currentDspItem = this.dspItems.find(item => item.SerialNumber === serialNumber);//fixes 'Make' of undefined error\r\n this._store.dispatch(fromSupport.DeviceInfo.LoadPleDeviceInformation(make, serialNumber));\r\n }\r\n }\r\n })\r\n\r\n\r\n combineLatest([\r\n this._store.select(fromSupport.DeviceInfo.getDeviceInfo),\r\n this._store.select(fromSupport.DeviceInfo.getRadioInfo),\r\n this._store.select(fromSupport.DeviceInfo.getEcmsInfo)\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([device, radio, ecms]) => {\r\n this.deviceInfo = device;\r\n this.radioInfo = radio;\r\n this.ecmsInfo = ecms;\r\n })\r\n\r\n }\r\n \r\n ngAfterContentChecked() {\r\n this._cdr.detectChanges();\r\n }\r\n\r\n public loadDspItems(unassociated: boolean) {\r\n this._store.dispatch(fromSupport.DeviceInfo.LoadDspAssociationItems(unassociated));\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n /**\r\n * This is a function that emits the onSave event containing\r\n * the form values to a parent component\r\n */\r\n public save(next: boolean = false) {\r\n this._store.dispatch(fromSupport.DeviceInfo.SavePleDeviceAssociation(this._unitCreationLogId, this.currentDspItem, this.syncAssetName, next));\r\n }\r\n\r\n}\r\n","\r\n \r\n
    \r\n

    Device Information

    \r\n \r\n
    \r\n \r\n {{ formConfig.Description ? formConfig.Description : 'No description available.' }}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {{ formConfig.Name }}

    \r\n
    \r\n \r\n {{ formConfig.HeadingText }}\r\n \r\n
    \r\n
    \r\n {{ formConfig.SetupText }}\r\n
    \r\n
    \r\n \r\n \r\n {{ formConfig.AcknowledgeText }}\r\n \r\n \r\n \r\n Clear Serial Number\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n\r\n","import { ModalContentType } from './../../../../../store/modal/options';\r\nimport { ModalType } from './../../../../modal/models/modal.model';\r\nimport { startWith, withLatestFrom } from 'rxjs/operators';\r\n/* angular */\r\nimport { Component, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { FormBuilder, UntypedFormGroup, Validators, FormControl } from '@angular/forms';\r\n\r\n/* rxjs */\r\nimport { Observable, Subject, combineLatest, of } from 'rxjs';\r\nimport { filter, takeUntil, tap, map, switchMap } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { HardwareType, ParseType, DeviceInformationForm } from '@rfv/modules/support/modules/device-info/models';\r\n\r\n/**\r\n * DeviceInfo RMS\r\n */\r\n@Component({\r\n selector: 'device-info-rms',\r\n templateUrl: 'rms.component.html',\r\n styleUrls: ['rms.component.scss']\r\n})\r\nexport class DeviceInfoRmsComponent implements OnInit, OnDestroy {\r\n @Input()\r\n public readOnly: boolean = false;\r\n\r\n public isLoading$: Observable;\r\n public isLoaded$: Observable;\r\n public isLocked$: Observable = this._store.select(fromSupport.Navigation.getUnitIsLocked);\r\n \r\n public formConfig$: Observable;\r\n public hardwareTypes$: Observable;\r\n public parseTypes$: Observable;\r\n\r\n public form: UntypedFormGroup;\r\n\r\n private _unitCreationLogId: number;\r\n private _regex: string;\r\n\r\n private _destroyed$ = new Subject();\r\n private _reset$ = new Subject();\r\n\r\n public isEdit: boolean;//only show clear serial number if edit\r\n\r\n public constructor(\r\n private _store: Store,\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n public ngOnInit(): void {\r\n this.initializeForm();\r\n this._store.dispatch(fromSupport.DeviceInfo.LoadForm(2));\r\n\r\n if (this.readOnly)\r\n this._store.pipe(\r\n select(fromCore.Support.UnitCreationLogs.getUnitCreationLogByAssetId),\r\n takeUntil(this._destroyed$),\r\n tap(unitCreationLog => this._unitCreationLogId = unitCreationLog?.Id),\r\n filter(unitCreationLog => unitCreationLog?.DeviceId > 0),\r\n map(unitCreationLog => fromSupport.DeviceInfo.LoadRMSDeviceInfo(unitCreationLog.Id))\r\n ).subscribe(this._store);\r\n else\r\n this._store.pipe(\r\n select(fromSupport.Navigation.getNavigation),\r\n takeUntil(this._destroyed$),\r\n tap(navigation => this._unitCreationLogId = navigation?.UnitCreationLogId),\r\n filter(navigation => navigation?.DeviceId > 0),\r\n map(navigation => fromSupport.DeviceInfo.LoadRMSDeviceInfo(navigation.UnitCreationLogId))\r\n ).subscribe(this._store);\r\n\r\n this.formConfig$ = this._store.select(fromSupport.DeviceInfo.getForm);\r\n this.hardwareTypes$ = this._store.select(fromSupport.DeviceInfo.getFormHardwareTypes);\r\n this.parseTypes$ = this._store.select(fromSupport.DeviceInfo.getFormParseTypes);\r\n\r\n this.isLoading$ = combineLatest([\r\n this._store.select(fromSupport.DeviceInfo.isFormLoading),\r\n this._store.select(fromSupport.DeviceInfo.isRmsDeviceInfoLoading)\r\n ]).pipe(\r\n map(([a, b]) => a || b)\r\n )\r\n\r\n this.isLoaded$ = combineLatest(\r\n this._store.select(fromSupport.DeviceInfo.isFormLoaded),\r\n this._store.pipe(\r\n select(fromSupport.Navigation.getDeviceId),\r\n switchMap(deviceId => deviceId > 0 ? this._store.select(fromSupport.DeviceInfo.isRmsDeviceInfoLoaded) : of(true))\r\n )\r\n ).pipe(\r\n map(([a, b]) => a && b)\r\n )\r\n\r\n combineLatest([\r\n this._store.pipe(\r\n select(fromSupport.DeviceInfo.getRmsDeviceInfo)\r\n ),\r\n this._reset$.pipe(\r\n startWith(null)\r\n ),\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([deviceInfo]) => {\r\n this.isEdit = !!deviceInfo;\r\n\r\n if (!deviceInfo)\r\n this.initializeForm();\r\n else {\r\n this.form.patchValue({\r\n ...deviceInfo,\r\n IsAcknowledged: true\r\n });\r\n this.form.updateValueAndValidity();\r\n }\r\n });\r\n\r\n this.form.get('ClearSerialNumber').valueChanges.pipe(\r\n takeUntil(this._destroyed$),\r\n withLatestFrom(this._store.pipe(\r\n select(fromSupport.DeviceInfo.getRmsDeviceInfo),\r\n filter(info => !!info)\r\n ))\r\n ).subscribe(([clear, deviceInfo]) => {\r\n const serialNumber: FormControl = this.form.get('SerialNumber') as FormControl;\r\n // console.log(clear);\r\n if (clear) {\r\n serialNumber.clearValidators();\r\n serialNumber.disable();\r\n }\r\n else {\r\n serialNumber.setValidators([\r\n Validators.required,\r\n Validators.pattern(this._regex)\r\n ]);\r\n serialNumber.enable();\r\n }\r\n\r\n serialNumber.markAsPristine();\r\n })\r\n\r\n this._store.pipe(\r\n select(fromSupport.DeviceInfo.getForm),\r\n filter(form => !!form),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(form => {\r\n this._regex = form.SNRegex;\r\n this.form.get('SerialNumber').setValidators([\r\n Validators.required,\r\n Validators.pattern(form.SNRegex)\r\n ]);\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public cancel() {\r\n this._reset$.next();\r\n }\r\n\r\n public initializeForm() {\r\n this.form = this._fb.group({\r\n Id: [null],\r\n IsAcknowledged: [false, [Validators.requiredTrue]],\r\n SerialNumber: [null, [Validators.required]],\r\n HardwareTypeId: [null, [Validators.required]],\r\n ParseTypeId: [null, [Validators.required]],\r\n PostsInGMT: [true],\r\n IsDisabled: [false], // needed in backend\r\n ClearSerialNumber: [false]\r\n });\r\n }\r\n\r\n public save(next: boolean = false) {\r\n if (this.form.invalid)\r\n return;\r\n\r\n if (this.form.value.ClearSerialNumber)\r\n this._store.dispatch(fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--large',\r\n customWidth: '20%',\r\n modalType: ModalType.OkCancel,\r\n contentType: ModalContentType.DeviceInfoClear,\r\n\r\n title: 'Confirm Serial Number',\r\n data: null,\r\n primaryText: 'Confirm',\r\n primaryAction: fromSupport.DeviceInfo.SaveRMSDeviceInfo(\r\n this._unitCreationLogId,\r\n this.form.value,\r\n next\r\n ),\r\n secondaryText: 'Cancel'\r\n }\r\n }));\r\n else\r\n this._store.dispatch(fromSupport.DeviceInfo.SaveRMSDeviceInfo(\r\n this._unitCreationLogId,\r\n this.form.value,\r\n next\r\n ));\r\n }\r\n}","
    \r\n \r\n
    \r\n\r\n
    \r\n
    {{content}}
    \r\n
    \r\n
    ","import { Component, OnInit, Input, HostBinding, HostListener } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ToolTip } from '@rfv/modules/core/models';\r\n\r\n// ngrx\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\nexport type tooltipAlignments =\r\n'tooltipBottomLeft' |\r\n'tooltipBottomCenter' |\r\n'tooltipBottomRight' |\r\n'tooltipTopLeft' |\r\n'tooltipTopCenter' |\r\n'tooltipTopRight' |\r\n'tooltipLeftTop' |\r\n'tooltipLeftCenter' |\r\n'tooltipLeftBottom' |\r\n'tooltipRightTop' |\r\n'tooltipRightCenter' |\r\n'tooltipRightBottom' |\r\n'tooltipInline';\r\n\r\nexport type tooltipAlignmentClasses =\r\n'tooltip--bottom-left' |\r\n'tooltip--bottom-center' |\r\n'tooltip--bottom-right' |\r\n'tooltip--top-left' |\r\n'tooltip--top-center' |\r\n'tooltip--top-right' |\r\n'tooltip--left-top' |\r\n'tooltip--left-center' |\r\n'tooltip--left-bottom' |\r\n'tooltip--right-top' |\r\n'tooltip--right-center' |\r\n'tooltip--right-bottom' |\r\n'tooltip--inline';\r\n\r\nexport enum tooltipAlignmentClassesEnum {\r\n tooltipBottomLeft = 'tooltip--bottom-left',\r\n tooltipBottomCenter = 'tooltip--bottom-center',\r\n tooltipBottomRight = 'tooltip--bottom-right',\r\n tooltipTopLeft = 'tooltip--top-left',\r\n tooltipTopCenter = 'tooltip--top-center',\r\n tooltipTopRight = 'tooltip--top-right',\r\n tooltipLeftTop = 'tooltip--left-top',\r\n tooltipLeftCenter = 'tooltip--left-center',\r\n tooltipLeftBottom = 'tooltip--left-bottom',\r\n tooltipRightTop = 'tooltip--right-top',\r\n tooltipRightCenter = 'tooltip--right-center',\r\n tooltipRightBottom = 'tooltip--right-bottom',\r\n tooltipInline = 'tooltip--inline'\r\n}\r\n\r\n@Component({\r\n selector: 'dynamic-tooltip',\r\n templateUrl: './dynamic-tooltip.component.html',\r\n})\r\nexport class DynamicTooltipComponent implements OnInit {\r\n @Input() baseClasses = 'tooltip w-max-content';\r\n @Input() customClasses = '';\r\n @Input() alignment: tooltipAlignments = 'tooltipRightCenter';\r\n @HostBinding('class') tooltipClasses = '';\r\n @Input() codeTag = '';\r\n\r\n _destroyed$ = new Subject();\r\n\r\n toolTips$: Observable;\r\n\r\n content: string = '';\r\n\r\n positions: ConnectedPosition[] = [\r\n {originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center'}\r\n ];\r\n\r\n open: boolean = false;\r\n @HostListener('mouseenter') onMouseEnter() {\r\n this.open = true;\r\n }\r\n @HostListener('mouseleave') onMouseELeave() {\r\n this.open = false;\r\n }\r\n\r\n constructor(private _store$: Store) { }\r\n\r\n ngOnInit(): void {\r\n\r\n this._store$.select(fromCore.ToolTips.getAll).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe((tooltips) => {\r\n if (tooltips && this.codeTag != \"\") {\r\n let tooltip = tooltips.find(t => t.CodeTag == this.codeTag);\r\n this.content = tooltip.ToolTipText;\r\n }\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-error',\r\n templateUrl: './error.component.html',\r\n styleUrls: ['./error.component.scss']\r\n})\r\nexport class ErrorComponent {\r\n @Input() iconMssgPosition: 'row' | 'col' = 'col';\r\n @Input() iconName: 'troubleshoot' | 'warning-outlined' | 'check' = 'troubleshoot';\r\n @Input() errorMessage: string;\r\n\r\n constructor() { }\r\n\r\n getErrMssgClasses(): Object {\r\n return {\r\n 'w-full [ font-size-14 pre-line ]': true,\r\n 'text-center': this.iconMssgPosition === 'col',\r\n 'text-left': this.iconMssgPosition === 'row'\r\n };\r\n }\r\n\r\n getErrContainerClasses(): Object {\r\n return {\r\n '[ w-full h-full ] ph-4 [ flex justify-center align-center ]': true,\r\n };\r\n }\r\n\r\n getErrorContentClasses(): Object {\r\n return {\r\n 'flex align-center w-full': true,\r\n 'direction-column': this.iconMssgPosition === 'col',\r\n 'direction-row': this.iconMssgPosition === 'row'\r\n };\r\n }\r\n}\r\n","
    \r\n
    \r\n \r\n \r\n \r\n {{ errorMessage }}\r\n
    \r\n
    \r\n","\r\n\r\n -1 ? color : '#' + color\">\r\n \r\n \r\n {{ label }} = 0\">({{ count }})\r\n \r\n |\r\n\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-filter-group-button',\r\n templateUrl: './filter-group-button.component.html',\r\n styleUrls: ['./filter-group-button.component.scss']\r\n})\r\nexport class FilterGroupButtonComponent {\r\n @Input() data: any;\r\n @Input() label: string;\r\n @Input() color: string;\r\n @Input() count: number;\r\n @Input() active: boolean;\r\n @Input() separator: boolean;\r\n @Output() filterGroupClicked = new EventEmitter();\r\n\r\n constructor() {\r\n }\r\n\r\n /**\r\n * Only emit event with label after click on this button\r\n */\r\n onFilterButtonClicked(): void {\r\n this.filterGroupClicked.emit({ label: this.label, data: this.data });\r\n }\r\n}\r\n\r\nexport interface FilterGroupData {\r\n label: string;\r\n data: any;\r\n}\r\n","export const formMessages = {\r\n 1: 'Input field must not be empty',\r\n 2: 'Please enter a number',\r\n 3: 'Select valid value',\r\n 4: 'Numbers only. 0 for no repeating, 30 to 1440 for actual interval',\r\n 5: 'Please enter a number (0 or bigger)',\r\n 6: 'Invalid email format',\r\n 7: 'Invalid phone number. Valid characters: numbers, space, dash (\"-\"), and brackets. Minium five numbers.',\r\n 8: 'Invalid text provider. Numbers only (minimum five) before the provider address.',\r\n 9: 'Invalid value',\r\n 10: 'Please enter a number (1 or greater)',\r\n 11: 'At least one value must be checked',\r\n 12: 'please enter a number (0 to 5000)',\r\n 13: 'please enter a number (0 to 3600)',\r\n 14: 'You have reached maximum length of 200 characters',\r\n //do not add anymore since this file will soon be deleted...\r\n};\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AppColors } from '../../types/app-colors';\r\n\r\n@Component({\r\n selector: 'rfv-form-validation-error',\r\n templateUrl: './form-validation-error.component.html',\r\n styleUrls: ['./form-validation-error.component.scss']\r\n})\r\nexport class FormValidationErrorComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n get AppColors() {\r\n return AppColors;\r\n }\r\n\r\n}\r\n","
    \r\n \r\n \r\n \r\n \r\n
    \r\n","\r\n\r\n\r\n
    \r\n \r\n \r\n
    \r\n","import * as _ from 'lodash';\r\n\r\nimport { Component, Input, OnInit, OnDestroy, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\n\r\nimport { Subject, combineLatest } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { UnitDataPoint } from '@rfv/modules/dashboard/modules/unit-data/models';\r\nimport { DatapointIdentifier, GaugeType, UnitOfMeasure } from '@rfv/modules/core/models';\r\n\r\nimport Highcharts from 'highcharts';\r\n\r\nconst FIRST_LAST_FUNCTION = function () {\r\n if (this.isLast || this.isFirst)\r\n return this.value;\r\n}\r\n\r\n/**\r\n * Gauge component.\r\n */\r\n@Component({\r\n selector: 'involve-gauge',\r\n exportAs: \"gauge\",\r\n templateUrl: 'gauge.component.html',\r\n styleUrls: ['gauge.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class InvolveGaugeComponent implements OnInit, OnDestroy {\r\n @Input()\r\n public datapoint: UnitDataPoint;\r\n\r\n @Input()\r\n public width: number = 275;\r\n\r\n @Input()\r\n public height: number = 275;\r\n\r\n /**\r\n * If not null, the gauge series will display this value instead of the datapoint value.\r\n */\r\n @Input()\r\n public displayValue: number | null;\r\n\r\n public chartOptions: Highcharts.Options;\r\n\r\n public Highcharts: typeof Highcharts = Highcharts;\r\n\r\n private _chart: Highcharts.Chart;\r\n\r\n private _themeId: number;\r\n\r\n private _datapointIdentifiers: DatapointIdentifier[];\r\n private _gaugeTypes: GaugeType[];\r\n private _unitsOfMeasure: UnitOfMeasure[];\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public ngOnInit() {\r\n combineLatest([\r\n this._store.select(fromCore.UserSession.getSessionThemeId),\r\n this._store.select(fromCore.DataPoints.Identifiers.getAll),\r\n this._store.select(fromCore.GaugeTypes.getAll),\r\n this._store.select(fromCore.UnitsOfMeasure.getAll)\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([themeId, datapointIdentifiers, gaugeTypes, unitsOfMeasure]) => {\r\n this._themeId = themeId;\r\n this._datapointIdentifiers = datapointIdentifiers;\r\n this._gaugeTypes = gaugeTypes;\r\n this._unitsOfMeasure = unitsOfMeasure;\r\n });\r\n\r\n this.chartOptions = this.createChart(this.datapoint);\r\n }\r\n\r\n public readonly onChartCreated = ((chart: Highcharts.Chart) => {\r\n this._chart = chart;\r\n }).bind(this);\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if (!this._chart)\r\n return;\r\n\r\n if ('datapoint' in changes) \r\n this.chartOptions = this.createChart(this.datapoint);\r\n\r\n if ('width' in changes || 'height' in changes) \r\n this._chart?.setSize(this.width, this.height);\r\n\r\n if ('displayValue' in changes) { \r\n if (this.displayValue !== null)\r\n this._chart.series[0].data[0]?.update({ y: this.displayValue }, true)\r\n else\r\n this._chart.series[0].data[0]?.update({ y: this.datapoint.Value }, true)\r\n }\r\n }\r\n\r\n private createChart(datapoint: UnitDataPoint) {\r\n // sanity check\r\n if (!datapoint.DisplaySetting)\r\n return null;\r\n\r\n // try to set default gauge type based on datapoint identifier\r\n const dpi = this._datapointIdentifiers.find(dpi => dpi.id === datapoint.DisplaySetting.DataPointIdentifierId);\r\n\r\n let gaugeTypeId = dpi?.gaugeTypeId;\r\n\r\n // no gauge for invalid datapoints (will show a data-item instead)\r\n if (datapoint.StatusInvalid)\r\n return null;\r\n\r\n // try to use the gauge type associated with the datapoint unit of measure\r\n if (datapoint.DisplaySetting.UnitsOfMeasureId) {\r\n const uom = this._unitsOfMeasure.find(uom => uom.Id === datapoint.DisplaySetting.UnitsOfMeasureId);\r\n\r\n if (uom?.GaugeTypeId)\r\n gaugeTypeId = uom.GaugeTypeId;\r\n }\r\n\r\n // find GaugeType\r\n const gaugeType = this._gaugeTypes.find(gaugeType => gaugeType.Id === gaugeTypeId);\r\n\r\n if (!gaugeType)\r\n return null;\r\n\r\n // TODO(modonnell): this should come from the global colors table?\r\n const backgroundColor = this._themeId === 2 ? '#DDDDDD' : '#828282';\r\n const labelColor = this._themeId === 2 ? '#000000' : '#ffffff';\r\n\r\n // determine marker opacity based on alarm state and datapoint status\r\n let marker1opacity = 0.1; // red\r\n let marker2opacity = 0.1; // yellow\r\n let marker3opacity = 0.1; // green\r\n\r\n switch (datapoint.AlarmStateId) {\r\n case 1: // present - red\r\n marker1opacity = 1;\r\n break;\r\n case 3: // invalid - yellow\r\n marker2opacity = 1;\r\n break;\r\n default:\r\n if (datapoint.StatusInvalid) {\r\n // yellow\r\n marker2opacity = 1;\r\n } else {\r\n // green\r\n marker3opacity = 1;\r\n }\r\n break;\r\n }\r\n\r\n // don't show sparks for legends\r\n if (datapoint.LegendValue)\r\n return;\r\n\r\n const expand = (json: string) => json\r\n .replace(/\\[\\[LABEL_COLOR\\]\\]/g, labelColor)\r\n .replace(/\\[\\[BACKGROUND_COLOR\\]\\]/g, backgroundColor)\r\n .replace(/\\[\\[DATAPOINT_VALUE\\]\\]/g, `${datapoint.Value}`)\r\n .replace(/\\[\\[UOM\\]\\]/g, `${datapoint.Units}`)\r\n .replace(/\\[\\[DATAPOINT_MIN\\]\\]/g, `${datapoint.DisplaySetting.MinValue}`)\r\n .replace(/\\[\\[DATAPOINT_MAX\\]\\]/g, `${datapoint.DisplaySetting.MaxValue}`)\r\n .replace(/\\[\\[ALARM_LOWESTHIGH\\]\\]/g, `${datapoint.AlarmLowestHigh}`)\r\n .replace(/\\[\\[ALARM_HIGHESTLOW\\]\\]/g, `${datapoint.AlarmHighestLow}`)\r\n .replace(/\\[\\[ACTIVE_OPACITY\\]\\]/g, `1`)\r\n .replace(/\\[\\[INACTIVE_OPACITY\\]\\]/g, `.1`)\r\n .replace(/\\[\\[MARKER1_OPACITY\\]\\]/g, marker1opacity.toString())\r\n .replace(/\\[\\[MARKER2_OPACITY\\]\\]/g, marker2opacity.toString())\r\n .replace(/\\[\\[MARKER3_OPACITY\\]\\]/g, marker3opacity.toString())\r\n .replace(/\\[\\[ALARM_COLOR\\]\\]/g, `#${datapoint.AlarmColor || '008BDA'}`)\r\n .replace(/\\[\\[DATAPOINT_MAX\\-VALUE\\]\\]/g, `${datapoint.DisplaySetting.MaxValue - datapoint.Value}`)\r\n ;\r\n\r\n // expand template json placeholders\r\n const baseJson = expand(gaugeType.BaseTemplateJSON);\r\n const gaugeJson = expand(gaugeType.JSON);\r\n\r\n // set template base options\r\n let chartOptions: Highcharts.Options = {\r\n chart: {\r\n width: this.width,\r\n height: this.height,\r\n backgroundColor: 'transparent'\r\n },\r\n\r\n exporting: {\r\n enabled: false\r\n }\r\n };\r\n\r\n // try to parse json\r\n try {\r\n const base = JSON.parse(baseJson);\r\n chartOptions = _.merge(chartOptions, base);\r\n } catch (err) {\r\n console.warn(`Failed to parse gauge base template!`, err, baseJson);\r\n return null;\r\n }\r\n\r\n try {\r\n const gauge = JSON.parse(gaugeJson);\r\n chartOptions = _.merge(chartOptions, gauge);\r\n } catch (err) {\r\n console.warn(`Failed to parse gauge template!`, err, gaugeJson);\r\n return null;\r\n }\r\n\r\n // convert any function definition placeholders to real functions\r\n chartOptions = this.expandFunctions(chartOptions);\r\n\r\n return chartOptions;\r\n }\r\n\r\n private expandFunctions(object: {}) {\r\n for (var key in object) {\r\n if (typeof object[key] === 'string') {\r\n switch (object[key]) {\r\n case '[[FIRST_LAST_FUNCTION]]':\r\n object[key] = FIRST_LAST_FUNCTION;\r\n break;\r\n }\r\n } else if (typeof object[key] === 'object') {\r\n object[key] = this.expandFunctions(object[key]);\r\n }\r\n }\r\n\r\n return object;\r\n }\r\n}","\r\n","import * as _ from 'lodash';\r\n\r\nimport { Component, Input, ViewEncapsulation, OnInit, Output, EventEmitter, SimpleChanges, SecurityContext, NgZone } from '@angular/core';\r\n\r\nimport { Options as ChartOptions } from 'highcharts';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\nimport Highcharts from 'highcharts';\r\n\r\nexport interface ISparkValue {\r\n label?: string;\r\n color?: string;\r\n value: number;\r\n}\r\n\r\nexport interface ISparkUnitAlarmThreshold {\r\n name: string;\r\n test: string;\r\n threshold: number;\r\n}\r\n\r\n@Component({\r\n selector: 'involve-spark-chart',\r\n templateUrl: 'spark-chart.component.html',\r\n styleUrls: ['spark-chart.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class InvolveSparkChartComponent implements OnInit {\r\n @Input()\r\n public width = 275;\r\n\r\n @Input()\r\n public height = 30;\r\n\r\n @Input()\r\n public values: ISparkValue[];\r\n\r\n @Input()\r\n public uom: string;\r\n\r\n @Input()\r\n public highestLow: number = 0;\r\n\r\n @Input()\r\n public lowestHigh: number = 0;\r\n\r\n @Input()\r\n public datapointMin: number = 0;\r\n\r\n @Input()\r\n public datapointMax: number = 0;\r\n\r\n @Input()\r\n public alarmColor: string = '#ff0000';\r\n\r\n @Input()\r\n public alarmThresholds: ISparkUnitAlarmThreshold[] = [];\r\n\r\n @Output()\r\n public currentValue = new EventEmitter();\r\n\r\n public chartOptions: Highcharts.Options;\r\n\r\n public Highcharts: typeof Highcharts = Highcharts;\r\n\r\n private _chart: Highcharts.Chart;\r\n\r\n public constructor(public domSanitizer: DomSanitizer, private _zone: NgZone) { }\r\n\r\n public ngOnInit() {\r\n const options: ChartOptions = {\r\n chart: {\r\n margin: [0, 0, 0, 0],\r\n width: this.width,\r\n height: this.height,\r\n style: {\r\n overflow: 'visible'\r\n },\r\n backgroundColor: null\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n title: {\r\n text: ''\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n xAxis: {\r\n labels: {\r\n enabled: false\r\n },\r\n tickLength: 0\r\n },\r\n yAxis: {\r\n title: {\r\n text: null\r\n },\r\n maxPadding: 1,\r\n minPadding: 1,\r\n gridLineWidth: 0,\r\n startOnTick: false,\r\n endOnTick: false,\r\n labels: {\r\n enabled: false\r\n },\r\n plotLines: this.alarmThresholds.map(alarmThreshold => ({\r\n color: '#FF0000',\r\n width: 2,\r\n value: alarmThreshold.threshold,\r\n dashStyle: 'ShortDot'\r\n })),\r\n },\r\n tooltip: {\r\n enabled: true,\r\n borderWidth: 0,\r\n shadow: false,\r\n useHTML: true,\r\n outside: true,\r\n hideDelay: 0,\r\n padding: 2,\r\n headerFormat: '',\r\n footerFormat: '',\r\n className: 'spark-chart-tooltip',\r\n pointFormat: this.getTooltipFormat(),\r\n },\r\n series: [{\r\n type: 'line',\r\n name: this.uom,\r\n data: this.values.map((value, index) => ({ x: index, y: value.value, label: value.label, color: value.color || '#008BDA' })),\r\n }],\r\n plotOptions: {\r\n series: {\r\n enableMouseTracking: true,\r\n lineWidth: 2,\r\n color: '#008BDA',\r\n shadow: false,\r\n point: {\r\n events: {\r\n mouseOver: ((self: InvolveSparkChartComponent) => {\r\n return function () {\r\n self._zone.run(() => { self.currentValue.emit(this.y); });\r\n }\r\n })(this)\r\n }\r\n },\r\n events: {\r\n mouseOut: ((self: InvolveSparkChartComponent) => {\r\n return function () {\r\n self._zone.run(() => { self.currentValue.emit(null); });\r\n }\r\n })(this)\r\n },\r\n states: {\r\n hover: {\r\n lineWidth: 1\r\n }\r\n },\r\n marker: {\r\n radius: 0\r\n },\r\n zoneAxis: 'y'\r\n }\r\n },\r\n };\r\n\r\n if (this.highestLow > this.datapointMin && this.lowestHigh < this.datapointMax) {\r\n options.plotOptions.series.zones = [\r\n { value: this.highestLow, color: this.alarmColor },\r\n { value: this.lowestHigh, color: '#008BDA' },\r\n { color: this.alarmColor }\r\n ];\r\n }\r\n\r\n this.chartOptions = options;\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges) {\r\n if (!this._chart)\r\n return;\r\n\r\n if ('values' in changes) {\r\n this._chart?.update({\r\n series: [{\r\n type: 'line',\r\n name: this.uom,\r\n data: this.values.map((value, index) => ({ x: index, y: value.value, label: value.label, color: value.color || '#008BDA' })),\r\n }]\r\n }, true, true);\r\n }\r\n }\r\n\r\n private getTooltipFormat = (): string => `
    ${this.getAlarmThresholdsTooltip()}${this.getPointTooltip()}
    `;\r\n\r\n private getPointTooltip = (): string => `{point.label}: {point.y} {series.name}`;\r\n\r\n private getAlarmThresholdsTooltip = (): string => `${this.alarmThresholds === undefined || this.alarmThresholds.length === 0\r\n ? ``\r\n : `\r\n \r\n \r\n \r\n \r\n ${this.alarmThresholds.reduce((acc, alarm) => `\r\n ${acc}\r\n \r\n \r\n \r\n \r\n `, '')\r\n }\r\n
    Alarm NameThreshold
    ${this.domSanitizer.sanitize(SecurityContext.HTML, alarm.name)}${this.domSanitizer.sanitize(SecurityContext.HTML, alarm.test + alarm.threshold)}
    `\r\n }`;\r\n\r\n public readonly onChartCreated = ((chart: Highcharts.Chart) => {\r\n this._chart = chart;\r\n }).bind(this);\r\n\r\n}\r\n","
    \r\n \r\n \r\n
    \r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n {{ group.name }} ({{ group.datapoints.length }})\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n
    \r\n
    \r\n
    \r\n \r\n {{datapoint.value.DisplayGroup}} \r\n {{ datapoint.value.Name }}\r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n 1\">\r\n \r\n \r\n \r\n
    \r\n \r\n Min: {{ (showRunning$ | async) === true ? datapoint.value.Running24HrMin : datapoint.value.Last24HrMin }}\r\n \r\n \r\n Max: {{ (showRunning$ | async) === true ? datapoint.value.Running24HrMax : datapoint.value.Last24HrMax }}\r\n \r\n \r\n Avg: {{ (showRunning$ | async) === true ? datapoint.value.Running24HrAvg : datapoint.value.Last24HrAvg }}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n Historical data not available.\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n {{ datapoint.value.SampleTime | rfvDateTime }}\r\n
    \r\n
    \r\n
    \r\n
    \r\n","import * as _ from 'lodash';\r\nimport moment from 'moment';\r\n\r\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport { BehaviorSubject, Observable, Subject, combineLatest, of } from 'rxjs';\r\nimport { debounceTime, filter, map, mergeMap, takeUntil, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { AlarmTest, AssetAlarm, DisplayGroup } from '@rfv/modules/core/models';\r\nimport { TableFilter } from '@rfv/modules/shared/model/table-filter.model';\r\n\r\nimport { ISparkUnitAlarmThreshold, ISparkValue } from '@rfv/modules/involve/spark-chart/spark-chart.component';\r\n\r\nimport { UnitDataPoint } from '@rfv/modules/dashboard/modules/unit-data/models';\r\n\r\ninterface IRfvGaugeViewDatapoint {\r\n value: UnitDataPoint;\r\n\r\n spark$: Observable;\r\n sparkValue$: Observable;\r\n}\r\ninterface IRfvGaugeView {\r\n name: string; // group name\r\n datapoints: IRfvGaugeViewDatapoint[];\r\n}\r\n\r\n@Component({\r\n selector: 'rfv-gauge-view',\r\n templateUrl: 'gauge-view.component.html',\r\n styleUrls: ['gauge-view.component.scss'],\r\n host: {\r\n '[style.height.%]': '100'\r\n }\r\n})\r\nexport class RfvGaugeViewComponent implements OnInit, OnDestroy {\r\n @Input()\r\n public assetId: number;\r\n\r\n @Input()\r\n public set displayGroups(value: DisplayGroup[]) {\r\n this.displayGroups$.next(value);\r\n }\r\n\r\n @Input()\r\n public set filter(value: TableFilter) {\r\n this.filter$.next(value);\r\n }\r\n\r\n @Input()\r\n public set groupBy(value: string) {\r\n this.groupBy$.next(value);\r\n }\r\n\r\n @Input()\r\n public set unitDataPoints(value: UnitDataPoint[]) {\r\n this.unitDataPoints$.next(value);\r\n }\r\n\r\n @Input()\r\n public showGroups: boolean = false;\r\n\r\n @Input()\r\n public set showRunning(value: boolean) {\r\n this.showRunning$.next(value);\r\n }\r\n\r\n public readonly filter$ = new BehaviorSubject(null);\r\n public readonly groupBy$ = new BehaviorSubject(null);\r\n public readonly displayGroups$ = new BehaviorSubject([]);\r\n public readonly unitDataPoints$ = new BehaviorSubject([]);\r\n public readonly showRunning$ = new BehaviorSubject(false);\r\n\r\n public presentAlarmColor: string;\r\n public groups$: Observable;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n private _sparks: {\r\n [datapointId: string]: {\r\n values: Observable; // historical values\r\n value: BehaviorSubject; // mouse over value\r\n }\r\n } = {};\r\n\r\n public alarmThresholds: {\r\n [datapointId: string]: ISparkUnitAlarmThreshold[]\r\n } = {};\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public ngOnInit() {\r\n // load historical data\r\n this.unitDataPoints$.pipe(\r\n takeUntil(this._destroyed$),\r\n debounceTime(2000), // TODO(modonnell): temp fix, we really need to clean up the unit data store & emissions\r\n filter(datapoints => datapoints?.length > 0),\r\n map(datapoints => fromCore.Assets.DatapointHistorical.LoadMostRecent(this.assetId, 100))\r\n ).subscribe(this._store);\r\n\r\n // get the 'Present' alarm color (default to red)\r\n this._store.pipe(\r\n select(fromCore.AlarmStates.getAll),\r\n takeUntil(this._destroyed$),\r\n map(alarmStates => `#${alarmStates.find(state => state.AlarmStateId === 1)?.Color || 'ff0000' }`)\r\n ).subscribe(alarmColor => this.presentAlarmColor = alarmColor);\r\n\r\n this._store.pipe(\r\n select(fromCore.Assets.Alarms.getAll(this.assetId)),\r\n takeUntil(this._destroyed$),\r\n mergeMap((assetAlarms: AssetAlarm[]) => of(assetAlarms)\r\n .pipe(\r\n withLatestFrom(this._store.select(fromCore.AlarmTests.getAll)),\r\n map(([assetAlarms, alarmTests]) =>\r\n assetAlarms?.reduce((acc, assetAlarm) => {\r\n if (assetAlarm.isDisabled) {\r\n return acc;\r\n }\r\n\r\n if (typeof(acc[assetAlarm.dataPointId]) === 'undefined') {\r\n acc[assetAlarm.dataPointId] = [];\r\n }\r\n\r\n acc[assetAlarm.dataPointId].push({\r\n name: assetAlarm.alarmName,\r\n threshold: assetAlarm.threshold,\r\n test: this.getAlarmTestName(alarmTests, assetAlarm.alarmTestId),\r\n });\r\n\r\n return acc;\r\n }, {})\r\n )\r\n )\r\n )\r\n ).subscribe(alarmThresholds => this.alarmThresholds = alarmThresholds);\r\n\r\n // determine datapoint groups/sort\r\n this.groups$ = combineLatest([\r\n combineLatest([\r\n this.displayGroups$,\r\n this.unitDataPoints$,\r\n this.filter$\r\n ]).pipe(\r\n map(([displayGroups, datapoints, filter]) => {\r\n // TODO(modonnell): this is unfortunately ripped right out of ngx-datatable, another example of why doing this n layers deep is bad! we should filter at the source not the destination...\r\n return (filter ? datapoints?.filter((datapoint, idx) => {\r\n\r\n // limit search only to columns by which we want to filter i.e. 'searchStringNames'\r\n let searchedRowValues = Object.values(datapoint);\r\n\r\n if (filter.searchStringNames && filter.searchStringNames.length > 0) {\r\n searchedRowValues = Object.keys(datapoint)\r\n .filter(key => filter.searchStringNames.find(name => name === key.toString()) !== undefined)\r\n .map(key => datapoint[key]);\r\n }\r\n\r\n // filter row values against filter values\r\n let propertyFilter = true;\r\n\r\n if (filter.propertyNames && filter.propertyValues) {\r\n\r\n filter.propertyNames.forEach((propertyName, index) => {\r\n if (filter.propertyValues[index] === 'All') {\r\n return; // short circuit - continue to next property\r\n }\r\n\r\n propertyFilter = propertyFilter && datapoint[propertyName] === filter.propertyValues[index];\r\n\r\n if (!propertyFilter) {\r\n return false; // short circuit - row filtered out - break\r\n }\r\n });\r\n }\r\n\r\n return propertyFilter && searchedRowValues.some(value => {\r\n const safeValue = value || '';\r\n return safeValue.toString().toLowerCase().indexOf(filter.searchString?.toLowerCase()) !== -1;\r\n });\r\n }) : datapoints)?.sort((a, b) => {\r\n const groupA = displayGroups?.find(x => x.Id === a.DisplaySetting?.DisplayGroupId);\r\n const groupB = displayGroups?.find(x => x.Id === b.DisplaySetting?.DisplayGroupId);\r\n\r\n if (groupA && groupB) {\r\n if (groupB.DisplayOrder < groupA.DisplayOrder)\r\n return 1;\r\n if (groupB.DisplayOrder > groupA.DisplayOrder)\r\n return -1;\r\n }\r\n\r\n return b.DisplayOrder - a.DisplayOrder;\r\n })\r\n })\r\n ),\r\n this.groupBy$\r\n ]).pipe(\r\n map(([datapoints, groupBy]) => {\r\n const groups: IRfvGaugeView[] = [];\r\n datapoints?.forEach(datapoint => {\r\n let group = groups.find(gp => gp.name === datapoint[groupBy]);\r\n\r\n // add group if it doesn't exist\r\n if (!group) {\r\n group = { name: datapoint[groupBy], datapoints: [] };\r\n groups.push(group);\r\n }\r\n\r\n // don't recreate these observables on refresh to avoid flickers\r\n // also don't generate a spark on legend values\r\n if (!this._sparks[datapoint.Id] && !datapoint.LegendValue) {\r\n this._sparks[datapoint.Id] = {\r\n values: combineLatest([\r\n this._store.select(fromCore.Assets.DatapointHistorical.getAll(this.assetId)),\r\n this.showRunning$,\r\n ]).pipe(\r\n map(([data, showRunning]) => data\r\n .filter(historical => historical.datapointId === datapoint.Id && (showRunning ? historical.isRunning : true))\r\n .map(historical => ({\r\n label: moment(historical.sampleTime).format('MM/DD/YYYY hh:mm:ss A'),\r\n value: parseFloat(historical.value.toFixed(datapoint.DisplaySetting.DecimalPlaces)),\r\n color: (() => {\r\n if (\r\n (datapoint.AlarmHighestLow !== null && historical.value <= datapoint.AlarmHighestLow) ||\r\n (datapoint.AlarmLowestHigh !== null && historical.value >= datapoint.AlarmLowestHigh)\r\n ) {\r\n return this.presentAlarmColor;\r\n }\r\n\r\n return null;\r\n })()\r\n }))\r\n )\r\n ),\r\n value: new BehaviorSubject(null)\r\n }\r\n }\r\n\r\n group.datapoints.push({\r\n value: datapoint,\r\n spark$: this._sparks[datapoint.Id]?.values,\r\n sparkValue$: this._sparks[datapoint.Id]?.value\r\n });\r\n });\r\n\r\n return groups;\r\n })\r\n );\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n\r\n // cleanup sparks\r\n Object.keys(this._sparks).forEach(datapointId => {\r\n this._sparks[datapointId].value.complete();\r\n });\r\n }\r\n\r\n /**\r\n * Allow ngFor to track by group name rather than the array reference.\r\n */\r\n public trackByGroupName(index: number, item: IRfvGaugeView) {\r\n return item.name;\r\n }\r\n\r\n public getSpark$(datapoint: IRfvGaugeViewDatapoint): Observable {\r\n return datapoint.spark$;\r\n }\r\n\r\n private getAlarmTestName = (alarmTests: AlarmTest[], alarmTestId: number): string => {\r\n const match = alarmTests.find(x => x.AlarmTestId === alarmTestId);\r\n return (match) ? match.Name : '';\r\n }\r\n}\r\n","
    \r\n \r\n \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n Job Title Name:\r\n \r\n
    \r\n
    \r\n Global Job Title:\r\n\r\n \r\n \r\n {{ title.Name }}\r\n \r\n \r\n
    \r\n
    ","import { EventEmitter, Output } from '@angular/core';\r\n\r\n/* angular */\r\nimport { Component, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { UntypedFormGroup, FormBuilder, Validators } from '@angular/forms';\r\n\r\n/* rxjs */\r\nimport { Subject } from 'rxjs'; \r\n\r\nimport { JobTitle } from '@rfv/modules/dashboard/modules/user-admin/store/models/job-title'; \r\n\r\n@Component({\r\n selector: 'job-title-drawer',\r\n templateUrl: 'job-title-drawer.component.html',\r\n styleUrls: ['job-title-drawer.component.scss']\r\n})\r\nexport class JobTitleDrawerComponent implements OnInit, OnDestroy {\r\n\r\n @Input() globalJobTitles: JobTitle[];\r\n @Output() saveJobTitle = new EventEmitter();\r\n\r\n public _destroyed$ = new Subject();\r\n public form: UntypedFormGroup;\r\n\r\n public constructor(\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.form = this._fb.group({\r\n name: [null, Validators.required],\r\n JobTitleId: [null, Validators.required],\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public save() {\r\n this.saveJobTitle.emit(this.form.value)\r\n }\r\n\r\n}","\r\n
    \r\n
    \r\n

    Machine Information

    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n {{ machineComponents.Name }}\r\n \r\n \r\n \r\n \r\n\r\n
     
    \r\n \r\n
    \r\n
    \r\n \r\n\r\n \r\n
    \r\n
    \r\n \r\n

    \r\n {{form.value.UnitMachineAssetComponents[componentIndex].Name }}\r\n \r\n – {{(machineComponents | filterMachineComponent:'Id':component.MachineComponentId)[0].Name}}\r\n \r\n

    \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n\r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {{MachineComponentItem.Name}}\r\n \r\n \r\n {{ machineInfoItem.Name }}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n {{ errorMessage }}\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n \r\n
    \r\n
    \r\n \r\n Loading machine components list...\r\n Loading machine information...\r\n Adding component...\r\n Deleting component...\r\n Saving machine information...\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n \r\n \r\n\r\n","/* angular */\r\nimport { UntypedFormGroup, FormBuilder, Validators, FormControl, FormArray, FormGroup } from '@angular/forms';\r\nimport { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { Observable, Subject, combineLatest } from 'rxjs';\r\nimport { filter, takeUntil, map, startWith, take } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\n\r\nimport { MachineInfoAsset, MachineComponent } from '@rfv/modules/core/models/machine-info/';\r\nimport { UserPermissionService } from '@rfv/modules/shared/services/user-permission.service';\r\n\r\n/**\r\n * SHARED COMPONENT\r\n * When making changes to this component,\r\n * please make sure it works correctly in both master and support suite\r\n */\r\n@Component({\r\n selector: 'app-machine-info',\r\n templateUrl: 'machine-info.component.html',\r\n styleUrls: ['machine-info.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MachineInfoComponent implements OnInit, OnDestroy {\r\n\r\n @Input()\r\n public assetId: number;\r\n\r\n @Input()\r\n public saveTopRight: boolean = false;\r\n\r\n @Input()\r\n public unitCreationLogId: number;\r\n\r\n public errorMessage: string = null;\r\n\r\n public machineInfoAsset$ = this._store$.select(fromCore.Assets.MachineInfo.getMachineInfo);\r\n public machineInfoLoaded$ = this._store$.select(fromCore.Assets.MachineInfo.isMachineInfoLoaded);\r\n public machineInfoLoading$ = this._store$.select(fromCore.Assets.MachineInfo.isMachineInfoLoading);\r\n\r\n public machineComponents$ = this._store$.select(fromCore.Assets.MachineInfo.getMachineComponents);\r\n public machineComponentsLoading$ = this._store$.select(fromCore.Assets.MachineInfo.isMachineComponentsLoading);\r\n public machineComponentsLoaded$ = this._store$.select(fromCore.Assets.MachineInfo.isMachineComponentsLoaded);\r\n\r\n public isAddingComponent$ = this._store$.select(fromCore.Assets.MachineInfo.isAddingComponent);\r\n public iSDeletingComponent$ = this._store$.select(fromCore.Assets.MachineInfo.iSDeletingComponent);\r\n public isMachineInfoSaving$ = this._store$.select(fromCore.Assets.MachineInfo.isMachineInfoSaving);\r\n\r\n public machineInfoError$ = this._store$.select(fromCore.Assets.MachineInfo.getMachineInfoError);\r\n\r\n public editPermission = this.userPermissionService.hasAccess(\"UNIT_INFO_MACHINE_EDIT\");\r\n\r\n public isBusy$: Observable;\r\n\r\n public isLocked$: Observable = this._store$.select(fromSupport.Navigation.getUnitIsLocked);\r\n\r\n public componentTypes: string[];\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public form: UntypedFormGroup;\r\n\r\n private _reset$ = new Subject();\r\n\r\n public constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder,\r\n private userPermissionService: UserPermissionService\r\n ) { }\r\n\r\n public ngOnInit() {\r\n combineLatest([\r\n this.machineInfoAsset$,\r\n this._reset$.pipe(startWith(null))\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n filter(([machineInfo]) => !!machineInfo ),\r\n map(([machineInfo]) => this.initializeForm(machineInfo))\r\n ).subscribe();\r\n\r\n this.isBusy$ = combineLatest([\r\n this.machineComponentsLoading$,\r\n this.machineInfoLoading$,\r\n this.isAddingComponent$,\r\n this.iSDeletingComponent$,\r\n this.isMachineInfoSaving$\r\n ]).pipe(\r\n map(([a, b, c, d, e]) => a || b || c || d || e)\r\n );\r\n }\r\n\r\n initializeForm(machineInfo: MachineInfoAsset): void {\r\n this.form = this._fb.group({\r\n _selectedComponentId: [null],\r\n AssetId: [machineInfo.AssetId],\r\n UnitMachineAssetComponents: this._fb.array([])\r\n });\r\n\r\n this.populateUnitMachineAssetComponents(machineInfo.UnitMachineAssetComponents);\r\n }\r\n\r\n populateUnitMachineAssetComponents(components: any[]): void {\r\n const unitMachineAssetComponentsArray = this.form.get('UnitMachineAssetComponents') as FormArray;\r\n\r\n components.forEach(UnitMachineAssetComponent => {\r\n const UnitMachineAssetComponentGroup = this._fb.group({\r\n Id: [UnitMachineAssetComponent.Id],\r\n AssetId: [UnitMachineAssetComponent.AssetId],\r\n MachineComponentId: [UnitMachineAssetComponent.MachineComponentId],\r\n ParentUnitMachineAssetComponentId: [UnitMachineAssetComponent.ParentUnitMachineAssetComponentId],\r\n _canEditName: [false],\r\n Name: [UnitMachineAssetComponent.Name],\r\n MachineComponentItems: this._fb.array([])\r\n });\r\n\r\n this.populateMachineComponentItems(UnitMachineAssetComponent.MachineComponentItems, UnitMachineAssetComponentGroup);\r\n\r\n unitMachineAssetComponentsArray.push(UnitMachineAssetComponentGroup);\r\n });\r\n }\r\n\r\n populateMachineComponentItems(items: any[], parentGroup: FormGroup): void {\r\n const machineComponentItemsArray = parentGroup.get('MachineComponentItems') as FormArray;\r\n\r\n items.forEach(MachineComponentItem => {\r\n const MachineComponentItemGroup: FormGroup = this._fb.group({\r\n UnitMachineInfoId: [MachineComponentItem.UnitMachineInfoId],\r\n MachineComponentItemId: [MachineComponentItem.MachineComponentItemId],\r\n Name: [MachineComponentItem.Name],\r\n UnitsOfMeasureId: [MachineComponentItem.UnitsOfMeasureId],\r\n HelpText: [MachineComponentItem.HelpText],\r\n DisplayOrder: [MachineComponentItem.DisplayOrder],\r\n HasLegend: [MachineComponentItem.HasLegend]\r\n });\r\n\r\n const valueControl = this._fb.control({\r\n value: MachineComponentItem.HasLegend ? Number(MachineComponentItem.Value) : MachineComponentItem.Value,\r\n disabled: !this.editPermission\r\n }, MachineComponentItem.IsRequired ? Validators.required : null);\r\n\r\n MachineComponentItemGroup.addControl('Value', valueControl);\r\n\r\n machineComponentItemsArray.push(MachineComponentItemGroup);\r\n });\r\n }\r\n\r\n public MachineComponentItems(componentIndex: number): FormArray {\r\n let MachineComponentItems: FormArray = (this.form.get('UnitMachineAssetComponents') as FormArray).at(componentIndex).get('MachineComponentItems') as FormArray;\r\n return MachineComponentItems;\r\n }\r\n\r\n public UnitMachineAssetComponents(): FormArray {\r\n if (this.form)\r\n return this.form.get(\"UnitMachineAssetComponents\") as FormArray\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public confirmDeleteComponent(unitMachineAssetComponentId: number): fromRoot.Modal.ModalOptions {\r\n return {\r\n modalType: fromRoot.Modal.ModalType.OkCancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Delete Component',\r\n data: `Are you sure you want to delete this component and all child components?`,\r\n primaryText: 'Yes',\r\n secondaryText: 'No',\r\n primaryAction: fromCore.Assets.MachineInfo.DeleteMachineInfoComponent(this.assetId, unitMachineAssetComponentId)\r\n };\r\n }\r\n\r\n public canEditName(componentIndex) {\r\n return ((this.form.get(\"UnitMachineAssetComponents\") as FormArray).controls[componentIndex].get(\"_canEditName\") as FormControl).value;\r\n }\r\n\r\n\r\n public editComponentName(componentIndex) {\r\n ((this.form.get(\"UnitMachineAssetComponents\") as FormArray).controls[componentIndex].get(\"_canEditName\") as FormControl).setValue(true);\r\n }\r\n\r\n public storeComponentName(componentIndex) {\r\n ((this.form.get(\"UnitMachineAssetComponents\") as FormArray).controls[componentIndex].get(\"_canEditName\") as FormControl).setValue(false);\r\n }\r\n\r\n public addComponent(parentUnitMachineAssetComponentId: number, component: MachineComponent) {\r\n this._store$.dispatch(fromCore.Assets.MachineInfo.AddMachineInfoComponent(this.assetId, parentUnitMachineAssetComponentId, component, \"New \" + component.Name));\r\n }\r\n\r\n public deleteComponent(unitMachineAssetComponentId: number) {\r\n this._store$.dispatch(fromRoot.Modal.Open({ options: this.confirmDeleteComponent(unitMachineAssetComponentId) }));\r\n }\r\n\r\n public componentChanged(componentId: number, machineComponents: MachineComponent[]) {\r\n this.isLocked$.pipe(take(1)).subscribe(isLocked => {\r\n const component = machineComponents.find(comp => comp.Id === componentId);\r\n\r\n if (!component || isLocked) {\r\n this.reset();\r\n return\r\n };\r\n\r\n this._store$.dispatch(fromCore.Assets.MachineInfo.AddMachineInfoComponent(this.assetId, 0, component, \"New \" + component.Name));\r\n\r\n (this.form.get(\"_selectedComponentId\") as FormControl).setValue(null);\r\n });\r\n }\r\n\r\n public save() {\r\n if (this.form.valid) {\r\n this._store$.dispatch(fromCore.Assets.MachineInfo.SaveMachineInfo(this.unitCreationLogId || this.assetId, this.form.value, false));\r\n } else {\r\n this.errorMessage = 'Please fill all required fields.';\r\n }\r\n }\r\n\r\n public saveAndContinue() {\r\n this._store$.dispatch(fromCore.Assets.MachineInfo.SaveMachineInfo(this.unitCreationLogId || this.assetId, this.form.value, true));\r\n }\r\n\r\n public reset() {\r\n this.form = null;\r\n this._reset$.next();\r\n }\r\n\r\n}","
    \r\n
      \r\n
    • \r\n\r\n
      \r\n
      {{ option[textField] }}
      \r\n \r\n \r\n \r\n
      \r\n\r\n {{ option[secondRowField] }}\r\n\r\n {{ option.InvolveErrorField }}\r\n
    • \r\n
    \r\n
    ","import { Component, OnInit, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-multi-select',\r\n templateUrl: './multi-select.component.html',\r\n styleUrls: ['./multi-select.component.scss']\r\n})\r\n\r\nexport class MultiSelectComponent implements OnInit {\r\n\r\n @Input() options: any[];\r\n @Input() textField: string;\r\n @Input() valueField: string;\r\n @Input() selectedField: string;\r\n @Input() secondRowField: string;\r\n\r\n @Input() tooltipField: string;\r\n @Input() tooltipTextField: string;\r\n @Input() tooltipIcon: string;\r\n\r\n @Input() showCheckbox: boolean = false;\r\n\r\n @Output() optionSelected = new EventEmitter();\r\n @Output() optionDeselected = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n ngOnInit() { }\r\n\r\n onOptionSelect(clickedOption: any, index: number) {\r\n if (this.options[index][this.selectedField] !== true) {\r\n this.optionSelected.emit(clickedOption);\r\n } else {\r\n this.optionDeselected.emit(clickedOption);\r\n }\r\n }\r\n}\r\n","import { Component, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-overlay-backdrop',\r\n styleUrls: ['overlay-backdrop.component.scss'],\r\n templateUrl: 'overlay-backdrop.component.html',\r\n host: {\r\n '(click)': 'onBackdropClick.emit()'\r\n }\r\n})\r\n\r\nexport class OverlayBackdropComponent {\r\n @Output() onBackdropClick = new EventEmitter();\r\n}","import { Component, OnInit, Input } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'overlay-spinner',\r\n styleUrls: ['overlay-spinner.component.scss'],\r\n templateUrl: 'overlay-spinner.component.html'\r\n})\r\nexport class OverlaySpinnerComponent {\r\n\r\n @Input() height: number = 300;\r\n\r\n}\r\n","
    \r\n\r\n\r\n
    ","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'progress-bar',\r\n templateUrl: 'progress-bar.component.html',\r\n styleUrls: [ 'progress-bar.component.scss' ]\r\n})\r\nexport class ProgressBarComponent {\r\n @Input()\r\n public progress: number = 0;\r\n}","
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {{ progress || 0 }}%\r\n \r\n
    \r\n
    \r\n
    ","import { Component, Input, Output, ChangeDetectionStrategy, EventEmitter, OnInit, OnDestroy } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'reload-indicator',\r\n templateUrl: './reload-indicator.component.html',\r\n styleUrls: [ './reload-indicator.component.scss' ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ReloadIndicatorComponent implements OnInit, OnDestroy {\r\n @Input() loading = false;\r\n @Input() icon = 'refresh-right';\r\n\r\n @Output() reloadClicked = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void { }\r\n ngOnDestroy(): void { }\r\n\r\n onReloadClick() {\r\n if (this.loading === false) {\r\n this.reloadClicked.emit();\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\n\r\n","\r\n\r\n\r\n \r\n Sitemap\r\n \r\n
    \r\n

    {{group.groupKey}}

    \r\n
    {{group.rows.length |involvePlural:'Report'}}
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n Name\r\n \r\n \r\n {{report.ReportName}} \r\n\r\n
    \r\n \r\n {{ getFilterName(report) }}\r\n \r\n
    \r\n {{report.UserNotes}} \r\n
    \r\n
    \r\n\r\n \r\n \r\n Schedule\r\n \r\n \r\n Schedule\r\n \r\n {{report.DateRangeName}}\r\n ({{report.ScheduleTimes.length === 0\r\n ? (report.RunHour > 12 ? report.RunHour - 12 : report.RunHour)\r\n + ':' + (report.RunMinute < 9 ? '0' + report.RunMinute : report.RunMinute) + ' ' + (report.RunHour >= 12 ? 'PM': 'AM')\r\n : report.ScheduleTimes.length === 1\r\n ? (report.ScheduleTimes[0].RunHour > 12 ? report.ScheduleTimes[0].RunHour - 12 : report.ScheduleTimes[0].RunHour)\r\n + ':' + (report.ScheduleTimes[0].RunMinute < 9 ? '0' + report.ScheduleTimes[0].RunMinute : report.ScheduleTimes[0].RunMinute) + ' ' + (report.ScheduleTimes[0].RunHour >= 12 ? 'PM': 'AM')\r\n : 'Custom Times'}})\r\n \r\n
    1\" class=\"tooltip tooltip--bottom-center w-min-10\">\r\n
      \r\n
    • \r\n {{ (time.RunHour > 12 ? time.RunHour - 12 : time.RunHour) + ':' + (time.RunMinute < 9 ? '0' + time.RunMinute : time.RunMinute) + ' ' + (time.RunHour > 12 ? 'PM' : 'AM') }}\r\n
    • \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n Format\r\n \r\n \r\n Format\r\n {{report.FileType}} \r\n \r\n \r\n \r\n \r\n Recipient\r\n \r\n \r\n User\r\n {{report.User.LastName}}, {{report.User.FirstName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n You have no scheduled report\r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n\r\n
    \r\n\r\n \r\n ","import { Component, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\r\n\r\n\r\n// Models\r\nimport { ReportSchedules } from '@rfv/modules/report/models/report-schedules';\r\nimport { ReportSitemapGroup } from '@rfv/modules/report/models/report-sitemap-group';\r\nimport { Asset, UserGlobalFilterDataPointGroup } from '@rfv/modules/core/models';\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table';\r\n\r\n@Component({\r\n selector: 'report-schedule-list',\r\n templateUrl: './report-schedule-list.component.html',\r\n styleUrls: ['./report-schedule-list.component.scss']\r\n})\r\nexport class ReportScheduleListComponent {\r\n\r\n @Input() isLoading: boolean;\r\n @Input() isLoaded: boolean;\r\n @Input() reportSchedules: ReportSchedules[] = [];\r\n sitemapGroups: ReportSitemapGroup[] = [];\r\n @Input() displayFormat: number = 0; // Active tab\r\n @Input() assets: Asset[];\r\n @Input() userGlobalFilterDataPointGroups: UserGlobalFilterDataPointGroup[] = [];\r\n\r\n @Output() onRunScheduledReport = new EventEmitter();\r\n @Output() onEditScheduledReport = new EventEmitter();\r\n @Output() onDeleteScheduledReport = new EventEmitter();\r\n @Output() onCopyScheduledReport = new EventEmitter();\r\n\r\n\r\n public dataSource = new InvolveDataSource(null);\r\n\r\n public columns = ['reportName','schedule','format','recipient', 'actions'];\r\n \r\n\r\n public constructor(){\r\n this.dataSource.groupBy = 'SitemapGroup';\r\n }\r\n\r\n ngOnChanges(change: SimpleChanges) { \r\n\r\n if(change['reportSchedules']){\r\n this.dataSource.data = this.reportSchedules;\r\n }\r\n\r\n if(change['displayFormat']){\r\n this.columns = this.displayFormat?\r\n ['reportName','schedule','format','recipient','actions']:\r\n ['reportName','schedule','format','actions']\r\n }\r\n\r\n let groups: ReportSitemapGroup[] = [];\r\n\r\n // get distinct groups\r\n this.reportSchedules.forEach(\r\n rs => groups.push({ SitemapGroup: rs.SitemapGroup, SitemapGroupId: rs.SitemapGroupId })\r\n );\r\n\r\n // sort by name\r\n groups = groups.sort((a, b) => {\r\n if (a.SitemapGroup < b.SitemapGroup) {\r\n return -1;\r\n }\r\n if (a.SitemapGroup > b.SitemapGroup) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n // filter out duplicates\r\n this.sitemapGroups = groups.filter(\r\n (sg, i, arr) => arr.findIndex(t => t.SitemapGroupId == sg.SitemapGroupId) === i\r\n );\r\n }\r\n\r\n reportSchedulesFiltered(SitemapGroupId) {\r\n return this.reportSchedules.filter(r => r.SitemapGroupId === SitemapGroupId);\r\n }\r\n\r\n isActive(el: any) {\r\n let isActive = !(el.getAttribute('class') && el.getAttribute('class').indexOf('active') !== -1);\r\n return isActive;\r\n }\r\n\r\n onScheduleRunNowClick(reportSchedule, event) {\r\n this.onRunScheduledReport.emit(reportSchedule);\r\n }\r\n\r\n onScheduleEditClick(reportSchedule, event) {\r\n this.onEditScheduledReport.emit(reportSchedule);\r\n }\r\n\r\n onScheduleDeleteClick(reportSchedule, event) {\r\n this.onDeleteScheduledReport.emit(reportSchedule);\r\n }\r\n\r\n onScheduleCopySettingsClick(reportSchedule, event) {\r\n this.onCopyScheduledReport.emit(reportSchedule);\r\n }\r\n\r\n getFilterName(reportSchedule: ReportSchedules) {\r\n if (reportSchedule.GlobalFilterId > 0) {\r\n return 'Global Filter: ' + reportSchedule.GlobalFilterName;\r\n }\r\n let filterNames = [];\r\n if (reportSchedule.AssetId > 0) {\r\n let asset = this.assets.find(p => p.id == reportSchedule.AssetId);\r\n if (asset != null) {\r\n filterNames.push('Asset Filter: ' + asset.name);\r\n }\r\n }\r\n if (this.userGlobalFilterDataPointGroups && this.userGlobalFilterDataPointGroups.length > 0 && reportSchedule.UserGlobalFilterDataPointGroupId > 0) {\r\n let dpFilter = this.userGlobalFilterDataPointGroups.find(p => p.id == reportSchedule.UserGlobalFilterDataPointGroupId);\r\n if (dpFilter != null) {\r\n filterNames.push('Trend DataPoint Filter: ' + dpFilter.name);\r\n }\r\n }\r\n return filterNames.length > 0 ? filterNames.join(', ') : 'None';\r\n }\r\n}\r\n"," \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n","import { Component, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-filter-input',\r\n templateUrl: './rfv-filter-input.component.html',\r\n styleUrls: ['./rfv-filter-input.component.scss']\r\n})\r\nexport class RfvFilterInputComponent {\r\n @Output() searchChanged = new EventEmitter();\r\n constructor() {\r\n\r\n }\r\n\r\n /**\r\n * Emits event with input value after every key stroke\r\n * @param {string} inputValue - value from input field\r\n */\r\n onFilterInput(inputValue: string = ''): void {\r\n this.searchChanged.emit(inputValue);\r\n }\r\n\r\n /**\r\n * Click on input's close icon - clear input value, emit searchChanged event\r\n */\r\n onClearSearch() {\r\n this.onFilterInput();\r\n }\r\n}\r\n","/* Angular */\r\nimport { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\n\r\n/* Ngrx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n/* Rxjs */\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { takeUntil, filter, map } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'rfv-icon',\r\n template: `\r\n \r\n \r\n `\r\n})\r\nexport class RfvIconComponent implements OnInit, OnDestroy {\r\n\r\n @Input() codeTag: string;\r\n\r\n public icon$: Observable;\r\n public _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.icon$ = this._store.pipe(\r\n select(fromCore.Icons.getAll),\r\n takeUntil(this._destroyed$),\r\n filter(icons => !!icons),\r\n map(icons => {\r\n const foundIcon = icons.find(icon => icon.CodeTag === this.codeTag);\r\n return foundIcon && foundIcon.IconName;\r\n }));\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-sample-time-footer',\r\n template: `\r\n
    \r\n {{ dateDescription ? dateDescription : \"Last Sample\" }} : {{ dateTime ? (dateTime | rfvDateTime) : dateTimeStr }}\r\n
    `,\r\n})\r\nexport class SampleTimeFooterComponent {\r\n\r\n @Input() dateDescription: string = null;\r\n @Input() dateTime: Date = null;\r\n @Input() dateTimeStr = '';\r\n\r\n constructor() { }\r\n}\r\n","
    \r\n
    {{ displayedText || placeholder }}
    \r\n
    \r\n {{(getSelectedName() ? selectedOptionName : '' )}}\r\n
    \r\n \r\n
    \r\n\r\n
      \r\n \r\n \r\n \r\n
    • \r\n {{option.name}}\r\n
    • \r\n
      \r\n
      \r\n \r\n
    • \r\n [{{ option.id }}] {{ option[textField] }}\r\n
    • \r\n
      \r\n
      \r\n \r\n
    • \r\n {{ group[textField] }}\r\n
        \r\n
      • \r\n {{ nestedOption[textField] }}\r\n
      • \r\n
      \r\n
      \r\n
    • \r\n
      \r\n \r\n
      \r\n
    • \r\n {{ specialButtonText }}\r\n
    • \r\n
      \r\n
    \r\n
    ","import { ChangeDetectionStrategy, } from '@angular/core';\r\nimport { Component, OnInit, Input, Output, EventEmitter, forwardRef, ElementRef, ViewChild, DoCheck, ChangeDetectorRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\r\n\r\n/**\r\n * --- With Reactive Forms:\r\n * In template:\r\n * \r\n * \r\n *\r\n * In .ts with placeholder:\r\n * this.form = this.form._fb.group({\r\n * selectedThemeId: ['', Validators.required]\r\n * })\r\n *\r\n * In .ts binding directly to object (no placeholder):\r\n * this.form = this.form._fb.group({\r\n * selectedThemeId: [ { value: object.id, disabled: true }]\r\n * })\r\n *\r\n * --- Stand alone selector:\r\n * \r\n * \r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'rfv-select',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectComponent),\r\n multi: true\r\n }\r\n ],\r\n styleUrls: ['./select.component.scss'],\r\n templateUrl: './select.component.html',\r\n})\r\nexport class SelectComponent implements OnInit, ControlValueAccessor, DoCheck {\r\n\r\n @Input() mode: string;\r\n @Input() dataPointId;\r\n @Input() dataPointValue;\r\n @Input() formatDropdown: boolean = false;\r\n\r\n @Input() textField: string;\r\n @Input() valueField: string;\r\n @Input() placeholder = '';\r\n @Input() withGrouping = false;\r\n @Input() groupName: string;\r\n @Input() nestedPropertyName: string;\r\n @Input() specialButtonText: string;\r\n \r\n\r\n // Form inputs\r\n @Input('value') _value: any = false;\r\n @Input() isDisabled = false;\r\n\r\n @Output() valueChange = new EventEmitter();\r\n @Output() specialButtonClicked = new EventEmitter();\r\n\r\n _options: any[] = [];\r\n\r\n get options(): any[] {\r\n return this._options;\r\n }\r\n\r\n @Input()\r\n set options(val: any[]) {\r\n this._options = val;\r\n this.displayedText = this.getDisplayText();\r\n }\r\n\r\n _isVisible = false;\r\n displayedText = '';\r\n clickEvent$: Subscription;\r\n selectedOptionName = '';\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n public width = 200;\r\n\r\n public bottom = new ConnectionPositionPair(\r\n { originX: 'start', originY: 'bottom' },\r\n { overlayX: 'start', overlayY: 'top' }\r\n );\r\n\r\n public top = new ConnectionPositionPair(\r\n { originX: 'start', originY: 'top' },\r\n { overlayX: 'start', overlayY: 'bottom' }\r\n );\r\n\r\n @ViewChild('select', { static: true })\r\n private _select: ElementRef;\r\n\r\n ngOnInit() {\r\n this.validateInputs();\r\n }\r\n \r\n getSelectedName(): string {\r\n let option = this.options.find(\r\n option => option.dataPointId == this.dataPointId && option.value == this.dataPointValue\r\n );\r\n this.selectedOptionName = option ? option.name: '';\r\n return option;\r\n }\r\n\r\n\r\n ngDoCheck() {\r\n this.width = this._select.nativeElement.clientWidth;\r\n }\r\n\r\n validateInputs() {\r\n if (this.textField == null) {\r\n throw new Error('Attribute: textField is required.');\r\n }\r\n // if (this.valueField == null) throw new Error('Attribute: valueField is required.');\r\n }\r\n\r\n onClick() {\r\n if (!this.isDisabled) {\r\n this.isVisible = !this._isVisible;\r\n }\r\n }\r\n\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n set value(val) {\r\n this._value = val;\r\n this._isVisible = false;\r\n this.onChange(val);\r\n this.onTouched();\r\n this.valueChange.emit(val);\r\n\r\n if (!this.withGrouping) {\r\n this.displayedText = this.getDisplayText();\r\n }\r\n }\r\n\r\n itemClick(item) {\r\n const newVal = this.valueField ? item[this.valueField] : item;\r\n this.displayedText = item[this.textField];\r\n this.selectedOptionName = item[this.textField];\r\n this.value = newVal;\r\n }\r\n\r\n specialButtonClick() {\r\n this._isVisible = false;\r\n this.specialButtonClicked.emit();\r\n }\r\n\r\n getDisplayText() {\r\n let idx = -1;\r\n\r\n if (!this.nestedPropertyName || this.nestedPropertyName == \"\") {\r\n idx = this.options.findIndex(p => p[this.valueField] == this._value);\r\n } else {\r\n // descend into nested properties\r\n for (let o of this.options) {\r\n idx = o[this.nestedPropertyName] && o[this.nestedPropertyName].findIndex(p => p[this.valueField] == this._value);\r\n if (idx >= 0) {\r\n return o[this.nestedPropertyName][idx][this.textField];\r\n }\r\n }\r\n }\r\n return idx < 0 ? this.placeholder : this.formatDropdown ? \r\n `[${this.options[idx][this.valueField]}] ${this.options[idx][this.textField]}` : \r\n this.options[idx][this.textField];\r\n }\r\n\r\n // Form handlers and properties\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n\r\n writeValue(value) {\r\n this._value = value;\r\n this.displayedText = this.getDisplayText();\r\n }\r\n\r\n registerOnChange(fn) {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn) {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Allows Angular to disable the input.\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n set isVisible(val: boolean) {\r\n this._isVisible = val;\r\n this._cdr.markForCheck();\r\n }\r\n}\r\n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-simple-drawer-header',\r\n templateUrl: './simple-drawer-header.component.html',\r\n styleUrls: ['./simple-drawer-header.component.scss']\r\n})\r\nexport class SimpleDrawerHeaderComponent implements OnInit {\r\n @Input() title = '';\r\n @Input() subtitle1 = '';\r\n @Input() subtitle2 = '';\r\n @Output() cancelIconClicked: EventEmitter = new EventEmitter();\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n\r\n onCancelIconClicked(): void {\r\n this.cancelIconClicked.emit();\r\n }\r\n}\r\n","
    \r\n
    \r\n
    \r\n

    \r\n {{ title }}\r\n

    \r\n

    \r\n {{ subtitle1 }}\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{ subtitle2 }}\r\n

    \r\n
    \r\n","
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    ","import {\r\n Component,\r\n Input,\r\n Optional,\r\n ViewChild,\r\n ElementRef,\r\n Output,\r\n EventEmitter,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n OnInit, HostListener\r\n} from '@angular/core';\r\nimport { ConnectionPositionPair, CdkOverlayOrigin } from '@angular/cdk/overlay';\r\n\r\nimport { DrawerOriginDirective } from '@rfv/modules/shared/directives/drawer-origin.directive';\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Component({\r\n selector: 'rfv-simple-drawer',\r\n templateUrl: './simple-drawer.component.html',\r\n styleUrls: ['./simple-drawer.component.scss']\r\n})\r\nexport class SimpleDrawerComponent implements OnInit, OnDestroy {\r\n @ViewChild('simpleDrawer', { static: false }) private drawer: ElementRef;\r\n @Input() contentIsScrollable = true;\r\n @Input() set isActive(active: boolean) {\r\n this.handleIsActive(active);\r\n }\r\n @Input() headerTitle = '';\r\n @Input() headerSubtitle1 = '';\r\n @Input() headerSubtitle2 = '';\r\n @Output() backdropClicked: EventEmitter = new EventEmitter();\r\n @Output() cancelIconClicked: EventEmitter = new EventEmitter();\r\n @Input() hasOwnHeader = true;\r\n\r\n isDrawerActive = false;\r\n isOverlayActive = false;\r\n readonly animDelayMs = 300;\r\n readonly position = new ConnectionPositionPair(\r\n { originX: 'end', originY: 'top' },\r\n { overlayX: 'end', overlayY: 'top' }\r\n );\r\n origin: CdkOverlayOrigin;\r\n private timeOutIds: number[] = [];\r\n\r\n constructor(\r\n @Optional() private drawerOrigin: DrawerOriginDirective,\r\n private cdr: ChangeDetectorRef,\r\n private store: Store,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.setCdkOverlayOrigin();\r\n }\r\n\r\n @HostListener('document:keydown.escape') onKeydownHandler() {\r\n if(this.isDrawerActive){\r\n this.onCancelIconClicked();\r\n }\r\n }\r\n\r\n private setCdkOverlayOrigin(): void {\r\n if (this.drawerOrigin) {\r\n this.origin = new CdkOverlayOrigin(this.drawerOrigin.elementRef);\r\n } else {\r\n this.origin = new CdkOverlayOrigin(this.drawer);\r\n }\r\n }\r\n\r\n private handleIsActive(active: boolean): void {\r\n if (!this.isDrawerActive && !active) {\r\n // initial drawer state\r\n return;\r\n } else if (this.isDrawerActive && !active) {\r\n // on drawer close\r\n this.handleDrawerToggle('close');\r\n } else {\r\n // on drawer open\r\n this.handleDrawerToggle('open');\r\n }\r\n }\r\n\r\n private handleDrawerToggle(action: 'open' | 'close') {\r\n if (action === 'open') {\r\n this.isOverlayActive = true;\r\n this.store.dispatch(fromRoot.Layout.OpenDrawer({}));\r\n this.timeOutIds.push(\r\n window.setTimeout(() => {\r\n this.isDrawerActive = true;\r\n this.cdr.detectChanges();\r\n }, this.animDelayMs)\r\n );\r\n } else if (action === 'close') {\r\n this.isDrawerActive = false;\r\n this.store.dispatch(fromRoot.Layout.CloseDrawer({}));\r\n this.timeOutIds.push(\r\n window.setTimeout(() => {\r\n this.isOverlayActive = false;\r\n this.cdr.detectChanges();\r\n }, this.animDelayMs)\r\n );\r\n }\r\n }\r\n\r\n onCancelIconClicked(): void {\r\n this.store.dispatch(fromRoot.Layout.CloseDrawer({}));\r\n this.cancelIconClicked.emit();\r\n }\r\n\r\n onBackdropClick() {\r\n this.store.dispatch(fromRoot.Layout.CloseDrawer({}));\r\n this.backdropClicked.emit();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.timeOutIds.forEach(id => clearTimeout(id));\r\n }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { environment } from '@environments/environment';\r\n\r\n@Component({\r\n selector: 'app-svg-icon',\r\n template: `\r\n \r\n \r\n \r\n `,\r\n styles: [':host { font-size: 0 }']\r\n})\r\nexport class SvgIconComponent implements OnInit {\r\n // you can override icon base styles using customClasses\r\n @Input() customClasses = '';\r\n\r\n // you can resetdefault base classes by passing empty string '' into baseClasses property\r\n @Input() baseClasses = '[ w-1.5 h-1.5 ] fill-blue-yellow pointer';\r\n @Input() iconName = '';\r\n @Input() iconColor = '';\r\n @Input() testId = 'data-cyid'\r\n\r\n // path to the result svg file where all icons are defined\r\n baseIconPath = environment.iconSpritePath + '#';\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void { }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { TabsComponent } from './tabs.component';\r\n\r\n@Component({\r\n selector: 'rfv-tab-item',\r\n styles: [' :host { display: block; margin-top: 10px; }'],\r\n template: \r\n `\r\n
    \r\n \r\n
    \r\n `\r\n})\r\n\r\nexport class TabItemComponent implements OnInit {\r\n @Input() tabTitle: string;\r\n @Input() tabData: any;\r\n\r\n isSelected = false;\r\n data: any;\r\n\r\n constructor(\r\n tabsComponent: TabsComponent\r\n ) {\r\n tabsComponent.addTabItem(this);\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n}\r\n","import { Directive, AfterViewInit, Renderer2, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appTabsSlider]'\r\n})\r\nexport class TabsSliderDirective implements AfterViewInit {\r\n\r\n // Last selected tab / active tab\r\n activeTab = null;\r\n\r\n constructor(private ren2: Renderer2, private elRef: ElementRef) {}\r\n\r\n @HostListener('click', ['$event']) onHover(ev) {\r\n this.activeTab = ev.target.closest('.tab');\r\n\r\n this.updateTabSliderPosition();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.elRef.nativeElement.classList.contains('tab--active')) {\r\n this.activeTab = this.elRef.nativeElement;\r\n this.updateTabSliderPosition();\r\n }\r\n }\r\n\r\n private updateTabSliderPosition() {\r\n const slider = this.activeTab.parentElement.querySelector('.tab__slider');\r\n\r\n this.ren2.setStyle(slider, 'width', this.activeTab.offsetWidth + 'px');\r\n this.ren2.setStyle(slider, 'left', this.activeTab.offsetLeft + 'px');\r\n this.ren2.setStyle(slider, 'height', this.activeTab.offsetHeight + 'px');\r\n }\r\n\r\n}\r\n","import { Component, Output, Input, EventEmitter, ViewChild, ElementRef, QueryList, ViewChildren, AfterViewInit, Directive } from '@angular/core';\r\nimport { TabItemComponent } from './tab-item.component';\r\n\r\n@Component({\r\n selector: 'rfv-tabs',\r\n template:\r\n `\r\n \r\n \r\n {{ tab.tabTitle }}\r\n \r\n
    \r\n \r\n \r\n `\r\n})\r\n\r\nexport class TabsComponent {\r\n @Input() set selectedTab(index: number) {\r\n if (index <= this.tabItems.length - 1) {\r\n this.selectTabItem(this.tabItems[index]);\r\n }\r\n }\r\n\r\n @Input() tabsAreClickable = true;\r\n\r\n @Input() withBorders = false;\r\n\r\n @Output() tabChanged = new EventEmitter<{index: number, data: any}>();\r\n\r\n tabItems: TabItemComponent[] = [];\r\n\r\n addTabItem(tab: TabItemComponent) {\r\n if (this.tabItems.length === 0) {\r\n tab.isSelected = true;\r\n }\r\n this.tabItems.push(tab);\r\n }\r\n\r\n selectTabItem(tab: TabItemComponent) {\r\n this.tabItems.map(item => item.isSelected = false);\r\n tab.isSelected = true;\r\n\r\n const index = this.tabItems.indexOf(tab);\r\n if (index > -1) {\r\n this.tabChanged.emit({ index: this.tabItems.indexOf(tab), data: tab.tabData } );\r\n }\r\n }\r\n}\r\n","import { Directive, OnInit, OnDestroy, Renderer2, ElementRef } from '@angular/core';\r\nimport { fromEvent, Observable, Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[appShowHideButtons]'\r\n})\r\nexport class ShowHideButtonsDirective implements OnInit, OnDestroy {\r\n private resizeObservable$: Observable;\r\n private resizeSubscription$: Subscription;\r\n private headerWidth: number;\r\n private tooltipAndLabelWidth: number;\r\n private unfoldButtonWidth: number;\r\n private alwaysVisibleHeaderElsWidth: number;\r\n private buttonsTabsOptionsContainerWidth: number;\r\n private tooltipAndLabel: HTMLElement = null;\r\n private buttonsTabsOptionsContainer: HTMLElement = null;\r\n private headerList: HTMLElement = null;\r\n private unfoldButton: HTMLElement = null;\r\n\r\n constructor(private elRef: ElementRef, private ren2: Renderer2) { }\r\n\r\n ngOnInit() {\r\n setTimeout(() => {\r\n this.handleWindowResize();\r\n }, 0);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.resizeSubscription$) {\r\n this.resizeSubscription$.unsubscribe();\r\n }\r\n }\r\n\r\n private handleWindowResize() {\r\n this.initElementsAndWidths();\r\n this.showHideActionElementsOnResize();\r\n\r\n this.resizeSubscription$ = this.resizeObservable$.pipe(debounceTime(300)).subscribe(event => {\r\n this.showHideActionElementsOnResize();\r\n });\r\n }\r\n\r\n private showHideActionElementsOnResize() {\r\n this.headerWidth = this.elRef.nativeElement.clientWidth;\r\n \r\n if (this.headerWidth - this.alwaysVisibleHeaderElsWidth < 0) {\r\n this.handleHeaderWidthChange(true);\r\n } else {\r\n this.handleHeaderWidthChange(false);\r\n }\r\n }\r\n\r\n private handleHeaderWidthChange(squashHeaderElements: boolean) {\r\n if (this.tooltipAndLabel.classList.contains('overflow-hidden')) {\r\n this.ren2.removeClass(this.tooltipAndLabel, 'overflow-hidden');\r\n }\r\n if (squashHeaderElements) {\r\n\r\n if (this.headerList.classList.contains('hide')) {\r\n this.ren2.removeClass(this.headerList, 'hide');\r\n }\r\n if (this.buttonsTabsOptionsContainer.classList.contains('flex')) {\r\n this.ren2.removeClass(this.buttonsTabsOptionsContainer, 'flex');\r\n }\r\n this.ren2.addClass(this.headerList, 'block');\r\n this.ren2.addClass(this.buttonsTabsOptionsContainer, 'hide');\r\n this.ren2.addClass(this.tooltipAndLabel, 'overflow-hidden');\r\n } else {\r\n if (this.headerList.classList.contains('block')) {\r\n this.ren2.removeClass(this.headerList, 'block');\r\n }\r\n if (this.buttonsTabsOptionsContainer.classList.contains('hide')) {\r\n this.ren2.removeClass(this.buttonsTabsOptionsContainer, 'hide');\r\n }\r\n let isMobileOrTabView = this.isMobileOrTabView();\r\n let headers = document.querySelectorAll('.tile-header__list');\r\n let buttonsTabsOptionsContainer = document.querySelectorAll('.tile-header__tabs-buttons-options');\r\n headers.forEach((el: HTMLElement) => {\r\n if (isMobileOrTabView) {\r\n if (el.classList.contains('hide')) {\r\n el.classList.remove('hide');\r\n }\r\n el.classList.add('block');\r\n } else {\r\n if (el.classList.contains('block')) {\r\n el.classList.remove('block');\r\n }\r\n el.classList.add('hide');\r\n }\r\n });\r\n buttonsTabsOptionsContainer.forEach((el: HTMLElement) => {\r\n if (isMobileOrTabView) {\r\n if (el.classList.contains('flex')) {\r\n el.classList.remove('flex');\r\n }\r\n el.classList.add('hide');\r\n } else {\r\n if (el.classList.contains('hide')) {\r\n el.classList.remove('hide');\r\n }\r\n el.classList.add('flex');\r\n }\r\n });\r\n }\r\n }\r\n\r\n private initElementsAndWidths() {\r\n this.headerWidth = this.elRef.nativeElement.clientWidth;\r\n this.resizeObservable$ = fromEvent(window, 'resize');\r\n this.unfoldButton = this.elRef.nativeElement.querySelector('.tile-header__unfold-button');\r\n this.unfoldButtonWidth = this.unfoldButton ? this.unfoldButton.offsetWidth : 0;\r\n this.headerList = this.elRef.nativeElement.querySelector('.tile-header__list');\r\n this.tooltipAndLabel = this.elRef.nativeElement.querySelector('.tile-header__tooltip-label');\r\n this.tooltipAndLabelWidth = this.tooltipAndLabel.offsetWidth;\r\n this.buttonsTabsOptionsContainer = this.elRef.nativeElement.querySelector('.tile-header__tabs-buttons-options');\r\n this.buttonsTabsOptionsContainerWidth = this.buttonsTabsOptionsContainer.offsetWidth;\r\n this.alwaysVisibleHeaderElsWidth = this.buttonsTabsOptionsContainerWidth + this.tooltipAndLabelWidth + this.unfoldButtonWidth + 56;\r\n }\r\n\r\n private isMobileOrTabView() {\r\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\r\n // true for mobile device\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {{ button.label }}\r\n \r\n
    \r\n
    \r\n \r\n \r\n {{ button.label }}\r\n \r\n
    \r\n
    ","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { TileHeaderButton } from '../tile-header-button.model';\r\n\r\n@Component({\r\n selector: 'app-tile-header-button',\r\n templateUrl: './tile-header-button.component.html',\r\n styleUrls: ['./tile-header-button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TileHeaderButtonComponent {\r\n @Input() button: TileHeaderButton = null;\r\n @Input() status: string;\r\n @Input() pollColor: string;\r\n}\r\n","
    \r\n \r\n \r\n
    \r\n\r\n \r\n \r\n\r\n \r\n\r\n
    \r\n\r\n \r\n
    \r\n \r\n \r\n\r\n
    \r\n\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n {{option.label}}\r\n \r\n \r\n \r\n\r\n
    \r\n\r\n
    \r\n 0) || headerTabs || options\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {{tab}}\r\n \r\n\r\n \r\n {{option.label}}\r\n \r\n \r\n \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n {{ unfoldButton.label }}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n","import {Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef} from '@angular/core';\r\nimport { Observable, Subject, combineLatest } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/* Models */\r\nimport { TileHeaderButton } from '@rfv/modules/shared/components/tile-header/tile-header-button.model';\r\nimport { Tile } from '@rfv/modules/core/models/tile';\r\nimport { MenuItem } from '@rfv/modules/shared/model/menu-item.model';\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport { moment } from '../../utils/moment';\r\nimport { ViewMode } from '@rfv/modules/shared/model/view-mode.model';\r\n\r\n@Component({\r\n selector: 'app-tile-header-content-wrapper',\r\n templateUrl: './tile-header-content-wrapper.component.html',\r\n styleUrls: ['./tile-header-content-wrapper.component.scss']\r\n})\r\nexport class TileHeaderContentWrapperComponent implements OnInit, OnDestroy {\r\n @Input() tile: Tile;\r\n @Input() tooltipTextLines: string[] = null;\r\n @Input() set tabs(tabs: string[]) {\r\n if (tabs && tabs.length > 0) {\r\n this.headerTabs = tabs;\r\n }\r\n }\r\n @Input() set buttons(buttons: TileHeaderButton[]) {\r\n if (buttons && buttons.length > 0) {\r\n const specialtyButtonIcons = ['unfold', 'view_module'];\r\n this.allButtons = buttons && buttons.length > 0 ? buttons.filter(\r\n button => specialtyButtonIcons.indexOf(button.icon) < 0\r\n ) : null;\r\n\r\n this.guageViewButton = buttons.find(button => button.icon === 'view_list' || button.icon === 'view_module');\r\n this.unfoldButton = buttons.find(button => button.icon === 'unfold');\r\n }\r\n }\r\n @Input() options: MenuItem[] = null;\r\n @Input() activeTab = 0;\r\n @Input() pollColor = ''; // poll status\r\n @Input() status = '';\r\n @Input() allowScroll = false;\r\n @Input() displayDateRange = false;\r\n\r\n @Output() buttonClick = new EventEmitter<{ tag: string, tileId: number }>();\r\n @Output() optionClick = new EventEmitter();\r\n @Output() tabClick = new EventEmitter();\r\n\r\n headerTabs: string[] = null;\r\n allButtons: TileHeaderButton[] = null;\r\n unfoldButton: TileHeaderButton = null;\r\n guageViewButton: TileHeaderButton = null;\r\n\r\n private _isDropdownOpen = false;\r\n public get isDropdownOpen() { return this._isDropdownOpen; }\r\n public set isDropdownOpen(value: boolean) {\r\n this._isDropdownOpen = value;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n\r\n lastReload$: Observable<{ tileId: number, timeStamp: number }>;\r\n private destroyed$ = new Subject();\r\n currentHeaderTileId$: Observable;\r\n lastTileHeaderId = null;\r\n\r\n /**\r\n * Support for toggling different view modes.\r\n */\r\n @Input() viewModes: ViewMode[] = [];\r\n @Output() viewModeChange = new EventEmitter();\r\n\r\n @Input()\r\n get selectedViewMode() { return this._viewMode; }\r\n set selectedViewMode(value: ViewMode) { this._viewMode = value; }\r\n private _viewMode: ViewMode = null;\r\n\r\n public selectView(viewMode: ViewMode) {\r\n this._viewMode = viewMode;\r\n this.viewModeChange.emit(viewMode);\r\n }\r\n\r\n public get nextViewMode() {\r\n if (this.viewModes.length > 1) {\r\n const currentIndex = this.viewModes.findIndex(viewMode => viewMode === this.selectedViewMode);\r\n\r\n if (currentIndex === this.viewModes.length - 1) {\r\n return this.viewModes[0];\r\n }\r\n\r\n return this.viewModes[currentIndex + 1];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private store: Store\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.lastReload$ = this.store.pipe(select(fromDashboard.getLastReload));\r\n this.currentHeaderTileId$ = this.store.pipe(select(fromDashboard.getCurrentHeaderTileId));\r\n\r\n if (this.tile.id) {\r\n combineLatest(\r\n this.lastReload$\r\n ).pipe(takeUntil(this.destroyed$)).subscribe(([ lastReload ]) => {\r\n if (lastReload) {\r\n if (lastReload.tileId === this.tile.id) {\r\n this.setTooltipText(lastReload.timeStamp);\r\n }\r\n }\r\n });\r\n }\r\n\r\n this.currentHeaderTileId$.pipe(\r\n takeUntil(this.destroyed$)\r\n ).subscribe(tileId => {\r\n this.lastTileHeaderId = tileId;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n onHeaderClick() {\r\n if (this.tile.id === this.lastTileHeaderId) {\r\n this.store.dispatch(fromDashboard.SaveIdOnTileHeaderClick(null));\r\n } else {\r\n this.store.dispatch(fromDashboard.SaveIdOnTileHeaderClick(this.tile.id));\r\n }\r\n }\r\n\r\n onListItemButtonClick(event, button: TileHeaderButton, tile: Tile) {\r\n this.buttonClick.emit({ tag: button.tag, tileId: tile.id });\r\n this.isDropdownOpen = false;\r\n event.stopPropagation();\r\n }\r\n\r\n private setTooltipText(timeStamp: number) {\r\n if (this.tile.refreshRate !== null) {\r\n if (this.tile.refreshRate > -1) {\r\n const refreshRate = this.tile.refreshRate > 0 ? this.tile.refreshRate + 'sec' : 'Manual Refresh';\r\n this.tooltipTextLines = [\r\n 'Refresh rate: ' + refreshRate,\r\n 'Last refreshed: ' + moment(timeStamp).calendar()\r\n ];\r\n }\r\n }\r\n }\r\n}\r\n","
    \r\n \r\n \r\n \r\n \r\n \r\n {{ button.label || button.dropdownLabel }} {{status}}\r\n \r\n \r\n \r\n \r\n \r\n {{ button.label || button.dropdownLabel }}\r\n \r\n
    \r\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core';\r\n\r\nimport { TileHeaderButton } from '../tile-header-button.model';\r\n\r\n@Component({\r\n selector: 'app-tile-header-list-item',\r\n templateUrl: './tile-header-list-item.component.html',\r\n styleUrls: ['./tile-header-list-item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TileHeaderListItemComponent {\r\n @Input() button: TileHeaderButton = null;\r\n @Input() status: string;\r\n @Input() pollColor: string;\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { MenuItem } from '@rfv/modules/shared/model/menu-item.model';\r\n\r\n@Component({\r\n selector: 'app-tile-header-tab',\r\n templateUrl: './tile-header-tab.component.html',\r\n styleUrls: ['./tile-header-tab.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TileHeaderTabComponent {\r\n @Input() activeTab = 0;\r\n @Input() index: number;\r\n @Input() headerTab: string = null;\r\n @Output() tabClicked = new EventEmitter();\r\n}\r\n","\r\n {{ headerTab }}\r\n\r\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { Tile } from '@rfv/modules/core/models';\r\n\r\n@Component({\r\n selector: 'app-tile-header-title',\r\n templateUrl: './tile-header-title.component.html',\r\n styleUrls: ['./tile-header-title.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TileHeaderTitleComponent {\r\n @Input() tooltipTextLines: string[] = null;\r\n @Input() tile: Tile = null;\r\n}\r\n","
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {{ tile.name }}\r\n
    \r\n","import { take, takeUntil } from 'rxjs/operators';\r\nimport { Dashboards } from '@rfv/modules/core/enums/dashboards';\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n/* Rxjs */\r\nimport { Subscription, combineLatest } from 'rxjs';\r\n\r\n/* NgRx */\r\nimport { Store, select, Action } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromRouter from '@rfv/store/router';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n/* Models */\r\nimport { Tiles } from '@rfv/modules/core/enums';\r\nimport { Asset, AssetType, Dashboard, SitemapGroup } from '@rfv/modules/core/models';\r\nimport { TileHeaderButton } from '@rfv/modules/shared/components/tile-header/tile-header-button.model';\r\n\r\n/* Lodash */\r\nimport { pick } from 'lodash';\r\nimport { UserPermissionService } from '../../services/user-permission.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TileHeaderButtons {\r\n private _subscription: Subscription;\r\n\r\n public selectedSitemapGroup: SitemapGroup;\r\n public sitemapGroupRootId: number;\r\n public selectedAsset: Asset;\r\n public selectedAssetType: AssetType;\r\n public selectedDashboardId: number;\r\n public dashboardEntites: Dashboard[];\r\n public trendsDashboardId: number;\r\n private headerButtonKeys: string[] = ['tag', 'icon', 'label', 'dropdownLabel', 'action', 'excludeFromDropdown', 'classes'];\r\n\r\n private fullscreenRoute = [];\r\n private _viewAction: Action;\r\n private adminFullscreenRoute = ['admin'];\r\n\r\n\r\n public constructor(\r\n private _store: Store,\r\n private _permissionService: UserPermissionService\r\n ) {\r\n \r\n\r\n this._subscription = combineLatest(\r\n this._store.select(fromDashboard.getSelectedSitemapGroup),\r\n this._store.select(fromCore.SitemapGroups.getRoot),\r\n this._store.select(fromDashboard.getSelectedAsset),\r\n this._store.select(fromDashboard.getSelectedAssetType),\r\n this._store.select(fromDashboard.getSelectedDashboardId),\r\n this._store.select(fromCore.Dashboards.getAll),\r\n ).subscribe(([sitemapGroup, sitemapGroupRoot, asset, assetType, dashboardId, dashboards]) => {\r\n \r\n this.selectedDashboardId = dashboardId;\r\n this.sitemapGroupRootId = sitemapGroupRoot.id;\r\n this.selectedAssetType = assetType;\r\n this.selectedSitemapGroup = sitemapGroup;\r\n this.selectedAsset = asset;\r\n this.dashboardEntites = dashboards;\r\n this.trendsDashboardId = dashboards?.find(db => db.tiles.find(tile => tile.id == Tiles.trendsV2))?.id;\r\n\r\n if (dashboardId && assetType && (sitemapGroup || asset)) {\r\n this.fullscreenRoute = ['dashboard', this.selectedDashboardId,\r\n this.selectedAssetType.isSitemapGroupType ? 'sitemapGroup' : 'asset',\r\n this.selectedAsset ? this.selectedAsset.id : this.selectedSitemapGroup.id,\r\n 'fullscreen'];\r\n }\r\n\r\n });\r\n\r\n this._store.pipe(\r\n select(fromRouter.getUrl)\r\n ).subscribe(route => this._viewAction = fromRoot.Router.Go([route]));\r\n }\r\n\r\n public createHeaderButtons(tags: string[], hasFullMode = true, callingTileId = 0): TileHeaderButton[] {\r\n const headerButtons = [];\r\n\r\n for (const tag of tags) {\r\n if (this._permissionService.hasAccess(tag)) {\r\n const button = this.getHeaderButton(tag, hasFullMode, callingTileId);\r\n\r\n if (button) {\r\n headerButtons.push(pick(button, this.headerButtonKeys));\r\n }\r\n }\r\n }\r\n\r\n return headerButtons;\r\n }\r\n\r\n private getHeaderButton(tag: string, hasFullMode = true, callingTileId = 0) {\r\n\r\n let button = null;\r\n\r\n switch (tag) {\r\n case 'USERSETTINGS_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = this.createAdminButton(tag, 'users');\r\n }\r\n break;\r\n case 'COMMLOSSSETTINGS_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = this.createAdminButton(tag, 'commsLossSettings');\r\n }\r\n break;\r\n case 'RUNTIMESETTINGS_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = this.createAdminButton(tag, 'runtimeSettings');\r\n }\r\n break;\r\n case 'NOTIFICATIONSETTINGS_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = this.createAdminButton(tag, 'notifications');\r\n }\r\n break;\r\n case '':\r\n case 'SYSTEMSTATUS_FULLSCREEN':\r\n case 'CURRENTALARMS_FULLSCREEN':\r\n case 'ALERTSUPPRESSION_FULLSCREEN':\r\n case 'UNITALARMS_FULLSCREEN':\r\n case 'UNITINFO_FULLSCREEN':\r\n case 'AGGREGATERUNTIME_FULLSCREEN':\r\n case 'AGGREGATEEVENTS_FULLSCREEN':\r\n case 'UNITRUNTIME_FULLSCREEN':\r\n case 'EVENTS_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = {\r\n tag: tag,\r\n icon: 'unfold',\r\n classes: 'menu-button mh-4',\r\n excludeFromDropdown: true,\r\n action: (tileId: number) => {\r\n this._store.dispatch(fromRoot.Router.Go([...this.fullscreenRoute, tileId]));\r\n }\r\n };\r\n }\r\n break;\r\n case 'NOTIFICATIONRECIPIENTS_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = {\r\n tag: tag,\r\n icon: callingTileId === Tiles.unitNotificationRecipients ? 'unfold' : 'supervisor_account',\r\n label: callingTileId === Tiles.unitNotificationRecipients ? '' : 'Manage Recipients',\r\n classes: callingTileId === Tiles.unitNotificationRecipients ? 'menu-button mh-4' : 'button button--secondary',\r\n excludeFromDropdown: callingTileId === Tiles.unitNotificationRecipients ? true : false,\r\n action: (tileId: number) => {\r\n this._store.select(fromDashboard.getSelectedAssetId).pipe(take(1)).subscribe(assetId => {\r\n this._store.dispatch(fromDashboard.NavigateToAsset(assetId, Tiles.unitNotificationRecipients));\r\n })\r\n }\r\n };\r\n }\r\n break;\r\n case 'ALARMHISTORY_FULLSCREEN':\r\n if (hasFullMode) {\r\n if (callingTileId === Tiles.alarmHistory) {\r\n button = {\r\n tag: tag,\r\n icon: 'unfold',\r\n classes: 'menu-button mh-4',\r\n excludeFromDropdown: true,\r\n action: (tileId: number) => {\r\n this._store.select(fromDashboard.getSelectedAssetId).pipe(take(1)).subscribe(assetId => {\r\n this._store.dispatch(fromDashboard.NavigateToAsset(assetId, Tiles.alarmHistory));\r\n })\r\n }\r\n };\r\n } else {\r\n button = {\r\n tag: tag,\r\n label: 'Alarm History',\r\n icon: 'bell',\r\n classes: 'button button--secondary',\r\n action: () => {\r\n this._store.select(fromDashboard.getSelectedAssetId).pipe(take(1)).subscribe(assetId => {\r\n this._store.dispatch(fromDashboard.NavigateToAsset(assetId, Tiles.alarmHistory));\r\n })\r\n }\r\n };\r\n }\r\n }\r\n break;\r\n case 'UNITDATA_FULLSCREEN':\r\n if (hasFullMode) {\r\n button = {\r\n tag: tag,\r\n icon: 'unfold',\r\n classes: 'menu-button mh-4',\r\n excludeFromDropdown: true,\r\n action: (tileId: number) => {\r\n this._store.dispatch(fromRoot.Router.Go([...this.fullscreenRoute, Tiles.unitData]));\r\n }\r\n };\r\n }\r\n break;\r\n case 'FLEETEDITOR_CREATE_EDIT':\r\n button = {\r\n tag: tag,\r\n label: 'Support Suite',\r\n icon: 'support',\r\n classes: 'button button--secondary',\r\n action: () => { \r\n let dashboardId = this.dashboardEntites.find(dashboard => dashboard.tiles.some(tile => tile.id === Tiles.unitConfigQueue)).id;\r\n\r\n this._store.dispatch(\r\n fromRoot.Router.Go([ \r\n 'dashboard',\r\n dashboardId,\r\n 'sitemapGroup',\r\n this.sitemapGroupRootId,\r\n 'fullscreen',\r\n Tiles.addNewUnit,\r\n this.selectedAsset.unitCreationLogId,\r\n 1 ]));\r\n }\r\n };\r\n break;\r\n case 'TREND':\r\n button = {\r\n tag: tag,\r\n label: 'Trend',\r\n icon: 'trending_up',\r\n classes: 'button button--secondary',\r\n action: (callback) => {\r\n if (callback && callback instanceof Function) {\r\n callback();\r\n return;\r\n }\r\n\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', this.trendsDashboardId, 'asset', this.selectedAsset.id]));\r\n }\r\n };\r\n break;\r\n case 'DEMAND_POLL':\r\n button = {\r\n tag: tag,\r\n label: 'Demand Poll',\r\n icon: 'settings_input_antenna',\r\n classes: 'button button--secondary relative',\r\n action: () => {\r\n this._store.dispatch(fromCore.DeviceControls.SendDemandPoll(\r\n this.selectedAsset.id,\r\n this.selectedAsset.name,\r\n this._viewAction,\r\n true,\r\n null\r\n ))\r\n }\r\n };\r\n break;\r\n case 'SNAPSHOT_POLL':\r\n button = {\r\n tag: tag,\r\n label: 'Poll',\r\n icon: 'settings_input_antenna',\r\n classes: 'button button--secondary relative',\r\n action: () => {\r\n this._store.dispatch(fromCore.Assets.EventsDiagnostics.CreateSnapshotPoll(this.selectedAsset.id));\r\n }\r\n };\r\n break;\r\n case 'GAUGE_VIEW':\r\n button = {\r\n tag: tag,\r\n label: null,\r\n icon: 'view_module',\r\n classes: 'button button--secondary relative',\r\n action: () => {\r\n // Action is empty as functionality will be handled by a viewModeChange\r\n // emission to the parent component\r\n }\r\n };\r\n break;\r\n \r\n default:\r\n break;\r\n }\r\n\r\n return button;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._subscription.unsubscribe();\r\n }\r\n\r\n private createAdminButton(tag: string, routerPath: string) {\r\n return {\r\n tag: tag,\r\n icon: 'unfold',\r\n classes: 'menu-button mh-4',\r\n excludeFromDropdown: true,\r\n action: (tileId: number) => {\r\n this._store.dispatch(fromRoot.Router.Go([...this.adminFullscreenRoute, routerPath]));\r\n }\r\n };\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-tile-content',\r\n styleUrls: [ './tile-content.component.scss' ],\r\n template: \r\n `\r\n \r\n `\r\n})\r\n\r\nexport class TileContentComponent {\r\n}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-tile-header',\r\n template:\r\n `\r\n
    \r\n
    \r\n

    \r\n \r\n

    \r\n
    \r\n
    \r\n `\r\n})\r\n\r\nexport class TileHeaderComponent {\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rfv-tile',\r\n styleUrls: ['./tile.component.scss'],\r\n template:\r\n `\r\n
    \r\n \r\n
    \r\n `\r\n})\r\nexport class TileComponent {\r\n baseClasses = 'rfv-tile base-container h-full flex direction-column';\r\n @Input() customClasses: string;\r\n}\r\n","\r\n
    \r\n
    \r\n
    \r\n \r\n Saving unit information...\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n

    Unit Info

    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n

    {{ displayGroup.Name }}

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {{ item.Name }}\r\n \r\n \r\n {{ legendValue.Name }}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n","/* ng */\r\nimport { Component, OnInit, OnDestroy, Input, ChangeDetectorRef } from '@angular/core';\r\nimport { UntypedFormGroup, FormBuilder } from '@angular/forms';\r\n\r\n/* rxjs */\r\nimport { combineLatest, Subject } from 'rxjs';\r\nimport { startWith, takeUntil } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\n\r\nimport { UnitInfoRequest } from '@rfv/modules/core/models';\r\nimport { UserPermissionService } from '@rfv/modules/shared/services/user-permission.service';\r\n\r\n@Component({\r\n selector: 'unit-info-editor',\r\n templateUrl: 'unit-info-editor.component.html',\r\n styleUrls: ['unit-info-editor.component.scss']\r\n})\r\nexport class UnitInfoEditorComponent implements OnInit, OnDestroy {\r\n private _destroyed$ = new Subject();\r\n\r\n public isLoaded$ = this._store.select(fromCore.Assets.UnitInfo.isLoaded);\r\n public isLoading$ = this._store.select(fromCore.Assets.UnitInfo.isLoading);\r\n public isSaving$ = this._store.select(fromCore.Assets.UnitInfo.isSaving);\r\n public unitInfo$ = this._store.select(fromCore.Assets.UnitInfo.getEntities);\r\n public isLocked$ = this._store.select(fromSupport.Navigation.getUnitIsLocked);\r\n\r\n public form: UntypedFormGroup;\r\n\r\n public editPermission = this.userPermissionService.hasAccess(\"UNIT_INFO_EDIT\");\r\n\r\n @Input()\r\n public assetId: number;\r\n\r\n @Input()\r\n public saveTopRight: boolean = false;\r\n\r\n @Input()\r\n public unitCreationLogId: number;\r\n\r\n private _reset$ = new Subject();\r\n\r\n public constructor(\r\n private _store: Store,\r\n private _fb: FormBuilder,\r\n private _cdr: ChangeDetectorRef,\r\n private userPermissionService: UserPermissionService\r\n ) { }\r\n\r\n public ngOnInit() {\r\n combineLatest([\r\n this._reset$.pipe(startWith(null)),\r\n this._store.select(fromCore.Assets.UnitInfo.getEntities)\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([reset, entities]) => {\r\n this.form = null;\r\n this.form = this._fb.group(entities.reduce((group, entity) => {\r\n entity.Items.forEach(item => {\r\n group[item.Id] = this._fb.group({\r\n Id: [item.Id],\r\n Value: [item.Value],\r\n LegendValue: [item.LegendValue]\r\n });\r\n });\r\n\r\n return group;\r\n }, {}));\r\n\r\n if (!this.editPermission)\r\n this.form.disable();\r\n });\r\n\r\n }\r\n\r\n public reset() {\r\n this._reset$.next();\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this._cdr.detectChanges();\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public save(next: boolean = false) {\r\n this.form.markAsPristine();\r\n\r\n const entities = Object.keys(this.form.value).map(propertyKey => this.form.value[propertyKey]);\r\n\r\n let unitInfoRequest: UnitInfoRequest = { UnitInfoItems: entities, UnitCreationLogId: this.unitCreationLogId }\r\n\r\n this._store.dispatch(fromCore.Assets.UnitInfo.Save(this.assetId, unitInfoRequest, next));\r\n }\r\n}\r\n"," 0; else noData;\"> \r\n \r\n\r\n\r\n \r\n \r\n","/* ng */\r\nimport { Component, OnInit, OnDestroy, Input } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { Subject, combineLatest } from 'rxjs';\r\nimport { switchMap, takeUntil } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport * as Highcharts from 'highcharts';\r\n\r\nimport { moment } from '../../utils/moment';\r\nimport { AssetDetailUtilization, TotalUtilization } from '@rfv/modules/core/models';\r\n\r\n@Component({\r\n selector: 'utilization-chart',\r\n templateUrl: 'utilization-chart.component.html',\r\n})\r\nexport class UtilizationChartComponent implements OnInit, OnDestroy {\r\n\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n @Input() public export: boolean = false;\r\n\r\n public themeId: number;\r\n\r\n Highcharts: typeof Highcharts = Highcharts;\r\n public chartOptions: Highcharts.Options;\r\n utilizationData: TotalUtilization[];\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public ngOnInit() {\r\n \r\n this._store.pipe(\r\n select(fromDashboard.getSelectedAssetId),\r\n switchMap(assetId => combineLatest([\r\n this._store.select(assetId > 0 ? fromCore.Assets.Utilization.getTimeBasedUtilization : fromCore.SitemapGroups.Utilization.getTimeBasedUtilization),\r\n this._store.select(fromCore.GlobalColors.getEntities),\r\n this._store.select(fromCore.UnitsOfMeasure.getEntities),\r\n this._store.select(fromCore.UserSession.getSessionThemeId),\r\n ])),\r\n takeUntil(this._destroyed$),\r\n ).subscribe(([utilization, globalColors, unitsOfMeasure, themeId]) => {\r\n\r\n if (!utilization?.Data?.length) {\r\n this.utilizationData = [];\r\n return;\r\n }\r\n\r\n this.utilizationData = utilization.Data;\r\n this.themeId = themeId;\r\n var UoMId = utilization.Data[0]?.FuelUoMId;\r\n var UnitOfMeasureName = `${unitsOfMeasure[UoMId]?.Name}`;\r\n\r\n this.chartOptions = {\r\n chart: {\r\n type: 'column',\r\n backgroundColor: this.backgroundColor,\r\n alignTicks: false,\r\n },\r\n\r\n exporting: {\r\n enabled: this.export,\r\n buttons: {\r\n contextButton: {\r\n menuItems: [\r\n 'viewFullscreen',\r\n 'separator',\r\n 'downloadPNG',\r\n 'downloadJPEG',\r\n 'downloadPDF',\r\n 'downloadSVG'\r\n ]\r\n }\r\n }\r\n },\r\n\r\n\r\n\r\n title: {\r\n text: utilization.Frequency,\r\n style: {\r\n color: this.foregroundColor,\r\n },\r\n },\r\n\r\n plotOptions: {\r\n column: {\r\n stacking: 'normal',\r\n dataLabels: {\r\n enabled: true,\r\n color: this.foregroundColor,\r\n backgroundColor: this.backgroundColor,\r\n borderColor: this.foregroundColor,\r\n borderWidth: 1,\r\n padding: 2,\r\n crop: false,\r\n overflow: 'allow',\r\n style: {\r\n textOutline: 'none'\r\n },\r\n formatter: function () {\r\n if (this.y !== 0)\r\n return Math.round(this.y * 100) / 100;\r\n\r\n return null;\r\n }\r\n }\r\n }\r\n },\r\n\r\n xAxis: {\r\n categories: utilization?.Data.map(entity => entity.MaxDate ? `${moment(entity.Date).format(\"MM/DD\")}-${moment(entity.MaxDate).format(\"MM/DD\")}` : `${moment(entity.Date).format(\"MM/DD\")}`),\r\n\r\n labels: {\r\n enabled: true,\r\n autoRotation: [-45],\r\n style: {\r\n color: this.foregroundColor\r\n }\r\n },\r\n lineWidth: 2,\r\n tickWidth: 2,\r\n tickLength: 20,\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n },\r\n\r\n yAxis: [\r\n {\r\n id: 'utilization',\r\n allowDecimals: false,\r\n min: 0,\r\n // max: 25,\r\n title: {\r\n text: 'HOURS',\r\n style: {\r\n color: this.foregroundColor,\r\n fontWeight: 'bold'\r\n }\r\n },\r\n opposite: true,\r\n labels: {\r\n style: {\r\n color: this.foregroundColor\r\n }\r\n },\r\n tickWidth: 1,\r\n tickLength: 5,\r\n tickInterval: 2,\r\n gridLineWidth: 1,\r\n },\r\n {\r\n id: 'fuel',\r\n allowDecimals: false,\r\n title: {\r\n text: `FUEL USAGE ( ${UnitOfMeasureName} )`,\r\n style: {\r\n color: this.foregroundColor,\r\n fontWeight: 'bold'\r\n }\r\n },\r\n labels: {\r\n style: {\r\n color: this.foregroundColor\r\n }\r\n },\r\n // modonnell: needed due to Ness CSS overrides in Web/src/styles/partials/_highcharts.scss\r\n lineWidth: 1 / Number.MAX_SAFE_INTEGER,\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n }\r\n ],\r\n\r\n legend: {\r\n itemStyle: {\r\n color: this.foregroundColor,\r\n fontWeight: 'normal'\r\n\r\n }\r\n },\r\n\r\n tooltip: {\r\n useHTML: true,\r\n shared: true,\r\n\r\n // add date to header\r\n headerFormat: '',//
    ',\r\n\r\n // we need the series color not the point color (default) otherwise it breaks on the pattern fills\r\n pointFormat: '',//
    ',\r\n\r\n // append footnotes dynamically\r\n formatter: function (tooltip) {\r\n const result = tooltip.defaultFormatter.call(this, tooltip);\r\n\r\n const entity = (this.points[0]?.point)?.custom?.entity;\r\n if (entity?.IsApproximated)\r\n result.push(`
    {point.key} (' + utilization?.Frequency + ')
    {series.name}: {point.y:.2f}
    * Data for this day has been approximated.
    `);\r\n else if (entity.HoursError)\r\n result.push(`* Error. Hour count exceeds legal limit.`);\r\n else\r\n result.push('');\r\n\r\n return result;\r\n },\r\n },\r\n\r\n series: [\r\n // fuel usage\r\n {\r\n yAxis: 'fuel',\r\n type: 'column',\r\n stack: 'fuel',\r\n name: 'Idle Fuel Used',\r\n color: `#${globalColors[19]?.Hex || 'C00000'}`,\r\n borderColor: this.foregroundColor,\r\n data: utilization.Data.map(entity => ({\r\n y: entity.IdleFuelUsed,\r\n color: this.getEntityColorPattern(entity, globalColors[19]?.Hex || 'C00000'),\r\n custom: { entity }\r\n })),\r\n },\r\n {\r\n yAxis: 'fuel',\r\n type: 'column',\r\n stack: 'fuel',\r\n name: 'Working Fuel Used',\r\n color: `#${globalColors[20]?.Hex || '92D050'}`,\r\n borderColor: this.foregroundColor,\r\n data: utilization.Data.map(entity => ({\r\n y: entity.FuelUsed,\r\n color: this.getEntityColorPattern(entity, globalColors[20]?.Hex || '92D050'),\r\n custom: { entity }\r\n })),\r\n },\r\n\r\n // utilization\r\n {\r\n yAxis: 'utilization',\r\n type: 'column',\r\n stack: 'utilization',\r\n name: 'Idle Hours',\r\n color: `#${globalColors[21]?.Hex || 'AAAAAA'}`,\r\n borderColor: this.foregroundColor,\r\n data: utilization.Data.map(entity => ({\r\n y: (entity.HoursError) ? null : entity.IdleHours,\r\n color: this.getEntityColorPattern(entity, globalColors[21]?.Hex || 'AAAAAA'),\r\n custom: { entity }\r\n }))\r\n },\r\n {\r\n yAxis: 'utilization',\r\n type: 'column',\r\n stack: 'utilization',\r\n name: 'Stopped Hours',\r\n color: `#${globalColors[22]?.Hex || 'C00000'}`,\r\n borderColor: this.foregroundColor,\r\n data: utilization.Data.map(entity => ({\r\n y: (entity.HoursError) ? null : entity.StoppedHours,\r\n color: this.getEntityColorPattern(entity, globalColors[22]?.Hex || 'C00000'),\r\n custom: { entity }\r\n }))\r\n },\r\n {\r\n yAxis: 'utilization',\r\n type: 'column',\r\n stack: 'utilization',\r\n name: 'Working Hours',\r\n color: `#${globalColors[23].Hex || '92D050'}`,\r\n borderColor: this.foregroundColor,\r\n data: utilization.Data.map(entity => ({\r\n y: (entity.HoursError) ? null : entity.WorkHours,\r\n color: this.getEntityColorPattern(entity, globalColors[23]?.Hex || '92D050'),\r\n custom: { entity }\r\n }))\r\n }\r\n ]\r\n }\r\n });\r\n }\r\n\r\n private getEntityColorPattern(entity: AssetDetailUtilization | TotalUtilization, baseColor: string) {\r\n return entity.IsApproximated ? {\r\n pattern: {\r\n path: {\r\n d: 'M 0 0 L 10 10 M 9 -1 L 11 1 M -1 9 L 1 11',\r\n strokeWidth: 0.5\r\n },\r\n width: 10,\r\n height: 10,\r\n backgroundColor: `#${baseColor}`,\r\n color: `#c0c0c0`,\r\n opacity: 1\r\n }\r\n } : `#${baseColor}`;\r\n }\r\n\r\n public get backgroundColor() {\r\n switch (this.themeId) {\r\n default:\r\n case 1:\r\n return '#383838';\r\n\r\n case 2:\r\n return '#ffffff';\r\n }\r\n }\r\n\r\n public get foregroundColor() {\r\n switch (this.themeId) {\r\n default:\r\n case 1:\r\n return '#ffffff';\r\n case 2:\r\n return '#000000';\r\n }\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, Host } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[rfvDrawerOrigin]'\r\n})\r\nexport class DrawerOriginDirective {\r\n public constructor(\r\n @Host()\r\n public elementRef: ElementRef\r\n ) { }\r\n}","import { Directive, HostListener, ElementRef, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[hover-class]'\r\n})\r\nexport class HoverClassDirective {\r\n\r\n constructor(public elementRef:ElementRef) { }\r\n @Input('hover-class') hoverClass:any; \r\n\r\n @HostListener('mouseenter') onMouseEnter() {\r\n this.elementRef.nativeElement.classList.add(this.hoverClass);\r\n }\r\n\r\n @HostListener('mouseleave') onMouseLeave() {\r\n this.elementRef.nativeElement.classList.remove(this.hoverClass);\r\n }\r\n\r\n}","import { Directive, Input, ElementRef, Renderer2, AfterViewInit } from '@angular/core';\r\nimport { UnitMachineAssetComponent } from '@rfv/modules/core/models/'\r\n\r\n@Directive({\r\n selector: '[machineInfoComponent]'\r\n})\r\nexport class MachineInfoComponentDirective implements AfterViewInit {\r\n @Input() component: UnitMachineAssetComponent;\r\n\r\n private readonly accClasses = { second: 'second-level', third: 'third-level', fourth: 'fourth-level' };\r\n\r\n constructor(private elRef: ElementRef, private ren2: Renderer2) {}\r\n\r\n ngAfterViewInit() {\r\n\r\n if (!this.component) return;\r\n\r\n switch (this.component.MachineComponentId) {\r\n\r\n case 7: this.ren2.addClass(this.elRef.nativeElement, this.accClasses.second); break; // service\r\n case 8: this.ren2.addClass(this.elRef.nativeElement, this.accClasses.third); break; // stage\r\n case 4: this.ren2.addClass(this.elRef.nativeElement, this.accClasses.fourth); break; // cylinder\r\n }\r\n }\r\n\r\n}\r\n","import { Directive, HostListener, Input, ElementRef, Renderer2, AfterViewInit } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appToggleAccordion]'\r\n})\r\nexport class ToggleAccordionDirective implements AfterViewInit {\r\n @Input() isInitiallyOpen = false;\r\n\r\n private accordionEl = null;\r\n private readonly accClasses = { active: 'active', inactive: 'inactive' };\r\n\r\n constructor(private elRef: ElementRef, private ren2: Renderer2) {}\r\n\r\n ngAfterViewInit() {\r\n this.accordionEl = this.elRef.nativeElement.closest('.accordion');\r\n\r\n if (this.isInitiallyOpen) {\r\n this.toggleAccordionActive('active');\r\n } else {\r\n this.toggleAccordionActive('inactive');\r\n }\r\n }\r\n\r\n @HostListener('click', ['$event']) onClick() {\r\n if (this.accordionEl) {\r\n if (this.accordionEl.classList.contains(this.accClasses.active)) {\r\n this.toggleAccordionActive('inactive');\r\n } else {\r\n this.toggleAccordionActive('active');\r\n }\r\n }\r\n }\r\n\r\n private toggleAccordionActive(accState: 'active' | 'inactive') {\r\n if(this.accordionEl != null){\r\n if (accState === 'active') {\r\n this.ren2.removeClass(this.accordionEl, this.accClasses.inactive);\r\n this.ren2.addClass(this.accordionEl, this.accClasses.active);\r\n }\r\n if (accState === 'inactive') {\r\n this.ren2.removeClass(this.accordionEl, this.accClasses.active);\r\n this.ren2.addClass(this.accordionEl, this.accClasses.inactive);\r\n }\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\nimport { AssetDatapointSetting } from '@rfv/modules/core/models';\r\n\r\n@Pipe({\r\n name: 'filterDisabledDatapoints'\r\n})\r\nexport class FilterDisabledDatapointsPipe implements PipeTransform {\r\n\r\n transform(datapoints: AssetDatapointSetting[], args?: any): any {\r\n if (!datapoints || datapoints.length < 1) {\r\n return null;\r\n }\r\n return datapoints.filter(datapoint => datapoint.IsDisabled === false);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { MachineComponent } from \"@rfv/modules/core/models/machine-info/machine-component.model\";\r\n\r\n@Pipe({ name: 'filterMachineComponent' })\r\nexport class FilterMachineComponent implements PipeTransform {\r\n transform(components: MachineComponent[], field: string, value: number) {\r\n return components.filter(c => c[field] === value);\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'roundNumber'\r\n})\r\nexport class RoundNumberPipe implements PipeTransform {\r\n transform(value: number, decimals: number = 2, roundIfNecessary: boolean = true): any {\r\n if (roundIfNecessary) {\r\n return Math.round((value + Number.EPSILON) * (10 ** decimals)) / (10 ** decimals);\r\n } else {\r\n const numSign = value >= 0 ? 1 : -1;\r\n return (Math.round((value * Math.pow(10, decimals)) + (numSign * 0.0001)) / Math.pow(10, decimals)).toFixed(decimals);\r\n }\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { select, Store } from '@ngrx/store';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { takeWhile } from 'rxjs/operators';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class UserPermissionService implements OnDestroy {\r\n\r\n serviceActive = true;\r\n\r\n userPermissions$: Observable>;\r\n userPermissions: Dictionary<{tag: string, ids: number[]}>;\r\n\r\n public constructor(private store: Store) {\r\n this.Init();\r\n }\r\n\r\n Init(): void {\r\n this.userPermissions$ = this.store.pipe(select(fromCore.UserPermissions.getEntities));\r\n\r\n this.userPermissions$.pipe(\r\n takeWhile(() => this.serviceActive)\r\n ).subscribe(permissions => {\r\n if (permissions) {\r\n this.userPermissions = permissions;\r\n }\r\n });\r\n }\r\n\r\n hasAccess(tag: string): boolean {\r\n if (tag === '') {\r\n return true;\r\n } else if (this.userPermissions && this.userPermissions[tag]) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getPermissions(): Dictionary<{tag: string, ids: number[]}> {\r\n return Object.assign({}, this.userPermissions); // return a copy not a reference\r\n }\r\n\r\n idsByTag(tag: string): number[] {\r\n if (this.userPermissions && this.userPermissions[tag]) {\r\n return this.userPermissions[tag].ids;\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.serviceActive = false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class TableGroupService {\r\n\r\n private _notifyHeader = new Subject();\r\n private _notifyGroups = new Subject();\r\n \r\n notifyHeaderObservable$ = this._notifyHeader.asObservable();\r\n notifyGroupsObservable$ = this._notifyGroups.asObservable();\r\n\r\n public notifyHeader(isAnyExpanded: boolean) {\r\n this._notifyHeader.next(isAnyExpanded);\r\n }\r\n public notifyGroups(expand: boolean) {\r\n this._notifyGroups.next(expand);\r\n }\r\n\r\n}\r\n","import { InvolveModule } from './../involve/involve.module';\r\nimport { ProgressBarComponent } from './components/progress-bar/progress-bar.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\n\r\n\r\n/* Other Modules */\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { GridsterModule } from 'angular-gridster2';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { ColorPickerModule } from 'ngx-color-picker';\r\n\r\n/* Components */\r\nimport { RfvCheckerComponent } from './components/rfv-checker/rfv-checker.component';\r\nimport { ContentContainerComponent } from './components/content-container/content-container.component';\r\nimport { DataItemComponent } from './components/data-item/data-item.component';\r\nimport { ErrorComponent } from './components/error/error.component';\r\nimport { FilterGroupButtonComponent } from './components/filter-group-button/filter-group-button.component';\r\nimport { SampleTimeFooterComponent } from './components/sample-time-footer/sample-time-footer.component';\r\nimport { FullscreenBreadcrumbsActionsComponent } from './components/fullscreen-breadcrumbs-actions/fullscreen-breadcrumbs-actions.component';\r\nimport { SelectComponent } from './components/select/select.component';\r\nimport { TileComponent } from './components/tile/tile.component';\r\nimport { TileHeaderComponent } from './components/tile/tile-header.component';\r\nimport { TileContentComponent } from './components/tile/tile-content.component';\r\nimport { TileFooterComponent } from './components/tile/tile-footer.component';\r\nimport { TileFooterButtonsComponent } from './components/tile/tile-footer-buttons.component';\r\nimport { CarouselComponent } from './components/carousel/carousel';\r\nimport { CarouselIndicatorComponent } from './components/carousel/carousel-indicator';\r\nimport { CarouselContentComponent, CarouselContentPortal } from './components/carousel/carousel-content';\r\nimport { CarouselSlideComponent } from './components/carousel/carousel-slide';\r\nimport { DropdownMenuComponent } from './components/dropdown-menu/dropdown-menu.component';\r\nimport { ColorPickerComponent } from './components/color-picker/color-picker.component';\r\nimport { InlineSpinnerComponent } from './components/inline-spinner/inline-spinner.component';\r\nimport { TileHeaderContentWrapperComponent } from './components/tile-header/tile-header-content-wrapper.component';\r\nimport { TileHeaderButtonComponent } from './components/tile-header/tile-header-button/tile-header-button.component';\r\nimport { TileHeaderTabComponent } from './components/tile-header/tile-header-tab/tile-header-tab.component';\r\nimport { TileHeaderListItemComponent } from './components/tile-header/tile-header-list-item/tile-header-list-item.component';\r\nimport { TileHeaderTitleComponent } from './components/tile-header/tile-header-title/tile-header-title.component';\r\nimport { MultiSelectComponent } from './components/multi-select/multi-select.component';\r\nimport { SimpleDrawerComponent } from './components/simple-drawer/simple-drawer.component';\r\nimport { SvgIconComponent } from './components/svg-icon/svg-icon.component';\r\nimport { DynamicTooltipComponent } from './components/dynamic-tooltip/dynamic-tooltip.component';\r\nimport { RfvFilterInputComponent } from './components/rfv-filter-input/rfv-filter-input.component';\r\nimport { SimpleDrawerHeaderComponent } from './components/simple-drawer/simple-drawer-header/simple-drawer-header.component';\r\nimport { StatusIndicatorComponent } from './components/status-indicator/status-indicator.component';\r\nimport { ToggleButtonComponent } from './components/buttons/toggle-button/toggle-button.component';\r\nimport { FormValidationErrorComponent } from './components/form-validation-error/form-validation-error.component';\r\nimport { ReportScheduleListComponent } from './components/report-schedule-list/report-schedule-list.component';\r\nimport { SharedAlarmDrawerComponent } from './components/alarms-drawer/alarms-drawer.component';\r\nimport { ReloadIndicatorComponent } from './components/reload-indicator/reload-indicator.component';\r\nimport { CollapsableSectionComponent } from './components/collapsable-section/collapsable-section.component';\r\nimport { OverlaySpinnerComponent } from './components/overlay-spinner/overlay-spinner.component';\r\nimport { DeviceInfoRmsComponent } from './components/device-info/rms/rms.component';\r\nimport { DeviceInfoPleComponent } from './components/device-info/ple/ple.component';\r\nimport { PleTableComponent } from './components/device-info/ple-table/ple-table.component';\r\nimport { MachineInfoComponent } from './components/machine-info/machine-info.component';\r\nimport { UnitInfoEditorComponent } from './components/unit-info-editor/unit-info-editor.component';\r\nimport { UtilizationChartComponent } from './components/utilization-chart/utilization-chart.component';\r\n\r\nimport { TABS } from './components/tabs';\r\nimport { OVERLAY } from './components/overlay';\r\n\r\n/* Pipes */\r\nimport { CamelcaseSeparator } from './pipes/camelcase-separator';\r\nimport { ExtractKeyPipe } from './pipes/extract-key.pipe';\r\nimport { ExtractValuePipe } from './pipes/extract-value.pipe';\r\nimport { ReversePipe } from './pipes/reverse';\r\nimport { ToPercentagePipe } from './pipes/to-percentage.pipe';\r\nimport { AcronymPipe } from './pipes/acronym.pipe';\r\nimport { SortFormArrayPipe } from './pipes/sort-form-array-pipe';\r\nimport { CountOrNoPipe } from './pipes/count-or-no.pipe';\r\nimport { ChunkArrayPipe } from './pipes/chunk-array.pipe';\r\nimport { FilterByKeyValuePipe } from './pipes/filter-by-key-value.pipe';\r\nimport { RoundNumberPipe } from './pipes/round-number.pipe';\r\nimport { ArrayToSet } from './pipes/array-to-set.pipe';\r\nimport { FilterMachineComponent } from './pipes/filter-machine-component';\r\nimport { FilterDisabledDatapointsPipe } from './pipes/filter-disabled-datapoints.pipe';\r\n\r\n/* Directives */\r\nimport { UpDownTooltipDirective } from './directives/up-down-tooltip.directive';\r\nimport { SetTableBodyHeightDirective } from './directives/set-table-body-height.directive';\r\nimport { ToggleAccordionDirective } from './directives/toggle-accordion.directive';\r\nimport { DropdownTableFixDirective } from './directives/dropdown-table-fix.directive';\r\nimport { DrawerOriginDirective } from '@rfv/modules/shared/directives/drawer-origin.directive';\r\nimport { TabsSliderDirective } from './components/tabs/tabs-slider.directive';\r\nimport { ReloadButtonComponent } from './components/buttons/reload-button/reload-button.component';\r\nimport { ShowHideButtonsDirective } from './components/tile-header/show-hide-buttons.directive';\r\nimport { MachineInfoComponentDirective } from './directives/machine-info-component';\r\n\r\n\r\nimport { UserPermissionService } from './services/user-permission.service';\r\nimport { RfvIconComponent } from './components/rfv-icon/rfv-icon.component';\r\nimport { JobTitleDrawerComponent } from './components/job-title-drawer/job-title-drawer.component';\r\nimport { TableGroupService } from './services/table-group.service';\r\n\r\nimport { RfvGaugeViewComponent } from './components/gauge-view/gauge-view.component';\r\nimport { HoverClassDirective } from './directives/hover-class.directive';\r\nimport { HighchartsChartModule } from 'highcharts-angular';\r\n\r\nconst COMPONENTS = [\r\n RfvCheckerComponent,\r\n ContentContainerComponent,\r\n DataItemComponent,\r\n ErrorComponent,\r\n ToggleButtonComponent,\r\n SampleTimeFooterComponent,\r\n FullscreenBreadcrumbsActionsComponent,\r\n FilterGroupButtonComponent,\r\n RfvFilterInputComponent,\r\n ReloadButtonComponent,\r\n SelectComponent,\r\n TileComponent,\r\n TileHeaderComponent,\r\n TileHeaderButtonComponent,\r\n TileHeaderListItemComponent,\r\n TileHeaderTitleComponent,\r\n TileHeaderContentWrapperComponent,\r\n TileHeaderTabComponent,\r\n TileContentComponent,\r\n TileFooterComponent,\r\n TileFooterButtonsComponent,\r\n CarouselComponent,\r\n CarouselSlideComponent,\r\n CarouselIndicatorComponent,\r\n CarouselContentComponent,\r\n CarouselContentPortal,\r\n DropdownMenuComponent,\r\n ColorPickerComponent,\r\n SvgIconComponent,\r\n DynamicTooltipComponent,\r\n StatusIndicatorComponent,\r\n InlineSpinnerComponent,\r\n MultiSelectComponent,\r\n SimpleDrawerComponent,\r\n SimpleDrawerHeaderComponent,\r\n FormValidationErrorComponent,\r\n ReloadIndicatorComponent,\r\n ProgressBarComponent,\r\n ReportScheduleListComponent,\r\n SharedAlarmDrawerComponent,\r\n CollapsableSectionComponent,\r\n OverlaySpinnerComponent,\r\n DeviceInfoRmsComponent,\r\n DeviceInfoPleComponent,\r\n PleTableComponent,\r\n MachineInfoComponent,\r\n UnitInfoEditorComponent,\r\n JobTitleDrawerComponent,\r\n UtilizationChartComponent,\r\n RfvGaugeViewComponent, \r\n ...TABS,\r\n ...OVERLAY\r\n];\r\n\r\nconst PIPES = [\r\n CamelcaseSeparator,\r\n ExtractKeyPipe,\r\n ExtractValuePipe,\r\n FilterDisabledDatapointsPipe,\r\n ReversePipe,\r\n ToPercentagePipe,\r\n AcronymPipe,\r\n SortFormArrayPipe,\r\n CountOrNoPipe,\r\n ChunkArrayPipe,\r\n FilterByKeyValuePipe,\r\n RoundNumberPipe,\r\n ArrayToSet,\r\n FilterMachineComponent,\r\n RfvIconComponent\r\n];\r\n\r\nconst DIRECTIVES = [\r\n ToggleAccordionDirective,\r\n SetTableBodyHeightDirective,\r\n UpDownTooltipDirective,\r\n DropdownTableFixDirective,\r\n DrawerOriginDirective,\r\n TabsSliderDirective,\r\n ShowHideButtonsDirective,\r\n MachineInfoComponentDirective,\r\n HoverClassDirective\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n // angular\r\n CommonModule,\r\n FormsModule,\r\n OverlayModule,\r\n PortalModule,\r\n DragDropModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n FlexLayoutModule,\r\n\r\n // 3rd party\r\n GridsterModule,\r\n HighchartsChartModule,\r\n ColorPickerModule,\r\n\r\n InvolveModule\r\n ],\r\n\r\n declarations: [\r\n ...COMPONENTS,\r\n ...PIPES,\r\n ...DIRECTIVES,\r\n ],\r\n\r\n exports: [\r\n // angular\r\n CommonModule,\r\n FormsModule,\r\n OverlayModule,\r\n PortalModule,\r\n DragDropModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n FlexLayoutModule,\r\n\r\n // 3rd party\r\n\r\n InvolveModule,\r\n ...COMPONENTS,\r\n ...PIPES,\r\n ...DIRECTIVES\r\n ],\r\n providers: [\r\n UserPermissionService,\r\n TableGroupService\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","export enum AppColors {\r\n white = '#ffffff',\r\n white_d = '#f3f3f3',\r\n white_d2 = '#eaeaea',\r\n white_d3 = '#d5d5d5',\r\n white_d4 = '#828282',\r\n gray = '#828282',\r\n material_grey = '#424242',\r\n black_l5 = '#404040',\r\n black_l4 = '#383838',\r\n black_l3 = '#333333',\r\n black_l2 = '#2a2a2a',\r\n black_l = '#212121',\r\n black = '#000',\r\n green = '#6BE500',\r\n green_l = '#A3E700',\r\n yellow = '#F7AE1F',\r\n yellow_l = '#FFC72C',\r\n yellow_l2 = '#FFE619',\r\n yellow_l3 = '#FCE95E',\r\n blue = '#0274B5',\r\n blue_l = '#008BDA',\r\n red = '#ED1C2E',\r\n red_l = '#EF4545',\r\n default = '#D5D5D5',\r\n normal = '#6BE500',\r\n shutdown = '#EF4545',\r\n commloss = '#828282',\r\n present = '#FF0000',\r\n invalid = '#CCCC00',\r\n reset = '#0195DC',\r\n cleared = '#000000',\r\n Running = '#6BE500',\r\n Shutdown = '#EF4545',\r\n Invalid = '#CCCC00',\r\n CommsLoss = '#828282'\r\n}\r\n","import { default as _rollupMoment, default as _moment, Moment } from 'moment';\r\nimport { default as _rollupMomentTimezone } from 'moment-timezone';\r\n\r\nexport { Moment } from 'moment';\r\nexport const moment = _rollupMoment || _moment || _rollupMomentTimezone;\r\n\r\nexport class MomentUtils {\r\n\r\n public static isMidnightTime(date: Moment): boolean {\r\n return date?.hours() === 0 && date?.minutes() === 0 && date?.seconds() === 0;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n\r\nimport { reducer } from './reducer';\r\nimport { Effects } from './effects'\r\n\r\n@NgModule({\r\n imports: [\r\n StoreModule.forFeature('sitemap', reducer),\r\n EffectsModule.forFeature([ Effects ])\r\n ]\r\n})\r\nexport class SitemapStoreModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\nimport { InvolveModule } from '@rfv/modules/involve/involve.module';\r\n\r\nimport { SitemapComponent } from './sitemap.component';\r\nimport { MyFleetComponent } from './my-fleet.component';\r\nimport { FavoritesComponent } from './favorites.component';\r\nimport { FilterComponent } from './filter.component';\r\n\r\nimport { SideNavComponent } from './side-nav.component'; \r\nimport { SideNavItemComponent } from './side-nav-item.component';\r\n\r\nimport { SitemapStoreModule } from './store/sitemap-store.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FlexLayoutModule,\r\n ReactiveFormsModule,\r\n OverlayModule,\r\n\r\n InvolveModule,\r\n\r\n SitemapStoreModule\r\n ],\r\n\r\n declarations: [\r\n SitemapComponent,\r\n\r\n MyFleetComponent,\r\n FavoritesComponent,\r\n FilterComponent,\r\n \r\n SideNavComponent,\r\n SideNavItemComponent\r\n ],\r\n\r\n exports: [\r\n SitemapComponent\r\n ],\r\n})\r\nexport class SitemapModule {}\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { SitemapGroup, Asset, SiteEditorModel, ApiError } from '@rfv/modules/core/models';\r\nimport { Section } from '@rfv/modules/drawers/models/section.model';\r\nimport { UnitCreation } from '@rfv/modules/support/modules/unit-creation/models/unit-creation.model';\r\n\r\nimport { Dashboard, Tile } from '@rfv/modules/core/models';\r\n\r\nexport const SelectAsset = createAction('[Sitemap] Select Asset', (id: number, autoSelectDashboard: boolean = false) => ({ id, autoSelectDashboard }));\r\nexport const SelectSitemapGroup = createAction('[Sitemap] Select SitemapGroup', (id: number, autoSelectDashboard: boolean = false) => ({ id, autoSelectDashboard }));\r\n\r\nexport const SelectDashboard = createAction('[Sitemap] Select Dashboard', (dashboard: Dashboard, sitemapGroupId?: number, assetId?: number) => ({ dashboard, sitemapGroupId, assetId }));\r\nexport const SelectTile = createAction('[Sitemap] Select Tile', (dashboard: Dashboard, tile: Tile, sitemapGroupId?: number, assetId?: number) => ({ dashboard, tile, sitemapGroupId, assetId }));\r\n\r\nexport const Search = createAction('[Sitemap] Search', (query: string) => ({ query }));\r\n\r\n\r\n// WHY IS ALL THIS HERE..................................................... WTF GUYS THIS BELONGS IN CORE\r\n\r\nexport const SaveSitemap = createAction('[Sitemap] Save Sitemap', (sitemapChanges: SiteEditorModel) => ({ sitemapChanges }));\r\nexport const SaveSitemapFail = createAction('[Sitemap] Save Sitemap Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSitemapSuccess = createAction('[Sitemap] Save Sitemap Success');\r\n\r\n//SECTION\r\nexport const SaveSection = createAction('[Sitemap] Save Section', (section: Section) => ({ section }));\r\nexport const SaveSectionFail = createAction('[Sitemap] Save Section Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSectionSuccess = createAction('[Sitemap] Save Section Success');\r\n\r\n//UNIT\r\nexport const LoadUnitToEdit = createAction(\"[Core] Load Unit To Edit\", (assetId: number) => ({ assetId }));\r\nexport const LoadUnitToEditFail = createAction(\"[Core] Load Unit To Edit Fail\", (error: ApiError) => ({ error }));\r\nexport const LoadUnitToEditSuccess = createAction(\"[Core] Load Unit To Edit Success\", (asset: Asset) => ({ asset }));\r\nexport const ClearUnitToEdit = createAction(\"[Core] Clear Unit To Edit\");\r\n\r\nexport const SaveUnit = createAction('[Sitemap] Save Unit', (unit: UnitCreation) => ({ unit }));\r\nexport const SaveUnitFail = createAction('[Sitemap] Save Unit Fail', (error: ApiError) => ({ error }));\r\nexport const SaveUnitSuccess = createAction('[Sitemap] Save Unit Success');\r\n\r\nexport const AddSection = createAction('[Sitemap] Add Section', (Section: Section) => ({ Section }));\r\nexport const AddSectionFail = createAction('[Sitemap] Add Section Fail', (error: ApiError) => ({ error }));\r\nexport const AddSectionSuccess = createAction('[Sitemap] Add Section Success');\r\n\r\nexport const DeleteSection = createAction('[Sitemap] Delete Section', (sectionId: number) => ({ sectionId }));\r\nexport const DeleteSectionFail = createAction('[Sitemap] Delete Section Fail', (error: ApiError) => ({ error }));\r\nexport const DeleteSectionSuccess = createAction('[Sitemap] Delete Section Success');\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { SiteEditorModel, } from '@rfv/modules/core/models';\r\nimport { Section } from '@rfv/modules/drawers/models/section.model';\r\nimport { UnitCreation } from '@rfv/modules/support/modules/unit-creation/models/unit-creation.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SitemapService {\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n saveSitemap(sitemap: SiteEditorModel) {\r\n return this._http.post(`/v2/sitemap`, sitemap);\r\n }\r\n\r\n saveSection(section: Section) {\r\n return this._http.put(`/v1/support/sitemap-group`, [section]);\r\n }\r\n\r\n saveUnit(unit: UnitCreation) {\r\n return this._http.put(`/v1/sitemap/unit`, unit);\r\n }\r\n}\r\n","import { AssetService } from '@rfv/modules/core/services/asset.service';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { of, combineLatest, from } from 'rxjs';\r\nimport { catchError, tap, switchMap, mergeMap, map, take, withLatestFrom, filter } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as SitemapActions from './actions';\r\nimport * as SitemapSelectors from './selectors';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromLayout from '@rfv/store/layout';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\n\r\nimport { SectionService } from '@rfv/modules/drawers/services/section.service';\r\nimport { SitemapService } from '@rfv/modules/core/services/sitemap.service';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store,\r\n private _sitemapService: SitemapService,\r\n private _assetService: AssetService,\r\n private _sectionService: SectionService,\r\n ) { }\r\n\r\n public getSelectedAssetToEdit$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.LoadUnitToEdit),\r\n switchMap(action => this._assetService.loadUnitToEdit(action.assetId).pipe(\r\n map(asset => SitemapActions.LoadUnitToEditSuccess(asset)),\r\n catchError(error => of(SitemapActions.LoadUnitToEditFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public onSelectSitemap$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SelectSitemapGroup),\r\n filter(action => action.autoSelectDashboard),\r\n switchMap(action => combineLatest([\r\n this._store.select(fromCore.SitemapGroups.getEntities),\r\n this._store.select(fromCore.AssetTypes.getFirstDashboardId)\r\n ]).pipe(\r\n map(([ sitemapGroupEntities, getFirstDashboardId ]) => {\r\n let dashboardId = getFirstDashboardId(sitemapGroupEntities[action.id].assetTypeId);\r\n return fromRoot.Router.Go(['dashboard', dashboardId, 'sitemapGroup', action.id]);\r\n })\r\n ))\r\n )\r\n );\r\n\r\n public onCoreLoad$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.LoadSuccess),\r\n withLatestFrom(\r\n this._store.select(fromRoot.Router.getUrl),\r\n this._store.select(fromCore.SitemapGroups.getAll),\r\n this._store.select(fromCore.Assets.Entities.getAll)\r\n ),\r\n take(1),\r\n map(([action, url, sitemapGroups, assets]) => sitemapGroups.length === 1 && assets.length === 0\r\n ? url === \"/\"\r\n ? fromSitemap.SelectSitemapGroup(sitemapGroups[0].id, true)\r\n : fromRoot.Layout.CloseMainMenu() // this is a no-op but we need an action\r\n : fromRoot.Layout.OpenMainMenu()\r\n )\r\n )\r\n )\r\n\r\n public onSelectAsset$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SelectAsset),\r\n filter(action => action.autoSelectDashboard),\r\n switchMap(action => combineLatest([\r\n this._store.select(fromCore.Assets.Entities.getEntities),\r\n this._store.select(fromCore.AssetTypes.getFirstDashboardId)\r\n ]).pipe(\r\n map(([ assetEntities, getFirstDashboardId ]) => {\r\n let dashboardId = getFirstDashboardId(assetEntities[action.id].assetTypeId);\r\n return fromRoot.Router.Go(['dashboard', dashboardId, 'asset', action.id]);\r\n })\r\n ))\r\n )\r\n );\r\n\r\n public onSelectDashboard$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SelectDashboard),\r\n withLatestFrom(\r\n this._store.select(SitemapSelectors.getSelectedSitemapGroupId),\r\n this._store.select(SitemapSelectors.getSelectedAssetId),\r\n this._store.select(fromRoot.Layout.isMobile)\r\n ),\r\n tap(([action, sitemapGroupId, assetId, isMobile]) => {\r\n // allow action override\r\n sitemapGroupId = action.sitemapGroupId || sitemapGroupId;\r\n assetId = action.assetId || assetId;\r\n\r\n if (sitemapGroupId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', action.dashboard.id, 'sitemapGroup', sitemapGroupId]));\r\n } else if (assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', action.dashboard.id, 'asset', assetId]));\r\n }\r\n\r\n if (isMobile)\r\n this._store.dispatch(fromRoot.Layout.CloseMainMenu());\r\n })\r\n ), { dispatch: false}\r\n );\r\n\r\n public onSelectTile$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SelectTile),\r\n withLatestFrom(\r\n this._store.select(SitemapSelectors.getSelectedSitemapGroupId),\r\n this._store.select(SitemapSelectors.getSelectedAssetId),\r\n this._store.select(fromRoot.Layout.isMobile)\r\n ),\r\n tap(([action, sitemapGroupId, assetId, isMobile]) => {\r\n if (!action.tile.hasFullMode) {\r\n this._store.dispatch(SitemapActions.SelectDashboard(action.dashboard));\r\n return;\r\n }\r\n\r\n // allow action override\r\n sitemapGroupId = action.sitemapGroupId || sitemapGroupId;\r\n assetId = action.assetId || assetId;\r\n\r\n switch (action.tile.version) {\r\n case 2:\r\n if (sitemapGroupId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', action.dashboard.id, 'sitemapGroup', sitemapGroupId], { queryParams: { tileId: action.tile.id }}));\r\n } else if (assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', action.dashboard.id, 'asset', assetId], { queryParams: { tileId: action.tile.id }}));\r\n }\r\n\r\n break;\r\n\r\n case 1:\r\n default:\r\n if (sitemapGroupId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', action.dashboard.id, 'sitemapGroup', sitemapGroupId, 'fullscreen', action.tile.id]));\r\n } else if (assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', action.dashboard.id, 'asset', assetId, 'fullscreen', action.tile.id]));\r\n }\r\n break;\r\n }\r\n\r\n if (isMobile)\r\n this._store.dispatch(fromRoot.Layout.CloseMainMenu());\r\n })\r\n ), { dispatch: false }\r\n )\r\n\r\n public saveSitemap$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SaveSitemap),\r\n switchMap(action => this._sitemapService.saveSitemap(action.sitemapChanges).pipe(\r\n mergeMap(() => [\r\n SitemapActions.SaveSitemapSuccess()\r\n ]),\r\n catchError(error => of(SitemapActions.SaveSitemapFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n savesSitemapSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SaveSitemapSuccess),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Sitemap Saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromCore.SitemapGroups.Load(),\r\n fromCore.Assets.Entities.Load()\r\n ])\r\n )\r\n );\r\n\r\n savesSitemapFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SaveSitemapFail),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `There was an error saving the sitemap`,\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n\r\n //Edit SitemapEditorItem\r\n public saveSection$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SaveSection),\r\n switchMap(action => this._sitemapService.saveSection(action.section).pipe(\r\n mergeMap(() => [\r\n SitemapActions.SaveSectionSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Sitemap Saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({}),\r\n fromCore.SitemapGroups.Load()\r\n ]),\r\n catchError(error => from([\r\n SitemapActions.SaveSectionFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `There was an error saving the sitemap`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({})\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public deleteSection$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.DeleteSection),\r\n switchMap(action => this._sectionService.delete(action.sectionId).pipe(\r\n mergeMap(() => [\r\n SitemapActions.DeleteSectionSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Section Removed`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({}),\r\n fromCore.SitemapGroups.Load(),\r\n fromCore.Assets.Entities.Load(),\r\n ]),\r\n catchError(error => from([\r\n SitemapActions.DeleteSectionFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `There was an error removing the section`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({})\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public saveUnit$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.SaveUnit),\r\n switchMap(action => this._sitemapService.saveUnit(action.unit).pipe(\r\n mergeMap(() => [\r\n SitemapActions.SaveUnitSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Unit Saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({}),\r\n fromCore.Assets.Entities.Load()\r\n ]),\r\n catchError(error => from([\r\n SitemapActions.SaveUnitFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `There was an error saving the unit`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({})\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public addUnit$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(SitemapActions.AddSection),\r\n switchMap(action => this._sectionService.save(action.Section).pipe(\r\n mergeMap(() => [\r\n SitemapActions.AddSectionSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Section Added`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({}),\r\n fromCore.SitemapGroups.Load(),\r\n fromCore.Assets.Entities.Load()\r\n ]),\r\n catchError(error => from([\r\n SitemapActions.AddSectionFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `There was an error adding the Section`,\r\n autoClose: 3000\r\n }\r\n }),\r\n fromLayout.CloseDrawer({})\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as SitemapActions from './actions';\r\n\r\nconst sitemapReducer = createReducer(\r\n initialState,\r\n\r\n on(fromCore.Customers.Select, state => initialState),\r\n\r\n on(SitemapActions.SelectAsset, (state, { id }) => ({\r\n ...state,\r\n selectedSitemapGroupId: null,\r\n selectedAssetId: id\r\n })),\r\n\r\n on(SitemapActions.SelectSitemapGroup, (state, { id }) => ({\r\n ...state,\r\n selectedSitemapGroupId: id,\r\n selectedAssetId: id ? null : state.selectedAssetId\r\n })),\r\n\r\n on(SitemapActions.Search, (state, { query }) => ({\r\n ...state,\r\n query\r\n })),\r\n \r\n on(SitemapActions.SaveSitemap, state => ({\r\n ...state,\r\n isSavingSitemap: true\r\n })),\r\n\r\n on(SitemapActions.SaveSitemapSuccess, state => ({\r\n ...state,\r\n isSavingSitemap: false\r\n })),\r\n\r\n on(SitemapActions.SaveSitemapFail, state => ({\r\n ...state,\r\n isSavingSitemap: false\r\n })),\r\n\r\n\r\n //Site editor entries here\r\n on(SitemapActions.LoadUnitToEdit, state => ({\r\n ...state\r\n })),\r\n\r\n on(SitemapActions.LoadUnitToEditSuccess, (state, { asset }) => ({\r\n ...state,\r\n selectedUnitToEdit: asset\r\n })),\r\n\r\n on(SitemapActions.LoadUnitToEditFail, (state, { error }) => ({\r\n ...state,\r\n selectedUnitToEdit: null\r\n })),\r\n\r\n on(SitemapActions.ClearUnitToEdit, state => ({\r\n ...state,\r\n selectedUnitToEdit: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return sitemapReducer(state, action);\r\n}","import * as _ from 'lodash';\r\nimport { createSelector, createFeatureSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\n\r\nimport { Asset, Dashboard, SitemapGroup } from '@rfv/modules/core/models';\r\nimport { SitemapTree } from './models';\r\nimport { Dictionary } from '@ngrx/entity';\r\n\r\nexport const getState = createFeatureSelector('sitemap');\r\n\r\nexport const isLoaded = createSelector(\r\n fromCore.Assets.Entities.isLoaded,\r\n fromCore.SitemapGroups.isLoaded,\r\n (isAssetsLoaded, isSitemapGroupsLoaded) => isAssetsLoaded && isSitemapGroupsLoaded\r\n);\r\n\r\nexport const getSelectedAssetId = createSelector(getState, state => state.selectedAssetId);\r\nexport const getSelectedAsset = createSelector(\r\n getSelectedAssetId,\r\n fromCore.Assets.Entities.getEntities,\r\n (selectedAssetId, assetEntities) => assetEntities && assetEntities[selectedAssetId]\r\n);\r\n\r\nexport const getSelectedSitemapGroupId = createSelector(getState, state => state.selectedSitemapGroupId);\r\nexport const getSelectedSitemapGroup = createSelector(\r\n fromCore.SitemapGroups.getRoot,\r\n getSelectedAsset,\r\n getSelectedSitemapGroupId,\r\n fromCore.SitemapGroups.getEntities,\r\n (rootSitemapGroup, selectedAsset, selectedSitemapGroupId, sitemapGroupEntities) => {\r\n if (selectedAsset)\r\n return sitemapGroupEntities && sitemapGroupEntities[selectedAsset.sitemapGroupId];\r\n\r\n return selectedSitemapGroupId ? sitemapGroupEntities && sitemapGroupEntities[selectedSitemapGroupId] : rootSitemapGroup;\r\n }\r\n);\r\n\r\nexport const getSelectedPath = createSelector(\r\n getSelectedSitemapGroup,\r\n fromCore.SitemapGroups.getPath,\r\n (selectedSitemapGroup, getPath) => selectedSitemapGroup && getPath(selectedSitemapGroup.id) || []\r\n);\r\n\r\nexport const getSelectedPathString = createSelector(\r\n getSelectedSitemapGroup,\r\n fromCore.SitemapGroups.getPathString,\r\n (selectedSitemapGroup, getPathString) => getPathString(selectedSitemapGroup.id)\r\n);\r\n\r\nexport const getSelectedDashboards = createSelector(\r\n getSelectedSitemapGroup,\r\n getSelectedAsset,\r\n fromCore.AssetTypes.getDashboards,\r\n (selectedSitemapGroup, selectedAsset, getDashboards) => {\r\n let dashboards: Dashboard[] = []\r\n \r\n if (selectedAsset)\r\n dashboards = getDashboards(selectedAsset.assetTypeId);\r\n else if (selectedSitemapGroup)\r\n dashboards = getDashboards(selectedSitemapGroup.assetTypeId);\r\n \r\n // prevent sitemap showing tiles for single tile dashboards\r\n return dashboards.map(dashboard => {\r\n if (dashboard.tiles.length > 1)\r\n return dashboard;\r\n \r\n return { ...dashboard, tiles: [] };\r\n })\r\n }\r\n);\r\n\r\nexport const getAllSelectedSitemapGroupAssets = createSelector(\r\n getSelectedSitemapGroup,\r\n fromCore.SitemapGroups.getAll,\r\n fromCore.Assets.Entities.getAll,\r\n (selectedSitemapGroup, sitemapGroups, assets) => {\r\n if (selectedSitemapGroup) {\r\n let sitemapGroupChildren = getSitemapGroupChildren(selectedSitemapGroup.id, sitemapGroups);\r\n return assets.filter(asset => asset.sitemapGroupId == selectedSitemapGroup.id || sitemapGroupChildren.find(sitemapGroup => asset.sitemapGroupId == sitemapGroup.id));\r\n }\r\n }\r\n);\r\n\r\nfunction getSitemapGroupChildren(rootSitemapGroupId: number, allSitemapGroups: SitemapGroup[]) : SitemapGroup[] {\r\n let sitemapGroups = [];\r\n for (let i = 0; i < allSitemapGroups.length; i++) {\r\n if (allSitemapGroups[i].parentId == rootSitemapGroupId) {\r\n sitemapGroups.push(allSitemapGroups[i]);\r\n let childSitemapGroups = getSitemapGroupChildren(allSitemapGroups[i].id, allSitemapGroups);\r\n for (let j = 0; j < childSitemapGroups.length; j++) {\r\n sitemapGroups.push(childSitemapGroups[j]);\r\n }\r\n }\r\n }\r\n return sitemapGroups;\r\n}\r\n\r\nexport const getQuery = createSelector(getState, state => state.query);\r\nexport const isSearching = createSelector(getQuery, query => !!query);\r\nexport const isSavingSitemap = createSelector(getState, state => state.isSavingSitemap);\r\nexport const getSelectedUnitToEdit = createSelector(getState, state => state.selectedUnitToEdit);\r\n\r\nexport const getSitemapTree = createSelector(\r\n fromCore.SitemapGroups.getRoot,\r\n fromCore.SitemapGroups.getEntities,\r\n fromCore.Assets.Entities.getAll,\r\n (root, sitemapGroupEntities, assets) => {\r\n const sitemapTree: Dictionary = _.cloneDeep(sitemapGroupEntities);\r\n \r\n // get assets\r\n assets.forEach(asset => {\r\n const sitemapGroup = sitemapTree[asset.sitemapGroupId];\r\n \r\n if (!sitemapGroup) \r\n return;\r\n\r\n if (!sitemapGroup.assets)\r\n sitemapGroup.assets = [];\r\n\r\n \r\n sitemapGroup.assets.push(asset);\r\n });\r\n\r\n // build tree\r\n Object.keys(sitemapTree).reduce((sitemapTree, sitemapGroupId) => {\r\n const sitemapGroup = sitemapTree[sitemapGroupId];\r\n\r\n if (!sitemapGroup)\r\n return;\r\n\r\n if (!sitemapGroup.assets)\r\n sitemapGroup.assets = [];\r\n\r\n if (!sitemapGroup.children)\r\n sitemapGroup.children = [];\r\n\r\n if (sitemapGroup.parentId) {\r\n const parent = sitemapTree[sitemapGroup.parentId];\r\n\r\n if (parent) {\r\n if (!parent.children)\r\n parent.children = [];\r\n \r\n parent.children.push(sitemapGroup);\r\n }\r\n }\r\n\r\n return sitemapTree;\r\n }, sitemapTree);\r\n\r\n // sort tree\r\n Object.keys(sitemapTree).forEach(sitemapGroupId => {\r\n const sitemapGroup = sitemapTree[sitemapGroupId];\r\n sitemapGroup.assets = sitemapGroup.assets.sort((a, b) => a.name.localeCompare(b.name));\r\n sitemapGroup.children = sitemapGroup.children.sort((a, b) => a.name.localeCompare(b.name));\r\n });\r\n\r\n return root ? sitemapTree[root.id] : null;\r\n }\r\n);\r\n\r\nexport const isGlobalFilterDisabled = createSelector(\r\n fromDashboard.getSelectedSitemapGroupId,\r\n selectedSitemapGroupId => !selectedSitemapGroupId\r\n);\r\n\r\nexport const isGlobalFilterActive = createSelector(\r\n isGlobalFilterDisabled,\r\n fromGlobalFilter.getSelectedFilterId,\r\n (isGlobalFilterDisabled, selectedFilterId) => !isGlobalFilterDisabled && selectedFilterId > 0\r\n);\r\n\r\nexport const getGlobalFilterTooltip = createSelector(\r\n isGlobalFilterDisabled,\r\n isGlobalFilterActive,\r\n fromGlobalFilter.getSelectedFilterName,\r\n (isDisabled, isActive, filterName) => {\r\n if (isDisabled)\r\n return 'Filter not available for the current dashboard';\r\n\r\n return isActive ? 'Filter: ' + filterName : 'Filter: All Units';\r\n }\r\n);","import { Asset } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n selectedSitemapGroupId: number | null;\r\n selectedAssetId: number | null;\r\n selectedUnitToEdit: Asset;\r\n\r\n query: string;\r\n showAssetsOnly: boolean;\r\n\r\n isSearching: boolean;\r\n\r\n isSavingSitemap: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n selectedSitemapGroupId: null,\r\n selectedAssetId: null,\r\n selectedUnitToEdit: null,\r\n \r\n query: null,\r\n showAssetsOnly: false,\r\n\r\n isSearching: false,\r\n\r\n isSavingSitemap: false\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport {\r\n AllDeviceInformation,\r\n DeviceInformationForm,\r\n DSPAssociationItem,\r\n RMSDeviceInfo\r\n} from './../modules/device-info/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportDeviceInfoService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getForm(unitCreationTypeId: number) {\r\n return this._http.get(`/v1/support/device-info/form/${unitCreationTypeId}`);\r\n }\r\n\r\n public getMaxCommsAllowed(deviceId: number) {\r\n return this._http.get(`/v1/support/device-info/rms/max-comms/${deviceId}`);\r\n }\r\n\r\n //PLE\r\n\r\n public getPleDevices(isUnassociated: boolean) {\r\n return this._http.get(`/v1/support/device-info/ple/devices`, {\r\n params: {\r\n isUnassociated: isUnassociated.toString()\r\n }\r\n });\r\n }\r\n\r\n public getPleDeviceInformation(make: string, serialNumber: string) {\r\n return this._http.get(`/v1/support/device-info/ple/devices/${make}/${serialNumber}`);\r\n }\r\n\r\n public getPleDeviceAssocation(assetId: number) {\r\n return this._http.get(`/v1/support/device-info/ple/${assetId}`);\r\n }\r\n\r\n public savePleDeviceAssociation(unitCreationLogId: number, device: DSPAssociationItem, syncAssetName: boolean) {\r\n return this._http.post(`/v1/support/device-info/ple/${unitCreationLogId}`, device, {\r\n params: {\r\n syncAssetName: syncAssetName ? 'true' : 'false'\r\n }\r\n });\r\n }\r\n\r\n //RMS\r\n\r\n public getRmsDeviceInfo(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/device-info/rms/${unitCreationLogId}`);\r\n };\r\n\r\n public saveRmsDeviceInfo(unitCreationLogId: number, deviceInfo: RMSDeviceInfo) {\r\n return deviceInfo.Id > 0\r\n ? this._http.put(`/v1/support/device-info/rms/${unitCreationLogId}`, deviceInfo)\r\n : this._http.post(`/v1/support/device-info/rms/${unitCreationLogId}`, deviceInfo);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport {\r\n AssetShaCollection,\r\n RebootDeviceResponse,\r\n PLEVimsPushResult,\r\n VimsConfig,\r\n PLEConfigGroup\r\n} from './../modules/hardware-config/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportHardwareConfigService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n //PLE\r\n\r\n public getPleHardwareConfigGroups(env: string) {\r\n return this._http.get(`/v1/support/hardware-config/ple/config-groups`, {\r\n params: {\r\n env\r\n }\r\n });\r\n }\r\n\r\n public getPleVimsConfigurations(env: string, groupKey: string) {\r\n return this._http.get(`/v1/support/hardware-config/ple/config-groups/${groupKey}/available-configs`, {\r\n params: {\r\n env\r\n }\r\n });\r\n }\r\n\r\n public getPleHardwareConfigStatus(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/hardware-config/ple/${unitCreationLogId}`);\r\n }\r\n\r\n public getPleHardwareConfigStatusByAssetId(assetId: number) {\r\n return this._http.get(`/v1/support/hardware-config/ple/${assetId}/config-status`);\r\n }\r\n\r\n public savePleVimsConfig(unitCreationLogId: number, environment: string, SHA1: string) {\r\n return this._http.post(`/v1/support/hardware-config/ple/${unitCreationLogId}`, {\r\n Environment: environment,\r\n SHA1\r\n });\r\n }\r\n\r\n public pleReboot(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/hardware-config/ple/${unitCreationLogId}/reboot`);\r\n }\r\n\r\n public pleComplete(unitCreationLogId: number, confirm: boolean) {\r\n return this._http.post(`/v1/support/hardware-config/ple/${unitCreationLogId}/complete`, {\r\n complete: confirm\r\n });\r\n }\r\n}\r\n","\r\nimport { UnitCreation } from '../modules/unit-creation/models/unit-creation.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { UnitCreationState } from '../modules/unit-creation/models/unit-creation-state.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportUnitCreationService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getUnitCreation(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/unit-creation/${unitCreationLogId}`);\r\n }\r\n\r\n public saveUnitCreation(unitCreationLogId: number, unit: UnitCreation) {\r\n return unit.AssetId > 0\r\n ? this._http.put(`/v1/support/unit-creation/${unitCreationLogId}`, unit)\r\n : this._http.post(`/v1/support/unit-creation/${unitCreationLogId}`, unit);\r\n }\r\n\r\n public saveUnitStates(unitState: UnitCreationState[]) {\r\n return this._http.put(`/v1/support/unit-creation/state`, unitState);\r\n }\r\n\r\n public updateUnitCreationLock(unitCreationLogId: number) {\r\n return this._http.put(`/v1/support/unit-creation/${unitCreationLogId}/lock`, null);\r\n }\r\n}\r\n","import { Action } from '@ngrx/store';\r\nimport { AssetAlarm } from './../../modules/alarms/models/asset-alarm.model';\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const LoadAlarmsForm = createAction('[Support] Load Asset Alarms Form',\r\n (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadAlarmsFormFail = createAction('[Support] Load Asset Alarms Form Fail',\r\n (error: ApiError) => error);\r\nexport const LoadAlarmsFormSuccess = createAction('[Support] Load Asset Alarms Form Success',\r\n (alarms: AssetAlarm[]) => ({ alarms }));\r\n\r\nexport const AddAlarmToArray = createAction('[Support] Add Alarm To Array',\r\n (alarm: AssetAlarm) => ({ alarm }));\r\n\r\n\r\nexport const SaveAlarms = createAction('[Support] Save Asset Alarms', (unitCreationLogId: number, alarms: AssetAlarm[], next: boolean) => ({ unitCreationLogId, alarms, next }));\r\nexport const SaveAlarmsFail = createAction('[Support] Save Asset Alarms Fail', (error: ApiError) => (error));\r\nexport const SaveAlarmsSuccess = createAction('[Support] Save Asset Alarms Success');\r\n\r\nexport const SaveAlarm = createAction('[Support] Save Asset Alarm', (alarmId: number ,unitCreationLogId: number, alarm: AssetAlarm) => ({alarmId, unitCreationLogId, alarm }));\r\nexport const SaveAlarmFail = createAction('[Support] Save Alarms Fail', (error: ApiError) => (error));\r\nexport const SaveAlarmSuccess = createAction('[Support] Save Alarms Success');\r\n\r\nexport const AddAlarm = createAction('[Support] Add Asset Alarm', (unitCreationLogId: number, alarm: AssetAlarm) => ({ unitCreationLogId, alarm }));\r\nexport const AddAlarmFail = createAction('[Support] Add Asset Alarm Fail', (error: ApiError) => (error));\r\nexport const AddAlarmSuccess = createAction('[Support] Add Asset Alarm Success', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const DeleteAlarm = createAction('[Support] Delete Asset Alarm', ((unitCreationLogId: number, assetId: number, alarmId: number) => ({ unitCreationLogId, assetId, alarmId })));\r\nexport const DeleteAlarmFail = createAction('[Support] Delete Asset Alarm Fail', (error: ApiError) => (error));\r\nexport const DeleteAlarmSuccess = createAction('[Support] Delete Asset Alarm Success', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\n//poll\r\nexport const PollAlarmDeploymentStatus = createAction('[Support] Poll Alarm Deployment Status',\r\n (viewAction: Action, unitName: string, unitCreationLogId: number, next: boolean = false, attempt: number = 0) => ({ viewAction, unitName, unitCreationLogId, next, attempt }));\r\n\r\nexport const PollAlarmDeploymentStatusByAssetId = createAction('[Support] Poll Alarm Deployment Status By AssetId',\r\n (viewAction: Action, unitName: string, assetId: number, next: boolean = false, attempt: number = 0) => ({ viewAction, unitName, assetId, next, attempt }));\r\n\r\nexport const StopPollAlarmDeploymentStatus = createAction('[Support] Stop Poll Alarm Deployment Status');\r\n\r\nexport const LoadCurrentStatusFail = createAction('[Support] Load Alarm Deployment Status Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const CancelCommand = createAction('[Support] Cancel Alarm Deployment Command');\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { AssetAlarm } from './../modules/alarms/models/asset-alarm.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportAlarmService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAlarmsForm(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/alarms/${unitCreationLogId}`);\r\n }\r\n\r\n //save array of alarms\r\n public saveAlarms(unitCreationLogId: number, alarms: AssetAlarm[]) {\r\n return this._http.put(`/v1/support/alarms/`, alarms, {\r\n params: { unitCreationLogId: unitCreationLogId.toString() }\r\n });\r\n }\r\n\r\n // save a single alarm\r\n public saveAlarm(alarmId: number, unitCreationLogId: number, alarm: AssetAlarm) {\r\n return this._http.put(`/v1/support/alarms/${alarmId}`, alarm, {\r\n params: { unitCreationLogId: unitCreationLogId.toString() }\r\n });\r\n }\r\n\r\n public createAlarm(alarm: AssetAlarm) {//returns AlarmId of newly added Alarm\r\n return this._http.post(`/v1/support/alarms`, alarm);\r\n }\r\n\r\n public deleteAlarm(assetId: number, alarmId: number) {\r\n return this._http.delete(`/v1/support/alarms/${alarmId}`, { params: { assetId }});\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of, from, Subject, interval } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap, debounceTime, takeUntil, filter } from 'rxjs/operators';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport * as AlarmsFormActions from './actions';\r\nimport * as NavigationActions from '../navigation/actions';\r\n\r\nimport * as supportModal from '@rfv/modules/support/store/support-modal-messages';\r\n\r\nimport { SupportAlarmService, SupportHardwareConfigService } from '@rfv/modules/support/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _alarmService: SupportAlarmService,\r\n private _hardwareConfigService: SupportHardwareConfigService\r\n ) { }\r\n\r\n private _maxAttempts = 60; // n * 10 seconds\r\n private _timer$ = new Subject();\r\n\r\n public getAlarmsForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.LoadAlarmsForm),\r\n switchMap(action => this._alarmService.getAlarmsForm(action.unitCreationLogId).pipe(\r\n map(alarmsForm => AlarmsFormActions.LoadAlarmsFormSuccess(alarmsForm)),\r\n catchError(error => from([\r\n AlarmsFormActions.LoadAlarmsFormFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while loading alarms',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public saveAlarms$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.SaveAlarms),\r\n switchMap(action => this._alarmService.saveAlarms(action.unitCreationLogId, action.alarms).pipe(\r\n mergeMap(() => [\r\n AlarmsFormActions.SaveAlarmsSuccess(),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? NavigationActions.NextStep()\r\n : fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Alarms Saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n AlarmsFormActions.SaveAlarmsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving alarms',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public saveAlarm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.SaveAlarm),\r\n switchMap(action => this._alarmService.saveAlarm(action.alarmId, action.unitCreationLogId, action.alarm).pipe(\r\n mergeMap(() => [\r\n AlarmsFormActions.SaveAlarmSuccess(),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n // AlarmsFormActions.LoadAlarmsForm(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Alarm saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n AlarmsFormActions.SaveAlarmFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving alarm',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public add$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.AddAlarm),\r\n switchMap(action => this._alarmService.createAlarm(action.alarm).pipe(\r\n mergeMap(() => [\r\n AlarmsFormActions.AddAlarmSuccess(action.unitCreationLogId),\r\n AlarmsFormActions.LoadAlarmsForm(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Alarm Added`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n AlarmsFormActions.AddAlarmFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while adding alarm',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public delete$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.DeleteAlarm),\r\n switchMap(action => this._alarmService.deleteAlarm(action.assetId, action.alarmId).pipe(\r\n mergeMap(() => [\r\n AlarmsFormActions.DeleteAlarmSuccess(action.unitCreationLogId),\r\n AlarmsFormActions.LoadAlarmsForm(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Alarm Deleted`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n AlarmsFormActions.DeleteAlarmFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while deleting alarm',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n //polling for alarm threshold change deployment\r\n public startTimer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.PollAlarmDeploymentStatus),\r\n debounceTime(10000),\r\n switchMap(action => this._hardwareConfigService.getPleHardwareConfigStatus(action.unitCreationLogId).pipe(//check status\r\n takeUntil(this._timer$),\r\n mergeMap(status => {\r\n\r\n if (status && status.StreamingConfig) {\r\n switch (status.StreamingConfig.StatusTypeId) {\r\n case 84:\r\n case 117:\r\n return [\r\n AlarmsFormActions.StopPollAlarmDeploymentStatus(),\r\n // fromRoot.Modal.Open({ options: supportModal.Status84('alarm', action.next ? NavigationActions.NextStep() : null) })\r\n fromRoot.Modal.Open({ options: supportModal.DemandPollStatus('Confirming Alarm Deployment', action.unitName, action.viewAction) })\r\n ];\r\n }\r\n }\r\n\r\n if (action.attempt >= this._maxAttempts - 1) {\r\n return [\r\n AlarmsFormActions.StopPollAlarmDeploymentStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.LongerThanExpected('alarm') })\r\n ];\r\n }\r\n\r\n return [\r\n AlarmsFormActions.PollAlarmDeploymentStatus(action.viewAction, action.unitName, action.unitCreationLogId, action.next, action.attempt + 1)\r\n ];\r\n }),\r\n catchError(error => from([\r\n AlarmsFormActions.LoadCurrentStatusFail(error)\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n //polling for alarm threshold change deployment by asset id\r\n public startTimerAssetId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.PollAlarmDeploymentStatusByAssetId),\r\n debounceTime(10000),\r\n switchMap(action => this._hardwareConfigService.getPleHardwareConfigStatusByAssetId(action.assetId).pipe(//check status\r\n takeUntil(this._timer$),\r\n\r\n mergeMap(status => {\r\n if (status && status.StreamingConfig) {\r\n return [\r\n AlarmsFormActions.StopPollAlarmDeploymentStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.DemandPollStatusAlarm(status.StreamingConfig.Status.toString(), action.unitName, action.viewAction) })\r\n ];\r\n }\r\n\r\n if (action.attempt >= this._maxAttempts - 1) {\r\n return [\r\n AlarmsFormActions.StopPollAlarmDeploymentStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.LongerThanExpected('alarm') })\r\n ];\r\n }\r\n\r\n return [\r\n AlarmsFormActions.PollAlarmDeploymentStatusByAssetId(action.viewAction, action.unitName, action.assetId, action.next, action.attempt + 1)\r\n ];\r\n }),\r\n catchError(error => from([\r\n AlarmsFormActions.LoadCurrentStatusFail(error)\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public pollingModal$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.PollAlarmDeploymentStatus),\r\n filter(action => action.attempt === 0),\r\n switchMap(action => interval(1000).pipe(\r\n takeUntil(this._timer$),\r\n map(value => fromRoot.Modal.Open({ options: supportModal.CheckingStatus('alarm', (this._maxAttempts * 10) - value, AlarmsFormActions.CancelCommand()) }))\r\n ))\r\n )\r\n );\r\n\r\n public pollingModalByAssetId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.PollAlarmDeploymentStatusByAssetId),\r\n filter(action => action.attempt === 0),\r\n switchMap(action => interval(1000).pipe(\r\n takeUntil(this._timer$),\r\n map(value => fromRoot.Modal.Open({ options: supportModal.CheckingStatus('alarm', (this._maxAttempts * 10) - value, AlarmsFormActions.CancelCommand()) }))\r\n ))\r\n )\r\n );\r\n\r\n public stopTimer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.StopPollAlarmDeploymentStatus),\r\n tap(() => this._timer$.next())\r\n ), { dispatch: false }\r\n );\r\n\r\n public cancelCommand$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AlarmsFormActions.CancelCommand),\r\n mergeMap(action => [\r\n AlarmsFormActions.StopPollAlarmDeploymentStatus(),\r\n fromRoot.Modal.Close()\r\n ])\r\n )\r\n );\r\n\r\n}\r\n","import { AssetAlarm } from './../../modules/alarms/models/asset-alarm.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n assetAlarms: AssetAlarm[] | null;\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: ApiError | null;\r\n\r\n isSaving: boolean;\r\n isUpdating: boolean;\r\n\r\n isAdding: boolean;\r\n isAdded: boolean; \r\n\r\n isDeleting: boolean;\r\n isDeleted: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n assetAlarms: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null,\r\n isSaving: false,\r\n isUpdating: false,\r\n\r\n isAdding: false,\r\n isAdded: false,\r\n \r\n isDeleting: false,\r\n isDeleted: false\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as AlarmsFormsActions from './actions';\r\n\r\nconst alarmsFormReducer = createReducer(\r\n initialState,\r\n\r\n on(AlarmsFormsActions.LoadAlarmsForm, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AlarmsFormsActions.LoadAlarmsFormFail, (state, error) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmsFormsActions.LoadAlarmsFormSuccess, (state, payload) => ({\r\n ...state,\r\n assetAlarms: payload.alarms,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmsFormsActions.SaveAlarms, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(AlarmsFormsActions.SaveAlarmsFail, (state, error) => ({\r\n ...state,\r\n isSaving: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmsFormsActions.SaveAlarmsSuccess, (state) => ({\r\n ...state,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmsFormsActions.SaveAlarm, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(AlarmsFormsActions.SaveAlarmFail, (state, error) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmsFormsActions.SaveAlarmSuccess, (state) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: null\r\n })),\r\n\r\n on(AlarmsFormsActions.AddAlarmToArray, (state, payload) => ({\r\n ...state,\r\n assetAlarms: [payload.alarm]\r\n })),\r\n\r\n //ADD ALARM\r\n on(AlarmsFormsActions.AddAlarm, (state) => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(AlarmsFormsActions.AddAlarmFail, (state, error) => ({\r\n ...state,\r\n isAdded: false,\r\n isAdding: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmsFormsActions.AddAlarmSuccess, (state) => ({\r\n ...state,\r\n isAdded: true,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n //DELETE ALARM\r\n on(AlarmsFormsActions.DeleteAlarm, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(AlarmsFormsActions.DeleteAlarmFail, (state, error) => ({\r\n ...state,\r\n isDeleted: false,\r\n isDeleting: false,\r\n error: error\r\n })),\r\n\r\n on(AlarmsFormsActions.DeleteAlarmSuccess, (state) => ({\r\n ...state,\r\n isDeleted: true,\r\n isDeleting: false,\r\n error: null\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return alarmsFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.alarmsForm);\r\nexport const getAssetAlarms = createSelector(getState, state => state.assetAlarms);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const isAdding = createSelector(getState, state => state.isAdding);\r\nexport const isAdded = createSelector(getState, state => state.isAdded);\r\n\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\nexport const isDeleted = createSelector(getState, state => state.isDeleted);\r\n\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const isUpdating = createSelector(getState, state => state.isUpdating);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DatapointLegend } from '@rfv/modules/core/models';\r\n\r\nimport { Datapoint } from './../../modules/assign-datapoints/models/datapoint.model';\r\nimport { AssignDataPointsForm } from './../../modules/assign-datapoints/models/assign-datapoints-form.model';\r\n\r\nexport const LoadAssignDataPointsForm = createAction('[Support] Load Assign Datapoints Form');\r\nexport const LoadAssignDataPointsFormFail = createAction('[Support] Load Assign Datapoints Form Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadAssignDataPointsFormSuccess = createAction('[Support] Load Assign Datapoints Form Success', (assignDataPointsForm: AssignDataPointsForm) => ({ payload: { assignDataPointsForm } }));\r\n\r\nexport const LoadDataPoints = createAction('[Support] Load Datapoints ',\r\n (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const LoadDataPointsFail = createAction('[Support] Load Datapoints Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadDataPointsSuccess = createAction('[Support] Load Datapoints Success',\r\n (datapoints: any[]) => ({ datapoints }));\r\n\r\nexport const CreateDataPoint = createAction('[Support] Creating Datapoint ',\r\n (datapoint: Datapoint, unitCreationLogId: number, orphanLegends: DatapointLegend[]) => ({ datapoint, unitCreationLogId, orphanLegends }));\r\n\r\nexport const CreateDataPointFail = createAction('[Support] Creating Datapoint Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const CreateDataPointSuccess = createAction('[Support] Creating Datapoint Success',\r\n (dpId: any, orphanLegends: DatapointLegend[]) => ({ dpId, orphanLegends }));\r\n\r\nexport const DeleteDataPoint = createAction('[Support] Deleting Datapoint ',\r\n (datapointId: number, unitCreationLogId: number) => ({ datapointId, unitCreationLogId }));\r\n\r\nexport const DeleteDataPointFail = createAction('[Support] Deleting Datapoint Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const DeleteDataPointSuccess = createAction('[Support] Deleting Datapoint Success',\r\n (response: any, dpId: number) => ({ response, dpId }));\r\n\r\nexport const UpdateDataPoint = createAction('[Support] Updating Datapoint',\r\n (datapoint: Datapoint, unitCreationLogId: number) => ({ datapoint, unitCreationLogId }));\r\n\r\nexport const UpdateDataPointFail = createAction('[Support] Updating Datapoint Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const UpdateDataPointSuccess = createAction('[Support] Updating Datapoint Success',\r\n (response: any) => ({ response }));\r\n\r\nexport const UpdateAllDataPoints = createAction('[Support] Updating All Datapoints',\r\n (datapoint: Datapoint[], unitCreationLogId: number, next: boolean) => ({ datapoint, unitCreationLogId, next }));\r\n\r\nexport const UpdateAllDataPointsFail = createAction('[Support] Updating All Datapoints Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const UpdateAllDataPointsSuccess = createAction('[Support] Updating All Datapoints Success',\r\n (datapointId: any[]) => ({ datapointId }));\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Datapoint } from './../modules/assign-datapoints/models/datapoint.model';\r\nimport { AssignDataPointsForm } from './../modules/assign-datapoints/models/assign-datapoints-form.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportAssignDataPointsService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getAssignDataPointForm() {\r\n return this._http.get(`/v1/support/unitSetup/datapoint/form`);\r\n }\r\n\r\n public getDataPoints(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/unitSetup/datapoint`, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString(),\r\n }\r\n });\r\n }\r\n\r\n public createDataPoint(datapoint: Datapoint, unitCreationLogId: number) {//return id\r\n return this._http.post(`/v1/support/unitSetup/datapoint`, datapoint, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString(),\r\n }\r\n });\r\n }\r\n\r\n public deleteDataPoint(datapointId: number, unitCreationLogId: number) {\r\n return this._http.delete(`/v1/support/unitSetup/datapoint/${datapointId}`, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString(),\r\n }\r\n });\r\n }\r\n\r\n // update single datapoint\r\n public updateDataPoint(datapoint: Datapoint, unitCreationLogId: number) {\r\n return this._http.put(`/v1/support/unitSetup/datapoint`, datapoint, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString(),\r\n }\r\n });\r\n }\r\n\r\n // update array of datapoint\r\n public updateAllDataPoints(datapoints: Datapoint[], unitCreationLogId: number) {\r\n return this._http.put(`/v1/support/unitSetup/datapoints`, datapoints, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString(),\r\n }\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap, filter } from 'rxjs/operators';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as AssignDataPointsFormActions from './actions';\r\nimport * as LegendActions from '../legend-editor/actions';\r\nimport * as NavigationActions from '../navigation/actions';\r\n\r\nimport { SupportAssignDataPointsService } from '@rfv/modules/support/services';\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _assignDataPointsService: SupportAssignDataPointsService\r\n ) { }\r\n\r\n // LoadDataPoints\r\n public getAssignDataPointsForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.LoadAssignDataPointsForm),\r\n switchMap(action => this._assignDataPointsService.getAssignDataPointForm().pipe(\r\n map(assignDataPointsForm => AssignDataPointsFormActions.LoadAssignDataPointsFormSuccess(assignDataPointsForm)),\r\n catchError(error => of(AssignDataPointsFormActions.LoadAssignDataPointsFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public getDataPoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.LoadDataPoints),\r\n switchMap(action => this._assignDataPointsService.getDataPoints(action.unitCreationLogId).pipe(\r\n map(dp => AssignDataPointsFormActions.LoadDataPointsSuccess(dp)),\r\n catchError(error => of(AssignDataPointsFormActions.LoadDataPointsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createDataPoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.CreateDataPoint),\r\n switchMap(action => this._assignDataPointsService.createDataPoint(action.datapoint, action.unitCreationLogId).pipe(\r\n mergeMap(dpId => [\r\n AssignDataPointsFormActions.CreateDataPointSuccess(dpId, action.orphanLegends),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n AssignDataPointsFormActions.LoadDataPoints(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `DataPoint Created`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(AssignDataPointsFormActions.CreateDataPointFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public createDataPointSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.CreateDataPointSuccess),\r\n filter(action => action.orphanLegends && action.orphanLegends.length > 0),\r\n tap(action => action.orphanLegends.map(legend => legend.DataPointId = action.dpId)),\r\n map(action => LegendActions.AddLegends(action.orphanLegends))\r\n )\r\n );\r\n\r\n public updateDatapoint$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.UpdateDataPoint),\r\n switchMap(action => this._assignDataPointsService.updateDataPoint(action.datapoint, action.unitCreationLogId).pipe(\r\n mergeMap(dp => [\r\n AssignDataPointsFormActions.UpdateDataPointSuccess(dp),\r\n AssignDataPointsFormActions.LoadDataPoints(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `DataPoint Updated`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(AssignDataPointsFormActions.UpdateDataPointFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public updateAllDatapoints$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.UpdateAllDataPoints),\r\n switchMap(action => this._assignDataPointsService.updateAllDataPoints(action.datapoint, action.unitCreationLogId).pipe(\r\n mergeMap(dp => [\r\n AssignDataPointsFormActions.UpdateAllDataPointsSuccess(dp),\r\n AssignDataPointsFormActions.LoadDataPoints(action.unitCreationLogId),\r\n action.next ?\r\n NavigationActions.NextStep() :\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `DataPoint Updated`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(AssignDataPointsFormActions.UpdateAllDataPointsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public deleteDataPoint$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(AssignDataPointsFormActions.DeleteDataPoint),\r\n switchMap(action => this._assignDataPointsService.deleteDataPoint(action.datapointId, action.unitCreationLogId).pipe(\r\n mergeMap(dp => [\r\n AssignDataPointsFormActions.DeleteDataPointSuccess(dp, action.datapointId),\r\n AssignDataPointsFormActions.LoadDataPoints(action.unitCreationLogId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `DataPoint Deleted`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(AssignDataPointsFormActions.DeleteDataPointFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { AssignDataPointsForm } from './../../modules/assign-datapoints/models/assign-datapoints-form.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { Datapoint } from './../../modules/assign-datapoints/models/datapoint.model';\r\n\r\nexport interface State {\r\n assignDataPointsForm: AssignDataPointsForm | null;\r\n dataPoints: Datapoint[];\r\n isDeleting: boolean;\r\n isUpdating: boolean;\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isLoadingDatapoints: boolean;\r\n isLoadedDatapoints: boolean;\r\n\r\n isCreatingDatapoints: boolean;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n assignDataPointsForm: null,\r\n dataPoints: null,\r\n isDeleting: false,\r\n isUpdating: false,\r\n\r\n isLoading: false,\r\n isLoaded: false,\r\n isLoadingDatapoints: null,\r\n isLoadedDatapoints: null,\r\n\r\n isCreatingDatapoints: null,\r\n\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AssignDataPointsFormActions from './actions';\r\n\r\nconst assignDataPointsFormReducer = createReducer(\r\n initialState,\r\n\r\n on(AssignDataPointsFormActions.LoadAssignDataPointsForm, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadAssignDataPointsFormFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadAssignDataPointsFormSuccess, (state, { payload }) => ({\r\n ...state,\r\n assignDataPointsForm: payload.assignDataPointsForm,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadDataPoints, (state) => ({\r\n ...state,\r\n isLoadingDatapoints: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadDataPointsFail, (state, { error }) => ({\r\n ...state,\r\n isLoadedDatapoints: false,\r\n isLoadingDatapoints: false,\r\n error: error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadDataPointsSuccess, (state, { datapoints }) => ({\r\n ...state,\r\n dataPoints: datapoints,\r\n isLoadedDatapoints: true,\r\n isLoadingDatapoints: false,\r\n error: null\r\n })),\r\n\r\n on(AssignDataPointsFormActions.CreateDataPoint, (state) => ({\r\n ...state,\r\n isCreatingDatapoints: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.CreateDataPointFail, (state, { error }) => ({\r\n ...state,\r\n isCreatingDatapoints: false,\r\n error: error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.CreateDataPointSuccess, (state) => ({\r\n ...state,\r\n isCreatingDatapoints: false,\r\n error: null\r\n })),\r\n\r\n on(AssignDataPointsFormActions.DeleteDataPoint, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.DeleteDataPointFail, (state, { error }) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.DeleteDataPointSuccess, (state) => ({\r\n ...state,\r\n isDeleting: false,\r\n error: null\r\n })),\r\n\r\n on(AssignDataPointsFormActions.UpdateDataPoint, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.UpdateDataPointFail, (state, { error }) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.UpdateDataPointSuccess, (state) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: null\r\n })),\r\n\r\n on(AssignDataPointsFormActions.UpdateAllDataPoints, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.UpdateAllDataPointsFail, (state, { error }) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.UpdateAllDataPointsSuccess, (state) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assignDataPointsFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.assignDataPointsForm);\r\n\r\nexport const getAssignDataPointsForm = createSelector(getState, state => state.assignDataPointsForm);\r\nexport const getDataPointIdentifiers = createSelector(getAssignDataPointsForm, state => state && state.DataPointIdentifiers);\r\n\r\nexport const getDataPoints = createSelector(getState, state => state.dataPoints);\r\n\r\nexport const getUnitsOfMeasure = createSelector(getAssignDataPointsForm,\r\n state => state.UnitsOfMeasure.filter(units => !units.IsDisabled)\r\n);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const isLoadingDatapoints = createSelector(getState, state => state.isLoadingDatapoints);\r\nexport const isLoadedDatapoints = createSelector(getState, state => state.isLoadedDatapoints);\r\nexport const isCreatingDatapoints = createSelector(getState, state => state.isCreatingDatapoints);\r\n\r\nexport const isUpdating = createSelector(getState, state => state.isUpdating);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);","import { CommsLossSettingsForm } from './../../modules/comms-loss/models/comms-loss-settings-form.model';\r\nimport { createAction, props } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { CommsLoss } from '@rfv/modules/support/modules/comms-loss/models/comms-loss.model'\r\n\r\nexport const LoadCommsLossSettingsForm = createAction('[Support] Load Comms Loss Settings Form', (unitCreationTypeId: number) => ({ payload: { unitCreationTypeId } }));\r\nexport const LoadCommsLossSettingsFormFail = createAction('[Support] Load Comms Loss Settings Form Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadCommsLossSettingsFormSuccess = createAction('[Support] Load Comms Loss Settings Form Success', \r\n (commsLossSettingsForm: CommsLossSettingsForm) => ({ payload: { commsLossSettingsForm } }));\r\n\r\n\r\nexport const LoadCommsLossSettings = createAction('[Support] Load Comms Loss Settings', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadCommsLossSettingsFail = createAction('[Support] Load Comms Loss Settings Fail', (error: ApiError) => ({ error }));\r\nexport const LoadCommsLossSettingsSuccess = createAction('[Support] Load Comms Loss Settings Success', (commsLoss: CommsLoss) => ({ commsLoss }));\r\n\r\nexport const SaveCommsLossSettings = createAction('[Support] Save Comms Loss Settings Form', (unitCreationLogId: number, commsLoss: CommsLoss, next: boolean) => ({ unitCreationLogId, commsLoss, next }));\r\nexport const SaveCommsLossSettingsFail = createAction('[Support] Save Comms Loss Settings Form Fail', (error: ApiError) => ({ error }));\r\nexport const SaveCommsLossSettingsSuccess = createAction('[Support] Save Comms Loss Settings Form Success');\r\n\r\nexport const Clear = createAction('[Support] Clear Comms Loss Settings');","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { CommsLoss } from '../modules/comms-loss/models/comms-loss.model';\r\nimport { CommsLossSettingsForm } from '../modules/comms-loss/models/comms-loss-settings-form.model';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportCommsLossService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getCommsLossSettingsForm(unitCreationTypeId: number) {\r\n return this._http.get(`/v1/support/comms-loss/form/${unitCreationTypeId}`);\r\n }\r\n\r\n public getCommsLossSettings(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/comms-loss/${unitCreationLogId}`)\r\n }\r\n\r\n public saveCommsLossSettings(unitCreationLogId: number, commsLoss: CommsLoss) {\r\n return commsLoss.AssetId && commsLoss.DeviceId\r\n ? this._http.put(`/v1/support/comms-loss/${unitCreationLogId}`, commsLoss)\r\n : this._http.post(`/v1/support/comms-loss/${unitCreationLogId}`, commsLoss);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromNavigation from '../navigation/actions';\r\n\r\nimport { successUserNotificationSettingsPayload } from '@rfv/modules/dashboard/modules/user-admin/store/user-banner-messages';\r\n\r\nimport * as CommsLossSettingsActions from './actions';\r\nimport { SupportCommsLossService } from '@rfv/modules/support/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _commsLossService: SupportCommsLossService\r\n ) { }\r\n\r\n public getCommsLossForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommsLossSettingsActions.LoadCommsLossSettingsForm),\r\n switchMap(action => this._commsLossService.getCommsLossSettingsForm(action.payload.unitCreationTypeId).pipe( \r\n map((commsLossSettingsForm) => CommsLossSettingsActions.LoadCommsLossSettingsFormSuccess(commsLossSettingsForm)),\r\n catchError(error => of(CommsLossSettingsActions.LoadCommsLossSettingsFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadCommsLoss$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommsLossSettingsActions.LoadCommsLossSettings),\r\n switchMap(action => this._commsLossService.getCommsLossSettings(action.unitCreationLogId).pipe(\r\n map(commsLoss => CommsLossSettingsActions.LoadCommsLossSettingsSuccess(commsLoss)),\r\n catchError(error => of(CommsLossSettingsActions.LoadCommsLossSettingsFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n public saveCommsLoss$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommsLossSettingsActions.SaveCommsLossSettings),\r\n switchMap(action => this._commsLossService.saveCommsLossSettings(action.unitCreationLogId, action.commsLoss).pipe(\r\n mergeMap(_ => [\r\n CommsLossSettingsActions.SaveCommsLossSettingsSuccess(),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? fromNavigation.NextStep()\r\n : fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('Comms Loss Information Saved') })\r\n ]),\r\n catchError(error => of(CommsLossSettingsActions.SaveCommsLossSettingsFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { CommsLoss } from '../../modules/comms-loss/models/comms-loss.model';\r\nimport { CommsLossSettingsForm } from '../../modules/comms-loss/models/comms-loss-settings-form.model';\r\nexport interface State {\r\n commsLossSettingsForm: CommsLossSettingsForm | null;\r\n commsLoss: CommsLoss | null;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isLoadingForm: boolean;\r\n isLoadedForm: boolean;\r\n isSaving: boolean;\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n commsLossSettingsForm: null,\r\n commsLoss: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n isLoadingForm: false,\r\n isLoadedForm: false,\r\n isSaving: false,\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as CommsLossActions from './actions';\r\n\r\nconst commsLossSettingsFormReducer = createReducer(\r\n initialState,\r\n\r\n on(CommsLossActions.LoadCommsLossSettingsForm, (state, { payload }) => ({\r\n ...state,\r\n isLoadingForm: true\r\n })),\r\n\r\n on(CommsLossActions.LoadCommsLossSettingsFormFail, (state, { payload }) => ({\r\n ...state,\r\n commsLossSettingsForm: null,\r\n isLoadedForm: false,\r\n isLoadingForm: false,\r\n error: payload.error\r\n })),\r\n\r\n on(CommsLossActions.LoadCommsLossSettingsFormSuccess, (state, { payload }) => ({\r\n ...state,\r\n commsLossSettingsForm: payload.commsLossSettingsForm,\r\n isLoadedForm: true,\r\n isLoadingForm: false,\r\n error: null\r\n })),\r\n\r\n on(CommsLossActions.LoadCommsLossSettings, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n })),\r\n\r\n on(CommsLossActions.LoadCommsLossSettingsFail, (state, { error }) => ({\r\n ...state,\r\n commsLoss: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(CommsLossActions.LoadCommsLossSettingsSuccess, (state, { commsLoss }) => ({\r\n ...state,\r\n commsLoss,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(CommsLossActions.SaveCommsLossSettings, (state) => ({\r\n ...state,\r\n isSaving: true,\r\n })),\r\n\r\n on(CommsLossActions.SaveCommsLossSettingsFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error: error\r\n })),\r\n\r\n on(CommsLossActions.SaveCommsLossSettingsSuccess, (state) => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(CommsLossActions.Clear, state => initialState)\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return commsLossSettingsFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.commsLossSettingsForm);\r\n\r\nexport const getCommsLossSettingsForm = createSelector(getState, state => state.commsLossSettingsForm);\r\n\r\nexport const getCommsLossSettingsFormId = createSelector(getCommsLossSettingsForm, state => state && state.Id);\r\n\r\nexport const getCommsLoss = createSelector(getState, state => state.commsLoss);\r\n\r\nexport const isLoadingForm = createSelector(getState, state => state.isLoadingForm);\r\nexport const isLoadedForm = createSelector(getState, state => state.isLoadedForm);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);","import { DeviceCommType } from './../../modules/comms-type-info/models/device-comm-type.model';\r\nimport { CommTypeInfoForm } from './../../modules/comms-type-info/models/comm-type-info-form.model';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const LoadCommTypeInfoForm = createAction('[Support] Load Comm Type Info Form',\r\n (unitCreationTypeId: number) => ({ unitCreationTypeId }));\r\n\r\nexport const LoadCommTypeInfoFormFail = createAction('[Support] Load Comm Type Info Form Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadCommTypeInfoFormSuccess = createAction('[Support] Load Comm Type Info Form Success',\r\n (commTypeInfoForm: CommTypeInfoForm) => ({ commTypeInfoForm }));\r\n\r\nexport const Clear = createAction('[Support] Clear Comm Type Info');\r\n\r\nexport const LoadDeviceCommTypeInfo = createAction('[Support] Load Device Comm Type Info',\r\n (deviceId: number) => ({ deviceId }));\r\n\r\nexport const LoadDeviceCommTypeInfoFail = createAction('[Support] Load Device Comm Type Info Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadDeviceCommTypeInfoSuccess = createAction('[Support] Load Device Comm Type Info Success',\r\n (deviceCommType: DeviceCommType[]) => ({ deviceCommType }));\r\n\r\n//LOAD DEVICE INFO\r\nexport const LoadMaxCommsAllowed = createAction('[Support] Load Max Comms Allowed',\r\n (deviceId: number) => ({ deviceId }));\r\n\r\nexport const LoadMaxCommsAllowedFail = createAction('[Support] Load Max Comms Allowed Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadMaxCommsAllowedSuccess = createAction('[Support] Load Max Comms Allowed Success',\r\n (maxCommsAllowed: any) => ({ maxCommsAllowed }));\r\n\r\n//ADD ONE\r\nexport const AddDeviceCommType = createAction('[Support] Add Device Comms Type',\r\n (unitCreationLogId: number, deviceCommType: DeviceCommType) => ({ unitCreationLogId, deviceCommType }));\r\n\r\nexport const AddDeviceCommTypeFail = createAction('[Support] Add Device Comms Type Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const AddDeviceCommTypeSuccess = createAction('[Support] Add Device Comms Type Success');\r\n\r\n//ADD MORE\r\nexport const AddDeviceCommTypes = createAction('[Support] Add Device Comms Types',\r\n (unitCreationLogId: number, deviceCommType: DeviceCommType[], next: boolean) => ({ unitCreationLogId, deviceCommType, next }));\r\n\r\nexport const AddDeviceCommTypesFail = createAction('[Support] Add Device Comms Types Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const AddDeviceCommTypesSuccess = createAction('[Support] Add Device Comms Types Success');\r\n\r\n//SAVE MORE\r\nexport const SaveAllDeviceCommTypes = createAction('[Support] Save All Device Comms Type',\r\n (unitCreationLogId: number, deviceCommTypes: DeviceCommType[], next: boolean) => ({ unitCreationLogId, deviceCommTypes, next }));\r\n\r\nexport const SaveAllDeviceCommTypesFail = createAction('[Support] Save All Device Comms Type Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const SaveAllDeviceCommTypesSuccess = createAction('[Support] Save All Device Comms Type Success');\r\n\r\n//DELETE ONE\r\nexport const DeleteDeviceCommTypeInfo = createAction('[Support] Delete Device Comm Type Info',\r\n (deviceCommsId: number) => ({ deviceCommsId }));\r\n\r\nexport const DeleteDeviceCommTypeInfoFail = createAction('[Support] Delete Device Comm Type Info Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const DeleteDeviceCommTypeInfoSuccess = createAction('[Support] Delete Device Comm Type Info Success');","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { DeviceCommType } from './../modules/comms-type-info/models/device-comm-type.model';\r\nimport { CommTypeInfoForm } from './../modules/comms-type-info/models/comm-type-info-form.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportCommTypeInfoService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getCommTypeInfoForm(unitCreationTypeId: number) {\r\n return this._http.get(`/v1/support/comm-types/deviceConfig/commTypes/${unitCreationTypeId}`);\r\n }\r\n\r\n public getDeviceCommType(deviceId: number) {\r\n return this._http.get(`/v1/support/comm-types/deviceConfig/deviceComms/${deviceId}`);\r\n }\r\n\r\n public addDeviceCommType(deviceCommType: DeviceCommType, unitCreationLogId: number) {\r\n return this._http.post(`/v1/support/comm-types/deviceConfig/deviceComm`, deviceCommType, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString()\r\n }\r\n });\r\n }\r\n\r\n public addAllDeviceCommType(deviceCommTypes: DeviceCommType[], unitCreationLogId: number) {\r\n return this._http.post(`/v1/support/comm-types/deviceConfig/deviceComms`, deviceCommTypes, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString()\r\n }\r\n });\r\n }\r\n\r\n public saveAllDeviceCommTypes(deviceCommTypes: DeviceCommType[], unitCreationLogId: number) {\r\n return this._http.put(`/v1/support/comm-types/deviceConfig/deviceComms`, deviceCommTypes, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString()\r\n }\r\n });\r\n }\r\n\r\n public deleteDeviceCommType(deviceCommTypeId: number) {\r\n return this._http.delete(`/v1/support/comm-types/deviceConfig/deviceComm/${deviceCommTypeId}`);\r\n }\r\n}","/* angular */\r\nimport { Injectable } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { from, of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n/* core */\r\nimport * as CommTypeInfoFormActions from './actions';\r\nimport * as NavigationActions from '../navigation/actions';\r\n\r\nimport {\r\n SupportCommTypeInfoService,\r\n SupportDeviceInfoService\r\n} from '@rfv/modules/support/services';\r\nimport { ModalType } from '@rfv/store/modal';\r\nimport { ModalContentType } from '@rfv/modules/modal/models/modal.model';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _commTypeInfoService: SupportCommTypeInfoService,\r\n private _deviceInfoService: SupportDeviceInfoService\r\n ) { }\r\n\r\n deviceId: number;\r\n\r\n public getCommsTypeInfoForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.LoadCommTypeInfoForm),\r\n switchMap(action => this._commTypeInfoService.getCommTypeInfoForm(action.unitCreationTypeId).pipe(\r\n map(commsInfoForm => CommTypeInfoFormActions.LoadCommTypeInfoFormSuccess(commsInfoForm)),\r\n catchError(error => of(CommTypeInfoFormActions.LoadCommTypeInfoFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public getDeviceCommType$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.LoadDeviceCommTypeInfo),\r\n tap(action => this.deviceId = action.deviceId),\r\n switchMap(action => this._commTypeInfoService.getDeviceCommType(action.deviceId).pipe(\r\n map(deviceCommType => CommTypeInfoFormActions.LoadDeviceCommTypeInfoSuccess(deviceCommType)),\r\n catchError(error => of(CommTypeInfoFormActions.LoadDeviceCommTypeInfoFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public getMaxCommsAllowed$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.LoadMaxCommsAllowed),\r\n switchMap(action => this._deviceInfoService.getMaxCommsAllowed(action.deviceId).pipe(\r\n map(maxCommsAllowed => CommTypeInfoFormActions.LoadMaxCommsAllowedSuccess(maxCommsAllowed)),\r\n catchError(error => of(CommTypeInfoFormActions.LoadMaxCommsAllowedFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public addDeviceCommType$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.AddDeviceCommType),\r\n switchMap(action => this._commTypeInfoService.addDeviceCommType(action.deviceCommType, action.unitCreationLogId).pipe(\r\n mergeMap(() => [\r\n CommTypeInfoFormActions.AddDeviceCommTypeSuccess(),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n CommTypeInfoFormActions.LoadDeviceCommTypeInfo(this.deviceId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Device Comms Type Added`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(CommTypeInfoFormActions.AddDeviceCommTypeFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public addAllDeviceCommType$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.AddDeviceCommTypes),\r\n switchMap(action => this._commTypeInfoService.addAllDeviceCommType(action.deviceCommType, action.unitCreationLogId).pipe(\r\n mergeMap(() => [\r\n CommTypeInfoFormActions.AddDeviceCommTypesSuccess(),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? NavigationActions.NextStep()\r\n : CommTypeInfoFormActions.LoadDeviceCommTypeInfo(this.deviceId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Device Comms Types Added`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(CommTypeInfoFormActions.AddDeviceCommTypesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveAllDeviceCommType$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.SaveAllDeviceCommTypes),\r\n tap(a => console.log(a.next)),\r\n switchMap(action => this._commTypeInfoService.saveAllDeviceCommTypes(action.deviceCommTypes, action.unitCreationLogId).pipe(\r\n mergeMap(() => [\r\n CommTypeInfoFormActions.SaveAllDeviceCommTypesSuccess(),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? NavigationActions.NextStep()\r\n : CommTypeInfoFormActions.LoadDeviceCommTypeInfo(this.deviceId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Device Comms Types Saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ]),\r\n catchError(error => from([\r\n CommTypeInfoFormActions.SaveAllDeviceCommTypesFail(error),\r\n\r\n //leaving this here in case we change our minds about banners v. modal\r\n // fromRoot.Banner.Show({\r\n // options: {\r\n // type: 'error',\r\n // message: error.message,\r\n // autoClose: 3000\r\n // }\r\n // })\r\n\r\n fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--large',\r\n modalType: ModalType.Cancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Duplication Error',\r\n data: error.message,\r\n primaryText: error.message,\r\n secondaryText: 'Cancel',\r\n }\r\n })\r\n ]),\r\n )\r\n ))\r\n )\r\n );\r\n//of(CommTypeInfoFormActions.SaveAllDeviceCommTypesFail(error))\r\n\r\n public deleteDeviceCommType$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CommTypeInfoFormActions.DeleteDeviceCommTypeInfo),\r\n switchMap(action => this._commTypeInfoService.deleteDeviceCommType(action.deviceCommsId).pipe(\r\n mergeMap(() => [\r\n CommTypeInfoFormActions.DeleteDeviceCommTypeInfoSuccess(),\r\n CommTypeInfoFormActions.LoadDeviceCommTypeInfo(this.deviceId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Device Comms Type Deleted along with all unsaved Device Comms Types`,\r\n autoClose: 6000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(CommTypeInfoFormActions.DeleteDeviceCommTypeInfoFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { DeviceCommType } from '../../modules/comms-type-info/models/device-comm-type.model';\r\nimport { CommTypeInfoForm } from '../../modules/comms-type-info/models/comm-type-info-form.model';\r\n\r\nexport interface State {\r\n commTypeInfoForm: CommTypeInfoForm | null;\r\n deviceCommTypeInfo: DeviceCommType[] | null;\r\n maxComms: number;\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n\r\n isSaving: boolean;\r\n isSaved: boolean;\r\n\r\n isAdding: boolean,\r\n isAdded: boolean,\r\n\r\n isDeleting: boolean;\r\n isDeleted: boolean;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n commTypeInfoForm: null,\r\n deviceCommTypeInfo: [],\r\n maxComms: null,\r\n\r\n isLoading: false,\r\n isLoaded: false,\r\n\r\n isSaving: false,\r\n isSaved: false,\r\n\r\n isAdding: false,\r\n isAdded: false,\r\n\r\n isDeleting: false,\r\n isDeleted: false,\r\n \r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as CommsTypeInfoFormActions from './actions';\r\n\r\nconst commTypeInfoFormReducer = createReducer(\r\n initialState,\r\n\r\n //Loading Comm Type Form\r\n on(CommsTypeInfoFormActions.LoadCommTypeInfoForm, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.LoadCommTypeInfoFormFail, (state, payload) => ({\r\n ...state,\r\n commTypeInfoForm: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.LoadCommTypeInfoFormSuccess, (state, payload) => ({\r\n ...state,\r\n commTypeInfoForm: payload.commTypeInfoForm,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.Clear, state => initialState),\r\n\r\n //Loading Device Comm Type\r\n on(CommsTypeInfoFormActions.LoadDeviceCommTypeInfo, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.LoadDeviceCommTypeInfoFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.LoadDeviceCommTypeInfoSuccess, (state, payload) => ({\r\n ...state,\r\n deviceCommTypeInfo: payload.deviceCommType,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n //Load Max Comms Allowed\r\n on(CommsTypeInfoFormActions.LoadMaxCommsAllowed, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.LoadMaxCommsAllowedFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.LoadMaxCommsAllowedSuccess, (state, payload) => ({\r\n ...state,\r\n maxComms: payload.maxCommsAllowed,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n //Adding Device Comm Type\r\n on(CommsTypeInfoFormActions.AddDeviceCommType, (state) => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.AddDeviceCommTypeFail, (state, payload) => ({\r\n ...state,\r\n isAdded: false,\r\n isAdding: false,\r\n error: payload.error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.AddDeviceCommTypeSuccess, (state) => ({\r\n ...state,\r\n isAdded: true,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.AddDeviceCommTypes, (state) => ({\r\n ...state,\r\n isAdding: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.AddDeviceCommTypesFail, (state, payload) => ({\r\n ...state,\r\n isAdded: false,\r\n isAdding: false,\r\n error: payload.error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.AddDeviceCommTypesSuccess, (state) => ({\r\n ...state,\r\n isAdded: true,\r\n isAdding: false,\r\n error: null\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.SaveAllDeviceCommTypes, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.SaveAllDeviceCommTypesFail, (state, payload) => ({\r\n ...state,\r\n isSaved: false,\r\n isSaving: false,\r\n error: payload.error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.SaveAllDeviceCommTypesSuccess, (state) => ({\r\n ...state,\r\n isSaved: true,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n //Delete Device Comm Type\r\n on(CommsTypeInfoFormActions.DeleteDeviceCommTypeInfo, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.DeleteDeviceCommTypeInfoFail, (state, payload) => ({\r\n ...state,\r\n isDeleted: false,\r\n isDeleting: false,\r\n error: payload.error\r\n })),\r\n\r\n on(CommsTypeInfoFormActions.DeleteDeviceCommTypeInfoSuccess, (state) => ({\r\n ...state,\r\n isDeleted: true,\r\n isDeleting: false,\r\n error: null\r\n }))\r\n)\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return commTypeInfoFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.commTypeInfoForm);\r\n\r\nexport const getCommTypeInfoForm = createSelector(getState, state => state.commTypeInfoForm);\r\n\r\nexport const getDeviceCommTypeInfo = createSelector(getState, state => state.deviceCommTypeInfo);\r\n\r\nexport const getCommTypeInfoFormId = createSelector(getCommTypeInfoForm, state => state && state.Id);\r\n\r\nexport const getMaxCommsAllowed = createSelector(getState, state => state.maxComms);\r\n\r\nexport const getCommTypes = createSelector(getCommTypeInfoForm, state => state && state.CommTypes);\r\n\r\nexport const getProviderTypes = createSelector(getCommTypeInfoForm, state => state && state.ProviderTypes);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\n\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const isSaved = createSelector(getState, state => state.isSaved);\r\n\r\nexport const isAdding = createSelector(getState, state => state.isAdding);\r\nexport const isAdded = createSelector(getState, state => state.isAdded);\r\n\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\nexport const isDeleted = createSelector(getState, state => state.isDeleted);\r\n\r\nexport const getError = createSelector(getState, state => state.error);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { UnitCreation } from '../../modules/unit-creation/models/unit-creation.model';\r\nimport { CreateFromExistingAssetModel } from '../../modules/common/models/create-from-existing-asset.model';\r\n\r\nexport const CreateFromExistingAsset = createAction('[Support] Create From Existing Asset',\r\n (model: CreateFromExistingAssetModel) =>\r\n ({ model }));\r\n\r\nexport const CreateFromExistingAssetFail = createAction('[Support] Create From Existing Asset Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const CreateFromExistingAssetSuccess = createAction('[Support] Create From Existing Asset Success', (stepIds: number[]) => ({ stepIds }));\r\n\r\nexport const LoadUnitCreationLog = createAction('[Support] Load UnitCreationLog', (unitCreationLogId: number = 0) => ({ unitCreationLogId }));\r\nexport const LoadUnitCreationLogFail = createAction('[Support] Load UnitCreationLog Fail', (error: ApiError) => ({ error }));\r\nexport const LoadUnitCreationLogSuccess = createAction('[Support] Load UnitCreationLog Success', (log: UnitCreation) => ({ log }));","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { CreateFromExistingAssetModel } from '../modules/common/models/create-from-existing-asset.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportCreateFromExistingAssetService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public createFromExistingAsset(model: CreateFromExistingAssetModel) {\r\n return this._http.post(`/v1/support/create-from-existing-asset/settings`, model);\r\n }\r\n}\r\n","import { Store } from '@ngrx/store';\r\nimport { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, filter, map, switchMap, mergeMap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport * as CreateFromExistingAssetActions from './actions';\r\nimport * as fromAssignDataPointsFormActions from '@rfv/modules/support/store/assign-datapoints-form/actions';\r\nimport * as fromAssignUnitDataActions from '@rfv/modules/support/store/unit-data/actions';\r\nimport * as fromAlarms from '@rfv/modules/support/store/alarms-form/actions';\r\nimport * as fromNavigation from '@rfv/modules/support/store/navigation';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { SupportCreateFromExistingAssetService, SupportUnitCreationService } from '@rfv/modules/support/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _createFromExistingAssetService: SupportCreateFromExistingAssetService,\r\n private _unitCreationService: SupportUnitCreationService,\r\n private _store: Store\r\n ) { }\r\n\r\n public getAssignDataPointsForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CreateFromExistingAssetActions.CreateFromExistingAsset),\r\n switchMap(action => this._createFromExistingAssetService.createFromExistingAsset(action.model).pipe(\r\n map(test => CreateFromExistingAssetActions.CreateFromExistingAssetSuccess(action.model.userSuppliedUnitCreationStepIds)),\r\n catchError(error => of( CreateFromExistingAssetActions.CreateFromExistingAssetFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public copyFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CreateFromExistingAssetActions.CreateFromExistingAssetFail),\r\n map(action => fromRoot.Banner.Show({\r\n options: {\r\n message: action.error.message,\r\n type: 'error',\r\n }\r\n }))\r\n )\r\n );\r\n\r\n public copySuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CreateFromExistingAssetActions.CreateFromExistingAssetSuccess),\r\n withLatestFrom(\r\n this._store.select(fromNavigation.getUnitCreationLogId)\r\n ),\r\n mergeMap(([action, logId]) => [\r\n ...action.stepIds.map(stepId => {\r\n switch (stepId) {\r\n case 4:\r\n return fromAssignDataPointsFormActions.LoadDataPoints(logId);\r\n\r\n case 11:\r\n return fromAssignUnitDataActions.Load(logId);\r\n\r\n case 9:\r\n return fromAlarms.LoadAlarmsForm(logId);\r\n\r\n default:\r\n return null;\r\n }\r\n }),\r\n fromRoot.Banner.Show({\r\n options: {\r\n message: 'Unit copied successfully.',\r\n type: 'success',\r\n autoClose: true\r\n }\r\n }),\r\n fromNavigation.LoadNavigation(logId)\r\n ]),\r\n filter(action => !!action)\r\n )\r\n );\r\n\r\n // LoadDataPoints\r\n public getUnitCreationLog$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(CreateFromExistingAssetActions.LoadUnitCreationLog),\r\n switchMap(action => this._unitCreationService.getUnitCreation(action.unitCreationLogId).pipe(\r\n map(log => CreateFromExistingAssetActions.LoadUnitCreationLogSuccess(log)),\r\n catchError(error => of(CreateFromExistingAssetActions.LoadUnitCreationLogFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.createFromExistingAsset);\r\n\r\n\r\nexport const getLogToCopyFrom = createSelector(getState, state => state.logToCopyFrom);\r\nexport const getIsLogLoaded = createSelector(getState, state => state.isLogLoaded);\r\nexport const getError = createSelector( getState, state => state.error);\r\nexport const getIsCreating = createSelector(getState, state => state.isCreating);\r\nexport const getIsCreated = createSelector(getState, state => state.isCreated);\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as Actions from './actions';\r\n\r\nconst createFromExistingAssetReducer = createReducer(\r\n initialState,\r\n //copy\r\n on(Actions.CreateFromExistingAsset, (state) => ({\r\n ...state,\r\n isCreating: true\r\n })),\r\n\r\n on(Actions.CreateFromExistingAssetFail, (state, { error }) => ({\r\n ...state,\r\n isCreating: false,\r\n isCreated: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.CreateFromExistingAssetSuccess, (state) => ({\r\n ...state,\r\n isCreating: false,\r\n isCreated: true,\r\n error: null\r\n })), \r\n\r\n on(Actions.LoadUnitCreationLog, (state) => ({\r\n ...state,\r\n isLogLoading: true\r\n })),\r\n\r\n on(Actions.LoadUnitCreationLogFail, (state, { error }) => ({\r\n ...state,\r\n isLogLoading: false,\r\n isLogLoaded: false,\r\n error: error\r\n })),\r\n\r\n on(Actions.LoadUnitCreationLogSuccess, (state, { log }) => ({\r\n ...state,\r\n logToCopyFrom: log,\r\n isLogLoading: false,\r\n isLogLoaded: true,\r\n error: null\r\n }))\r\n);\r\n\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return createFromExistingAssetReducer(state, action);\r\n}","import { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { UnitCreation } from '../../modules/unit-creation/models/unit-creation.model';\r\nexport interface State {\r\n logToCopyFrom: UnitCreation;\r\n\r\n isLogLoading: boolean;\r\n isLogLoaded: boolean;\r\n\r\n isCreating: boolean;\r\n isCreated: boolean;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n logToCopyFrom: null,\r\n\r\n isLogLoading: false,\r\n isLogLoaded: false,\r\n\r\n isCreating: false,\r\n isCreated: false,\r\n\r\n error: null\r\n}","import {\r\n DSPAssociationItem,\r\n DeviceInformationForm,\r\n AllDeviceInformation,\r\n RMSDeviceInfo\r\n} from '../../modules/device-info/models';\r\nimport { createAction, props } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\n// Form Config (heading/image text etc.)\r\nexport const LoadForm = createAction('[Support] Load Device Information Form',\r\n (unitCreationTypeId: number) => ({ payload: { unitCreationTypeId } }));\r\n\r\nexport const LoadFormFail = createAction('[Support] Load Device Information Form Fail',\r\n (error: ApiError) => ({ payload: { error } }));\r\n\r\nexport const LoadFormSuccess = createAction('[Support] Load Device Information Form Success',\r\n (deviceInfoForm: DeviceInformationForm) => ({ payload: { deviceInfoForm } }));\r\n\r\nexport const Clear = createAction('[Support] Clear Device Information');\r\n\r\n//\r\n// PLE\r\n// \r\n\r\nexport const LoadDspAssociationItems = createAction('[Support] Load Dsp Association Items',\r\n (isUnassociated: boolean) => ({ isUnassociated }));\r\n\r\nexport const LoadDspAssociationItemsFail = createAction('[Support] Load Dsp Association Items Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadDspAssociationItemsSuccess = createAction('[Support] Load Dsp Association Items Success',\r\n (dspAssociationItems: DSPAssociationItem[]) => ({ dspAssociationItems }));\r\n\r\nexport const LoadPleDeviceInformation = createAction('[Support] Load PLE Device Information',\r\n (make: string, serialNumber: string) => ({ make, serialNumber }));\r\n\r\nexport const LoadPleDeviceInformationFail = createAction('[Support] Load PLE Device Information Fail',\r\n (error: ApiError) => ({ payload: { error } }));\r\n\r\nexport const LoadPleDeviceInformationSuccess = createAction('[Support] Load PLE Device Information Success',\r\n (deviceInfo: AllDeviceInformation) => ({ payload: { deviceInfo } }));\r\n\r\nexport const LoadPleDeviceAssociation = createAction('[Support] Load Ple Device Association',\r\n (assetId: number) => ({ assetId }));\r\nexport const LoadPleDeviceAssociationFail = createAction('[Support] Load Ple Device Association Fail', \r\n (error: ApiError) => ({ error }));\r\nexport const LoadPleDeviceAssociationSuccess = createAction('[Support] Load Ple Device Association Success',\r\n (dspItem: DSPAssociationItem) => ({ dspItem }));\r\n\r\nexport const SavePleDeviceAssociation = createAction('[Support] Save Ple Device Association',\r\n (unitCreationLogId: number, dspItem: DSPAssociationItem, syncAssetName: boolean, next: boolean) => ({ unitCreationLogId, dspItem, syncAssetName, next }));\r\n\r\nexport const SavePleDeviceAssociationFail = createAction('[Support] Save Ple Device Association Fail',\r\n props<{ error: ApiError }>());\r\n\r\nexport const SavePleDeviceAssociationSuccess = createAction('[Support] Save Ple Device Association Success');\r\n\r\n//\r\n// RMS\r\n//\r\n\r\nexport const LoadRMSDeviceInfo = createAction('[Support] Load RMS Device Information',\r\n (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const LoadRMSDeviceInfoFail = createAction('[Support] Load RMS Device Information Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadRMSDeviceInfoSuccess = createAction('[Support] Load RMS Device Information Success', \r\n (deviceInfo: RMSDeviceInfo) => ({ deviceInfo }));\r\n\r\nexport const SaveRMSDeviceInfo = createAction('[Support] Save RMS Device Information',\r\n (unitCreationLogId: number, deviceInfo: RMSDeviceInfo, next: boolean) => ({ unitCreationLogId, deviceInfo, next }));\r\n\r\nexport const SaveRMSDeviceInfoFail = createAction('[Support] Save Device RMS Information Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const SaveRMSDeviceInfoSuccess = createAction('[Support] Save Device RMS Information Success',\r\n (deviceId: number) => ({ deviceId }));\r\n\r\n\r\n\r\n\r\n\r\n","// ng\r\nimport { Injectable } from '@angular/core';\r\n\r\n// rxjs\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\n// ngrx\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromNavigation from '../navigation';\r\nimport * as DeviceInfoActions from './actions';\r\n\r\n// rfv\r\nimport { SupportDeviceInfoService } from '@rfv/modules/support/services';\r\nimport { successUserNotificationSettingsPayload } from '@rfv/modules/dashboard/modules/user-admin/store/user-banner-messages';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _deviceInfoService: SupportDeviceInfoService\r\n ) { }\r\n\r\n public getForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.LoadForm),\r\n switchMap(action => this._deviceInfoService.getForm(action.payload.unitCreationTypeId).pipe(\r\n map(deviceInfoForm => DeviceInfoActions.LoadFormSuccess(deviceInfoForm)),\r\n catchError(error => of(DeviceInfoActions.LoadFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //\r\n // PLE\r\n //\r\n\r\n public getPleDevices$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.LoadDspAssociationItems),\r\n switchMap(action => this._deviceInfoService.getPleDevices(action.isUnassociated).pipe(\r\n map(dspAssociatedItems => DeviceInfoActions.LoadDspAssociationItemsSuccess(dspAssociatedItems)),\r\n catchError(error => of(DeviceInfoActions.LoadDspAssociationItemsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public getPleDeviceInformation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.LoadPleDeviceInformation),\r\n switchMap(action => this._deviceInfoService.getPleDeviceInformation(action.make, action.serialNumber).pipe(\r\n map(deviceInfo => DeviceInfoActions.LoadPleDeviceInformationSuccess(deviceInfo)),\r\n catchError(error => of(DeviceInfoActions.LoadPleDeviceInformationFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadPleDeviceAssociation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.LoadPleDeviceAssociation),\r\n switchMap(action => this._deviceInfoService.getPleDeviceAssocation(action.assetId).pipe(\r\n mergeMap(dspItem => [\r\n DeviceInfoActions.LoadPleDeviceAssociationSuccess(dspItem),\r\n DeviceInfoActions.LoadPleDeviceInformation(dspItem?.Make, dspItem?.SerialNumber),\r\n ]),\r\n catchError(error => of(DeviceInfoActions.LoadPleDeviceAssociationFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public savePleDeviceAssociation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.SavePleDeviceAssociation),\r\n switchMap(action => this._deviceInfoService.savePleDeviceAssociation(action.unitCreationLogId, action.dspItem, action.syncAssetName).pipe(\r\n mergeMap(deviceInfo => [\r\n DeviceInfoActions.SavePleDeviceAssociationSuccess(),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? fromNavigation.NextStep()\r\n : fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('PLE Device Association Saved') })\r\n ]),\r\n catchError(error => of(DeviceInfoActions.SavePleDeviceAssociationFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //\r\n // RMS\r\n //\r\n\r\n public loadRmsDeviceInfo$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.LoadRMSDeviceInfo),\r\n switchMap(action => this._deviceInfoService.getRmsDeviceInfo(action.unitCreationLogId).pipe(\r\n map(deviceInfo => DeviceInfoActions.LoadRMSDeviceInfoSuccess(deviceInfo)),\r\n catchError(error => of(DeviceInfoActions.LoadRMSDeviceInfoFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveRMSDeviceInfo$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DeviceInfoActions.SaveRMSDeviceInfo),\r\n switchMap(action => this._deviceInfoService.saveRmsDeviceInfo(action.unitCreationLogId, action.deviceInfo).pipe(\r\n mergeMap(deviceId => [\r\n DeviceInfoActions.SaveRMSDeviceInfoSuccess(deviceId),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? fromNavigation.NextStep()\r\n : fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('RMS Device Information Saved') })\r\n ]),\r\n catchError(error => of(DeviceInfoActions.SaveRMSDeviceInfoFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n\r\n}\r\n","\r\nimport {\r\n DSPAssociationItem,\r\n DeviceInformationForm,\r\n AllDeviceInformation,\r\n RMSDeviceInfo\r\n} from '../../modules/device-info/models';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n form: DeviceInformationForm | null;\r\n isFormLoading: boolean;\r\n isFormLoaded: boolean;\r\n formError: ApiError | null;\r\n\r\n // PLE\r\n isUnassociated: boolean;\r\n dspAssociationItems: DSPAssociationItem[] | null;\r\n isDspAssociationItemsLoaded: boolean;\r\n isDspAssociationItemsLoading: boolean;\r\n\r\n selectedDevice: DSPAssociationItem | null;\r\n isSelectedDeviceLoaded: boolean;\r\n isSelectedDeviceLoading: boolean;\r\n isSelectedDeviceSaving: boolean;\r\n\r\n selectedDeviceInfo: AllDeviceInformation | null;\r\n isSelectedDeviceInfoLoaded: boolean;\r\n isSelectedDeviceInfoLoading: boolean;\r\n\r\n // RMS\r\n rmsDeviceInfo: RMSDeviceInfo;\r\n rmsDeviceInfoError: ApiError;\r\n isRmsDeviceInfoLoading: boolean;\r\n isRmsDeviceInfoLoaded: boolean;\r\n isRmsDeviceInfoSaving: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n form: null,\r\n isFormLoading: false,\r\n isFormLoaded: false,\r\n formError: null,\r\n\r\n // PLE\r\n isUnassociated: true,\r\n dspAssociationItems: [],\r\n isDspAssociationItemsLoaded: false,\r\n isDspAssociationItemsLoading: false,\r\n\r\n selectedDevice: null,\r\n isSelectedDeviceLoaded: false,\r\n isSelectedDeviceLoading: false,\r\n isSelectedDeviceSaving: false,\r\n\r\n selectedDeviceInfo: null,\r\n isSelectedDeviceInfoLoaded: false,\r\n isSelectedDeviceInfoLoading: false,\r\n\r\n // RMS\r\n rmsDeviceInfo: null,\r\n rmsDeviceInfoError: null,\r\n isRmsDeviceInfoLoaded: false,\r\n isRmsDeviceInfoLoading: false,\r\n isRmsDeviceInfoSaving: false\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as DeviceInformationFormActions from './actions';\r\n\r\nconst deviceInformationFormReducer = createReducer(\r\n initialState,\r\n\r\n on(DeviceInformationFormActions.LoadForm, (state) => ({\r\n ...state,\r\n isFormLoading: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadFormFail, (state, { payload }) => ({\r\n ...state,\r\n isFormLoaded: false,\r\n isFormLoading: false,\r\n formError: payload.error\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadFormSuccess, (state, { payload }) => ({\r\n ...state,\r\n form: payload.deviceInfoForm,\r\n isFormLoaded: true,\r\n isFormLoading: false,\r\n formError: null\r\n })),\r\n\r\n on(DeviceInformationFormActions.Clear, state => initialState),\r\n\r\n //DSP ITEMS\r\n on(DeviceInformationFormActions.LoadDspAssociationItems, (state, { isUnassociated }) => ({\r\n ...state,\r\n isUnassociated,\r\n isDspAssociationItemsLoading: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadDspAssociationItemsFail, (state, { error }) => ({\r\n ...state,\r\n isDspAssociationItemsLoaded: false,\r\n isDspAssociationItemsLoading: false\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadDspAssociationItemsSuccess, (state, { dspAssociationItems }) => ({\r\n ...state,\r\n dspAssociationItems,\r\n isDspAssociationItemsLoaded: true,\r\n isDspAssociationItemsLoading: false\r\n })),\r\n\r\n //SELECTED DEVICE INFO\r\n on(DeviceInformationFormActions.LoadPleDeviceInformation, (state) => ({\r\n ...state,\r\n isSelectedDeviceInfoLoading: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadPleDeviceInformationFail, (state, { payload }) => ({\r\n ...state,\r\n selectedDeviceInfo: null,\r\n selectedDevice: null,\r\n isSelectedDeviceInfoLoading: false,\r\n isSelectedDeviceInfoLoaded: false,\r\n error: payload.error\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadPleDeviceInformationSuccess, (state, { payload }) => ({\r\n ...state,\r\n selectedDeviceInfo: payload.deviceInfo,\r\n isSelectedDeviceInfoLoading: false,\r\n isSelectedDeviceInfoLoaded: true,\r\n error: null\r\n })),\r\n\r\n\r\n //save RMS680 Device Information\r\n on(DeviceInformationFormActions.LoadRMSDeviceInfo, (state, { unitCreationLogId }) => ({\r\n ...state,\r\n isRmsDeviceInfoLoading: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadRMSDeviceInfoFail, (state, { error }) => ({\r\n ...state,\r\n rmsDeviceInfo: null,\r\n rmsDeviceInfoError: error,\r\n isRmsDeviceInfoLoaded: false,\r\n isRmsDeviceInfoLoading: false\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadRMSDeviceInfoSuccess, (state, { deviceInfo }) => ({\r\n ...state,\r\n rmsDeviceInfo: deviceInfo,\r\n rmsDeviceInfoError: null,\r\n isRmsDeviceInfoLoaded: true,\r\n isRmsDeviceInfoLoading: false\r\n })),\r\n\r\n on(DeviceInformationFormActions.SaveRMSDeviceInfo, state => ({\r\n ...state,\r\n isRmsDeviceInfoSaving: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.SaveRMSDeviceInfoFail, (state, { error }) => ({\r\n ...state,\r\n isRmsDeviceInfoSaving: false,\r\n rmsDeviceInfoError: error\r\n })),\r\n\r\n on(DeviceInformationFormActions.SaveRMSDeviceInfoSuccess, (state, { deviceId }) => ({\r\n ...state,\r\n isRmsDeviceInfoSaving: false,\r\n rmsDeviceInfoError: null\r\n })),\r\n\r\n // LOAD ASSOCIATION\r\n on(DeviceInformationFormActions.LoadPleDeviceAssociation, (state) => ({\r\n ...state,\r\n isSelectedDeviceLoading: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadPleDeviceAssociationFail, (state, { error }) => ({\r\n ...state,\r\n selectedDevice: null,\r\n selectedDeviceInfo: null,\r\n isSelectedDeviceLoading: false,\r\n isSelectedDeviceLoaded: false\r\n })),\r\n\r\n on(DeviceInformationFormActions.LoadPleDeviceAssociationSuccess, (state, { dspItem }) => ({\r\n ...state,\r\n selectedDevice: dspItem,\r\n isSelectedDeviceLoading: false,\r\n isSelectedDeviceLoaded: true,\r\n error: null\r\n })),\r\n\r\n // SAVE ASSOCIATION\r\n on(DeviceInformationFormActions.SavePleDeviceAssociation, (state) => ({\r\n ...state,\r\n isSelectedDeviceSaving: true\r\n })),\r\n\r\n on(DeviceInformationFormActions.SavePleDeviceAssociationFail, (state, { error }) => ({\r\n ...state,\r\n isSelectedDeviceSaving: false\r\n })),\r\n\r\n on(DeviceInformationFormActions.SavePleDeviceAssociationSuccess, (state) => ({\r\n ...state,\r\n isSelectedDeviceSaving: false\r\n })),\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return deviceInformationFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.deviceInfo);\r\n\r\nexport const getForm = createSelector(getState, state => state.form);\r\n\r\nexport const getFormId = createSelector(\r\n getForm, state => state && state.Id);\r\n\r\nexport const getFormParseTypes = createSelector(\r\n getForm, state => state && state.ParseTypes\r\n);\r\n\r\nexport const getFormHardwareTypes = createSelector(\r\n getForm, state => state && state.HardwareTypes\r\n);\r\n\r\nexport const getDPSAssociationItems = createSelector(\r\n getState, state => state.dspAssociationItems\r\n);\r\n\r\nexport const getSelectedDevice = createSelector(\r\n getState, state => state.selectedDevice\r\n);\r\n\r\nexport const getSelectedDeviceInformation = createSelector(\r\n getState, state => state.selectedDeviceInfo\r\n);\r\n\r\nexport const getDeviceInfo = createSelector(\r\n getSelectedDeviceInformation, state => state && state.deviceInformation && state.deviceInformation.devices && state.deviceInformation.devices.map(device => {\r\n const baseConfig = device.vimsConfiguration.find(config => config.type === 'Single') || null;\r\n return {\r\n ...device,\r\n\r\n baseConfig: baseConfig && baseConfig.partNumber,\r\n baseConfigDate: baseConfig && baseConfig.modifiedTime,\r\n sha1: baseConfig && baseConfig.sha1,\r\n communicationMethod: state.radios && state.radios.radios && state.radios.radios[0].communicationMethod\r\n };\r\n })\r\n);\r\nexport const getRadioInfo = createSelector(\r\n getSelectedDeviceInformation, state => state && state.radios && state.radios.radios\r\n);\r\nexport const getEcmsInfo = createSelector(\r\n getSelectedDeviceInformation, state => state && state.ecms && state.ecms.ecms\r\n);\r\nexport const isFormLoading = createSelector(getState, state => state.isFormLoading);\r\nexport const isFormLoaded = createSelector(getState, state => state.isFormLoaded);\r\nexport const getFormError = createSelector(getState, state => state.formError);\r\n\r\nexport const isDspAssociationItemsLoading = createSelector(getState, state => state.isDspAssociationItemsLoading);\r\nexport const isDspAssociationItemsLoaded = createSelector(getState, state => state.isDspAssociationItemsLoaded);\r\n\r\nexport const isSelectedDeviceLoading = createSelector(getState, state => state.isSelectedDeviceLoading);\r\nexport const isSelectedDeviceLoaded = createSelector(getState, state => state.isSelectedDeviceLoaded);\r\nexport const isSelectedDeviceSaving = createSelector(getState, state => state.isSelectedDeviceSaving);\r\n\r\nexport const isSelectedDeviceInfoLoading = createSelector(getState, state => state.isSelectedDeviceInfoLoading);\r\nexport const isSelectedDeviceInfoLoaded = createSelector(getState, state => state.isSelectedDeviceInfoLoaded);\r\n\r\nexport const getAssociationFilter = createSelector(getState, state => state.isUnassociated);\r\n\r\nexport const getRmsDeviceInfo = createSelector(getState, state => state.rmsDeviceInfo);\r\nexport const getRmsDeviceError = createSelector(getState, state => state.rmsDeviceInfoError);\r\nexport const isRmsDeviceInfoLoaded = createSelector(getState, state => state.isRmsDeviceInfoLoaded);\r\nexport const isRmsDeviceInfoLoading = createSelector(getState, state => state.isRmsDeviceInfoLoading);\r\nexport const isRmsDeviceInfoSaving = createSelector(getState, state => state.isRmsDeviceInfoSaving);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport {\r\n AssetShaCollection,\r\n PLEConfigGroup,\r\n VimsConfig,\r\n RebootDeviceResponse,\r\n PLEVimsPushResult,\r\n IDPOTAVersion,\r\n IDPOTAConfigurationHistory,\r\n IDPOTATemplate,\r\n IDPOTASetting\r\n} from '../../modules/hardware-config/models';\r\n\r\n//load status table rows\r\nexport const LoadCurrentStatus = createAction('[Support] Load PLE Device Status',\r\n (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const LoadCurrentStatusFail = createAction('[Support] Load PLE Device Status Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadCurrentStatusSuccess = createAction('[Support] Load PLE Device Status Success',\r\n (status: AssetShaCollection) => ({ status }));\r\n\r\n//load config group dropdown option list\r\nexport const LoadConfigGroups = createAction('[Support] Load Config Groups',\r\n (environment: string) => ({ environment }));\r\n\r\nexport const LoadConfigGroupsFail = createAction('[Support] Load Config Groups Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadConfigGroupsSuccess = createAction('[Support] Load Config Groups Success',\r\n (configGroups: PLEConfigGroup[]) => ({ configGroups }));\r\n\r\n\r\n//load available vims config table rows\r\nexport const LoadAvailableVimsConfig = createAction('[Support] Load Available VIMS Config',\r\n (environment: string, groupKey: string) => ({ environment, groupKey }));\r\n\r\nexport const LoadAvailableVimsConfigFail = createAction('[Support] Load Available VIMS Config Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadAvailableVimsConfigSuccess = createAction('[Support] Load Available VIMS Config Success',\r\n (availableVimsConfigs: VimsConfig[]) => ({ availableVimsConfigs }));\r\n\r\n//reboot device\r\nexport const RebootDevice = createAction('[Support] Reboot Device',\r\n (unitCreationLogId: number, assetId: number) => ({ unitCreationLogId, assetId }));\r\n\r\nexport const RebootDeviceFail = createAction('[Support] Reboot Device Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const RebootDeviceSuccess = createAction('[Support] Reboot Device Success',\r\n (rebootResult: RebootDeviceResponse) => ({ rebootResult }));\r\n\r\n//push file to device(update)\r\nexport const PushVimsConfig = createAction('[Support] Push Vims Config',\r\n (unitCreationLogId: number, env: string, sha1: string, assetId: number) => ({ unitCreationLogId, env, sha1, assetId }));\r\n\r\nexport const PushVimsConfigFail = createAction('[Support] Push Vims Config Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const PushVimsConfigSuccess = createAction('[Support] Push Vims Config Success',\r\n (vimsPushResult: PLEVimsPushResult) => ({ vimsPushResult }));\r\n\r\nexport const PollVimsStatus = createAction('[Support] Poll VIMS Status',\r\n (unitCreationLogId: number, kind: 'vims' | 'reboot' | 'sync', notificationId: number, assetId: number, env?: string, sha1?: string, attempt: number = 0, ) => ({ unitCreationLogId, kind, notificationId, assetId, env, sha1, attempt }));\r\n\r\nexport const StopPollVimsStatus = createAction('[Support] Stop VIMS Status Polling');\r\n\r\nexport const PLECompleteHardwareConfig = createAction('[Support] PLE Complete Hardware Config', (unitCreationLogId: number, confirm: boolean = false) => ({ unitCreationLogId, confirm }));\r\n\r\nexport const CancelVIMSCommand = createAction('[Support] Cancel VIMS Command');\r\n\r\nexport const PollOnboardingStatus = createAction('[Support] Poll Onboarding Status', (unitCreationLogId: number, dashboardId: number, sitemapGroupId: number, tileId: number, attempt: number = 0) => ({ unitCreationLogId, dashboardId, sitemapGroupId, tileId, attempt }));\r\nexport const StopPollOnboardingStatus = createAction('[Support] Stop Poll Onboarding Status', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\n// idp\r\nexport const ReadIdpConfig = createAction('[Support] Read IDP Configuration', (deviceId: number) => ({ deviceId }));\r\nexport const ReadIdpConfigFail = createAction('[Support] Read IDP Configuration Fail', (deviceId: number) => ({ deviceId }));\r\nexport const ReadIdpConfigSuccess = createAction('[Support] Read IDP Configuration Success', (deviceId: number, commandId: number) => ({ deviceId, commandId }));\r\n\r\nexport const PollCommandStatus = createAction('[Support] Poll Command Status',\r\n (deviceId: number, commandId: number, kind: 'readConfig' | 'pushConfig', settings: IDPOTASetting[] = null, next: boolean = false, unitCreationLogId: number = 0, attempt: number = 0) => ({ deviceId, commandId, kind, settings, next, unitCreationLogId, attempt }));\r\n\r\nexport const PollCommandStatusStop = createAction('[Support] Stop Poll Command Status', (cancel: boolean = false) => ({ cancel }));\r\n\r\nexport const LoadIdpVersion = createAction('[Support] Load IDP Version', (deviceId: number) => ({ deviceId }));\r\nexport const LoadIdpVersionFail = createAction('[Support] Load IDP Version Fail', (error: ApiError) => ({ error }));\r\nexport const LoadIdpVersionSuccess = createAction('[Support] Load IDP Version Success', (version: IDPOTAVersion) => ({ version }));\r\n\r\nexport const LoadIdpConfigHistory = createAction('[Support] Load IDP Config History', (deviceId: number) => ({ deviceId }));\r\nexport const LoadIdpConfigHistoryFail = createAction('[Support] Load IDP Config History Fail', (error: ApiError) => ({ error }));\r\nexport const LoadIdpConfigHistorySuccess = createAction('[Support] Load IDP Config History Success', (configHistory: IDPOTAConfigurationHistory[]) => ({ configHistory }));\r\n\r\nexport const LoadIdpTemplate = createAction('[Support] Load IDP Template', (versionId: number) => ({ versionId }));\r\nexport const LoadIdpTemplateFail = createAction('[Support] Load IDP Template Fail', (error: ApiError) => ({ error }));\r\nexport const LoadIdpTemplateSuccess = createAction('[Support] Load IDP Template Success', (template: IDPOTATemplate) => ({ template }));\r\n\r\nexport const LoadIdpSettings = createAction('[Support] Load IDP Settings', (deviceId: number, sampleTime: string) => ({ deviceId, sampleTime }));\r\nexport const LoadIdpSettingsFail = createAction('[Support] Load IDP Settings Fail', (error: ApiError) => ({ error }));\r\nexport const LoadIdpSettingsSuccess = createAction('[Support] Load IDP Settings Success', (settings: IDPOTASetting[]) => ({ settings }));\r\n\r\nexport const SaveIdpSettings = createAction('[Support] Save IDP Settings', (deviceId: number, settings: IDPOTASetting[], unitCreationLogId: number = 0, next: boolean = false) => ({ deviceId, settings, unitCreationLogId, next }));\r\nexport const SaveIdpSettingsFail = createAction('[Support] Save IDP Settings Fail', (error: ApiError) => ({ error }));\r\nexport const SaveIdpSettingsSuccess = createAction('[Support] Save IDP Settings Success', (commandId: number) => ({ commandId }));\r\n\r\nexport const ContinueWithoutSending = createAction('[Support] Continue Without Sending', (deviceId: number, settings: IDPOTASetting[], unitCreationLogId: number = 0, next: boolean = false) => ({ deviceId, settings, unitCreationLogId, next }));\r\nexport const ContinueWithoutSendingFail = createAction('[Support] Continue Without Sending Fail', (error: ApiError) => ({ error }));\r\nexport const ContinueWithoutSendingSuccess = createAction('[Support] Continue Without Sending Success', );\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { IDPOTATemplate, IDPOTAVersion, IDPOTAConfigurationHistory, IDPOTASetting } from '../modules/hardware-config/models';\r\nimport { DeviceStatus } from '../modules/unit-validation/models/device-status.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportIdpService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getTemplate(versionId: number) {\r\n return this._http.get(`/v1/support/hardware-config/idp/template/${versionId}`);\r\n }\r\n\r\n public getVersion(deviceId: number) {\r\n return this._http.get(`/v1/support/hardware-config/idp/${deviceId}/version`);\r\n }\r\n\r\n public getConfigHistory(deviceId: number) {\r\n return this._http.get(`/v1/support/hardware-config/idp/${deviceId}/config-history`);\r\n }\r\n\r\n public getSettings(deviceId: number, sampleTime: string) {\r\n return this._http.get(`/v1/support/hardware-config/idp/${deviceId}/settings`, {\r\n params: {\r\n sampleTime\r\n }\r\n });\r\n }\r\n\r\n public saveSettings(deviceId: number, settings: IDPOTASetting[], unitCreationLogId: number = 0, skipSend: boolean = false) {\r\n return this._http.put(`/v1/support/hardware-config/idp/${deviceId}/settings`, settings, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString(),\r\n skipSend: skipSend.toString()\r\n }\r\n });\r\n }\r\n\r\n public readConfig(deviceId: number) {\r\n return this._http.get(`/v1/support/hardware-config/idp/${deviceId}/read-config`);\r\n }\r\n\r\n public getCommandStatus(commandId: number) {\r\n return this._http.get(`/v1/support/hardware-config/idp/status`, {\r\n params: {\r\n commandId: commandId.toString()\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of, from, Subject, interval } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap, takeUntil, debounceTime, filter, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport * as HardwareConfigurationFormActions from './actions';\r\nimport * as notificationActions from '@rfv/modules/core/store/notifications'\r\n\r\nimport { SupportHardwareConfigService } from '@rfv/modules/support/services';\r\nimport { SupportIdpService } from '@rfv/modules/support/services/idp.service';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromNavigation from '../navigation';\r\n\r\nimport * as supportModal from '@rfv/modules/support/store/support-modal-messages';\r\n\r\nimport { OnboardingQueueService } from '@rfv/modules/core/services';\r\nimport { ModalContentType, ModalType } from '@rfv/store/modal';\r\nimport { RebootDeviceNotification } from '@rfv/modules/core/models/notifications';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store,\r\n private _idpService: SupportIdpService,\r\n private _hardwareConfigService: SupportHardwareConfigService,\r\n private _onboardingService: OnboardingQueueService\r\n ) { }\r\n\r\n private _maxAttempts = 60; // n * 10 seconds\r\n\r\n private _timer$ = new Subject();\r\n\r\n /** getStatus$ */\r\n public getStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadCurrentStatus),\r\n switchMap(action => this._hardwareConfigService.getPleHardwareConfigStatus(action.unitCreationLogId).pipe(\r\n map(status => HardwareConfigurationFormActions.LoadCurrentStatusSuccess(status)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadCurrentStatusFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n /** getConfigGroup$ */\r\n public getConfigGroup$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadConfigGroups),\r\n switchMap(action => this._hardwareConfigService.getPleHardwareConfigGroups(action.environment).pipe(\r\n map(configGroups => HardwareConfigurationFormActions.LoadConfigGroupsSuccess(configGroups)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadConfigGroupsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n /** getAvailableVimsConfig$ */\r\n public getAvailableVimsConfig$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadAvailableVimsConfig),\r\n switchMap(action => this._hardwareConfigService.getPleVimsConfigurations(action.environment, action.groupKey).pipe(\r\n map(availableVimsConfigs => HardwareConfigurationFormActions.LoadAvailableVimsConfigSuccess(availableVimsConfigs)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadAvailableVimsConfigFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n /** rebootDevice$ */\r\n public rebootDevice$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.RebootDevice),\r\n switchMap(action => \r\n this._hardwareConfigService.pleReboot(action.unitCreationLogId).pipe(\r\n mergeMap(success => {\r\n const notification = new RebootDeviceNotification(\"Reboot Device\", action.unitCreationLogId, action.assetId); \r\n return [ \r\n fromRoot.Modal.Close(),\r\n HardwareConfigurationFormActions.RebootDeviceSuccess(success),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Reboot Command Sent`,\r\n autoClose: 5000\r\n }\r\n }), \r\n notificationActions.Add(notification), \r\n HardwareConfigurationFormActions.PollVimsStatus(action.unitCreationLogId, 'reboot', notification.id, action.assetId)\r\n ]\r\n }),\r\n catchError(error => from([\r\n fromRoot.Modal.Close(),\r\n HardwareConfigurationFormActions.RebootDeviceFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `Reboot Command Failed to Send`,\r\n autoClose: 5000\r\n }\r\n }),\r\n fromRoot.Modal.Open({ options: supportModal.rebootFail(action.unitCreationLogId, action.assetId) })\r\n ]))\r\n ))\r\n )\r\n );\r\n \r\n /** updateDeviceConfig$ */\r\n public updateDeviceConfig$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.PushVimsConfig),\r\n switchMap(action => this._hardwareConfigService.savePleVimsConfig(action.unitCreationLogId, action.env, action.sha1).pipe(\r\n mergeMap(success => {\r\n const notification = new RebootDeviceNotification(\"VIMS Configuration\", action.unitCreationLogId, action.assetId); \r\n return [\r\n HardwareConfigurationFormActions.PushVimsConfigSuccess(success),\r\n fromRoot.Modal.Close(), \r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Vims Configuration Pushed`,\r\n autoClose: 5000\r\n }\r\n }),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n notificationActions.Add(notification),\r\n HardwareConfigurationFormActions.PollVimsStatus(action.unitCreationLogId, 'vims', notification.id, action.assetId, action.env, action.sha1)\r\n ]\r\n }),\r\n catchError(error => from([\r\n HardwareConfigurationFormActions.PushVimsConfigFail(error),\r\n fromRoot.Modal.Open({ options: supportModal.sendConfigurationFail(error && error.errorMessage, action.unitCreationLogId, action.env, action.sha1, action.assetId) })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n /** status poll */\r\n public pollStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.PollVimsStatus),\r\n debounceTime(10000),\r\n switchMap(action => this._hardwareConfigService.getPleHardwareConfigStatus(action.unitCreationLogId).pipe(//check status\r\n takeUntil(this._timer$),\r\n mergeMap(status => [\r\n HardwareConfigurationFormActions.LoadCurrentStatusSuccess(status),\r\n\r\n ... (() => {\r\n\r\n // mock status codes when ccds isn't cooperating\r\n // if (action.attempt == 1) {\r\n // status.VimsConfig = { StatusTypeId: 82 };\r\n // }\r\n // if (action.attempt == 2) {\r\n // status.VimsConfig = { StatusTypeId: 84 };\r\n // }\r\n if (status && status.VimsConfig) {//if shaCollection is 82 or 115,etc. trigger modal\r\n switch (status.VimsConfig.StatusTypeId) {\r\n case 82:\r\n case 115: // file sent, reboot pending\r\n case 117: // file sent - pre test passed with warnings - reboot ready\r\n return [ \r\n HardwareConfigurationFormActions.StopPollVimsStatus(), \r\n action.kind === 'vims'\r\n ? notificationActions.Complete(action.notificationId, \"Success\", true, true)\r\n : notificationActions.Update(action.notificationId, \"Success\", true)\r\n ];\r\n case 83: // invalid file\r\n return [\r\n HardwareConfigurationFormActions.StopPollVimsStatus(),\r\n notificationActions.Update(action.notificationId, \"Invalid File\", true),\r\n ];\r\n case 84: // success\r\n return [\r\n HardwareConfigurationFormActions.StopPollVimsStatus(),\r\n action.kind === 'vims'\r\n ? notificationActions.Complete(action.notificationId, \"Success\", true, true)\r\n : notificationActions.Update(action.notificationId, \"Success\", true)\r\n ];\r\n }\r\n }\r\n\r\n if (action.attempt >= this._maxAttempts - 1) {\r\n return [\r\n HardwareConfigurationFormActions.StopPollVimsStatus(),\r\n notificationActions.Failed(action.notificationId, \"Timed Out\", true, true),\r\n ];\r\n } else {\r\n return [\r\n HardwareConfigurationFormActions.PollVimsStatus(action.unitCreationLogId, action.kind, action.notificationId, action.assetId, action.env, action.sha1, action.attempt + 1)\r\n ]\r\n }\r\n })()\r\n ]),\r\n catchError(error => from([\r\n HardwareConfigurationFormActions.LoadCurrentStatusFail(error),\r\n action.kind === 'reboot'\r\n ? notificationActions.Failed(action.notificationId, \"Failed\", true, true)\r\n : notificationActions.Update(action.notificationId, \"Failed\", true)\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public stopPollingVims$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.StopPollVimsStatus),\r\n tap(() => this._timer$.next())\r\n ), { dispatch: false }\r\n );\r\n\r\n public cancelVimsCommand$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.CancelVIMSCommand),\r\n mergeMap(action => [\r\n HardwareConfigurationFormActions.StopPollVimsStatus(),\r\n fromRoot.Modal.Close()\r\n ])\r\n )\r\n );\r\n\r\n public pleCompleteHardwareConfig$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.PLECompleteHardwareConfig),\r\n switchMap(action => this._hardwareConfigService.pleComplete(action.unitCreationLogId, action.confirm).pipe(\r\n mergeMap(response => {\r\n if (response.success) {\r\n return [\r\n fromRoot.Modal.Close(),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n fromNavigation.NextStep()\r\n ];\r\n } else {\r\n if (response.canComplete) {\r\n return [fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.handleActions,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Hardware Configuration Incomplete',\r\n data: response.message,\r\n primaryText: 'Complete',\r\n primaryAction: HardwareConfigurationFormActions.PLECompleteHardwareConfig(action.unitCreationLogId, true),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n }\r\n })];\r\n } else {\r\n return [fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.Modal.ModalType.Cancel,\r\n contentType: fromRoot.Modal.ModalContentType.Text,\r\n title: 'Hardware Configuration Incomplete',\r\n data: response.message,\r\n primaryText: 'Cancel',\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n }\r\n })];\r\n }\r\n }\r\n })\r\n ))\r\n )\r\n );\r\n\r\n // start resume status poll\r\n public resume$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.OnboardingQueue.ResumeSuccess, fromCore.OnboardingQueue.RestartSuccess),\r\n withLatestFrom(\r\n this._store.select(fromDashboard.getSelectedDashboardId),\r\n this._store.select(fromDashboard.getSelectedSitemapGroupId),\r\n this._store.select(fromDashboard.getSelectedTileId)\r\n ),\r\n mergeMap(([action, dashboardId, sitemapGroupId, tileId]) => [\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n fromRoot.Modal.Open({ options: {\r\n contentType: ModalContentType.Text,\r\n modalType: ModalType.Ok,\r\n primaryText: 'Ok',\r\n title: 'Automated Onboarding',\r\n data: `Automated onboarding ${action.type === fromCore.OnboardingQueue.ResumeSuccess.type ? 'resumed' : 'restarted'}. You can monitor the process from the Client Services Onboarding Dashboard.`\r\n }})\r\n ])\r\n )\r\n );\r\n\r\n //\r\n // IDP\r\n //\r\n\r\n getTemplate$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadIdpTemplate),\r\n switchMap(action => this._idpService.getTemplate(action.versionId).pipe(\r\n map(entity => HardwareConfigurationFormActions.LoadIdpTemplateSuccess(entity)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadIdpTemplateFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n getVersion$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadIdpVersion),\r\n switchMap(action => this._idpService.getVersion(action.deviceId).pipe(\r\n map(entity => HardwareConfigurationFormActions.LoadIdpVersionSuccess(entity)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadIdpVersionFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n getConfigHistory$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadIdpConfigHistory),\r\n switchMap(action => this._idpService.getConfigHistory(action.deviceId).pipe(\r\n map(entity => HardwareConfigurationFormActions.LoadIdpConfigHistorySuccess(entity)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadIdpConfigHistoryFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n getSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.LoadIdpSettings),\r\n switchMap(action => this._idpService.getSettings(action.deviceId, action.sampleTime).pipe(\r\n map(entity => HardwareConfigurationFormActions.LoadIdpSettingsSuccess(entity)),\r\n catchError(error => of(HardwareConfigurationFormActions.LoadIdpSettingsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n saveSettingsModal$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.SaveIdpSettings),\r\n map(action => fromRoot.Modal.Open({ options: supportModal.pushConfig()}))\r\n )\r\n );\r\n\r\n saveSettings$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.SaveIdpSettings),\r\n switchMap(action => this._idpService.saveSettings(action.deviceId, action.settings, action.unitCreationLogId).pipe(\r\n mergeMap(commandId => [\r\n HardwareConfigurationFormActions.SaveIdpSettingsSuccess(commandId),\r\n HardwareConfigurationFormActions.PollCommandStatus(action.deviceId, commandId, 'pushConfig', action.settings, action.next, action.unitCreationLogId)\r\n ]),\r\n catchError(error => from([\r\n HardwareConfigurationFormActions.SaveIdpSettingsFail(error),\r\n fromRoot.Modal.Open({ options: supportModal.pushConfigFail(action.deviceId, action.settings, action.next, action.unitCreationLogId)})\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n ContinueWithoutSending$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.ContinueWithoutSending),\r\n switchMap(action => this._idpService.saveSettings(action.deviceId, action.settings, action.unitCreationLogId, true).pipe(\r\n mergeMap(() => [\r\n HardwareConfigurationFormActions.ContinueWithoutSendingSuccess(),\r\n fromNavigation.NextStep()\r\n ]),\r\n catchError(error => from([\r\n HardwareConfigurationFormActions.ContinueWithoutSendingFail(error),\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n readConfigModal$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.ReadIdpConfig),\r\n map(action => fromRoot.Modal.Open({ options: supportModal.readConfig()}))\r\n )\r\n );\r\n\r\n readConfig$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.ReadIdpConfig),\r\n switchMap(action => this._idpService.readConfig(action.deviceId).pipe(\r\n mergeMap(commandId => [\r\n HardwareConfigurationFormActions.ReadIdpConfigSuccess(action.deviceId, commandId),\r\n HardwareConfigurationFormActions.PollCommandStatus(action.deviceId, commandId, 'readConfig'),\r\n ]),\r\n catchError(error => from([\r\n HardwareConfigurationFormActions.ReadIdpConfigFail(error),\r\n fromRoot.Modal.Open({ options: supportModal.readConfigFail(action.deviceId)})\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n pollCommandStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.PollCommandStatus),\r\n debounceTime(10000),\r\n switchMap(action => this._idpService.getCommandStatus(action.commandId).pipe(\r\n takeUntil(this._timer$),\r\n mergeMap(status => [\r\n ... (() => {\r\n if (status && status.deviceCommandTransferStatusId) {\r\n switch (status.deviceCommandTransferStatusId) {\r\n // keep waiting...\r\n case 0: // unsent\r\n case 1: // sent, waiting for response\r\n case 7: // queued\r\n break;\r\n\r\n // show error modal\r\n case 2: // timeout\r\n case 4: // sent, failed\r\n case 5: // sent, failed, retrying - we would need the new commandId to keep polling\r\n case 6: // failed to send\r\n case 8: // failed to build\r\n return [\r\n HardwareConfigurationFormActions.PollCommandStatusStop(),\r\n ...(() => {\r\n switch (action.kind) {\r\n case 'readConfig': return [fromRoot.Modal.Open({ options: supportModal.readConfigFail(action.deviceId) })];\r\n case 'pushConfig': return [fromRoot.Modal.Open({ options: supportModal.pushConfigFail(action.deviceId, action.settings, action.next, action.unitCreationLogId)})];\r\n }\r\n })()\r\n ];\r\n\r\n // success\r\n case 3: // sent, success\r\n case 9: // sent, no response expected\r\n return [\r\n HardwareConfigurationFormActions.PollCommandStatusStop(),\r\n ...(() => {\r\n switch (action.kind) {\r\n case 'readConfig': return [\r\n HardwareConfigurationFormActions.LoadIdpVersion(action.deviceId),\r\n HardwareConfigurationFormActions.LoadIdpConfigHistory(action.deviceId),\r\n fromRoot.Modal.Open({ options: supportModal.readConfigSuccess() })\r\n ];\r\n\r\n case 'pushConfig': return [\r\n fromRoot.Modal.Open({ options: supportModal.pushConfigSuccess() }),\r\n ...(() => {\r\n return action.next ? [\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n fromNavigation.NextStep()\r\n ] : []\r\n })()\r\n ];\r\n }\r\n })()\r\n\r\n ];\r\n }\r\n }\r\n\r\n if (action.attempt >= this._maxAttempts - 1) {\r\n return [\r\n HardwareConfigurationFormActions.PollCommandStatusStop(),\r\n fromRoot.Modal.Open({ options: supportModal.LongerThanExpected(action.kind) })\r\n ];\r\n } else {\r\n return [\r\n HardwareConfigurationFormActions.PollCommandStatus(action.deviceId, action.commandId, action.kind, action.settings, action.next, action.unitCreationLogId, action.attempt + 1)\r\n ];\r\n }\r\n })()\r\n ]),\r\n catchError(error => from([\r\n ...(() => {\r\n switch (action.kind) {\r\n case 'readConfig': return [fromRoot.Modal.Open({ options: supportModal.readConfigFail(action.deviceId) })];\r\n case 'pushConfig': return [fromRoot.Modal.Open({ options: supportModal.pushConfigFail(action.deviceId, action.settings, action.next, action.unitCreationLogId) })];\r\n }\r\n })()\r\n\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public pollingCommandModal$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.PollCommandStatus),\r\n filter(action => action.attempt === 0),\r\n switchMap(action => interval(1000).pipe(\r\n takeUntil(this._timer$),\r\n map(value => fromRoot.Modal.Open({ options: supportModal.CheckingStatus(action.kind, (this._maxAttempts * 10) - value, HardwareConfigurationFormActions.PollCommandStatusStop(true)) }))\r\n ))\r\n )\r\n );\r\n\r\n public stopPollingCommand$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(HardwareConfigurationFormActions.PollCommandStatusStop),\r\n tap(() => this._timer$.next()),\r\n mergeMap(action => [\r\n ...(() => action.cancel ? [fromRoot.Modal.Close()] : [])()\r\n ])\r\n )\r\n );\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { \r\n PLEConfigGroup,\r\n AssetShaCollection,\r\n VimsConfig,\r\n RebootDeviceResponse,\r\n IDPOTAVersion,\r\n IDPOTAConfigurationHistory,\r\n IDPOTATemplate,\r\n IDPOTASetting\r\n } from '../../modules/hardware-config/models';\r\nexport interface State {\r\n // PLE state\r\n currentStatus: AssetShaCollection;\r\n currentStatusError: ApiError | null;\r\n isCurrentStatusLoading: boolean;\r\n isCurrentStatusLoaded: boolean;\r\n\r\n configGroups: PLEConfigGroup[];\r\n configGroupsError: ApiError | null;\r\n isConfigGroupsLoading: boolean;\r\n isConfigGroupsLoaded: boolean;\r\n\r\n availableVimsConfigs: VimsConfig[];\r\n availableVimsConfigsError: ApiError | null;\r\n isAvailableVimsConfigsLoading: boolean;\r\n isAvailableVimsConfigsLoaded: boolean;\r\n\r\n vimsPushResult: any;\r\n vimsPushError: ApiError | null;\r\n isVimsPushing: boolean;\r\n\r\n rebootResult: RebootDeviceResponse;\r\n rebootError: ApiError | null;\r\n isRebooting: boolean;\r\n\r\n // IDP state\r\n idpVersion: IDPOTAVersion;\r\n isIdpVersionLoading: boolean;\r\n isIdpVersionLoaded: boolean;\r\n idpVersionError: ApiError | null;\r\n\r\n idpConfigHistory: IDPOTAConfigurationHistory[];\r\n isIdpConfigHistoryLoading: boolean;\r\n isIdpConfigHistoryLoaded: boolean;\r\n idpConfigHistoryError: ApiError | null;\r\n\r\n idpTemplate: IDPOTATemplate;\r\n isIdpTemplateLoading: boolean;\r\n isIdpTemplateLoaded: boolean;\r\n idpTemplateError: ApiError | null;\r\n\r\n idpSettings: IDPOTASetting[];\r\n isIdpSettingsLoading: boolean;\r\n isIdpSettingsLoaded: boolean;\r\n isIdpSettingsSaving: boolean;\r\n idpSettingsError: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n // PLE\r\n currentStatus: null,\r\n currentStatusError: null,\r\n isCurrentStatusLoading: false,\r\n isCurrentStatusLoaded: false,\r\n\r\n configGroups: [],\r\n configGroupsError: null,\r\n isConfigGroupsLoading: false,\r\n isConfigGroupsLoaded: false,\r\n\r\n availableVimsConfigs: [],\r\n availableVimsConfigsError: null,\r\n isAvailableVimsConfigsLoading: false,\r\n isAvailableVimsConfigsLoaded: false,\r\n\r\n vimsPushResult: null,\r\n vimsPushError: null,\r\n isVimsPushing: false,\r\n\r\n rebootResult: null,\r\n rebootError: null,\r\n isRebooting: false,\r\n\r\n // IDP\r\n idpVersion: null,\r\n isIdpVersionLoading: false,\r\n isIdpVersionLoaded: false,\r\n idpVersionError: null,\r\n\r\n idpConfigHistory: [],\r\n isIdpConfigHistoryLoading: false,\r\n isIdpConfigHistoryLoaded: false,\r\n idpConfigHistoryError: null,\r\n\r\n idpTemplate: null,\r\n isIdpTemplateLoading: false,\r\n isIdpTemplateLoaded: false,\r\n idpTemplateError: null,\r\n\r\n idpSettings: null,\r\n isIdpSettingsLoading: false,\r\n isIdpSettingsLoaded: false,\r\n isIdpSettingsSaving: false,\r\n idpSettingsError: null\r\n}","\r\nimport { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as HardwareConfigFormActions from './actions';\r\n\r\nconst hardwareConfigFormReducer = createReducer(\r\n initialState,\r\n\r\n //load status table rows\r\n on(HardwareConfigFormActions.LoadCurrentStatus, (state) => ({\r\n ...state,\r\n isCurrentStatusLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadCurrentStatusFail, (state, { error }) => ({\r\n ...state,\r\n currentStatus: null,\r\n currentStatusError: error,\r\n isCurrentStatusLoading: false,\r\n isCurrentStatusLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadCurrentStatusSuccess, (state, { status }) => ({\r\n ...state,\r\n currentStatus: status,\r\n currentStatusError: null,\r\n isCurrentStatusLoading: false,\r\n isCurrentStatusLoaded: true\r\n })),\r\n\r\n //load config group dropdown option list\r\n on(HardwareConfigFormActions.LoadConfigGroups, (state) => ({\r\n ...state,\r\n isConfigGroupsLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadConfigGroupsFail, (state, { error }) => ({\r\n ...state,\r\n configGroups: null,\r\n configGroupsError: error,\r\n isConfigGroupsLoading: false,\r\n isConfigGroupsLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadConfigGroupsSuccess, (state, { configGroups }) => ({\r\n ...state,\r\n configGroups,\r\n configGroupsError: null,\r\n isConfigGroupsLoading: false,\r\n isConfigGroupsLoaded: true\r\n })),\r\n\r\n //load available vims config table rows\r\n on(HardwareConfigFormActions.LoadAvailableVimsConfig, (state) => ({\r\n ...state,\r\n isAvailableVimsConfigsLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadAvailableVimsConfigFail, (state, { error }) => ({\r\n ...state,\r\n availableVimsConfigs: null,\r\n availableVimsConfigsError: error,\r\n isAvailableVimsConfigsLoading: false,\r\n isAvailableVimsConfigsLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadAvailableVimsConfigSuccess, (state, { availableVimsConfigs }) => ({\r\n ...state,\r\n availableVimsConfigs,\r\n availableVimsConfigsError: null,\r\n isAvailableVimsConfigsLoading: false,\r\n isAvailableVimsConfigsLoaded: true\r\n })),\r\n\r\n //push file to device(update)\r\n on(HardwareConfigFormActions.PushVimsConfig, (state) => ({\r\n ...state,\r\n isVimsPushing: true,\r\n })),\r\n\r\n on(HardwareConfigFormActions.PushVimsConfigFail, (state, { error }) => ({\r\n ...state,\r\n vimsPushResult: null,\r\n vimsPushError: error,\r\n isVimsPushing: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.PushVimsConfigSuccess, (state, { vimsPushResult }) => ({\r\n ...state,\r\n vimsPushResult,\r\n vimsPushError: null,\r\n isVimsPushing: false\r\n })),\r\n\r\n //reboot device\r\n on(HardwareConfigFormActions.RebootDevice, (state) => ({\r\n ...state,\r\n isRebooting: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.RebootDeviceFail, (state, { error }) => ({\r\n ...state,\r\n rebootResult: null,\r\n rebootError: error,\r\n isRebooting: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.RebootDeviceSuccess, (state, { rebootResult }) => ({\r\n ...state,\r\n rebootResult: rebootResult,\r\n rebootError: null,\r\n isRebooting: false\r\n })),\r\n\r\n //\r\n // idp\r\n //\r\n\r\n // idp template\r\n on(HardwareConfigFormActions.LoadIdpTemplate, (state, { versionId }) => ({\r\n ...state,\r\n isIdpTemplateLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpTemplateFail, (state, { error }) => ({\r\n ...state,\r\n idpTemplate: null,\r\n idpTemplateError: error,\r\n isIdpTemplateLoading: false,\r\n isIdpTemplateLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpTemplateSuccess, (state, { template }) => ({\r\n ...state,\r\n idpTemplate: template,\r\n idpTemplateError: null,\r\n isIdpTemplateLoading: false,\r\n isIdpTemplateLoaded: true\r\n })),\r\n\r\n // idp version\r\n on(HardwareConfigFormActions.LoadIdpVersion, (state, { deviceId }) => ({\r\n ...state,\r\n isIdpVersionLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpVersionFail, (state, { error }) => ({\r\n ...state,\r\n idpVersion: null,\r\n idpVersionError: error,\r\n isIdpVersionLoading: false,\r\n isIdpVersionLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpVersionSuccess, (state, { version }) => ({\r\n ...state,\r\n idpVersion: version,\r\n idpVersionError: null,\r\n isIdpVersionLoading: false,\r\n isIdpVersionLoaded: true\r\n })),\r\n\r\n // idp config history\r\n on(HardwareConfigFormActions.LoadIdpConfigHistory, (state, { deviceId }) => ({\r\n ...state,\r\n isIdpConfigHistoryLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpConfigHistoryFail, (state, { error }) => ({\r\n ...state,\r\n idpConfigHistory: null,\r\n idpConfigHistoryError: error,\r\n isIdpConfigHistoryLoading: false,\r\n isIdpConfigHistoryLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpConfigHistorySuccess, (state, { configHistory }) => ({\r\n ...state,\r\n idpConfigHistory: configHistory,\r\n idpConfigHistoryError: null,\r\n isIdpConfigHistoryLoading: false,\r\n isIdpConfigHistoryLoaded: true\r\n })),\r\n\r\n // idp settings\r\n on(HardwareConfigFormActions.LoadIdpSettings, (state, { deviceId, sampleTime }) => ({\r\n ...state,\r\n isIdpSettingsLoading: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpSettingsFail, (state, { error }) => ({\r\n ...state,\r\n idpSettings: null,\r\n idpSettingsError: error,\r\n isIdpSettingsLoading: false,\r\n isIdpSettingsLoaded: false\r\n })),\r\n\r\n on(HardwareConfigFormActions.LoadIdpSettingsSuccess, (state, { settings }) => ({\r\n ...state,\r\n idpSettings: settings,\r\n idpSettingsError: null,\r\n isIdpSettingsLoading: false,\r\n isIdpSettingsLoaded: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.SaveIdpSettings, (state, { deviceId, settings }) => ({\r\n ...state,\r\n isIdpSettingsSaving: true\r\n })),\r\n\r\n on(HardwareConfigFormActions.SaveIdpSettingsFail, (state, { error }) => ({\r\n ...state,\r\n idpSettings: null,\r\n isIdpSettingsSaving: false,\r\n })),\r\n\r\n on(HardwareConfigFormActions.SaveIdpSettingsSuccess, (state, { commandId }) => ({\r\n ...state,\r\n isIdpSettingsSaving: false\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return hardwareConfigFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.hardwareConfigurationForm);\r\n\r\n/** status */\r\nexport const getCurrentStatus = createSelector(getState, state => state.currentStatus);\r\nexport const getCurrentStatusError = createSelector(getState, state => state.currentStatusError);\r\nexport const isCurrentStatusLoading = createSelector(getState, state => state.isCurrentStatusLoading);\r\nexport const isCurrentStatusLoaded = createSelector(getState, state => state.isCurrentStatusLoaded);\r\n\r\n/** config groups */\r\nexport const getConfigGroups = createSelector(getState, state => state.configGroups);\r\nexport const getConfigGroupsError = createSelector(getState, state => state.configGroupsError);\r\nexport const isConfigGroupsLoading = createSelector(getState, state => state.isConfigGroupsLoading);\r\nexport const isConfigGroupsLoaded = createSelector(getState, state => state.isConfigGroupsLoaded);\r\n\r\n/** available vims config */\r\nexport const getAvailableVimsConfigs = createSelector(getState, state => state.availableVimsConfigs);\r\nexport const getAvailableVimsConfigsError = createSelector(getState, state => state.availableVimsConfigsError);\r\nexport const isAvailableVimsConfigsLoading = createSelector(getState, state => state.isAvailableVimsConfigsLoading);\r\nexport const isAvailableVimsConfigsLoaded = createSelector(getState, state => state.isAvailableVimsConfigsLoaded);\r\n\r\n/** update */\r\nexport const getVimsPushResult = createSelector(getState, state => state.vimsPushResult);\r\nexport const getVimsPushError = createSelector(getState, state => state.vimsPushError);\r\nexport const isVimsPushing = createSelector(getState, state => state.isVimsPushing);\r\n\r\n/** reboot */\r\nexport const getRebootResult = createSelector(getState, state => state.rebootResult);\r\nexport const getRebootError = createSelector(getState, state => state.rebootError);\r\nexport const isRebooting = createSelector(getState, state => state.isRebooting);\r\n\r\n/** idp */\r\nexport const getIdpTemplate = createSelector(getState, state => state.idpTemplate);\r\nexport const getIdpTemplateError = createSelector(getState, state => state.idpTemplateError);\r\nexport const isIdpTemplateLoading = createSelector(getState, state => state.isIdpTemplateLoading);\r\nexport const isIdpTemplateLoaded = createSelector(getState, state => state.isIdpTemplateLoaded);\r\n\r\nexport const getIdpVersion = createSelector(getState, state => state.idpVersion);\r\nexport const getIdpVersionError = createSelector(getState, state => state.idpVersionError);\r\nexport const isIdpVersionLoading = createSelector(getState, state => state.isIdpVersionLoading);\r\nexport const isIdpVersionLoaded = createSelector(getState, state => state.isIdpVersionLoaded);\r\n\r\nexport const getIdpConfigHistory = createSelector(getState, state => state.idpConfigHistory);\r\nexport const getIdpConfigHistoryError = createSelector(getState, state => state.idpConfigHistoryError);\r\nexport const isIdpConfigHistoryLoading = createSelector(getState, state => state.isIdpConfigHistoryLoading);\r\nexport const isIdpConfigHistoryLoaded = createSelector(getState, state => state.isIdpConfigHistoryLoaded);\r\n\r\nexport const getIdpSettings = createSelector(getState, state => state.idpSettings);\r\nexport const getIdpSettingsError = createSelector(getState, state => state.idpSettingsError);\r\nexport const isIdpSettingsLoading = createSelector(getState, state => state.isIdpSettingsLoading);\r\nexport const isIdpSettingsLoaded = createSelector(getState, state => state.isIdpSettingsLoaded);\r\n\r\nexport const isIdpSettingsSaving = createSelector(getState, state => state.isIdpSettingsSaving);","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DatapointLegend, AssetDatapointSetting, Asset } from '@rfv/modules/core/models';\r\n//store id\r\nexport const StoreDataPointId = createAction('[Support] Store DataPoint Id',\r\n (dpId: number) => ({ dpId }));\r\n\r\nexport const CopyDataPoints = createAction('[Support] Copy DataPoints',\r\n (dataPointLegends: DatapointLegend[]) => ({ dataPointLegends }));\r\n\r\n//Save\r\nexport const SaveLegends = createAction('[Support] Save DataPoint Legends',\r\n (dataPointLegends: DatapointLegend[]) => ({ dataPointLegends }));\r\n\r\nexport const SaveLegendsFail = createAction('[Support] Save DataPoint Legends Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const SaveLegendsSuccess = createAction('[Support] Save DataPoint Legends Success');\r\n//Add\r\nexport const AddLegends = createAction('[Support] Add DataPoint Legends',\r\n (dataPointLegends: DatapointLegend[]) => ({ dataPointLegends }));\r\n\r\nexport const AddLegendsFail = createAction('[Support] Add DataPoint Legend Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const AddLegendsSuccess = createAction('[Support] Add DataPoint Legend Success');\r\n//Delete\r\nexport const DeleteLegend = createAction('[Support] Delete DataPoint Legend',\r\n (dataPointId: number, dataPointValues: number[]) => ({ dataPointId, dataPointValues }));\r\n\r\nexport const DeleteLegendFail = createAction('[Support] Delete DataPoint Legend Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const DeleteLegendSuccess = createAction('[Support] Delete DataPoint Legend Success');\r\n\r\n//Assets\r\nexport const LoadUserAssets = createAction('[Support] Load User Assets');\r\n\r\nexport const LoadUserAssetsFail = createAction('[Support] Load User Assets Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadUserAssetsSuccess = createAction('[Support] Load User Assets Success',\r\n (assets: Asset[]) => ({ assets }));\r\n\r\n//Datapoints\r\nexport const LoadAssetDataPoints = createAction('[Support] Load Asset DataPoints',\r\n (assetId: number) => ({ assetId }));\r\n\r\nexport const LoadAssetDataPointsFail = createAction('[Support] Load Asset DataPoints Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadAssetDataPointsSuccess = createAction('[Support] Load Asset DataPoints Success',\r\n (dataPoints: AssetDatapointSetting[]) => ({ dataPoints }));\r\n\r\n\r\nexport const LoadDataPointLegends = createAction('[Support] Load DataPoint Legends',\r\n (dpIds: number[]) => ({ dpIds }));\r\n\r\nexport const LoadDataPointLegendsFail = createAction('[Support] Load DataPoint Legends Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadDataPointLegendsSuccess = createAction('[Support] Load DataPoint Legends Success',\r\n (legends: DatapointLegend[]) => ({ legends }));\r\n\r\nexport const Clear = createAction('[Support] Clear Legend Editor Legends');\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.legendEditor);\r\n\r\nexport const getSelectedDataPointId = createSelector(getState, state => state.selectedDataPointId);\r\n\r\nexport const getAssets = createSelector(getState, state => state.assetsToCopy);\r\nexport const isAssetsLoading = createSelector(getState, state => state.isAssetsToCopyLoading);\r\nexport const isAssetsLoaded = createSelector(getState, state => state.isAssetsToCopyLoaded);\r\n\r\nexport const getDataPoints = createSelector(getState, state => state.dataPointsToCopy);\r\nexport const isDataPointsLoading = createSelector(getState, state => state.isDataPointsToCopyLoading);\r\nexport const isDataPointsLoaded = createSelector(getState, state => state.isDataPointsToCopyLoaded);\r\n\r\nexport const getDataPointLegends = createSelector(getState, state => state.legends || []);\r\nexport const isLegendsLoading = createSelector(getState, state => state.isLegendsLoading);\r\nexport const isLegendsLoaded = createSelector(getState, state => state.isLegendsLoaded);\r\n\r\nexport const getDataPointLegendsToCopy = createSelector(getState, state => state.legendsToCopy || []);\r\nexport const isLegendsToCopyLoading = createSelector(getState, state => state.isLegendsToCopyLoading);\r\nexport const isLegendsToCopyLoaded = createSelector(getState, state => state.isLegendsToCopyLoaded);\r\n\r\nexport const getSelectedDataPointLegends = createSelector(getState, state => state.selectedLegendsToCopy || []);\r\n\r\nexport const isLegendsSaving = createSelector(getState, state => state.isLegendsSaving);\r\nexport const isLegendsDeleting = createSelector(getState, state => state.isLegendsDeleting);\r\nexport const isLegendsAdding = createSelector(getState, state => state.isLegendsAdding);","/* angular */\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n/* core */\r\nimport { DatapointLegend } from '@rfv/modules/core/models';\r\nimport { AssetDatapointSetting, Asset } from '@rfv/modules/core/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LegendEditorService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public saveDataPointLegends(dataPointLegends: DatapointLegend[]) {\r\n return this._http.put(`/v1/support/datapoints/legends`, dataPointLegends);\r\n }\r\n\r\n public deleteDataPointLegend(dataPointId: number, dataPointValues: number[]) { \r\n return this._http.delete(`/v1/support/datapoints/legends/${dataPointId}`, {\r\n params: {\r\n dataPointValues: dataPointValues\r\n }\r\n });\r\n\r\n }\r\n\r\n public addDataPointLegends(dataPointLegends: DatapointLegend[]) {\r\n return this._http.post(`/v1/support/datapoints/legends`, dataPointLegends);\r\n }\r\n\r\n //get assets for assetIds\r\n public getUserAssets() {\r\n return this._http.get(`/v2/assets`);\r\n }\r\n\r\n //get datapoints for assets\r\n public getDataPointsByAssetId(assetId: number) {\r\n let dataPoints = this._http.get(`/v2/asset/${assetId}/datapointSettings`);\r\n return dataPoints;\r\n }\r\n}\r\n","\r\n/* angular */\r\nimport { Injectable } from '@angular/core';\r\n\r\n/* rxjs */\r\nimport { from, of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\nimport { tap, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* ngrx */\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as LegendEditorActions from './actions';\r\nimport * as LegendEditorSelectors from './selectors';\r\n\r\n/* misc */\r\nimport { LegendEditorService } from '@rfv/modules/support/services/legend-editor.service';\r\nimport { DatapointsService } from '@rfv/modules/core/services';\r\nimport * as supportModal from '@rfv/modules/support/store/support-modal-messages';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _legendEditorService: LegendEditorService,\r\n private _dataPointService: DatapointsService,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public userId$ = this._store$.select(fromCore.UserSession.getSessionUserId);//selected datapoint Id\r\n public dpId$ = this._store$.select(LegendEditorSelectors.getSelectedDataPointId);//selected datapoint Id\r\n public dpIds: number[] = [];//to copy from Ids\r\n\r\n public saveDataPointLegends$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LegendEditorActions.SaveLegends),\r\n switchMap(action => this._legendEditorService.saveDataPointLegends(action.dataPointLegends).pipe(\r\n withLatestFrom(this.dpId$),\r\n mergeMap(([legends, dpId]) => [\r\n LegendEditorActions.SaveLegendsSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Legends Saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n LegendEditorActions.LoadDataPointLegends([dpId])\r\n ]),\r\n catchError(error => from([\r\n LegendEditorActions.SaveLegendsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving Legends',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public deleteDataPointLegends$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LegendEditorActions.DeleteLegend),\r\n switchMap(action => this._legendEditorService.deleteDataPointLegend(action.dataPointId, action.dataPointValues).pipe(\r\n withLatestFrom(this.dpId$),\r\n mergeMap(([legends, dpId]) => [\r\n LegendEditorActions.DeleteLegendSuccess(),\r\n LegendEditorActions.LoadDataPointLegends([dpId])\r\n ]),\r\n catchError(error => of(LegendEditorActions.DeleteLegendFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public addDataPointLegends$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LegendEditorActions.AddLegends),\r\n switchMap(action => this._legendEditorService.addDataPointLegends(action.dataPointLegends).pipe(\r\n withLatestFrom(this.dpId$),\r\n mergeMap(([legends, dpId]) => [\r\n LegendEditorActions.AddLegendsSuccess(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Legends Added`,\r\n autoClose: 3000\r\n }\r\n }),\r\n LegendEditorActions.LoadDataPointLegends([dpId])\r\n ]),\r\n catchError(error => from([\r\n LegendEditorActions.AddLegendsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while adding Legends',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n\r\n //Assets\r\n public getUserAssets$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LegendEditorActions.LoadUserAssets),\r\n switchMap(action => this._legendEditorService.getUserAssets().pipe(\r\n map(assets =>\r\n LegendEditorActions.LoadUserAssetsSuccess(assets)\r\n ),\r\n catchError(error => of(LegendEditorActions.LoadUserAssetsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //Datapoints\r\n public getDataPointsByAssetIds$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LegendEditorActions.LoadAssetDataPoints),\r\n switchMap(action => this._legendEditorService.getDataPointsByAssetId(action.assetId).pipe(\r\n mergeMap(dps => [\r\n LegendEditorActions.LoadAssetDataPointsSuccess(dps)\r\n ]),\r\n catchError(error => of(LegendEditorActions.LoadAssetDataPointsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //Legends\r\n public getDataPointLegends$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LegendEditorActions.LoadDataPointLegends),\r\n // tap(action => action.dpIds.forEach(id => this.dpIds.push(id))),\r\n switchMap(action => this._dataPointService.getDatapointLegends(action.dpIds).pipe(\r\n // tap(legends => console.log('LEGENDS: ', legends)),\r\n mergeMap(legends => [\r\n LegendEditorActions.LoadDataPointLegendsSuccess(legends),\r\n LegendEditorActions.CopyDataPoints([])\r\n ]),\r\n catchError(error => of(LegendEditorActions.LoadDataPointLegendsFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","\r\nimport { ApiError, DatapointLegend, Asset, AssetDatapointSetting } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n selectedDataPointId: number;//id of datapoint selected in drawer\r\n //assets, dps and legends the user has access to copy from\r\n\r\n assetsToCopy: Asset[];\r\n isAssetsToCopyLoading: boolean;\r\n isAssetsToCopyLoaded: boolean;\r\n\r\n dataPointsToCopy: AssetDatapointSetting[];\r\n isDataPointsToCopyLoading: boolean;\r\n isDataPointsToCopyLoaded: boolean;\r\n\r\n legends: DatapointLegend[],\r\n isLegendsLoading: boolean,\r\n isLegendsLoaded: boolean,\r\n\r\n legendsToCopy: DatapointLegend[];\r\n isLegendsToCopyLoading: boolean;\r\n isLegendsToCopyLoaded: boolean;\r\n\r\n selectedLegendsToCopy: DatapointLegend[];\r\n\r\n isLegendsSaving: boolean,\r\n isLegendsSaved: boolean,\r\n\r\n isLegendsDeleting: boolean,\r\n isLegendsDeleted: boolean,\r\n\r\n isLegendsAdding: boolean,\r\n isLegendsAdded: boolean,\r\n\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n selectedDataPointId: null,\r\n\r\n assetsToCopy: null,\r\n isAssetsToCopyLoading: false,\r\n isAssetsToCopyLoaded: false,\r\n\r\n dataPointsToCopy: null,\r\n isDataPointsToCopyLoading: false,\r\n isDataPointsToCopyLoaded: false,\r\n\r\n legends: null,\r\n isLegendsLoading: false,\r\n isLegendsLoaded: false,\r\n\r\n legendsToCopy: null,\r\n isLegendsToCopyLoading: false,\r\n isLegendsToCopyLoaded: false,\r\n\r\n selectedLegendsToCopy: null,\r\n\r\n isLegendsSaving: false,\r\n isLegendsSaved: false,\r\n\r\n isLegendsDeleting: false,\r\n isLegendsDeleted: false,\r\n\r\n isLegendsAdding: false,\r\n isLegendsAdded: false,\r\n\r\n\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as AssignDataPointsFormActions from './actions';\r\n\r\nconst assignDataPointsFormReducer = createReducer(\r\n initialState,\r\n\r\n on(AssignDataPointsFormActions.StoreDataPointId, (state, payload) => ({\r\n ...state,\r\n selectedDataPointId: payload.dpId\r\n })),\r\n\r\n on(AssignDataPointsFormActions.CopyDataPoints, (state, payload) => ({\r\n ...state,\r\n selectedLegendsToCopy: payload.dataPointLegends\r\n })),\r\n\r\n // Save\r\n on(AssignDataPointsFormActions.SaveLegends, (state) => ({\r\n ...state,\r\n isLegendsSaving: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.SaveLegendsFail, (state) => ({\r\n ...state,\r\n isLegendsSaved: false,\r\n isLegendsSaving: false,\r\n error: state.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.SaveLegendsSuccess, (state) => ({\r\n ...state,\r\n isLegendsSaved: true,\r\n isLegendsSaving: false,\r\n error: null\r\n })),\r\n\r\n //Delete\r\n on(AssignDataPointsFormActions.DeleteLegend, (state) => ({\r\n ...state,\r\n isLegendsDeleting: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.DeleteLegendFail, (state) => ({\r\n ...state,\r\n isLegendsDeleted: false,\r\n isLegendsDeleting: false,\r\n error: state.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.DeleteLegendSuccess, (state) => ({\r\n ...state,\r\n isLegendsDeleted: true,\r\n isLegendsDeleting: false,\r\n error: null\r\n })),\r\n\r\n //Add\r\n on(AssignDataPointsFormActions.AddLegends, (state) => ({\r\n ...state,\r\n isLegendsAdding: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.AddLegendsFail, (state) => ({\r\n ...state,\r\n isLegendsAdded: false,\r\n isLegendsAdding: false,\r\n error: state.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.AddLegendsSuccess, (state) => ({\r\n ...state,\r\n isLegendsAdded: true,\r\n isLegendsAdding: false,\r\n error: null\r\n })),\r\n\r\n //assets to copy from\r\n on(AssignDataPointsFormActions.LoadUserAssets, (state) => ({\r\n ...state,\r\n isAssetsToCopyLoading: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadUserAssetsFail, (state) => ({\r\n ...state,\r\n isAssetsToCopyLoaded: false,\r\n isAssetsToCopyLoading: false,\r\n error: state.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadUserAssetsSuccess, (state, payload) => ({\r\n ...state,\r\n assetsToCopy: payload.assets,\r\n isAssetsToCopyLoaded: true,\r\n isAssetsToCopyLoading: false,\r\n error: null\r\n })),\r\n\r\n //datapoints to copy from\r\n on(AssignDataPointsFormActions.LoadAssetDataPoints, (state) => ({\r\n ...state,\r\n isDataPointsToCopyLoading: true\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadAssetDataPointsFail, (state) => ({\r\n ...state,\r\n isDataPointsToCopyLoaded: false,\r\n isDataPointsToCopyLoading: false,\r\n error: state.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadAssetDataPointsSuccess, (state, payload) => ({\r\n ...state,\r\n dataPointsToCopy: payload.dataPoints,\r\n isDataPointsToCopyLoaded: true,\r\n isDataPointsToCopyLoading: false,\r\n error: null\r\n })),\r\n\r\n //legends\r\n on(AssignDataPointsFormActions.LoadDataPointLegends, (state) => ({\r\n ...state,\r\n isLegendsLoading: true,\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadDataPointLegendsFail, (state) => ({\r\n ...state,\r\n isLegendsLoaded: false,\r\n isLegendsLoading: false,\r\n error: state.error\r\n })),\r\n\r\n on(AssignDataPointsFormActions.LoadDataPointLegendsSuccess, (state, payload) => ({\r\n ...state,\r\n legends: payload.legends,\r\n isLegendsLoaded: true,\r\n isLegendsLoading: false,\r\n error: null\r\n })),\r\n\r\n on(AssignDataPointsFormActions.Clear, (state) => ({\r\n ...state,\r\n legends: [],\r\n selectedLegendsToCopy: []\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return assignDataPointsFormReducer(state, action);\r\n}","import { ActivatedRoute } from '@angular/router';\r\n\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { Navigation } from '@rfv/modules/support/models';\r\n\r\nexport const CreateNavigation = createAction('[Support] Create Navigation', (unitCreationTypeId: number, route: ActivatedRoute) => ({ unitCreationTypeId, route }));\r\nexport const CreateNavigationFail = createAction('[Support] Create Navigation Fail', (error: ApiError) => ({ error }));\r\nexport const CreateNavigationSuccess = createAction('[Support] Create Navigation Success', (navigation: Navigation) => ({ navigation }));\r\n\r\nexport const LoadNavigation = createAction('[Support] Load Navigation', (unitCreationLogId: number = 0) => ({ unitCreationLogId }));\r\nexport const LoadNavigationFail = createAction('[Support] Load Navigation Fail', (error: ApiError) => ({ error }));\r\nexport const LoadNavigationSuccess = createAction('[Support] Load Navigation Success', (navigation: Navigation) => ({ navigation }));\r\n\r\nexport const SelectStep = createAction('[Support] Select Step', (stepId: number) => ({ stepId }));\r\nexport const GotoStep = createAction('[Support] Goto Step', (stepId: number) => ({ stepId }));\r\nexport const NextStep = createAction('[Support] Navigation Next');","import { createSelector } from '@ngrx/store';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.navigation);\r\n\r\nexport const getNavigation = createSelector(getState, state => state && state.navigation);\r\nexport const getAssetId = createSelector(getState, state => state && state.navigation && state.navigation.AssetId);\r\nexport const getUnitIsLocked = createSelector(getState, state => state.navigation?.IsLocked);\r\n\r\nexport const getNavigationGroups = createSelector(getNavigation, state => state && state.Groups);\r\nexport const getDeviceId = createSelector(getNavigation, state => state && state.DeviceId);\r\nexport const getAssetName = createSelector(getNavigation, state => state && state.AssetName);\r\n\r\n\r\nexport const getAllNavigationSteps = createSelector(\r\n getNavigationGroups,\r\n groups => groups.reduce((acc, group) => [...acc, ...group.Steps], [])\r\n);\r\n\r\nexport const getLastCompletedStepId = createSelector(\r\n getAllNavigationSteps,\r\n steps => {\r\n const lastCompletedStepIndex = steps.map(step => !!step.IsComplete).lastIndexOf(true);\r\n return steps[lastCompletedStepIndex].StepId;\r\n }\r\n)\r\n\r\nexport const getCurrentStepId = createSelector(getState, state => state.currentStepId);\r\n\r\nexport const getUnitCreationTypeId = createSelector(getNavigation, navigation => navigation && navigation.UnitCreationTypeId);\r\n\r\nexport const getUnitCreationType = createSelector(\r\n getUnitCreationTypeId,\r\n fromCore.Support?.UnitCreationTypes?.getEntities,\r\n (unitCreationTypeId, creationTypeEntities) =>\r\n unitCreationTypeId &&\r\n creationTypeEntities &&\r\n creationTypeEntities[unitCreationTypeId] &&\r\n creationTypeEntities[unitCreationTypeId].Name ||\r\n ''\r\n);\r\n\r\nexport const getUnitCreationLogId = createSelector(\r\n getNavigation,\r\n (navigation) => navigation && navigation.UnitCreationLogId\r\n);\r\nexport const getBrandName = createSelector(\r\n getNavigation,\r\n (navigation) => (navigation && navigation.BrandName) || ''\r\n);\r\n\r\nexport const getCurrentGroup = createSelector(\r\n getNavigation,\r\n getCurrentStepId,\r\n (navigation, currentStepId) => {\r\n if (navigation && navigation.Groups && currentStepId) {\r\n for (let i = 0; i < navigation.Groups.length; i++) {\r\n const group = navigation.Groups[i];\r\n\r\n if (group && group.Steps) {\r\n for (let j = 0; j < group.Steps.length; j++) {\r\n const step = group.Steps[j];\r\n\r\n if (step && step.StepId === currentStepId)\r\n return group;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n);\r\n\r\nexport const getCurrentStep = createSelector(\r\n getNavigation,\r\n getCurrentStepId,\r\n (navigation, currentStepId) => {\r\n if (navigation && navigation.Groups && currentStepId) {\r\n for (let i = 0; i < navigation.Groups.length; i++) {\r\n const group = navigation.Groups[i];\r\n\r\n if (group && group.Steps) {\r\n for (let j = 0; j < group.Steps.length; j++) {\r\n const step = group.Steps[j];\r\n\r\n if (step && step.StepId === currentStepId)\r\n return step;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n);\r\n\r\nexport const getNextStep = createSelector(\r\n getNavigation,\r\n getCurrentStep,\r\n (navigation, currentStep) => {\r\n // probably a better way....\r\n if (navigation && navigation.Groups && currentStep) {\r\n for (let i = 0; i < navigation.Groups.length; i++) {\r\n const group = navigation.Groups[i];\r\n\r\n if (group && group.Steps) {\r\n for (let j = 0; j < group.Steps.length; j++) {\r\n const step = group.Steps[j];\r\n\r\n if (step === currentStep) {\r\n const nextStep = group.Steps[j + 1];\r\n\r\n if (nextStep)\r\n return nextStep;\r\n\r\n const nextGroup = navigation.Groups[i + 1];\r\n\r\n if (nextGroup && nextGroup.Steps)\r\n return nextGroup.Steps[0];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n);\r\n\r\nexport const isRestartResumeDisabled = createSelector(getNavigation, state => {\r\n switch (state.OnboardingStatusId) {\r\n case 1: // new\r\n case 2: // queued\r\n case 3: // in progress\r\n case 7: // retry\r\n return true;\r\n }\r\n return false;\r\n})\r\n\r\nexport const isOnboardingVerified = createSelector(getNavigation, state => {\r\n return state.OnboardingStatusId == 6 ? true : false;\r\n});\r\n\r\nexport const isCreating = createSelector(getState, state => state.isCreating);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport {\r\n Navigation\r\n} from '@rfv/modules/support/models';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportNavigationService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getNavigation(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/navigation/${unitCreationLogId}`);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, filter, map, mergeMap, switchMap, take, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as NavigationActions from './actions';\r\nimport * as NavigationSelectors from './selectors';\r\n\r\n\r\nimport { SupportNavigationService } from '@rfv/modules/support/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store,\r\n private _navigationService: SupportNavigationService\r\n ) { }\r\n\r\n public loadNavigation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(NavigationActions.LoadNavigation),\r\n switchMap(action => this._navigationService.getNavigation(action.unitCreationLogId).pipe(\r\n map(navigation => NavigationActions.LoadNavigationSuccess(navigation)),\r\n catchError(error => of(NavigationActions.LoadNavigationFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public navigationFailed$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(NavigationActions.LoadNavigationFail),\r\n withLatestFrom(\r\n this._store.select(fromRoot.Router.getRouteParams), \r\n ),\r\n mergeMap(([action, routeParams] ) => [\r\n fromRoot.Router.Go(['dashboard', routeParams.dashboardId, 'sitemapGroup', routeParams.sitemapGroupId]),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: action.error.message,\r\n autoClose: 10000\r\n }\r\n })\r\n ])\r\n )\r\n )\r\n\r\n public gotoStep$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(NavigationActions.GotoStep),\r\n withLatestFrom(\r\n this._store.select(fromDashboard.getSelectedDashboardId),\r\n this._store.select(fromDashboard.getSelectedSitemapGroupId),\r\n this._store.select(fromDashboard.getSelectedTileId),\r\n this._store.select(NavigationSelectors.getNavigation)\r\n ),\r\n map(([action, dashboardId, sitemapGroupId, tileId, navigation]) => fromRoot.Router.Go([\r\n 'dashboard', dashboardId,\r\n 'sitemapGroup', sitemapGroupId,\r\n 'fullscreen', tileId,\r\n navigation.UnitCreationLogId, action.stepId\r\n ]))\r\n )\r\n );\r\n\r\n public nextStep$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(NavigationActions.NextStep),\r\n switchMap(action => this._store.select(NavigationSelectors.getNextStep).pipe(\r\n take(1),\r\n filter(nextStep => !!nextStep),\r\n map(nextStep => NavigationActions.GotoStep(nextStep.StepId))\r\n ))\r\n )\r\n )\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\nimport { Navigation } from '@rfv/modules/support/models';\r\n\r\nexport interface State {\r\n navigation: Navigation | null;\r\n currentStepId: number;\r\n isCreating: boolean;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n navigation: null,\r\n currentStepId: null,\r\n isCreating: false,\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as NavigationActions from './actions';\r\nimport * as UnitCreationActions from '../unit-creation/actions';\r\n\r\nconst navigationReducer = createReducer(\r\n initialState,\r\n\r\n on(NavigationActions.CreateNavigation, state => ({\r\n ...state,\r\n isCreating: true\r\n })),\r\n\r\n on(NavigationActions.CreateNavigationFail, (state, { error }) => ({\r\n ...state,\r\n isCreating: false\r\n })),\r\n\r\n on(NavigationActions.CreateNavigationSuccess, (state, { navigation }) => ({\r\n ...state,\r\n navigation,\r\n isCreating: false\r\n })),\r\n\r\n on(NavigationActions.LoadNavigation, state => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(NavigationActions.LoadNavigationFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(NavigationActions.LoadNavigationSuccess, (state, { navigation }) => ({\r\n ...state,\r\n navigation,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(NavigationActions.SelectStep, (state, { stepId }) => ({\r\n ...state,\r\n currentStepId: stepId\r\n })),\r\n\r\n on(UnitCreationActions.UpdateLockSuccess, state => ({\r\n ...state,\r\n navigation: {...state.navigation, IsLocked: false}\r\n })),\r\n\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return navigationReducer(state, action);\r\n}","import { ActionReducerMap } from '@ngrx/store';\r\nimport { State } from './state';\r\n\r\nimport * as fromNavigation from './navigation';\r\n\r\nimport * as fromUnitCreation from './unit-creation';\r\nimport * as fromDeviceInfo from './device-info';\r\nimport * as fromCommTypeInfoForm from './comms-type-info-form';\r\nimport * as fromCommsLossSettingsForm from './comms-loss-settings-form';\r\nimport * as fromAssignDataPointsForm from './assign-datapoints-form';\r\nimport * as fromServerUIConfigurationForm from './server-ui-config-form';\r\nimport * as fromHardwareConfigurationForm from './hardware-config-form';\r\nimport * as fromRuntimeForm from './runtime-form';\r\nimport * as fromUnitData from './unit-data';\r\nimport * as fromAlarmsForm from './alarms-form';\r\nimport * as fromUnitValidation from './unit-validation';\r\nimport * as fromUnitReview from './unit-review';\r\n\r\n//used in RMS assign-datapoints and PLE server-ui\r\nimport * as fromLegendEditor from './legend-editor';\r\n\r\n//used in multiple steps\r\nimport * as fromCreateFromExistingAsset from './create-from-existing-asset/reducer';\r\n\r\nexport const reducers: ActionReducerMap = {\r\n navigation: fromNavigation.reducer,\r\n\r\n unitCreation: fromUnitCreation.reducer,\r\n deviceInfo: fromDeviceInfo.reducer,\r\n commTypeInfoForm: fromCommTypeInfoForm.reducer,\r\n commsLossSettingsForm: fromCommsLossSettingsForm.reducer,\r\n assignDataPointsForm: fromAssignDataPointsForm.reducer,\r\n serverUIConfigurationForm: fromServerUIConfigurationForm.reducer,\r\n hardwareConfigurationForm: fromHardwareConfigurationForm.reducer,\r\n runtimeForm: fromRuntimeForm.reducer,\r\n unitData: fromUnitData.reducer,\r\n alarmsForm: fromAlarmsForm.reducer,\r\n unitValidation: fromUnitValidation.reducer,\r\n unitReview: fromUnitReview.reducer,\r\n legendEditor: fromLegendEditor.reducer,\r\n createFromExistingAsset: fromCreateFromExistingAsset.reducer\r\n};","import { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError, DatapointLegend } from '@rfv/modules/core/models';\r\nimport { RuntimeSettingsUnit } from '@rfv/modules/dashboard/modules/runtime-settings/models/runtime-settings-unit';\r\nimport { RuntimeSettingsTest } from '@rfv/modules/dashboard/modules/runtime-settings/models/runtime-settings-test';\r\nimport { UnitRuntime } from '../../modules/runtime-settings/models/unit-runtime.model';\r\n\r\nexport const LoadRuntimeForm = createAction('[Support] Load Runtime Form', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadRuntimeFormFail = createAction('[Support] Load Runtime Form Fail', (error: ApiError) => ({ payload: { error } }));\r\nexport const LoadRuntimeFormSuccess = createAction('[Support] Load Runtime Form Success', (runtimeForm: RuntimeSettingsUnit) => ({ payload: { runtimeForm } }));\r\n\r\nexport const SaveRuntimeForm = createAction('[Support] Save RuntimeForm', (unitCreationLogId: number, runtimeForm: UnitRuntime, next: boolean, isCreate: boolean) => ({ unitCreationLogId, runtimeForm, next, isCreate }));\r\nexport const SaveRuntimeFormFail = createAction('[Support] Save RuntimeForm Fail', (error: ApiError) => ({ error }));\r\nexport const SaveRuntimeFormSuccess = createAction('[Support] Save RuntimeForm Success');\r\n\r\nexport const selectRuntimeDatapointId = createAction('[Support] Select Runtime Datapoint', (dataPointId: number) => ({ dataPointId }));\r\nexport const selectEventDatapointId = createAction('[Support] Select Event Datapoint', (dataPointId: number) => ({ dataPointId }));\r\n\r\nexport const selectRuntimeTest = createAction('[Support] Select Runtime Test', (test: RuntimeSettingsTest) => ({ test }));\r\nexport const selectEventTest = createAction('[Support] Select Event Test', (test: RuntimeSettingsTest) => ({ test }));\r\n\r\nexport const selectRuntimeThreshold = createAction('[Support] Select Runtime Threshold', (threshold: string) => ({ threshold }));\r\nexport const selectEventThreshold = createAction('[Support] Select Event Threshold', (threshold: string) => ({ threshold }));\r\n\r\nexport const LoadRuntimeDatapointLegends = createAction('[Support] Load RuntimeDatapointLegends', (datapointId: number) => ({ datapointId }));\r\nexport const LoadRuntimeDatapointLegendsFail = createAction('[Support] Load RuntimeDatapointLegends Fail', (error: ApiError) => ({ error }));\r\nexport const LoadRuntimeDatapointLegendsSuccess = createAction('[Support] Load RuntimeDatapointLegends Success', (legends: DatapointLegend[]) => ({ legends }));\r\n\r\nexport const LoadEventDatapointLegends = createAction('[Support] Load EventDatapointLegends', (datapointId: number) => ({ datapointId }));\r\nexport const LoadEventDatapointLegendsFail = createAction('[Support] Load EventDatapointLegends Fail', (error: ApiError) => ({ error }));\r\nexport const LoadEventDatapointLegendsSuccess = createAction('[Support] Load EventDatapointLegends Success', (legends: DatapointLegend[]) => ({ legends }));","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UnitRuntime } from './../modules/runtime-settings/models/unit-runtime.model';\r\nimport { RuntimeSettingsUnit } from '@rfv/modules/dashboard/modules/runtime-settings/models/runtime-settings-unit';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportRuntimeSettings {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getRuntimeSettings(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/runtime/${unitCreationLogId}`);\r\n }\r\n\r\n public saveRuntimeSettings(unitCreationLogId: number, runtime: UnitRuntime, isCreate: boolean) {\r\n return runtime.AssetId && !isCreate\r\n ? this._http.put(`/v1/support/runtime/${unitCreationLogId}`, runtime)\r\n : this._http.post(`/v1/support/runtime/${unitCreationLogId}`, runtime);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\nimport * as RuntimeFormActions from './actions';\r\nimport { SupportRuntimeSettings } from '@rfv/modules/support/services';\r\nimport { DatapointsService } from '@rfv/modules/core/services/datapoints.service';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromNavigation from '../navigation/actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _runtimeSettingsService: SupportRuntimeSettings,\r\n private _datapointsService: DatapointsService,\r\n ) { }\r\n\r\n public loadRuntimeForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RuntimeFormActions.LoadRuntimeForm),\r\n switchMap(action => this._runtimeSettingsService.getRuntimeSettings(action.unitCreationLogId).pipe(\r\n map(runtimeForm => RuntimeFormActions.LoadRuntimeFormSuccess(runtimeForm)),\r\n catchError(error => of(RuntimeFormActions.LoadRuntimeFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveRuntimeForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RuntimeFormActions.SaveRuntimeForm),\r\n switchMap(action => this._runtimeSettingsService.saveRuntimeSettings(action.unitCreationLogId, action.runtimeForm, action.isCreate).pipe(\r\n mergeMap(runtimeForm => [\r\n RuntimeFormActions.SaveRuntimeFormSuccess(),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? fromNavigation.NextStep()\r\n : fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Runtime Settings Saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(RuntimeFormActions.SaveRuntimeFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public selectRuntimeDatapointId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RuntimeFormActions.selectRuntimeDatapointId),\r\n map(action => RuntimeFormActions.LoadRuntimeDatapointLegends(action.dataPointId))\r\n )\r\n );\r\n\r\n public selectEventDatapointId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RuntimeFormActions.selectEventDatapointId),\r\n map(action => RuntimeFormActions.LoadEventDatapointLegends(action.dataPointId))\r\n )\r\n );\r\n\r\n public loadRuntimeDatapointId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RuntimeFormActions.LoadRuntimeDatapointLegends),\r\n switchMap(action => this._datapointsService.getDatapointLegends(action.datapointId).pipe(\r\n map(datapointLegends => RuntimeFormActions.LoadRuntimeDatapointLegendsSuccess(datapointLegends)),\r\n catchError(error => of(RuntimeFormActions.LoadRuntimeDatapointLegendsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadEventDatapointId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RuntimeFormActions.LoadEventDatapointLegends),\r\n switchMap(action => this._datapointsService.getDatapointLegends(action.datapointId).pipe(\r\n map(datapointLegends => RuntimeFormActions.LoadEventDatapointLegendsSuccess(datapointLegends)),\r\n catchError(error => of(RuntimeFormActions.LoadEventDatapointLegendsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","\r\nimport { ApiError, DatapointLegend } from '@rfv/modules/core/models';\r\nimport { RuntimeSettingsUnit } from '@rfv/modules/dashboard/modules/runtime-settings/models/runtime-settings-unit';\r\n\r\nexport interface State {\r\n runtimeForm: RuntimeSettingsUnit;\r\n \r\n runtimeLegends: DatapointLegend[];\r\n eventLegends: DatapointLegend[];\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n\r\n selectedRuntimeDataPointId: number;\r\n selectedEventDataPointId: number;\r\n selectedRuntimeTestId: number;\r\n selectedEventTestId: number;\r\n selectedRuntimeThreshold: string;\r\n selectedEventThreshold: string;\r\n isRuntimeLegendsLoading: boolean;\r\n isRuntimeLegendsLoaded: boolean;\r\n RuntimeDatapointLegendsError: ApiError;\r\n isEventLegendsLoading: boolean;\r\n isEventLegendsLoaded: boolean;\r\n EventDatapointLegendsError: ApiError;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n runtimeForm: null,\r\n runtimeLegends: [],\r\n eventLegends: [],\r\n isLoading: false,\r\n isLoaded: false,\r\n\r\n selectedRuntimeDataPointId: null,\r\n selectedEventDataPointId: null,\r\n selectedEventTestId: null,\r\n selectedRuntimeTestId: null,\r\n selectedEventThreshold: null,\r\n selectedRuntimeThreshold: null,\r\n isRuntimeLegendsLoading: false,\r\n isRuntimeLegendsLoaded: false,\r\n RuntimeDatapointLegendsError: null,\r\n isEventLegendsLoading: false,\r\n isEventLegendsLoaded: false,\r\n EventDatapointLegendsError: null,\r\n\r\n error: null\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as RuntimeFormActions from './actions';\r\n\r\nconst runtimeFormReducer = createReducer(\r\n initialState,\r\n\r\n on(RuntimeFormActions.LoadRuntimeForm, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(RuntimeFormActions.LoadRuntimeFormFail, (state, { payload }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(RuntimeFormActions.LoadRuntimeFormSuccess, (state, { payload }) => ({\r\n ...state,\r\n runtimeForm: payload.runtimeForm,\r\n selectedRuntimeTestId: payload.runtimeForm.RuntimeTestId,\r\n selectedEventTestId: payload.runtimeForm.EventTestId,\r\n selectedRuntimeThreshold: payload.runtimeForm.RuntimeThreshold,\r\n selectedEventThreshold: payload.runtimeForm.EventThreshold,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(RuntimeFormActions.selectRuntimeDatapointId, (state, { dataPointId } ) => ({\r\n ...state,\r\n selectedRuntimeDataPointId: dataPointId\r\n })),\r\n\r\n on(RuntimeFormActions.selectEventDatapointId, (state, { dataPointId } ) => ({\r\n ...state,\r\n selectedEventDataPointId: dataPointId\r\n })),\r\n\r\n on(RuntimeFormActions.selectRuntimeTest, (state, { test } ) => ({\r\n ...state,\r\n selectedRuntimeTestId: test.Id\r\n })),\r\n\r\n on(RuntimeFormActions.selectEventTest, (state, { test } ) => ({\r\n ...state,\r\n selectedEventTestId: test.Id\r\n })),\r\n\r\n on(RuntimeFormActions.selectRuntimeThreshold, (state, { threshold } ) => ({\r\n ...state,\r\n selectedRuntimeThreshold: threshold\r\n })),\r\n\r\n on(RuntimeFormActions.selectEventThreshold, (state, { threshold } ) => ({\r\n ...state,\r\n selectedEventThreshold: threshold\r\n })),\r\n\r\n on(RuntimeFormActions.LoadRuntimeDatapointLegends, (state, { datapointId } ) => ({\r\n ...state,\r\n isRuntimeLegendsLoading: true\r\n })),\r\n\r\n on(RuntimeFormActions.LoadRuntimeDatapointLegendsSuccess, (state, { legends } ) => ({\r\n ...state,\r\n runtimeLegends: legends,\r\n RuntimeDatapointLegendsError: null,\r\n isRuntimeLegendsLoading: false,\r\n isRuntimeLegendsLoaded: true\r\n })),\r\n\r\n on(RuntimeFormActions.LoadRuntimeDatapointLegendsFail, (state, { error } ) => ({\r\n ...state,\r\n RuntimeDatapointLegendsError: error,\r\n isRuntimeLegendsLoading: false,\r\n isRuntimeLegendsLoaded: false\r\n })),\r\n\r\n on(RuntimeFormActions.LoadEventDatapointLegends, (state, { datapointId } ) => ({\r\n ...state,\r\n isEventLegendsLoading: true\r\n })),\r\n\r\n on(RuntimeFormActions.LoadEventDatapointLegendsSuccess, (state, { legends } ) => ({\r\n ...state,\r\n eventLegends: legends,\r\n EventDatapointLegendsError: null,\r\n isEventLegendsLoading: false,\r\n isEventLegendsLoaded: true\r\n })),\r\n\r\n on(RuntimeFormActions.LoadEventDatapointLegendsFail, (state, { error } ) => ({\r\n ...state,\r\n EventDatapointLegendsError: error,\r\n isEventLegendsLoading: false,\r\n isEventLegendsLoaded: false\r\n })),\r\n \r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return runtimeFormReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.runtimeForm);\r\n\r\nexport const getRuntimeForm = createSelector(getState, state => state.runtimeForm);\r\n\r\nexport const getDownLabel = createSelector(getRuntimeForm, state => state.DownLabel);\r\n\r\nexport const getUpLabel = createSelector(getRuntimeForm, state => state.UpLabel);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\n\r\nexport const getRuntimeDataPointLegends = createSelector(getState, state => state.runtimeLegends);\r\nexport const isRuntimeDataPointLegendsLoading = createSelector(getState, state => state.isRuntimeLegendsLoaded);\r\nexport const isRuntimeDataPointLegendsLoaded = createSelector(getState, state => state.isRuntimeLegendsLoaded);\r\nexport const getRuntimeDataPointLegendsError = createSelector(getState, state => state.RuntimeDatapointLegendsError);\r\nexport const getSelectedRuntimeDataPointId = createSelector(getState, state => state.selectedRuntimeDataPointId);\r\nexport const getSelectedRuntimeDataTestId = createSelector(getState, state => state.selectedRuntimeTestId);\r\nexport const getSelectedRuntimeThreshold = createSelector(getState, state => state.selectedRuntimeThreshold);\r\n\r\nexport const getEventDataPointLegends = createSelector(getState, state => state.eventLegends);\r\nexport const isEventDataPointLegendsLoading = createSelector(getState, state => state.isEventLegendsLoading);\r\nexport const isEventDataPointLegendsLoaded = createSelector(getState, state => state.isEventLegendsLoaded);\r\nexport const getEventDataPointLegendsError = createSelector(getState, state => state.EventDatapointLegendsError);\r\nexport const getSelectedEventDataPointId = createSelector(getState, state => state.selectedEventDataPointId);\r\nexport const getSelectedEventTestId = createSelector(getState, state => state.selectedEventTestId);\r\nexport const getSelectedEventThreshold = createSelector(getState, state => state.selectedEventThreshold);","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nexport const getFeatureState = createFeatureSelector('support');","import { state } from '@angular/animations';\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport {\r\n ServerUIConfigurationForm,\r\n VIMSConfigurableChannelCollection,\r\n VimsPushChannelsRequest,\r\n VimsDisableChannelsRequest,\r\n PLEStreamingConfigSetup,\r\n PleConfigToolTemplate,\r\n DeviceMessagesDefinitions,\r\n DeviceMessages,\r\n DeviceMessagesDefinitionDataType\r\n} from '../../modules/server-config/models';\r\n\r\nexport const LoadServerUIConfigurationForm = createAction('[Support] Load Server UI Configuration Form');\r\n\r\nexport const LoadServerUIConfigurationFormFail = createAction('[Support] Load Server UI Configuration Form Fail',\r\n (error: ApiError) => ({ payload: { error } }));\r\n\r\nexport const LoadServerUIConfigurationFormSuccess = createAction('[Support] Load Server UI Configuration Form Success',\r\n (serverUIConfigurationForm: ServerUIConfigurationForm) => ({ payload: { serverUIConfigurationForm } }));\r\n\r\n//Get PLE Templates for an asset\r\nexport const LoadPLETemplates = createAction('[Support] Load All PLE Templates',\r\n (assetId: number) => ({ assetId }));\r\n\r\nexport const LoadPLETemplatesFail = createAction('[Support] Load All PLE Templates Fail',\r\n (error: ApiError | any) => ({ error }));\r\n\r\nexport const LoadPLETemplatesSuccess = createAction('[Support] Load All PLE Templates Success',\r\n (pleTemplates: PleConfigToolTemplate[]) => ({ pleTemplates }));\r\n\r\n//Update PLE Streaming config template\r\nexport const UpdateStreamingConfigTemplate = createAction('[Support] Update PLE Streaming Config Template',\r\n (assetId: number, templateId: number, templateName: string, channels: PLEStreamingConfigSetup[]) => ({ assetId, templateId, templateName, channels}));\r\n\r\nexport const UpdateStreamingConfigTemplateFail = createAction('[Support] Update PLE Streaming Config Template Failed',\r\n (error: ApiError) => error);\r\n\r\nexport const UpdateStreamingConfigTemplateSuccess = createAction('[Support] Update PLE Streaming Config Template Success',\r\n (streamingConfigSetup: PLEStreamingConfigSetup) => streamingConfigSetup);\r\n\r\n//Save PLE Template Streaming config\r\nexport const SavePLETemplateConfigurableChannels = createAction('[Support] Save PLE Template Configurable Channels',\r\n (assetId: number, unitCreationLogId: number, templateName: string, isSetupDevice: boolean, channels: VimsPushChannelsRequest[], next: boolean) => ({ assetId, unitCreationLogId, templateName, isSetupDevice, channels, next }));\r\n\r\nexport const SavePLETemplateConfigurableChannelsBySHA1 = createAction('[Support] Save PLE Template Configurable Channels By SHA1',\r\n (sha1: string, templateName: string, templateId: number, channels: VimsPushChannelsRequest[], toDisableChannels: VimsDisableChannelsRequest[], lockedByCustomerId: boolean) => ({ sha1, templateName, templateId, channels, toDisableChannels, lockedByCustomerId }));\r\n\r\nexport const SavePLETemplateConfigurableChannelsFail = createAction('[Support] Save PLE Template Configurable Channels Failed',\r\n (error: ApiError) => error);\r\n\r\nexport const SavePLETemplateConfigurableChannelsSuccess = createAction(\"[Support] Save PLE Template Configurable Channels Success\",\r\n (streamingConfigSetup: PLEStreamingConfigSetup) => streamingConfigSetup);\r\n\r\nexport const SaveConfigurableChannelsSuccessSHA1 = createAction('[Support] Save PLE by SHA1 Template Configurable Channels Success',\r\n (sha1: string, templateId: number) => ({ sha1, templateId }));\r\n\r\n//Get All configurable channels\r\nexport const LoadConfigurableChannels = createAction('[Support] Load All Configurable Channels',\r\n (unitCreationLogId: number) => ({ unitCreationLogId }));\r\n\r\nexport const LoadConfigurableChannelsBySHA1 = createAction('[Support] Load All Configurable Channels by SHA1',\r\n (sha1: string, templateId: number) => ({ sha1, templateId }));\r\n\r\nexport const LoadConfigurableChannelsFail = createAction('[Support] Load All Configurable Channels Fail',\r\n (error: ApiError | any) => ({ error }));\r\n\r\nexport const LoadConfigurableChannelsSuccess = createAction('[Support] Load All Configurable Channels Success',\r\n (configurableChannels: VIMSConfigurableChannelCollection) => ({ configurableChannels }));\r\n\r\nexport const SaveConfigurableChannels = createAction('[Support] Save Configurable Channels',\r\n (unitCreationLogId: number, templateName: string, isSetupDevice: boolean, channels: VimsPushChannelsRequest[], next: boolean) => ({ unitCreationLogId, templateName, isSetupDevice, channels, next }));\r\n\r\nexport const SaveConfigurableChannelsFail = createAction('[Support] Save Configurable Channels Failed',\r\n (error: ApiError) => error);\r\n\r\nexport const SaveConfigurableChannelsSuccess = createAction(\"[Support] Save Configurable Channels Success\",\r\n (streamingConfigSetup: PLEStreamingConfigSetup) => streamingConfigSetup);\r\n\r\nexport const PollStreamingStatus = createAction('[Support] Poll Streaming Status',\r\n (unitCreationLogId: number, next: boolean = false, attempt: number = 0) => ({ unitCreationLogId, next, attempt }));\r\n\r\nexport const StopPollStreamingStatus = createAction('[Support] Stop Poll Streaming Status');\r\n\r\nexport const LoadCurrentStatusFail = createAction('[Support] Load Streaming Status Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const CancelCommand = createAction('[Support] Cancel Streaming Command');\r\n\r\nexport const ClearUpdatedTemplateId = createAction(\"[Support] Clear Updated Template Id\");\r\n\r\n\r\n//RMS\r\nexport const LoadDeviceMessagesDefinitionDataTypes = createAction('[Support] Load Device Messages Definition Data Types');\r\nexport const LoadDeviceMessagesDefinitionDataTypesFail = createAction('[Support] Load Device Messages Definition Data Types Fail',\r\n (error: ApiError) => ({ error }));\r\nexport const LoadDeviceMessagesDefinitionDataTypesSuccess = createAction('[Support] Load Device Messages Definition Data Types Success',\r\n (dataTypes: DeviceMessagesDefinitionDataType[]) => ({ dataTypes }));\r\n\r\nexport const LoadDeviceMessagesDefinitions = createAction('[Support] Load Server UI Device Messages Definitions',\r\n (deviceId: number) => ({ deviceId }));\r\n\r\nexport const LoadDeviceMessagesDefinitionsFail = createAction('[Support] Load Server UI Device Messages Definitions Fail',\r\n (error: ApiError) => ({error}));\r\n\r\nexport const LoadDeviceMessagesDefinitionsSuccess = createAction('[Support] Load Server UI Device Messages Definitions Success',\r\n (deviceMessagesDefinitions: DeviceMessagesDefinitions[]) => ({ deviceMessagesDefinitions }));\r\n\r\nexport const LoadDeviceMessages = createAction('[Support] Load Server UI Device Messages',\r\n (deviceId: number) => ({ deviceId }));\r\n\r\nexport const LoadDeviceMessagesFail = createAction('[Support] Load Server UI Device Messages Fail',\r\n (error: ApiError) => (error));\r\n\r\nexport const LoadDeviceMessagesSuccess = createAction('[Support] Load Server UI Device Messages Success',\r\n (DeviceMessages: DeviceMessages[]) => ({ DeviceMessages }));\r\n\r\nexport const SaveDeviceDataPointDefinition = createAction('[Support] Save Server UI Device Message Definitions',\r\n (DeviceMessagesDefinition: DeviceMessagesDefinitions, unitCreationLogId: number) => ({ DeviceMessagesDefinition, unitCreationLogId }));\r\n\r\nexport const SaveDeviceDataPointDefinitionFail = createAction('[Support] Save Server UI Device Messages Definitions Fail',\r\n (error: ApiError) => (error));\r\n\r\nexport const SaveDeviceDataPointDefinitionSuccess = createAction('[Support] Save Server UI Device Messages Definitions Success',\r\n (result: any) => (result));\r\n\r\nexport const UpdateAllDeviceDataPointDefinitions = createAction('[Support] Update Device Messages Definitions',\r\n (DeviceMessagesDefinitions: DeviceMessagesDefinitions[], unitCreationLogId: number, next: boolean = false) => ({ DeviceMessagesDefinitions, unitCreationLogId, next }));\r\n\r\nexport const UpdateAllDeviceDataPointDefinitionsFail = createAction('[Support] Update Device Messages Definitions Fail',\r\n (error: ApiError) => (error));\r\n\r\nexport const UpdateAllDeviceDataPointDefinitionsSuccess = createAction('[Support] Update Device Messages Definitions Success',\r\n (result: any[]) => ({ result }));\r\n\r\nexport const RemoveDeviceDataPointDefinition = createAction('[Support] Remove Server UI Device Message Definitions',\r\n (DeviceMessagesDefinitions: DeviceMessagesDefinitions) => ({ DeviceMessagesDefinitions }));\r\n\r\nexport const RemoveDeviceDataPointDefinitionFail = createAction('[Support] Remove Server UI Device Message Definitions Fail',\r\n (error: ApiError) => (error));\r\n\r\nexport const RemoveDeviceDataPointDefinitionSuccess = createAction('[Support] Remove Server UI Device Message Definitions Success');\r\n\r\n\r\n","/* NgRx */\r\n//import { unitAlarmsActions } from '../actions';\r\n\r\n/* Models */\r\nimport { BannerOptions } from '@rfv/modules/shared/model/banner.model';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\n\r\n/*\r\n * Functions with messages and actions to send as payload to banner\r\n */\r\n\r\n// Banner after successful operation (save, edit, delete)\r\nexport function successMessage(message: string): BannerOptions {\r\n return {\r\n type: 'success',\r\n message: `${message}.`,\r\n autoClose: 3000\r\n };\r\n}\r\n\r\n// Banner after failed operation (save, edit, delete)\r\nexport function failMessage(message: string, error: any): BannerOptions {\r\n return {\r\n type: 'error',\r\n message: `${message} Error: ${error.StatusCode}: ${error.Response}`,\r\n };\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { tap } from 'rxjs/operators';\r\n\r\nimport {\r\n ServerUIConfigurationForm,\r\n VimsPushChannelsRequest,\r\n PLEStreamingConfigSetup,\r\n PleConfigToolTemplate,\r\n VIMSConfigurableChannelCollection,\r\n DeviceMessagesDefinitions,\r\n DeviceMessagesDefinitionDataType,\r\n DeviceMessages,\r\n VimsDisableChannelsRequest\r\n} from './../modules/server-config/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportServerConfigService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getServerConfigPleForm() {\r\n return this._http.get(`/v1/support/server-config/ple/form`);\r\n }\r\n\r\n public getServerConfigPleChannels(unitCreationLogId: number) {\r\n const start = new Date();\r\n\r\n return this._http.get(`/v1/support/server-config/ple/${unitCreationLogId}/channels2`).pipe(\r\n tap(result => {\r\n const end = new Date();\r\n const elapsed = end.getTime() - start.getTime();\r\n //console.log(`Call to /v1/support/server-config/ple/${unitCreationLogId}/channels took ${elapsed}ms.`, result);\r\n })\r\n );\r\n }\r\n\r\n public getServerConfigPleChannelsBySHA1(sha1: string, templateId: number) {\r\n const start = new Date();\r\n return this._http.get(`/v1/support/server-config/ple/${sha1}/channels?templateId=${templateId}`).pipe(\r\n tap(result => {\r\n const end = new Date();\r\n const elapsed = end.getTime() - start.getTime();\r\n //console.log(`Call to /v1/support/server-config/ple/${unitCreationLogId}/channels took ${elapsed}ms.`, result);\r\n })\r\n );\r\n }\r\n\r\n public saveServerConfigPleChannels(unitCreationLogId: number, templateName: string, isSetupDevice: boolean, channels: VimsPushChannelsRequest[]) {\r\n return this._http.post(`/v1/support/server-config/ple/${unitCreationLogId}/channels2?templateName=${templateName}&isSetupDevice=${isSetupDevice}`, channels);\r\n }\r\n\r\n public saveServerConfigPleChannelsBySHA1(sha1: string, templateName: string, templateId: number, channels: VimsPushChannelsRequest[], toDisableChannels: VimsDisableChannelsRequest[], lockedByCustomerId: boolean) {\r\n return this._http.post(`/v1/support/server-config/ple/${sha1}/channels?templateName=${templateName}&templateId=${templateId}`, { channels: channels, toDisableChannels: toDisableChannels, lockedByCustomerId: lockedByCustomerId });\r\n }\r\n\r\n public getDeviceMessagesDefinitionDataTypes() {\r\n return this._http.get(`/v1/support/server-config/rms/deviceMessageDefinitionDataTypes`);\r\n }\r\n\r\n public getDeviceMessagesDefinitions(deviceId: number) {\r\n return this._http.get(`/v1/support/server-config/rms/${deviceId}/deviceMessagesDefinitions`);\r\n }\r\n\r\n public getDeviceMessages(deviceId: number) {\r\n return this._http.get(`/v1/support/server-config/rms/${deviceId}/deviceMessages`);\r\n }\r\n\r\n public SaveDeviceDataPointDefinition(message: DeviceMessagesDefinitions, unitCreationLogId: number) {\r\n return this._http.put(`/v1/support/server-config/rms/deviceMessage`, message, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString()\r\n }\r\n });\r\n }\r\n\r\n public UpdateAllDeviceDataPointDefinitions(messages: DeviceMessagesDefinitions[], unitCreationLogId: number) {\r\n return this._http.put(`/v1/support/server-config/rms/deviceMessages`, messages, {\r\n params: {\r\n unitCreationLogId: unitCreationLogId.toString()\r\n }\r\n });\r\n }\r\n\r\n public RemoveDeviceDataPointDefinition(message: DeviceMessagesDefinitions) {\r\n return this._http.delete(`/v1/support/server-config/rms/${message.deviceId}/deviceMessages`, {\r\n params: {\r\n msgId: message.msgId.toString(),\r\n dataPointId: message.datapointId.toString(),\r\n }\r\n });\r\n }\r\n\r\n public getServerConfigPleTemplates(assetId: number) {\r\n return this._http.get(`/v1/support/server-config/ple/${assetId}/templates`);\r\n }\r\n\r\n // public getServerConfigPleTemplateItems(templateId: number) {\r\n // return this._http.get(`/v1/support/server-config/ple/templateItems/${templateId}`);\r\n // }\r\n\r\n public updateStreamingConfigTemplate(assetId: number, templateId: number, templateName: string, channels: PLEStreamingConfigSetup[]) {\r\n return this._http.put(`/v1/support/server-config/ple/${assetId}/template/${templateId}?templateName=${templateName}`, channels);\r\n }\r\n}\r\n","import { StreamingTemplateService } from '@rfv/modules/core/services/streaming-template.service';\r\nimport { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of, from, Subject, interval } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap, tap, takeUntil, filter, debounceTime } from 'rxjs/operators';\r\n\r\nimport * as ServerUIConfigurationFormActions from './actions';\r\nimport { SupportServerConfigService, SupportHardwareConfigService } from '@rfv/modules/support/services';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\n\r\nimport * as supportModal from '@rfv/modules/support/store/support-modal-messages';\r\nimport { successMessage, failMessage } from '@rfv/modules/support/modules/server-config/utils/ple-banner-messages';\r\n\r\nimport * as NavigationActions from '../navigation/actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _serverConfigService: SupportServerConfigService,\r\n private _hardwareConfigService: SupportHardwareConfigService,\r\n private _streamingTemplateService: StreamingTemplateService,\r\n ) { }\r\n\r\n private _maxAttempts = 60; // n * 10 seconds\r\n private _timer$ = new Subject();\r\n\r\n public getServerUIConfigurationForm$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadServerUIConfigurationForm),\r\n switchMap(action => this._serverConfigService.getServerConfigPleForm().pipe(\r\n map(ServerUIConfigurationForm => ServerUIConfigurationFormActions.LoadServerUIConfigurationFormSuccess(ServerUIConfigurationForm)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadServerUIConfigurationFormFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadPLETemplates$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadPLETemplates),\r\n switchMap(action => this._streamingTemplateService.getAll().pipe(\r\n map(pleTemplates => ServerUIConfigurationFormActions.LoadPLETemplatesSuccess(pleTemplates)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadPLETemplatesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n //Update PLE Template\r\n public updateStreamingConfigTemplate$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.UpdateStreamingConfigTemplate),\r\n switchMap(action => this._serverConfigService.updateStreamingConfigTemplate(action.assetId, action.templateId, action.templateName, action.channels).pipe(\r\n mergeMap(channels => [\r\n ServerUIConfigurationFormActions.UpdateStreamingConfigTemplateSuccess(channels),\r\n ]),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.SaveConfigurableChannelsFail(error)\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n //Save PLE Template\r\n public savePLETemplateConfigurableChannels$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.SavePLETemplateConfigurableChannels),\r\n switchMap(action => this._serverConfigService.saveServerConfigPleChannels(action.unitCreationLogId, action.templateName, action.isSetupDevice, action.channels).pipe(\r\n mergeMap(channels => [\r\n ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccess(channels),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n ServerUIConfigurationFormActions.PollStreamingStatus(action.unitCreationLogId, action.next),\r\n fromRoot.Banner.Show({ options: successMessage(`\"${action.templateName}\" template saved.`) }),\r\n ServerUIConfigurationFormActions.LoadPLETemplates(action.assetId)\r\n ]),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.SavePLETemplateConfigurableChannelsFail(error),\r\n fromRoot.Banner.Show({ options: failMessage(`\"${action.templateName}\" template save failed. `, error) })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public savePLETemplateConfigurableChannelsBySHA1$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.SavePLETemplateConfigurableChannelsBySHA1),\r\n switchMap(action => this._serverConfigService.saveServerConfigPleChannelsBySHA1(action.sha1, action.templateName, action.templateId, action.channels, action.toDisableChannels, action.lockedByCustomerId).pipe(\r\n mergeMap(templateId => [\r\n ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccessSHA1(action.sha1, templateId),\r\n fromRoot.Banner.Show({ options: successMessage(`\"${action.templateName}\" template saved`) }),\r\n ]),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.SavePLETemplateConfigurableChannelsFail(error),\r\n error.message ?\r\n fromRoot.Modal.Open({\r\n options: {\r\n modalType: fromRoot.Modal.ModalType.Ok,\r\n contentType: fromRoot.Modal.ModalContentType.TextLeft,\r\n title: `Streaming Config Template Save Failed`,\r\n data: error.message,\r\n primaryText: 'Ok'\r\n }\r\n }) : fromRoot.Banner.Show({ options: failMessage(`\"${action.templateName}\" template save failed`, error) })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public SaveConfigurableChannelsSuccessSHA1$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccessSHA1),\r\n mergeMap(action => [\r\n fromSupport.ServerUIConfigurationForm.LoadConfigurableChannelsBySHA1(action.sha1, action.templateId),\r\n fromCore.StreamingTemplates.Load(),\r\n ])\r\n )\r\n )\r\n\r\n\r\n //LoadConfigurableChannels\r\n public loadConfigurableChannels$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadConfigurableChannels),\r\n switchMap(action => this._serverConfigService.getServerConfigPleChannels(action.unitCreationLogId).pipe(\r\n map(LoadConfigurableChannels => ServerUIConfigurationFormActions.LoadConfigurableChannelsSuccess(LoadConfigurableChannels)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadConfigurableChannelsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public LoadConfigurableChannelsBySHA1 = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadConfigurableChannelsBySHA1),\r\n switchMap(action => this._serverConfigService.getServerConfigPleChannelsBySHA1(action.sha1, action.templateId).pipe(\r\n map(LoadConfigurableChannels => ServerUIConfigurationFormActions.LoadConfigurableChannelsSuccess(LoadConfigurableChannels)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadConfigurableChannelsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public LoadConfigurableChannelsFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadConfigurableChannelsFail),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: action?.error?.Message,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public saveConfigurableChannels$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.SaveConfigurableChannels),\r\n switchMap(action => this._serverConfigService.saveServerConfigPleChannels(action.unitCreationLogId, action.templateName, action.isSetupDevice, action.channels).pipe(\r\n mergeMap(channels => {\r\n if (action.next) {\r\n //Save & Continue\r\n return [\r\n ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccess(channels),\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n ServerUIConfigurationFormActions.PollStreamingStatus(action.unitCreationLogId, action.next),\r\n ]\r\n }\r\n else {\r\n //Save\r\n return [\r\n ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccess(channels),\r\n ServerUIConfigurationFormActions.PollStreamingStatus(action.unitCreationLogId, action.next),\r\n ]\r\n }\r\n }),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.SaveConfigurableChannelsFail(error),\r\n fromRoot.Modal.Open({ options: supportModal.sendStreamingFail(action.unitCreationLogId, action.templateName, action.isSetupDevice, error && error.Response, action.channels, action.next) })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public openModalForSendingConfig$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.SaveConfigurableChannels),\r\n map(() =>\r\n fromRoot.Modal.Open({ options: supportModal.sendDeviceConfiguration('streaming') })\r\n ),\r\n )\r\n );\r\n\r\n public startTimer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.PollStreamingStatus),\r\n debounceTime(10000),\r\n switchMap(action => this._hardwareConfigService.getPleHardwareConfigStatus(action.unitCreationLogId).pipe(//check status\r\n takeUntil(this._timer$),\r\n mergeMap(status => {\r\n\r\n if (status && status.StreamingConfig) {\r\n switch (status.StreamingConfig.StatusTypeId) {\r\n case 84:\r\n case 115:\r\n case 117:\r\n return [\r\n ServerUIConfigurationFormActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.Status84('streaming', action.next ? NavigationActions.NextStep() : null) })\r\n ];\r\n }\r\n }\r\n\r\n if (action.attempt >= this._maxAttempts - 1) {\r\n return [\r\n ServerUIConfigurationFormActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.LongerThanExpected('streaming') })\r\n ];\r\n }\r\n\r\n return [\r\n ServerUIConfigurationFormActions.PollStreamingStatus(action.unitCreationLogId, action.next, action.attempt + 1)\r\n ];\r\n }),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.LoadCurrentStatusFail(error)\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public pollingModal$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.PollStreamingStatus),\r\n filter(action => action.attempt === 0),\r\n switchMap(action => interval(1000).pipe(\r\n takeUntil(this._timer$),\r\n map(value => fromRoot.Modal.Open({ options: supportModal.CheckingStatus('streaming', (this._maxAttempts * 10) - value, ServerUIConfigurationFormActions.CancelCommand()) }))\r\n ))\r\n )\r\n );\r\n\r\n public stopTimer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.StopPollStreamingStatus),\r\n tap(() => this._timer$.next())\r\n ), { dispatch: false }\r\n );\r\n\r\n public cancelCommand$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.CancelCommand),\r\n mergeMap(action => [\r\n ServerUIConfigurationFormActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Close()\r\n ])\r\n )\r\n );\r\n\r\n //rms\r\n\r\n public loadDeviceMessagesDefinitionDataTypes$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionDataTypes),\r\n switchMap(action => this._serverConfigService.getDeviceMessagesDefinitionDataTypes().pipe(\r\n map(dataTypes => ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionDataTypesSuccess(dataTypes)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionsFail(error)))\r\n ))\r\n )\r\n )\r\n\r\n public loadDeviceMessagesDefinitions$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitions),\r\n switchMap(action => this._serverConfigService.getDeviceMessagesDefinitions(action.deviceId).pipe(\r\n map(message => ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionsSuccess(message)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionsFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public loadDeviceMessages$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.LoadDeviceMessages),\r\n switchMap(action => this._serverConfigService.getDeviceMessages(action.deviceId).pipe(\r\n map(message => ServerUIConfigurationFormActions.LoadDeviceMessagesSuccess(message)),\r\n catchError(error => of(ServerUIConfigurationFormActions.LoadDeviceMessagesFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveDeviceMessagesDefinitions$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.SaveDeviceDataPointDefinition),\r\n switchMap(action => this._serverConfigService.SaveDeviceDataPointDefinition(action.DeviceMessagesDefinition, action.unitCreationLogId).pipe(\r\n mergeMap(result => [\r\n ServerUIConfigurationFormActions.SaveDeviceDataPointDefinitionSuccess(result),\r\n ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitions(action.DeviceMessagesDefinition.deviceId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Save Successful',\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.SaveDeviceDataPointDefinitionFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public updateAllDeviceMessagesDefinitions$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.UpdateAllDeviceDataPointDefinitions),\r\n switchMap(action => this._serverConfigService.UpdateAllDeviceDataPointDefinitions(action.DeviceMessagesDefinitions, action.unitCreationLogId).pipe(\r\n mergeMap(result => [\r\n ServerUIConfigurationFormActions.UpdateAllDeviceDataPointDefinitionsSuccess(result),\r\n ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitions(action.DeviceMessagesDefinitions[0].deviceId),\r\n ...(() => action.next ? [\r\n NavigationActions.LoadNavigation(action.unitCreationLogId),\r\n NavigationActions.NextStep()\r\n ] : [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Save Successful',\r\n autoClose: 3000\r\n }\r\n })\r\n ])()\r\n ]),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.UpdateAllDeviceDataPointDefinitionsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public removeDeviceMessagesDefinitions$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ServerUIConfigurationFormActions.RemoveDeviceDataPointDefinition),\r\n switchMap(action => this._serverConfigService.RemoveDeviceDataPointDefinition(action.DeviceMessagesDefinitions).pipe(\r\n mergeMap(() => [\r\n ServerUIConfigurationFormActions.RemoveDeviceDataPointDefinitionSuccess(),\r\n ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitions(action.DeviceMessagesDefinitions.deviceId),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Remove Successful',\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n ServerUIConfigurationFormActions.RemoveDeviceDataPointDefinitionFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\nimport { ServerUIConfigurationForm, VIMSConfigurableChannelCollection, PLEStreamingConfigSetup, MessageTypes, DeviceMessagesDefinitions, DeviceMessages, DeviceMessagesDefinitionDataType, PleConfigToolTemplate } from '../../modules/server-config/models';\r\n\r\nexport interface State {\r\n serverUIConfigurationForm: ServerUIConfigurationForm | null;\r\n\r\n // ple\r\n configurableChannels: VIMSConfigurableChannelCollection | null;\r\n PLESetup: PLEStreamingConfigSetup | null;\r\n pleTemplates: PleConfigToolTemplate[] | null;\r\n isChannelsLoading: boolean;\r\n isChannelsLoaded: boolean;\r\n channelsError: ApiError | any | null;\r\n updatedTemplateId: number;\r\n isTemplatesLoading: boolean;\r\n isTemplatesLoaded: boolean;\r\n\r\n // rms\r\n deviceMessagesDefinitionDataTypes: DeviceMessagesDefinitionDataType[];\r\n isLoadingDeviceMessagesDefinitionDataTypes: boolean;\r\n\r\n deviceMessagesDefinitions: DeviceMessagesDefinitions[] | null;\r\n isLoadingDeviceMessagesDefinitions: boolean;\r\n\r\n deviceMessages: DeviceMessages[] | null,\r\n isLoadingDeviceMessages: boolean;\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n\r\n error: ApiError | null;\r\n isSaving: boolean;\r\n isUpdating: boolean;\r\n isDeleting: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n serverUIConfigurationForm: null,\r\n\r\n // ple\r\n configurableChannels: null,\r\n PLESetup: null,\r\n pleTemplates: null,\r\n isChannelsLoading: false,\r\n isChannelsLoaded: false,\r\n channelsError: null,\r\n updatedTemplateId: null,\r\n isTemplatesLoading: false,\r\n isTemplatesLoaded: false,\r\n\r\n // rms\r\n deviceMessagesDefinitionDataTypes: [],\r\n isLoadingDeviceMessagesDefinitionDataTypes: false,\r\n\r\n deviceMessages: null,\r\n isLoadingDeviceMessages: false,\r\n\r\n deviceMessagesDefinitions: null,\r\n isLoadingDeviceMessagesDefinitions: false,\r\n\r\n isLoading: false,\r\n isLoaded: false,\r\n\r\n error: null,\r\n isSaving: false,\r\n isUpdating: false,\r\n isDeleting: false\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as ServerUIConfigurationFormActions from './actions';\r\n\r\nconst serverUIConfigurationFormReducer = createReducer(\r\n initialState,\r\n\r\n on(ServerUIConfigurationFormActions.LoadServerUIConfigurationForm, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadServerUIConfigurationFormFail, (state, { payload }) => ({\r\n ...state,\r\n isChannelsLoaded: false,\r\n isChannelsLoading: false,\r\n error: payload.error\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadServerUIConfigurationFormSuccess, (state, { payload }) => ({\r\n ...state,\r\n serverUIConfigurationForm: payload.serverUIConfigurationForm,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n //Load PLE Templates\r\n on(ServerUIConfigurationFormActions.LoadPLETemplates, (state) => ({\r\n ...state,\r\n isTemplatesLoading: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadPLETemplatesFail, (state, { error }) => ({\r\n ...state,\r\n isTemplatesLoaded: false,\r\n isTemplatesLoading: false,\r\n templatesError: error\r\n })),\r\n\r\n\r\n on(ServerUIConfigurationFormActions.LoadPLETemplatesSuccess, (state, { pleTemplates }) => ({\r\n ...state,\r\n pleTemplates: pleTemplates,\r\n isTemplatesLoaded: true,\r\n isTemplatesLoading: false,\r\n templatesError: null\r\n })),\r\n\r\n //Update PLE streaming config template\r\n on(ServerUIConfigurationFormActions.UpdateStreamingConfigTemplate, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.UpdateStreamingConfigTemplateSuccess, (state, streamingConfigSetup) => ({\r\n ...state,\r\n PLESetup: streamingConfigSetup,\r\n isUpdating: false\r\n\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.UpdateStreamingConfigTemplateFail, (state, error) => ({\r\n ...state,\r\n error: error,\r\n isUpdating: false\r\n })),\r\n\r\n //Load Configurable channels\r\n on(ServerUIConfigurationFormActions.LoadConfigurableChannels, (state) => ({\r\n ...state,\r\n isChannelsLoading: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadConfigurableChannelsBySHA1, (state) => ({\r\n ...state,\r\n isChannelsLoading: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadConfigurableChannelsFail, (state, { error }) => ({\r\n ...state,\r\n configurableChannels: null,\r\n isChannelsLoaded: false,\r\n isChannelsLoading: false,\r\n channelsError: error\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadConfigurableChannelsSuccess, (state, { configurableChannels }) => ({\r\n ...state,\r\n configurableChannels: configurableChannels,\r\n isChannelsLoaded: true,\r\n isChannelsLoading: false,\r\n channelsError: null\r\n })),\r\n\r\n //Save Configurable channels\r\n on(ServerUIConfigurationFormActions.SaveConfigurableChannels, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SavePLETemplateConfigurableChannelsBySHA1, (state) => ({\r\n ...state,\r\n isUpdating: true,\r\n isChannelsLoading: true,\r\n isChannelsLoaded: false\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccess, (state, streamingConfigSetup) => ({\r\n ...state,\r\n PLESetup: streamingConfigSetup,\r\n isUpdating: false,\r\n isChannelsLoading: false,\r\n isChannelsLoaded: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SaveConfigurableChannelsSuccessSHA1, (state, { templateId }) => ({\r\n ...state,\r\n updatedTemplateId: templateId,\r\n isUpdating: false,\r\n isChannelsLoading: false,\r\n isChannelsLoaded: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SavePLETemplateConfigurableChannelsFail, (state) => ({\r\n ...state,\r\n isUpdating: false,\r\n isChannelsLoading: false,\r\n isChannelsLoaded: false\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SaveConfigurableChannelsFail, (state, error) => ({\r\n ...state,\r\n error: error,\r\n isUpdating: false,\r\n isChannelsLoading: false,\r\n isChannelsLoaded: false\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.ClearUpdatedTemplateId, state => ({\r\n ...initialState,\r\n })),\r\n\r\n //rms\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionDataTypes, state => ({\r\n ...state,\r\n isLoadingDeviceMessagesDefinitionDataTypes: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionDataTypesFail, (state, { error }) => ({\r\n ...state,\r\n isLoadingDeviceMessagesDefinitionDataTypes: false\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionDataTypesSuccess, (state, { dataTypes }) => ({\r\n ...state,\r\n isLoadingDeviceMessagesDefinitionDataTypes: false,\r\n deviceMessagesDefinitionDataTypes: dataTypes\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitions, (state) => ({\r\n ...state,\r\n isLoadingDeviceMessagesDefinitions: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionsSuccess, (state, { deviceMessagesDefinitions }) => ({\r\n ...state,\r\n isLoadingDeviceMessagesDefinitions: false,\r\n deviceMessagesDefinitions: deviceMessagesDefinitions\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesDefinitionsFail, (state, { error }) => ({\r\n ...state,\r\n error: error,\r\n isLoadingDeviceMessagesDefinitions: false\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessages, (state) => ({\r\n ...state,\r\n isLoadingDeviceMessages: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesSuccess, (state, { DeviceMessages }) => ({\r\n ...state,\r\n isLoadingDeviceMessages: false,\r\n deviceMessages: DeviceMessages\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.LoadDeviceMessagesFail, (state, error) => ({\r\n ...state,\r\n error: error,\r\n isLoadingDeviceMessages: false\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SaveDeviceDataPointDefinition, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SaveDeviceDataPointDefinitionSuccess, (state) => ({\r\n ...state,\r\n isUpdating: false,\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.SaveDeviceDataPointDefinitionFail, (state, error) => ({\r\n ...state,\r\n error: error,\r\n isUpdating: false,\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.UpdateAllDeviceDataPointDefinitions, (state) => ({\r\n ...state,\r\n isUpdating: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.UpdateAllDeviceDataPointDefinitionsSuccess, (state) => ({\r\n ...state,\r\n isUpdating: false,\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.UpdateAllDeviceDataPointDefinitionsFail, (state, error) => ({\r\n ...state,\r\n error: error,\r\n isUpdating: false,\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.RemoveDeviceDataPointDefinition, (state) => ({\r\n ...state,\r\n isDeleting: true\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.RemoveDeviceDataPointDefinitionSuccess, (state) => ({\r\n ...state,\r\n isDeleting: false,\r\n })),\r\n\r\n on(ServerUIConfigurationFormActions.RemoveDeviceDataPointDefinitionFail, (state, error) => ({\r\n ...state,\r\n error: error,\r\n isDeleting: false,\r\n })),\r\n\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return serverUIConfigurationFormReducer(state, action);\r\n}\r\n","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.serverUIConfigurationForm);\r\n\r\n\r\nexport const getServerUIConfigurationForm = createSelector(getState, state => state.serverUIConfigurationForm);\r\n\r\nexport const getConfigurableChannels = createSelector(getState, state => state.configurableChannels);\r\n\r\nexport const getPLETemplates = createSelector(getState, state => state.pleTemplates);\r\n\r\n//export const getPLETemplateItems = createSelector(getState, state => state.pleTemplateItems);\r\n\r\nexport const getConfigParameters = createSelector(getConfigurableChannels, state => state && state.ConfigParameters);\r\n\r\nexport const getUpdatedTemplateID = createSelector(getState, state => state.updatedTemplateId);\r\n\r\nexport const getStreamingCommunicationDatas = createSelector(getServerUIConfigurationForm, state => state && state.StreamingCommunicationsDatas);\r\n\r\nexport const getFilteredCommunicationDatas = createSelector(getServerUIConfigurationForm, state =>\r\n state && state.StreamingCommunicationsDatas.filter(v => v.CommunicationMethodId !== 99999));\r\n\r\nexport const getStreamingIntervals = createSelector(getServerUIConfigurationForm, state => state && state.StreamingIntervals);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isUpdating = createSelector(getState, state => state.isUpdating);\r\nexport const isDeleting = createSelector(getState, state => state.isDeleting);\r\n\r\nexport const getDeviceMessagesDefinitionDataTypes = createSelector(getState, state => state && state.deviceMessagesDefinitionDataTypes);\r\nexport const isLoadingDeviceMessagesDefinitionDataTypes = createSelector(getState, state => state && state.isLoadingDeviceMessagesDefinitionDataTypes);\r\n\r\nexport const getDeviceMessages = createSelector(getState, state => state && state.deviceMessages);\r\nexport const isLoadingDeviceMessages = createSelector(getState, state => state.isLoadingDeviceMessages);\r\n\r\nexport const getDeviceMessagesDefinitions = createSelector(getState, state => state && state.deviceMessagesDefinitions);\r\nexport const isLoadingDeviceMessagesDefinitions = createSelector(getState, state => state.isLoadingDeviceMessagesDefinitions);\r\n\r\nexport const isChannelsLoading = createSelector(getState, state => state.isChannelsLoading);\r\nexport const isChannelsLoaded = createSelector(getState, state => state.isChannelsLoaded);\r\n\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const getChannelsError = createSelector(getState, state => state.channelsError);\r\n\r\nexport const isPLELoading = createSelector(getState, state => state.isChannelsLoading || state.isTemplatesLoading);\r\nexport const isPLELoaded = createSelector(getState, state => state.isChannelsLoaded && state.isTemplatesLoaded);","/* Models */\r\nimport { Action } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store/modal';\r\nimport * as hardwareAction from '@rfv/modules/support/store/hardware-config-form/actions';\r\nimport * as serverAction from '@rfv/modules/support/store/server-ui-config-form/actions';\r\nimport { IDPOTASetting } from '../modules/hardware-config/models';\r\nimport { OnboardingQueue } from '@rfv/modules/core/store';\r\n\r\n//Modal with option to send device configuration or cancel\r\nexport function sendDeviceConfigurationYesNo(unitCreationLogId: number, env: string, sha1: string, assetId: number): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('vims'),\r\n data: `Do you really want to push '${sha1}' to this device?`,\r\n primaryText: 'Send',\r\n primaryAction: hardwareAction.PushVimsConfig(unitCreationLogId, env, sha1, assetId),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal to send device configuration\r\nexport function sendDeviceConfiguration(kind: 'vims' | 'streaming'| 'demandPoll'): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.NoButtons,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle(kind),\r\n data: \"Sending to Device...\",\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal for failing to sendConfiguration() and option to retry or cancel\r\nexport function sendConfigurationFail(message: string, unitCreationLogId: number, env: string, sha1: string, assetId: number): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('vims'),\r\n data: message || 'Failed to send configuration.',\r\n primaryText: \"Retry\",\r\n primaryAction: hardwareAction.PushVimsConfig(unitCreationLogId, env, sha1, assetId),\r\n secondaryText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function sendStreamingFail(unitCreationLogId: number, templateName: string, isSetupDevice: boolean, message: string, channels, next: boolean): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.TextLeft,\r\n title: getTitle('streaming'),\r\n data: message || 'Failed to send streaming configuration.',\r\n primaryText: \"Retry\",\r\n primaryAction: serverAction.SaveConfigurableChannels(unitCreationLogId, templateName, isSetupDevice, channels, next),\r\n secondaryText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function rebootFail(unitCreationLogId: number, assetId: number): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('reboot'),\r\n data: 'Failed!',\r\n primaryText: \"Retry\",\r\n primaryAction: hardwareAction.RebootDevice(unitCreationLogId, assetId),\r\n secondaryText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function readConfig(): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.NoButtons,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('readConfig'),\r\n data: 'Sending command to device...',\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function readConfigFail(deviceId: number): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('readConfig'),\r\n data: 'Failed!',\r\n primaryText: \"Retry\",\r\n primaryAction: hardwareAction.ReadIdpConfig(deviceId),\r\n secondaryText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function readConfigSuccess(): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Ok,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('readConfig'),\r\n data: 'Success!',\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\nexport function pushConfig(): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.NoButtons,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('pushConfig'),\r\n data: 'Sending command to device...',\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function pushConfigFail(deviceId: number, settings: IDPOTASetting[], next: boolean, unitCreationLogId): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('pushConfig'),\r\n data: 'Failed!',\r\n primaryText: \"Retry\",\r\n primaryAction: hardwareAction.SaveIdpSettings(deviceId, settings, unitCreationLogId, next),\r\n secondaryText: \"Cancel\",\r\n secondaryAction: null,\r\n };\r\n}\r\n\r\nexport function pushConfigSuccess(): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Ok,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('pushConfig'),\r\n data: 'Success!',\r\n primaryText: \"Ok\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\nexport function sha1IsInvalid(ShaValidationMessage: string): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Ok,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('shaInvalid'),\r\n data: ShaValidationMessage,\r\n primaryText: \"Accept\",\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n\r\n//Modal with option to reboot device or cancel\r\nexport function rebootDeviceYesNo(unitCreationLogId: number, assetId: number): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('reboot'),\r\n data: 'Are you sure you want to reboot this device?',\r\n primaryText: 'Reboot',\r\n primaryAction: hardwareAction.RebootDevice(unitCreationLogId, assetId),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal with option to restart onboarding device or cancel\r\nexport function restartOnboardingYesNo(unitCreationLogId: number): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.OkCancel,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('automatedOnboarding'),\r\n data: 'You are attempting to restart the onboarding process. This may change the VIMS Configuration on the asset. Would you like to proceed?',\r\n primaryText: 'Proceed',\r\n primaryAction: OnboardingQueue.Restart(unitCreationLogId),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal to reboot device\r\nexport function RebootingDevice(): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.NoButtons,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('reboot'),\r\n data: 'Sending command...',\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal for failing the retry of sendConfigurationFail()\r\nexport function LongerThanExpected(kind: 'reboot' | 'vims' | 'streaming' | 'sync' | 'demandPoll' | 'alarm' | 'readConfig' | 'pushConfig'): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: false,\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Ok,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle(kind),\r\n data: 'Operation timed out, please try again later.',\r\n primaryText: 'Ok',\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal for Vims status 83 indicating a invalid file\r\nexport function VimsStatus83(): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: false,\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Ok,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('vims'),\r\n data: 'Invalid file.',\r\n primaryText: 'Ok',\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal for Vims status 82 or 115 allowing user to reboot device\r\nexport function VimsStatus82Or115(unitCreationLogId: number, assetId: number): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: false,\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.handleActions,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle('vims'),\r\n data: 'Configuration successfully sent. Reboot Device?',\r\n primaryText: 'Reboot',\r\n primaryAction: hardwareAction.RebootDevice(unitCreationLogId, assetId),\r\n secondaryText: 'Cancel',\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n//Modal for Vims status 84 file successfully deployed\r\nexport function Status84(kind: 'reboot' | 'vims' | 'streaming' | 'sync' | 'demandPoll' | 'alarm', action?: Action): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: false,\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Ok,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle(kind),\r\n data: 'Success!',\r\n primaryText: 'Ok',\r\n primaryAction: action,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n// Polling modal\r\nexport function CheckingStatus(kind: 'reboot' | 'vims' | 'streaming' | 'sync' | 'demandPoll' | 'alarm' | 'readConfig' | 'pushConfig', timer: number, closeAction: Action = null): fromRoot.ModalOptions {\r\n return {\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.NoButtons,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle(kind),\r\n data: `Waiting ${Math.max(0, timer)} seconds for device... `,\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null,\r\n closeAction\r\n };\r\n}\r\n\r\n//\r\nexport function DemandPollStatus(status: string, unitName: string, action: Action): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: true,\r\n customClass: 'modal__box modal--small',\r\n customWidth: '20%',\r\n modalType: fromRoot.ModalType.OkCancel,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: 'Demand Poll Sent',\r\n title2: unitName,\r\n data: 'Status: ' + status,\r\n primaryText: 'Confirm',\r\n primaryAction: null,\r\n secondaryText: 'View',\r\n secondaryAction: action\r\n };\r\n}\r\n\r\nexport function DemandPollStatusAlarm(status: string, unitName: string, action: Action): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: true,\r\n customClass: 'modal__box modal--small',\r\n customWidth: '20%',\r\n modalType: fromRoot.ModalType.OkCancel,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: 'Confirming Alarm Deployment',\r\n title2: unitName,\r\n data: 'Status: ' + status,\r\n primaryText: 'Confirm',\r\n primaryAction: null,\r\n secondaryText: 'View',\r\n secondaryAction: action\r\n };\r\n}\r\n\r\n//Modal to send configuration\r\nexport function sendConfiguration(configType): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: true,\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.Loading,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: null,\r\n data: \"Sending \" + configType + \" Configuration. This may take serveral minutes...\",\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\nexport function sendConfigurationError(error, kind: 'reboot' | 'vims' | 'streaming' | 'sync' | 'demandPoll' | 'alarm'): fromRoot.ModalOptions {\r\n return {\r\n hasStatus: true,\r\n customClass: 'modal__box modal--small',\r\n modalType: fromRoot.ModalType.NoButtons,\r\n contentType: fromRoot.ModalContentType.Text,\r\n title: getTitle(kind),\r\n data: error,\r\n primaryText: null,\r\n primaryAction: null,\r\n secondaryText: null,\r\n secondaryAction: null\r\n };\r\n}\r\n\r\n\r\n\r\nfunction getTitle(kind: 'reboot' | 'vims' | 'vimsApprove' |'streaming' | 'sync' | 'demandPoll' | 'alarm' | 'readConfig' | 'pushConfig' | 'shaInvalid' | 'automatedOnboarding') {\r\n switch (kind) {\r\n case 'reboot':\r\n return 'Reboot Device';\r\n case 'vims':\r\n return 'Push VIMS Configuration';\r\n case 'vimsApprove':\r\n return 'Confirm VIMS';\r\n case 'streaming':\r\n return 'Push Streaming Configuration';\r\n case 'sync':\r\n return 'Syncing Device';\r\n case 'demandPoll':\r\n return 'Demand Poll';\r\n case 'alarm':\r\n return 'Confirming Alarm Deployment';\r\n case 'readConfig':\r\n return 'Read Device Configuration';\r\n case 'pushConfig':\r\n return 'Push Device Configuration';\r\n case 'shaInvalid':\r\n return 'SHA Validation';\r\n case 'automatedOnboarding':\r\n return 'Automated Onboarding';\r\n }\r\n}\r\n\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { UnitCreation } from '../../modules/unit-creation/models/unit-creation.model';\r\nimport { UnitCreationState } from '../../modules/unit-creation/models/unit-creation-state.model';\r\n\r\nexport const LoadUnitCreation = createAction('[Support] Load Unit Creation', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadUnitCreationFail = createAction('[Support] Load Unit Creation Fail', (error: ApiError) => ({ error }));\r\nexport const LoadUnitCreationSuccess = createAction('[Support] Load Unit Creation Success', (unitCreation: UnitCreation) => ({ unitCreation }));\r\n\r\nexport const SaveUnitCreation = createAction('[Support] Save Unit Creation', (unitCreationLogId: number, unitCreation: UnitCreation, next: boolean) => ({ unitCreationLogId, unitCreation, next }));\r\nexport const SaveUnitCreationFail = createAction('[Support] Save Unit Creation Fail', (error: ApiError) => ({ error }));\r\nexport const SaveUnitCreationSuccess = createAction('[Support] Save Unit Creation Success');\r\n\r\nexport const SaveUnitStates = createAction('[Support] Save Unit State', (sitemapGroupId: number, unitCreationState: UnitCreationState[]) => ({ sitemapGroupId, unitCreationState }));\r\nexport const SaveUnitStatesFail = createAction('[Support] Save Unit State Fail', (error: ApiError) => ({ error }));\r\nexport const SaveUnitStatesSuccess = createAction('[Support] Save Unit State Success');\r\n\r\nexport const UpdateLock = createAction('[Support] Update Unit Lock', (unitCreationLogId: number) => ({ unitCreationLogId })); \r\nexport const UpdateLockSuccess = createAction('[Support] Update Unit Lock Success');\r\nexport const UpdateLockFail = createAction('[Support] Save Unit State Fail', (error: ApiError) => ({ error }));","import { Injectable } from '@angular/core';\r\n\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport * as fromNavigation from '../navigation/actions';\r\nimport * as fromUnitCreation from './actions';\r\n\r\nimport { FavoritesActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { SupportUnitCreationService } from '@rfv/modules/support/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _supportService: SupportUnitCreationService\r\n ) { }\r\n\r\n public loadUnitCreation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreation.LoadUnitCreation),\r\n switchMap(action => this._supportService.getUnitCreation(action.unitCreationLogId).pipe(\r\n map(unitCreation => fromUnitCreation.LoadUnitCreationSuccess(unitCreation)),\r\n catchError(error => of(fromUnitCreation.LoadUnitCreationFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveUnitCreation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreation.SaveUnitCreation),\r\n switchMap(action => this._supportService.saveUnitCreation(action.unitCreationLogId, action.unitCreation).pipe(\r\n mergeMap(_ => [\r\n fromUnitCreation.SaveUnitCreationSuccess(),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n //fromCore.Assets.Entities.Load(), // causing not forwarding to next step but dashboard\r\n //fromCore.Assets.Entities.LoadOne(assetId), // todo: modonnell\r\n action.next\r\n ? fromNavigation.NextStep()\r\n : fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Unit Created',\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(fromUnitCreation.SaveUnitCreationFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveUnitStates$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreation.SaveUnitStates),\r\n switchMap(action => this._supportService.saveUnitStates(action.unitCreationState).pipe(\r\n mergeMap(() => [\r\n fromUnitCreation.SaveUnitStatesSuccess(),\r\n fromCore.Support.UnitCreationLogs.Load(action.sitemapGroupId),\r\n fromCore.Assets.Entities.Load(),//reload assets to get updated disabled flags\r\n FavoritesActions.Load(),//then reload favorites to show/hide disabled assets\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Units Saved`,\r\n autoClose: 3000\r\n }\r\n }),\r\n \r\n ]),\r\n catchError(error => from([\r\n fromUnitCreation.SaveUnitStatesFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while saving units',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public updateLock$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUnitCreation.UpdateLock),\r\n switchMap(action => this._supportService.updateUnitCreationLock(action.unitCreationLogId).pipe(\r\n mergeMap(() => [\r\n fromUnitCreation.UpdateLockSuccess(),\r\n fromRoot.Banner.Show({\r\n options: { \r\n type: 'success',\r\n message: 'Unit Unlocked',\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(fromUnitCreation.UpdateLockFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { UnitCreation } from '../../modules/unit-creation/models/unit-creation.model';\r\nexport interface State {\r\n unitCreation: UnitCreation;\r\n\r\n isSaving: boolean;\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n unitCreation: null,\r\n\r\n isSaving: false,\r\n\r\n isLoading: false,\r\n isLoaded: false,\r\n error: null\r\n};","import { createReducer, on, Action } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as UnitCreationActions from './actions';\r\n\r\nconst unitCreationReducer = createReducer(\r\n initialState,\r\n \r\n on(UnitCreationActions.LoadUnitCreation, state => ({\r\n ...state,\r\n isLoading: true,\r\n })),\r\n\r\n on(UnitCreationActions.LoadUnitCreationFail, (state, { error }) => ({\r\n ...state,\r\n unitCreation: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n error\r\n })),\r\n\r\n on(UnitCreationActions.LoadUnitCreationSuccess, (state, { unitCreation }) => ({\r\n ...state,\r\n unitCreation,\r\n isLoading: false,\r\n isLoaded: true,\r\n error: null\r\n })),\r\n \r\n on(UnitCreationActions.SaveUnitCreation, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UnitCreationActions.SaveUnitCreationFail, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UnitCreationActions.SaveUnitCreationSuccess, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UnitCreationActions.SaveUnitStates, state => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UnitCreationActions.SaveUnitStatesFail, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UnitCreationActions.SaveUnitStatesSuccess, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UnitCreationActions.UpdateLockSuccess, state => ({\r\n ...state,\r\n unitCreation: {...state.unitCreation, IsLocked: false}\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitCreationReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitCreation);\r\n\r\nexport const getUnitCreation = createSelector(getState, state => state.unitCreation);\r\nexport const getUnitIsLocked = createSelector(getState, state => state.unitCreation?.IsLocked);\r\n\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\n","import { UnitData } from './../../modules/unit-data/models/unit-data.model';\r\nimport { createAction } from '@ngrx/store';\r\n\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DatapointDisplayModel } from '@rfv/modules/core/models/datapoint/datapoint-display-model.model';\r\n\r\nexport const Load = createAction('[Support] Load Unit Data Setup', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadFail = createAction('[Support] Load Unit Data Setup Fail', (error: ApiError) => ({ error }));\r\nexport const LoadSuccess = createAction('[Support] Load Unit Data Setup Success', (unitData: UnitData[]) => ({ unitData }));\r\n\r\nexport const Save = createAction('[Support] Save Unit Data Setup', (unitCreationLogId: number, unitData: UnitData[], next: boolean) => ({ unitCreationLogId, unitData, next }));\r\nexport const SaveFail = createAction('[Support] Save Unit Data Setup Fail', (error: ApiError) => ({ error }));\r\nexport const SaveSuccess = createAction('[Support] Save Unit Data Setup Success');\r\n\r\nexport const SaveDrawer = createAction('[Support] Save Unit Data Drawer', (unitCreationLogId: number, unitData: UnitData[], model: DatapointDisplayModel) => ({ unitCreationLogId, unitData, model}));\r\nexport const SaveDrawerFail = createAction('[Support] Save Unit Data Drawer Fail', (error: ApiError) => ({ error }));\r\nexport const SaveDrawerSuccess = createAction('[Support] Save Unit Data Drawer Success');\r\n\r\nexport const SaveMetricToImperial = createAction('[Support] Save Metric To Imperial', (unitCreationLogId: number, assetId: number) => ({ assetId, unitCreationLogId }));\r\nexport const SaveMetricToImperialFail = createAction('[Support] Save Metric To Imperial Fail', (error: ApiError) => ({ error }));\r\nexport const SaveMetricToImperialSuccess = createAction('[Support] Save Metric To Imperial Success');\r\n\r\nexport const SaveImperialToAsPosted = createAction('[Support] Save Imperial To As Posted', (unitCreationLogId: number, assetId: number) => ({ assetId, unitCreationLogId }));\r\nexport const SaveImperialToAsPostedFail = createAction('[Support] Save Imperial To As Posted Fail', (error: ApiError) => ({ error }));\r\nexport const SaveImperialToAsPostedSuccess = createAction('[Support] Save Imperial To As Posted Success');\r\n\r\nexport const SaveImperialToMetric = createAction('[Support] Save Imperial To Metric', (unitCreationLogId: number, assetId: number) => ({ assetId, unitCreationLogId }));\r\nexport const SaveImperialToMetricFail = createAction('[Support] Save Imperial To Metric Fail', (error: ApiError) => ({ error }));\r\nexport const SaveImperialToMetricSuccess = createAction('[Support] Save Imperial To Metric Success');\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { UnitData } from './../modules/unit-data/models/unit-data.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportUnitDataService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public getUnitData(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/unit-data/${unitCreationLogId}`);\r\n }\r\n\r\n public saveUnitData(unitCreationLogId: number, unitData: UnitData[]) {\r\n return this._http.put(`/v1/support/unit-data/${unitCreationLogId}`, unitData);\r\n }\r\n\r\n public SaveMetricToImperial(assetId: number) {\r\n return this._http.put(`/v1/support/unit-data/MetricToImperial/${assetId}`, null);\r\n }\r\n\r\n public SaveImperialToAsPosted(assetId: number) {\r\n return this._http.put(`/v1/support/unit-data/ImperialToAsPosted/${assetId}`, null);\r\n }\r\n\r\n public SaveImperialToMetric(assetId: number) {\r\n return this._http.put(`/v1/support/unit-data/ImperialToMetric/${assetId}`, null);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, concatMap, mergeMap, tap, filter } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as UnitDataActions from './actions';\r\n\r\nimport { SupportUnitDataService } from '@rfv/modules/support/services';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromNavigation from '../navigation/actions';\r\nimport * as fromDisplayProperty from '@rfv/modules/core/store/assets/display-property';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitDataService: SupportUnitDataService,\r\n ) { }\r\n\r\n public unitcreationId: number;\r\n\r\n load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitDataActions.Load),\r\n filter(action => !!action.unitCreationLogId),\r\n switchMap(action => this._unitDataService.getUnitData(action.unitCreationLogId).pipe(\r\n map(unitDataSetup => UnitDataActions.LoadSuccess(unitDataSetup)),\r\n catchError(error => of(UnitDataActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n save$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitDataActions.Save),\r\n switchMap(action => this._unitDataService.saveUnitData(action.unitCreationLogId, action.unitData).pipe(\r\n mergeMap(() => [\r\n UnitDataActions.SaveSuccess(),\r\n UnitDataActions.Load(action.unitCreationLogId),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n action.next\r\n ? fromNavigation.NextStep()\r\n : fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Unit Data Setup Saved`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => of(UnitDataActions.SaveFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n saveDrawer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitDataActions.SaveDrawer),\r\n switchMap(action => this._unitDataService.saveUnitData(action.unitCreationLogId, action.unitData).pipe(\r\n tap(v => this.unitcreationId = action.unitCreationLogId),\r\n mergeMap(() => [\r\n UnitDataActions.SaveDrawerSuccess(),\r\n fromDisplayProperty.UpdateDatapointDisplayProperty(action.model)\r\n ]),\r\n catchError(error => of(UnitDataActions.SaveDrawerFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n saveDrawerReloadTable$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromDisplayProperty.UpdateDatapointDisplayPropertySuccess),\r\n mergeMap(() => [\r\n UnitDataActions.Load(this.unitcreationId && this.unitcreationId),\r\n ])\r\n )\r\n );\r\n\r\n SaveMetricToImperial$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitDataActions.SaveMetricToImperial),\r\n switchMap(action => this._unitDataService.SaveMetricToImperial(action.assetId).pipe(\r\n mergeMap(() => [\r\n UnitDataActions.SaveMetricToImperialSuccess(),\r\n UnitDataActions.Load(action.unitCreationLogId),\r\n fromCore.Assets.DatapointDisplayProperty.Load(action.assetId),\r\n ]),\r\n catchError(error => of(UnitDataActions.SaveMetricToImperialFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n SaveImperialToAsPosted$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitDataActions.SaveImperialToAsPosted),\r\n switchMap(action => this._unitDataService.SaveImperialToAsPosted(action.assetId).pipe(\r\n mergeMap(() => [\r\n UnitDataActions.SaveImperialToAsPostedSuccess(),\r\n UnitDataActions.Load(action.unitCreationLogId),\r\n fromCore.Assets.DatapointDisplayProperty.Load(action.assetId),\r\n ]),\r\n catchError(error => of(UnitDataActions.SaveImperialToAsPostedFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n SaveImperialToMetric$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitDataActions.SaveImperialToMetric),\r\n switchMap(action => this._unitDataService.SaveImperialToMetric(action.assetId).pipe(\r\n mergeMap(() => [\r\n UnitDataActions.SaveImperialToMetricSuccess(),\r\n UnitDataActions.Load(action.unitCreationLogId),\r\n fromCore.Assets.DatapointDisplayProperty.Load(action.assetId),\r\n ]),\r\n catchError(error => of(UnitDataActions.SaveImperialToMetricFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { UnitData } from './../../modules/unit-data/models/unit-data.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n unitData: UnitData[];\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n isDrawerSaving: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n unitData: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n isDrawerSaving: false,\r\n error: null\r\n};","import { createReducer, on, Action } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as UnitDataSetupActions from './actions';\r\n\r\nconst unitDataSetupReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitDataSetupActions.Load, (state, { unitCreationLogId }) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitDataSetupActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(UnitDataSetupActions.LoadSuccess, (state, { unitData }) => ({\r\n ...state,\r\n unitData,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(UnitDataSetupActions.Save, (state, { unitCreationLogId }) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(UnitDataSetupActions.SaveFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(UnitDataSetupActions.SaveSuccess, state => ({\r\n ...state,\r\n isSaving: false\r\n })),\r\n\r\n on(UnitDataSetupActions.SaveDrawer, (state) => ({\r\n ...state,\r\n isDrawerSaving: true\r\n })),\r\n\r\n on(UnitDataSetupActions.SaveDrawerFail, (state, { error }) => ({\r\n ...state,\r\n isDrawerSaving: false,\r\n error\r\n })),\r\n\r\n on(UnitDataSetupActions.SaveDrawerSuccess, state => ({\r\n ...state,\r\n isDrawerSaving: false\r\n }))\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitDataSetupReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitData);\r\n\r\nexport const getUnitData = createSelector(getState, state => state.unitData);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const getError = createSelector(getState, state => state.error);\r\nexport const isDrawerSaving = createSelector(getState, state => state.isDrawerSaving);\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const FinishSetup = createAction('[Support] Finish Setup', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const FinishSetupFail = createAction('[Support] Finish Setup Fail', (error: ApiError) => ({ error }));\r\nexport const FinishSetupSuccess = createAction('[Support] Finish Setup Success', (response: any) => ({ response }));\r\n\r\nexport const LoadUnitReviewInfo = createAction('[Support] Load Unit Review Info', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const LoadUnitReviewInfoFail = createAction('[Support] Load Unit Review Info Fail', (error: ApiError) => ({ error }));\r\nexport const LoadUnitReviewInfoSuccess = createAction('[Support] Load Unit Review Info Success', (review: any) => ({ review }));\r\n\r\n ","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportUnitReviewService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n public finishSetup(unitCreationLogId: number) {\r\n return this._http.post(`/v1/support/unit-review/complete/${unitCreationLogId}`, null);\r\n }\r\n\r\n public loadUnitReviewInfo(unitCreationLogId: number) {\r\n return this._http.get(`/v1/support/unit-review/info/${unitCreationLogId}`);\r\n }\r\n}\r\n","// ng\r\nimport { Injectable } from '@angular/core';\r\n\r\n// rxjs\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\n// ngrx\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromNavigation from '../navigation/actions';\r\nimport * as UnitReviewActions from './actions';\r\n\r\n// rfv\r\nimport { SupportUnitReviewService } from '@rfv/modules/support/services';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _store: Store,\r\n private _actions$: Actions,\r\n private _supportService: SupportUnitReviewService\r\n ) { }\r\n\r\n load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitReviewActions.LoadUnitReviewInfo),\r\n switchMap(action => this._supportService.loadUnitReviewInfo(action.unitCreationLogId).pipe(\r\n map(response => UnitReviewActions.LoadUnitReviewInfoSuccess(response)),\r\n catchError(error => of(UnitReviewActions.LoadUnitReviewInfoFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n finishSetup$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitReviewActions.FinishSetup),\r\n withLatestFrom(\r\n this._store.select(fromDashboard.getSelectedDashboardId),\r\n this._store.select(fromDashboard.getSelectedSitemapGroupId),\r\n ),\r\n switchMap(([action, dashboardId, sitemapGroupId]) => this._supportService.finishSetup(action.unitCreationLogId).pipe(\r\n mergeMap(response => [\r\n UnitReviewActions.FinishSetupSuccess(response),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n fromRoot.Router.Go([\r\n 'dashboard', dashboardId,\r\n 'sitemapGroup', sitemapGroupId,\r\n ])\r\n ]),\r\n catchError(error => of(UnitReviewActions.FinishSetupFail(error)))\r\n ))\r\n )\r\n );\r\n}\r\n","import { UnitReviewInformation } from './../../modules/unit-review/models/ple-unit-review-info.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n unitReview: UnitReviewInformation;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n unitReview: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n error: null,\r\n};","import { createReducer, on, Action } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as unitReviewActions from './actions';\r\n\r\nconst unitReviewReducer = createReducer(\r\n initialState,\r\n\r\n on(unitReviewActions.FinishSetup, (state) => ({\r\n ...state,\r\n isSaving: true\r\n })),\r\n\r\n on(unitReviewActions.FinishSetupFail, (state, { error }) => ({\r\n ...state,\r\n isSaving: false,\r\n error\r\n })),\r\n\r\n on(unitReviewActions.FinishSetupSuccess, (state) => ({\r\n ...state,\r\n isSaving: false,\r\n error: null\r\n })),\r\n\r\n on(unitReviewActions.LoadUnitReviewInfo, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n })),\r\n\r\n on(unitReviewActions.LoadUnitReviewInfoFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error,\r\n })),\r\n\r\n on(unitReviewActions.LoadUnitReviewInfoSuccess, (state, { review }) => ({\r\n ...state,\r\n unitReview: review,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitReviewReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\nimport * as fromCore from '@rfv/modules/core/store'\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitReview);\r\nexport const getUnitReviewInfo = createSelector(getState, state => state.unitReview);\r\n\r\nexport const getApplication = createSelector(getUnitReviewInfo, fromCore.Applications.getEntities, (info, applications) =>\r\n info && info.applicationId && applications && applications[info.applicationId]);\r\n\r\nexport const getSitemapGroup = createSelector(getUnitReviewInfo, fromCore.SitemapGroups.getEntities, (info, sitemap) =>\r\n info && info.sitemapGroupId && sitemap && sitemap[info.sitemapGroupId]);\r\n\r\nexport const getAssetType = createSelector(getUnitReviewInfo, fromCore.AssetTypes.getEntities, (info, assetTypes) =>\r\n info && info.assetTypeId && assetTypes && assetTypes[info.assetTypeId]);\r\n\r\nexport const getTimezone = createSelector(getUnitReviewInfo, fromCore.GlobalTimezones.getEntities, (info, Timezone) =>\r\n info && info.timeZoneId && Timezone && Timezone[info.timeZoneId]);\r\n","import { Action } from '@ngrx/store';\r\nimport { DeviceStatus } from './../../modules/unit-validation/models/device-status.model';\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport const CreateDemandPoll = createAction('[Support] Create Demand Poll',\r\n (assetId: number, assetName: string, viewAction: Action, pollUnitData: boolean, customOverride: string) => ({ assetId, assetName, viewAction, pollUnitData, customOverride }));\r\n\r\nexport const CreateDemandPollFail = createAction('[Support] Create Demand Poll Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const CreateDemandPollSuccess = createAction('[Support] Create Demand Poll Success',\r\n (commandId: number) => ({ commandId }));\r\n\r\nexport const LoadPLEDemandPollStatus = createAction('[Support] Get Device Status',\r\n (commandId: number) => ({ commandId }));\r\n\r\nexport const LoadPLEDemandPollStatusFail = createAction('[Support] Get Device Status Fail',\r\n (error: ApiError) => ({ error }));\r\n\r\nexport const LoadPLEDemandPollStatusSuccess = createAction('[Support] Get Device Status Success',\r\n (deviceStatus: DeviceStatus) => ({ deviceStatus }));\r\n\r\nexport const PollUnitValidationStatus = createAction('[Support] Start Demand Poll Timer',\r\n (commandId: number, assetId: number, assetName: string, attempt: number = 0) => ({ commandId, assetId, assetName, attempt }));\r\n\r\nexport const StopPollStreamingStatus = createAction('[Support] Stop Demand Poll Timer');\r\n\r\nexport const LoadAllUnitValidation = createAction('[Support] Load All Unit Validation',\r\n (assetId: number, assetName: string, statusLabel: string) => ({ assetId, assetName, statusLabel }));\r\n\r\nexport const CancelCommand = createAction('[Support] Cancel Demand Poll Command');\r\n\r\nexport const FinishUnitValidation = createAction('[Support] finish unit validation', (unitCreationLogId: number) => ({ unitCreationLogId }));\r\nexport const FinishUnitValidationFail = createAction('[Support] finish unit validationp Fail', (error: ApiError) => ({ error }));\r\nexport const FinishUnitValidationSuccess = createAction('[Support] finish unit validationp Success');\r\n","import { Observable } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { DeviceStatus } from './../modules/unit-validation/models/device-status.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SupportUnitValidationService {\r\n\r\n public constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n //#region Unit Validation\r\n public createDemandPoll(assetId: number, pollUnitData: boolean, customOverride: string) {\r\n return this._http.post(`/v1/support/demandPoll/${assetId}`, null, {\r\n params: { pollUnitData: pollUnitData.toString(), customOverride }\r\n });\r\n }\r\n\r\n\r\n public getPLEDemandPollStatus(commandId: number): Observable {\r\n return this._http.get(`/v1/support/status/${commandId}`);\r\n }\r\n\r\n public finishUnitValidation(unitCreationLogId: number) {\r\n return this._http.post(`/v1/support/unitValidation/${unitCreationLogId}`, null);\r\n }\r\n}","import { Store } from '@ngrx/store';\r\nimport { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of, from, Subject, interval } from 'rxjs';\r\nimport { catchError, debounceTime, filter, map, mergeMap, switchMap, takeUntil, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport * as UnitValidationActions from './actions';\r\nimport { SupportUnitValidationService } from '@rfv/modules/support/services';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUnitValidationReducer from './index';\r\nimport * as fromNavigation from '../navigation';\r\nimport * as supportModal from '@rfv/modules/support/store/support-modal-messages';\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _unitValidationService: SupportUnitValidationService,\r\n private _store$: Store\r\n ) { }\r\n\r\n private _timer$ = new Subject();\r\n\r\n public createDemandPoll$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.CreateDemandPoll),\r\n switchMap(action => this._unitValidationService.createDemandPoll(action.assetId, action.pollUnitData, action.customOverride).pipe(\r\n mergeMap(commandId => [\r\n UnitValidationActions.LoadPLEDemandPollStatus(commandId),\r\n UnitValidationActions.CreateDemandPollSuccess(commandId),\r\n UnitValidationActions.PollUnitValidationStatus(commandId, action.assetId, action.assetName),\r\n ]),\r\n catchError(error => from([\r\n UnitValidationActions.LoadPLEDemandPollStatusFail(error),\r\n UnitValidationActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.sendConfigurationError(\"Error: \" + error.message, 'demandPoll') }),\r\n ]))\r\n )))\r\n );\r\n\r\n public loadPLEDemandPollStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.LoadPLEDemandPollStatus),\r\n switchMap(action => this._unitValidationService.getPLEDemandPollStatus(action.commandId).pipe(\r\n mergeMap(status => [\r\n UnitValidationActions.LoadPLEDemandPollStatusSuccess(status),\r\n ]),\r\n catchError(error => from([\r\n UnitValidationActions.LoadPLEDemandPollStatusFail(error),\r\n UnitValidationActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.sendConfigurationError(\"Error: \" + error.message, 'demandPoll') }),\r\n ]))\r\n )))\r\n );\r\n\r\n public openModalForSendingConfig$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.CreateDemandPoll),\r\n map(() =>\r\n fromRoot.Modal.Open({ options: supportModal.sendDeviceConfiguration('demandPoll') })\r\n ),\r\n ));\r\n\r\n public loadAllUnitValidation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.LoadAllUnitValidation),\r\n withLatestFrom(this._store$.select(fromUnitValidationReducer.getViewAction)),\r\n mergeMap(([data, viewAction]) => [\r\n fromRoot.Modal.Open({ options: supportModal.DemandPollStatus(data.statusLabel, data.assetName, viewAction) }),\r\n fromCore.Assets.DatapointValues.Load(data.assetId),\r\n fromCore.Assets.Alarms.Load(data.assetId),\r\n fromCore.Assets.Status.Load(data.assetId),\r\n fromCore.Assets.DatapointDisplayProperty.Load(data.assetId)\r\n ]),\r\n ));\r\n\r\n public stopPollStreamingStatus$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.StopPollStreamingStatus),\r\n tap(() => {\r\n if (this._timer$) {\r\n this._timer$.next();\r\n }\r\n })),\r\n { dispatch: false }\r\n );\r\n\r\n public stopTimer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.StopPollStreamingStatus),\r\n tap(() => this._timer$.next())\r\n ), { dispatch: false }\r\n );\r\n\r\n public pollingModal$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.PollUnitValidationStatus),\r\n filter(action => action.attempt === 0),\r\n switchMap(() => interval(1000).pipe(\r\n takeUntil(this._timer$),\r\n map(value => fromRoot.Modal.Open({ options: supportModal.CheckingStatus('demandPoll', (600) - value, UnitValidationActions.CancelCommand()) }))\r\n ))\r\n )\r\n );\r\n\r\n public cancelCommand$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.CancelCommand),\r\n mergeMap(() => [\r\n UnitValidationActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Close()\r\n ])\r\n )\r\n );\r\n\r\n public startTimer$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.PollUnitValidationStatus),\r\n debounceTime(10000),\r\n switchMap(action => this._unitValidationService.getPLEDemandPollStatus(action.commandId).pipe(//check status\r\n takeUntil(this._timer$),\r\n withLatestFrom(this._store$.select(fromUnitValidationReducer.getViewAction)),\r\n mergeMap(([deviceStatus, viewAction]) => {\r\n if (deviceStatus && deviceStatus.deviceCommandTransferStatusId > 1) {\r\n return [\r\n UnitValidationActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.DemandPollStatus(deviceStatus.label, action.assetName, viewAction) }),\r\n UnitValidationActions.LoadAllUnitValidation(action.assetId, action.assetName, deviceStatus.label)\r\n ];\r\n }\r\n if (action.attempt >= 59) {\r\n return [\r\n UnitValidationActions.StopPollStreamingStatus(),\r\n fromRoot.Modal.Open({ options: supportModal.LongerThanExpected('demandPoll') })\r\n ];\r\n }\r\n return [\r\n UnitValidationActions.PollUnitValidationStatus(action.commandId, action.assetId, action.assetName, action.attempt + 1)\r\n ];\r\n }),\r\n catchError(error => from([\r\n UnitValidationActions.LoadPLEDemandPollStatusFail(error),\r\n fromRoot.Modal.Open({ options: supportModal.sendConfigurationError(\"Error: \" + error.message, 'demandPoll') }),\r\n UnitValidationActions.StopPollStreamingStatus(), //stops timer if error when checking for status\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public finishUnitValidation$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UnitValidationActions.FinishUnitValidation),\r\n switchMap(action => this._unitValidationService.finishUnitValidation(action.unitCreationLogId).pipe(\r\n mergeMap(() => [\r\n UnitValidationActions.FinishUnitValidationSuccess(),\r\n fromNavigation.LoadNavigation(action.unitCreationLogId),\r\n fromNavigation.NextStep(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Unit validation completed`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ]),\r\n //catchError(error => of(UnitValidationActions.FinishUnitValidationFail(error)))\r\n catchError(error => from([\r\n UnitValidationActions.FinishUnitValidationFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while finishing unit validation',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { Action } from '@ngrx/store';\r\nimport { DeviceStatus } from './../../modules/unit-validation/models/device-status.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nexport interface State {\r\n deviceStatus: DeviceStatus;\r\n commandId: number;\r\n viewAction: Action;\r\n isLoaded: boolean;\r\n isLoading: boolean;\r\n isSaving: boolean;\r\n error: ApiError;\r\n}\r\n\r\nexport const initialState: State = {\r\n deviceStatus: null,\r\n commandId: null,\r\n viewAction: null,\r\n isLoaded: false,\r\n isLoading: false,\r\n isSaving: false,\r\n error: null\r\n};","import { createReducer, on, Action } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\nimport * as UnitValidationActions from './actions';\r\n\r\nconst unitValidationReducer = createReducer(\r\n initialState,\r\n\r\n on(UnitValidationActions.CreateDemandPoll, (state, { viewAction }) => ({\r\n ...state,\r\n isLoading: true,\r\n viewAction: viewAction\r\n })),\r\n\r\n on(UnitValidationActions.CreateDemandPollFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(UnitValidationActions.CreateDemandPollSuccess, (state, { commandId }) => ({\r\n ...state,\r\n commandId: commandId,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(UnitValidationActions.LoadPLEDemandPollStatus, (state) => ({\r\n ...state,\r\n isLoading: true\r\n })),\r\n\r\n on(UnitValidationActions.LoadPLEDemandPollStatusFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error\r\n })),\r\n\r\n on(UnitValidationActions.LoadPLEDemandPollStatusSuccess, (state, { deviceStatus }) => ({\r\n ...state,\r\n deviceStatus: deviceStatus,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return unitValidationReducer(state, action);\r\n}","import { createSelector } from '@ngrx/store';\r\nimport { getFeatureState } from '../selectors';\r\n\r\nexport const getState = createSelector(getFeatureState, state => state.unitValidation);\r\nexport const getDeviceStatus = createSelector(getState, state => state.deviceStatus);\r\nexport const getCommandId = createSelector(getState, state => state.commandId);\r\nexport const getViewAction = createSelector(getState, state => state.viewAction);\r\n\r\nexport const isLoaded = createSelector(getState, state => state.isLoaded);\r\nexport const isLoading = createSelector(getState, state => state.isLoading);\r\nexport const isSaving = createSelector(getState, state => state.isSaving);\r\nexport const geError = createSelector(getState, state => state.error);\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\nimport { DataPointsEditorUpdateModel } from '@rfv/modules/tiles/models/data-points-editor-update.model';\r\nimport { DataPointsEditorModel } from '@rfv/modules/tiles/models/data-points-editor.model';\r\n\r\n\r\nexport const Load = createAction('[TILE Data Points Editor] Load');\r\n\r\nexport const LoadSuccess = createAction(\r\n '[TILE Data Points Editor] Load Success',\r\n (payload: DataPointsEditorModel[]) => ({ payload })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[TILE Data Points Editor] Load Fail',\r\n (error: ApiError) => ({ error })\r\n);\r\n\r\nexport const Update = createAction(\r\n '[TILE Data Points Editor] Update',\r\n (payload: DataPointsEditorUpdateModel) => ({ payload })\r\n);\r\n\r\nexport const UpdateSuccess = createAction(\r\n '[TILE Data Points Editor] Update Success',\r\n (payload: boolean) => ({ payload })\r\n);\r\n\r\nexport const UpdateFail = createAction(\r\n '[TILE Data Points Editor] Update Fail',\r\n (error: ApiError) => ({ error })\r\n);\r\n\r\nexport const SetSelectedDataPoint = createAction(\r\n '[TILE Data Points Editor] Set Selected DataPoint',\r\n (payload: DataPointsEditorUpdateModel) => ({ payload })\r\n);\r\n\r\nexport const ClearSelectedDataPoint = createAction('[TILE Data Points Editor] Clear Selected DataPoint');\r\n","import { createAction } from '@ngrx/store';\r\nimport { AlarmsTileData } from '../models/alarms-tile-data.model';\r\n\r\n\r\nexport const Load = createAction('[Alarms Tile] Load');\r\n\r\nexport const SetLoading = createAction('[Alarms Tile] Set Loading');\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Alarms Tile] Load Success',\r\n (allAlarmsTileData: AlarmsTileData[]) => ({ allAlarmsTileData })\r\n);\r\n\r\nexport const LoadFailure = createAction(\r\n '[Alarms Tile] Load Failure',\r\n (error: string) => ({ error })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\nimport { AlarmsTileData } from '../models/alarms-tile-data.model';\r\n\r\n\r\nexport const Load = createAction('[Unit Alarms Tile] Load');\r\n\r\nexport const SetLoading = createAction('[Unit Alarms Tile] Set Loading');\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Unit Alarms Tile] Load Success',\r\n (allAlarmsTileData: AlarmsTileData[]) => ({ allAlarmsTileData })\r\n);\r\n\r\nexport const LoadFailure = createAction(\r\n '[Unit Alarms Tile] Load Failure',\r\n (error: string) => ({ error })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\nimport { AdminNotificationsTile } from '../models/admin-notifications-tile.model';\r\n\r\n\r\nexport const Load = createAction('[Admin Notifications Tile] Load');\r\n\r\nexport const LoadSuccess = createAction(\r\n '[Admin Notifications Tile] Load Success',\r\n (payload: AdminNotificationsTile[]) => ({ payload })\r\n);\r\n\r\nexport const LoadFailure = createAction(\r\n '[Admin Notifications Tile] Load Failure',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\nimport { AdminUserListTileCounts } from '../models/admin-user-list-tile-counts.model';\r\nimport { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\n\r\n\r\nexport const LoadUserCount = createAction('[Admin User List Tile] Load User Count');\r\n\r\nexport const LoadUserCountSuccess = createAction(\r\n '[Admin User List Tile] Load User Count Success',\r\n (userCounts: AdminUserListTileCounts) => ({ userCounts })\r\n);\r\n\r\nexport const LoadUserCountFail = createAction(\r\n '[Admin User List Tile] Load User Count Failure',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const InitLoadUserExpiry = createAction(\r\n '[Admin User List Tile] Initial Load User Expiry',\r\n (offset: number, size: number) => ({ offset, size })\r\n);\r\n\r\nexport const LoadUserExpiry = createAction(\r\n '[Admin User List Tile] Load User Expiry',\r\n (offset: number, size: number) => ({ offset, size })\r\n);\r\n\r\nexport const LoadUserExpirySuccess = createAction(\r\n '[Admin User List Tile] Load User Expiry Success',\r\n (expiringUsers: User[]) => ({ expiringUsers })\r\n);\r\n\r\nexport const LoadUserExpiryFailure = createAction(\r\n '[Admin User List Tile] Load User Expiry Failure',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\nimport { AdminRuntimeTile } from '../models/admin-runtime-tile.model';\r\n\r\n\r\nexport const LoadUnitNotSetupCount = createAction('[Admin Runtime Tile] Load Unit Not Setup Count');\r\n\r\nexport const LoadUnitNotSetupCountSuccess = createAction(\r\n '[Admin Runtime Tile] Load Unit Not Setup Count Success',\r\n (payload: AdminRuntimeTile) => ({ payload })\r\n);\r\n\r\nexport const LoadUnitNotSetupCountFail = createAction(\r\n '[Admin Runtime Tile] Load Unit Not Setup Count Failure',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n","import { SiteVisualization, SiteVisualizationMarker } from '@rfv/modules/shared/model/site-visualization.model';\r\n\r\n/* Ngrx */\r\nimport { createAction } from '@ngrx/store';\r\nimport { Asset, AssetDatapointSetting } from '@rfv/modules/core/models';\r\n\r\n\r\nexport const Load = createAction(\r\n '[TILE Site Visualization] Load',\r\n (sitemapGroupId: number) => ({ sitemapGroupId })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[TILE Site Visualization] Load Success',\r\n (siteVisualization: SiteVisualization) => ({ siteVisualization })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[TILE Site Visualization] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const Clear = createAction('[Tile Site Visualization] Clear');\r\n\r\nexport const Create = createAction(\r\n '[TILE Site Visualization] Create',\r\n (siteVisualization: SiteVisualization) => ({ siteVisualization })\r\n);\r\n\r\nexport const CreateSuccess = createAction(\r\n '[TILE Site Visualization] Create Success',\r\n (siteVisualizationId: number) => ({ siteVisualizationId })\r\n);\r\n\r\nexport const CreateMarker = createAction(\r\n '[TILE Site Visualization] Create Marker',\r\n (creatingMarker: boolean) => ({ creatingMarker })\r\n);\r\n\r\nexport const CreateFail = createAction(\r\n '[TILE Site Visualization] Create Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const Update = createAction(\r\n '[TILE Site Visualization] Update',\r\n (siteVisualization: SiteVisualization) => ({ siteVisualization })\r\n);\r\n\r\nexport const UpdateSuccess = createAction(\r\n '[TILE Site Visualization] Update Success',\r\n (updateSuccess: boolean) => ({ updateSuccess })\r\n);\r\n\r\nexport const UpdateFail = createAction(\r\n '[TILE Site Visualization] Update Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const UpdateStateVisualization = createAction(\r\n '[TILE Site Visualization] Update State Visualization',\r\n (siteVisualization: SiteVisualization) => ({ siteVisualization })\r\n);\r\n\r\nexport const UpdateSelectedLink = createAction(\r\n '[TILE Site Visualization] Update Selected Link',\r\n (selectedLink: SiteVisualizationMarker) => ({ selectedLink })\r\n);\r\n\r\nexport const UpdateStateAssetDatapoints = createAction(\r\n '[TILE Site Visualization] Update State Assets and Datapoints',\r\n (assets: Asset[], datapoints: AssetDatapointSetting[]) => ({ assets, datapoints })\r\n);\r\n\r\nexport const TriggerSave = createAction(\r\n '[TILE Site Visualization] Trigger Save',\r\n (reload: boolean, siteVisualization: SiteVisualization) => ({ reload, siteVisualization })\r\n);\r\n\r\nexport const TriggerLinkDelete = createAction(\r\n '[TILE Site Visualization] Trigger Link Delete',\r\n (linkToDelete: SiteVisualizationMarker) => ({ linkToDelete })\r\n);\r\n\r\nexport const TriggerLinkDeleteComplete = createAction('[TILE Site Visualization] Trigger Link Delete Complete');\r\n","import { createAction } from '@ngrx/store';\r\nimport { SystemNotificationEmailConfig } from '../models/system-notification-email-config.model';\r\n\r\n\r\nexport const Load = createAction('[System Notification Email Config] Load');\r\n\r\nexport const SetLoading = createAction(\r\n '[System Notification Email Config] Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[System Notification Email Config] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[System Notification Email Config] Load Success',\r\n (emailConfig: SystemNotificationEmailConfig[]) => ({ emailConfig })\r\n);\r\n\r\n","/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n/* Models */\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { RuntimeDateRange } from '@rfv/modules/tiles/models/runtime-date-range.model';\r\nimport { RuntimeTileDateRange } from '@rfv/modules/core/enums';\r\n\r\nexport const Load = createAction('[TILE Runtime Metrics] Load Unit Runtime', (dateRange: RuntimeTileDateRange) => ({ dateRange }));\r\nexport const LoadFail = createAction('[TILE Runtime Metrics] Load Unit Runtime Fail', (error: HttpErrorResponse) => ({ error }));\r\nexport const LoadSuccess = createAction('[TILE Runtime Metrics] Load Unit Runtime Success', (dateRange: RuntimeDateRange) => ({ dateRange }));\r\n\r\nexport const SetSelectedAssetId = createAction('[TILE Runtime Metrics] Set Selected Unit Id', (assetId: number) => ({ assetId }));\r\nexport const SetSelectedDateRange = createAction('[TILE Runtime Metrics] Set Selected Date Range', (dateRangeIndex: number) => ({ dateRangeIndex }));\r\n\r\nexport const Clear = createAction('[TILE Runtime Metrics] Clear');\r\n","import { UntypedFormGroup } from '@angular/forms';\r\nimport { createAction } from '@ngrx/store';\r\nimport { ApiError, User, UserGroup } from '@rfv/modules/core/models';\r\n\r\nexport const LoadByCustomerId = createAction('[Core] Load User Groups By Customer Id', (\r\n sitemapGroupId?: number,\r\n userGroupId?: number,\r\n customerId?: number) => ({ sitemapGroupId, userGroupId, customerId }));\r\n\r\nexport const LoadByCustomerIdFail = createAction('[Core] Load User Groups Customer By Id Fail', (error: ApiError) => ({ error }));\r\nexport const LoadByCustomerIdSuccess = createAction('[Core] Load User Groups By Customer Id Success', (userGroups: UserGroup[]) => ({ userGroups: userGroups }));\r\n\r\nexport const LoadAccessUsers = createAction('[Core] Load Access Users', (customerId: number, userIds: number[]) => ({ customerId, userIds }));\r\nexport const LoadAccessUsersFail = createAction('[Core] Load Access Users Fail', (error: ApiError) => ({ error }));\r\nexport const LoadAccessUsersSuccess = createAction('[Core] Load Access Users Success', (defaultUserGroupId: number, users: User[]) => ({ defaultUserGroupId, users }));\r\n\r\nexport const SaveAccessUsers = createAction('[Core] Save Access Users', (\r\n customerId: number, //target customerId\r\n editableAccessUsers: UntypedFormGroup[], //target userIds\r\n selectedUsersIds: number[] //used to reload screen\r\n) => ({ customerId, editableAccessUsers, selectedUsersIds }));\r\n\r\nexport const SaveAccessUsersFail = createAction('[Core] Save Access Users Fail', (error: ApiError) => ({ error }));\r\nexport const SaveAccessUsersSuccess = createAction('[Core] Save Access Users Success');\r\n\r\nexport const RemoveAccessUser = createAction('[Core] Remove Access User', (userId: number) => ({ userId }));\r\n","import { createAction } from '@ngrx/store';\r\nimport { SystemCatInspection } from '../models/system-cat-inspection.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[System Cat Inspection Tile] Load',\r\n (sitemapGroupId: number) => ({ sitemapGroupId })\r\n);\r\n\r\nexport const SetLoading = createAction(\r\n '[System Cat Inspection Tile] Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[System Cat Inspection Tile] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[System Cat Inspection Tile] Load Success',\r\n (inspectionItems: SystemCatInspection[]) => ({ inspectionItems })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\nimport { SystemNotificationCommType } from '../models/system-notification-comm-type.model';\r\n\r\n\r\nexport const Load = createAction('[System Notification Comm Type] Load');\r\n\r\nexport const SetLoading = createAction(\r\n '[System Notification Comm Type] Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[System Notification Comm Type] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[System Notification Comm Type] Load Success',\r\n (commTypes: SystemNotificationCommType[]) => ({ commTypes })\r\n);\r\n\r\n","import { createAction } from '@ngrx/store';\r\nimport { SystemNotificationSubscriptionItem } from '../models/system-notification-subscription-item.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[System Notification Subscription Item] Load',\r\n (notificationSubscriptionTypeId: number) => ({ notificationSubscriptionTypeId })\r\n);\r\n\r\nexport const SetLoading = createAction(\r\n '[System Notification Subscription Item] Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[System Notification Subscription Item] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[System Notification Subscription Item] Load Success',\r\n (subscriptionItems: SystemNotificationSubscriptionItem) => ({ subscriptionItems })\r\n);\r\n\r\n","import { createAction } from '@ngrx/store';\r\nimport { SystemNotificationSubscriptionType } from '../models/system-notification-subscription-type.model';\r\n\r\n\r\nexport const Load = createAction('[System Notification Subscription Type] Load');\r\n\r\nexport const SetLoading = createAction(\r\n '[System Notification Subscription Type] Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[System Notification Subscription Type] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[System Notification Subscription Type] Load Success',\r\n (subscriptionTypes: SystemNotificationSubscriptionType[]) => ({ subscriptionTypes })\r\n);\r\n\r\n","import { createAction } from '@ngrx/store';\r\nimport { SystemNotificationFilter } from '../models/system-notification-filter.model';\r\nimport { SystemNotificationUser } from '../models/system-notification-user.model';\r\n\r\n\r\nexport const Load = createAction(\r\n '[System Notification User List] Load',\r\n (selectedFilters: SystemNotificationFilter) => ({ selectedFilters })\r\n);\r\n\r\nexport const SetLoading = createAction(\r\n '[System Notification User List] Set Loading',\r\n (loading: boolean) => ({ loading })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[System Notification User List] Load Fail',\r\n (error: string) => ({ error })\r\n);\r\n\r\nexport const LoadSuccess = createAction(\r\n '[System Notification User List] Load Success',\r\n (users: SystemNotificationUser[]) => ({ users })\r\n);\r\n\r\n","import { TileUnitDataResponse } from '../models/unit-data.model';\r\n\r\n/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\n\r\nexport const Load = createAction('[TILE Unit Data] Load');\r\n\r\nexport const LoadSuccess = createAction(\r\n '[TILE Unit Data] Load Success',\r\n (unitData: TileUnitDataResponse) => ({ unitData })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[TILE Unit Data] Load Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n\r\nexport const Clear = createAction('[TILE Unit Data] Clear');\r\n","import { TileUnitInfoResponse } from '@rfv/modules/tiles/models/unit-info-response.model';\r\n\r\n/* NgRx */\r\nimport { createAction } from '@ngrx/store';\r\n\r\nexport const Load = createAction('[TILE Unit Info] Load');\r\n\r\nexport const LoadSuccess = createAction(\r\n '[TILE Unit Info] Load Success',\r\n (unitInfo: TileUnitInfoResponse) => ({ unitInfo })\r\n);\r\n\r\nexport const LoadFail = createAction(\r\n '[TILE Unit Info] Load Fail',\r\n (errorMessage: string) => ({ errorMessage })\r\n);\r\n","import { createFeatureSelector, createReducer, createSelector, on } from '@ngrx/store';\r\n\r\n/* NgRx */\r\nimport { systemAlarmsTileActions, unitAlarmsTileActions } from '../actions';\r\n\r\nimport * as fromCore from \"@rfv/modules/core/store\";\r\n\r\nimport { TilesState } from '@rfv/modules/tiles/reducers';\r\nimport { AlarmsTileData } from '../models/alarms-tile-data.model';\r\n\r\nexport interface AlarmsTileState {\r\n data: AlarmsTileData[];\r\n loading: boolean;\r\n loaded: boolean;\r\n error: string;\r\n}\r\n\r\nconst initialState: AlarmsTileState = {\r\n data: [],\r\n loading: false,\r\n loaded: false,\r\n error: null\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(\r\n systemAlarmsTileActions.Load,\r\n unitAlarmsTileActions.Load,\r\n state => ({\r\n ...state,\r\n loading: true\r\n })),\r\n on(\r\n systemAlarmsTileActions.SetLoading,\r\n unitAlarmsTileActions.SetLoading,\r\n state => ({\r\n ...initialState\r\n })),\r\n on(\r\n systemAlarmsTileActions.LoadSuccess,\r\n unitAlarmsTileActions.LoadSuccess,\r\n (state, { allAlarmsTileData }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n data: allAlarmsTileData,\r\n error: null\r\n })),\r\n on(\r\n systemAlarmsTileActions.LoadFailure,\r\n unitAlarmsTileActions.LoadFailure,\r\n (state, { error }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n data: [],\r\n error: error \r\n }))\r\n);\r\n\r\nexport const getTilesState = createFeatureSelector('tiles');\r\n\r\nexport const getAllData = createSelector(\r\n getTilesState,\r\n state => state && state.alarmsTile.data\r\n);\r\n\r\nexport const getLoading = createSelector(\r\n getTilesState,\r\n state => state && state.alarmsTile.loading\r\n);\r\n\r\nexport const getLoaded = createSelector(\r\n getTilesState,\r\n state => state && state.alarmsTile.loaded\r\n);\r\n\r\nexport const getErrorMessage = createSelector(\r\n getTilesState,\r\n state => state && state.alarmsTile.error\r\n);\r\n\r\nexport const getTotalAlarmsCount = createSelector(\r\n getAllData,\r\n alarmGroups => {\r\n return alarmGroups.reduce((accumulator, { AlarmCount: currentCount }) => {\r\n return accumulator += currentCount;\r\n }, 0);\r\n }\r\n);\r\n\r\nexport const getChartData = createSelector(\r\n fromCore.UserSession.getSessionThemeId,\r\n getAllData,\r\n (themeId, alarmGroups) => {\r\n const backgroundColor = themeId === 1 ? \"#2A2A2A\" : \"#D5D5D5\";\r\n const textColor = themeId === 1 ? \"#D5D5D5\" : \"#2A2A2A\";\r\n const tickColor = themeId === 1 ? \"#212121\" : \"828282\";\r\n\r\n let categories = [];\r\n\r\n const series = {\r\n type: 'column',\r\n name: 'count',\r\n data: [ ]\r\n };\r\n\r\n for (const alarmGroup of alarmGroups) {\r\n const chartItem = {\r\n name: alarmGroup.AlarmGroup,\r\n y: alarmGroup.AlarmCount,\r\n color: `#${alarmGroup.AlarmGroupColor}`,\r\n };\r\n series.data = [ ...series.data, chartItem ];\r\n categories = [...categories, alarmGroup.AlarmGroup];\r\n }\r\n\r\n return {\r\n chart: {\r\n type: \"column\",\r\n backgroundColor: \"transparent\",\r\n reflow: true,\r\n plotBorderWidth: 0,\r\n plotShadow: false\r\n },\r\n title: {\r\n text: \"\"\r\n },\r\n subtitle: {\r\n text: \"\"\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n xAxis: {\r\n type: \"category\",\r\n categories,\r\n labels: {\r\n style: {\r\n fontSize: \"12px\",\r\n color: textColor\r\n }\r\n },\r\n gridLineWidth: 1 / Number.MAX_SAFE_INTEGER\r\n },\r\n yAxis: {\r\n title: {\r\n text: \"\"\r\n },\r\n labels: {\r\n style: {\r\n fontSize: \"12px\",\r\n fontFamily: \"Roboto\",\r\n color: textColor\r\n }\r\n },\r\n lineWidth: 1 / Number.MAX_SAFE_INTEGER,\r\n lineColor: backgroundColor,\r\n tickColor: tickColor\r\n },\r\n legend: {\r\n enabled: false\r\n },\r\n categories,\r\n series: [ series ],\r\n tooltip: {\r\n shared: true,\r\n useHTML: true,\r\n borderWidth: 0,\r\n borderRadius: 0,\r\n headerFormat: '

    {point.key}

    ',\r\n backgroundColor: backgroundColor,\r\n shadow: true,\r\n style: {\r\n color: textColor,\r\n fontSize: \"12px\"\r\n }\r\n },\r\n plotOptions: {\r\n bar: {\r\n animation: {\r\n duration: 1000\r\n },\r\n dataLabels: {\r\n enabled: false\r\n },\r\n grouping: false\r\n },\r\n series: {\r\n stacking: \"normal\",\r\n borderColor: \"undefined\",\r\n animation: true,\r\n dataLabels: {\r\n enabled: false\r\n }\r\n }\r\n },\r\n credits: {\r\n enabled: false\r\n }\r\n };\r\n }\r\n);\r\n","import { DataPointsEditorModel } from '@rfv/modules/tiles/models/data-points-editor.model';\r\nimport { dataPointsEditorActions } from '../actions';\r\nimport { createEntityAdapter, EntityState } from '@ngrx/entity';\r\nimport { createFeatureSelector, createReducer, createSelector, on } from '@ngrx/store';\r\nimport { TilesState } from '@rfv/modules/tiles/reducers/index';\r\nimport { DataPointsEditorUpdateModel } from '@rfv/modules/tiles/models/data-points-editor-update.model';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\n\r\nexport interface DataPointsEditorTileState extends EntityState{\r\n selectedDataPoint: DataPointsEditorUpdateModel;\r\n isLoading: boolean;\r\n isUpdating: boolean;\r\n error: ApiError\r\n}\r\n\r\nexport const adapter = createEntityAdapter({\r\n selectId: dataPoint => `${dataPoint.name}-${dataPoint.unitsOfMeasureId}`,\r\n sortComparer: false\r\n})\r\n\r\nconst initialState: DataPointsEditorTileState = adapter.getInitialState({\r\n selectedDataPoint: null,\r\n isLoading: false,\r\n isUpdating: false,\r\n error: null\r\n})\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(dataPointsEditorActions.Load, state => ({\r\n ...state,\r\n isLoading: true,\r\n error: null\r\n })),\r\n on(dataPointsEditorActions.LoadSuccess, (state, { payload }) => {\r\n return adapter.setAll(payload, {\r\n ...state,\r\n isLoading: false\r\n });\r\n }),\r\n on(dataPointsEditorActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n error: error\r\n })),\r\n on(dataPointsEditorActions.Update, state => ({\r\n ...state,\r\n isUpdating: true,\r\n error: null\r\n })),\r\n on(dataPointsEditorActions.UpdateSuccess, state => ({\r\n ...state,\r\n isUpdating: false\r\n })),\r\n on(dataPointsEditorActions.UpdateFail, (state, { error }) => ({\r\n ...state,\r\n isUpdating: false,\r\n error: error\r\n })),\r\n on(dataPointsEditorActions.SetSelectedDataPoint, (state, { payload }) => ({\r\n ...state,\r\n selectedDataPoint: payload\r\n })),\r\n on(dataPointsEditorActions.ClearSelectedDataPoint, state => ({\r\n ...state,\r\n selectedDataPoint: null\r\n }))\r\n);\r\n\r\nconst getFeatureState = createFeatureSelector('tiles');\r\nconst getState = createSelector(getFeatureState, state => state.dataPointsEditor);\r\n\r\nexport const {\r\n selectAll: getAll\r\n} = adapter.getSelectors(getState);\r\n\r\nexport const getSelectedDataPoint = createSelector(getState, state => state.selectedDataPoint);\r\nexport const getIsLoading = createSelector(getState, state => state.isLoading);\r\nexport const getIsUpdating = createSelector(getState, state => state.isUpdating);\r\nexport const getError = createSelector(getState, state => state.error);\r\n","\r\n/* NgRx */\r\nimport { Action, createFeatureSelector, createReducer, createSelector, on } from '@ngrx/store';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { runtimeMetricsTileActions } from '../actions';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { TilesState } from '@rfv/modules/tiles/reducers/index';\r\nimport * as fromRuntimeSettings from '@rfv/modules/dashboard/modules/runtime-settings/store/event-calculation/selectors';\r\n\r\n/* Models */\r\nimport { RuntimeDateRange } from '@rfv/modules/tiles/models/runtime-date-range.model';\r\nimport { RuntimeChart } from '@rfv/modules/tiles/models/runtime-chart.model';\r\nimport { Options } from 'highcharts';\r\nimport { AppColors } from '@rfv/modules/shared/types/app-colors';\r\n\r\nexport interface TileRuntimeMetricsState {\r\n assetId: number | null;\r\n selectedDateRange: number;\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n data: RuntimeDateRange[];\r\n error: HttpErrorResponse | null;\r\n}\r\n\r\nconst initialState: TileRuntimeMetricsState = {\r\n assetId: null,\r\n selectedDateRange: 0,\r\n isLoading: false,\r\n isLoaded: false,\r\n data: [],\r\n error: null\r\n};\r\n\r\nconst runtimeMetricsTileReducer = createReducer(\r\n initialState,\r\n\r\n on(runtimeMetricsTileActions.Load, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false\r\n })),\r\n\r\n on(runtimeMetricsTileActions.LoadFail, (state, { error }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: false,\r\n data: null,\r\n error\r\n })),\r\n\r\n on(runtimeMetricsTileActions.LoadSuccess, (state, { dateRange }) => ({\r\n ...state,\r\n isLoading: false,\r\n isLoaded: true,\r\n data: [...state.data, dateRange],\r\n error: null\r\n })),\r\n\r\n on(runtimeMetricsTileActions.SetSelectedAssetId, (state, { assetId }) => ({\r\n ...state,\r\n assetId\r\n })),\r\n\r\n on(runtimeMetricsTileActions.SetSelectedDateRange, (state, { dateRangeIndex }) => ({\r\n ...state,\r\n selectedDateRange: dateRangeIndex\r\n })),\r\n\r\n on(runtimeMetricsTileActions.Clear, () => initialState)\r\n);\r\n\r\nexport function reducer(state = initialState, action: Action) {\r\n return runtimeMetricsTileReducer(state, action);\r\n}\r\n\r\n/* Selectors */\r\nconst getTilesFeature = createFeatureSelector('tiles');\r\n\r\nconst getTileRuntimeMetricsState = createSelector(\r\n getTilesFeature,\r\n state => state && state.runtimeMetrics\r\n);\r\n\r\nexport const getLoading = createSelector(\r\n getTileRuntimeMetricsState,\r\n state => state && state.isLoading\r\n);\r\n\r\nexport const getLoaded = createSelector(\r\n getTileRuntimeMetricsState,\r\n state => state && state.isLoaded\r\n);\r\n\r\nexport const getError = createSelector(\r\n getTileRuntimeMetricsState,\r\n state => state && state.error\r\n);\r\n\r\nexport const getRuntimeMetricsData = createSelector(\r\n getTileRuntimeMetricsState,\r\n state => state && state.data\r\n);\r\n\r\nexport const getSelectedDateRangeIndex = createSelector(\r\n getTileRuntimeMetricsState,\r\n state => state.selectedDateRange\r\n);\r\n\r\nexport const getSelectedDateRange = createSelector(\r\n getRuntimeMetricsData,\r\n getSelectedDateRangeIndex,\r\n (data, dateRangeIndex) => data && data.find(runtimeData => runtimeData.Label === (dateRangeIndex === 0 ? 'Last 30 Days' : 'Month to Date'))\r\n);\r\n\r\nexport const getSelectedDateRangeString = createSelector(\r\n getSelectedDateRange,\r\n dateRange => dateRange && dateRange.DateRange\r\n);\r\n\r\nexport const getSelectedCharts = createSelector(\r\n getSelectedDateRange,\r\n fromRuntimeSettings.getEventCalculations,\r\n (dateRange, calculations) => {\r\n return dateRange && calculations && dateRange.Charts.map(chart => {\r\n return {\r\n ...chart,\r\n Value: isNaN(+chart.Value) ? chart.Value : Math.round(+chart.Value),\r\n Abbreviation: calculations[chart.Id] ? calculations[chart.Id].Abbr : chart.Label,\r\n };\r\n });\r\n }\r\n);\r\n\r\nexport const getSelectedChartsData = createSelector(\r\n getSelectedCharts,\r\n fromCore.UserSession.getSessionThemeId,\r\n (charts, themeID) => charts && charts.map(chart => createChartData(chart, themeID as 1 | 2))\r\n);\r\n\r\nexport const getTileResult = createSelector(\r\n getSelectedDateRange,\r\n fromRuntimeSettings.getEventCalculations,\r\n (dateRange, calculations) => {\r\n return dateRange && calculations && dateRange.Calculations.map(calculation => {\r\n return {\r\n ...calculation,\r\n Abbreviation: calculations[calculation.Id] ? calculations[calculation.Id].Abbr : calculation.Name,\r\n };\r\n });\r\n }\r\n);\r\n\r\n/*\r\n * Helper function to creating chart data for runtime\r\n */\r\nfunction createChartData(chart: RuntimeChart, themeID: 1 | 2): Options {\r\n const { Label, Value, Color, Units, Parties } = chart;\r\n const dimmedColor = themeID === 1 ? AppColors.black_l2 : AppColors.white_d2;\r\n\r\n return {\r\n title: {\r\n text: Value + Units,\r\n },\r\n subtitle: {\r\n text: Label\r\n },\r\n tooltip: {\r\n headerFormat: `${Label}: ${Value} ${Units}`,\r\n borderWidth: 1,\r\n padding: 2,\r\n borderRadius: 1,\r\n shared: true,\r\n split: false,\r\n enabled: Parties.length > 0,\r\n useHTML: true,\r\n style: {\r\n color: themeID === 1 ? AppColors.white_d2 : AppColors.gray\r\n },\r\n pointFormat: `\r\n
    \r\n Calculation:\r\n
    \r\n
    \r\n [Total Time] - [Total Time of ${Parties.join(', ')}]\r\n [Total Time]\r\n
    \r\n `\r\n },\r\n series: [\r\n {\r\n type: 'pie',\r\n data: [\r\n { y: Number(Value), color: '#' + Color },\r\n { y: 100 - Number(Value), color: dimmedColor }\r\n ]\r\n }\r\n ]\r\n };\r\n}\r\n","import { TileUnitDataResponse } from '../models/unit-data.model';\r\n\r\n/* NgRx */\r\nimport { unitDataActions } from '../actions';\r\nimport { TilesState } from './index';\r\n\r\nimport * as fromCore from '../../core/store';\r\n\r\nimport { createFeatureSelector, createReducer, createSelector, on } from '@ngrx/store';\r\nimport { Options } from 'highcharts';\r\nimport { TileUnitDataStatus } from '../models/unit-data-status.model';\r\nimport { DataItemInput } from '@rfv/modules/shared/model/data-item-input.model';\r\nimport { TileUnitDataEvent } from '../models/unit-data-event.model';\r\n\r\nexport interface TileUnitDataState {\r\n loaded: boolean;\r\n loading: boolean;\r\n data: TileUnitDataResponse | null;\r\n isCommandStateLoaded: boolean;\r\n isCommandStateLoading: boolean;\r\n commandState: number;\r\n error: string;\r\n}\r\n\r\nconst initialState: TileUnitDataState = {\r\n loaded: false,\r\n loading: false,\r\n data: null,\r\n isCommandStateLoaded: false,\r\n isCommandStateLoading: false,\r\n commandState: null,\r\n error: ''\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(unitDataActions.Load, state => ({\r\n ...state,\r\n loading: true\r\n })),\r\n on(unitDataActions.LoadSuccess, (state, { unitData }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n data: unitData,\r\n error: ''\r\n })),\r\n on(unitDataActions.LoadFail, (state, { errorMessage }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n data: null,\r\n error: errorMessage\r\n })),\r\n on(unitDataActions.Clear, state => initialState)\r\n);\r\n\r\n// Selectors\r\nconst getTilesFeature = createFeatureSelector('tiles');\r\n\r\nconst getTileUnitData = createSelector(\r\n getTilesFeature,\r\n state => state.unitData\r\n);\r\n\r\nexport const getUnitDataLoading = (assetId) => createSelector(\r\n fromCore.Assets.DatapointValues.isLoading(assetId),\r\n assetState => assetState\r\n);\r\n\r\nexport const getUnitDataLoaded = (assetId) => createSelector(\r\n fromCore.Assets.DatapointValues.isLoaded(assetId),\r\n assetState => assetState\r\n);\r\n\r\nexport const getCommandStateLoading = createSelector(\r\n getTileUnitData,\r\n state => state.isCommandStateLoading\r\n);\r\n\r\nexport const getCommandStateLoaded = createSelector(\r\n getTileUnitData,\r\n state => state.isCommandStateLoaded\r\n);\r\n\r\nexport const getUnitDataError = createSelector(\r\n getTileUnitData,\r\n state => state.error\r\n);\r\n\r\nexport const getUnitData = createSelector(\r\n getTileUnitData,\r\n state => state.data\r\n);\r\n\r\nexport const getChartData = createSelector(\r\n getUnitData,\r\n unitData => unitData && createChartData(unitData.Status)\r\n);\r\n\r\nexport const getSampleTime = createSelector(\r\n getUnitData,\r\n unitData => unitData && unitData.Event.SampleTime\r\n);\r\n\r\nexport const getEventData = createSelector(\r\n getUnitData,\r\n unitData => unitData && createEventData(unitData.Event)\r\n);\r\n\r\nexport const getDataItems = createSelector(\r\n getUnitData,\r\n unitData => unitData && unitData.DataItems\r\n);\r\n\r\nexport const getCommandState = createSelector(\r\n getTileUnitData, state => state.commandState\r\n);\r\n\r\nfunction createChartData(unitDataStatus: TileUnitDataStatus): Options {\r\n const { StatusLabel: titleText, DeviceStatusLabel: subtitleText, Color1, Color2 } = unitDataStatus;\r\n\r\n return {\r\n title: { text: titleText },\r\n subtitle: { text: subtitleText },\r\n plotOptions: {\r\n pie: {\r\n startAngle: -90,\r\n endAngle: 270\r\n }\r\n },\r\n series: [\r\n {\r\n type: 'pie',\r\n data: [\r\n {\r\n name: 'Unit Status',\r\n y: 1,\r\n color: `#${Color1}`,\r\n dataLabels: {\r\n enabled: false\r\n }\r\n },\r\n {\r\n name: 'Comms Loss',\r\n y: 1,\r\n color: `#${Color2}`,\r\n dataLabels: {\r\n enabled: false\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n}\r\n\r\nfunction createEventData(dataEvent: TileUnitDataEvent): DataItemInput {\r\n return {\r\n value: dataEvent.LabelValue,\r\n dividerColor: dataEvent.Color1,\r\n label: dataEvent.Name\r\n };\r\n}\r\n","import { getSelectedAssetStatus } from './../../core/store/assets/status/selectors';\r\n/* NgRx */\r\nimport { createFeatureSelector, createSelector, createReducer, on } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { unitInfoActions } from '../actions';\r\nimport { TilesState } from './index';\r\n\r\nimport { TileUnitInfoResponse } from '@rfv/modules/tiles/models/unit-info-response.model';\r\nimport { getSelectedAsset } from '@rfv/modules/dashboard/store';\r\nimport { IMapMarker } from '@rfv/modules/involve/map/marker';\r\nimport { TileUnitInfoMap } from '../models/unit-info-map.model';\r\n\r\nexport interface TileUnitInfoState {\r\n loaded: boolean;\r\n loading: boolean;\r\n data: TileUnitInfoResponse | null;\r\n error: string;\r\n}\r\n\r\nconst initialState: TileUnitInfoState = {\r\n loaded: false,\r\n loading: false,\r\n data: null,\r\n error: ''\r\n};\r\n\r\nexport const reducer = createReducer(\r\n initialState,\r\n on(unitInfoActions.Load, state => ({\r\n ...state,\r\n loading: true\r\n })),\r\n on(unitInfoActions.LoadSuccess, (state, { unitInfo }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: true,\r\n data: unitInfo,\r\n error: ''\r\n })),\r\n on(unitInfoActions.LoadFail, (state, { errorMessage }) => ({\r\n ...state,\r\n loading: false,\r\n loaded: false,\r\n data: null,\r\n error: errorMessage\r\n }))\r\n);\r\n\r\n// Selectors\r\nconst getTilesFeature = createFeatureSelector('tiles');\r\n\r\nconst getTileUnitInfo = createSelector(\r\n getTilesFeature,\r\n state => state && state.unitInfo\r\n);\r\n\r\nexport const getUnitInfoLoading = createSelector(\r\n getTileUnitInfo,\r\n state => state && state.loading\r\n);\r\n\r\nexport const getUnitInfoLoaded = createSelector(\r\n getTileUnitInfo,\r\n state => state && state.loaded\r\n);\r\n\r\nexport const getUnitInfoError = createSelector(\r\n getTileUnitInfo,\r\n state => state && state.error\r\n);\r\n\r\nexport const getUnitInfoData = createSelector(\r\n getTileUnitInfo,\r\n state => state && state.data\r\n);\r\n\r\nexport const getUnitInfoComponents = createSelector(\r\n getUnitInfoData,\r\n unitInfoData => {\r\n return unitInfoData?.Components.map(component => {\r\n return {\r\n Name: component.Name,\r\n Info: component.Info.filter(info => info.Value && info.Value !== \"0\")\r\n }\r\n }).filter(component => component.Info.length > 0);\r\n }\r\n);\r\n\r\nexport const getUnitInfoUnitInformation = createSelector(\r\n getUnitInfoData,\r\n state => state && state.UnitInformation.map(component => {\r\n return {\r\n Name: component.Name,\r\n Info: component.Info.filter(info => info.Value && info.Value !== \"0\")\r\n }\r\n }).filter(component => component.Info.length > 0)\r\n);\r\n\r\nexport const getUnitInfoMap = createSelector(\r\n getUnitInfoData,\r\n getSelectedAsset,\r\n fromCore.UnitStates.getEntities,\r\n getSelectedAssetStatus,\r\n (state, selectedAsset, entities, status) => {\r\n if (state && entities && status) {\r\n const mapData = state.Map;\r\n const { Latitude, Longitude } = mapData;\r\n const { id, color1, color2, name: statusName } = entities[status.runStatus.unitStateId];\r\n\r\n return {\r\n id: selectedAsset.id,\r\n iconId: 'unitState-' + id,\r\n name: selectedAsset.name,\r\n title: statusName,\r\n latitude: Latitude,\r\n longitude: Longitude,\r\n color1: `#${color1}`,\r\n color2: `#${color2}`,\r\n data: mapData\r\n } as IMapMarker;\r\n }\r\n }\r\n);\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nimport { BannerOptions } from './options';\r\n\r\nexport const Show = createAction('[Banner] Show', props<{\r\n options: BannerOptions\r\n}>());\r\n\r\nexport const Hide = createAction('[Banner] Hide');","import { Injectable } from '@angular/core';\r\n\r\nimport { timer } from 'rxjs';\r\nimport { delayWhen, filter, map, tap } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as BannerActions from './actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions\r\n ) { }\r\n\r\n // moved into the layout effects\r\n // TODO: @modonnell action will still emit even if the user closed the banner...\r\n // public show$ = createEffect(\r\n // () => this._actions$.pipe(\r\n // ofType(BannerActions.Show),\r\n // tap(daco => console.log('before filter: ')),\r\n // filter(action => action.options && action.options.autoClose ? true : false),\r\n // map(action => action.options.autoClose === true ? this.defaultDelayToHide : action.options.autoClose as number),\r\n // delayWhen(time => timer(time)),\r\n // tap(daco => console.log('after delayWhen: ', daco)),\r\n // map(_ => BannerActions.Hide())\r\n // )\r\n // );\r\n}","import { BannerOptions } from './options';\r\n\r\nexport interface State {\r\n options: BannerOptions;\r\n isOpen: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n options: null,\r\n isOpen: false\r\n};","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\nimport * as BannerActions from './actions';\r\n\r\nexport const bannerReducer = createReducer(\r\n initialState,\r\n on(BannerActions.Show, (state, { options }) => ({\r\n ...state,\r\n options: {\r\n type: options.type,\r\n message: options.message,\r\n autoClose: options.autoClose,\r\n height: options.height || 40\r\n },\r\n isOpen: true\r\n })),\r\n on(BannerActions.Hide, state => ({\r\n ...state,\r\n isOpen: false\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return bannerReducer(state, action);\r\n}","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from '../state';\r\n\r\nexport const getState = createFeatureSelector('banner');\r\n\r\nexport const getOptions = createSelector(getState, state => state.options);\r\nexport const isOpen = createSelector(getState, state => state.isOpen);\r\n","import { createAction } from '@ngrx/store';\r\nimport { ApiError } from '@rfv/modules/core/models';\r\n\r\nimport { UserEulaSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-eula-settings.modal';\r\n\r\nexport const LoadEula = createAction('[Eula] Load Eula');\r\n\r\nexport const LoadEulaFail = createAction('[Eula] Load Eula Fail',\r\n (error: ApiError) => error);\r\n\r\nexport const LoadEulaSuccess = createAction('[Eula] Load Eula Success',\r\n (eulaSettings: UserEulaSettings) => ({ eulaSettings }));\r\n\r\nexport const SaveEula = createAction('[Eula] Save Eula',\r\n (eulaId: number) => ({ eulaId }));\r\n\r\nexport const SaveEulaFail = createAction('[Eula] Save Eula Fail',\r\n (error: ApiError) => (error));\r\n\r\nexport const SaveEulaSuccess = createAction('[Eula] Save Eula Success');\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { UserEulaSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-eula-settings.modal'; \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EulaService {\r\n\r\n constructor(\r\n private _http: HttpClient\r\n ) { }\r\n\r\n loadEula() {\r\n return this._http.get(`/v1/userSettings/eula`);\r\n }\r\n\r\n saveEula(eulaId: number) {\r\n return this._http.post(`/v1/userSettings/eula`, null, {\r\n params: { eulaId: eulaId.toString() }\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\n\r\nimport { EulaService } from '@rfv/modules/core/services/eula.service';\r\n\r\nimport * as EulaActions from './actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _eulaService: EulaService\r\n ) { }\r\n\r\n public getEula$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(EulaActions.LoadEula),\r\n switchMap(() => this._eulaService.loadEula().pipe(\r\n map(eulaSettings => EulaActions.LoadEulaSuccess(eulaSettings)),\r\n catchError(error => of(EulaActions.LoadEulaFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public saveEula$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(EulaActions.SaveEula),\r\n switchMap(action => this._eulaService.saveEula(action.eulaId).pipe(\r\n mergeMap(() => [\r\n EulaActions.SaveEulaSuccess(),\r\n EulaActions.LoadEula(),\r\n ]),\r\n catchError(error => of(EulaActions.SaveEulaFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { ApiError } from '@rfv/modules/core/models';\r\nimport { UserEulaSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-eula-settings.modal';\r\n\r\nexport interface State {\r\n eulaSettings: UserEulaSettings\r\n\r\n isLoading: boolean;\r\n isLoaded: boolean;\r\n isSaving: boolean;\r\n\r\n error: ApiError | null;\r\n}\r\n\r\nexport const initialState: State = {\r\n eulaSettings: null,\r\n isLoading: false,\r\n isLoaded: false,\r\n isSaving: false,\r\n\r\n error: null,\r\n}","import { Action, createReducer, on } from '@ngrx/store';\r\nimport { State, initialState } from './state';\r\n\r\nimport * as EulaActions from './actions';\r\n\r\n\r\nconst eulaReducer = createReducer(\r\n initialState,\r\n\r\n on(EulaActions.LoadEula, (state) => ({\r\n ...state,\r\n isLoading: true,\r\n isLoaded: false,\r\n eulaSettings: null\r\n })),\r\n\r\n on(EulaActions.LoadEulaFail, (state, error) => ({\r\n ...state,\r\n isLoaded: false,\r\n isLoading: false,\r\n error: error\r\n })),\r\n\r\n on(EulaActions.LoadEulaSuccess, (state, payload) => ({\r\n ...state,\r\n eulaSettings: payload.eulaSettings,\r\n isLoaded: true,\r\n isLoading: false,\r\n error: null\r\n })),\r\n\r\n on(EulaActions.SaveEula, (state) => ({\r\n ...state,\r\n isSaving: true,\r\n })),\r\n\r\n on(EulaActions.SaveEulaFail, (state, error) => ({\r\n ...state,\r\n isSaving: false,\r\n error: error\r\n })),\r\n\r\n on(EulaActions.SaveEulaSuccess, (state) => ({\r\n ...state,\r\n isSaving: false,\r\n })),\r\n\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return eulaReducer(state, action);\r\n}","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from '../state';\r\n\r\nexport const getState = createFeatureSelector('eula');\r\n\r\nexport const getEulaSettings = createSelector(getState, state => state.eulaSettings);\r\n\r\nexport const getEulaPdf = createSelector(getEulaSettings, state => state?.EulaFileName? state.EulaFileName : null);\r\n\r\nexport const getEulaAccepted = createSelector(getEulaSettings, state => state.isAccepted);\r\n\r\nexport const isEulaLoading = createSelector(getState, state => state.isLoading);\r\n\r\n","import { createAction, props } from '@ngrx/store';\r\n\r\nexport const ToggleMobile = createAction('[Layout] Toggle Mobile', (enabled: boolean) => ({ enabled }));\r\n\r\n//\r\n// Main Menu (side nav)\r\n//\r\n\r\nexport const OpenMainMenu = createAction('[Layout] Open MainMenu');\r\nexport const CloseMainMenu = createAction('[Layout] Close MainMenu');\r\nexport const ToggleMainMenu = createAction('[Layout] Toggle MainMenu');\r\n\r\n//\r\n// Sitemap\r\n//\r\n\r\nexport const OpenSitemap = createAction('[Layout] Open Sitemap');\r\nexport const CloseSitemap = createAction('[Layout] Close Sitemap');\r\nexport const ToggleSitemap = createAction('[Layout] Toggle Sitemap');\r\n\r\n//\r\n// Favorites\r\n//\r\n\r\nexport const OpenFavorites = createAction('[Layout] Open Favorites');\r\nexport const CloseFavorites = createAction('[Layout] Close Favorites');\r\nexport const ToggleFavorites = createAction('[Layout] Toggle Favorites');\r\n\r\n//\r\n// Global Filters\r\n//\r\n\r\nexport const OpenGlobalFilter = createAction('[Layout] Open Global Filter');\r\nexport const CloseGlobalFilter = createAction('[Layout] Close Global Filter');\r\nexport const ToggleGlobalFilter = createAction('[Layout] Toggle Global Filter');\r\n\r\n//\r\n// Drawers\r\n//\r\n\r\nexport const OpenDrawer = createAction('[Layout] Open Drawer', props<{\r\n id?: number\r\n}>());\r\n\r\nexport const CloseDrawer = createAction('[Layout] Close Drawer', props<{\r\n id?: number\r\n}>());\r\n\r\nexport const ToggleDrawer = createAction('[Layout] Toggle Drawer', props<{\r\n id?: number,\r\n}>());\r\n\r\n\r\n//\r\n// Forms\r\n//\r\n\r\nexport const MarkFormAsPristine = createAction('[Layout] Any Form Value Has Been Edited');\r\nexport const MarkFormAsDirty = createAction('[Layout] No Form Value Has Been Edited');","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nexport const getState = createFeatureSelector('layout');\r\n\r\nexport const isMainMenuOpen = createSelector(getState, state => state.isMainMenuOpen);\r\nexport const isSitemapOpen = createSelector(getState, state => state.isSitemapOpen);\r\nexport const isFavoritesOpen = createSelector(getState, state => state.isFavoritesOpen);\r\nexport const isGlobalFilterOpen = createSelector(getState, state => state.isGlobalFilterOpen);\r\n\r\nexport const isAnyMenuOpen = createSelector(getState, state => state.isMainMenuOpen || state.isSitemapOpen || state.isGlobalFilterOpen);\r\n\r\nexport const getSelectedDrawerId = createSelector(getState, state => state.selectedDrawerId);\r\nexport const getDrawerOpenState = createSelector(getState, state => state.drawerIsOpen);\r\n\r\nexport const getFormUpdateState = createSelector(getState, state => state.formValueUpdated);\r\n\r\nexport const isMobile = createSelector(getState, state => state.isMobile);","import { Injectable } from '@angular/core';\r\n\r\nimport { map, withLatestFrom, tap, filter, delayWhen, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as BannerActions from '@rfv/store/banner/actions';\r\n\r\nimport { State } from './state';\r\nimport * as LayoutActions from './actions';\r\n\r\nimport * as LayoutSelectors from './selectors';\r\nimport { timer } from 'rxjs';\r\nimport { MediaObserver } from '@angular/flex-layout';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n private readonly autoCloseDefaultTimeMs = 5000;\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store,\r\n private _media: MediaObserver\r\n ) { }\r\n\r\n public toggleMobile$ = createEffect(\r\n () => this._media.asObservable().pipe(\r\n distinctUntilChanged((a, b) => a[0].mqAlias === b[0].mqAlias), // event seems to fire multiple times?\r\n map(changes => LayoutActions.ToggleMobile(changes[0].mqAlias === 'xs' || changes[0].mqAlias === 'sm'))\r\n )\r\n );\r\n\r\n public toggleMainMenu$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LayoutActions.ToggleMainMenu),\r\n withLatestFrom(this._store.select(LayoutSelectors.isMainMenuOpen)),\r\n map(([action, isMainMenuOpen]) => isMainMenuOpen\r\n ? LayoutActions.CloseMainMenu()\r\n : LayoutActions.OpenMainMenu()\r\n )\r\n )\r\n );\r\n\r\n public toggleFavorites$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LayoutActions.ToggleFavorites),\r\n withLatestFrom(this._store.select(LayoutSelectors.isFavoritesOpen)),\r\n map(([action, isFavoritesOpen]) => isFavoritesOpen\r\n ? LayoutActions.CloseFavorites()\r\n : LayoutActions.OpenFavorites()\r\n )\r\n )\r\n );\r\n\r\n public toggleGlobalFilter$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LayoutActions.ToggleGlobalFilter),\r\n withLatestFrom(this._store.select(LayoutSelectors.isGlobalFilterOpen)),\r\n map(([action, isGlobalFilterOpen]) => isGlobalFilterOpen\r\n ? LayoutActions.CloseGlobalFilter()\r\n : LayoutActions.OpenGlobalFilter()\r\n )\r\n )\r\n );\r\n\r\n public toggleSitemap$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(LayoutActions.ToggleSitemap),\r\n withLatestFrom(\r\n this._store.select(LayoutSelectors.isSitemapOpen)\r\n ),\r\n map(([action, isSitemapOpen]) => isSitemapOpen\r\n ? LayoutActions.CloseSitemap()\r\n : LayoutActions.OpenSitemap()\r\n )\r\n )\r\n );\r\n\r\n public showBanner$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(BannerActions.Show),\r\n filter(action => action.options && action.options.autoClose ? true : false),\r\n delayWhen(\r\n action => timer(\r\n typeof action.options.autoClose === 'boolean' ? this.autoCloseDefaultTimeMs : action.options.autoClose\r\n )\r\n ),\r\n map(_ => BannerActions.Hide())\r\n )\r\n );\r\n}","export interface State {\r\n isMobile: boolean;\r\n isMainMenuOpen: boolean;\r\n isSitemapOpen: boolean;\r\n isFavoritesOpen: boolean;\r\n isGlobalFilterOpen: boolean;\r\n selectedDrawerId: number | null;\r\n drawerIsOpen: boolean;\r\n formValueUpdated: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n isMobile: false,\r\n isMainMenuOpen: false,\r\n isSitemapOpen: false,\r\n isFavoritesOpen: false,\r\n isGlobalFilterOpen: false,\r\n selectedDrawerId: null,\r\n drawerIsOpen: false,\r\n formValueUpdated: false\r\n};\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as LayoutActions from './actions';\r\nimport * as BannerActions from '../banner/actions';\r\n\r\nconst layoutReducer = createReducer(\r\n initialState,\r\n\r\n on(LayoutActions.ToggleMobile, (state, { enabled }) => ({\r\n ...state,\r\n isMobile: enabled\r\n })),\r\n\r\n //\r\n // Main Menu (side-nav)\r\n //\r\n\r\n on(LayoutActions.OpenMainMenu, state => ({\r\n ...state,\r\n isMainMenuOpen: true\r\n })),\r\n\r\n on(LayoutActions.CloseMainMenu, state => ({\r\n ...state,\r\n isMainMenuOpen: false,\r\n isSearchVisible: false\r\n })),\r\n\r\n //\r\n // Sitemap\r\n //\r\n\r\n on(LayoutActions.OpenSitemap, state => ({\r\n ...state,\r\n isGlobalFilterOpen: false,\r\n isSitemapOpen: true,\r\n })),\r\n\r\n on(LayoutActions.CloseSitemap, state => ({\r\n ...state,\r\n isSitemapOpen: false\r\n })),\r\n\r\n //\r\n // Favorites\r\n //\r\n\r\n on(LayoutActions.OpenFavorites, state => ({\r\n ...state,\r\n isSitemapOpen: false,\r\n isFavoritesOpen: true,\r\n isGlobalFilterOpen: false\r\n })),\r\n\r\n on(LayoutActions.CloseFavorites, state => ({\r\n ...state,\r\n isFavoritesOpen: false\r\n })),\r\n\r\n //\r\n // Global Filters\r\n //\r\n\r\n on(LayoutActions.OpenGlobalFilter, state => ({\r\n ...state,\r\n isSitemapOpen: false,\r\n isFavoritesOpen: false,\r\n isGlobalFilterOpen: true\r\n })),\r\n\r\n on(LayoutActions.CloseGlobalFilter, state => ({\r\n ...state,\r\n isGlobalFilterOpen: false\r\n })),\r\n\r\n on(BannerActions.Hide, state => ({\r\n ...state,\r\n isOpen: false\r\n })),\r\n\r\n //\r\n // Drawers\r\n //\r\n on(LayoutActions.ToggleDrawer, (state, { id }) => ({\r\n ...state,\r\n selectedDrawerId: id || null,\r\n drawerIsOpen: !state.drawerIsOpen\r\n })),\r\n\r\n on(LayoutActions.OpenDrawer, (state, { id }) => ({\r\n ...state,\r\n selectedDrawerId: id || null,\r\n drawerIsOpen: true\r\n })),\r\n\r\n on(LayoutActions.CloseDrawer, (state, { id }) => ({\r\n ...state,\r\n selectedDrawerId: id || null,\r\n drawerIsOpen: false\r\n })),\r\n\r\n //\r\n // Forms\r\n //\r\n on(LayoutActions.MarkFormAsDirty, state => ({\r\n ...state,\r\n formValueUpdated: true\r\n })),\r\n\r\n on(LayoutActions.MarkFormAsPristine, state => ({\r\n ...state,\r\n formValueUpdated: false\r\n })),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return layoutReducer(state, action);\r\n}\r\n","import { createAction, props } from '@ngrx/store';\r\nimport { ModalOptions } from './options';\r\n\r\nexport const Open = createAction('[Modal] Show', props<{\r\n options: ModalOptions\r\n}>());\r\nexport const Close = createAction('[Modal] Close');\r\n\r\nexport const CloseAlarmGroupDelete = createAction('[Modal] Close Alarm Group Delete');\r\nexport const OpenAlarmGroupDelete = createAction('[Modal] Show Alarm Group Delete', props<{\r\n options: {data: any}\r\n}>());\r\n\r\nexport const CloseAlarmGroupScheduleDelete = createAction('[Modal] Close Alarm Group Schedule Delete');\r\nexport const OpenAlarmGroupScheduleDelete = createAction('[Modal] Show Alarm Group Schedule Delete', props<{\r\n options: {data: any}\r\n}>());","import { ModalOptions } from './options';\r\n\r\nexport interface State {\r\n options: ModalOptions | any;\r\n isOpen: boolean;\r\n isAlarmGroupDeleteOpen: boolean;\r\n isAlarmGroupScheduleDeleteOpen: boolean;\r\n}\r\n\r\nexport const initialState: State = {\r\n options: null,\r\n isOpen: false,\r\n isAlarmGroupDeleteOpen: false,\r\n isAlarmGroupScheduleDeleteOpen: false\r\n\r\n// customClass: undefined,\r\n// modalType: ModalType.OkCancel,\r\n// contentType: ModalContentType.Text,\r\n// isOpen: false,\r\n// title: '',\r\n// data: '',\r\n// primaryText: 'Confirm',\r\n// primaryAction: null,\r\n// secondaryText: 'Cancel',\r\n// secondaryAction: null,\r\n// tertiaryText: '',\r\n// tertiaryAction: null,\r\n// confirmed: false\r\n};\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as ModalActions from './actions';\r\n\r\nexport const modalReducer = createReducer(\r\n initialState,\r\n on(ModalActions.Open, (state, { options }) => ({\r\n ...state,\r\n options,\r\n isOpen: true\r\n })),\r\n on(ModalActions.Close, state => ({\r\n ...state,\r\n isOpen: false\r\n })),\r\n on(ModalActions.OpenAlarmGroupDelete, (state, { options }) => ({\r\n ...state,\r\n options,\r\n isAlarmGroupDeleteOpen: true\r\n })),\r\n on(ModalActions.CloseAlarmGroupDelete, state => ({\r\n ...state,\r\n isAlarmGroupDeleteOpen: false\r\n })),\r\n on(ModalActions.OpenAlarmGroupScheduleDelete, (state, { options }) => ({\r\n ...state,\r\n options,\r\n isAlarmGroupScheduleDeleteOpen: true\r\n })),\r\n on(ModalActions.CloseAlarmGroupScheduleDelete, state => ({\r\n ...state,\r\n isAlarmGroupScheduleDeleteOpen: false\r\n }))\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return modalReducer(state, action);\r\n}","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from '../state';\r\n\r\nexport const getState = createFeatureSelector('modal');\r\n\r\nexport const getOptions = createSelector(getState, state => state.options);\r\nexport const isOpen = createSelector(getState, state => state.isOpen);\r\nexport const isAlarmGroupDeleteOpen = createSelector(getState, state => state.isAlarmGroupDeleteOpen);\r\nexport const isAlarmGroupScheduleDeleteOpen = createSelector(getState, state => state.isAlarmGroupScheduleDeleteOpen);","import { Action } from \"@ngrx/store\";\r\n\r\nexport enum ModalType {\r\n Ok = \"Ok\",\r\n Cancel = \"Cancel\",\r\n OkCancel = \"OkCancel\",\r\n YesNoCancel = \"YesNoCancel\",\r\n handleActions = \"handleActions\",\r\n NoButtons = \"NoButtons\",\r\n Loading = \"Loading\",\r\n}\r\n\r\nexport enum ModalContentType {\r\n Text = \"Text\",\r\n TextLeft = \"TextLeft\",\r\n Units = \"Units\",\r\n AlarmUpdate = \"AlarmUpdate\",\r\n ReportScheduleUpdate = \"ReportScheduleUpdate\",\r\n ReportScheduleDelete = \"ReportScheduleDelete\",\r\n TroubleShootingLinks = \"TroubleShootingLinks\",\r\n DeviceComms = \"DeviceComms\",\r\n CopyUserPermissions = \"CopyUserPermissions\",\r\n ReplaceJobTitle = \"ReplaceJobTitle\",\r\n UserUnitAccess = \"UserUnitAccess\",\r\n UserRecipients = \"UserRecipients\",\r\n ThresholdEditor = \"ThresholdEditor\",\r\n EventCode = \"EventCode\",\r\n DeviceInfoClear = \"DeviceInfoClear\",\r\n AssignDataPointDelete = \"AssignDataPointDelete\",\r\n DataPointOccurrenceEditor = \"DataPointOccurrenceEditor\",\r\n DataPointEditor = \"DataPointEditor\",\r\n AssessmentRecommendation = \"AssessmentRecommendation\",\r\n AssessmentImport = \"AssessmentImport\",\r\n AssociateStreamingConfig = \"AssociateStreamingConfig\",\r\n ViewVimsAssets = \"ViewVimsAssets\",\r\n CreateVims = \"CreateVims\",\r\n CreateDealerVims = \"CreateDealerVims\",\r\n RemoveDealerVims = \"RemoveDealerVims\",\r\n OnboardingEventLog = \"OnboardingEventLog\",\r\n UserLog = \"UserLog\",\r\n DeleteSuppressingAlarm = \"DeleteSuppressingAlarm\",\r\n DeleteSection = \"DeleteSection\",\r\n CopyDerivedDatapoint = \"CopyDerivedDatapoint\",\r\n UnsubscribeAlertSchedule = \"UnsubscribeAlertSchedule\",\r\n MarineAssetModifyRuntimeEvent = \"MarineAssetModifyRuntimeEvent\",\r\n ControlConfirm = \"ControlConfirm\"\r\n}\r\n\r\nexport interface ModalOptions {\r\n hasStatus?: boolean;\r\n customClass?: string;\r\n customWidth?: string;\r\n modalType: ModalType;\r\n contentType: ModalContentType;\r\n title: string;\r\n title2?: string;\r\n data: any;\r\n primaryText?: string;\r\n primaryAction?: Action;\r\n primaryActionCallback?: Function | null;\r\n secondaryText?: string;\r\n secondaryAction?: Action;\r\n secondaryActionCallback?: Function | null;\r\n closeAction?: Action;\r\n tertiaryText?: string;\r\n tertiaryAction?: Action;\r\n zindex?: boolean;\r\n}\r\n","import { createAction } from \"@ngrx/store\";\r\n\r\nexport const Loaded = createAction('[App] OneTrust Loaded');\r\nexport const ConsentChanged = createAction('[App] Load OneTrust Permissions', ( permissions: string[] ) => ({ permissions }));\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Actions, createEffect, ofType } from \"@ngrx/effects\";\r\nimport { map, switchMap } from \"rxjs\";\r\n\r\nimport * as onetrustActions from './actions';\r\nimport { Store } from \"@ngrx/store\";\r\nimport * as fromRoot from '@rfv/store';\r\nimport { AppSettingsService } from \"@rfv/modules/core/services\";\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store$: Store,\r\n private _appSettingsService: AppSettingsService\r\n ) {}\r\n\r\n public consentChanged$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(onetrustActions.Loaded),\r\n switchMap(() =>\r\n this._store$.select(fromRoot.OneTrust.hasFunctional).pipe(\r\n map(hasFunctional => {\r\n if (hasFunctional) {\r\n this._appSettingsService.loadConsentRequiredScripts();\r\n }\r\n //@ts-ignore\r\n if (!hasFunctional && document.getElementById(\"WhatFix\")) {\r\n //@ts-ignore\r\n _wfx_destroy();\r\n }\r\n })\r\n )\r\n )\r\n ), { dispatch: false }\r\n )\r\n}\r\n","export interface State {\r\n loaded: boolean,\r\n permissions: string[]\r\n}\r\n\r\nexport const initialState: State = {\r\n loaded: false,\r\n permissions: [],\r\n}\r\n","import { Action, createReducer, on } from \"@ngrx/store\";\r\nimport { State, initialState } from './state';\r\nimport * as EntityActions from \"./actions\";\r\n\r\nexport const entityReducer = createReducer(\r\n initialState,\r\n\r\n on(EntityActions.Loaded, (state) => ({\r\n ...state,\r\n loaded: true\r\n })),\r\n\r\n on(EntityActions.ConsentChanged, (state, { permissions }) => ({\r\n ...state,\r\n permissions\r\n }))\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return entityReducer(state, action);\r\n}\r\n","import { createFeatureSelector, createSelector } from \"@ngrx/store\";\r\nimport { State } from '../state';\r\n\r\nexport const getState = createFeatureSelector('onetrust');\r\n\r\nexport const isLoaded = createSelector(getState, state => state.loaded);\r\n\r\nexport const hasStrictlyNecessary = createSelector(isLoaded, getState, (isLoaded, state) => isLoaded ? state.permissions.includes('C0001') : false);\r\nexport const hasPerformance = createSelector(isLoaded, getState, (isLoaded, state) => isLoaded ? state.permissions.includes('C0002') : false);\r\nexport const hasFunctional = createSelector(isLoaded, getState, (isLoaded, state) => isLoaded ? state.permissions.includes('C0003') : false);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nimport { NavigationExtras, Params } from '@angular/router';\r\n\r\nexport const Go = createAction('[Router] Go', (path: any[], extras?: NavigationExtras) => ({ path, extras }));\r\nexport const Url = createAction('[Router] Url', (url: string) => ({ url }));\r\n\r\nexport const Home = createAction('[Router] Home');\r\n\r\nexport const Back = createAction('[Router] Back');\r\nexport const Forward = createAction('[Router] Forward');\r\nexport const Reload = createAction('[Router] Reload');\r\n\r\nexport const GoToAssetTile = createAction('[Router] Go to Asset Tile', (assetId: number, tileId: number, Params?: Params, fullscreen?: boolean) => ({ assetId, tileId, Params, fullscreen }));\r\nexport const GoToSitemapTile = createAction('[Router] Go to Sitemap Tile', (sitemapGroupId: number, tileId: number, Params?: Params, fullscreen?: boolean,) => ({ sitemapGroupId, tileId, Params, fullscreen }));\r\n","import * as fromRouter from '@ngrx/router-store';\r\n\r\nexport const reducer = fromRouter.routerReducer;\r\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport * as fromRouter from '@ngrx/router-store';\r\n\r\nimport { State } from './state';\r\n\r\nexport const getState = createFeatureSelector('router');\r\n\r\nexport const {\r\n selectCurrentRoute: getCurrentRoute,\r\n selectQueryParams: getQueryParams, // select the current route query params\r\n selectQueryParam: getQueryParam, // factory function to select a query param\r\n selectRouteParams: getRouteParams, // select the current route params\r\n selectRouteParam: getRouteParam, // factory function to select a route param\r\n selectRouteData: getRouteData, // select the current route data\r\n selectUrl: getUrl // select the current url\r\n} = fromRouter.getRouterSelectors(getState);\r\n\r\nexport const getAllRouterParams = createSelector(\r\n getCurrentRoute,\r\n getQueryParams,\r\n getRouteParams,\r\n getRouteData,\r\n getUrl,\r\n (currentRoute, queryParams, routeParams, routeData, url) => ({\r\n currentRoute,\r\n queryParams,\r\n routeParams,\r\n routeData,\r\n url\r\n })\r\n);\r\n","import { createAction } from '@ngrx/store';\r\n\r\nexport const SaveToLocalStorage = createAction('[Storage] Save To Local Storage',\r\n (key: string, value: string | number | boolean | object ) => ({ key, value }));\r\n\r\nexport const RemoveFromLocalStorage = createAction('[Storage] Remove From Local Storage',\r\n (key: string) => ({ key }));\r\n\r\nexport const SaveToSessionStorage = createAction('[Storage] Save To Session Storage',\r\n (key: string, value: string | number | boolean | object ) => ({ key, value }));\r\n\r\nexport const RemoveFromSessionStorage = createAction('[Storage] Remove From Session Storage',\r\n (key: string) => ({ key }));\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport { switchMap, tap, withLatestFrom } from 'rxjs';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as storageActions from './actions';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store$: Store\r\n ) { }\r\n\r\n public saveToLocalStorage$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(storageActions.SaveToLocalStorage),\r\n withLatestFrom(this._store$.select(fromRoot.OneTrust.hasPerformance)),\r\n withLatestFrom(this._store$.select(fromRoot.Storage.getLocalStorage)),\r\n tap(([[action, hasPerformance], state]) => {\r\n if (hasPerformance) {\r\n localStorage.setItem('state', JSON.stringify(state));\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public removeFromLocalStorage$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(storageActions.RemoveFromLocalStorage),\r\n withLatestFrom(this._store$.select(fromRoot.OneTrust.hasPerformance)),\r\n withLatestFrom(this._store$.select(fromRoot.Storage.getLocalStorage)),\r\n tap(([[action, hasPerformance], state]) => {\r\n if (hasPerformance) {\r\n localStorage.setItem('state', JSON.stringify(state));\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public saveToSessionStorage$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(storageActions.SaveToSessionStorage),\r\n withLatestFrom(this._store$.select(fromRoot.OneTrust.hasPerformance)),\r\n withLatestFrom(this._store$.select(fromRoot.Storage.getSessionStorage)),\r\n tap(([[action, hasPerformance], state]) => {\r\n if (hasPerformance) {\r\n sessionStorage.setItem('state', JSON.stringify(state));\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public removeFromSessionStorage$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(storageActions.RemoveFromSessionStorage),\r\n withLatestFrom(this._store$.select(fromRoot.OneTrust.hasPerformance)),\r\n withLatestFrom(this._store$.select(fromRoot.Storage.getSessionStorage)),\r\n tap(([[action, hasPerformance], state]) => {\r\n if (hasPerformance) {\r\n sessionStorage.setItem('state', JSON.stringify(state));\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public clearStorage$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromRoot.OneTrust.ConsentChanged),\r\n switchMap(() => \r\n this._store$.select(fromRoot.OneTrust.hasPerformance).pipe(\r\n tap((hasPerformance) => {\r\n if (!hasPerformance) {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n }\r\n })\r\n )\r\n )\r\n ), { dispatch: false }\r\n );\r\n}\r\n","\r\nexport interface State {\r\n localStorage: Record;\r\n sessionStorage: Record;\r\n}\r\n\r\nexport const initialState: State = (() => {\r\n const local = localStorage.getItem('state');\r\n const session = sessionStorage.getItem('state');\r\n\r\n try {\r\n return {\r\n localStorage: local ? JSON.parse(local) : {},\r\n sessionStorage: session ? JSON.parse(session) : {},\r\n }\r\n } catch { }\r\n\r\n return {\r\n localStorage: {},\r\n sessionStorage: {},\r\n };\r\n})();","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport * as storageActions from './actions';\r\nimport { State, initialState } from './state';\r\n\r\nconst storageReducer = createReducer(\r\n initialState,\r\n\r\n //Local Storage\r\n on(storageActions.SaveToLocalStorage, (state, payload) => {\r\n if (payload.key) {\r\n const updatedData = { ...state.localStorage, [payload.key]: payload.value };\r\n return { ...state, localStorage: updatedData };\r\n }\r\n else\r\n return state;\r\n }),\r\n\r\n on(storageActions.RemoveFromLocalStorage, (state, payload) => {\r\n //check if key exists\r\n if (state.localStorage.hasOwnProperty(payload.key)) {\r\n const updatedData = { ...state.localStorage };\r\n delete updatedData[payload.key];\r\n return { ...state, localStorage: updatedData };\r\n } else\r\n // If the key is not present, return the current state\r\n return state;\r\n }),\r\n\r\n //session Storage\r\n\r\n on(storageActions.SaveToSessionStorage, (state, payload) => {\r\n if (payload.key) {\r\n const updatedData = { ...state.sessionStorage, [payload.key]: payload.value };\r\n sessionStorage.setItem('state', JSON.stringify(updatedData))\r\n return { ...state, sessionStorage: updatedData };\r\n }\r\n else\r\n return state;\r\n }),\r\n\r\n on(storageActions.RemoveFromSessionStorage, (state, payload) => {\r\n //check if key exists\r\n if (state.sessionStorage.hasOwnProperty(payload.key)) {\r\n const updatedData = { ...state.sessionStorage };\r\n delete updatedData[payload.key];\r\n return { ...state, sessionStorage: updatedData };\r\n } else\r\n // If the key is not present, return the current state\r\n return state;\r\n }),\r\n);\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return storageReducer(state, action);\r\n}","import { createFeatureSelector, createSelector } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nexport const getState = createFeatureSelector('storage');\r\n\r\nexport const getLocalStorage = createSelector(getState, state => state.localStorage);\r\n\r\nexport const getSessionStorage = createSelector(getState, state => state.sessionStorage);\r\n\r\nexport const getStringFromLocalStorage = (key: string) => createSelector(getLocalStorage, (storage) => storage ? storage[key] as string : null);\r\n\r\nexport const getNumberFromLocalStorage = (key: string) => createSelector(getLocalStorage, (storage) => isNaN(+storage[key]) ? null : +storage[key]);\r\n\r\nexport const getBooleanFromLocalStorage = (key: string) => createSelector(getLocalStorage, (storage) => storage ? storage[key] as boolean : null);\r\n\r\nexport const getObjectFromLocalStorage = (key: string) => createSelector(getLocalStorage, (storage) => storage ? storage[key] as T : null);\r\n\r\nexport const getStringFromSessionStorage = (key: string) => createSelector(getSessionStorage, (storage) => storage ? storage[key] as string : null);\r\n\r\nexport const getNumberFromSessionStorage = (key: string) => createSelector(getSessionStorage, (storage) => isNaN(+storage[key])? null : +storage[key]);\r\n\r\nexport const getBooleanFromSessionStorage = (key: string) => createSelector(getSessionStorage, (storage) => storage ? storage[key] as boolean : null);\r\n\r\nexport const getObjectFromSessionStorage = (key: string) => createSelector(getSessionStorage, (storage) => storage ? storage[key] as T : null);\r\n","export const environment = {\r\n production: true,\r\n token: null, // Required for build --aot\r\n cwsLoginId: null,\r\n logActions: true,\r\n ngrxDevTools: true,\r\n \r\n // Cache busting for svg icon sprite\r\n iconSpritePath: 'assets/sprites/sprite.svg?t=' + new Date().getTime(),\r\n iconPlayground: true\r\n};\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule, UrlSegment, Router, Event, NavigationEnd, NavigationStart } from '@angular/router';\r\n\r\nimport { HomeComponent } from '@rfv/modules/core/components/home/home.component';\r\nimport { Page404Component } from '@rfv/modules/core/components/page404/page404.component';\r\nimport { NoAccessComponent } from '@rfv/modules/core/components/no-access/no-access.component';\r\n\r\nimport { AuthGuard, FullscreenAccessGuard } from '@rfv/modules/core/guards';\r\nimport { Tiles } from './modules/core/enums/tiles';\r\n\r\nexport function adminTilesMatcher(url: UrlSegment[]) {\r\n const adminTileIds = [\r\n { tileId: Tiles.adminUserList, path: 'users' },\r\n { tileId: Tiles.adminNotificationSettings, path: 'notifications' },\r\n { tileId: Tiles.adminRuntime, path: 'runtimeSettings' },\r\n { tileId: Tiles.adminCommLoss, path: 'commsLossSettings' }\r\n ];\r\n\r\n if (url[0] && url[0].path === 'admin') {\r\n \r\n let tileId: number;\r\n if(url.length >1)\r\n tileId = adminTileIds.find(tile => tile.path === url[1].path).tileId.valueOf();\r\n\r\n if (tileId) {\r\n return {\r\n consumed: [],\r\n posParams: { 'tileId': new UrlSegment(`${tileId}`, {}) }\r\n };\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nconst routes: Routes = [\r\n {\r\n path: 'completeUserRegistration/:guid',\r\n pathMatch: 'full',\r\n loadChildren: () => import('./modules/b2c/module').then(module => module.B2CModule)\r\n },\r\n {\r\n path: '',\r\n canActivateChild: [AuthGuard],\r\n children: [\r\n {\r\n path: '',\r\n component: HomeComponent,\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: 'dashboard',\r\n loadChildren: () => import('./modules/dashboard/dashboard.module').then(module => module.DashboardModule)\r\n },\r\n {\r\n path: 'user',\r\n loadChildren: () => import('./modules/dashboard/modules/user-profile/user-profile.module').then(module => module.UserProfileModule)\r\n },\r\n {\r\n canActivateChild: [FullscreenAccessGuard],\r\n matcher: adminTilesMatcher,\r\n children: [\r\n {\r\n path: 'admin',\r\n loadChildren: () => import('./modules/dashboard/modules/user-admin/user-admin.module').then(module => module.UserAdminModule)\r\n },\r\n ]\r\n\r\n },\r\n {\r\n path: 'emailAttachments',\r\n loadChildren: () => import('./modules/email-attachments/email-attachments.module').then(module => module.EmailAttachmentModule)\r\n },\r\n {\r\n path: 'unsubscribe/:reportCustomerSettingRecipientId',\r\n pathMatch: 'full',\r\n loadChildren: () => import('./modules/unsubscribe/module').then(module => module.UnsubscribeModule)\r\n },\r\n {\r\n path: 'no-access',\r\n component: NoAccessComponent\r\n },\r\n {\r\n path: '404',\r\n component: Page404Component\r\n },\r\n {\r\n path: '**',\r\n component: Page404Component,\r\n }\r\n ]\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule.forRoot(routes, {\r\n paramsInheritanceStrategy: 'always'\r\n })\r\n ],\r\n})\r\n\r\n\r\n\r\nexport class AppRoutingModule {\r\n\r\n //AppDynamics\r\n private vpView;\r\n\r\n // Subscribe to the Router URL changes.\r\n public constructor(public router: Router) {\r\n this.router.events.subscribe((event: Event) => {\r\n const ADRUM = window['ADRUM'];\r\n\r\n if (!ADRUM)\r\n return;\r\n\r\n if (this.vpView && event instanceof NavigationEnd) {\r\n console.debug('NavigationEnd: '+event.url);\r\n\r\n this.vpView.markViewChangeEnd();\r\n this.vpView.markViewDOMLoaded();\r\n this.vpView.markXhrRequestsCompleted();\r\n this.vpView.markViewResourcesLoaded();\r\n this.vpView.end();\r\n ADRUM.report(this.vpView);\r\n\r\n } else if (event instanceof NavigationStart) {\r\n console.debug('NavigationStart: '+event.url);\r\n\r\n this.vpView = new ADRUM.events.VPageView();\r\n this.vpView.start();\r\n this.vpView.markViewChangeStart();\r\n }\r\n });\r\n }\r\n}\r\n","import { ActionReducerMap } from '@ngrx/store';\r\n\r\nimport { State } from './state';\r\n\r\nimport * as fromBanner from './banner';\r\nimport * as fromLayout from './layout';\r\nimport * as fromModal from './modal';\r\nimport * as fromRouter from './router';\r\nimport * as fromEula from './eula';\r\nimport * as fromStorage from './storage';\r\nimport * as fromOneTrust from './onetrust';\r\n\r\nexport const reducers: ActionReducerMap = {\r\n storage: fromStorage.reducer,\r\n banner: fromBanner.reducer,\r\n layout: fromLayout.reducer,\r\n modal: fromModal.reducer,\r\n router: fromRouter.reducer,\r\n eula: fromEula.reducer,\r\n onetrust: fromOneTrust.reducer\r\n}","import { Action, ActionReducer, MetaReducer } from \"@ngrx/store\";\r\n\r\nimport { State } from \"./state\";\r\nimport { environment } from \"@environments/environment\";\r\n\r\nexport function logger(reducer: ActionReducer): ActionReducer {\r\n return function (state: State, action: Action) {\r\n if (environment.logActions)\r\n console.log(state, action);\r\n\r\n return reducer(state, action);\r\n };\r\n}\r\n\r\nexport const metaReducers: MetaReducer[] = [\r\n\r\n ...(environment.production\r\n ? [\r\n // production reducers\r\n ]\r\n : [\r\n // development reducers\r\n logger,\r\n ]),\r\n];\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { Actions } from '@ngrx/effects';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _router: Router\r\n ) { }\r\n}","import { Injectable, NgZone } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Store } from '@ngrx/store';\r\nimport { routerCancelAction, routerErrorAction, routerNavigatedAction, routerNavigationAction } from '@ngrx/router-store';\r\n\r\nimport { debounceTime, delay, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as RouterActions from './actions';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\n/**\r\n * Router effects.\r\n */\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _location: Location,\r\n private _router: Router,\r\n private _route: ActivatedRoute,\r\n private _zone: NgZone,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public go$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.Go),\r\n tap(action => {\r\n this._zone.run(() => this._router.navigate(action.path.includes(undefined) ? ['/'] : action.path, action.extras));\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public url$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.Url),\r\n tap(action => {\r\n this._zone.run(() => this._router.navigateByUrl(action.url));\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public home$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.Home),\r\n tap(action => this._router.navigate(['/']))\r\n ), { dispatch: false }\r\n );\r\n\r\n public back$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.Back),\r\n tap(() => this._location.back())\r\n ), { dispatch: false }\r\n );\r\n\r\n public forward$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.Forward),\r\n tap(() => this._location.forward())\r\n ), { dispatch: false }\r\n );\r\n\r\n public reload$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.Reload),\r\n tap(() => window.location.reload())\r\n ), { dispatch: false }\r\n );\r\n\r\n public GoToSitemapTile$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.GoToSitemapTile),\r\n withLatestFrom(this._store$.select(fromCore.Dashboards.getAll)),\r\n tap(([action, dashboards]) => {\r\n var dashboardId = dashboards?.find(db => db.tiles.find(tile => tile.id === action.tileId))?.id;\r\n var tileVersion = dashboards.find(db => db.id == dashboardId)?.tiles.find(t => t.id === action.tileId).version\r\n if (dashboardId > 0) {\r\n if (tileVersion === 2) // V2 Tiles\r\n this._router.navigate(['dashboard', dashboardId, 'sitemapGroup', action.sitemapGroupId], { queryParams: action.Params });\r\n\r\n if (tileVersion === 1) { // V1 Tiles\r\n if (action.fullscreen)\r\n this._router.navigate(['dashboard', dashboardId, 'sitemapGroup', action.sitemapGroupId, 'fullscreen', action.tileId], { queryParams: action.Params });\r\n else\r\n this._router.navigate(['dashboard', dashboardId, 'sitemapGroup', action.sitemapGroupId], { queryParams: action.Params });\r\n }\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n public GoToAssetTile$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(RouterActions.GoToAssetTile),\r\n withLatestFrom(this._store$.select(fromCore.Dashboards.getAll)),\r\n tap(([action, dashboards]) => {\r\n var dashboardId = dashboards?.find(db => db.tiles.find(tile => tile.id == action.tileId))?.id;\r\n var tileVersion = dashboards.find(db => db.id == dashboardId)?.tiles.find(t => t.id === action.tileId).version\r\n if (dashboardId > 0) {\r\n if (tileVersion === 2) { // V2 Tiles\r\n if (action.fullscreen) {\r\n action.Params.tileId = action.tileId;\r\n };\r\n this._router.navigate(['dashboard', dashboardId, 'asset', action.assetId], { queryParams: action.Params });\r\n }\r\n\r\n if (tileVersion === 1) { // V1 Tiles\r\n if (action.fullscreen)\r\n this._router.navigate(['dashboard', dashboardId, 'asset', action.assetId, 'fullscreen', action.tileId], { queryParams: action.Params });\r\n else\r\n this._router.navigate(['dashboard', dashboardId, 'asset', action.assetId], { queryParams: action.Params });\r\n }\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n //GA4 Event Tracking on Route Change\r\n public trackRouteChange$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(routerNavigatedAction),\r\n debounceTime(1000),\r\n withLatestFrom(\r\n this._store$.select(fromRoot.Storage.getNumberFromLocalStorage(\"CustomerId\")),\r\n this._store$.select(fromRoot.Storage.getStringFromLocalStorage(\"CustomerName\")),\r\n this._store$.select(fromCore.Customers.getEntities),\r\n this._store$.select(fromCore.Industries.getAll),\r\n this._store$.select(fromDashboard.getSelectedDashboard),\r\n this._store$.select(fromDashboard.getSelectedSitemapGroup),\r\n this._store$.select(fromDashboard.getSelectedAsset),\r\n this._store$.select(fromDashboard.getSelectedTile),\r\n this._store$.select(fromDashboard.getSelectedDashboardHiddenTiles),\r\n this._store$.select(fromDashboard.getActiveTabs),\r\n ),\r\n tap(([action, customerId, customerName, customerEntites, industries, selectedDashboard, selectedSitemapGroup, selectedAsset, selectedTile, selectedHiddenTiles, activeTabs]) => {\r\n\r\n let selectedCustomer = customerEntites[customerId] ?? null;\r\n\r\n //added to handle the case where the selected tile is null and the dashboard has only one tile\r\n //forcing assumption that the only tile available must be selected/maximized\r\n if(!selectedTile && selectedDashboard?.tiles.length === 1){\r\n selectedTile = selectedDashboard?.tiles[0];\r\n } else if(selectedHiddenTiles.length > 0){ //added to handle the case where the dashboard has hidden tiles\r\n selectedTile = selectedHiddenTiles.find(tile => tile.id === Number(this._route.snapshot.queryParams.tileId)) ?? selectedTile;\r\n }\r\n\r\n if (selectedCustomer?.Name || customerName) {\r\n const event = {\r\n event: \"RouterNavigation\",\r\n customerId: customerId,\r\n customerName: customerName || selectedCustomer?.Name,\r\n dashboardId: selectedDashboard?.id ?? null,\r\n dashboardName: selectedDashboard?.name ?? null,\r\n industryId: industries?.find(industry => industry.id === selectedCustomer?.PrimaryIndustryId)?.id ?? null,\r\n industryName: industries?.find(industry => industry.id === selectedCustomer?.PrimaryIndustryId)?.name ?? null,\r\n maximizedTileId: selectedTile?.id ?? null,\r\n tileName: selectedTile?.name ?? null,\r\n sitemapId: selectedSitemapGroup?.id ?? null,\r\n sitemapName: selectedSitemapGroup?.name ?? null,\r\n assetId: selectedAsset?.id ?? null,\r\n assetName: selectedAsset?.name ?? null,\r\n tiles: selectedDashboard?.tiles?.map(tile => ({\r\n tileId: tile?.id ?? null,\r\n tileName: tile?.name ?? null,\r\n })) ?? [],\r\n activeTabs: activeTabs ?? null,\r\n };\r\n\r\n // console.log(action, event);\r\n\r\n (window as any).dataLayer.push(event);\r\n }\r\n })\r\n ), { dispatch: false }\r\n );\r\n\r\n\r\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { StoreRouterConnectingModule, RouterState, MinimalRouterStateSerializer } from '@ngrx/router-store';\r\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\r\n\r\nimport { reducers } from './reducers';\r\nimport { metaReducers } from './meta-reducers';\r\n\r\nimport { Effects } from './effects';\r\nimport * as fromLayout from './layout';\r\nimport * as fromRouter from './router/effects';\r\nimport * as fromEula from './eula/effects';\r\nimport * as fromStorage from './storage/effects';\r\nimport * as fromOnetrust from './onetrust/effects';\r\n\r\nimport { environment } from '@environments/environment';\r\n\r\n@NgModule({})\r\nexport class AppStoreModule {\r\n public static forRoot(): ModuleWithProviders[] {\r\n return [\r\n StoreModule.forRoot(reducers, {\r\n metaReducers,\r\n runtimeChecks: {\r\n strictActionImmutability: false\r\n }\r\n }),\r\n\r\n StoreRouterConnectingModule.forRoot({\r\n routerState: RouterState.Minimal\r\n }),\r\n\r\n ...environment.ngrxDevTools ? [\r\n StoreDevtoolsModule.instrument({\r\n name: 'RFV 2.0 DevTools',\r\n maxAge: 100\r\n })\r\n ] : [],\r\n\r\n EffectsModule.forRoot([\r\n Effects,\r\n fromLayout.Effects,\r\n fromRouter.Effects,\r\n //fromBanner.Effects\r\n fromOnetrust.Effects,\r\n fromEula.Effects,\r\n fromStorage.Effects,\r\n ])\r\n ];\r\n }\r\n}\r\n","export enum ControlTypes {\r\n Radio = 'Checkbox',\r\n Range = 'range',\r\n Text = 'Textbox',\r\n Select = 'Dropdown'\r\n}\r\n","
    \r\n

    Categories

    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n

    \r\n {{ category.CategoryName || 'N/A' }}\r\n

    \r\n\r\n \r\n\r\n
    \r\n
    \r\n {{ categoryCount }}\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
      \r\n \r\n
      \r\n {{ subcategory.SubcategoryName }}\r\n
      \r\n
      \r\n
      \r\n {{ subcategoryCount }}\r\n
      \r\n
      \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n

    \r\n {{ category.CategoryName || 'N/A' }}\r\n

    \r\n\r\n \r\n\r\n
    \r\n
    \r\n {{ categoryCount }}\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
      \r\n \r\n
      \r\n {{ subcategory.SubcategoryName }}\r\n
      \r\n
      \r\n
      \r\n {{ subcategoryCount }}\r\n
      \r\n
      \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n/* Models */\r\nimport { FilterCategory } from '@rfv/modules/global-filter/models/filter-category.model';\r\n\r\n@Component({\r\n selector: 'app-filter-categories',\r\n templateUrl: './filter-categories.component.html',\r\n styleUrls: ['./filter-categories.component.scss']\r\n})\r\nexport class FilterCategoriesComponent {\r\n @Input() categories: FilterCategory[];\r\n @Input() badgesCount: {[key: string]: number};\r\n @Input() selectedOptionsListId: string;\r\n @Input() unitsSelected: boolean; \r\n @Input() freshFilter: boolean = false; \r\n\r\n @Output() categoryClicked = new EventEmitter();\r\n\r\n constructor() { }\r\n}\r\n","
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n\r\n \r\n Search results:\r\n No units found...\r\n
      \r\n \r\n
      {{ unit.name }}
      \r\n \r\n
    \r\n\r\n \r\n
      \r\n \r\n
      {{ unit.name }}
      \r\n \r\n \r\n
    \r\n
    \r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\n/* RxJs */\r\nimport { Observable } from 'rxjs';\r\n\r\n/* NgRx*/\r\nimport { Store, select } from '@ngrx/store';\r\nimport { FilterUnitsActions } from '../../actions';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\n\r\n/* Models */\r\nimport { Asset } from '@rfv/modules/core/models';\r\n\r\n\r\n@Component({\r\n selector: 'app-add-units',\r\n templateUrl: './add-units.component.html',\r\n styleUrls: ['./add-units.component.scss']\r\n})\r\nexport class AddUnitsComponent implements OnInit, OnDestroy {\r\n searchResults$: Observable;\r\n unitsList$: Observable;\r\n searchQuery = '';\r\n searching = false;\r\n\r\n constructor(private _store$: Store) { }\r\n\r\n ngOnInit() {\r\n this.searchResults$ = this._store$.pipe(select(fromGlobalFilter.getUnitsSearchResults));\r\n this.unitsList$ = this._store$.pipe(select(fromGlobalFilter.getUnitsList));\r\n }\r\n\r\n searchUnits(query: string) {\r\n this._store$.dispatch(FilterUnitsActions.SearchUnits(query));\r\n }\r\n\r\n onSearchUnitClick($event: Event, unit: Asset) {\r\n $event.stopPropagation();\r\n this._store$.dispatch(FilterUnitsActions.AddUnit(unit));\r\n this.searching = false;\r\n }\r\n\r\n onSelectedUnitClick(id: number) {\r\n this._store$.dispatch(FilterUnitsActions.RemoveUnit(id));\r\n }\r\n\r\n startSearch() {\r\n this.searching = true;\r\n }\r\n\r\n stopSearch() {\r\n this.searching = false;\r\n this.searchQuery = '';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopSearch();\r\n }\r\n}\r\n","
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { AbstractControl, UntypedFormGroup } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\n/* Model */\r\nimport { FilterOption } from '@rfv/modules/global-filter/models/filter-option.model';\r\n\r\n@Component({\r\n selector: 'app-filter-checkbox',\r\n templateUrl: './filter-checkbox.component.html',\r\n})\r\nexport class FilterCheckboxComponent implements OnInit {\r\n\r\n @Input() parentGroup: UntypedFormGroup;\r\n @Input() option: FilterOption;\r\n\r\n radioButton: AbstractControl;\r\n\r\n @Input() reset: Observable;\r\n private touched: boolean;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.reset.subscribe(v=> {\r\n if(v === true && this.touched === true){\r\n this.touched = false;\r\n this.radioButton.disabled ? this.radioButton.enable() : this.radioButton.disable();\r\n }\r\n else\r\n this.touched = false;\r\n });\r\n\r\n this.radioButton = this.parentGroup.get(`${this.option.OptionId}`);\r\n }\r\n\r\n onCheckBoxClick() {\r\n this.touched = true;\r\n this.radioButton.disabled ? this.radioButton.enable() : this.radioButton.disable();\r\n }\r\n}\r\n","
    \r\n
    \r\n
    \r\n

    {{ optionsListLabel }}

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n\r\n \r\n \r\n
    \r\n {{option.OptionLabel}}\r\n
    \r\n \r\n {{ operator.Value }}\r\n \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n {{option.OptionLabel}}\r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n {{option.OptionLabel}}\r\n
    \r\n \r\n \r\n {{ item.Name }}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n","/* Angular, Rxjs */\r\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/* Models */\r\nimport { ControlTypes } from '@rfv/modules/global-filter/enums/filter-control-types';\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { FilterOptionValue } from './../../models/filter-option-value.model';\r\n\r\n/* Misc */\r\nimport { cloneDeep } from 'lodash';\r\nimport { FilterOptionItem } from '../../models/filter-option-item.model';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-filter-options-list',\r\n templateUrl: './filter-options-list.component.html',\r\n styleUrls: ['./filter-options-list.component.scss']\r\n})\r\nexport class FilterOptionsListComponent implements OnInit, OnDestroy {\r\n ControlTypes = ControlTypes; // Alias for enum to use it in template\r\n\r\n @Input()\r\n public set parentFormGroup(value: UntypedFormGroup) {\r\n this._parentFormGroup = value;\r\n this._resetValue = this._parentFormGroup?.value;\r\n }\r\n public get parentFormGroup() { return this._parentFormGroup; }\r\n private _parentFormGroup: UntypedFormGroup;\r\n\r\n private _resetValue: any = null;\r\n\r\n @Input() optionsList: FilterOptionsList;\r\n @Input() optionsListLabel: string;\r\n @Input() loading: boolean;\r\n @Input() loaded: boolean;\r\n @Input() showAddUnits: boolean;\r\n @Input() reset: Observable;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public ngOnInit(): void {\r\n this.reset.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(reset => {\r\n if (!reset)\r\n return;\r\n\r\n this.parentFormGroup.patchValue(this._resetValue);\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","\r\n
    \r\n \r\n

    My Selections

    \r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n {{ optionsList.categoryLabel + (optionsList.subcategoryLabel ? ', ' + optionsList.subcategoryLabel : '') }}\r\n \r\n\r\n \r\n \r\n
    \r\n\r\n \r\n
    \r\n \r\n
      \r\n \r\n
      \r\n {{ control.label }}{{ control.operator ? ' ' + control.operator + ' ' : ': '}}\r\n \r\n \r\n \r\n {{ name }}\r\n \r\n \r\n \r\n {{ control.value }}\r\n \r\n \r\n
      \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n Units\r\n \r\n
    \r\n {{ unitsList.length }} Individual Unit{{ unitsList.length > 1 ? 's' : '' }}\r\n\r\n
      \r\n
    • {{ unit.name }}
    • \r\n
    \r\n
    \r\n","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\n\r\n/* Models */\r\nimport { SelectionCategory } from '@rfv/modules/global-filter/models/filter-selection-category.model';\r\nimport { SelectionControl } from '@rfv/modules/global-filter/models/filter-selection-control.model';\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { Asset } from '@rfv/modules/core/models';\r\n@Component({\r\n selector: 'app-filter-selections',\r\n templateUrl: './filter-selections.component.html',\r\n styleUrls: ['./filter-selections.component.scss']\r\n})\r\nexport class FilterSelectionsComponent {\r\n\r\n @Input() selections: SelectionCategory[];\r\n @Input() unitsList: Asset[];\r\n @Input() currentOptionsList: FilterOptionsList[] = [];\r\n\r\n @Input() parentForm: UntypedFormGroup;\r\n\r\n @Output() onAllUnitsRemove = new EventEmitter();\r\n @Output() resetAllClicked = new EventEmitter();\r\n @Output() onControlRemove = new EventEmitter<{\r\n controlPath: string,\r\n controlType: string\r\n }>();\r\n\r\n public onControlClick($event: Event, controlPath: string, controlType: string) {\r\n $event.stopPropagation();\r\n this.onControlRemove.emit({ controlPath, controlType });\r\n }\r\n\r\n public onRemoveUnitsClick() {\r\n this.onAllUnitsRemove.emit();\r\n }\r\n\r\n public onResetAllClick() {\r\n this.resetAllClicked.emit();\r\n }\r\n\r\n public transformIntoIntArray(value) {\r\n if (!value) return;\r\n return value.split(`,`).map(x => +x);\r\n }\r\n\r\n public getNameById(control: SelectionControl, valueId: number) {\r\n const optionsList = this.currentOptionsList && this.currentOptionsList.find(optionsList =>\r\n optionsList.Options.some(option => option.OptionId == control.id && option.OptionType == control.type)\r\n );\r\n\r\n const options = optionsList && optionsList.Options.find(option => option.OptionId === +control.id);\r\n \r\n if (options.Values) {\r\n const foundValue = options.Values.find(value => value.Id === valueId);\r\n return foundValue && foundValue.Name;\r\n }\r\n }\r\n}\r\n","
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n {{ (mobileScreen$ | async) === screens.Options && isSmallScreen ? (optionsListLabel$ | async) : 'My Filters' }}\r\n

    \r\n
    \r\n\r\n \r\n
    \r\n \r\n \r\n \r\n Reset\r\n \r\n Save\r\n \r\n Save\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n\r\n \r\n \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n\r\n","import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\r\n\r\n/* RxJS */\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as globalFilterActions from '../actions';\r\nimport * as fromGlobalFilter from '../reducers';\r\n\r\n/* Models */\r\nimport { Asset } from '@rfv/modules/core/models';\r\nimport { ControlTypes } from '@rfv/modules/global-filter/enums/filter-control-types';\r\nimport { FilterScreens } from '@rfv/modules/global-filter/enums/filter-screens.enum';\r\nimport { FilterAppliedCategory } from '@rfv/modules/global-filter/models/filter-applied-category.model';\r\nimport { FilterCategory } from '@rfv/modules/global-filter/models/filter-category.model';\r\nimport { FilterOption } from '@rfv/modules/global-filter/models/filter-option.model';\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { SelectionCategory } from '@rfv/modules/global-filter/models/filter-selection-category.model';\r\n\r\nimport { cancelChangesPayload } from '../banner-confirm-messages';\r\nimport { BreakpointObserver } from '@angular/cdk/layout';\r\nimport { Dictionary } from '@ngrx/entity';\r\nimport { FilterPostCategory } from '../models/filter-post-category.model';\r\n\r\n\r\n@Component({\r\n selector: 'app-global-filter',\r\n templateUrl: './global-filter.component.html',\r\n styleUrls: ['./global-filter.component.scss']\r\n})\r\nexport class GlobalFilterComponent implements OnInit, OnDestroy {\r\n\r\n @Output() closeGlobalFilter = new EventEmitter();\r\n\r\n categories$: Observable;\r\n selectedOptionsListId$: Observable;\r\n badgesCount$: Observable<{[key: string]: number}>;\r\n\r\n currentOptionsList$: Observable;\r\n allOptionsList$: Observable;\r\n\r\n optionsListLabel$: Observable;\r\n isOptionsListLoading$: Observable;\r\n isOptionsListLoaded$: Observable;\r\n isEditedFilterLoading$: Observable;\r\n\r\n selections$: Observable;\r\n unitsList$: Observable;\r\n isSelectionsDisplayed$: Observable;\r\n isFilterDirty: boolean;\r\n unitsSelected: boolean = false; \r\n\r\n selectedFormGroup: UntypedFormGroup;\r\n\r\n unitsCategoryId = '5';\r\n\r\n globalFilterForm: UntypedFormGroup;\r\n\r\n resetMobile: Subject = new Subject();\r\n\r\n private _editingFilter = false;\r\n\r\n mobileScreen$: Observable;\r\n screens = FilterScreens;\r\n isSmallScreen: boolean;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n constructor(\r\n private _store$: Store,\r\n private _breakpointObserver: BreakpointObserver\r\n ) { }\r\n\r\n\r\n ngOnInit(): void {\r\n // Observe breakpoint change\r\n this._breakpointObserver.observe(['(max-width: 960px)']).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(state => {\r\n this.isSmallScreen = state.matches;\r\n });\r\n // Store selectors\r\n this.categories$ = this._store$.pipe(select(fromGlobalFilter.getFilterCategories));\r\n this.badgesCount$ = this._store$.pipe(select(fromGlobalFilter.getBadgesCount));\r\n this.selectedOptionsListId$ = this._store$.pipe(select(fromGlobalFilter.getSelectedOptionsListId));\r\n\r\n this.currentOptionsList$ = this._store$.pipe(select(fromGlobalFilter.getSelectedOptions));\r\n this.allOptionsList$ = this._store$.pipe(select(fromGlobalFilter.getAllOptions));\r\n\r\n this.optionsListLabel$ = this._store$.pipe(select(fromGlobalFilter.getOptionsListLabel));\r\n this.isOptionsListLoading$ = this._store$.pipe(select(fromGlobalFilter.getOptionsLoading));\r\n this.isOptionsListLoaded$ = this._store$.pipe(select(fromGlobalFilter.getOptionsLoaded));\r\n this.isEditedFilterLoading$ = this._store$.pipe(select(fromGlobalFilter.getEditedFilterLoading));\r\n\r\n this.selections$ = this._store$.pipe(select(fromGlobalFilter.getSelections));\r\n this.unitsList$ = this._store$.pipe(select(fromGlobalFilter.getUnitsList));\r\n this.isSelectionsDisplayed$ = this._store$.pipe(select(fromGlobalFilter.getIsSelectionsDisplayed));\r\n this._store$.pipe(\r\n select(fromGlobalFilter.getIsFilterDirty),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(isDirty => this.isFilterDirty = isDirty);\r\n\r\n this.mobileScreen$ = this._store$.pipe(select(fromGlobalFilter.getMobileScreen));\r\n\r\n // Create new Form (Form Group)\r\n this.globalFilterForm = new UntypedFormGroup({\r\n filterName: new FormControl(null, Validators.required)\r\n });\r\n\r\n // Load data for categories from BE (dispatch Load action), only if not loaded\r\n this._store$.pipe(select(fromGlobalFilter.getCategoriesLoaded)).pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(isLoaded => {\r\n if (!isLoaded) {\r\n this._store$.dispatch(globalFilterActions.CategoriesActions.LoadCategories());\r\n }\r\n });\r\n\r\n // Change of current options list\r\n this.currentOptionsList$.pipe(\r\n takeUntil(this._destroyed$),\r\n ).subscribe(optionsList => {\r\n if (optionsList) {\r\n this.optionsListChange(optionsList);\r\n }\r\n });\r\n\r\n this.unitsList$.pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(unitList => {\r\n this.unitsSelected = unitList.length > 0; \r\n });\r\n\r\n // Load option lists needed for edited filter\r\n this._store$.pipe(\r\n select(fromGlobalFilter.getIdsToDownload),\r\n takeUntil(this._destroyed$),\r\n ).subscribe(idsToDownload => {\r\n idsToDownload.forEach(requiredId => {\r\n if (requiredId !== this.unitsCategoryId) {\r\n this._store$.dispatch(globalFilterActions.OptionsActions.LoadRequired(requiredId));\r\n }\r\n });\r\n });\r\n\r\n // Subscribe to changes in edited filter object and create form for edited filter.\r\n this._store$.pipe(\r\n select(fromGlobalFilter.getEditedFilterEntities),\r\n takeUntil(this._destroyed$),\r\n ).subscribe(editedFilter => {\r\n if (Object.entries(editedFilter).length) {\r\n this.resetForm();\r\n this._editingFilter = true;\r\n this._store$.dispatch(globalFilterActions.OptionsActions.SetSelectedOptionsList(null));\r\n this._store$.dispatch(globalFilterActions.OptionsActions.SetSelectedOptionsList(Object.keys(editedFilter)[0]));\r\n this.globalFilterForm.get('filterName').setValue(editedFilter[Object.keys(editedFilter)[0]].FilterLabel);\r\n if (editedFilter[Object.keys(editedFilter)[0]].AssetIds) {\r\n this._store$.dispatch(globalFilterActions.EditFilterActions.SetEditedUnits(editedFilter[this.unitsCategoryId].AssetIds));\r\n } else {\r\n this._store$.dispatch(globalFilterActions.FilterUnitsActions.RemoveAll());\r\n this.formFromEdited(editedFilter);\r\n }\r\n }\r\n });\r\n\r\n // Subscribe to changes in filter form and rebuild changedControls every time some input changes.\r\n this.globalFilterForm.valueChanges.pipe(\r\n debounceTime(300),\r\n takeUntil(this._destroyed$),\r\n ).subscribe(() => {\r\n this._store$.dispatch(globalFilterActions.GeneralFilterActions.RemoveAllApplied());\r\n this.createAppliedOptions(this.globalFilterForm, null);\r\n });\r\n\r\n // Subscribe to changes in filter name input field.\r\n this.globalFilterForm.get('filterName').valueChanges.pipe(\r\n // debounceTime(300),\r\n takeUntil(this._destroyed$),\r\n ).subscribe(value => this._store$.dispatch(globalFilterActions.GeneralFilterActions.SetFilterName(value)));\r\n }\r\n\r\n\r\n /**\r\n * Emit action to save selected category id and selected subcategory id as one string into store\r\n * @param {string} categoryId\r\n */\r\n handleCategoryClick(categoryId: string) {\r\n this._store$.dispatch(globalFilterActions.OptionsActions.SetSelectedOptionsList(categoryId));\r\n this._store$.dispatch(globalFilterActions.LayoutActions.setMobileScreen({ displayedMobileScreen: this.screens.Options }));\r\n }\r\n\r\n /**\r\n * When options list input from store comes, check if corresponding form group exists and set is as selected form group.\r\n * If it doesn't exist, create it and set as selected.\r\n * @param {FilterOptionsList} optionsList - List of options for selected list\r\n */\r\n optionsListChange(optionsList: FilterOptionsList): void {\r\n const { CategoryId, SubCategoryId, Options } = optionsList;\r\n const combinedId = CategoryId + (SubCategoryId ? '-' + SubCategoryId : '');\r\n const existingUntypedFormGroup = this.globalFilterForm.get(combinedId) as UntypedFormGroup;\r\n\r\n if (existingUntypedFormGroup) {\r\n this.createOrPatchUntypedFormGroup(Options, existingUntypedFormGroup);\r\n } else {\r\n const newUntypedFormGroup = new UntypedFormGroup({});\r\n this.globalFilterForm.addControl(combinedId, newUntypedFormGroup);\r\n this.createOrPatchUntypedFormGroup(Options, newUntypedFormGroup);\r\n }\r\n }\r\n\r\n createOrPatchUntypedFormGroup(categoryDefinitions: FilterOption[], existingUntypedFormGroup?: UntypedFormGroup) {\r\n const groupWithControls = existingUntypedFormGroup || new UntypedFormGroup({});\r\n\r\n categoryDefinitions.forEach(option => {\r\n if (groupWithControls.get(`${option.OptionId}`)) {\r\n return false;\r\n }\r\n\r\n let controlOptions: any;\r\n\r\n switch (option.OptionType) {\r\n case ControlTypes.Radio:\r\n controlOptions = {\r\n value: `${option.Values[0].Id}`,\r\n disabled: true\r\n };\r\n break;\r\n case ControlTypes.Range:\r\n groupWithControls.addControl(\r\n `${option.OptionId}-operator`,\r\n new FormControl(option.Operators[0].Id)\r\n );\r\n controlOptions = null;\r\n break;\r\n default:\r\n controlOptions = null;\r\n }\r\n groupWithControls.addControl(`${option.OptionId}`, new FormControl(controlOptions));\r\n });\r\n this.selectedFormGroup = groupWithControls;\r\n }\r\n\r\n formFromEdited(editedFilter: Dictionary) {\r\n Object.keys(editedFilter).forEach(groupKey => {\r\n const controlsGroup = new UntypedFormGroup({});\r\n\r\n editedFilter[groupKey].Options.forEach(option => {\r\n controlsGroup.addControl(`${option.OptionId}`, new FormControl(option.Value));\r\n if (option.OperatorId) {\r\n controlsGroup.addControl(`${option.OptionId}-operator`, new FormControl(option.OperatorId));\r\n }\r\n });\r\n this.globalFilterForm.addControl(groupKey, controlsGroup);\r\n });\r\n }\r\n\r\n /**\r\n * Loops through Form Group and it's nested Form Groups and search for enabled Controls with truthy value.\r\n * @param formGroup {UntypedFormGroup} From or form's nested form groups\r\n * @param controlPath {string} Path to particular form control (All parents of control divided by '-' and control name)\r\n */\r\n createAppliedOptions(formGroup: UntypedFormGroup, controlPath: string): void {\r\n const categoryAppliedOptions: FilterAppliedCategory = {\r\n CategoryId: controlPath && Number(controlPath.split('-')[0]),\r\n SubcategoryId: controlPath && Number(controlPath.split('-')[1]),\r\n Options: []\r\n };\r\n\r\n Object.keys(formGroup.controls).forEach(abstractName => {\r\n const groupOrControl = formGroup.get(abstractName);\r\n let path = controlPath || '';\r\n\r\n if (groupOrControl instanceof FormGroup) {\r\n path += path ? '-' + abstractName : abstractName;\r\n this.createAppliedOptions(groupOrControl, path);\r\n } else {\r\n if (groupOrControl.enabled && !!groupOrControl.value && !abstractName.includes('operator') && abstractName !== 'filterName') {\r\n const operator = formGroup.get(`${abstractName}-operator`);\r\n\r\n categoryAppliedOptions.Options.push({\r\n OptionId: abstractName,\r\n OperatorId: operator && operator.value,\r\n Value: groupOrControl.value,\r\n });\r\n }\r\n }\r\n });\r\n if (categoryAppliedOptions.CategoryId) {\r\n categoryAppliedOptions.Options.length ?\r\n this._store$.dispatch(globalFilterActions.GeneralFilterActions.AddAppliedOptionsCategory(categoryAppliedOptions)) :\r\n this._store$.dispatch(globalFilterActions.GeneralFilterActions.RemoveAppliedOptionsCategory(controlPath));\r\n }\r\n }\r\n\r\n handleSaveFilter() {\r\n if (this.globalFilterForm.valid) {\r\n this._editingFilter ?\r\n this._store$.dispatch(globalFilterActions.GeneralFilterActions.UpdateGlobalFilter()) :\r\n this._store$.dispatch(globalFilterActions.GeneralFilterActions.SaveGlobalFilter());\r\n this.resetAll();\r\n }\r\n }\r\n\r\n /**\r\n * Set value of selected control to null\r\n * @param control {controlPath: string, controlType: string} path to control\r\n */\r\n handleControlRemove(control: {controlPath: string, controlType: string}) {\r\n const { controlPath, controlType } = control;\r\n this.globalFilterForm.markAsTouched();\r\n \r\n controlType === ControlTypes.Radio ?\r\n this.globalFilterForm.get(controlPath).disable() :\r\n this.globalFilterForm.get(controlPath).setValue(null);\r\n }\r\n\r\n handleResetAll() {\r\n this.resetAll();\r\n this.resetForm();\r\n this.handleGoToCategories();\r\n this._store$.dispatch(fromRoot.Layout.OpenGlobalFilter());\r\n }\r\n\r\n handleAllUnitsRemove() {\r\n this._store$.dispatch(globalFilterActions.FilterUnitsActions.RemoveAll());\r\n }\r\n\r\n resetMobileScreen(reset: boolean){\r\n this.resetMobile.next(reset);\r\n this.handleGoToCategories();\r\n }\r\n\r\n handleGoToCategories() {\r\n this._store$.dispatch(globalFilterActions.LayoutActions.setMobileScreen({ displayedMobileScreen: this.screens.Categories }));\r\n }\r\n\r\n handleGoToSelection() {\r\n this._store$.dispatch(globalFilterActions.LayoutActions.setMobileScreen({ displayedMobileScreen: this.screens.Selection }));\r\n }\r\n\r\n /**\r\n * Remove all controls from form, except for filter name\r\n */\r\n resetForm() {\r\n Object.keys(this.globalFilterForm.controls).forEach(control => {\r\n if (control !== 'filterName') {\r\n this.globalFilterForm.removeControl(control);\r\n } else {\r\n this.globalFilterForm.get('filterName').setValue('');\r\n }\r\n });\r\n }\r\n\r\n resetAll() {\r\n this._store$.dispatch(globalFilterActions.GeneralFilterActions.ClearGlobalFilter());\r\n }\r\n\r\n handleCloseFilter() {\r\n this.globalFilterForm?.touched || this.selectedFormGroup?.touched ? this._store$.dispatch(fromRoot.Modal.Open({options: cancelChangesPayload()})) : this.closeGlobalFilter.emit();\r\n }\r\n\r\nngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","import { CollectionViewer } from '@angular/cdk/collections';\r\n\r\nimport { BehaviorSubject, Observable, combineLatest, Subscription, Subject } from 'rxjs';\r\nimport { debounceTime, map, shareReplay, startWith, take, tap } from 'rxjs/operators';\r\n\r\n\r\nexport interface InvolveTreeNode {\r\n parent: InvolveTreeNode;\r\n\r\n level: number;\r\n data: T;\r\n\r\n nodes: InvolveTreeNode[];\r\n leafs: InvolveTreeLeaf[];\r\n}\r\n\r\nexport interface InvolveTreeLeaf {\r\n parent: InvolveTreeNode;\r\n\r\n level: number;\r\n data: K;\r\n}\r\n\r\nexport declare type InvolveTreeItem = InvolveTreeNode | InvolveTreeLeaf;\r\n\r\nexport class InvolveTreeDataSource {\r\n public get data() { return this._data.value; }\r\n public set data(value: T[]) { this._data.next(value); }\r\n private readonly _data: BehaviorSubject;\r\n\r\n // Transformed data\r\n private _nodes$: Observable[]>;\r\n private _nodes: InvolveTreeNode[];\r\n\r\n /**\r\n * The search applied to the data source.\r\n */\r\n private readonly _search = new BehaviorSubject(null);\r\n public get search() { return this._search.value; }\r\n public set search(value: string) { this._search.next(value); }\r\n\r\n public readonly searchedNodes$: Observable[]>;\r\n\r\n /**\r\n * The expanded/collapsed state of each node.\r\n */\r\n private _state = new Map();\r\n private _stateChanged$ = new Subject();\r\n\r\n private readonly _renderItems$: Observable[]>;\r\n\r\n public constructor(\r\n public initialData: T[] = null,\r\n public nodeAccessor?: (data: T) => T[],\r\n public leafAccessor?: (data: T) => K[]\r\n ) {\r\n this._data = new BehaviorSubject(initialData);\r\n\r\n // rebuild state map on data changes\r\n this._nodes$ = this._data.pipe(\r\n map(data => {\r\n this._nodes = this.buildTree(data, this._state, new Map());\r\n return this._nodes;\r\n })\r\n );\r\n\r\n // search\r\n this.searchedNodes$ = combineLatest([\r\n this._nodes$,\r\n this._search\r\n ]).pipe(\r\n map(([nodes, search]) => search\r\n ? this.searchTree(nodes, search.toLowerCase())\r\n : nodes\r\n ),\r\n shareReplay(1)\r\n );\r\n\r\n // create render items\r\n this._renderItems$ = combineLatest([\r\n this.searchedNodes$,\r\n this._stateChanged$.pipe(\r\n startWith(null)\r\n )\r\n ]).pipe(\r\n map(([data]) => this.flatten(data))\r\n );\r\n }\r\n\r\n public connect(collectionViewer: CollectionViewer) {\r\n return this._renderItems$;\r\n }\r\n\r\n public disconnect() {\r\n // no op\r\n }\r\n\r\n private walk(data: T[], fn: (data: T, level?: number) => boolean | void, level: number = 0) {\r\n return data?.some(data => {\r\n if (fn(data, level))\r\n return true;\r\n \r\n if (this.nodeAccessor)\r\n return this.walk(this.nodeAccessor(data), fn, level + 1);\r\n\r\n return false;\r\n });\r\n }\r\n\r\n private buildTree(data: T[], prevState: Map, newState: Map, parent: InvolveTreeNode = null, level: number = 0) {\r\n return data?.map(data => {\r\n if (prevState.has(data) && prevState.get(data))\r\n newState.set(data, true);\r\n\r\n const node: InvolveTreeNode = {\r\n parent,\r\n \r\n level,\r\n data,\r\n\r\n nodes: null,\r\n leafs: null\r\n };\r\n\r\n node.nodes = this.nodeAccessor && this.buildTree(this.nodeAccessor(data), prevState, newState, node, level + 1) || [];\r\n node.leafs = this.leafAccessor && this.leafAccessor(data)?.map(data => ({ parent: node, level, data } as InvolveTreeLeaf)) || [];\r\n \r\n return node;\r\n }) || [];\r\n }\r\n\r\n public countLeaves(node: InvolveTreeNode) {\r\n let count = node.leafs.length;\r\n node.nodes.forEach(node => count += this.countLeaves(node));\r\n return count;\r\n }\r\n\r\n private searchTree(tree: InvolveTreeNode[], search: string, parent: InvolveTreeNode = null) {\r\n return tree?.reduce((acc, curr) => {\r\n if (this.searchNodePredicate(curr.data, search)) {\r\n // if the node matches we can just include it and all its children\r\n this._state.set(curr.data, true); // auto expand search results\r\n acc.push(curr);\r\n } else {\r\n // otherwise we need to copy to avoid mutating the original arrays\r\n const node: InvolveTreeNode = {\r\n parent,\r\n\r\n level: curr.level,\r\n data: curr.data,\r\n \r\n nodes: null, // set below, need ref to node\r\n leafs: curr.leafs.filter(leaf => this.searchLeafPredicate(leaf.data, search))\r\n };\r\n\r\n node.nodes = this.searchTree(curr.nodes, search, node);\r\n\r\n if (node.nodes.length || node.leafs.length) {\r\n this._state.set(node.data, true); // auto expand search results\r\n acc.push(node);\r\n }\r\n }\r\n\r\n return acc;\r\n }, [] as InvolveTreeNode[]) || [];\r\n }\r\n\r\n private _findNode(predicate: (data: T) => boolean, tree: InvolveTreeNode[], stack: InvolveTreeNode[]) {\r\n return tree.some(node => {\r\n if (predicate(node.data)) {\r\n stack.push(node);\r\n return true;\r\n }\r\n\r\n if (this._findNode(predicate, node.nodes, stack)) {\r\n stack.push(node);\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n private _findLeafPath(predicate: (data: K, parent: T) => boolean, tree: InvolveTreeNode[], stack: InvolveTreeItem[]) {\r\n return tree.some(node => {\r\n if (this._findLeafPath(predicate, node.nodes, stack)) {\r\n stack.push(node);\r\n return true;\r\n }\r\n\r\n return node.leafs.some(leaf => {\r\n if (predicate(leaf.data, leaf.parent.data)) {\r\n stack.push(leaf);\r\n stack.push(node);\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n });\r\n }\r\n\r\n public findNodePath(predicate: (data: T) => boolean, stack: InvolveTreeNode[]) {\r\n return this._findNode(predicate, this._nodes, stack);\r\n }\r\n\r\n public findNode(predicate: (data: T) => boolean) {\r\n let stack: InvolveTreeNode[] = [];\r\n\r\n if (!this.findNodePath(predicate, stack) && !stack.length)\r\n return null;\r\n\r\n return stack[0];\r\n }\r\n\r\n public findLeafPath(predicate: (data: K, parent: T) => boolean, stack: InvolveTreeItem[]) {\r\n return this._findLeafPath(predicate, this._nodes, stack);\r\n }\r\n\r\n public findLeaf(predicate: (data: K, parent?: T) => boolean) {\r\n let stack: InvolveTreeItem[] = [];\r\n\r\n if (!this.findLeafPath(predicate, stack) && !stack.length)\r\n return null;\r\n\r\n return stack[0] as InvolveTreeLeaf;\r\n }\r\n\r\n private flatten(tree: InvolveTreeNode[], items: InvolveTreeItem[] = []) {\r\n tree?.forEach(node => {\r\n items.push(node);\r\n\r\n if (this._state.has(node.data) && this._state.get(node.data)) {\r\n this.flatten(node.nodes, items);\r\n \r\n node.leafs.forEach(leaf => items.push(leaf));\r\n }\r\n });\r\n\r\n return items;\r\n }\r\n\r\n public isExpanded(node: T) {\r\n return this._state.has(node) && this._state.get(node);\r\n }\r\n\r\n // Expand the entire branch containing the item matching the search predicate\r\n public expandNode(predicate: (data: T) => boolean): boolean {\r\n const stack: InvolveTreeNode[] = [];\r\n\r\n if (this.findNodePath(predicate, stack)) {\r\n for (let i = 0; i < stack.length; i++)\r\n this._state.set(stack[i].data, true);\r\n\r\n this._stateChanged$.next();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Expand the entire branch containing the item matching the search predicate\r\n public expandToLeaf(predicate: (data: K, parent: T) => boolean): boolean {\r\n const stack: InvolveTreeItem[] = [];\r\n\r\n if (this.findLeafPath(predicate, stack)) {\r\n for (let i = 1; i < stack.length; i++) // first item is the leaf\r\n this._state.set(stack[i].data as T, true);\r\n\r\n this._stateChanged$.next();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // Collapse the entire branch containing the item matching the search predicate\r\n public collapseNode(predicate: (data: T | K) => boolean) {\r\n const stack: InvolveTreeNode[] = [];\r\n\r\n if (this.findNodePath(predicate, stack)) {\r\n stack.forEach(node => this._state.set(node.data, false));\r\n this._stateChanged$.next();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get isAllExpanded() {\r\n return this.walk(this._data.value, data => this._state.has(data) && this._state.get(data));\r\n }\r\n\r\n public expandAll() {\r\n this.walk(this._data.value, data => { this._state.set(data, true); });\r\n this._stateChanged$.next();\r\n }\r\n\r\n public collapseAll() {\r\n this._state.clear();\r\n this._stateChanged$.next();\r\n }\r\n\r\n // Expand a node, parent nodes are unaffected\r\n public expand(node: T) {\r\n if (!this.isExpanded(node)) {\r\n this._state.set(node, true);\r\n this._stateChanged$.next();\r\n }\r\n }\r\n\r\n // Collapse a node, child nodes are unaffected\r\n public collapse(node: T) {\r\n if (this.isExpanded(node)) {\r\n this._state.set(node, false);\r\n this._stateChanged$.next();\r\n }\r\n }\r\n\r\n // Toggle a nodes expanded/collapsed state\r\n public toggle(node: T) {\r\n this.isExpanded(node) ? this.collapse(node) : this.expand(node);\r\n }\r\n\r\n // Determine if a node has leafs or leafs nested in child nodes\r\n public hasChildren(node: InvolveTreeNode) {\r\n if (node.leafs?.length)\r\n return true;\r\n\r\n return node.nodes?.some(node => this.hasChildren(node)) || false;\r\n }\r\n\r\n public searchNodePredicate: ((data: T, filter: string) => boolean) = (data: T, filter: string) => true;\r\n public searchLeafPredicate: ((data: K, filter: string) => boolean) = (data: K, filter: string) => true;\r\n}","import {\r\n Directive,\r\n Input,\r\n TemplateRef\r\n} from '@angular/core';\r\n\r\nimport { InvolveTreeDataSource, InvolveTreeLeaf, InvolveTreeNode } from './data-source';\r\n\r\n@Directive()\r\nexport abstract class InvolveBaseTreeDef{\r\n public constructor(\r\n public readonly templateRef: TemplateRef<{ $implicit: T }>\r\n ) { }\r\n}\r\n\r\n@Directive({\r\n selector: 'involve-tree-node',\r\n exportAs: 'involveTreeNode',\r\n host: {\r\n 'class': 'involve-tree-node',\r\n }\r\n})\r\nexport class InvolveTreeNodeDirective {\r\n @Input()\r\n public node: T;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveTreeNodeDef]',\r\n inputs: ['useTypeFrom: involveTreeNodeDefUseTypeFrom']\r\n})\r\nexport class InvolveTreeNodeDef extends InvolveBaseTreeDef> {\r\n public static ngTemplateContextGuard(dir: InvolveTreeNodeDef, ctx: unknown): ctx is { $implicit: InvolveTreeNode } {\r\n return true;\r\n }\r\n\r\n /**\r\n * Used to extract the data type from the data source.\r\n */\r\n public useTypeFrom: InvolveTreeDataSource;\r\n}\r\n\r\n@Directive({\r\n selector: 'involve-tree-leaf',\r\n exportAs: 'involveTreeLeaf',\r\n host: {\r\n 'class': 'involve-tree-leaf',\r\n }\r\n})\r\nexport class InvolveTreeLeafDirective {\r\n @Input()\r\n public leaf: K;\r\n}\r\n\r\n@Directive({\r\n selector: '[involveTreeLeafDef]',\r\n inputs: ['useTypeFrom: involveTreeLeafDefUseTypeFrom']\r\n})\r\nexport class InvolveTreeLeafDef extends InvolveBaseTreeDef> {\r\n public static ngTemplateContextGuard(dir: InvolveTreeLeafDef, ctx: unknown): ctx is { $implicit: InvolveTreeLeaf } {\r\n return true;\r\n }\r\n\r\n /**\r\n * Used to extract the data type from the data source.\r\n */\r\n public useTypeFrom: InvolveTreeDataSource;\r\n}","\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n 0\" [name]=\"dataSource.isExpanded(item.node.data) ? 'chevron-down' : 'chevron-right'\" (click)=\"dataSource.toggle(item.node.data); $event.stopPropagation();\">\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n No items found!\r\n
    \r\n
    ","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, HostBinding, HostListener, Input, IterableDiffers, NgZone, QueryList, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';\r\nimport { CollectionViewer, ListRange } from '@angular/cdk/collections';\r\n\r\nimport { InvolveTreeDataSource, InvolveTreeItem, InvolveTreeLeaf } from './data-source';\r\n\r\nimport { BehaviorSubject, combineLatest, Observable, Subject, Subscription } from 'rxjs';\r\nimport { delay, map, shareReplay, skipUntil, take, takeUntil, tap } from 'rxjs/operators';\r\n\r\nimport { InvolveTreeNodeDef, InvolveTreeLeafDef } from './node';\r\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\n\r\nimport { InvolveTreeNode } from './data-source';\r\n\r\nexport interface InvolveTreeRenderNode {\r\n node: InvolveTreeNode;\r\n def: InvolveTreeNodeDef;\r\n}\r\n\r\nexport interface InvolveTreeRenderLeaf {\r\n leaf: InvolveTreeLeaf;\r\n def: InvolveTreeLeafDef\r\n}\r\n\r\nexport declare type InvolveTreeRenderItem = InvolveTreeRenderNode | InvolveTreeRenderLeaf;\r\n\r\n@Component({\r\n selector: 'involve-tree',\r\n exportAs: 'involveTree',\r\n templateUrl: 'tree.html',\r\n host: {\r\n 'class': 'involve-tree',\r\n 'role': 'tree',\r\n '[style.height.%]': '100'\r\n },\r\n styleUrls: ['tree.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class InvolveTree implements CollectionViewer {\r\n @Input()\r\n public dataSource: InvolveTreeDataSource;\r\n\r\n @Input()\r\n public itemSize: number = 40; // pixels - each node/leaf is padded vertically \r\n \r\n @Input()\r\n public indentSize: number = 16; // pixels\r\n\r\n @Input()\r\n public get showEmptyNodes() { return this._showEmptyNodes.value; }\r\n public set showEmptyNodes(value: boolean) { this._showEmptyNodes.next(value); }\r\n\r\n private _showEmptyNodes = new BehaviorSubject(true);\r\n\r\n @Input()\r\n public stateKey: (data: T) => string = null;\r\n\r\n public viewChange: Observable;\r\n\r\n @ContentChild(InvolveTreeNodeDef)\r\n private _nodeDef: InvolveTreeNodeDef;\r\n\r\n @ContentChild(InvolveTreeLeafDef)\r\n private _leafDef: InvolveTreeLeafDef;\r\n\r\n private _renderChangeSubscription = Subscription.EMPTY;\r\n\r\n public get renderItems() { return this._renderItems }\r\n private _renderItems: InvolveTreeRenderItem[];\r\n\r\n @ViewChild(CdkVirtualScrollViewport)\r\n private _viewport: CdkVirtualScrollViewport;\r\n\r\n @Input()\r\n public focusItem: InvolveTreeItem;\r\n\r\n public hover: boolean = false;\r\n @HostListener('mouseenter')\r\n public onMouseEnter() {\r\n this.hover = true;\r\n }\r\n\r\n @HostListener('mouseleave')\r\n public onMouseLeave() {\r\n this.hover = false;\r\n }\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef\r\n ) { }\r\n\r\n public ngOnDestroy() {\r\n this._showEmptyNodes.complete();\r\n this._renderChangeSubscription.unsubscribe();\r\n this.dataSource.disconnect();\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this._renderChangeSubscription.unsubscribe();\r\n this._renderChangeSubscription = combineLatest([\r\n this._showEmptyNodes,\r\n this.dataSource.connect(this)\r\n ]).subscribe(([showEmptyNodes, items]) => {\r\n this._renderItems = items\r\n .filter(item => showEmptyNodes ? true : this.isNode(item) ? this.dataSource.hasChildren(item) : true)\r\n .map(item => this.isNode(item) ? { node: item, def: this._nodeDef } : { leaf: item, def: this._leafDef });\r\n \r\n this._cdr.detectChanges();\r\n });\r\n }\r\n\r\n public updateViewport() {\r\n this._viewport?.checkViewportSize();\r\n }\r\n\r\n public scrollToNode(predicate: ((data: T) => boolean)) {\r\n if (this.dataSource.expandNode(predicate)) {\r\n const index = this._renderItems?.findIndex(renderItem => this.isRenderNode(renderItem) && predicate(renderItem.node.data));\r\n\r\n if (!~index)\r\n return;\r\n\r\n this.scrollToIndexCentered(index);\r\n\r\n return true\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public scrollToLeaf(predicate: ((data: K, parent: T) => boolean)) {\r\n if (this.dataSource.expandToLeaf(predicate)) {\r\n const index = this._renderItems?.findIndex(renderItem => !this.isRenderNode(renderItem) && predicate(renderItem.leaf.data, renderItem.leaf.parent.data));\r\n\r\n if (!~index)\r\n return;\r\n\r\n this.scrollToIndexCentered(index);\r\n\r\n return true\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public scrollToIndexCentered(index: number) {\r\n // const range = this._viewport.getRenderedRange();\r\n // const offset = Math.max(0, index - Math.floor((range.end - range.start) / 2));\r\n setTimeout(() => {\r\n const offset = Math.max(0, index - 3);\r\n this._viewport?.scrollToIndex(offset);\r\n });\r\n }\r\n\r\n public get focusNode() {\r\n if (!this.focusItem)\r\n return null;\r\n\r\n if (this.isNode(this.focusItem))\r\n return this.dataSource.isExpanded(this.focusItem.data) ? this.focusItem : this.focusItem.parent;\r\n \r\n return this.focusItem.parent;\r\n }\r\n\r\n public getParentNodeAtLevel(item: InvolveTreeNode, level: number): InvolveTreeNode {\r\n if (item.level === level)\r\n return item;\r\n\r\n return item.parent && this.getParentNodeAtLevel(item.parent, level) || null;\r\n }\r\n\r\n public shouldFocus(item: InvolveTreeItem, level: number) {\r\n if (!this.focusItem || !item.parent)\r\n return false;\r\n\r\n const focusNode = this.isNode(this.focusItem) && this.dataSource.isExpanded(this.focusItem.data) ? this.focusItem : this.focusItem.parent;\r\n\r\n if (!focusNode)\r\n return false;\r\n\r\n const parent = this.getParentNodeAtLevel(item.parent, focusNode.level);\r\n \r\n return focusNode.level === level && focusNode.data === parent.data; // compare by data ref since the node/leaf may have been copied while searching\r\n }\r\n\r\n public isNode(item: InvolveTreeItem): item is InvolveTreeNode {\r\n return 'nodes' in item;\r\n }\r\n\r\n public isRenderNode(item: InvolveTreeRenderItem): item is InvolveTreeRenderNode {\r\n return 'node' in item;\r\n }\r\n\r\n public toArray(n: number) {\r\n return new Array(n).fill(null).map((_, i) => i);\r\n }\r\n}","
    \r\n \r\n \r\n \r\n

    Site Map

    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n {{ node.data.name }}\r\n ({{ sitemapDataSource.countLeaves(node) | involvePlural: 'Asset' }})\r\n

    \r\n
    \r\n \r\n \r\n {{ leaf.data.name }}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n

    Dashboards

    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n

    {{ node.data.name }}

    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {{ leaf.data.name }}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    ","import { Component, OnInit, OnDestroy, ViewChild, ChangeDetectorRef } from '@angular/core';\r\n\r\nimport { combineLatest, Subject } from \"rxjs\";\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as fromUser from \"@rfv/modules/dashboard/modules/user-admin/store/reducers\";\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { SitemapGroup, Asset, Dashboard, Tile } from '@rfv/modules/core/models';\r\n\r\nimport { SitemapTree } from '@rfv/modules/sitemap/store/models';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\r\nimport { InvolveTreeDataSource } from '@rfv/modules/involve/tree/data-source';\r\nimport { InvolveTree } from '@rfv/modules/involve/tree/tree';\r\n\r\n@Component({\r\n selector: 'my-fleet',\r\n templateUrl: 'my-fleet.component.html',\r\n styles: [\r\n ':host { overflow: hidden; flex: 1 1 100% }',\r\n '.separator { width: 100%; height: 1px; }'\r\n ]\r\n})\r\nexport class MyFleetComponent implements OnInit, OnDestroy {\r\n public form = this._fb.group({\r\n filter: [null]\r\n });\r\n\r\n public sitemapDataSource = new InvolveTreeDataSource(\r\n null,\r\n sitemapTree => sitemapTree?.children,\r\n sitemapTree => sitemapTree?.assets\r\n );\r\n\r\n public dashboardDataSource = new InvolveTreeDataSource(\r\n null,\r\n null,\r\n dashboard => dashboard.tiles\r\n )\r\n\r\n public selectedSitemapGroupId: number;\r\n private _scrolledSitemapGroupId: number;\r\n\r\n public selectedAssetId: number;\r\n private _scrolledAssetId: number;\r\n\r\n public selectedDashboardId: number;\r\n private _scrolledDashboardId: number;\r\n\r\n public selectedTileId: number;\r\n private _scrolledTileId: number;\r\n\r\n @ViewChild('sitemapTree', { read: InvolveTree })\r\n private _sitemapTree: InvolveTree;\r\n\r\n @ViewChild('dashboardsTree', { read: InvolveTree })\r\n private _dashboardTree: InvolveTree;\r\n\r\n public get showEmptyNodes() { return this._showEmptyNodes; }\r\n public set showEmptyNodes(value: boolean) {\r\n this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('sitemap-empty-nodes', value ? '1' : '0'));\r\n this._showEmptyNodes = value;\r\n }\r\n private _showEmptyNodes = true; // localStorage.getItem('sitemap-empty-nodes') === '0' ? false : true; // default true unless explicitly toggled off\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public defaultAssetNamePref = \"Search\";\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private _store: Store,\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.sitemapDataSource.searchNodePredicate = (sitemapTree, filter) => sitemapTree.name.toLowerCase().indexOf(filter) !== -1;\r\n this.sitemapDataSource.searchLeafPredicate = (asset, filter) => (asset.name.toLowerCase().concat('\\u03A9').concat(asset.originalName.toLowerCase()).indexOf(filter)) !== -1;\r\n\r\n this._store.pipe(\r\n select(fromSitemap.getSitemapTree),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(sitemapTree => {\r\n this.sitemapDataSource.data = sitemapTree ? [sitemapTree] : [];\r\n\r\n // auto expand root node\r\n setTimeout(() => this.sitemapDataSource.expandNode(node => node === sitemapTree));\r\n });\r\n\r\n this._store.pipe(\r\n select(fromSitemap.getSelectedDashboards),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(dashboards => {\r\n this.dashboardDataSource.data = dashboards;\r\n });\r\n\r\n combineLatest([\r\n this._store.select(fromCore.UserSession.getSession),\r\n this._store.select(fromUser.getAssetNamePreferences)\r\n ]).pipe(\r\n filter(([user]) => !!user),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([user, preferences]) => {\r\n if (!preferences?.length)\r\n return;\r\n\r\n this.defaultAssetNamePref = \"Search by \" + preferences[0].PreferenceName;\r\n if (preferences.filter(x => user.AssetNamePreferenceId != null && x.Id == user.AssetNamePreferenceId).length > 0)\r\n this.defaultAssetNamePref += \" and \" + preferences.filter(x => x.Id == user.AssetNamePreferenceId)[0].PreferenceName;\r\n\r\n });\r\n }\r\n\r\n public ngAfterViewInit() {\r\n combineLatest([\r\n this._store.select(fromSitemap.getSelectedSitemapGroupId),\r\n this._store.select(fromSitemap.getSelectedAssetId),\r\n this._store.select(fromDashboard.getSelectedDashboardId),\r\n this._store.select(fromDashboard.getSelectedTileId)\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([selectedSitemapGroupId, selectedAssetId, selectedDashboardId, selectedTileId]) => {\r\n this.selectedSitemapGroupId = selectedSitemapGroupId;\r\n this.selectedAssetId = selectedAssetId;\r\n this.selectedDashboardId = selectedDashboardId;\r\n this.selectedTileId = selectedTileId;\r\n\r\n this._cdr.detectChanges();\r\n // setTimeout used here to fire after the tree ngAfterViewInit\r\n setTimeout(() => {\r\n if (this._sitemapTree) {\r\n if (this.selectedSitemapGroupId || this.selectedAssetId) {\r\n if (this.selectedSitemapGroupId) {\r\n this._sitemapTree.focusItem = this.sitemapDataSource.findNode(sitemapGroup => sitemapGroup.id === this.selectedSitemapGroupId);\r\n } else if (this.selectedAssetId) {\r\n this._sitemapTree.focusItem = this.sitemapDataSource.findLeaf(asset => asset.id === this.selectedAssetId);\r\n }\r\n\r\n if ((this.selectedSitemapGroupId && this.selectedSitemapGroupId !== this._scrolledSitemapGroupId) ||\r\n (this.selectedAssetId && this.selectedAssetId !== this._scrolledAssetId))\r\n this.scrollToSelectedSitemap();\r\n } else {\r\n this._sitemapTree.focusItem = null;\r\n }\r\n }\r\n\r\n if (this._dashboardTree) {\r\n if (this.selectedTileId) {\r\n this._dashboardTree.focusItem = this.dashboardDataSource.findLeaf((tile, dashboard) => dashboard.id === this.selectedDashboardId && tile.id === this.selectedTileId);\r\n } else if (this.selectedDashboardId) {\r\n this._dashboardTree.focusItem = this.dashboardDataSource.findNode(dashboard => dashboard.id === this.selectedDashboardId);\r\n } else {\r\n this._dashboardTree.focusItem = null;\r\n }\r\n\r\n if ((this.selectedTileId && this.selectedTileId !== this._scrolledTileId) ||\r\n (this.selectedDashboardId && this.selectedDashboardId !== this._scrolledDashboardId)) {\r\n this.scrollToSelectedDashboard();\r\n }\r\n }\r\n\r\n this._sitemapTree?.updateViewport();\r\n });\r\n });\r\n\r\n this.form.get('filter').valueChanges.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged()\r\n ).subscribe(value => {\r\n this._store.dispatch(fromSitemap.Search(value));\r\n });\r\n\r\n this._store.pipe(\r\n select(fromSitemap.getQuery),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(filter => {\r\n this.form.get('filter').patchValue(filter, { emitEvent: false });\r\n\r\n filter = filter?.trim(); // only use trimmed value for searching, don't patch it back into the form control\r\n this.sitemapDataSource.search = filter;\r\n\r\n if (filter) {\r\n if (!this._sitemapTree.scrollToLeaf(asset => this.sitemapDataSource.searchLeafPredicate(asset, filter)))\r\n this._sitemapTree.scrollToNode(sitemapGroup => this.sitemapDataSource.searchNodePredicate(sitemapGroup, filter));\r\n }\r\n });\r\n }\r\n\r\n public scrollToSelectedSitemap() {\r\n // need to clear the search incase the results have our selection filtered out\r\n this._store.dispatch(fromSitemap.Search(null));\r\n\r\n if (this.selectedSitemapGroupId) {\r\n this._scrolledSitemapGroupId = this.selectedSitemapGroupId;\r\n this._scrolledAssetId = null;\r\n this._sitemapTree.scrollToNode(sitemapGroup => sitemapGroup.id === this.selectedSitemapGroupId);\r\n } else if (this.selectedAssetId) {\r\n this._scrolledAssetId = this.selectedAssetId;\r\n this._scrolledSitemapGroupId = null;\r\n this._sitemapTree.scrollToLeaf(asset => asset.id === this.selectedAssetId);\r\n }\r\n }\r\n\r\n public scrollToSelectedDashboard() {\r\n if (this.selectedTileId) {\r\n this._scrolledTileId = this.selectedTileId;\r\n this._scrolledDashboardId = null;\r\n this._dashboardTree.scrollToLeaf((tile, dashboard) => dashboard.id === this.selectedDashboardId && tile.id === this.selectedTileId);\r\n } else if (this.selectedDashboardId) {\r\n this._scrolledDashboardId = this.selectedDashboardId;\r\n this._scrolledTileId = null;\r\n this._dashboardTree.scrollToNode(dashboard => dashboard.id === this.selectedDashboardId);\r\n }\r\n }\r\n\r\n public accordionChange(accordion: 'sitemap' | 'dashboards', expanded: boolean) {\r\n setTimeout(() => {\r\n if (accordion === 'sitemap' && expanded)\r\n this.scrollToSelectedSitemap();\r\n\r\n this._sitemapTree?.updateViewport();\r\n this._cdr.detectChanges();\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public selectSitemapGroup(sitemapGroup: SitemapGroup) {\r\n this._scrolledSitemapGroupId = sitemapGroup.id; // prevent scrolling if selected here\r\n this._store.dispatch(fromSitemap.SelectSitemapGroup(sitemapGroup.id, true));\r\n }\r\n\r\n public selectAsset(asset: Asset) {\r\n this._scrolledAssetId = asset.id; // prevent scrolling if selected here\r\n this._store.dispatch(fromSitemap.SelectAsset(asset.id, true));\r\n }\r\n\r\n public selectDashboard(dashboard: Dashboard) {\r\n this._scrolledDashboardId = dashboard.id; // prevent scrolling if selected here\r\n this._store.dispatch(fromSitemap.SelectDashboard(dashboard));\r\n }\r\n\r\n public selectTile(dashboard: Dashboard, tile: Tile) {\r\n this._scrolledDashboardId = dashboard.id; // prevent scrolling if selected here\r\n this._scrolledTileId = tile.id;\r\n this._store.dispatch(fromSitemap.SelectTile(dashboard, tile));\r\n }\r\n}","\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {{ group.GroupName }}

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {{ dashboard.Name }}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {{ tile.Name }}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    ","import { Component, Input } from \"@angular/core\";\r\n\r\nimport { map, take, withLatestFrom } from \"rxjs/operators\";\r\n\r\nimport { Store, select } from \"@ngrx/store\";\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n\r\nimport * as fromFavorites from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport * as favoriteActions from '@rfv/modules/dashboard/modules/user-admin/store/actions/favorites.actions';\r\n\r\nimport { Favorite } from \"@rfv/modules/dashboard/modules/user-admin/store/models/favorites.model\";\r\n\r\n@Component({\r\n selector: 'favorites',\r\n templateUrl: 'favorites.component.html'\r\n})\r\nexport class FavoritesComponent {\r\n @Input()\r\n public selectedSitemapGroupId: number;\r\n\r\n @Input()\r\n public selectedAssetId: number;\r\n\r\n @Input()\r\n public selectedDashboardId: number;\r\n\r\n @Input()\r\n public selectedTileId: number;\r\n\r\n \r\n\r\n public favorites$ = this._store.pipe(\r\n select(fromFavorites.getFavoritesData),\r\n withLatestFrom(\r\n this._store.select(fromCore.Dashboards.getEntities),\r\n this._store.select(fromCore.Assets.Entities.getEntities)\r\n ),\r\n map(([favorites, dashboards, assets]) => favorites\r\n .filter(favorite => favorite.AssetId ? assets[favorite.AssetId]?.isDisabled === false : true)\r\n .map(favorite => ({\r\n ...favorite,\r\n Dashboards: favorite.Dashboards.map(dashboard => ({\r\n ...dashboard,\r\n icon: dashboards[dashboard.Id]?.icon || null,\r\n Tiles: dashboard.Tiles.map(tile => ({\r\n ...tile,\r\n icon: dashboards[dashboard.Id]?.tiles.find(x => x.id === tile.Id)?.icon || null\r\n }))\r\n }))\r\n }))\r\n )\r\n );\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n // TODO(modonnell): move these to fromSitemap.SelectDashboard/Tile (the actions are by object, not id)\r\n\r\n public selectDashboard(fav: Favorite, sitemapGroupId: number, assetId: number) {\r\n if (sitemapGroupId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', fav.Id, 'sitemapGroup', sitemapGroupId]));\r\n } else if (assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', fav.Id, 'asset', assetId]));\r\n }\r\n }\r\n\r\n public selectTile(dashboard: Favorite, fav: Favorite, sitemapGroupId: number, assetId: number) {\r\n this._store.pipe(\r\n select(fromCore.Dashboards.getEntities),\r\n take(1)\r\n ).subscribe(dashboards => {\r\n const tile = dashboards[dashboard.Id]?.tiles.find(t => t.id === fav.Id);\r\n\r\n if (!tile || !tile.hasFullMode) {\r\n this.selectDashboard(dashboard, sitemapGroupId, assetId);\r\n return;\r\n }\r\n\r\n switch (tile.version) {\r\n case 2:\r\n if (sitemapGroupId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.Id, 'sitemapGroup', sitemapGroupId], { queryParams: { tileId: tile.id } }));\r\n } else if (assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.Id, 'asset', assetId], { queryParams: { tileId: tile.id } }));\r\n }\r\n\r\n break;\r\n\r\n default:\r\n if (sitemapGroupId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.Id, 'sitemapGroup', sitemapGroupId, 'fullscreen', tile.id]));\r\n } else if (assetId) {\r\n this._store.dispatch(fromRoot.Router.Go(['dashboard', dashboard.Id, 'asset', assetId, 'fullscreen', tile.id]));\r\n }\r\n\r\n break;\r\n }\r\n });\r\n }\r\n\r\n public setDefault(fav: Favorite) {\r\n this._store.dispatch(favoriteActions.ToggleSetHome(fav.FavoriteId));\r\n }\r\n\r\n public remove(fav: Favorite) {\r\n this._store.dispatch(favoriteActions.DeleteFavorites(fav.FavoriteId));\r\n }\r\n}","\r\n\r\n
      \r\n
    • \r\n \r\n Create new filter\r\n
    • \r\n
      \r\n
    • \r\n All Units\r\n
    • \r\n
    \r\n
    \r\n
      \r\n
    • \r\n {{ filter.Name }}\r\n
      \r\n \r\n \r\n
      \r\n
    • \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n \r\n Filter not available for the current dashboard.\r\n
    \r\n
    ","import { Component } from '@angular/core';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\nimport * as fromGlobalFilterActions from '@rfv/modules/global-filter/actions';\r\n\r\nimport { SavedGlobalFilter } from '@rfv/modules/global-filter/models/saved-filter.model';\r\nimport { deleteConfirmPayload } from '@rfv/modules/global-filter/banner-confirm-messages';\r\n\r\n@Component({\r\n selector: 'filter',\r\n templateUrl: 'filter.component.html',\r\n styles: [\r\n '.list { height: calc(100% - 6rem) }'\r\n ]\r\n})\r\nexport class FilterComponent {\r\n public selectedSitemapGroupId$ = this._store.select(fromDashboard.getSelectedSitemapGroupId);\r\n \r\n public globalFilters$ = this._store.select(fromGlobalFilter.getUserSavedFilters);\r\n\r\n public selectedFilterId$ = this._store.select(fromGlobalFilter.getSelectedFilterId);\r\n public selectedFilterName$ = this._store.select(fromGlobalFilter.getSelectedFilterName);\r\n\r\n public constructor(\r\n private _store: Store\r\n ) { }\r\n\r\n public clear() {\r\n this._store.dispatch(fromGlobalFilterActions.SelectedFilterActions.SetSelectedFilter(null));\r\n this._store.dispatch(fromDashboard.Reload());\r\n }\r\n\r\n public select(filterId: number) {\r\n this._store.dispatch(fromGlobalFilterActions.SelectedFilterActions.SetSelectedFilter(filterId));\r\n this._store.dispatch(fromDashboard.Reload());\r\n }\r\n \r\n public create() {\r\n this._store.dispatch(fromGlobalFilterActions.GeneralFilterActions.ClearGlobalFilter());\r\n this._store.dispatch(fromRoot.Layout.OpenGlobalFilter());\r\n }\r\n\r\n public edit(filterId: number) {\r\n this._store.dispatch(fromGlobalFilterActions.EditFilterActions.SetEditedFilterId(filterId));\r\n this._store.dispatch(fromRoot.Layout.OpenGlobalFilter());\r\n }\r\n \r\n public remove(filter: SavedGlobalFilter) { \r\n this._store.dispatch(fromRoot.Modal.Open({ options: deleteConfirmPayload(filter) }));\r\n }\r\n}","\r\n
    \r\n \r\n\r\n\r\n\r\n
      \r\n
    • \r\n
      \r\n \r\n
      \r\n \r\n {{ dashboard.name }}\r\n \r\n
    • \r\n \r\n
    • \r\n
      \r\n \r\n
      \r\n \r\n {{ tile.name }}\r\n \r\n
    • \r\n
    • \r\n
      \r\n \r\n
      \r\n \r\n {{ (getTileTooltip(nav.ToolTipId) | async)?.ToolTipText || getTile(nav.TilePermissionId)?.name }}\r\n \r\n
    • \r\n
      \r\n
    \r\n
    ","import { Tiles } from '@rfv/modules/core/enums/tiles';\r\nimport { Component, OnInit, OnDestroy, HostListener, Input } from '@angular/core';\r\n\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\n\r\nimport { Dashboard, Tile, TileNavigationMapping } from '@rfv/modules/core/models';\r\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: 'side-nav-item',\r\n templateUrl: 'side-nav-item.component.html',\r\n styleUrls: ['side-nav-item.component.scss']\r\n})\r\nexport class SideNavItemComponent {\r\n @Input() \r\n public dashboard: Dashboard;\r\n\r\n public hasMouse = false;\r\n public hover = false;\r\n private _timeout = null;\r\n\r\n @HostListener('mouseenter')\r\n public onMouseEnter() {\r\n this.hasMouse = true;\r\n\r\n if (this._timeout)\r\n clearTimeout(this._timeout)\r\n\r\n this._timeout = setTimeout(() => {\r\n if (this.hasMouse)\r\n this.hover = true;\r\n }, 500);\r\n }\r\n\r\n @HostListener('mouseleave')\r\n public onMouseLeave() {\r\n this.hasMouse = false;\r\n\r\n if (this._timeout)\r\n clearTimeout(this._timeout)\r\n\r\n this._timeout = setTimeout(() => {\r\n if (!this.hasMouse)\r\n this.hover = false;\r\n }, 500);\r\n }\r\n\r\n public overlayPositions = [\r\n new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'start', overlayY: 'top' })\r\n ]\r\n\r\n public constructor(\r\n private _store: Store,\r\n ) { }\r\n\r\n public selectDashboard(dashboard: Dashboard) {\r\n this._store.dispatch(fromSitemap.SelectDashboard(dashboard));\r\n }\r\n\r\n public selectTile(dashboard: Dashboard, tile: Tile) {\r\n this._store.dispatch(fromSitemap.SelectTile(dashboard, tile));\r\n }\r\n\r\n public getTileTooltip(toolTipId: number) {\r\n return this._store.select(fromCore.ToolTips.getToolTipById(toolTipId));\r\n }\r\n\r\n public getTile(tilePermissionId: number) {\r\n return this.dashboard.tiles.find(tile => tile.permissions.some(perm => perm.Id === tilePermissionId));\r\n }\r\n\r\n public getTileNavigation(tileNavigationMappings: TileNavigationMapping[]) {\r\n return tileNavigationMappings?.filter(tileNavigation => {\r\n return this.dashboard.tiles.find(tile => tile.permissions.find(permission => permission.Id === tileNavigation.TilePermissionId));\r\n }) || [];\r\n }\r\n}\r\n","
    \r\n \r\n
    \r\n \r\n
    \r\n
    ","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { combineLatest, Subject } from 'rxjs';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\n\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\n\r\nimport { Dashboard } from '@rfv/modules/core/models';\r\n\r\n@Component({\r\n selector: 'side-nav',\r\n templateUrl: 'side-nav.component.html',\r\n styles: [\r\n `\r\n .global-filter-active::after {\r\n content: \"\";\r\n width: 8px;\r\n height: 8px;\r\n margin-left: -8px;\r\n margin-top: -12px;\r\n border-radius: 4px;\r\n background-color: red;\r\n }\r\n `\r\n ]\r\n})\r\nexport class SideNavComponent {\r\n @Input()\r\n public tabs: { id: number, name: string, icon: string }[];\r\n\r\n @Output()\r\n public selectTab = new EventEmitter();\r\n\r\n public filterDisabled$ = this._store.select(fromSitemap.isGlobalFilterDisabled);\r\n public filterActive$ = this._store.select(fromSitemap.isGlobalFilterActive);\r\n public filterTooltip$ = this._store.select(fromSitemap.getGlobalFilterTooltip);\r\n \r\n public dashboards: Dashboard[];\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private _store: Store\r\n ) {}\r\n\r\n public ngOnInit() {\r\n combineLatest([\r\n this._store.select(fromSitemap.getSelectedDashboards),\r\n this._store.select(fromSitemap.getSelectedSitemapGroupId),\r\n this._store.select(fromSitemap.getSelectedAssetId),\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([dashboards, sitemapGroupId, assetId]) => {\r\n this.dashboards = sitemapGroupId || assetId ? dashboards : [];\r\n this._cdr.detectChanges();\r\n })\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}","
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {{ tab.name }}\r\n
    \r\n
    \r\n \r\n {{ tab.name }}\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n\r\n \r\n \r\n\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \"Remote\r\n

    {{platformName || \"Cat® Remote Fleet Vision\"}}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    ","import { animate, AnimationEvent, state, style, transition, trigger } from '@angular/animations';\r\nimport { ChangeDetectorRef, Component } from '@angular/core';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { map, takeUntil, tap } from 'rxjs/operators';\r\n\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport { AppSettingsService } from '@rfv/modules/core/services';\r\n\r\n@Component({\r\n selector: 'sitemap',\r\n templateUrl: 'sitemap.component.html',\r\n animations: [\r\n trigger('expandCollapse', [\r\n state('1', style({ width: '400px' })),\r\n state('0', style({ width: '0px' })),\r\n transition('0 <=> 1', [\r\n animate(200)\r\n ]),\r\n ])\r\n ],\r\n host: {\r\n '[class.left-panel]': 'true',\r\n '[class.left-panel--closed]': '!isMainMenuOpen',\r\n '[class.base-container]': 'true'\r\n },\r\n styleUrls: ['sitemap.component.scss']\r\n})\r\nexport class SitemapComponent {\r\n\r\n public platformName: string = this._appSettingsService.getPlatformName();\r\n public isMainMenuOpen: boolean = false;\r\n public contentVisible: boolean = false;\r\n\r\n public selectedSitemapGroupId$ = this._store.pipe(\r\n select(fromDashboard.getSelectedSitemapGroupId),\r\n // tap(_ => this._cdr.detectChanges())\r\n );\r\n public selectedAssetId$ = this._store.pipe(\r\n select(fromDashboard.getSelectedAssetId),\r\n // tap(_ => this._cdr.detectChanges())\r\n );\r\n\r\n public filterDisabled$ = this._store.select(fromSitemap.isGlobalFilterDisabled);\r\n public filterActive$ = this._store.select(fromSitemap.isGlobalFilterActive);\r\n public filterTooltip$ = this._store.select(fromSitemap.getGlobalFilterTooltip);\r\n\r\n public selectedDashboardId: number;\r\n public selectedTileId: number;\r\n\r\n public dashboards$ = this._store.pipe(\r\n select(fromSitemap.getSelectedDashboards),\r\n tap(_ => this._cdr.detectChanges())\r\n );\r\n\r\n public tabs$ = this.selectedAssetId$.pipe(\r\n map(selectedAssetId => [\r\n { id: 0, name: 'My Fleet', icon: 'MY_SELECTION' },\r\n { id: 1, name: 'Favorites', icon: 'FAVORITE' },\r\n { id: 2, name: 'Filter', icon: 'FILTER' }\r\n // ...selectedAssetId ? [] : [{ id: 2, name: 'Filter', icon: 'FILTER' }]\r\n ])\r\n ); \r\n\r\n public selectedTabId = 0;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _store: Store,\r\n private _cdr: ChangeDetectorRef,\r\n private _appSettingsService: AppSettingsService\r\n ) {\r\n\r\n }\r\n\r\n public ngOnInit() {\r\n this._store.pipe(\r\n select(fromRoot.Layout.isMainMenuOpen),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(isMainMenuOpen => this.isMainMenuOpen = isMainMenuOpen);\r\n\r\n this._store.pipe(\r\n select(fromDashboard.getSelectedDashboardId),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(dashboardId => this.selectedDashboardId = dashboardId);\r\n\r\n this._store.pipe(\r\n select(fromDashboard.getSelectedTileId),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(tileId => this.selectedTileId = tileId);\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public onExpandCollapseStart(event: AnimationEvent) {\r\n if (!event.toState)\r\n this.contentVisible = false;\r\n }\r\n\r\n public onExpandCollapseDone(event: AnimationEvent) {\r\n if (event.toState)\r\n this.contentVisible = true;\r\n }\r\n\r\n public toggleMainMenu() {\r\n this._store.dispatch(fromRoot.Layout.ToggleMainMenu());\r\n }\r\n\r\n public selectTab(tabId: number) {\r\n this.selectedTabId = tabId;\r\n this._store.dispatch(fromRoot.Layout.OpenMainMenu());\r\n this._store.dispatch(fromRoot.Layout.CloseGlobalFilter());\r\n }\r\n}","
    \r\n
    \r\n
    \r\n Alarm\r\n
    \r\n
    \r\n PreviousNew\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {{ group.name }}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {{ alarm.AlarmProperty}}\r\n
    \r\n
    \r\n {{alarm.DisplayOrigVal}}{{alarm.DisplayNewVal}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n/* Models */\r\nimport { UnitAlarmModalItem } from '@rfv/modules/modal/models/unit-alarm-modal-content.model';\r\n\r\n/* NgRx */\r\nimport * as fromUnitAlarms from '@rfv/modules/dashboard/modules/unit-alarms/store/reducers';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { cloneDeep } from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-unit-alarms-modal-content',\r\n templateUrl: './unit-alarms-modal-content.component.html'\r\n})\r\nexport class UnitAlarmsModalContentComponent implements OnInit {\r\n\r\n @Input() alarmChanges: UnitAlarmModalItem[];\r\n\r\n public get groupBy() {\r\n const groupBy = this.alarmChanges.reduce((groups, alarm) => {\r\n if (!groups[alarm.AlarmName]) {\r\n groups[alarm.AlarmName] = {\r\n name: alarm.AlarmName,\r\n alarms: []\r\n };\r\n }\r\n groups[alarm.AlarmName].alarms.push(alarm);\r\n\r\n return groups;\r\n }, {});\r\n\r\n return Object.keys(groupBy).map(key => groupBy[key]);\r\n }\r\n\r\n constructor(private _store$: Store) {\r\n }\r\n\r\n ngOnInit() {\r\n let alarmCopy = cloneDeep(this.alarmChanges);\r\n\r\n alarmCopy.forEach(change => {\r\n\r\n change.DisplayNewVal = change.NewValue;\r\n change.DisplayOrigVal = change.OriginalValue;\r\n\r\n if (change.OriginalValue === 'true' ){\r\n change.DisplayOrigVal = 'Yes';\r\n change.DisplayNewVal = 'No';\r\n }\r\n if (change.NewValue === 'true') {\r\n change.DisplayNewVal = 'Yes';\r\n change.DisplayOrigVal = 'No';\r\n }\r\n\r\n\r\n });\r\n this.alarmChanges = alarmCopy;\r\n }\r\n}\r\n","
    \r\n {{ eventRow.source }}\r\n
    \r\n
    \r\n

    Event ({{ eventRow.code }})

    \r\n \r\n \r\n
    \r\n

    Resources

    \r\n \r\n \r\n
    \r\n","import { Component, OnInit } from \"@angular/core\";\r\n\r\nimport { Observable, Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/* NgRx */\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport { Store } from \"@ngrx/store\";\r\nimport { ModalOptions } from \"@rfv/store/modal\";\r\n\r\n@Component({\r\n selector: \"app-events-diagnostics-modal-content\",\r\n templateUrl: \"./events-diagnostics-modal-content.component.html\"\r\n})\r\nexport class EventsDiagnosticsModalContentComponent implements OnInit {\r\n modalOptions$: Observable;\r\n componentDestroyed$ = new Subject();\r\n sisLinks: any[];\r\n eventRow: any;\r\n\r\n constructor(private _store$: Store) {}\r\n\r\n ngOnInit() {\r\n this.modalOptions$ = this._store$.select(fromRoot.Modal.getOptions);\r\n\r\n this.modalOptions$\r\n .pipe(takeUntil(this.componentDestroyed$))\r\n .subscribe(modalOptions => {\r\n //the event row is the last element in the array\r\n this.eventRow = modalOptions.data[modalOptions.data.length - 1];\r\n\r\n //make copy to remove last element before display\r\n let copy = Array.from(modalOptions.data);\r\n copy.pop();\r\n this.sisLinks = copy;\r\n });\r\n }\r\n}\r\n","
    \r\n
    \r\n
    \r\n Type: {{comm.CommType}}
    \r\n SerialNumber: {{comm.CommSerialNumber}}
    \r\n Comm IP: {{comm.CommIP}}
    \r\n Provider Type: {{comm.ProviderType}}
    \r\n Asset Name: {{comm.AssetName}}
    \r\n Expected Post Rate: {{comm.ExpectedPostRate}}\r\n
    \r\n
    \r\n
    \r\n\r\n","import { Component, OnInit } from \"@angular/core\";\r\n\r\nimport { Observable, Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/* NgRx */\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport { Store } from \"@ngrx/store\";\r\nimport { ModalOptions } from \"@rfv/store/modal\";\r\n\r\nimport { RfvTableColumn } from '@rfv/modules/shared/model/table-column.model';\r\n\r\n@Component({\r\n selector: \"app-device-search-modal-content\",\r\n templateUrl: \"./device-search-modal-content.component.html\",\r\n styleUrls: [\"device-search-modal-content.component.scss\"]\r\n})\r\nexport class DeviceSearchModalContentComponent implements OnInit {\r\n modalOptions$: Observable;\r\n componentDestroyed$ = new Subject();\r\n commsRow: any;\r\n\r\n constructor(private _store$: Store) {}\r\n\r\n tableColumns: RfvTableColumn[] = [\r\n {\r\n name: \"Comm Type\",\r\n prop: \"CommType\",\r\n sortable: false,\r\n flexGrow: 85,\r\n minWidth: 85\r\n },\r\n {\r\n name: \"Comm Serial #\",\r\n prop: \"CommSerialNumber\",\r\n sortable: false,\r\n flexGrow: 85,\r\n minWidth: 85\r\n },\r\n {\r\n name: \"Comm IP\",\r\n prop: \"CommIP\",\r\n sortable: false,\r\n flexGrow: 85,\r\n minWidth: 85\r\n },\r\n {\r\n name: \"Provider Type\",\r\n prop: \"ProviderType\",\r\n sortable: false,\r\n flexGrow: 85,\r\n minWidth: 85\r\n },\r\n {\r\n name: \"Asset Name\",\r\n prop: \"AssetName\",\r\n sortable: false,\r\n flexGrow: 85,\r\n minWidth: 85\r\n },\r\n {\r\n name: \"Post Rate\",\r\n prop: \"ExpectedPostRate\",\r\n sortable: false,\r\n flexGrow: 10,\r\n minWidth: 10\r\n }\r\n ];\r\n\r\n ngOnInit() {\r\n this.modalOptions$ = this._store$.select(fromRoot.Modal.getOptions);\r\n\r\n this.modalOptions$\r\n .pipe(takeUntil(this.componentDestroyed$))\r\n .subscribe(modalOptions => {\r\n //the event row is the last element in the array\r\n this.commsRow = modalOptions.data;\r\n });\r\n }\r\n}\r\n","
    \r\n
    \r\n \r\n \r\n {{ user.fullName }}\r\n \r\n \r\n
    \r\n
    \r\n No Users Found\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    ","import { Component, EventEmitter, OnDestroy, OnInit } from '@angular/core';\r\n\r\n/* RxJS */\r\nimport { Observable } from 'rxjs';\r\nimport { takeWhile, map } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\n\r\n/* Models */\r\nimport { User } from '@rfv/modules/dashboard/modules/user-admin/store/models/user';\r\nimport { Input, Output } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { confirmCopyModel } from './copy-user-messages';\r\n\r\n@Component({\r\n selector: 'copy-user-permissions',\r\n styleUrls: ['./copy-user-permissions.component.scss'],\r\n templateUrl: './copy-user-permissions.component.html'\r\n})\r\nexport class CopyUserPermissionsModalComponent implements OnInit {\r\n\r\n @Input() toUser: User;\r\n @Output() cancelClicked = new EventEmitter();\r\n\r\n public users$: Observable;\r\n public fromUser = new FormControl(null, Validators.required);\r\n\r\n constructor(private _store$: Store) { }\r\n\r\n ngOnInit() {\r\n this.users$ = this._store$.pipe(select(fromUser.getInitialUserResults)).pipe(map(v => {\r\n return (v.map(v => { return { ...v, fullName: v.LastName + ', ' + v.FirstName } })\r\n ).filter(v => v.UserId != this.toUser.UserId);\r\n }));\r\n\r\n }\r\n\r\n public copyUser() {\r\n if (this.toUser.UserId && this.fromUser.value) {\r\n this._store$.dispatch(\r\n fromRoot.Modal.Open({ options: confirmCopyModel(this.fromUser.value, this.toUser) },\r\n ));\r\n }\r\n //this._store$.dispatch(fromUserUI.CopyUserPermisions(this.fromUser.value.UserId, this.toUser.UserId));\r\n\r\n }\r\n\r\n}\r\n","
    \r\n
    \r\n Select a job title to replace before deleting\r\n \r\n \r\n {{ title.Name }}\r\n \r\n \r\n
    \r\n\r\n
    \r\n No Job Titles Found\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    ","/* Angular */\r\nimport { AfterViewInit, Component, EventEmitter, OnInit } from '@angular/core';\r\n\r\n/* RxJS */\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { select, Store } from '@ngrx/store';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n/* Models */\r\nimport { Input, Output } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { JobTitle } from '@rfv/modules/dashboard/modules/user-admin/store/models/job-title';\r\nimport { confirmReplaceModel } from './replace-job-title-message';\r\n\r\n@Component({\r\n selector: 'replace-job-title',\r\n styleUrls: ['./replace-job-title.component.scss'],\r\n templateUrl: './replace-job-title.component.html'\r\n})\r\nexport class ReplaceJobtitleModalComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() oldJobtitle: JobTitle;\r\n @Output() cancelClicked = new EventEmitter();\r\n\r\n public numberOfUsers: number;\r\n public jobTitles$: Observable;\r\n public newJobTitle = new FormControl(null, Validators.required);\r\n\r\n constructor(private _store: Store) { }\r\n\r\n ngOnInit() {\r\n\r\n this._store.pipe(\r\n select(fromUser.getAllSearchResults),\r\n ).subscribe(users => {\r\n this.numberOfUsers = users.filter(users => users.JobTitleId === this.oldJobtitle.Id).length;\r\n });\r\n\r\n this.jobTitles$ = this._store.pipe(\r\n select(fromUser.getAllJobTitlesOrderByName),\r\n map(jobTitles => jobTitles.filter(jobTitle => jobTitle.Id != this.oldJobtitle.Id))\r\n );\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.newJobTitle.markAsPristine();\r\n }\r\n\r\n public replace() {\r\n this._store.dispatch(\r\n fromRoot.Modal.Open({ options: confirmReplaceModel(this.newJobTitle.value, this.oldJobtitle, this.numberOfUsers) }));\r\n\r\n }\r\n\r\n}\r\n","
    \r\n \r\n \r\n\r\n
    \r\n
    \r\n

    \r\n {{category.CategoryName}}\r\n

    \r\n \r\n \r\n {{subcategory.SubcategoryName}}\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n {{inputConfig.OptionLabel}}\r\n \r\n {{ option.Name }}\r\n \r\n \r\n \r\n\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n

    \r\n Selected Filters\r\n

    \r\n \r\n Filter Name\r\n \r\n \r\n This field is required!\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {{sub.SubcategoryName}}:\r\n \r\n \r\n {{option.OptionLabel + ': '}}\r\n \r\n
    \r\n {{stringValue}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n\r\n\r\n\r\n \r\n\r\n","\r\nimport { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { Subject, Observable, combineLatest } from 'rxjs';\r\nimport { Store, select } from '@ngrx/store';\r\nimport { filter, map, takeUntil, tap } from 'rxjs/operators';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { Input } from '@angular/core';\r\nimport * as fromGlobalFilter from '@rfv/modules/global-filter/reducers';\r\nimport { FilterCategory } from '@rfv/modules/global-filter/models/filter-category.model';\r\nimport { FilterOptionsList } from '@rfv/modules/global-filter/models/filter-options-list.model';\r\nimport { FormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { Validators } from '@angular/forms';\r\nimport { UserAccessFilter } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-filter.model';\r\nimport { UserAccessFilterUnitInfo } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-filter-item.model';\r\nimport { FilterSubcategory } from '@rfv/modules/global-filter/models/filter-subcategory.model';\r\nimport { CustomerUserAccessFilterUnitInfoItem } from '@rfv/modules/dashboard/modules/user-admin/store/models/customer-user-access-filter-unit-info.model';\r\nimport { CustomerUserAccessFilter } from '@rfv/modules/core/models';\r\n\r\nexport interface UserAccessUnitModalData {\r\n filter: CustomerUserAccessFilter,\r\n userId: number\r\n}\r\n\r\n@Component({\r\n selector: 'user-access-unit-modal',\r\n styleUrls: ['./user-access-unit-modal.component.scss'],\r\n templateUrl: 'user-access-unit-modal.component.html'\r\n})\r\n\r\nexport class UserAccessUnitModalComponent implements OnInit, OnDestroy {\r\n\r\n @Input() set data(entity: UserAccessUnitModalData) { \r\n this._data = entity;\r\n if (!entity.filter?.Id)\r\n this._store$.dispatch(fromCore.CustomerUserAccessFilter.Clear());\r\n };\r\n\r\n private _data: UserAccessUnitModalData;\r\n public category$: Observable;\r\n public subcategories$: Observable;\r\n public options$: Observable<{ [subcategoryId: string]: FilterOptionsList }>;\r\n public filterOptionsList: { [subcategoryId: string]: FilterOptionsList };\r\n public subcategories: FilterSubcategory[];\r\n public form: UntypedFormGroup;\r\n\r\n public _destroyed$ = new Subject();\r\n public isLoaded$: Observable;\r\n public isLoadingFilterUnitInfo$: Observable;\r\n \r\n public constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n public ngOnInit() { \r\n this.isLoaded$ = combineLatest([\r\n this._store$.select(fromGlobalFilter.getCategoriesLoaded),\r\n this._store$.select(fromGlobalFilter.getOptionsLoaded),\r\n this._store$.select(fromCore.CustomerUserAccessFilter.isLoadingFilterUnitInfo)\r\n ]).pipe(\r\n takeUntil(this._destroyed$), \r\n map(([a, b, c]) => a && b && !c)\r\n );\r\n\r\n // Only get Unit Information category? \r\n this.category$ = this._store$.pipe(\r\n select(fromGlobalFilter.getFilterCategoryById(3)), // id: 3 is unit information \r\n takeUntil(this._destroyed$),\r\n filter(category => !!category)\r\n );\r\n\r\n // Only get Unit Information Options with dropdowns\r\n this.options$ = this._store$.pipe(\r\n select(fromGlobalFilter.getOptionsByCategoryId(3)),\r\n takeUntil(this._destroyed$),\r\n // dropdown only\r\n map(optionsList => optionsList?.map(x => ({ ...x, Options: x.Options.filter(o => o.OptionType === 'Dropdown') } as FilterOptionsList))),\r\n map(optionsList => {\r\n return optionsList.reduce((acc, entity) => {\r\n acc = {\r\n ...acc,\r\n [entity.SubCategoryId]: entity\r\n }\r\n return acc\r\n }, {})\r\n }),\r\n tap(optionsList => this.filterOptionsList = optionsList)\r\n );\r\n\r\n //get subcategories\r\n this.subcategories$ = combineLatest([\r\n this.category$,\r\n this.options$\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n filter(([category, options]) => !!category && !!options),\r\n map(([category, options]) => {\r\n // sort subcategory\r\n const sorted = [...category.Subcategories].sort((a, b) => a.SubcategoryName.toLowerCase() > b.SubcategoryName.toLowerCase() ? -1 : 1);\r\n // only show subcategories that has options \r\n return sorted.filter(subcat => !!options[subcat.SubcategoryId] && !!options[subcat.SubcategoryId].Options.length)\r\n }),\r\n tap(subcategories => this.subcategories = subcategories)\r\n );\r\n\r\n // create and/or populate form\r\n combineLatest([\r\n this.subcategories$,\r\n this.options$,\r\n this._store$.select(fromCore.CustomerUserAccessFilter.getFilterUnitInfo)\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n filter(([a,b, c]) => !!a && !!b && !!c), //make sure all 3 values are present\r\n ).subscribe(([subcategories, options, selectedFilters]) => {\r\n if (!this.form) {\r\n this.form = this._fb.group({\r\n filterName: [this._data?.filter?.Name || '', Validators.required],\r\n ...subcategories.reduce((acc, subcat, index) => {\r\n acc = {\r\n ...acc,\r\n [subcat.SubcategoryId]: this._fb.group({\r\n ...options[subcat.SubcategoryId].Options.reduce((optionAcc, option) => {\r\n const optionValue = option.OptionType === 'Dropdown' ? [] : ''\r\n optionAcc = {\r\n ...optionAcc,\r\n [option.OptionId]: [optionValue]\r\n }\r\n return optionAcc;\r\n }, {})\r\n })\r\n };\r\n return acc\r\n }, {})\r\n })\r\n } \r\n this.populateForm(selectedFilters);\r\n }) \r\n }\r\n \r\n public populateForm(selectedFilters: CustomerUserAccessFilterUnitInfoItem[]) { \r\n for (let entity of selectedFilters) {\r\n const currentValue = this.form?.get(entity.SubCategoryId.toString())?.value[entity.UnitInfoCustomerItemId];\r\n this.form.get(entity.SubCategoryId.toString()).patchValue({\r\n [entity.UnitInfoCustomerItemId]: [\r\n ...currentValue ? currentValue : [],\r\n entity.LegendValue\r\n ]\r\n })\r\n }\r\n }\r\n \r\n public handleCancel() {\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n public handleConfirm() {\r\n if (this.form.invalid)\r\n return;\r\n\r\n //map all selected values to UserAccessFilterUnitInfo\r\n const CustomerUserAccessFilterUnitInfoItems = this.subcategories.reduce((acc, subcat) => {\r\n const options = this.filterOptionsList[subcat.SubcategoryId]?.Options ||[];\r\n for (let option of options) {\r\n const selectedValues = this.form.value[subcat.SubcategoryId][option.OptionId] || []\r\n acc = [\r\n ...acc,\r\n ...selectedValues.map(value => (\r\n {\r\n subCategoryId: subcat.SubcategoryId,\r\n legendValue: value,\r\n value: option.Values.find(dvalue => dvalue.Id === value)?.Name,\r\n unitInfoCustomerItemId: option.OptionId\r\n }\r\n ))\r\n ];\r\n }\r\n return acc;\r\n }, [] as UserAccessFilterUnitInfo[]);\r\n\r\n const userAccessFilter: UserAccessFilter = {\r\n id: this._data?.filter?.Id || 0,\r\n name: this.form.get(\"filterName\").value,\r\n CustomerUserAccessFilterUnitInfoItems\r\n }\r\n\r\n //submit changes\r\n this._store$.dispatch(fromCore.CustomerUserAccessFilter.Save(userAccessFilter, this._data?.userId))\r\n }\r\n\r\n // map selected ids to string values \r\n public getSelectedFilters(subcategoryId: number, optionId: number) { \r\n const formValue = this.form.get(subcategoryId.toString())?.get(optionId.toString()).value as [];\r\n if (!formValue || !formValue.length)\r\n return []; //shortcircuit\r\n const config = this.filterOptionsList[subcategoryId];\r\n const selectedOption = config?.Options?.find(option => option.OptionId === optionId);\r\n const stringValues = formValue?.map(selectedId => selectedOption.Values.find(value => value.Id === selectedId)?.Name);\r\n return stringValues;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}\r\n","\r\nimport { User } from '@rfv/modules/core/models';\r\nimport { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-user-recipients-modal',\r\n templateUrl: './user-recipients-modal.component.html',\r\n styleUrls: ['./user-recipients-modal.component.scss']\r\n})\r\nexport class UserRecipientsModalComponent implements OnInit {\r\n @Input() user: User;\r\n\r\n constructor(\r\n ) { }\r\n\r\n ngOnInit() { }\r\n}\r\n","\r\n","\r\n * The system will queue these changes and attempt to update the devices in the field. The changes will\r\n immediately be effective within this application\r\n\r\n\r\n\r\n \r\n {{title}} {{ '(' +alarms.length+ ')'}}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    Alarm
    \r\n
    Previous → New
    \r\n
    \r\n\r\n
    \r\n
    \r\n\r\n {{alarm.UnitName}}\r\n\r\n
    \r\n
    \r\n Alarm Name:\r\n Threshold:\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n {{alarm.PreviousAlarmName}}\r\n   →  \r\n {{alarm.AlarmName}}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {{alarm.PreviousThreshold}}\r\n   →  \r\n {{ alarm.Threshold}}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    ","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nimport { AlarmEditor } from '@rfv/modules/dashboard/modules/alarm-editor/models/alarm-editor.model';\r\n\r\n@Component({\r\n selector: 'alarm-preview-item',\r\n templateUrl: './alarm-preview-item.component.html',\r\n styleUrls: ['./alarm-preview-item.component.scss']\r\n})\r\nexport class AlarmPreviewItemComponent implements OnInit {\r\n\r\n @Input() alarms: AlarmEditor[];\r\n @Input() title: string;\r\n\r\n @Output() removeAlarm = new EventEmitter();\r\n\r\n\r\n constructor(\r\n ) { }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n public remove(alarm: AlarmEditor, remove: string) {\r\n this.removeAlarm.emit({ alarmId: alarm.AlarmId, remove: remove})\r\n }\r\n}\r\n","
    \r\n 0 && alarms?.length > 0\">\r\n
    \r\n
    \r\n 0\"\r\n [title]=\"alarm.Name\" [alarms]=\"alarm.Alarms\">\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n No alarm changes to Update\r\n
    \r\n\r\n
    ","import { combineLatest, Subject } from 'rxjs';\r\nimport { AlarmType } from '@rfv/modules/core/models';\r\nimport { Component, OnInit } from '@angular/core';\r\n\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromAlarmEditor from '@rfv/modules/dashboard/modules/alarm-editor/store';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { AlarmEditor } from '@rfv/modules/dashboard/modules/alarm-editor/models/alarm-editor.model';\r\nimport { AlarmPreview } from '@rfv/modules/dashboard/modules/alarm-editor/models/alarm-preview.model';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'threshold-editor-preview-modal',\r\n templateUrl: './threshold-editor-preview-modal.component.html',\r\n styleUrls: ['./threshold-editor-preview-modal.component.scss']\r\n})\r\nexport class ThresholdEditorPreviewModalComponent implements OnInit {\r\n\r\n public alarms: AlarmEditor[];\r\n\r\n public filteredAlarms: AlarmPreview[] = [];\r\n\r\n public alarmsToUpdate: AlarmEditor[];\r\n\r\n public alarmTypes: AlarmType[];\r\n\r\n public _destroyed$ = new Subject();\r\n\r\n constructor(\r\n private _store: Store,\r\n\r\n ) { }\r\n\r\n ngOnInit() {\r\n combineLatest([\r\n this._store.select(fromCore.AlarmTypes.getEnabledAlarmTypes),\r\n this._store.select(fromAlarmEditor.getAlarmsToUpdate)\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([alarmTypes, alarms]) => {\r\n if (alarmTypes && alarms) {\r\n this.alarms = alarms;\r\n\r\n this.filteredAlarms = [];\r\n\r\n alarmTypes?.forEach(a => {\r\n let al = this.alarms?.filter(v => v.AlarmTypeId === a.AlarmTypeId);\r\n let alarmsWithChanges = al?.filter(v => v.Threshold.toString() !== v.PreviousThreshold.toString() || v.AlarmName.trim() !== v.PreviousAlarmName.trim());\r\n\r\n this.filteredAlarms.push({\r\n AlarmTypeId: a.AlarmTypeId,\r\n Name: a.Name,\r\n Alarms: alarmsWithChanges\r\n })\r\n })\r\n }\r\n });\r\n }\r\n\r\n public handleRemove(event) {\r\n console.log(event);\r\n let a = this.alarms.map(alarm => {\r\n return {\r\n ...alarm,\r\n Threshold: event.remove == 'threshold' && event.alarmId == alarm.AlarmId ? alarm.PreviousThreshold : alarm.Threshold,\r\n AlarmName: event.remove == 'name' && event.alarmId == alarm.AlarmId ? alarm.PreviousAlarmName : alarm.AlarmName\r\n }\r\n })\r\n\r\n this._store.dispatch(fromAlarmEditor.AlarmsToUpdate(a));\r\n\r\n }\r\n}\r\n","\r\n
    \r\n 0; else noChanges\">\r\n
    \r\n
    Event Code
    \r\n
    Previous →\r\n New
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n {{eventCode.value.OriginalName}}\r\n \r\n\r\n
    \r\n
    \r\n Name:\r\n Associated Party:\r\n
    \r\n\r\n
    \r\n
    \r\n {{eventCode.value.OriginalName}}\r\n   →  \r\n {{eventCode.value.Name}}\r\n \r\n
    \r\n
    \r\n {{eventCode.value.OriginalAssignedEventParty}}\r\n   →  \r\n {{ eventCode.value.AssignedEventParty}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n No Changes To Apply...\r\n \r\n \r\n
    \r\n","import { UntypedFormGroup } from '@angular/forms';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'event-code-preview-modal',\r\n templateUrl: './event-code-preview-modal.component.html',\r\n styleUrls: ['./event-code-preview-modal.component.scss']\r\n})\r\nexport class EventCodePreviewModalComponent {\r\n\r\n @Input() \r\n eventCodeFormGroups: UntypedFormGroup[];\r\n\r\n constructor() { }\r\n}","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport {DatapointOccurrenceItemDisplayModel} from '@rfv/modules/core/models/support/datapoint-occurrence-item-display.model';\r\n\r\n@Component({\r\n selector: 'datapoint-occurrence-preview-item',\r\n templateUrl: './datapoint-occurrence-preview-item.component.html',\r\n styleUrls: ['./datapoint-occurrence-preview-item.component.css']\r\n})\r\nexport class DatapointOccurrencePreviewItemComponent implements OnInit {\r\n @Input() DataPointUpdateModel: DatapointOccurrenceItemDisplayModel\r\n\r\n @Output() onRemove = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n public remove() {\r\n this.onRemove.emit(this.DataPointUpdateModel)\r\n }\r\n}\r\n","
    \r\n
    {{DataPointUpdateModel.DataPointName}}
    \r\n
    {{DataPointUpdateModel.OldDataPointIdentifierName}}
    \r\n
    {{DataPointUpdateModel.NewDataPointIdentifierName}}
    \r\n
    \r\n \r\n
    \r\n
    \r\n","
    \r\n 0 && dataPointsToUpdate?.length > 0\">\r\n
    \r\n
    \r\n
    \r\n
    Data Point Name
    \r\n
    Existing DPI
    \r\n
    Remapped DPI
    \r\n
    Remove
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n No mapping changes to be applied\r\n
    \r\n
    \r\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\r\n\r\nimport * as fromCore from \"@rfv/modules/core/store\";\r\nimport { Store } from \"@ngrx/store\";\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport { Subject, combineLatest } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\nimport { DatapointOccurrenceItemDisplayModel } from \"@rfv/modules/core/models/support/datapoint-occurrence-item-display.model\";\r\n\r\n@Component({\r\n selector: \"datapoint-occurrence-editor-modal\",\r\n templateUrl: \"./datapoint-occurrence-editor-modal.component.html\",\r\n styleUrls: [\"./datapoint-occurrence-editor-modal.component.css\"],\r\n})\r\nexport class DatapointOccurrenceEditorModalComponent\r\n implements OnInit, OnDestroy\r\n{\r\n private _destroyed$ = new Subject();\r\n\r\n public dataPointsToUpdate: DatapointOccurrenceItemDisplayModel[];\r\n\r\n constructor(private _store: Store) {}\r\n\r\n ngOnInit(): void {\r\n combineLatest(\r\n this._store.select(\r\n fromCore.Support.DatapointOccurrences.getDataPointsToUpdate\r\n ),\r\n this._store.select(fromCore.DataPoints.Identifiers.getAll)\r\n )\r\n .pipe(takeUntil(this._destroyed$))\r\n .subscribe(([dataPointsToUpdate, identifiers]) => {\r\n if (dataPointsToUpdate?.length && identifiers?.length) {\r\n this.dataPointsToUpdate = dataPointsToUpdate.map((dataPoint) => {\r\n const oldIdentifier = identifiers.filter(\r\n (identifier) =>\r\n identifier.id === dataPoint.OldDataPointIdentifierId\r\n )[0];\r\n const newIdentifier = identifiers.filter(\r\n (identifier) =>\r\n identifier.id === dataPoint.NewDataPointIdentifierId\r\n )[0];\r\n\r\n return {\r\n DataPointName: dataPoint.DataPointName,\r\n OldDataPointIdentifierName: oldIdentifier.name,\r\n OldDataPointIdentifierId: oldIdentifier.id,\r\n NewDataPointIdentifierName: newIdentifier.name,\r\n NewDataPointIdentifierId: newIdentifier.id,\r\n };\r\n });\r\n }\r\n });\r\n }\r\n\r\n removeUpdateModel($event) {\r\n this.dataPointsToUpdate.splice(this.dataPointsToUpdate.indexOf($event), 1);\r\n\r\n this._store.dispatch(\r\n fromCore.Support.DatapointOccurrences.DataPointsToUpdate(\r\n this.dataPointsToUpdate\r\n )\r\n );\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    Old Datapoint Name
    \r\n
    New Datapoint Name
    \r\n
    Display Group
    \r\n
    Unit of Measure
    \r\n
    Decimal Places
    \r\n
    Min Value
    \r\n
    Max Value
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {{dataPointToUpdate.OldDataPointName}}
    \r\n
    {{dataPointToUpdate.NewDataPointName}}
    \r\n
    {{DisplayGroupName}}
    \r\n
    {{UnitsOfMeasureName}}
    \r\n
    {{dataPointToUpdate.DecimalPlaces}}
    \r\n
    {{dataPointToUpdate.MinValue}}
    \r\n
    {{dataPointToUpdate.MaxValue}}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\r\n\r\n/* ngrx */\r\nimport * as fromCore from \"@rfv/modules/core/store\";\r\nimport { Store, select } from \"@ngrx/store\";\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport { Subject, combineLatest, Observable } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\nimport { DataPointUnitsOfMeasureUpdate } from \"@rfv/modules/dashboard/modules/site-editor/components/data-points-editor/datapoint-update\";\r\nimport * as fromDataPointsEditor from \"@rfv/modules/tiles/reducers/data-points-editor.reducer\";\r\nimport { DisplayGroup } from \"@rfv/modules/core/models/datapoint\";\r\nimport { UnitOfMeasure } from \"@rfv/modules/core/models\";\r\n\r\n@Component({\r\n selector: \"datapoint-editor-modal\",\r\n templateUrl: \"./data-point-editor-modal.component.html\",\r\n styleUrls: [\"./data-point-editor-modal.component.css\"],\r\n})\r\nexport class DataPointEditorModalComponent implements OnInit, OnDestroy {\r\n private _destroyed$ = new Subject();\r\n\r\n public dataPointToUpdate: DataPointUnitsOfMeasureUpdate;\r\n public DisplayGroupName: string;\r\n public UnitsOfMeasureName: string;\r\n public displayGroups$: Observable;\r\n public unitOfMeasures$: Observable;\r\n\r\n constructor(private _store$: Store) {}\r\n\r\n ngOnInit() {\r\n combineLatest(\r\n this._store$.select(fromDataPointsEditor.getSelectedDataPoint),\r\n this._store$.select(fromCore.DataPoints.DisplayGroups.getAll),\r\n this._store$.select(fromCore.UnitsOfMeasure.getAll)\r\n )\r\n .pipe(takeUntil(this._destroyed$))\r\n .subscribe(([selectDataPoint, displayGroups, unitsOfMeasure]) => {\r\n this.dataPointToUpdate = selectDataPoint;\r\n\r\n if (displayGroups && selectDataPoint) {\r\n this.DisplayGroupName = displayGroups.find(\r\n (x) => x.Id === selectDataPoint.DisplayGroupId\r\n )?.Name;\r\n }\r\n\r\n if (unitsOfMeasure && selectDataPoint) {\r\n this.UnitsOfMeasureName = unitsOfMeasure.find(\r\n (x) => x.Id === selectDataPoint.UnitsOfMeasureId\r\n )?.Name;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n Prev. Eng. Hrs.\r\n \r\n \r\n {{\r\n this.selectedPreviousAssessment?.engineHours ? \r\n this.selectedPreviousAssessment?.engineHours : \r\n isAssessmentHistoryAvailable? this.overview[0].assessmentHistory[0]?.prevAssessmentHours : \r\n this.overview[0].overhaulHistory[0]?.prevOverhaulHours\r\n }}\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Standard Overhaul\r\n \r\n \r\n {{\r\n this.selectedNextAssessment?.standardHours ? \r\n this.selectedNextAssessment?.standardHours : \r\n isAssessmentHistoryAvailable ?\r\n this.overview[0].assessmentHistory[0]?.upcomingAssessmentHours : this.overview[0].overhaulHistory[0]?.upcomingOverhaulHours\r\n }}\r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n Estimate Standard \r\n {{\r\n this.selectedNextAssessment?\r\n this.selectedNextAssessment?.emoAssessmentType : \r\n isAssessmentHistoryAvailable ?\r\n this.overview[0].assessmentHistory[0]?.upcomingAssessment : this.overview[0].overhaulHistory[0]?.upcomingOverhaul\r\n }} \r\n Date\r\n \r\n \r\n {{ StandardDateForAssessment ? (StandardDateForAssessment | rfvDate) : '-'}}\r\n\r\n \r\n
    \r\n\r\n
    \r\n \r\n Recommended Hours\r\n \r\n \r\n \r\n \r\n \r\n Invalid Hours\r\n \r\n\r\n \r\n
    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n Estimated Date: \r\n \r\n \r\n {{this.estimatedDate | rfvDate}} \r\n
    \r\n (Based on utilization rate {{this.overview[0].utilization == '0%' ? '1%' : this.overview[0].utilization}})\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n

    Assessment History

    \r\n
    \r\n
    \r\n
    Certified
    \r\n
    Type
    \r\n
    Std Hrs.
    \r\n
    Rec Hrs.
    \r\n
    Overall Rating
    \r\n
    Certified By
    \r\n
    Assess Date
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {{assessment.emoAssessmentType}}\r\n \r\n
    \r\n
    \r\n \r\n {{assessment.standardHours + ' Hours'}}\r\n \r\n
    \r\n
    \r\n \r\n {{first? '—' : assessment.recommendedHours +' Hours'}}\r\n \r\n
    \r\n
    \r\n \r\n {{ first ? '—' : assessment.overallAssessmentRating}}\r\n \r\n
    \r\n
    \r\n \r\n {{!assessment.certifiedBy || first ? '—' : assessment.certifiedBy}}\r\n \r\n
    \r\n
    \r\n \r\n {{first ? '—' : (assessment.overhaulDate| rfvDate)}}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    ","import { OverhaulHistory, AssessmentHistory } from './../../../dashboard/modules/emo/models/emo-overview.model';\r\nimport { takeUntil, switchMap, filter, map, tap, withLatestFrom, distinctUntilChanged } from 'rxjs/operators';\r\nimport { Subject, Observable, combineLatest } from 'rxjs';\r\nimport { OnInit, Component, OnDestroy, ViewChild, ElementRef } from '@angular/core';\r\nimport { FormControl, Validators } from '@angular/forms';\r\n\r\nimport { Store, select } from \"@ngrx/store\";\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from \"@rfv/modules/core/store\";\r\n\r\nimport { OverhaulType, OverhaulInterval, OverviewHistoryDataSource, AssetAssessment } from '@rfv/modules/dashboard/modules/emo/models';\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table/data-source';\r\nimport { getSelectedSitemapGroupId } from '@rfv/modules/sitemap/store';\r\nimport { getAssetId } from '@rfv/modules/support/store/navigation';\r\nimport { getSelectedAssetId } from '@rfv/modules/core/store/emo';\r\nimport { AppColors } from '@rfv/modules/shared/types/app-colors';\r\nimport { clone, forEach } from 'lodash';\r\nimport { AnyNsRecord } from 'dns';\r\nimport { copyUserPermissionsModel } from '../copy-user-permissions/copy-user-messages';\r\n\r\n\r\n@Component({\r\n selector: 'assessment-recommendation',\r\n templateUrl: './assessment-recommendation.component.html',\r\n styleUrls: ['./assessment-recommendation.component.scss']\r\n})\r\n\r\n\r\nexport class AssessmentRecModalComponent implements OnInit, OnDestroy {\r\n\r\n public recommendedHours: FormControl;\r\n\r\n private _maxLength: number = 9;\r\n public assetId: number;\r\n public sitemapGroupId: number;\r\n public estimatedDate: Date;\r\n public utilization: number;\r\n public standardHours: number;\r\n\r\n public isLoading$: Observable;\r\n public isLoaded$: Observable;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public assessmentHistory$: Observable;\r\n public selectedAssessment: AssetAssessment;\r\n public selectedPreviousAssessment: AssetAssessment;\r\n public selectedNextAssessment: AssetAssessment;\r\n\r\n @ViewChild(\"recHrInput\", { static: false }) recHrField: ElementRef;\r\n\r\n public overview: OverviewHistoryDataSource[];\r\n public dataSource = new InvolveDataSource();\r\n\r\n constructor(\r\n private _store$: Store\r\n ) { }\r\n\r\n\r\n ngOnInit() {\r\n\r\n\r\n this.isLoading$ = this._store$.select(fromCore.EMO.isOverviewLoading);\r\n this.isLoaded$ = this._store$.select(fromCore.EMO.isOverviewLoaded);\r\n\r\n combineLatest([\r\n this._store$.select(fromCore.EMO.getSelectedAssessment),\r\n this._store$.select(fromCore.EMO.getOverview).pipe(filter(overview => overview?.length > 0)),\r\n this._store$.select(fromCore.EMO.getAssetAssessments)\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n switchMap(([assessment, overview, assessmentList]) => {\r\n this.overview = overview;\r\n this.selectedAssessment = assessment;\r\n\r\n let index = assessmentList.findIndex(assess => assess.id == this.selectedAssessment?.id) || null;\r\n this.selectedPreviousAssessment = assessmentList[index - 1] || null;\r\n this.selectedNextAssessment = assessmentList[index + 1] || null;\r\n\r\n let totalRecommendedHours: number = this.selectedAssessment?.recommendedHours;\r\n\r\n if (this.selectedNextAssessment) {\r\n this.standardHours = this.selectedNextAssessment.standardHours;\r\n }\r\n else if (this.overview[0].assessmentHistory[0]) {\r\n this.standardHours = this.overview[0].assessmentHistory[0].upcomingAssessmentHours;\r\n }\r\n else if (this.overview[0].overhaulHistory[0]) {\r\n this.standardHours = this.overview[0].overhaulHistory[0].upcomingOverhaulHours;\r\n }\r\n\r\n // totalRecommendedHours is the recommended hours that is visible to the user\r\n totalRecommendedHours += this.standardHours;\r\n if (!this.recommendedHours) {\r\n this.recommendedHours = new FormControl(assessment.recommendedHours,\r\n [Validators.required, Validators.pattern(/^-?[0-9]\\d*(\\d+)?$/)]\r\n );\r\n }\r\n\r\n this.recommendedHours.patchValue(totalRecommendedHours, { emitEvent: false });\r\n\r\n this.calculateRecommendedDate(+this.recommendedHours.value - this.standardHours);\r\n return this.recommendedHours.valueChanges;\r\n\r\n })).subscribe(\r\n recommendedHoursValue => {\r\n //validate length since Validators.length doesnt work on numbers\r\n if (recommendedHoursValue < 0)//if negative make max length 10 to account for negative symbol\r\n this.recommendedHours.patchValue(`${recommendedHoursValue}`.slice(0, this._maxLength + 1), { emitEvent: false });\r\n else if (`${recommendedHoursValue}`.length > this._maxLength) {\r\n this.recommendedHours.patchValue(`${recommendedHoursValue}`.slice(0, this._maxLength), { emitEvent: false });\r\n }\r\n\r\n this.calculateRecommendedDate(+this.recommendedHours.value - this.standardHours);\r\n }\r\n );\r\n\r\n\r\n this.assessmentHistory$ = this._store$.select(fromCore.EMO.getAssetAssessments)\r\n .pipe(\r\n map(assessments => assessments.reverse())\r\n );\r\n\r\n\r\n\r\n combineLatest([\r\n this._store$.select(getSelectedSitemapGroupId),\r\n this._store$.select(getSelectedAssetId),\r\n ]).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(([sitemapGroupId, assetId]) => {\r\n this.sitemapGroupId = sitemapGroupId;\r\n this.assetId = assetId;\r\n this._store$.dispatch(fromCore.EMO.LoadEMOOverview(this.sitemapGroupId, assetId));\r\n this._store$.dispatch(fromCore.EMO.LoadEMOAssetAssessments(assetId));\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n if (this.recHrField)\r\n this.recHrField.nativeElement.focus();\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n confirm() {\r\n\r\n let standardHours: number;\r\n if (this.selectedNextAssessment?.standardHours){\r\n standardHours = this.selectedNextAssessment.standardHours;\r\n \r\n }\r\n else\r\n standardHours = this.overview[0].assessmentHistory[0].upcomingAssessmentHours;\r\n\r\n this._store$.dispatch(fromCore.EMO.SaveEMOAssetAssessmentRecommendedHours(this.recommendedHours.value, standardHours))\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n closePopup() {\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n\r\n public getStandardSchedule(pastAssessments: AssetAssessment[]) {\r\n\r\n // move the certified(checked) rows to the bottom\r\n pastAssessments = [...pastAssessments?.sort((a, b) => new Date(b.overhaulDate) - new Date(a.overhaulDate))];\r\n\r\n let certifiedAssessments = [...pastAssessments?.filter(assessments => assessments.certifiedBy != '')];\r\n pastAssessments = [...pastAssessments?.filter(assessments => assessments.certifiedBy == ''), ...certifiedAssessments]\r\n\r\n let topService: any[];\r\n if (this.isAssessmentHistoryAvailable) {\r\n topService = [{\r\n id: this.overview[0].id,\r\n emoAssessmentType: this.overview[0].assessmentHistory[0].upcomingAssessment,\r\n standardHours: this.overview[0].assessmentHistory[0].upcomingAssessmentHours,\r\n recommendedHours: '-',\r\n overhaulDate: '--',\r\n overallAssessmentRating: '-',\r\n certifiedBy: '-',\r\n isCertified: false,\r\n ratingColor: 'FFFFFF'\r\n }, ...pastAssessments];\r\n\r\n }\r\n else if (this.isOverhaulHistoryAvailable) {\r\n topService = [{\r\n id: this.overview[0].id,\r\n emoAssessmentType: this.overview[0].overhaulHistory[0].upcomingOverhaul,\r\n standardHours: this.overview[0].overhaulHistory[0].upcomingOverhaulHours,\r\n recommendedHours: '-',\r\n overhaulDate: '--',\r\n overallAssessmentRating: '-',\r\n certifiedBy: '-',\r\n isCertified: false,\r\n ratingColor: 'FFFFFF'\r\n }, ...pastAssessments];\r\n }\r\n\r\n return topService.map(\r\n (assessment, index) => {\r\n return {\r\n ...assessment,\r\n recommendedHours: index > 0 ? assessment.recommendedHours + topService[index - 1].standardHours : '-'\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n public get color() {\r\n return AppColors.green_l;\r\n }\r\n\r\n public get isAssessmentHistoryAvailable() {\r\n return this.overview[0].assessmentHistory.length > 0;\r\n }\r\n\r\n public get isOverhaulHistoryAvailable() {\r\n return this.overview[0].overhaulHistory.length > 0;\r\n }\r\n\r\n public calculateRecommendedDate(recommendedHours: number) {\r\n\r\n const upcomingDate: Date = this.StandardDateForAssessment;\r\n if (!upcomingDate) return;\r\n\r\n const nextStandardDate = clone(upcomingDate);\r\n\r\n nextStandardDate.setHours(nextStandardDate.getHours() + (recommendedHours / this.getUtilizationRate()));\r\n this.estimatedDate = nextStandardDate;\r\n\r\n }\r\n\r\n // used in top table and to calculate recommended date\r\n public get StandardDateForAssessment() {\r\n let standardDate: Date;\r\n if (this.selectedNextAssessment) {\r\n let utilizationRate = this.getUtilizationRate()\r\n const overhaulDate = new Date(this.selectedAssessment?.overhaulDate);\r\n standardDate = new Date(overhaulDate.setHours(\r\n ((this.selectedNextAssessment?.standardHours - (this.selectedAssessment?.engineHours | 0)) / utilizationRate)));\r\n }\r\n else if (this.overview[0].assessmentHistory[0]) {\r\n standardDate = this.overview[0].assessmentHistory[0]?.upcomingAssessmentStandardDate || null;\r\n }\r\n else if (this.overview[0].overhaulHistory[0]) {\r\n standardDate = this.overview[0].overhaulHistory[0]?.upcomingOverhaulStandardDate || null;\r\n }\r\n\r\n return standardDate;\r\n\r\n }\r\n\r\n\r\n public getUtilizationRate() {\r\n let utilizationRate: number = this.isAssessmentHistoryAvailable ? this.overview[0].assessmentHistory[0]?.utilization\r\n : this.isOverhaulHistoryAvailable ? this.overview[0].overhaulHistory[0]?.utilization\r\n : +this.overview[0].utilization.replace('%', '');\r\n\r\n // if utilization is 0, then use 1% to estimate the next date\r\n utilizationRate = utilizationRate == 0 ? 0.01 : utilizationRate / 100;\r\n\r\n return utilizationRate;\r\n }\r\n\r\n}\r\n","
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n InspectionId\r\n \r\n {{ row.InspectionId }}\r\n \r\n \r\n\r\n \r\n Asset Name\r\n \r\n {{ row.AssetName }}\r\n \r\n \r\n\r\n \r\n S/N\r\n \r\n {{ row.SerialNumber }}\r\n \r\n \r\n\r\n \r\n Form Type\r\n \r\n {{ row.InspectionTypeName }}\r\n \r\n \r\n\r\n \r\n Form Name\r\n \r\n {{ row.FormName }}\r\n \r\n \r\n\r\n \r\n Completed Date\r\n \r\n \r\n {{ row.CompletedDate | rfvDateTime}}\r\n \r\n \r\n\r\n \r\n Summary\r\n \r\n\r\n \r\n
    {{ row.ActionSeverity }}
    \r\n
    \r\n\r\n \r\n
    {{ row.MonitorSeverity }}
    \r\n
    \r\n\r\n \r\n
    {{ row.NormalSeverity }}
    \r\n
    \r\n\r\n \r\n
    {{ row.NoneSeverity }}
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n Group\r\n \r\n
    \r\n \r\n {{ group.groupKey }}\r\n ({{ group.rows.length }} Items)\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n\r\n\r\n \r\n
    \r\n \r\n No Inspections found\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
    \r\n
    ","import { Subject, Observable } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { OnInit, Component, OnDestroy, Input } from '@angular/core';\r\nimport { Store, select } from \"@ngrx/store\";\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromSessionUser from '@rfv/modules/core/store/user-session/selectors';\r\n\r\n\r\nimport { SystemCatInspection, SystemCatInspectionAssessmentModal } from '@rfv/modules/tiles/models/system-cat-inspection.model';\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table';\r\nimport { coerceStringArray } from '@angular/cdk/coercion';\r\nimport { AssessmentCatInspectRisk } from '@rfv/modules/dashboard/modules/runtime-settings/models/assessment-import.model';\r\n\r\n@Component({\r\n selector: 'assessment-import',\r\n templateUrl: './assessment-import.component.html',\r\n styleUrls: ['./assessment-import.component.scss']\r\n})\r\n\r\n\r\nexport class AssessmentImportModalComponent implements OnDestroy, OnInit {\r\n private _destroyed$ = new Subject();\r\n public dataSource = new InvolveDataSource();\r\n private assessmentId:number;\r\n private selectedCatInspectionId:number;\r\n private assetId:number;\r\n public isRowSelected:boolean;\r\n public catInspectParsingDetails:string = '';\r\n public HighlightRow: Number;\r\n public themeId: number;\r\n \r\n constructor(private _store$: Store)\r\n { \r\n }\r\n \r\n @Input() set dataViewTable(value: SystemCatInspectionAssessmentModal ) {\r\n if (value.CatInpsectionItems?.length) {\r\n this.dataSource.data = value.CatInpsectionItems;\r\n this.assessmentId = value.AssessmentId\r\n\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this._store$.dispatch(fromCore.EMO.UpdateCatInspectParsingDetails(''));\r\n this._store$.select(fromCore.EMO.catInspectParsingDetails).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe((parsingDetails:string)=>{\r\n this.catInspectParsingDetails = parsingDetails;\r\n });\r\n this._store$.pipe(\r\n select(fromSessionUser.getSessionThemeId),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(themeId => this.themeId = themeId);\r\n }\r\n\r\n public onAssetClick(row: SystemCatInspection) \r\n {\r\n this.assetId = row.AssetId;\r\n this.selectedCatInspectionId = row.InspectionId\r\n this.isRowSelected =true;\r\n }\r\n\r\n public onConfirm(){\r\n const item = this.mapAssessmentCatInspectRiskToItem(this.assessmentId, this.selectedCatInspectionId);\r\n this._store$.dispatch(fromCore.EMO.SaveEMOAssessmentCatInspectRisk(this.assetId, item));\r\n this.isRowSelected = false;\r\n this.HighlightRow = 0;\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n public onCancel() {\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n public clearCatInspectParsingDetails() {\r\n this._store$.dispatch(fromCore.EMO.UpdateCatInspectParsingDetails('')); \r\n }\r\n\r\n private mapAssessmentCatInspectRiskToItem(assessmentId: number, inspectionId: number): AssessmentCatInspectRisk {\r\n\r\n return {\r\n assessmentId: assessmentId,\r\n inspectionId: inspectionId\r\n }\r\n\r\n }\r\n\r\n public rowSelect(row: SystemCatInspection) {\r\n this.isRowSelected = true;\r\n this.HighlightRow = row.InspectionId; \r\n this.assetId = row.AssetId;\r\n this.selectedCatInspectionId = row.InspectionId;\r\n }\r\n \r\n\r\n ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","
    \r\n \r\n\r\n \r\n VIMS\r\n \r\n {{ row.vimKnownGood }}\r\n \r\n \r\n\r\n \r\n SN Prefix\r\n \r\n {{ row.serialNumberPrefix }}\r\n \r\n \r\n\r\n \r\n Streaming Configuration\r\n \r\n {{ row.streamingTemplate }}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
    \r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {AssociateStreamingConfigModel} from '@rfv/modules/shared/model/associate-streaming-config.model';\r\nimport {InvolveDataSource} from '@rfv/modules/involve/table';\r\n\r\n@Component({\r\n selector: 'associate-streaming-config-modal',\r\n templateUrl: './associate-streaming-config-modal.component.html',\r\n styleUrls: ['./associate-streaming-config-modal.component.scss']\r\n})\r\nexport class AssociateStreamingConfigModalComponent implements OnInit {\r\n\r\n @Input() configModel: AssociateStreamingConfigModel;\r\n\r\n public columns = [\r\n \"vimKnownGood\",\r\n \"serialNumberPrefix\",\r\n \"streamingTemplate\"\r\n ];\r\n\r\n public dataSource = new InvolveDataSource(null, () => this.columns);\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.dataSource.data = [this.configModel];\r\n }\r\n\r\n}\r\n","
    \r\n \r\n\r\n \r\n Asset Name\r\n \r\n {{row?.AssetName}}\r\n \r\n \r\n\r\n \r\n Customer Name\r\n \r\n {{row?.CustomerName}}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n","import {Component, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\r\nimport {VimService} from '@appsettings/vim.service';\r\nimport {VimAsset} from '@rfv/modules/core/models/vim-asset';\r\nimport {InvolveDataSource} from '@rfv/modules/involve/table';\r\nimport {VimKnownGood} from '@rfv/modules/core/models';\r\nimport {InvolveSort} from '@rfv/modules/involve/table/sort';\r\nimport {Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'view-vims-assets-modal',\r\n templateUrl: './view-vims-assets-modal.component.html',\r\n styleUrls: ['./view-vims-assets-modal.component.scss']\r\n})\r\nexport class ViewVimsAssetsModalComponent implements OnInit, OnDestroy {\r\n\r\n public _destroyed$ = new Subject();\r\n\r\n @Input() SHA1: string;\r\n\r\n public isLoading: boolean = true;\r\n public assets: VimAsset[];\r\n\r\n public columns = [\r\n 'AssetName',\r\n 'CustomerName',\r\n 'OriginalName'\r\n ];\r\n public dataSource = new InvolveDataSource(null, data => this.columns);\r\n\r\n constructor(private _vimService: VimService) { }\r\n\r\n ngOnInit(): void {\r\n this._vimService.getVimsAssets(this.SHA1).pipe(\r\n takeUntil(this._destroyed$)\r\n ).subscribe(assets => {\r\n this.assets = assets;\r\n this.isLoading = false;\r\n this.dataSource.data = this.assets;\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","
    \r\n
    \r\n
    \r\n Clicking confirm will add this VIMS to the \"Known Good\" list of VIMS.\r\n Designating this as a \"Known Good\" VIMS will cause this configuration file to\r\n trigger different behavior during the onboarding process. Click \"Confirm\" to add\r\n this to the \"Known Good\" VIMS list or click X to cancel.\r\n
    \r\n\r\n
    \r\n SHA1 already exists in Known Good list\r\n
    \r\n\r\n \r\n \r\n SHA1 is required.\r\n SHA1 must be 40 characters, digits 0-9 and letters A-F.\r\n \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport * as fromRoot from '@rfv/store';\r\nimport {Store} from '@ngrx/store';\r\nimport * as fromSupport from '@rfv/modules/support/store';\r\nimport {Subject, combineLatest, Observable} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport * as VimActions from '@rfv/modules/core/store/vim';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport {VimKnownGood} from '@rfv/modules/core/models';\r\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'create-vims-modal',\r\n templateUrl: './create-vims-modal.component.html',\r\n styleUrls: ['./create-vims-modal.component.scss']\r\n})\r\nexport class CreateVimsModalComponent implements OnInit, OnDestroy {\r\n \r\n private destroyed$ = new Subject(); \r\n \r\n public isAvailableVimsConfigsLoaded$: Observable;\r\n public isAvailableVimsConfigsLoading$: Observable;\r\n \r\n public sha1Exists: boolean = false;\r\n public knownGoodVims: VimKnownGood[]= [];\r\n public isLoading = true;\r\n\r\n public form: UntypedFormGroup = this._fb.group({\r\n SHA1: [ null, [ Validators.required, Validators.pattern(/^[0-9A-F]{40}$/i)]]\r\n });\r\n\r\n constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.isAvailableVimsConfigsLoaded$ = this._store$.select(fromSupport.HardwareConfigurationForm.isAvailableVimsConfigsLoaded);\r\n this.isAvailableVimsConfigsLoading$ = this._store$.select(fromSupport.HardwareConfigurationForm.isAvailableVimsConfigsLoading);\r\n\r\n combineLatest([\r\n this._store$.select(fromCore.VIM.getAll)\r\n ]).pipe(\r\n takeUntil(this.destroyed$)\r\n ).subscribe(([knownGood]) => {\r\n if(knownGood && knownGood.length) {\r\n this.knownGoodVims = knownGood;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n confirm() {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n\r\n // Reset validation\r\n this.sha1Exists = false;\r\n if (this.validateSHA1Exists()) {\r\n this.sha1Exists = true;\r\n return;\r\n }\r\n\r\n this._store$.dispatch(VimActions.ApproveVims(this.form.get('SHA1').value, \"\"));\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n validateSHA1Exists(): boolean {\r\n const target = this.knownGoodVims.filter(config => {\r\n return config.SHA1.toLowerCase() === this.form.get('SHA1').value.toLowerCase();\r\n });\r\n\r\n return target.length > 0;\r\n }\r\n}\r\n","
    \r\n\r\n
    \r\n\r\n
    \r\n Clicking confirm will add this VIMS to the \"Known Good\" list of VIMS.\r\n Designating this as a \"Known Good\" VIMS will cause this configuration file to trigger different behavior during the onboarding process.\r\n Click Confirm to add VIMS to Known Good List.\r\n Automated Onboarding will not overwrite VIMS configurations in the Known Good List. SHA1 must be 40 characters, digits 0-9 and letters A-F.\r\n
    \r\n\r\n \r\n \r\n \r\n \r\n Enable DOut\r\n \r\n SHA1 is required.\r\n SHA1 must be 40 characters, digits 0-9 and letters A-F.\r\n \r\n\r\n
    \r\n\r\n \r\n\r\n \r\n\r\n
    \r\n\r\n
    \r\n\r\n
    \r\n","import { Component, Input } from '@angular/core';\r\nimport { FormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as DealerVimActions from '@rfv/modules/core/store/dealerVim';\r\n\r\n\r\n@Component({\r\n selector: 'create-dealer-vims-modal',\r\n templateUrl: './create-dealer-vims-modal.component.html',\r\n styleUrls: ['./create-dealer-vims-modal.component.scss']\r\n})\r\nexport class CreateDealerVimsModalComponent{\r\n\r\n public form: UntypedFormGroup = this._fb.group({\r\n SHA1: [ null, [ Validators.required, Validators.pattern(/^[0-9A-F]{40}$/i)] ],\r\n DOut: [ false, null ]\r\n });\r\n\r\n constructor(\r\n private _store$: Store,\r\n private _fb: FormBuilder\r\n ) { }\r\n\r\n public confirm() {\r\n if (this.form.invalid)\r\n return;\r\n\r\n // console.log(JSON.stringify(this.form.get('DOut').value))\r\n\r\n this._store$.dispatch(DealerVimActions.AddVim(this.form.get('SHA1').value.toUpperCase(), this.form.get('DOut').value));\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n public cancel() {\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'remove-dealer-vims-modal',\r\n templateUrl: './remove-dealer-vims-modal.component.html',\r\n styleUrls: ['./remove-dealer-vims-modal.component.scss']\r\n})\r\nexport class RemoveDealerVimsModalComponent{\r\n\r\n @Input() SHA1: string;\r\n}","
    \r\n\r\n
    \r\n\r\n
    \r\n Are you sure you want to remove {{ SHA1 }} from the list of Known Good VIMS?\r\n
    \r\n\r\n
    \r\n\r\n
    \r\n","
    \r\n \r\n \r\n \r\n Onboarding Step\r\n \r\n \r\n {{row.stepName || '—' }}\r\n \r\n \r\n \r\n \r\n \r\n Start Time\r\n \r\n \r\n \r\n {{row.startTime | rfvDate}}  \r\n \r\n {{row.startTime | rfvTime}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n End Time\r\n \r\n \r\n \r\n {{row.endTime | rfvDate}}  \r\n \r\n {{row.endTime | rfvTime}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Failure Reason\r\n \r\n \r\n 0\" [messageToCopy]=\"row.failureReason\" [content]=\"(row.failureReason?.length > 45) ? (row.failureReason | slice:0:45) + '...' : (row.failureReason || '—')\">\r\n
    {{'—'}}
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n Message\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
    \r\n \r\n No data found\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n\r\n
    ","\r\nimport { InvolveDataSource } from '@rfv/modules/involve/table';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { Component, OnInit, OnDestroy } from '@angular/core';\r\n\r\nimport { OnboardingEventLog } from '@rfv/modules/core/models';\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from \"@rfv/modules/core/store\";\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { animate, keyframes, trigger, state, style, transition } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'onboarding-event-log',\r\n templateUrl: './onboarding-event-log.component.html',\r\n styleUrls: ['./onboarding-event-log.component.scss'],\r\n})\r\nexport class OnboardingEventLogComponent implements OnInit, OnDestroy {\r\n\r\n public modalDataSource = new InvolveDataSource(null, data => this.modalColumns);\r\n\r\n public modalColumns: string[] = [\r\n 'step', 'startTime', 'endTime', 'failureReason', 'message'\r\n ];\r\n\r\n public isLoading$: Observable = this._store$.select(fromCore.OnboardingEventLogs.isLoading);\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _store$: Store\r\n ) { }\r\n\r\n ngOnInit() {\r\n this._store$.select(fromCore.OnboardingEventLogs.getAll).pipe(takeUntil(this._destroyed$)).subscribe(eventLogs => {\r\n this.modalDataSource.data = eventLogs.sort((a, b) => {\r\n return new Date(b.startTime) - new Date(a.startTime);\r\n })\r\n }\r\n )\r\n\r\n }\r\n\r\n public getContent(message: string[]) {\r\n var notes = message?.join(', ');\r\n \r\n if (notes?.length > 45)\r\n return notes.slice(0, 45) + '...';\r\n\r\n return notes;\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n}\r\n\r\n","
    \r\n \r\n \r\n \r\n

    Log

    \r\n \r\n
    \r\n \r\n
    \r\n
    {{ (userLogs$ | async)?.jsonLog | json }}
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n

    Request

    \r\n \r\n
    \r\n \r\n
    {{ (userLogs$ | async)?.jsonRequest | json }}
    \r\n
    \r\n
    \r\n \r\n \r\n

    Response

    \r\n \r\n
    \r\n \r\n
    {{ (userLogs$ | async)?.jsonResponse | json }}
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n\r\n
    ","import { Component } from \"@angular/core\";\r\nimport { Store } from \"@ngrx/store\";\r\nimport { UserLog } from \"@rfv/modules/tiles/models/user-log.model\";\r\n\r\nimport * as fromRoot from \"@rfv/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport { Observable } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'user-log-modal',\r\n templateUrl: 'user-log.component.html',\r\n styles: [\r\n `.allow-select { user-select: text }`\r\n ]\r\n})\r\nexport class UserLogModalComponent {\r\n public userLogs$: Observable = this._store$.select(fromCore.Support.SiteLogs.getUserlog)\r\n\r\n public isLoading$: Observable = this._store$.select(fromCore.Support.SiteLogs.isUserlogLoading)\r\n\r\n constructor(\r\n private _store$: Store,\r\n ) { }\r\n\r\n public stringify(value: any) {\r\n return JSON.stringify(value, null, 4);\r\n }\r\n}","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'delete-suppressing-alarm-modal',\r\n templateUrl: './delete-suppressing-alarm-modal.component.html',\r\n styleUrls: ['./delete-suppressing-alarm-modal.component.scss']\r\n})\r\nexport class DeleteSuppressingAlarmModalComponent {\r\n\r\n @Input() suppressingAlarmName: string;\r\n}","
    \r\n
    \r\n
    \r\n This will remove all suppression settings for {{ suppressingAlarmName }}\r\n
    \r\n
    \r\n
    ","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'delete-section-modal',\r\n templateUrl: './delete-section-modal.component.html',\r\n styleUrls: ['./delete-section-modal.component.scss']\r\n})\r\nexport class DeleteSectionModalComponent {\r\n\r\n @Input() sectionName: string;\r\n}","
    \r\n
    \r\n
    \r\n Are you sure you want to delete {{ sectionName }}? All sections and assets will be moved to the parent sitemap group.\r\n
    \r\n
    \r\n You cannot undo this action\r\n
    \r\n
    \r\n
    ","
    \r\n
    \r\n

    Select an Asset and a Derived Data Point to copy from.

    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n {{ asset.name }}\r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n {{ ddp.InternalDescription }}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    ","/* Angular */\r\nimport { Component, OnInit, Output, EventEmitter, OnDestroy } from \"@angular/core\";\r\nimport { FormControl, UntypedFormGroup, Validators } from \"@angular/forms\";\r\n\r\n/* RxJS */\r\nimport { Observable, Subject, combineLatest } from \"rxjs\";\r\nimport { map, switchMap, take, takeUntil } from \"rxjs/operators\";\r\n\r\n/* NgRx */\r\nimport { Store, select } from \"@ngrx/store\";\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\n\r\nimport { Asset, AssetDatapointSetting, DerivedDataPoint } from \"@rfv/modules/core/models\";\r\n\r\n@Component({\r\n selector: 'copy-derived-datapoint',\r\n styleUrls: ['./copy-derived-datapoint.component.scss'],\r\n templateUrl: './copy-derived-datapoint.component.html'\r\n})\r\nexport class CopyDerivedDatapointModalComponent implements OnInit, OnDestroy {\r\n \r\n @Output() cancelClicked = new EventEmitter();\r\n\r\n public assets$: Observable;\r\n public datapoints$: Observable;\r\n public derivedDataPoints$: Observable = this._store$.select(fromCore.DerivedDataPoints.Items.getModalList);\r\n public isModalListLoading$: Observable = this._store$.select(fromCore.DerivedDataPoints.Items.isModalListLoading);\r\n \r\n public form = new UntypedFormGroup({\r\n fromAsset: new FormControl(null, Validators.required),\r\n copyDatapoint: new FormControl(null, Validators.required)\r\n });\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n constructor(private _store$: Store) { }\r\n\r\n ngOnInit(): void {\r\n this.datapoints$ = this._store$.pipe(\r\n select(fromDashboard.getSelectedAssetId),\r\n switchMap(assetId => combineLatest([\r\n this._store$.select(fromCore.Assets.DatapointSettings.getEnabledDatapoints(assetId)),\r\n this._store$.select(fromCore.DerivedDataPoints.Items.getSelectedDDP)\r\n ]).pipe(\r\n map(([dataPoints, selectedDDP]) => dataPoints.filter(dp => dp.Id !== selectedDDP?.DerivedDataPointId))\r\n )\r\n ));\r\n\r\n this.assets$ = combineLatest([\r\n this._store$.select(fromCore.Assets.Entities.getSortedAssets),\r\n this._store$.select(fromDashboard.getSelectedAssetId)\r\n ]).pipe(\r\n takeUntil(this._destroyed$),\r\n map(([assetList, selectedAssetId]) => {\r\n return assetList.filter(asset => {\r\n return asset.id != selectedAssetId\r\n });\r\n })\r\n );\r\n };\r\n\r\n ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n };\r\n\r\n onConfirm(ddp: DerivedDataPoint) {\r\n const copy: DerivedDataPoint = {\r\n AssetId: undefined,\r\n DerivedDataPointId: undefined,\r\n DerivedEvaluationTypeId: ddp.DerivedEvaluationTypeId,\r\n Evaluation: ddp.Evaluation,\r\n InternalDescription: ddp.InternalDescription,\r\n DataPointIdentifierId: ddp.DataPointIdentifierId,\r\n UnitsOfMeasureId: ddp.UnitsOfMeasureId,\r\n UnitsOfMeasure: ddp.UnitsOfMeasure,\r\n MinValue: ddp.MinValue,\r\n MaxValue: ddp.MaxValue,\r\n SampleTime: ddp.SampleTime,\r\n Value: ddp.Value,\r\n DataPointStatusId: ddp.DataPointStatusId,\r\n DataPointStatus: ddp.DataPointStatus,\r\n IsInvalid: ddp.IsInvalid,\r\n\r\n EvaluationItems: []\r\n };\r\n\r\n this.datapoints$.pipe(\r\n take(1)\r\n ).subscribe(datapoints => {\r\n let copyEvalItems = [];\r\n ddp.EvaluationItems.forEach(evalItem => {\r\n let datapoint = datapoints?.find(dp => dp.DataPointIdentifierId == evalItem.DataPointIdentifierId);\r\n let evalItemCopy = {...evalItem};\r\n if(datapoint) {\r\n evalItemCopy.DataPointId = datapoint.Id;\r\n } else {\r\n evalItemCopy.DataPointId = null;\r\n }\r\n copyEvalItems.push(evalItemCopy);\r\n })\r\n copy.EvaluationItems = [...copyEvalItems];\r\n this._store$.dispatch(fromCore.DerivedDataPoints.Items.SelectDDP(copy));\r\n this.cancelClicked.emit();\r\n });\r\n };\r\n\r\n handleAssetChange(value: number) {\r\n if (value != null) {\r\n this._store$.dispatch(fromCore.DerivedDataPoints.Items.LoadDDPsByAssetId(value));\r\n }\r\n };\r\n}","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'unsubscribe-alert-schedule',\r\n templateUrl: './unsubscribe-alert-schedule.component.html'\r\n})\r\nexport class UnsubscribeAlertScheduleModalComponent {\r\n @Input() alarmGroupName: string;\r\n @Input() scheduleName: string;\r\n @Input() unitName: string;\r\n}","Unsubscribe from Alert Schedule?\r\n
      \r\n
    • \r\n Alarm Group: {{ alarmGroupName }}\r\n
    • \r\n
    • \r\n Alert Schedule: {{ scheduleName }}\r\n
    • \r\n
    • \r\n Unit: {{ unitName }}\r\n
    • \r\n
    ","
    \r\n
    \r\n
    \r\n The selected instance will be divided into the following\r\n
    \r\n
    \r\n
    \r\n
    \r\n From\r\n
    \r\n
    \r\n To\r\n
    \r\n
    \r\n Party\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {{ (modifiedRuntimeEvent.eventStartDate | rfvDateTime) }}\r\n
    \r\n
    \r\n {{ (modifiedRuntimeEvent.eventEndDate | rfvDateTime) }}\r\n
    \r\n
    \r\n {{ modifiedRuntimeEvent.runtimeEventParty.Name }}\r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { UnitRuntimeMarineManualEntryModalContent } from '@rfv/modules/dashboard/modules/unit-runtime/models/unit-runtime-manual-entry.model';\r\n\r\n/* Models */\r\n\r\n/* NgRx */\r\n\r\n\r\n@Component({\r\n selector: 'marine-asset-runtime-modify-modal-content',\r\n templateUrl: './marine-asset-runtime-modify-modal-content.component.html'\r\n})\r\nexport class MarineAssetRuntimeEventModifyModalContentComponent implements OnInit {\r\n\r\n @Input() modifiedMarineRuntimeEventsData: UnitRuntimeMarineManualEntryModalContent[];\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n}\r\n","
    \r\n\r\n
    \r\n
    \r\n
    \r\n

    \r\n {{ title }}\r\n {{ title2 }}\r\n

    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {{ data }}\r\n
    \r\n
    {{ data }}
    \r\n
    \r\n \r\n
    \r\n
    \r\n 0\">\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    {{unit.assetId}}{{unit.assetName}}
    \r\n
    \r\n\r\n \r\n No units selected\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n Please confirm your choice to clear the serial number, as this will prevent the device from posting.\r\n
    \r\n
    \r\n Deleting this datapoint will permanently delete related historical data.\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n By proceeding you will be setting\r\n
    \r\n {{ data.control }}\r\n
    \r\n to {{ data.state }} for\r\n
    \r\n {{ data.asset }}\r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\n\r\n/* RxJS */\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Action, select, Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\n@Component({\r\n selector: 'app-modal',\r\n styleUrls: ['./modal.component.scss'],\r\n templateUrl: 'modal.component.html',\r\n})\r\nexport class ModalComponent implements OnInit, OnDestroy {\r\n private _destroyed$ = new Subject();\r\n\r\n ModalType = fromRoot.Modal.ModalType;\r\n ModalContentType = fromRoot.Modal.ModalContentType;\r\n\r\n customClass: string;\r\n customWidth: string;\r\n modalType: fromRoot.Modal.ModalType;\r\n contentType: fromRoot.Modal.ModalContentType;\r\n title: string;\r\n title2: string;\r\n data: any;\r\n primaryText: string;\r\n primaryAction: Action | null;\r\n primaryActionCallback: Function | null;\r\n secondaryText: string;\r\n secondaryAction: Action | null;\r\n secondaryActionCallback: Function | null;\r\n tertiaryText: string;\r\n tertiaryAction: Action | null;\r\n closeAction: Action | null;\r\n zindex: boolean;\r\n\r\n isOpen$: Observable;\r\n\r\n constructor(\r\n private _store$: Store,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.isOpen$ = this._store$.select(fromRoot.Modal.isOpen);\r\n\r\n this._store$.pipe(\r\n select(fromRoot.Modal.getOptions),\r\n takeUntil(this._destroyed$),\r\n ).subscribe(options => {\r\n if (options) {\r\n this.customClass = options.customClass;\r\n this.customWidth = options.customWidth;\r\n this.modalType = options.modalType;\r\n this.contentType = options.contentType;\r\n this.title = options.title;\r\n this.title2 = options.title2;\r\n this.data = options.data;\r\n this.primaryText = options.primaryText;\r\n this.primaryAction = options.primaryAction;\r\n this.primaryActionCallback = options.primaryActionCallback;\r\n this.secondaryText = options.secondaryText;\r\n this.secondaryAction = options.secondaryAction;\r\n this.secondaryActionCallback = options.secondaryActionCallback;\r\n this.tertiaryText = options.tertiaryText;\r\n this.tertiaryAction = options.tertiaryAction;\r\n this.closeAction = options.closeAction;\r\n this.zindex = options.zindex || false;\r\n }\r\n });\r\n }\r\n\r\n handlePrimaryClick() {\r\n if (this.primaryAction) {\r\n this._store$.dispatch(this.primaryAction);\r\n } else if (this.primaryActionCallback) {\r\n this.primaryActionCallback();\r\n }\r\n\r\n this.closeModal();\r\n }\r\n\r\n handleSecondaryClick() {\r\n if (this.secondaryAction) {\r\n this._store$.dispatch(this.secondaryAction);\r\n } else if (this.secondaryActionCallback) {\r\n this.secondaryActionCallback();\r\n }\r\n\r\n this.closeModal();\r\n }\r\n\r\n handleTertiaryClick() {\r\n if (this.tertiaryAction) {\r\n this._store$.dispatch(this.tertiaryAction);\r\n }\r\n\r\n this.closeModal();\r\n }\r\n\r\n handleClickActions() {\r\n if (this.primaryAction) {\r\n this._store$.dispatch(this.primaryAction);\r\n }\r\n }\r\n\r\n closeModal() {\r\n if (this.closeAction)\r\n this._store$.dispatch(this.closeAction);\r\n else\r\n this._store$.dispatch(fromRoot.Modal.Close());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n}\r\n","
    \r\n\r\n

    \r\n Agreements\r\n

    \r\n\r\n
    \r\n \r\n\r\n \r\n \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n I accept the terms in the\r\n \r\n End User License Agreement.\r\n \r\n \r\n
    \r\n
    \r\n \r\n I accept the terms in the\r\n \r\n Privacy Policy.\r\n \r\n \r\n
    \r\n
    \r\n \r\n I accept the terms in the\r\n \r\n Cookie Usage Statement.\r\n \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n\r\n
    ","// angular\r\nimport { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, UntypedFormGroup } from '@angular/forms';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\n\r\n// store\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n// rxjs \r\nimport { Observable, Subject } from 'rxjs';\r\nimport { map, takeUntil, filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-eula',\r\n templateUrl: './eula.component.html',\r\n styleUrls: ['./eula.component.scss']\r\n})\r\nexport class EulaComponent implements OnInit, OnDestroy {\r\n\r\n public form: UntypedFormGroup;\r\n\r\n public eula: SafeResourceUrl;\r\n public cookie: SafeResourceUrl;\r\n public privacyPolicy: SafeResourceUrl;\r\n\r\n public eula$: Observable;\r\n public privacyPolicy$: Observable;\r\n\r\n public eulaId: number;\r\n\r\n private _destroyed$ = new Subject();\r\n\r\n public constructor(\r\n private _fb: FormBuilder,\r\n private _store: Store,\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n public ngOnInit() {\r\n this.eula$ = this._store.pipe(\r\n select(fromRoot.Eula.getEulaPdf),\r\n takeUntil(this._destroyed$),\r\n filter(eulaPdf => !!eulaPdf),\r\n map(eulaPdf => this.sanitizer.bypassSecurityTrustResourceUrl(eulaPdf)));\r\n\r\n this.privacyPolicy$ = this._store.pipe(\r\n select(fromRoot.Eula.getEulaSettings),\r\n takeUntil(this._destroyed$),\r\n filter(policy => !!policy),\r\n map(policy => this.sanitizer.bypassSecurityTrustResourceUrl(policy.PrivacyFileName)));\r\n\r\n this._store.pipe(\r\n select(fromRoot.Eula.getEulaSettings),\r\n takeUntil(this._destroyed$)\r\n ).subscribe(eula => eula && [\r\n this.eula = eula.EulaFileName,\r\n this.cookie = eula.CookieFileName,\r\n this.privacyPolicy = eula.PrivacyFileName,\r\n this.eulaId = eula.EulaId,\r\n ]);\r\n\r\n this.form = this._fb.group({\r\n eula: false,\r\n cookie: false,\r\n privacyPolicy: false,\r\n });\r\n }\r\n\r\n public ngOnDestroy() {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n }\r\n\r\n public agree() {\r\n this._store.dispatch(fromRoot.Eula.SaveEula(this.eulaId));\r\n }\r\n\r\n public disagree() {\r\n this._store.dispatch(fromCore.Auth.Logout())\r\n }\r\n\r\n public checkDisable() {\r\n let check: number = 0;\r\n let numberOfTerms: number = 0;\r\n\r\n if (this.eula) numberOfTerms++;\r\n if (this.cookie) numberOfTerms++;\r\n if (this.privacyPolicy) numberOfTerms++;\r\n\r\n if (this.form.value.eula == true) check++;\r\n if (this.form.value.cookie == true) check++;\r\n if (this.form.value.privacyPolicy == true) check++;\r\n\r\n return check == numberOfTerms ? false : true;\r\n }\r\n\r\n}\r\n","\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n\r\n \r\n 0; else noAccess\">\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
    ","// angular\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\n\r\n// rxjs\r\nimport { Observable, combineLatest } from 'rxjs';\r\nimport { switchMap, map, take, tap } from 'rxjs/operators';\r\n\r\n// ngrx\r\nimport { Store, select } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n// rfv\r\nimport { Customer, Token } from '@rfv/modules/core/models';\r\nimport { AppSettingsService } from '@rfv/modules/core/services';\r\nimport { environment } from '@environments/environment';\r\nimport { UserEulaSettings } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-eula-settings.modal';\r\n\r\nimport { Buffer } from 'buffer';\r\n\r\n\r\n@Component({\r\n selector: 'app',\r\n templateUrl: 'app.component.html',\r\n styleUrls: ['app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit {\r\n isAuthenticated$: Observable;\r\n isAuthenticating$: Observable;\r\n\r\n selectedCustomer$: Observable;\r\n selectedFilterName$: Observable;\r\n\r\n customers$: Observable;\r\n isCustomersLoaded$: Observable;\r\n isCustomersLoading$: Observable;\r\n\r\n isUserSessionLoaded$: Observable;\r\n isUserSessionLoading$: Observable;\r\n hasUserSessionError$: Observable;\r\n\r\n isCustomerAndSessionLoaded$: Observable;\r\n\r\n isCoreLoaded$: Observable;\r\n isCoreLoading$: Observable;\r\n\r\n isLoading$: Observable;\r\n themeLoaded$: Observable;\r\n\r\n isAnyMenuOpen$: Observable;\r\n isSitemapOpen$: Observable;\r\n isFavoritesOpen$: Observable;\r\n isGlobalFilterOpen$: Observable;\r\n themeId$: Observable;\r\n\r\n eulaSettings: UserEulaSettings;\r\n isEulaLoading$: Observable;\r\n\r\n token$: Observable = this._store.pipe(select(fromCore.Auth.getToken));\r\n\r\n constructor(\r\n private _store: Store,\r\n private _router: Router,\r\n private appSettings: AppSettingsService,\r\n private titleService: Title\r\n ) { }\r\n\r\n ngOnInit() {\r\n this._store.select(fromRoot.Eula.getEulaSettings).subscribe(v => {\r\n this.eulaSettings = v\r\n });\r\n\r\n this.isEulaLoading$ = this._store.select(fromRoot.Eula.isEulaLoading);\r\n this.isAuthenticated$ = this._store.select(fromCore.Auth.isAuthenticated);\r\n this.isAuthenticating$ = this._store.select(fromCore.Auth.isAuthenticating);\r\n\r\n this.selectedCustomer$ = this._store.select(fromCore.Customers.getSelected);\r\n this.selectedCustomer$\r\n .subscribe(customer => {\r\n if (customer)\r\n this.titleService.setTitle(customer.Name);\r\n });\r\n\r\n this.customers$ = this._store.select(fromCore.Customers.getAll);\r\n this.isCustomersLoaded$ = this._store.select(fromCore.Customers.isAccessLoaded);\r\n this.isCustomersLoading$ = this._store.select(fromCore.Customers.isAccessLoading);\r\n\r\n this.isUserSessionLoaded$ = this._store.select(fromCore.UserSession.isLoaded);\r\n this.isUserSessionLoading$ = this._store.select(fromCore.UserSession.isLoading);\r\n this.hasUserSessionError$ = this._store.pipe(\r\n select(fromCore.UserSession.getError),\r\n map(error => !!error)\r\n );\r\n\r\n this.isCustomerAndSessionLoaded$ = combineLatest(\r\n this.isCustomersLoaded$,\r\n this.isUserSessionLoaded$,\r\n (isCustomerLoaded, isUserSessionLoaded) => isCustomerLoaded && isUserSessionLoaded\r\n );\r\n\r\n this.isCoreLoaded$ = this._store.select(fromCore.isLoaded);\r\n this.isCoreLoading$ = this._store.select(fromCore.isLoading);\r\n\r\n this.isLoading$ = combineLatest([\r\n this.isAuthenticating$,\r\n this.isCustomersLoading$,\r\n this.isUserSessionLoading$,\r\n this.isCoreLoading$,\r\n this.isEulaLoading$\r\n ]).pipe(\r\n map(([isAuthenticating, isCustomersLoading, isUserSettingsLoading, isCoreLoading, isEulaLoading]) =>\r\n isAuthenticating || isCustomersLoading || isUserSettingsLoading || isCoreLoading || isEulaLoading)\r\n );\r\n\r\n this.isAnyMenuOpen$ = this._store.select(fromRoot.Layout.isAnyMenuOpen);\r\n this.isSitemapOpen$ = this._store.select(fromRoot.Layout.isSitemapOpen);\r\n this.isFavoritesOpen$ = this._store.select(fromRoot.Layout.isFavoritesOpen);\r\n this.isGlobalFilterOpen$ = this._store.select(fromRoot.Layout.isGlobalFilterOpen);\r\n this.themeId$ = this._store.pipe(select(fromCore.UserSession.getSessionThemeId));\r\n\r\n if (!environment.production && environment.token) {\r\n this._store.dispatch(fromCore.Auth.GetTokenSuccess({ token: environment.token }));\r\n }\r\n\r\n this.themeLoaded$ = this.themeId$.pipe(\r\n take(1),\r\n tap(themeId => this._store.dispatch(fromRoot.Storage.SaveToLocalStorage('themeId', themeId))),\r\n switchMap(themeId => this.appSettings.setAppColorTheme(themeId as 1 | 2))\r\n );\r\n\r\n this.token$.subscribe(token => {\r\n if (token) {\r\n const exp = Date.parse((token.expiration).toString());\r\n const millisecondsToDispatch = exp - Date.now() - 300000; // get milliseconds until 5 mins before expiry\r\n // maximum delay value before number exceeds 32 byte integer and this fires immediately\r\n if (millisecondsToDispatch < 2147483647) {\r\n setTimeout(() => this._store.dispatch(fromCore.Auth.RefreshToken({refreshToken: token.refreshToken})), millisecondsToDispatch);\r\n }\r\n }\r\n this.gaDecodeToken(token?.accessToken || \"\");\r\n \r\n })\r\n }\r\n\r\n closeMenu() {\r\n this._store.dispatch(fromRoot.Layout.CloseGlobalFilter());\r\n this._store.dispatch(fromRoot.Layout.CloseSitemap());\r\n this._store.dispatch(fromRoot.Layout.CloseFavorites());\r\n this._store.dispatch(fromRoot.Layout.CloseMainMenu());\r\n }\r\n\r\n public async gaDecodeToken (jwt: string, pushToDatalayer: boolean = true) {\r\n async function sha256 (message: string): Promise {\r\n const hashBuffer = await crypto.subtle?.digest(\r\n \"SHA-256\",\r\n Buffer.from(message, 'utf-8')\r\n );\r\n\r\n return Array.from(new Uint8Array(hashBuffer))\r\n .map((b) => b.toString(16).padStart(2, \"0\"))\r\n .join(\"\");\r\n };\r\n\r\n function isStringDefined (str: string): boolean {\r\n return Object.prototype.toString.call(str).slice(8, -1) === \"String\" && str !== \"\";\r\n };\r\n\r\n if (!isStringDefined(jwt)) {\r\n return;\r\n }\r\n\r\n const claims = jwt\r\n .split(\".\", 2)\r\n .reduce((obj, fragment) => ({ ...JSON.parse(atob(fragment)), ...obj }), {});\r\n\r\n const data = Object.entries({\r\n event: \"b2cloaded\",\r\n AffiliationOrgCode: String(claims.catafltnorgcode).toLowerCase(), // Affiliation Org Code\r\n AffiliationOrgName: String(claims.company).toLowerCase(), // Affiliation Org Name\r\n companyId: String(claims.ucid).toLowerCase(), // Customer Company ID - UCID\r\n HEM: await sha256(String(claims.email_address).toLowerCase()), // hash this\r\n loginID: await sha256(String(claims.catloginid).toLowerCase()), // The user's CWSID\r\n catRecId: String(claims.catrecid).toLowerCase(), // Cat RecID\r\n affClass: String(claims.catafltnclass).toLowerCase(), // Affiliation Class\r\n affCode: String(claims.catafltncode).toLowerCase(), // Affiliation Code\r\n B2CdealerCode: String(claims.catafltnorgcode).toLowerCase(), // Affiliation Org Code\r\n topLvlOrgCode: String(claims.cattoplevelorgcode).toLowerCase(), // Top Level Org Code\r\n B2CObjectID: String(claims.aud).toLowerCase(), // B2C Object Id (if this can be used as match point to B2C records for reporting and stays consistent per contact over time)\r\n B2CUserType: String(claims.catafltnclass).toLowerCase(), // B2C User Type\r\n }).reduce(\r\n (obj, [key, value]) => ({\r\n ...obj,\r\n [key]: value === \"undefined\" ? null : value,\r\n }),\r\n {}\r\n );\r\n\r\n if (pushToDatalayer) {\r\n const dataLayer = (window as any).dataLayer;\r\n ((window as any).dataLayer = dataLayer || []).push(data);\r\n\r\n // load GA4 scripts\r\n this.appSettings.loadScripts(this.appSettings.getScripts())\r\n this.OneTrustLoadedCheck()\r\n }\r\n\r\n return data;\r\n }\r\n\r\n OneTrustLoadedCheck() {\r\n // wait until oneTrust is loaded and clean up\r\n const timer = setInterval(() => {\r\n const dataLayer = (window as any).dataLayer;\r\n\r\n if (dataLayer?.find(ev => ev && ev.event === 'OneTrustLoaded')) {\r\n window.dispatchEvent(new Event('OneTrustLoaded'));\r\n clearInterval(timer);\r\n }\r\n\r\n }, 500);\r\n \r\n setTimeout(() => clearInterval(timer), 5000); \r\n }\r\n}\r\n","\r\nimport { Injectable } from \"@angular/core\";\r\n\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, mergeMap } from 'rxjs/operators';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { Actions, createEffect, ofType } from \"@ngrx/effects\";\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport { JobTitleActions } from \"./../actions\";\r\n\r\nimport * as fromUserActions from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { JobTitleService } from \"@rfv/modules/core/services/job-title.service\";\r\n\r\n/**\r\n * User side effects.\r\n */\r\n@Injectable()\r\nexport class JobTitleEffects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _JobTitleService: JobTitleService\r\n ) { }\r\n\r\n public Load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(JobTitleActions.Load),\r\n switchMap(() => this._JobTitleService.get().pipe(\r\n map(response => JobTitleActions.LoadSuccess(response)),\r\n catchError(error => of(JobTitleActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public CreateJobTitle = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(JobTitleActions.CreateJobTitle),\r\n switchMap(action => this._JobTitleService.saveJobTitle(action.jobTitle).pipe(\r\n mergeMap(() => [\r\n JobTitleActions.CreateJobTitleSuccess(),\r\n JobTitleActions.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Job Title Created.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n JobTitleActions.CreateJobTitleFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'There was a problem creating the Job Title.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public DeleteJobTitle$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(JobTitleActions.Delete),\r\n switchMap(action => this._JobTitleService.deleteJobTitle(action.jobTitleId).pipe(\r\n mergeMap(() => [\r\n JobTitleActions.DeleteSuccess(action.jobTitleId),\r\n JobTitleActions.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Job Title deleted.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n JobTitleActions.DeleteFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'There was a problem deleting Job Title.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public ReplaceJobTitle$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(JobTitleActions.Replace),\r\n switchMap(action => this._JobTitleService.replaceJobTitle(action.newJobTitleId, action.oldJobTitleId).pipe(\r\n mergeMap(() => [\r\n JobTitleActions.ReplaceSuccess(),\r\n JobTitleActions.Delete(action.oldJobTitleId),\r\n fromUserActions.UserSearchActions.InitialLoad()\r\n ]),\r\n catchError(error => from([\r\n JobTitleActions.ReplaceFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'There was a problem replacing Job Title',\r\n autoClose: 5000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public SaveJobTitle$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(JobTitleActions.Save),\r\n switchMap(action => this._JobTitleService.saveJobTitles(action.jobTitle).pipe(\r\n mergeMap(() => [\r\n JobTitleActions.SaveSuccess(),\r\n fromCore.GlobalJobTitles.Load(),\r\n JobTitleActions.Load(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Job Title saved.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n JobTitleActions.SaveFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'There was a problem saving Job Title.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { FavoritesUser } from '@rfv/modules/dashboard/modules/user-admin/store/models/favorite-user.model';\r\nimport { Favorites } from '@rfv/modules/dashboard/modules/user-admin/store/models/favorites.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FavoritesService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n loadFavorites() {\r\n const url = `/v1/user/favorites`;\r\n return this.http.get(url);\r\n }\r\n\r\n createFavorites(favoritesObj: FavoritesUser): Observable {\r\n const url = `/v1/user/favorites`;\r\n return this.http.post(url, favoritesObj);\r\n }\r\n\r\n deleteFavorite( favoriteId: number ): Observable {\r\n const url = `/v1/user/favorites/${favoriteId}`;\r\n return this.http.delete(url);\r\n }\r\n\r\n setFavoriteAsHome( favoriteId: number ): Observable {\r\n const url = `/v1/user/favorites/${favoriteId}`;\r\n return this.http.put(url, favoriteId);\r\n }\r\n\r\n createHomePage(favoritesObj: FavoritesUser): Observable {\r\n const url = `/v1/user/favorites/home-screen`;\r\n return this.http.post(url, favoritesObj);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\r\n\r\nimport { FavoritesActions } from '../actions'; \r\nimport * as userFavoriteActions from './../actions/favorites.actions';\r\nimport { Favorites } from '../models/favorites.model';\r\nimport { UserAccessActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { FavoritesService } from '@rfv/modules/core/services/favorites.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FavoritesEffects {\r\n\r\n constructor(\r\n private _favoritesService: FavoritesService,\r\n private _actions$: Actions\r\n ) {}\r\n\r\n public Load$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FavoritesActions.Load),\r\n switchMap(() => this._favoritesService.loadFavorites().pipe(\r\n map((userData: Favorites[]) => (FavoritesActions.LoadSuccess(userData))),\r\n catchError(error => of(FavoritesActions.LoadFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public CreateFavorites$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FavoritesActions.CreateFavorites),\r\n mergeMap((action) => {\r\n return this._favoritesService.createFavorites(action.favorite).pipe(\r\n mergeMap((favoriteId) => {\r\n if (!action.isDefault) {\r\n return [\r\n userFavoriteActions.CreateFavoritesSuccess(action.favorite),\r\n userFavoriteActions.Load()\r\n ]\r\n } else {\r\n return [userFavoriteActions.ToggleSetHome(favoriteId)]\r\n }\r\n }),\r\n catchError(error => of(userFavoriteActions.CreateFavoritesFail(error)))\r\n )\r\n })\r\n )\r\n );\r\n\r\n public DeleteFavorites$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(userFavoriteActions.DeleteFavorites),\r\n mergeMap(action => \r\n this._favoritesService.deleteFavorite(action.favoriteId).pipe(\r\n mergeMap(() => [\r\n userFavoriteActions.DeleteFavoritesSuccess(action.favoriteId),\r\n userFavoriteActions.Load()\r\n ]),\r\n catchError(error => of(userFavoriteActions.DeleteFavoritesFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public ToggleSetHome$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(userFavoriteActions.ToggleSetHome),\r\n mergeMap(action => \r\n this._favoritesService.setFavoriteAsHome(action.favoriteId).pipe(\r\n mergeMap(() => [\r\n userFavoriteActions.ToggleSetHomeSuccess(action.favoriteId),\r\n userFavoriteActions.Load()\r\n ]),\r\n catchError(error => of(userFavoriteActions.ToggleSetHomeFail(error)))\r\n ) \r\n )\r\n )\r\n );\r\n\r\n public CreateHomePage$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(userFavoriteActions.CreateHomePage),\r\n mergeMap(action => \r\n this._favoritesService.createHomePage(action.favorite).pipe(\r\n mergeMap((favoriteId) => {\r\n if (action.isDefault) {\r\n return [\r\n UserAccessActions.SaveUserAccess(),\r\n userFavoriteActions.CreateHomePageSuccess(action.favorite),\r\n userFavoriteActions.Load()\r\n ]\r\n } else {\r\n return [userFavoriteActions.ToggleSetHome(favoriteId)]\r\n }\r\n }),\r\n catchError(error => of(userFavoriteActions.CreateHomePageFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\nimport { of } from \"rxjs\";\r\nimport { catchError, map, switchMap, mergeMap } from \"rxjs/operators\";\r\n\r\nimport { Actions, createEffect, ofType } from \"@ngrx/effects\";\r\n\r\nimport * as userSearchActions from \"../actions/user-search-page.actions\";\r\nimport { UserService } from \"@rfv/modules/core/services\";\r\nimport { UserDrawerActions } from \"../actions\";\r\n\r\n@Injectable()\r\nexport class UserSearchEffects {\r\n public constructor(\r\n private _actions$: Actions,\r\n private _userService: UserService\r\n ) {}\r\n\r\n public onInitialLoad$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(userSearchActions.InitialLoad),\r\n switchMap((action) =>\r\n this._userService.searchInitialLoad().pipe(\r\n map(users => userSearchActions.InitialLoadSuccess(users)),\r\n catchError((response) => of(userSearchActions.InitialLoadFail(response)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public onSearch$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(userSearchActions.Search),\r\n switchMap((action) => this._userService.searchUsers(action.filters)\r\n .pipe(\r\n map((users) => userSearchActions.SearchSuccess(users)),\r\n catchError((response) => of(userSearchActions.SearchFail(response)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public onSaveUser$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(userSearchActions.Save),\r\n switchMap((action) =>\r\n this._userService.update(action.user).pipe(\r\n mergeMap((response) => [\r\n userSearchActions.SaveSuccess(action.userId, response),\r\n userSearchActions.InitialLoad(),\r\n UserDrawerActions.CloseDrawer(),\r\n ]),\r\n catchError((response) => of(userSearchActions.SaveFail(action.userId, response)))\r\n )\r\n )\r\n )\r\n );\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { mergeMap, map, filter, } from 'rxjs/operators';\r\n\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUserUI from '@rfv/modules/dashboard/modules/user-admin/store/user-ui-store';\r\n\r\nimport { DrawerTypeIds } from '../enums/drawer-type-ids';\r\n\r\nimport {\r\n UserDrawerActions,\r\n UserSearchActions\r\n} from '../actions';\r\n\r\n\r\n@Injectable()\r\nexport class UserDrawerEffects {\r\n\r\n public constructor(\r\n private _actions$: Actions\r\n ) { }\r\n\r\n public onDrawerSelect$ = this._actions$.pipe(\r\n ofType(UserDrawerActions.SetDrawerId),\r\n map(action => action),\r\n filter(params => !!params.drawerId),\r\n map(params => {\r\n switch (params.drawerId) {\r\n case DrawerTypeIds.NewUserGroup:\r\n case DrawerTypeIds.EditUserGroupRootSitemapGroup:\r\n return fromCore.UserGroups.Select(params.id);\r\n\r\n case DrawerTypeIds.Profile:\r\n case DrawerTypeIds.NewUser:\r\n return UserSearchActions.Select(params.id);\r\n\r\n case DrawerTypeIds.NewAlarmGroup:\r\n case DrawerTypeIds.EditAlarmGroup:\r\n return fromCore.AlarmGroups.Select({ alarmGroupId: params.id });\r\n\r\n case DrawerTypeIds.NewAlertSchedule:\r\n case DrawerTypeIds.EditAlertSchedule:\r\n return fromCore.AlertSchedules.Select({ alertScheduleId: params.id });\r\n\r\n default:\r\n return UserDrawerActions.SetDrawerIdFail();\r\n }\r\n })\r\n );\r\n\r\n public onDrawerClose$ = this._actions$.pipe(\r\n ofType(UserDrawerActions.CloseDrawer),\r\n map(action => fromUserUI.SitemapSearchSuccess([]))\r\n );\r\n\r\n public onAlarmGroupSaveSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.AlarmGroups.SaveSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({ options: {\r\n type: 'success',\r\n message: 'Changes Saved',\r\n autoClose: 3000\r\n }}),\r\n UserDrawerActions.CloseDrawer(),\r\n ])\r\n )\r\n );\r\n\r\n public onAlarmGroupSaveFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.AlarmGroups.SaveFail),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({ options: {\r\n type: 'success',\r\n message: 'Failed to save changes.',\r\n autoClose: 3000\r\n }})\r\n ])\r\n )\r\n );\r\n\r\n public onAlarmGroupDeleteSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.AlarmGroups.DeleteSuccess),\r\n mergeMap(action => [\r\n fromRoot.Banner.Show({ options: {\r\n type: 'success',\r\n message: 'Alarm Group Deleted',\r\n autoClose: 3000\r\n }})\r\n ])\r\n )\r\n );\r\n\r\n public onAlarmGroupDeleteFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.AlarmGroups.DeleteFail),\r\n mergeMap(action => {\r\n if (action.error.HasAlarms || action.error.HasAlertRecipients) {\r\n return []; // don't display banner; this case is handled in the alarm-groups effects\r\n }\r\n else \r\n {\r\n return [\r\n fromRoot.Banner.Show({ options: {\r\n type: 'error',\r\n message: `Failed to delete alarm group. ${action.error.ApiError.message}`,\r\n autoClose: 3000\r\n }})\r\n ];\r\n }\r\n\r\n })\r\n )\r\n );\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/* RxJS */\r\nimport { EMPTY, from, of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport { FeatureAccessActions, UserAccessActions, FeatureAccessEditActions } from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { UserAccessState } from '../reducers/feature-access/edited-user.reducer';\r\nimport * as fromUser from '../reducers';\r\n\r\n/* Models */\r\nimport { UserAccess } from '@rfv/modules/dashboard/modules/user-admin/store/models/user-access-permissions.model';\r\n\r\n/* Service */\r\nimport { FeatureAccessService } from '@rfv/modules/core/services';\r\n\r\n/* Lodash */\r\nimport { isEqual } from 'lodash';\r\nimport * as fromRoot from '@rfv/store';\r\nimport { successPayload } from '@rfv/modules/dashboard/modules/user-admin/containers/user-feature-access-page/banner-messages';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FeatureAccessEffect {\r\n\r\n constructor(private _actions$: Actions,\r\n private _store$: Store,\r\n private _featureAccessService: FeatureAccessService\r\n ) { }\r\n\r\n public LoadUserDashboards$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FeatureAccessActions.LoadAllDashboards),\r\n mergeMap(() => this._featureAccessService.loadAllUserDashboardsTileAccess().pipe(\r\n map(dashboards => FeatureAccessActions.LoadAllDashboardsSuccess(dashboards)),\r\n catchError(err => of(FeatureAccessActions.LoadAllDashboardsFail(err)))\r\n ))\r\n )\r\n );\r\n\r\n public SetEditedUser$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessActions.SetEditedUser),\r\n withLatestFrom(this._store$.select(fromUser.getLoadedUserIds)),\r\n mergeMap(([action, loadedIds]) => {\r\n if (action.user) {\r\n const { UserId } = action.user;\r\n\r\n return of(UserAccessActions.LoadUserAccess(UserId))\r\n } else {\r\n return EMPTY;\r\n }\r\n })\r\n )\r\n );\r\n\r\n public LoadUserAccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessActions.LoadUserAccess),\r\n mergeMap(action =>\r\n this._featureAccessService.loadUserAccess(action.userId).pipe(\r\n switchMap((userAccess: UserAccess) => [\r\n UserAccessActions.LoadUserAccessSuccess(userAccess),\r\n FeatureAccessEditActions.ResetEditedUserAccess()\r\n ]),\r\n catchError(err => of(UserAccessActions.LoadUserAccessFail(err)))\r\n ) \r\n )\r\n )\r\n );\r\n\r\n public ReloadDashboard$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessActions.LoadUserAccess),\r\n map(() => FeatureAccessActions.LoadAllDashboards())\r\n )\r\n );\r\n\r\n public ResetUserAccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FeatureAccessEditActions.ResetEditedUserAccess),\r\n withLatestFrom(this._store$.select(fromUser.getEditedUserAccess)),\r\n switchMap(([_, userAccess]) => [\r\n FeatureAccessEditActions.ModifyAllDashboards(userAccess.Dashboards),\r\n FeatureAccessEditActions.ModifyAllTiles(userAccess.Tiles)\r\n ])\r\n )\r\n );\r\n\r\n public SaveUserAccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserAccessActions.SaveUserAccess),\r\n withLatestFrom(\r\n this._store$.select(fromUser.getCurrentlyEdited),\r\n this._store$.select(fromUser.getEditedUserId)\r\n ),\r\n mergeMap(([_, data, UserId]) => \r\n this._featureAccessService.saveUserAccess({ UserId, Dashboards: data.dashboards, Tiles: data.tiles }).pipe(\r\n switchMap(() => [\r\n UserAccessActions.SaveUserAccessSuccess(),\r\n UserAccessActions.LoadUserAccess(UserId),\r\n fromRoot.Banner.Show({ options: successPayload('saved') })\r\n ]),\r\n catchError(err => {\r\n const actions = [\r\n UserAccessActions.SaveUserAccessFail(err),\r\n FeatureAccessActions.LoadAllDashboards(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'There was a problem saving user access.',\r\n autoClose: 5000\r\n }\r\n })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n public ToggleAllDashboards$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FeatureAccessEditActions.AllDashboardsToggle),\r\n withLatestFrom(\r\n this._store$.select(fromUser.getUserDashboardsIds),\r\n this._store$.select(fromUser.getEditedUserCurrentDashboards)\r\n ),\r\n mergeMap(([_, allAvailableDashboards, selectedDashboards]) => {\r\n const dashboards = isEqual([...allAvailableDashboards].sort(), [...selectedDashboards].sort()) ? [] : allAvailableDashboards as number[];\r\n return from([\r\n FeatureAccessEditActions.ModifyAllDashboards(dashboards),\r\n FeatureAccessEditActions.ModifyAllTiles({})\r\n ])\r\n })\r\n )\r\n );\r\n\r\n public ToggleAllTiles$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FeatureAccessEditActions.AllTilesToggle),\r\n withLatestFrom(\r\n this._store$.select(fromUser.getDisplayedTilesAsObj),\r\n this._store$.select(fromUser.getEditedUserCurrentTiles)\r\n ),\r\n mergeMap(([_, displayed, selected]) => \r\n of(FeatureAccessEditActions.ModifyAllTiles(isEqual(displayed, selected) ? {} : displayed))\r\n )\r\n )\r\n );\r\n\r\n public RemoveTiles$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(FeatureAccessEditActions.DashboardToggle),\r\n withLatestFrom(\r\n this._store$.select(fromUser.getUserDashboards),\r\n this._store$.select(fromUser.getEditedUserCurrentDashboards),\r\n this._store$.select(fromUser.getEditedUserCurrentTiles)\r\n ),\r\n map(([action, availableDashboards, currentDashboards, currentTiles]) => {\r\n var toggleTiles = availableDashboards.find(dashboard => dashboard.Id === action.dashboardId)?.Tiles;\r\n\r\n toggleTiles?.forEach(toggleTile => {\r\n const existsOnAnotherDashboard = ~availableDashboards\r\n .filter(dashboard => currentDashboards.includes(dashboard.Id) && dashboard.Id !== action.dashboardId) // get dashboards user has access to but not the dashboard we are toggling\r\n .map(dashboard => dashboard.Tiles) // get nested array of tiles\r\n .reduce((tiles, dashboardTiles) => [...tiles, ...dashboardTiles]) // flatten\r\n .findIndex(existingTile => existingTile.Id === toggleTile.Id); // tile exists on another dashboard - Do not toggle\r\n\r\n if (!existsOnAnotherDashboard && currentTiles[toggleTile.Id])\r\n this._store$.dispatch(FeatureAccessEditActions.TileToggle(toggleTile.Id))\r\n })\r\n })\r\n ),\r\n { dispatch: false }\r\n );\r\n\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, switchMap, tap, pluck } from 'rxjs/operators';\r\n\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\nimport { ColorThemeActions, AssetNamePreferenceActions } from './../actions';\r\nimport { ColorTheme } from '../models/color-theme.model';\r\nimport { AppSettingsService } from '@rfv/modules/core/services/app-settings.service';\r\nimport { AssetNamePreference } from '../models/asset-name-preference.model';\r\nimport { UserPreferencesService } from '@rfv/modules/core/services/user-preferences.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserPreferencesEffect {\r\n\r\n constructor(\r\n private userPrefSvc: UserPreferencesService,\r\n private actions$: Actions,\r\n private appSettingsSvc: AppSettingsService\r\n ) {}\r\n\r\n loadColorTheme$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(ColorThemeActions.loadColorTheme),\r\n switchMap(_ => {\r\n return this.userPrefSvc.getColorThemes().pipe(\r\n map(themes => ColorThemeActions.loadColorThemeSuccess({ colorThemes: themes as ColorTheme[] })),\r\n catchError(err => of(ColorThemeActions.loadColorThemeFailure({ error: err })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n // react on loading of the session user, color theme is defined within session user\r\n updateColorThemeAfterLoadUserSuccess$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(fromCore.UserSession.LoadSuccess),\r\n pluck('session', 'ThemeId'),\r\n tap((themeId: 1 | 2) => this.appSettingsSvc.setAppColorTheme(themeId))\r\n ), { dispatch: false }\r\n );\r\n\r\n // react on the saving of the changes in user profile and preferences section\r\n updateColorThemeAfterColorThemeChange$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(fromCore.UserSession.SavePreferencesSuccess),\r\n pluck('session', 'ThemeId'),\r\n tap((themeId: 1 | 2) => this.appSettingsSvc.setAppColorTheme(themeId))\r\n ), { dispatch: false }\r\n );\r\n\r\n//load user asset name preference\r\n loadAssetNamePreference$ = createEffect(() =>\r\n this.actions$.pipe(\r\n ofType(AssetNamePreferenceActions.LoadAssetNamePreference),\r\n switchMap(_ => {\r\n return this.userPrefSvc.getAssetNamePreferences().pipe(\r\n map(namePreference => AssetNamePreferenceActions.LoadAssetNamePreferenceSuccess({ assetNamePreferences: namePreference as AssetNamePreference[] })),\r\n catchError(err => of(AssetNamePreferenceActions.LoadAssetNamePreferenceFailure({ error: err })))\r\n );\r\n })\r\n )\r\n );\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { mergeMap, withLatestFrom, switchMap, catchError } from 'rxjs/operators';\r\n\r\nimport { Store, select } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport * as fromRoot from '@rfv/store';\r\n\r\nimport * as fromUserActions from './../actions';\r\nimport * as fromUser from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport { from } from 'rxjs';\r\nimport { UnitAccessService } from '@rfv/modules/core/services/unit-access.service';\r\n\r\n\r\n@Injectable()\r\nexport class UnitAccessEffects {\r\n\r\n selectedUserId$ = this._store$.pipe(select(fromUser.getUnitAccessSelectedUserId));\r\n selectedUserGroupId$ = this._store$.pipe(select(fromUser.getUnitAccessSelectedUserGroupId));\r\n perpetualSitemapGroups$ = this._store$.pipe(select(fromUser.getUnitAccessPerpetualSitemapGroups));\r\n selectedAssets$ = this._store$.pipe(select(fromUser.getUnitAccessSelectedAssets));\r\n hasFullAccess$ = this._store$.pipe(select(fromUser.getHasFullAccess));\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store$: Store,\r\n private _unitAccessService: UnitAccessService,\r\n ) { }\r\n\r\n public onUserFleetLoad$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUserActions.UnitAccessActions.UserFleetLoad, fromUserActions.UnitAccessActions.SessionUserFleetLoad),\r\n mergeMap(action => this._unitAccessService.loadUserFleet(action.selectedUserId).pipe(\r\n mergeMap(fleetAccess => {\r\n switch (action.type) {\r\n case fromUserActions.UnitAccessActions.SessionUserFleetLoad.type:\r\n return [\r\n fromUserActions.UnitAccessActions.SessionUserFleetLoadSuccess(fleetAccess),\r\n ];\r\n break;\r\n default:\r\n return [\r\n fromUserActions.UnitAccessActions.UserGroupSelected(fleetAccess.userGroupId),\r\n fromUserActions.UnitAccessActions.UserFleetLoadSuccess(fleetAccess),\r\n ];\r\n break;\r\n }\r\n }),\r\n catchError(error => from([\r\n fromUserActions.UnitAccessActions.UserFleetLoadError(error),\r\n fromRoot.Banner.Show({ options: {\r\n type: 'error',\r\n message: `There was a problem loading user unit access.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n\r\n public onUserFleetSave$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromUserActions.UnitAccessActions.UserFleetSave),\r\n withLatestFrom(\r\n this.selectedUserId$,\r\n this.selectedUserGroupId$,\r\n this.perpetualSitemapGroups$,\r\n this.selectedAssets$,\r\n this.hasFullAccess$\r\n ),\r\n mergeMap(([action, userId, userGroupId, perpetualAccessList, perpetualAssetAccessList, hasFullAccess]) =>\r\n this._unitAccessService.saveUserFleet({\r\n UserId: userId,\r\n UserGroupId: userGroupId,\r\n PerpetualAccess: hasFullAccess ? [] : perpetualAccessList,\r\n PerpetualAssetAccess: hasFullAccess ? [] : perpetualAssetAccessList\r\n }).pipe(\r\n switchMap((success) => [\r\n fromUserActions.UnitAccessActions.UserFleetSaveSuccess(success),\r\n fromUserActions.UserSearchActions.InitialLoad(),\r\n fromRoot.Banner.Show({ options: {\r\n type: 'success',\r\n message: `Unit access was saved successfully.`,\r\n autoClose: 3000\r\n }\r\n }),\r\n ]),\r\n catchError(error => from([\r\n fromUserActions.UnitAccessActions.UserFleetLoadError(error),\r\n fromRoot.Banner.Show({ options: {\r\n type: 'error',\r\n message: `There was a problem saving user unit access.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n ))\r\n )\r\n );\r\n}\r\n","import { JobTitleEffects } from './job-title';\r\nimport { FavoritesEffects } from './favorites.effects';\r\nimport { UserSearchEffects } from './user-search.effects';\r\nimport { UserDrawerEffects } from './user-drawer.effects';\r\nimport { FeatureAccessEffect } from './feature-access.effect';\r\nimport { UserPreferencesEffect } from './user-preferences.effects';\r\nimport { UnitAccessEffects } from './unit-access.effects';\r\nimport { UserNotificationSettingsEffects } from './user-notification-settings.effects';\r\nimport { AssetNotificationRecipientEffects } from './asset-notification-recipient.effects';\r\n\r\nexport const EFFECTS = [\r\n JobTitleEffects,\r\n FavoritesEffects,\r\n UserSearchEffects,\r\n UserDrawerEffects,\r\n FeatureAccessEffect,\r\n UserPreferencesEffect,\r\n UnitAccessEffects,\r\n UserNotificationSettingsEffects,\r\n AssetNotificationRecipientEffects\r\n];\r\n","import { Injectable } from '@angular/core';\r\n// import { AssetNotificationRecipientService } from '../services/asset-notification-recipient.service';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\n\r\n/* RxJS */\r\nimport { of } from 'rxjs';\r\nimport { catchError, map, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\nimport { Store } from '@ngrx/store';\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromUsers from '@rfv/modules/dashboard/modules/user-admin/store/reducers';\r\nimport { AssetNotificationRecipientActions } from './../actions';\r\nimport { successUserNotificationSettingsPayload } from '../user-banner-messages';\r\nimport { AssetNotificationRecipientService } from '@rfv/modules/core/services';\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssetNotificationRecipientEffects {\r\n\r\n constructor(\r\n private _actions$: Actions,\r\n private _assetNotificationRecipientService: AssetNotificationRecipientService,\r\n private _store$: Store,\r\n ) { }\r\n\r\n public onDelete$ = createEffect( \r\n () => this._actions$.pipe(\r\n ofType(AssetNotificationRecipientActions.Delete),//delete another = !removeOne\r\n switchMap(action => this._assetNotificationRecipientService.delete(action.alertRecipientId, action.deleteOne).pipe(\r\n withLatestFrom(this._store$.select(fromUsers.getUserById(action.userId))),\r\n mergeMap(([response, user]) => {\r\n if (!action.openModal)\r\n return [AssetNotificationRecipientActions.DeleteSuccess(action.userId, action.alertRecipientId)]\r\n else\r\n return [\r\n AssetNotificationRecipientActions.DeleteSuccess(action.userId, action.alertRecipientId),\r\n fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--large',\r\n customWidth: '850px',\r\n modalType: fromRoot.Modal.ModalType.NoButtons,\r\n contentType: fromRoot.Modal.ModalContentType.UserRecipients,\r\n title: `${user.LastName}, ${user.FirstName}`,\r\n title2: `${user.Email}`,\r\n data: user,\r\n zindex: true,\r\n }\r\n })\r\n ]\r\n }\r\n ),\r\n catchError(response => of(AssetNotificationRecipientActions.DeleteFail(response)))\r\n ))\r\n )\r\n );\r\n\r\n public onDeleteAll$ = createEffect( \r\n () => this._actions$.pipe(\r\n ofType(AssetNotificationRecipientActions.DeleteAll),//delete another = !removeOne\r\n switchMap(action => this._assetNotificationRecipientService.deleteAllRecipient(action.userId).pipe(\r\n withLatestFrom(this._store$.select(fromUsers.getUserById(action.userId))),\r\n mergeMap(([response, user]) => {\r\n if (!action.openModal)\r\n return [AssetNotificationRecipientActions.DeleteAllSuccess(action.userId)]\r\n else\r\n return [\r\n AssetNotificationRecipientActions.DeleteAllSuccess(action.userId),\r\n fromRoot.Modal.Open({\r\n options: {\r\n customClass: 'modal__box modal--large',\r\n customWidth: '850px',\r\n modalType: fromRoot.Modal.ModalType.NoButtons,\r\n contentType: fromRoot.Modal.ModalContentType.UserRecipients,\r\n title: `${user.LastName}, ${user.FirstName}`,\r\n title2: `${user.Email}`,\r\n data: user,\r\n zindex: true,\r\n }\r\n })\r\n ]\r\n }\r\n ),\r\n catchError(response => of(AssetNotificationRecipientActions.DeleteFail(response)))\r\n ))\r\n )\r\n );\r\n\r\n \r\n\r\n public onDeleteSuccess$ = createEffect( \r\n () => this._actions$.pipe(\r\n ofType(AssetNotificationRecipientActions.DeleteSuccess),\r\n map(action => action),\r\n switchMap(payload => [\r\n fromCore.UserAlertRecipients.Load(payload.userId),\r\n fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('Alert Notification Deleted') })]\r\n )\r\n )\r\n );\r\n\r\n\r\n public onDeleteAllSuccess$ = createEffect( \r\n () => this._actions$.pipe(\r\n ofType(AssetNotificationRecipientActions.DeleteAllSuccess),\r\n map(action => action),\r\n switchMap(payload => [\r\n fromCore.UserAlertRecipients.Load(payload.userId),\r\n fromRoot.Banner.Show({ options: successUserNotificationSettingsPayload('Alert Recipient List Deleted') })]\r\n )\r\n )\r\n );\r\n\r\n}\r\n","import { Action, createReducer, on } from '@ngrx/store';\r\n\r\nimport { State, initialState } from './state';\r\n\r\nimport * as UserUIActions from './actions';\r\n\r\nconst userUIReducer = createReducer(\r\n initialState,\r\n\r\n // --- Search User Group\r\n on(UserUIActions.SearchUserGroup, (state, payload) => ({\r\n ...state,\r\n isSearching: true,\r\n activeDrawerId: null,\r\n searchUserGroupIds: [],\r\n userGroupSearchFilter: payload.filters\r\n })),\r\n\r\n on(UserUIActions.SearchUserGroupSuccess, (state, results) => ({\r\n ...state,\r\n isSearching: false,\r\n searchUserGroupIds: results.userGroupIds\r\n })),\r\n\r\n\r\n on(UserUIActions.SearchUserGroupFail, (state) => ({\r\n ...state,\r\n isSearching: false,\r\n searchUserGroupIds: []\r\n })),\r\n\r\n // --- User Group Sitemap Drawer\r\n on(UserUIActions.SitemapSearch, (state) => ({\r\n ...state,\r\n isSitemapSearching: true,\r\n searchSitemapError: null\r\n })),\r\n\r\n on(UserUIActions.SitemapSearchSuccess, (state, payload) => ({\r\n ...state,\r\n isSitemapSearching: false,\r\n searchSitemapItemIds: payload.sitemapItemIds,\r\n searchSitemapError: null\r\n })),\r\n\r\n on(UserUIActions.SitemapSearchFail, (state, payload) => ({\r\n ...state,\r\n isSitemapSearching: false,\r\n searchSitemapError: payload.error,\r\n searchSitemapItemIds: []\r\n })),\r\n\r\n on(UserUIActions.SitemapSearchClear, (state) => ({\r\n ...state,\r\n isSitemapSearching: false,\r\n searchSitemapItemIds: []\r\n })),\r\n\r\n // User Group Form\r\n on(UserUIActions.MarkUserGroupFormClean, (state) => ({\r\n ...state,\r\n isDirty: false\r\n })),\r\n\r\n on(UserUIActions.MarkUserGroupFormDirty, (state) => ({\r\n ...state,\r\n isDirty: true\r\n })),\r\n\r\n // New User\r\n on(UserUIActions.SearchRfvUsers, (state) => ({\r\n ...state,\r\n isSearchingForRfvUsers: true,\r\n isSearchCompleted: false\r\n })),\r\n\r\n on(UserUIActions.SearchRfvUsersSuccess, (state, payload) => ({\r\n ...state,\r\n isSearchingForRfvUsers: false,\r\n searchRfvUsersResults: payload.entities,\r\n isSearchCompleted: true\r\n })),\r\n\r\n on(UserUIActions.SearchRfvUsersFail, (state, payload) => ({\r\n ...state,\r\n isSearchingForRfvUsers: false,\r\n isSearchCompleted: true\r\n })),\r\n\r\n on(UserUIActions.SearchCwsUsers, (state) => ({\r\n ...state,\r\n isSearchingForCwsUsers: true,\r\n isSearchCompleted: false\r\n })),\r\n\r\n on(UserUIActions.SearchCwsUsersSuccess, (state, payload) => ({\r\n ...state,\r\n isSearchingForCwsUsers: false,\r\n searchCwsUsersResults: payload.entities,\r\n isSearchCompleted: true\r\n })),\r\n\r\n on(UserUIActions.SearchCwsUsersFail, (state, payload) => ({\r\n ...state,\r\n isSearchingForCwsUsers: false,\r\n isSearchCompleted: true\r\n })),\r\n\r\n on(UserUIActions.LinkExistingCwsUser, (state) => ({\r\n ...state,\r\n errors: null,\r\n isInserting: true\r\n })),\r\n\r\n on(UserUIActions.LinkExistingCwsUserFail, (state, payload) => ({\r\n ...state,\r\n isInserting: false,\r\n errors: payload.error\r\n })),\r\n\r\n on(UserUIActions.LinkExistingCwsUserSuccess, (state, payload) => ({\r\n ...state,\r\n isInserting: false,\r\n createdUser: payload.user\r\n })),\r\n\r\n on(UserUIActions.CreateRfvUser, (state) => ({\r\n ...state,\r\n errors: null,\r\n isInserting: true\r\n })),\r\n\r\n on(UserUIActions.CreateRfvUserFail, (state, payload) => ({\r\n ...state,\r\n isInserting: false,\r\n errors: payload.error\r\n })),\r\n\r\n on(UserUIActions.CreateRfvUserSuccess, (state, payload) => ({\r\n ...state,\r\n isInserting: false,\r\n createdUser: payload.user\r\n })),\r\n\r\n on(UserUIActions.CreateCustomerAccess, (state) => ({\r\n ...state,\r\n errors: null,\r\n isInserting: true\r\n })),\r\n\r\n on(UserUIActions.CreateCustomerAccessFail, (state, payload) => ({\r\n ...state,\r\n isInserting: false,\r\n errors: payload.error\r\n })),\r\n\r\n on(UserUIActions.CreateCustomerAccessSuccess, (state, payload) => ({\r\n ...state,\r\n isInserting: false,\r\n createdUser: payload.user\r\n })),\r\n\r\n on(UserUIActions.CopyUserPermisions, (state) => ({\r\n ...state,\r\n errors: null,\r\n copyingUserPermissions: true\r\n })),\r\n\r\n on(UserUIActions.CopyUserPermisionsFail, (state, payload) => ({\r\n ...state,\r\n copyingUserPermissions: false,\r\n errors: payload.error\r\n })),\r\n\r\n on(UserUIActions.CopyUserPermisionsSuccess, (state, payload) => ({\r\n ...state,\r\n copyingUserPermissions: false,\r\n })),\r\n\r\n on(UserUIActions.ClearNewUser, (state) => ({\r\n ...state,\r\n createUser: null,\r\n errors: null,\r\n searchRfvUsersResults: null,\r\n searchCwsUsersResults: [],\r\n isSearchCompleted: false,\r\n isInserting: false\r\n }))\r\n)\r\n\r\nexport function reducer(state: State | undefined, action: Action) {\r\n return userUIReducer(state, action);\r\n}","import { Injectable } from '@angular/core';\r\n\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, mergeMap, withLatestFrom, switchMap } from 'rxjs/operators';\r\n\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromUserUI from './selectors';\r\nimport * as UserUIActions from './actions';\r\nimport * as UserSearchActions from '../actions/user-search-page.actions';\r\nimport { UserAccessActions } from './../actions';\r\nimport * as fromUserActions from '@rfv/modules/dashboard/modules/user-admin/store/actions';\r\nimport { AppSettingsService } from '@rfv/modules/core/services';\r\nimport { UserOnboardService } from '@rfv/modules/core/services/user-onboard.service';\r\n\r\n@Injectable()\r\nexport class Effects {\r\n\r\n public constructor(\r\n private _actions$: Actions,\r\n private _store: Store,\r\n private _userOnboardService: UserOnboardService,\r\n private _appSettingsService: AppSettingsService\r\n ) { }\r\n\r\n public search$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.SearchUserGroup),\r\n withLatestFrom(this._store.select(fromCore.UserGroups.getAll)),\r\n switchMap(([action, userGroups]) => {\r\n let filters = action.filters;\r\n\r\n // Where Name like filter\r\n if (filters.searchString) {\r\n userGroups = userGroups.filter(p => p.Name.toLowerCase().includes(filters.searchString.toLowerCase()));\r\n }\r\n\r\n // Where parentUserGroupId = filter\r\n if (filters.parentUserGroupId != null) {\r\n userGroups = userGroups.filter(p => p.ParentGroupId === filters.parentUserGroupId);\r\n }\r\n\r\n var filteredGroups = userGroups.map(p => p.Id);\r\n\r\n if (filters.parentUserGroupId)\r\n filteredGroups.push(filters.parentUserGroupId)\r\n\r\n return of(UserUIActions.SearchUserGroupSuccess(filteredGroups));\r\n })\r\n )\r\n );\r\n\r\n public refresh$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.SearchUserGroupRefresh),\r\n withLatestFrom(\r\n this._store.select(fromUserUI.getUserGroupSearchFilter),\r\n this._store.select(fromCore.UserGroups.getAll)\r\n ),\r\n switchMap(([action, filter, userGroups]) => {\r\n // Where Name like filter\r\n if (filter.searchString) {\r\n userGroups = userGroups.filter(p => p.Name.toLowerCase().includes(filter.searchString.toLowerCase()));\r\n }\r\n\r\n // Where parentUserGroupId = filter\r\n if (filter.parentUserGroupId != null) {\r\n userGroups = userGroups.filter(p => p.ParentGroupId === filter.parentUserGroupId);\r\n }\r\n\r\n return of(UserUIActions.SearchUserGroupSuccess(userGroups.map(p => p.Id)));\r\n })\r\n )\r\n );\r\n\r\n public intialLoad$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.UserGroups.LoadSuccess),\r\n switchMap((payload) => of(UserUIActions.SearchUserGroupSuccess(payload.entities.map(p => p.Id))))\r\n )\r\n );\r\n\r\n public insert$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(fromCore.UserGroups.InsertSuccess),\r\n switchMap(() => of(UserUIActions.SearchUserGroupRefresh()))\r\n )\r\n );\r\n\r\n public sitemapSearch$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.SitemapSearch),\r\n withLatestFrom(this._store.select(fromCore.SitemapGroups.getAll)),\r\n switchMap(([action, sitemapGroups]) => {\r\n let filters = action.filters;\r\n\r\n if (filters.searchString && filters.searchString.length > 0) {\r\n sitemapGroups = sitemapGroups.filter(p => p.name.toLowerCase().includes(filters.searchString.toLowerCase()));\r\n }\r\n\r\n // Sort search results\r\n sitemapGroups.sort((a, b) => a.name.localeCompare(b.name));\r\n\r\n return sitemapGroups.length > 0\r\n ? of(UserUIActions.SitemapSearchSuccess(sitemapGroups.map(p => p.id)))\r\n : of(UserUIActions.SitemapSearchFail('No results found.'));\r\n })\r\n )\r\n );\r\n\r\n // New User\r\n public searchRfvUsers$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.SearchRfvUsers),\r\n switchMap(action => this._userOnboardService.searchRfvUsers(action.cwsId).pipe(\r\n map(rfvUsers => UserUIActions.SearchRfvUsersSuccess(rfvUsers)),\r\n catchError(error => of(UserUIActions.SearchRfvUsersFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public searchCwsUsers$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.SearchCwsUsers),\r\n switchMap(action => this._userOnboardService.searchCwsUsers(action.searchString).pipe(\r\n map(cwsUsers => UserUIActions.SearchCwsUsersSuccess(cwsUsers)),\r\n catchError(error => of(UserUIActions.SearchCwsUsersFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public linkExistingCwsUser$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.LinkExistingCwsUser),\r\n switchMap(action => this._userOnboardService.linkExistingCwsUser(action.newUserRequest).pipe(\r\n switchMap((user) => [\r\n UserUIActions.LinkExistingCwsUserSuccess(user),\r\n UserSearchActions.AddSearchResult(user)\r\n ]),\r\n catchError(errors => of(UserUIActions.LinkExistingCwsUserFail(errors)))\r\n ))\r\n )\r\n );\r\n\r\n public linkExistingCwsUserFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.LinkExistingCwsUserFail),\r\n mergeMap(error => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: `An error ocurred when linking CWS Users: ${error.error.message}`,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n )\r\n\r\n public createRfvUser$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.CreateRfvUser),\r\n switchMap(action => this._userOnboardService.createRfvUser(action.newUserRequest, this._appSettingsService.getCustomerTemplate()).pipe(\r\n switchMap((user) => [\r\n UserUIActions.CreateRfvUserSuccess(user),\r\n UserSearchActions.AddSearchResult(user)\r\n ]),\r\n catchError(errors => of(UserUIActions.CreateRfvUserFail(errors)))\r\n ))\r\n )\r\n );\r\n\r\n public createRfvUserSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.CreateRfvUserSuccess),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'User creation successful. If the user was existing, registration email has been re-sent.',\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public createRfvUserFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.CreateRfvUserFail),\r\n mergeMap(payload => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: payload.error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public resendWelcomeEmail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.ResendWelcomeEmail),\r\n switchMap(action => this._userOnboardService.resendWelcomeEmail(action.cwsId).pipe(\r\n mergeMap(() => [\r\n UserUIActions.ResendWelcomeEmailSuccess()\r\n ]),\r\n catchError(error => of(UserUIActions.ResendWelcomeEmailFail(error)))\r\n ))\r\n )\r\n );\r\n\r\n public resendWelcomeEmailSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.ResendWelcomeEmailSuccess),\r\n mergeMap(() => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Welcome email resent.',\r\n autoClose: 3000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public resendWelcomeEmailFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.ResendWelcomeEmailFail),\r\n mergeMap(payload => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: payload.error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n\r\n public copyUserPermissions$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.CopyUserPermisions),\r\n switchMap(action => this._userOnboardService.copyUserPermissions(action.fromUserId, action.toUserId).pipe(\r\n mergeMap((any) => [\r\n UserUIActions.CopyUserPermisionsSuccess(any),\r\n UserAccessActions.LoadUserAccess(action.toUserId),\r\n fromUserActions.UserSearchActions.InitialLoad(),\r\n fromRoot.Modal.Close(),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Permissions Copied`,\r\n autoClose: 3000\r\n }\r\n })\r\n ]),\r\n catchError(error => from([\r\n UserUIActions.CopyUserPermisionsFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Error while copying Permissions',\r\n autoClose: 3000\r\n }\r\n })\r\n ]))\r\n )))\r\n );\r\n\r\n public addCustomerAccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.CreateCustomerAccess),\r\n switchMap(action => this._userOnboardService.addCustomerAccess(action.newUserRequest).pipe(\r\n switchMap((user) => [\r\n UserUIActions.CreateCustomerAccessSuccess(user),\r\n UserSearchActions.AddSearchResult(user)\r\n ]),\r\n catchError(errors => of(UserUIActions.CreateCustomerAccessFail(errors)))\r\n ))\r\n )\r\n );\r\n\r\n public addCustomerAccessFail$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(UserUIActions.CreateCustomerAccessFail),\r\n mergeMap(error => [\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: error.error.message,\r\n autoClose: 5000\r\n }\r\n })\r\n ])\r\n )\r\n );\r\n}","import { NgModule } from '@angular/core';\r\n\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n\r\nimport { reducer } from './reducer';\r\nimport { Effects } from './effects';\r\n\r\n@NgModule({\r\n imports: [\r\n StoreModule.forFeature('user-ui', reducer),\r\n EffectsModule.forFeature([\r\n Effects\r\n ])\r\n ]\r\n})\r\nexport class UserUIStoreModule { }","import { NgModule } from '@angular/core';\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\n \r\nimport { reducer } from './reducers';\r\n \r\nimport { EFFECTS } from './effects';\r\nimport { UserUIStoreModule } from './user-ui-store/user-ui-store.module';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n // UserRoutingModule,\r\n StoreModule.forFeature('users', reducer),\r\n EffectsModule.forFeature(EFFECTS),\r\n UserUIStoreModule, \r\n ]\r\n})\r\nexport class UserStoreModule { }\r\n","import { Injectable } from '@angular/core';\r\n\r\n/* Services */\r\nimport { ReportService } from '@rfv/modules/report/report.service';\r\n\r\n/* RxJS */\r\nimport { of, from } from 'rxjs';\r\nimport { catchError, map, mergeMap, withLatestFrom, switchMap, tap } from 'rxjs/operators';\r\n\r\n/* NgRx */\r\nimport { Store } from '@ngrx/store';\r\nimport { Actions, ofType, createEffect } from '@ngrx/effects';\r\n\r\nimport * as fromRoot from '@rfv/store';\r\nimport * as fromCore from '@rfv/modules/core/store';\r\nimport * as fromDashboard from '@rfv/modules/dashboard/store';\r\nimport * as DashboardActions from '@rfv/modules/dashboard/store/actions';\r\nimport * as fromSitemap from '@rfv/modules/sitemap/store';\r\n\r\nimport {\r\n ReportTypesActions,\r\n TimeZonesActionTypes,\r\n DateRangesActionTypes,\r\n ReportFileTypes,\r\n ReportSchedulesActionTypes,\r\n ReportHistoryActionTypes,\r\n ReportRecipientActionTypes,\r\n ReportSchedulesActions,\r\n ReportHistoryActions\r\n} from '../actions';\r\n\r\nimport { CreatedReport } from '@rfv/modules/report/models/created-report';\r\n\r\nimport * as fromReports from '../reducers';\r\nimport { successPayload, failPayload } from '@rfv/modules/report/report-banner-messages';\r\n\r\n\r\n/* Models */\r\nimport { Tiles } from '@rfv/modules/core/enums';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReportEffects {\r\n constructor(\r\n private _store$: Store,\r\n private _reportService: ReportService,\r\n private _actions$: Actions\r\n ) { }\r\n\r\n public LoadScheduleReportDetails$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.LoadScheduledReportDetails),\r\n mergeMap(action =>\r\n this._reportService.getReportRecipientsInfo(action.runHour, action.runMinute, action.reportCustomerSettingRecipientId, action.reportSettingId).pipe(\r\n map(scheduleDetails => ReportSchedulesActionTypes.LoadScheduledReportDetailsSuccess(scheduleDetails)),\r\n catchError(error => of(ReportSchedulesActionTypes.LoadScheduledReportDetailsFailure(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadScheduleReportSettingId$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.LoadScheduledReportSettingId),\r\n mergeMap(action =>\r\n this._reportService.getReportSettingId(action.runHour, action.runMinute).pipe(\r\n map(scheduleSettingId => ReportSchedulesActionTypes.LoadScheduledReportSettingIdSuccess(scheduleSettingId)),\r\n catchError(error => of(ReportSchedulesActionTypes.LoadScheduledReportSettingIdFailure(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadReportTypes$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportTypesActions.LoadReportGroups),\r\n mergeMap(() =>\r\n this._reportService.loadReportGroups().pipe(\r\n mergeMap(reportGroups => [\r\n ReportTypesActions.LoadReportGroupsSuccess(reportGroups),\r\n ReportTypesActions.LoadReportElements(reportGroups)\r\n ]),\r\n catchError(error => of(ReportTypesActions.LoadReportGroupsFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadReportElements$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportTypesActions.LoadReportElements),\r\n map(action => this._reportService.loadReportElements(action.reportGroups)),\r\n map(reportElements => ReportTypesActions.LoadReportElementsSuccess(reportElements))\r\n )\r\n );\r\n\r\n public LoadReportTimeZone$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(TimeZonesActionTypes.Load),\r\n mergeMap(() =>\r\n this._reportService.loadTimeZones().pipe(\r\n map(timeZones => TimeZonesActionTypes.LoadSuccess(timeZones)),\r\n catchError(error => of(TimeZonesActionTypes.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadDateRange$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(DateRangesActionTypes.Load),\r\n mergeMap(() =>\r\n this._reportService.loadDateRange().pipe(\r\n map(dateRanges => DateRangesActionTypes.LoadSuccess(dateRanges)),\r\n catchError(error => of(DateRangesActionTypes.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadreportHistory = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportHistoryActions.Load),\r\n mergeMap(() =>\r\n this._reportService.loadReportHistory().pipe(\r\n map((createdReportData) => ReportHistoryActions.LoadSuccess(createdReportData)),\r\n catchError(error => of(ReportHistoryActions.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadReportHistorySuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportHistoryActions.LoadSuccess),\r\n map(() => DashboardActions.SaveTimeStamp(Tiles.reportHistory))\r\n )\r\n );\r\n\r\n public LoadFileTypes$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportFileTypes.Load),\r\n mergeMap(action =>\r\n this._reportService.loadFileTypes(action.reportId).pipe(\r\n map(fileTypes => ReportFileTypes.LoadSuccess(fileTypes)),\r\n catchError(error => of(ReportFileTypes.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public LoadReportSchedules$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.Load),\r\n withLatestFrom(\r\n this._store$.select(fromDashboard.getSelectedSitemapGroupId),\r\n this._store$.select(fromDashboard.getSelectedAsset)\r\n ),\r\n mergeMap(([action, sitemapGroupId, asset]) => {\r\n const id: number = sitemapGroupId ? sitemapGroupId : asset.sitemapGroupId;\r\n if (sitemapGroupId || asset) {\r\n return this._reportService.loadReportSchedules(id).pipe(\r\n map(reportSchedulesData => ReportSchedulesActionTypes.LoadSuccess(asset ? reportSchedulesData.filter(report => report.AssetId === asset.id) : reportSchedulesData)),\r\n catchError(error => of(ReportSchedulesActionTypes.LoadFail(error)))\r\n )\r\n }\r\n })\r\n )\r\n );\r\n\r\n public LoadReportSchedulesSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.LoadSuccess),\r\n map(() => DashboardActions.SaveTimeStamp(Tiles.scheduledReports))\r\n )\r\n );\r\n\r\n public LoadUserReportSchedules$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.LoadUserScheduledReports),\r\n mergeMap(() =>\r\n this._reportService.getUserReportSchedules().pipe(\r\n map(reportSchedulesData => ReportSchedulesActionTypes.LoadSuccess(reportSchedulesData)),\r\n catchError(error => of(ReportSchedulesActionTypes.LoadFail(error)))\r\n )\r\n )\r\n )\r\n );\r\n\r\n public GenerateReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportTypesActions.GenerateReport),\r\n withLatestFrom(\r\n this._store$.select(fromReports.getRecipientsIds),\r\n this._store$.select(fromReports.getReportType),\r\n this._store$.select(fromSitemap.getSelectedSitemapGroupId)\r\n ),\r\n mergeMap(([action, recipientIds, report, sitemapGroupId]) => {\r\n let requestData = { ...action.reportRequest };\r\n\r\n requestData.ReportId = requestData.ReportId || report.Id;\r\n requestData.Recipients = requestData.Recipients || recipientIds as number[];\r\n\r\n if (!requestData.SitemapGroupId)\r\n requestData.SitemapGroupId = sitemapGroupId\r\n\r\n return this._reportService.generateReport(requestData).pipe(\r\n switchMap(createdReportRequest => { \r\n return this.handleRunReportResponse(createdReportRequest, action.callback);\r\n }),\r\n catchError(error => {\r\n const actions = [\r\n ReportTypesActions.GenerateReportFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('updating', { status: 200, statusText: 'Report Failed.' }) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n })\r\n )\r\n );\r\n\r\n public RetryGenerateReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportTypesActions.RetryReportRequest),\r\n mergeMap(action => {\r\n return this._reportService.regenerateReport(action.pendingReportId).pipe(\r\n switchMap(createdReportRequest => {\r\n return this.handleRunReportResponse(createdReportRequest);\r\n }),\r\n catchError(error => {\r\n const actions = [\r\n ReportTypesActions.GenerateReportFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('updating', { status: 200, statusText: 'Report Failed.' }) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n })\r\n )\r\n );\r\n\r\n public DeleteScheduleTimeReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.DeleteScheduleTimeReport),\r\n mergeMap(action =>\r\n this._reportService.deleteScheduleTimeReport(action.id, action.runHour, action.runMinute).pipe(\r\n switchMap(() => [\r\n ReportSchedulesActionTypes.DeleteScheduleTimeReportSuccess(),\r\n fromRoot.Banner.Show({ options: successPayload('deleted') }),\r\n fromDashboard.CloseDrawer()\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n ReportSchedulesActionTypes.DeleteScheduleTimeReportFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('deleted', error) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n public DeleteScheduleReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.DeleteScheduleReport),\r\n mergeMap(action =>\r\n this._reportService.deleteScheduleReport(action.id).pipe(\r\n switchMap(reportCustomerSettingRecipientId => {\r\n return reportCustomerSettingRecipientId > 0 ? [\r\n ReportSchedulesActionTypes.DeleteScheduleReportSuccess(reportCustomerSettingRecipientId),\r\n fromRoot.Banner.Show({ options: successPayload('deleted') })\r\n ] : [\r\n ReportSchedulesActionTypes.DeleteScheduleReportFail('An error occured.'),\r\n fromRoot.Banner.Show({ options: failPayload('deleting', { status: 200, statusText: 'Report Delete Failed.' }) })\r\n ]\r\n }),\r\n catchError(error => {\r\n const actions = [\r\n ReportSchedulesActionTypes.DeleteScheduleReportFail(error),\r\n fromRoot.Banner.Show({ options: failPayload('deleting', error) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n public UpdateBulkScheduleReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActionTypes.UpdateAllScheduleDeliveryTimes),\r\n mergeMap(action =>\r\n this._reportService.updateReportSchedule(action.data).pipe(\r\n switchMap(reportSchedule => [\r\n ReportSchedulesActionTypes.UpdateAllScheduleDeliveryTimesSuccess(reportSchedule),\r\n fromDashboard.CloseDrawer(),\r\n fromRoot.Layout.CloseDrawer({}),\r\n fromRoot.Banner.Show({ options: successPayload('updated') })\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n ReportSchedulesActionTypes.UpdateAllScheduleDeliveryTimesFailure(error),\r\n fromRoot.Banner.Show({ options: failPayload('updating', error) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n public GenerateScheduleReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportTypesActions.GenerateScheduleReport),\r\n mergeMap((action) => {\r\n let requestData = { ...action.scheduledReportRequest };\r\n\r\n\r\n\r\n return this._reportService.generateScheduleReport(requestData).pipe(\r\n switchMap(reportScheduleList => {\r\n return [\r\n ReportTypesActions.GenerateReportSuccess(),\r\n ReportSchedulesActions.Load(requestData.SitemapGroupId),\r\n ReportRecipientActionTypes.RemoveAllRecipients(),\r\n fromRoot.Layout.CloseDrawer({}),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: 'Report Request sent.',\r\n autoClose: 5000\r\n }\r\n })\r\n ]\r\n }),\r\n catchError(error => {\r\n const actions = [\r\n ReportTypesActions.GenerateReportFail(error),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'error',\r\n message: 'Unable to Generate Report',\r\n autoClose: 5000\r\n }\r\n })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n })\r\n )\r\n );\r\n\r\n public RunScheduledReport$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportSchedulesActions.RunScheduledReport),\r\n mergeMap(action =>\r\n this._reportService.runScheduledReport(action.runReportRequest).pipe(\r\n switchMap(createdReport => [\r\n ReportHistoryActionTypes.AddCreateReportRequest(createdReport),\r\n ReportSchedulesActionTypes.RunScheduledReportSuccess(),\r\n fromRoot.Banner.Show({ options: successPayload('sent') })\r\n ]),\r\n catchError(error => {\r\n const actions = [\r\n ReportSchedulesActionTypes.RunScheduledReportFailure(),\r\n fromRoot.Banner.Show({ options: failPayload('sent', error) })\r\n ];\r\n return from(actions);\r\n })\r\n )\r\n )\r\n )\r\n );\r\n\r\n public GenerateReportSuccess$ = createEffect(\r\n () => this._actions$.pipe(\r\n ofType(ReportTypesActions.GenerateReportSuccess),\r\n tap(action => {\r\n if (action.callback)\r\n action.callback();\r\n })\r\n ), { dispatch: false }\r\n )\r\n\r\n private handleRunReportResponse(createdReport: CreatedReport, callback?: Function) {\r\n if (!createdReport) {\r\n return [\r\n ReportTypesActions.GenerateReportFail('Report failed.'),\r\n fromRoot.Banner.Show({ options: failPayload('updating', { status: 200, statusText: 'Report failed.' }) })\r\n ];\r\n }\r\n return [\r\n ReportTypesActions.GenerateReportSuccess(callback),\r\n ReportHistoryActionTypes.AddCreateReportRequest(createdReport),\r\n fromDashboard.CloseDrawer(),\r\n // new ReportSchedulesActionTypes.SetSelectedScheduleId({ reportCustomerSettingRecipientId: null, isCopy: false }),\r\n fromRoot.Banner.Show({\r\n options: {\r\n type: 'success',\r\n message: `Report request sent.`,\r\n autoClose: 3000\r\n }\r\n })\r\n ];\r\n }\r\n\r\n}\r\n","\r\n/* NgRx */\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { reducers } from '@rfv/modules/report/reducers';\r\nimport { ReportEffects } from './effects/report.effect';\r\nimport { NgModule } from '@angular/core';\r\n \r\n@NgModule({\r\n imports: [\r\n\r\n StoreModule.forFeature('reports', reducers),\r\n EffectsModule.forFeature([ReportEffects])\r\n ],\r\n\r\n})\r\nexport class ReportStoreModule { }\r\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\r\nimport { BrowserModule, Title } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\n\r\n/* App Modules */\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppStoreModule } from './store/app-store.module';\r\n\r\nimport { CoreModule } from '@rfv/modules/core/core.module';\r\nimport { SharedModule } from '@rfv/modules/shared/shared.module';\r\n\r\nimport { ModalModule } from './modules/modal/modal.module';\r\nimport { SitemapModule } from './modules/sitemap/sitemap.module';\r\n\r\nimport { InvolveModule } from './modules/involve/involve.module';\r\n\r\n/* Components */\r\nimport { AppComponent } from './components/app.component';\r\nimport { EulaComponent } from './components/eula/eula.component';\r\n\r\nimport { AlarmEditorModule } from './modules/dashboard/modules/alarm-editor/alarm-editor.module';\r\nimport { appSettingsInitFn, AppSettingsService } from './modules/core/services';\r\nimport { FullscreenOverlayContainer, OverlayContainer } from '@angular/cdk/overlay';\r\nimport { UserStoreModule } from './modules/dashboard/modules/user-admin/store/user-store.module';\r\nimport { ReportStoreModule } from './modules/report/report-store.module';\r\n\r\n@NgModule({\r\n bootstrap: [\r\n AppComponent\r\n ],\r\n\r\n declarations: [\r\n AppComponent,\r\n EulaComponent\r\n ],\r\n\r\n imports: [\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n\r\n CoreModule,\r\n SharedModule,\r\n\r\n SitemapModule,\r\n\r\n AppRoutingModule,\r\n AppStoreModule.forRoot(),\r\n\r\n ModalModule,\r\n\r\n UserStoreModule, // todo: ask mark\r\n ReportStoreModule, \r\n\r\n AlarmEditorModule,\r\n\r\n InvolveModule\r\n ],\r\n \r\n providers: [\r\n Title,\r\n { provide: APP_INITIALIZER, useFactory: appSettingsInitFn, deps: [ AppSettingsService ], multi: true},\r\n { provide: OverlayContainer, useClass: FullscreenOverlayContainer }\r\n ]\r\n})\r\nexport class AppModule { }\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport 'hammerjs';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.log(err));\r\n","'use strict';\r\n\r\nvar Queue = require('tinyqueue');\r\n\r\nif (Queue.default) Queue = Queue.default; // temporary webpack fix\r\n\r\nmodule.exports = polylabel;\r\nmodule.exports.default = polylabel;\r\n\r\nfunction polylabel(polygon, precision, debug) {\r\n precision = precision || 1.0;\r\n\r\n // find the bounding box of the outer ring\r\n var minX, minY, maxX, maxY;\r\n for (var i = 0; i < polygon[0].length; i++) {\r\n var p = polygon[0][i];\r\n if (!i || p[0] < minX) minX = p[0];\r\n if (!i || p[1] < minY) minY = p[1];\r\n if (!i || p[0] > maxX) maxX = p[0];\r\n if (!i || p[1] > maxY) maxY = p[1];\r\n }\r\n\r\n var width = maxX - minX;\r\n var height = maxY - minY;\r\n var cellSize = Math.min(width, height);\r\n var h = cellSize / 2;\r\n\r\n if (cellSize === 0) {\r\n var degeneratePoleOfInaccessibility = [minX, minY];\r\n degeneratePoleOfInaccessibility.distance = 0;\r\n return degeneratePoleOfInaccessibility;\r\n }\r\n\r\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\r\n var cellQueue = new Queue(undefined, compareMax);\r\n\r\n // cover polygon with initial cells\r\n for (var x = minX; x < maxX; x += cellSize) {\r\n for (var y = minY; y < maxY; y += cellSize) {\r\n cellQueue.push(new Cell(x + h, y + h, h, polygon));\r\n }\r\n }\r\n\r\n // take centroid as the first best guess\r\n var bestCell = getCentroidCell(polygon);\r\n\r\n // second guess: bounding box centroid\r\n var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\r\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\r\n\r\n var numProbes = cellQueue.length;\r\n\r\n while (cellQueue.length) {\r\n // pick the most promising cell from the queue\r\n var cell = cellQueue.pop();\r\n\r\n // update the best cell if we found a better one\r\n if (cell.d > bestCell.d) {\r\n bestCell = cell;\r\n if (debug) console.log('found best %f after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\r\n }\r\n\r\n // do not drill down further if there's no chance of a better solution\r\n if (cell.max - bestCell.d <= precision) continue;\r\n\r\n // split the cell into four cells\r\n h = cell.h / 2;\r\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));\r\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));\r\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));\r\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));\r\n numProbes += 4;\r\n }\r\n\r\n if (debug) {\r\n console.log('num probes: ' + numProbes);\r\n console.log('best distance: ' + bestCell.d);\r\n }\r\n\r\n var poleOfInaccessibility = [bestCell.x, bestCell.y];\r\n poleOfInaccessibility.distance = bestCell.d;\r\n return poleOfInaccessibility;\r\n}\r\n\r\nfunction compareMax(a, b) {\r\n return b.max - a.max;\r\n}\r\n\r\nfunction Cell(x, y, h, polygon) {\r\n this.x = x; // cell center x\r\n this.y = y; // cell center y\r\n this.h = h; // half the cell size\r\n this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\r\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\r\n}\r\n\r\n// signed distance from point to polygon outline (negative if point is outside)\r\nfunction pointToPolygonDist(x, y, polygon) {\r\n var inside = false;\r\n var minDistSq = Infinity;\r\n\r\n for (var k = 0; k < polygon.length; k++) {\r\n var ring = polygon[k];\r\n\r\n for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\r\n var a = ring[i];\r\n var b = ring[j];\r\n\r\n if ((a[1] > y !== b[1] > y) &&\r\n (x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside;\r\n\r\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\r\n }\r\n }\r\n\r\n return minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\r\n}\r\n\r\n// get polygon centroid\r\nfunction getCentroidCell(polygon) {\r\n var area = 0;\r\n var x = 0;\r\n var y = 0;\r\n var points = polygon[0];\r\n\r\n for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n var a = points[i];\r\n var b = points[j];\r\n var f = a[0] * b[1] - b[0] * a[1];\r\n x += (a[0] + b[0]) * f;\r\n y += (a[1] + b[1]) * f;\r\n area += f * 3;\r\n }\r\n if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon);\r\n return new Cell(x / area, y / area, 0, polygon);\r\n}\r\n\r\n// get squared distance from a point to a segment\r\nfunction getSegDistSq(px, py, a, b) {\r\n\r\n var x = a[0];\r\n var y = a[1];\r\n var dx = b[0] - x;\r\n var dy = b[1] - y;\r\n\r\n if (dx !== 0 || dy !== 0) {\r\n\r\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\r\n\r\n if (t > 1) {\r\n x = b[0];\r\n y = b[1];\r\n\r\n } else if (t > 0) {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n\r\n dx = px - x;\r\n dy = py - y;\r\n\r\n return dx * dx + dy * dy;\r\n}","var map = {\n\t\"./af\": 35528,\n\t\"./af.js\": 35528,\n\t\"./ar\": 1036,\n\t\"./ar-dz\": 17579,\n\t\"./ar-dz.js\": 17579,\n\t\"./ar-kw\": 69588,\n\t\"./ar-kw.js\": 69588,\n\t\"./ar-ly\": 11650,\n\t\"./ar-ly.js\": 11650,\n\t\"./ar-ma\": 93258,\n\t\"./ar-ma.js\": 93258,\n\t\"./ar-ps\": 25467,\n\t\"./ar-ps.js\": 25467,\n\t\"./ar-sa\": 54085,\n\t\"./ar-sa.js\": 54085,\n\t\"./ar-tn\": 90287,\n\t\"./ar-tn.js\": 90287,\n\t\"./ar.js\": 1036,\n\t\"./az\": 89757,\n\t\"./az.js\": 89757,\n\t\"./be\": 59620,\n\t\"./be.js\": 59620,\n\t\"./bg\": 31139,\n\t\"./bg.js\": 31139,\n\t\"./bm\": 4042,\n\t\"./bm.js\": 4042,\n\t\"./bn\": 19641,\n\t\"./bn-bd\": 19126,\n\t\"./bn-bd.js\": 19126,\n\t\"./bn.js\": 19641,\n\t\"./bo\": 494,\n\t\"./bo.js\": 494,\n\t\"./br\": 20934,\n\t\"./br.js\": 20934,\n\t\"./bs\": 26274,\n\t\"./bs.js\": 26274,\n\t\"./ca\": 45831,\n\t\"./ca.js\": 45831,\n\t\"./cs\": 92354,\n\t\"./cs.js\": 92354,\n\t\"./cv\": 79692,\n\t\"./cv.js\": 79692,\n\t\"./cy\": 58774,\n\t\"./cy.js\": 58774,\n\t\"./da\": 38955,\n\t\"./da.js\": 38955,\n\t\"./de\": 21557,\n\t\"./de-at\": 24954,\n\t\"./de-at.js\": 24954,\n\t\"./de-ch\": 81881,\n\t\"./de-ch.js\": 81881,\n\t\"./de.js\": 21557,\n\t\"./dv\": 16475,\n\t\"./dv.js\": 16475,\n\t\"./el\": 38877,\n\t\"./el.js\": 38877,\n\t\"./en-au\": 70454,\n\t\"./en-au.js\": 70454,\n\t\"./en-ca\": 67356,\n\t\"./en-ca.js\": 67356,\n\t\"./en-gb\": 10456,\n\t\"./en-gb.js\": 10456,\n\t\"./en-ie\": 28789,\n\t\"./en-ie.js\": 28789,\n\t\"./en-il\": 85471,\n\t\"./en-il.js\": 85471,\n\t\"./en-in\": 39664,\n\t\"./en-in.js\": 39664,\n\t\"./en-nz\": 97672,\n\t\"./en-nz.js\": 97672,\n\t\"./en-sg\": 80805,\n\t\"./en-sg.js\": 80805,\n\t\"./eo\": 87390,\n\t\"./eo.js\": 87390,\n\t\"./es\": 1564,\n\t\"./es-do\": 51473,\n\t\"./es-do.js\": 51473,\n\t\"./es-mx\": 92089,\n\t\"./es-mx.js\": 92089,\n\t\"./es-us\": 84156,\n\t\"./es-us.js\": 84156,\n\t\"./es.js\": 1564,\n\t\"./et\": 6513,\n\t\"./et.js\": 6513,\n\t\"./eu\": 7856,\n\t\"./eu.js\": 7856,\n\t\"./fa\": 2378,\n\t\"./fa.js\": 2378,\n\t\"./fi\": 22687,\n\t\"./fi.js\": 22687,\n\t\"./fil\": 80032,\n\t\"./fil.js\": 80032,\n\t\"./fo\": 46845,\n\t\"./fo.js\": 46845,\n\t\"./fr\": 8875,\n\t\"./fr-ca\": 56425,\n\t\"./fr-ca.js\": 56425,\n\t\"./fr-ch\": 41746,\n\t\"./fr-ch.js\": 41746,\n\t\"./fr.js\": 8875,\n\t\"./fy\": 67037,\n\t\"./fy.js\": 67037,\n\t\"./ga\": 11217,\n\t\"./ga.js\": 11217,\n\t\"./gd\": 37010,\n\t\"./gd.js\": 37010,\n\t\"./gl\": 51931,\n\t\"./gl.js\": 51931,\n\t\"./gom-deva\": 64488,\n\t\"./gom-deva.js\": 64488,\n\t\"./gom-latn\": 8032,\n\t\"./gom-latn.js\": 8032,\n\t\"./gu\": 34984,\n\t\"./gu.js\": 34984,\n\t\"./he\": 69090,\n\t\"./he.js\": 69090,\n\t\"./hi\": 42085,\n\t\"./hi.js\": 42085,\n\t\"./hr\": 38787,\n\t\"./hr.js\": 38787,\n\t\"./hu\": 2901,\n\t\"./hu.js\": 2901,\n\t\"./hy-am\": 59819,\n\t\"./hy-am.js\": 59819,\n\t\"./id\": 44074,\n\t\"./id.js\": 44074,\n\t\"./is\": 70715,\n\t\"./is.js\": 70715,\n\t\"./it\": 31746,\n\t\"./it-ch\": 77040,\n\t\"./it-ch.js\": 77040,\n\t\"./it.js\": 31746,\n\t\"./ja\": 3180,\n\t\"./ja.js\": 3180,\n\t\"./jv\": 34346,\n\t\"./jv.js\": 34346,\n\t\"./ka\": 65538,\n\t\"./ka.js\": 65538,\n\t\"./kk\": 79772,\n\t\"./kk.js\": 79772,\n\t\"./km\": 87905,\n\t\"./km.js\": 87905,\n\t\"./kn\": 79125,\n\t\"./kn.js\": 79125,\n\t\"./ko\": 69140,\n\t\"./ko.js\": 69140,\n\t\"./ku\": 2354,\n\t\"./ku-kmr\": 44662,\n\t\"./ku-kmr.js\": 44662,\n\t\"./ku.js\": 2354,\n\t\"./ky\": 63768,\n\t\"./ky.js\": 63768,\n\t\"./lb\": 14016,\n\t\"./lb.js\": 14016,\n\t\"./lo\": 83169,\n\t\"./lo.js\": 83169,\n\t\"./lt\": 62353,\n\t\"./lt.js\": 62353,\n\t\"./lv\": 83243,\n\t\"./lv.js\": 83243,\n\t\"./me\": 52338,\n\t\"./me.js\": 52338,\n\t\"./mi\": 35555,\n\t\"./mi.js\": 35555,\n\t\"./mk\": 85794,\n\t\"./mk.js\": 85794,\n\t\"./ml\": 53151,\n\t\"./ml.js\": 53151,\n\t\"./mn\": 46458,\n\t\"./mn.js\": 46458,\n\t\"./mr\": 69165,\n\t\"./mr.js\": 69165,\n\t\"./ms\": 8680,\n\t\"./ms-my\": 87477,\n\t\"./ms-my.js\": 87477,\n\t\"./ms.js\": 8680,\n\t\"./mt\": 79684,\n\t\"./mt.js\": 79684,\n\t\"./my\": 40285,\n\t\"./my.js\": 40285,\n\t\"./nb\": 45922,\n\t\"./nb.js\": 45922,\n\t\"./ne\": 29040,\n\t\"./ne.js\": 29040,\n\t\"./nl\": 5066,\n\t\"./nl-be\": 74460,\n\t\"./nl-be.js\": 74460,\n\t\"./nl.js\": 5066,\n\t\"./nn\": 53693,\n\t\"./nn.js\": 53693,\n\t\"./oc-lnc\": 88676,\n\t\"./oc-lnc.js\": 88676,\n\t\"./pa-in\": 92341,\n\t\"./pa-in.js\": 92341,\n\t\"./pl\": 57416,\n\t\"./pl.js\": 57416,\n\t\"./pt\": 84344,\n\t\"./pt-br\": 30113,\n\t\"./pt-br.js\": 30113,\n\t\"./pt.js\": 84344,\n\t\"./ro\": 72643,\n\t\"./ro.js\": 72643,\n\t\"./ru\": 61305,\n\t\"./ru.js\": 61305,\n\t\"./sd\": 96095,\n\t\"./sd.js\": 96095,\n\t\"./se\": 74486,\n\t\"./se.js\": 74486,\n\t\"./si\": 58742,\n\t\"./si.js\": 58742,\n\t\"./sk\": 96722,\n\t\"./sk.js\": 96722,\n\t\"./sl\": 3345,\n\t\"./sl.js\": 3345,\n\t\"./sq\": 52416,\n\t\"./sq.js\": 52416,\n\t\"./sr\": 39450,\n\t\"./sr-cyrl\": 50501,\n\t\"./sr-cyrl.js\": 50501,\n\t\"./sr.js\": 39450,\n\t\"./ss\": 32222,\n\t\"./ss.js\": 32222,\n\t\"./sv\": 9454,\n\t\"./sv.js\": 9454,\n\t\"./sw\": 19638,\n\t\"./sw.js\": 19638,\n\t\"./ta\": 96494,\n\t\"./ta.js\": 96494,\n\t\"./te\": 94435,\n\t\"./te.js\": 94435,\n\t\"./tet\": 25003,\n\t\"./tet.js\": 25003,\n\t\"./tg\": 13706,\n\t\"./tg.js\": 13706,\n\t\"./th\": 16025,\n\t\"./th.js\": 16025,\n\t\"./tk\": 59780,\n\t\"./tk.js\": 59780,\n\t\"./tl-ph\": 22068,\n\t\"./tl-ph.js\": 22068,\n\t\"./tlh\": 39167,\n\t\"./tlh.js\": 39167,\n\t\"./tr\": 32494,\n\t\"./tr.js\": 32494,\n\t\"./tzl\": 58707,\n\t\"./tzl.js\": 58707,\n\t\"./tzm\": 91296,\n\t\"./tzm-latn\": 34532,\n\t\"./tzm-latn.js\": 34532,\n\t\"./tzm.js\": 91296,\n\t\"./ug-cn\": 12086,\n\t\"./ug-cn.js\": 12086,\n\t\"./uk\": 85069,\n\t\"./uk.js\": 85069,\n\t\"./ur\": 29304,\n\t\"./ur.js\": 29304,\n\t\"./uz\": 95115,\n\t\"./uz-latn\": 97609,\n\t\"./uz-latn.js\": 97609,\n\t\"./uz.js\": 95115,\n\t\"./vi\": 34802,\n\t\"./vi.js\": 34802,\n\t\"./x-pseudo\": 65605,\n\t\"./x-pseudo.js\": 65605,\n\t\"./yo\": 88456,\n\t\"./yo.js\": 88456,\n\t\"./zh-cn\": 23272,\n\t\"./zh-cn.js\": 23272,\n\t\"./zh-hk\": 9402,\n\t\"./zh-hk.js\": 9402,\n\t\"./zh-mo\": 48101,\n\t\"./zh-mo.js\": 48101,\n\t\"./zh-tw\": 40262,\n\t\"./zh-tw.js\": 40262\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;"],"x_google_ignoreList":[1401]}