{"version":3,"file":"main.e4e0f487e9532414.js","mappings":"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DACAA,gEACAA,gEACAA,gEACAA,gDACAA,gDACAA,gDACAA,4CACAA,0BACAA,oBACAA,8BACAA,oBACAA,4BACAA,sBACAA,wCACAA,8BACAA,wBACAA,wBACAA,sCACAA,4CACAA,8CACAA,wDACAA,sDACAA,oDACAA,wDACAA,4DACAA,0DACAA,sCACAA,oCACAA,8BACAA,4BACAA,0CACAA,wCACAA,gCACAA,8BACAA,oCACAA,kCACAA,kDACAA,gDACAA,oCACAA,4BACAA,wCACAA,8BACAA,kCACAA,gDACAA,oCACAA,qCACAA,qCACAA,4BACAA,6BACAA,6BACAA,wCACAA,yCACAA,yCACAA,8BACAA,+BACAA,+BACAA,kCACAA,qCACAA,qCACAA,gDACAA,kCACAA,kCACAA,kDACAA,8CACAA,wDACAA,sDACAA,oDACAA,wDACAA,4DACAA,0DACAA,kDACAA,8CACAA,wDACAA,sDACAA,oDACAA,wDACAA,4DACAA,0DACAA,8CACAA,8CACAA,+CACAA,+CACAA,8BACAA,8BACAA,8BACAA,8CACAA,oEACAA,0CACAA,gEACAA,2CACAA,iEACAA,gCACAA,gCACAA,gCACAA,iCACAA,iCACAA,sCACAA,sCACAA,uCACAA,uCACAA,uCACAA,mCACAA,mCACAA,mCACAA,mCACAA,mCACAA,kCACAA,wCACAA,mCA5H0B,42BCwBrB,MAAMC,KAA6B1qB,MACxC,+CACAA,SAEW2qB,KAAoC3qB,MAC/C,uDACAA,SAEW4qB,KAAkC5qB,MAAa,mDAC/C6qB,KAA8B7qB,MAAa,8CAE3C8qB,KAA+B9qB,MAAa,+CAC5C+qB,KAA8B/qB,MACzC,gDACAA,SAEWgrB,KAAqChrB,MAChD,wDACAA,SAEWirB,KAAmCjrB,MAAa,oDAChDkrB,KAA+BlrB,MAAa,+CAC5CmrB,KAA4BnrB,MACvC,8CACAA,SAGWorB,KAAoBprB,MAAa,qCAAmCA,SACpEqrB,KAA2BrrB,MACtC,6CACAA,SAEWsrB,KAAyBtrB,MAAa,yCACtCurB,KAA0BvrB,MAAa,0CAEvCwrB,KAAcxrB,MAAa,+BAA6BA,SACxDyrB,KAAqBz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AA,6BACAA,uBACAA,6CACAA,wCACAA,yDACAA,sBACAA,sBACAA,4BACAA,2BACAA,uBACAA,mCACAA,+BACAA,2BACAA,oBACAA,qCACAA,mCACAA,sCACAA,0BACAA,6BACAA,8BACAA,gDACAA,2BACAA,sBACAA,iCACAA,6CACAA,2BACAA,2BACAA,6BACAA,2CACAA,qCACAA,qBACAA,2BACAA,wBACAA,qCACAA,2CACAA,uBACAA,yBACAA,4BACAA,0BACAA,uBACAA,+BACAA,wBACAA,+BACAA,4BACAA,iCACAA,qBACAA,+BACAA,yBACAA,qCACAA,yBACAA,uBACAA,6BACAA,6BACAA,0BACAA,2BACAA,sBACAA,8BACAA,oBACAA,qBACAA,2BACAA,yBACAA,sBACAA,4BACAA,sBACAA,yBACAA,+BACAA,uBACAA,6BACAA,iCACAA,gCACAA,yBACAA,iCACAA,qBACAA,yBACAA,2BACAA,2BACAA,2BACAA,uBACAA,uCACAA,+BACAA,iCACAA,uBACAA,+BACAA,iCACAA,yBACAA,4BACAA,6BACAA,qBACAA,uBACAA,2CACAA,iCACAA,iCACAA,+BACAA,2BACAA,wBACAA,iCACAA,2BACAA,yBACAA,6BACAA,kCACAA,2BACAA,iCACAA,0BACAA,2BACAA,uBACAA,uBACAA,kCACAA,qCACAA,gCACAA,+BACAA,uBACAA,2BACAA,qBACAA,yCACAA,6CACAA,wBACAA,qBACAA,uBACAA,yBACAA,yCACAA,6BACAA,oBACAA,kCACAA,wBACAA,6BACAA,kCACAA,uBACAA,2BACAA,0BACAA,uBACAA,yBACAA,+BACAA,2CACAA,mCACAA,2BACAA,yBACAA,iCACAA,mCACAA,8BACAA,yCACAA,6BACAA,yCACAA,2BACAA,kCACAA,sBACAA,4BACAA,6BACAA,4BACAA,4BACAA,uBACAA,6BACAA,+BACAA,wBACAA,kCACAA,uBACAA,yBACAA,6BACAA,4BACAA,qBACAA,uBACAA,0CACAA,2BACAA,wBACAA,mCACAA,uCACAA,kDACAA,yBACAA,yBACAA,2BACAA,iDACAA,2BACAA,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CACAA,4BACF,CANA,CAAYA,MAAkB,KAQ9B,SAAYC,GACVA,mBACAA,yBACAA,iCACAA,qBACAA,qBACAA,0CACF,CAPA,CAAYA,MAAsB,KASlC,SAAYC,GACVA,cACAA,gBACAA,sBACAA,kBACAA,uCACF,CANA,CAAYA,MAAuB,KAQnC,SAAYC,GACVA,mBACAA,6CACAA,oBACF,CAJA,CAAYA,MAAiB,KAM7B,SAAYC,GACVA,mBACAA,8BACF,CAHA,CAAYA,MAAoB,mCClDhC,IAAYtxH,8BAAmB,KAC7BA,iBACAA,iCACAA,yBACAA,mCACAA,kCAL6B,+BCA/B,IAAYuxH,8BAAa,KACvBA,iBACAA,6CACAA,uCACAA,2BACAA,0BALuB,+BCAzB,IAAYnyH,8BAAe,KACzBoyH,wBACApyH,cACAA,gBACAA,8BACAA,8BACAA,8BACAA,8BACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,gCACAA,mCAjByB,+BCA3B,IAAY4B,8BAAU,KACpBywH,kBACAzwH,oBACAA,iBAHoB,+BCAtB,IAAYmmB,8BAAa,KACvBuqG,gBACAvqG,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,oBACAA,gBACAA,iBACAA,kBACAA,kBACAA,mBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,qBACAA,qBACAA,qBACAA,qBACAA,oBACAA,qBACAA,qBACAA,kBACAA,mBACAA,mBACAA,oBACAA,oBACAA,qBACAA,oBACAA,kBACAA,mBACAA,kBAvCuB,+BCAzB,IAAYwqG,0BAAW,KACrBC,QADqB,+BCAvB,IAAYlyH,8BAAe,KACzBA,mBACAA,mBACAA,mBACAA,+BACAA,8BALyB,+BCA3B,IAAYmyH,8BAAiB,KAC3BA,iBACAA,qCACAA,iDACAA,iEACAA,mDACAA,kDAN2B,+BCA7B,IAAYvxH,8BAAqB,KAC/BA,iBACAA,uCACAA,2BACAA,iCACAA,+BACAA,+BACAA,2BACAA,mCACAA,qCACAA,gBAV+B,+BCAjC,IAAY/B,8BAAY,KACtBA,6BACAA,gBAFsB,+BCAxB,IAAYuzH,8BAAqB,KAC/BptG,oCACAotG,sCACAA,0BACAA,4BACAA,oCACAA,uCAN+B,+BCAjC,IAAY5xH,8BAAS,KACnBA,qBACAA,mBACAA,2BACAA,yBACAA,uBACAA,yCACAA,yDACAA,iDACAA,qCACAA,iDACAA,wBACAA,uDAZmB,+BCArB,IAAYkpB,8BAAK,KACf2oG,uBACA3oG,qBACAA,yBACAA,2BACAA,oBACAA,sBACAA,yBACAA,yBACAA,qBACAA,yBACAA,oBACAA,uBACAA,cACAA,YACAA,4BACAA,qBACAA,oBACAA,yBACAA,qBACAA,2BACAA,6BACAA,kBACAA,4BACAA,6BACAA,uBACAA,kBACAA,4BACAA,cACAA,mBACAA,gBACAA,qCACAA,sBACAA,kBACAA,+BACAA,iCACAA,2BACAA,cACAA,cACAA,gBACAA,wBACAA,0BACAA,0BACAA,0BACAA,0BACAA,yBACAA,gBACAA,oBACAA,oBACAA,uBACAA,gBACAA,uBACAA,sDACAA,yBACAA,oBACAA,wBACAA,kCACAA,oCACAA,cACAA,gBACAA,0BACAA,iCACAA,+BACAA,sBACAA,kBACAA,cACAA,gBACAA,kBACAA,kBACAA,8BACAA,gBACAA,wBACAA,kCACAA,oBACAA,sBACAA,sBACAA,sBACAA,kCACAA,sCACAA,uCACAA,qCACAA,gBACAA,cACAA,cACAA,kBACAA,oBACAA,qBACAA,kBACAA,+BACAA,yBACAA,gCACAA,kBACAA,sBACAA,wBACAA,gBACAA,kBACAA,sBACAA,kBACAA,cACAA,cACAA,oBACAA,YACAA,gCACAA,cACAA,sBACAA,oBACAA,gBACAA,cACAA,kBACAA,sBACAA,wBACAA,2BACAA,oCACAA,iDACAA,6BACAA,wCACAA,0BACAA,6BACAA,cACAA,uBACAA,0BACAA,gBACAA,oCACAA,+BACAA,+CACAA,8BACAA,6BACAA,gBACAA,6BACAA,kBACAA,yBACAA,uBACAA,wBACAA,kBACAA,0BACAA,yBACAA,6BACAA,cACAA,sBACAA,aACAA,2BACAA,6BACAA,6BACAA,2BACAA,gCACAA,kCACAA,cACAA,cACAA,oBACAA,sBACAA,wBACAA,gBACAA,sBACAA,+BACAA,sBACAA,cACAA,uBACAA,2BACAA,uBACAA,yBACAA,2BACAA,sBACAA,uBACAA,2BACAA,gCACAA,8BACAA,yBACAA,iCACAA,8BACAA,gCACAA,gBACAA,6BACAA,2BACAA,0CACAA,wCACAA,4BACAA,sBACAA,gCACAA,kCACAA,8BACAA,sBACAA,0BACAA,YACAA,UACAA,0BACAA,wBACAA,0CACAA,8BACAA,gCACAA,cACAA,iCACAA,kBACAA,yBACAA,mBACAA,gBACAA,kCACAA,qBACAA,sBACAA,+BACAA,gCACAA,cACAA,gBACAA,wBACAA,cACAA,4BACAA,wBACAA,oBACAA,6BACAA,8BACAA,gBACAA,YACAA,gCACAA,sBACAA,kBACAA,0BACAA,4BACAA,gCACAA,sBACAA,6BACAA,+BACAA,cACAA,cACAA,oBACAA,8BACAA,aAhOe,+BCAjB,IAAY4oG,8BAAO,KACjBA,2BACAA,mBACAA,gBAHiB,4DCEPtmG,wBAAa,KACvBA,2BACAA,wBACAA,wBACAA,wBACAA,2BACAA,6BAGK,MAAMV,EAAmB,CAAChL,EAA+BiyG,KAC9D,MAAMC,EAAeC,EAAOF,GAAathF,QAAQ,SAE3CyhF,EAAmBD,EAAOD,GAAcx2G,KAAI,GAAK,QACjD22G,EAAkBF,EAAOD,GAAcx2G,KAAI,EAAI,SAE/C42G,EAAmBH,EAAOE,GAAiB32G,KAAI,GAAK,QACpD62G,EAAkBJ,EAAOE,GAAiB32G,KAAI,EAAI,SAElD82G,EAAmBL,EAAOI,GAAiB72G,KAAI,GAAK,QACpD+2G,EAAkBN,EAAOI,GAAiB72G,KAAI,EAAI,SAElD0F,EAAY,CAAC+wG,EAAOF,GAAcC,EAAcE,EAAkBC,GAEpEryG,EAAiB,IACnBoB,EAAU5M,KAAK89G,EAAkBC,GAG/BvyG,EAAiB,IACnBoB,EAAU5M,KAAKg+G,EAAkBC,GAGnC,MAAMC,EAAgBtxG,EAAU5d,IAAI4e,IAAmC,EAoBzE,SAASuwG,EAAY1nG,EAAsBs1C,GACzC,OAAO4xD,EAAOlnG,GAAgB2nG,KAAKryD,EAAI,OACzC,CAtB2CoyD,CAAYV,EAAa7vG,IAElE,GAAIpC,IAAmB0L,EAAcmnG,QAAS,CAC5C,KAAOxtG,KAAKyrC,IAAI4hE,EAAcA,EAAc/sH,OAAS,IAAM+lB,EAAcmnG,SACvEH,EAAcl+G,KAAKk+G,EAAcA,EAAc/sH,OAAS,IAAK,IAG/D+sH,EAAcA,EAAc/sH,OAAS,IAAM+lB,EAAcmnG,QAG3D,GAAI7yG,IAAmB0L,EAAconG,SAAU,CAC7C,KAAOztG,KAAKyrC,IAAI4hE,EAAcA,EAAc/sH,OAAS,IAAM+lB,EAAconG,UACvEJ,EAAcl+G,KAAKk+G,EAAcA,EAAc/sH,OAAS,IAAK,IAG/D+sH,EAAcA,EAAc/sH,OAAS,IAAM+lB,EAAconG,SAE3D,OAAOJ,EAKT,+BCvDA,IAAYhyH,8BAAU,KACpBqyH,YACAryH,gBACAA,sBACAA,kBACAA,8BACAA,kCACAA,0CACAA,gCACAA,qBAToB,+BCAtB,IAAYQ,8BAAoB,KAC9B8xH,kDACA9xH,8CACAA,mDACAA,sCACAA,sCACAA,wCACAA,0CACAA,0CACAA,oCACAA,kDACAA,gFACAA,oFACAA,gEACAA,kEACAA,8CACAA,4DACAA,4EACAA,wFACAA,8BAEAA,4DACAA,kEACAA,8CACAA,8CACAA,oEACAA,4EACAA,8EACAA,0EACAA,8EACAA,wDACAA,wDACAA,kEAEAA,4CACAA,sDACAA,4DACAA,4DAEAA,sDACAA,kEAEAA,0DACAA,8EACAA,0DACAA,wDACAA,mEACAA,qDACAA,kDACAA,gEACAA,kDACAA,kDAGAA,8CAGAA,4DAEAA,sEACAA,0EACAA,gEACAA,0EACAA,8EACAA,oEACAA,oFACAA,oFAGAA,wEACAA,8EACAA,mFACAA,mFAEAA,8BAEAA,wEACAA,gEAGAA,4DACAA,wDACAA,oDACAA,4DACAA,4DAGAA,0CACAA,8DACAA,oFACAA,gEACAA,4DACAA,qFA5F8B,+BCAhC,IAAYhC,8BAAe,KACzB+zH,kBACA/zH,sBACAA,gCACAA,kBACAA,gBACAA,wBACAA,6BAPyB,+BCA3B,IAAYkC,8BAAe,KACzBohH,oBACAphH,oBACAA,gBACAA,uBACAA,wBACAA,2BACAA,YACAA,cACAA,sCACAA,YACAA,wBACAA,0BACAA,oBACAA,4BACAA,kBACAA,kBACAA,kDACAA,cACAA,oBACAA,wBACAA,wBACAA,sBACAA,wBACAA,kCACAA,oBACAA,sBACAA,+BA3ByB,+BCA3B,IAAYs1E,8BAAW,KACrBA,mBACAA,iCACAA,yBACAA,uCACAA,6BACAA,qCACAA,+BACAA,mEACAA,4DATqB,+BCAvB,IAAYp3E,8BAAmB,KAC7B0gG,YACA1gG,kCACAA,kEACAA,kEACAA,sCACAA,sDACAA,sDACAA,sDACAA,kEACAA,wEACAA,gEACAA,8DACAA,8EACAA,0EACAA,gEACAA,4EACAA,0EACAA,8DACAA,gDACAA,oDACAA,0CACAA,gCACAA,sCACAA,8CACAA,sCACAA,4DACAA,sEACAA,0EACAA,oEACAA,4DACAA,4CACAA,wDACAA,yCACAA,gEACAA,8DACAA,8EACAA,0EACAA,gEACAA,4EACAA,0EACAA,8DACAA,gDACAA,oDACAA,0CACAA,gCACAA,4DACAA,sEACAA,0EACAA,oEACAA,4DACAA,4CACAA,wDACAA,kCACAA,kCACAA,8BACAA,8BACAA,gDACAA,sCACAA,oCACAA,gFACAA,gFACAA,yBACAA,wBACAA,0BACAA,0BACAA,4BACAA,4BACAA,0BACAA,wBACAA,sBACAA,gCACAA,8BACAA,8BACAA,0CACAA,sFACAA,sDACAA,kDACAA,gDACAA,gDACAA,sDACAA,sDACAA,0CACAA,oDACAA,wDACAA,mDArF6B,8BCA/B,IAAY4zH,8BAAY,KACtBA,iBACAA,iBACAA,uBACAA,mBACAA,4BALsB,8BCAxB,IAAYC,8BAAY,KACtBA,iBACAA,6BACAA,2BACAA,2BACAA,kBALsB,+BCAxB,IAAYnjF,8BAAS,KACnBojF,wBACApjF,mCACAA,6CACAA,0CACAA,iCACAA,2BACAA,qCACAA,yCACAA,6BACAA,iCACAA,6BACAA,sCACAA,kCACAA,kBACAA,uBACAA,uBACAA,2BACAA,uBACAA,yBACAA,kCACAA,oDACAA,gCACAA,qCACAA,0CACAA,eAzBmB,+BCArB,IAAYlxC,8BAAS,KAEnBshH,0CACAthH,gCACAA,sCACAA,uDACAA,+CACAA,6CACAA,qDACAA,qCACAA,qCACAA,uCACAA,iCACAA,uCACAA,oCACAA,4CAEAA,cACAA,sBACAA,oBACAA,kCACAA,4BACAA,oBACAA,sBACAA,cACAA,oBACAA,0BAEAA,gBACAA,4CACAA,gDACAA,iDACAA,wDACAA,0CACAA,sBACAA,kCACAA,oCACAA,cACAA,gBACAA,gBACAA,sCACAA,8BACAA,sBACAA,gCACAA,sBACAA,0CACAA,wCAEAA,gCACAA,sCAEAA,wBACAA,gCACAA,0BAEAA,kBACAA,oBAEAA,wBACAA,kBACAA,sCACAA,sBACAA,kBACAA,mCACAA,YACAA,0BACAA,cACAA,gBACAA,sBACAA,wBACAA,sBACAA,oBACAA,oBACAA,wBAEAA,oBACAA,kBACAA,wBACAA,YACAA,oBACAA,sBACAA,4BACAA,sBAEAA,0BACAA,sCACAA,8DACAA,kCACAA,cACAA,6BACAA,oBACAA,uCACAA,oBACAA,oBACAA,4BACAA,0CACAA,sBACAA,qBAjGmB,+BCArB,IAAYu0H,8BAAkB,KAC5B30H,UACA20H,gBACAA,cACAA,gBACAA,YACAA,iBAN4B,+BCA9B,IAAYC,8BAAmB,KAC7B50H,UACA40H,yBAF6B,8BCA/B,IAAYC,8BAAa,KACvBA,iBAGAA,2CACAA,yCACAA,uCACAA,mDACAA,uCACAA,+CACAA,qDAGAA,uCACAA,2BACAA,kCACAA,gCACAA,4BACAA,4BACAA,oCACAA,sCACAA,wBAGAA,kCACAA,4BACAA,oCACAA,oCACAA,0BACAA,gCACAA,4BAGAA,4CACAA,yCAlCuB,+BCAzB,IAAYC,IAcAC,EASAC,EAKAC,uCA5BAH,QAAgB,KAC1BA,iBACAA,+BACAA,2BACAA,2BACAA,yBACAA,2BACAA,mCACAA,2BACAA,6BACAA,+BACAA,wBAGF,SAAYC,GACVA,eACAA,2BACAA,+B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,iBACEA,uCACAA,yCACFA,mBAVYA,gCAAiB,eAAjBA,CAAiB,mCAAjBA,CAAiB,qBAIvBA,mCAIqBA,4DACnBA,i9CCmBCunI,qUAA2B58I,KARvCwW,QAQYomI,EAA2B,8BC/BxC,IAAYp6F,8BAAoB,KAC9Bw6F,sDACAx6F,wDACAA,4CACAA,yCACAA,yCACAA,yCACAA,6CACAA,+CACAA,uCACAA,2CAEAA,kDACAA,kDACAA,gDACAA,kDACAA,kDACAA,0DACAA,0DACAA,gEACAA,gEACAA,0DACAA,kDACAA,wEACAA,wDACAA,+CACAA,qDACAA,qDACAA,mCACAA,qCACAA,+CACAA,+DAEAA,yEACAA,yEACAA,mDACAA,sEAEAA,qFACAA,2FACAA,mFAEAA,2CACAA,oEACAA,4DAEAA,mFACAA,6EACAA,oGACAA,8FAEAA,kEACAA,0EACAA,iEACAA,qDAEAA,0EAEAA,8CACAA,uCAEAA,yDACAA,6CACAA,0DACAA,+DACAA,kFACAA,6EACAA,+CACAA,mFACAA,oFACAA,iEACAA,kEACAA,0FACAA,4DACAA,+CACAA,qEACAA,mEACAA,4DACAA,kEAGAA,iGACAA,2FACAA,0EACAA,oDACAA,2FACAA,+DACAA,+EACAA,uGAGAA,kEACAA,wDACAA,wDACAA,oDACAA,0EAGAA,2DACAA,iDACAA,iDACAA,mEACAA,kEACAA,iEACAA,oDACAA,8EAGAA,6CACAA,mCACAA,2CAGAA,iDACAA,uCACAA,+CAEAA,qCAEAA,0DACAA,wDACAA,gEACAA,2CACAA,6EAEAA,2EACAA,qEACAA,wDAEAA,kDACAA,sDACAA,yCAEAA,0EACAA,6DAEAA,sDACAA,yCAEAA,qEAEAA,2EAEAA,iEAEAA,sKACAA,+GACAA,kEACAA,8DAEAA,oEAEAA,2FACAA,wFAEAA,uFACAA,kFACAA,yFAEAA,wEAEAA,0EAEAA,qEAEAA,gDACAA,oDACAA,gDACAA,6DAEAA,6CACAA,+CACAA,0DACAA,sDACAA,8DACAA,+EACAA,6CACAA,2CACAA,qEACAA,iDACAA,uDACAA,yCACAA,iCACAA,iCACAA,iDACAA,qDACAA,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","names":["PillOptions","Below30Days","ComponentAbstract","pu_subscribe","constructor","cdr","super","this","icon_enum","color_palette_enum","dropdown_tab_enum","selection_date_mode_enum","selection_range_mode_enum","index","EDropdownTab","PREDEFINED","label","OWN","workflow_step_list_const","priority_type_list_const","none_radio_option_const","RoutePath","route_path_enum","WorkflowPhaseType","workflow_phase_type","MainPageActions","main_page_actions","BreadcrumbTheme","breadcrumb_theme_enum","PermissionLevelType","permission_level_enum","WorkflowStep","workflow_step_enum","CompareOperator","compare_operator_enum","ChartTypes","chart_types_enum","UserType","user_type","AuditableEntityType","auditable_entity_type","FieldType","field_type","UpdateStatus","update_status","DelinquencyResultType","delinquency_result_type","TurnoverForm","turnover_form","LoaderType","loader_type","Animation","animation","TurnoverAuditMode","turnover_audit_mode","ButtonType","button_type","LocalStorageDataEnum","local_storage_data_enum","ManagementRoute","management_route_enum","WorkflowStepEnumType","toggleMenu","menuExpanded","isExpanded","detectChanges","trackByFn","item","id","core","inputs","AdministrationAbstract","component_abstract","store","router","value","route","queryParams","pipe","ngneat_until_destroy","subscribe","params","isResident","snapshot","data","untilDestroyed","selectAllGeneralRoles","select","administration_selectors","filter","generalRoles","tap","dispatch","administration_actions","generalRoleRadioList","map","roleName","selectGeneralRoleRadioList","userRoles","features","__decorate","VENDOR_ROLE_NAME","combineUserWithProperties","userId","allProperties","propertyMapping","userPropertiesMappings","lodash__WEBPACK_IMPORTED_MODULE_0__","userMappedProperties","mapping","propertyId","userProperty","getFilterKey","JSON","stringify","formatPropertyStructureToTree","root","children","name","properties","propertiesIndexMap","result","singleProperty","parentId","parent","parentIndex","console","warn","sortTreeByName","node","length","sortedNode","sort","a","b","localeCompare","numeric","sensitivity","child","loadAllUsers","_ngrx_store__WEBPACK_IMPORTED_MODULE_0__","loadAllUsersSucceeded","loadAllUsersFailed","loadPortfolioUsers","loadPortfolioUsersSucceeded","loadPropertyUsers","loadPropertyUsersSucceeded","loadPropertyUsersFailed","clearAllUsers","loadAllPropertyRoles","clearAllPropertiesRoles","loadAllPropertiesRolesSucceeded","loadAllUserToPropertyMappings","clearAllUserToPropertyMappings","loadAllUserToProperyMappingsSucceeded","loadAllPermissionLevels","loadAllPermissionLevelsSucceeded","loadAllGeneralRolesToPermissionMapping","loadAllGeneralRolesToPermissionMappingSucceeded","loadUserToRoleMapping","loadUserToRoleMappingSucceeded","clearUserToRoleMapping","setSelectedUsers","loadAllGeneralRoles","loadAllGeneralRolesSucceeded","clearAllGeneralRoles","setAllUsersCombinedWithGeneralRoles","loadPropertiesStructure","clearPropertiesStructure","loadPropertiesStructureSucceeded","startAddNewUser","addingNewUserSucceeded","addingNewUserFailed","clearAddedUser","assignUserToProperty","assignUserToPropertySuccess","assignUserToPropertyError","removingPropertyAssignedUser","removingPropertyAssignedUserSuccess","removingPropertyAssignedUserError","requestFailure","saveUsersRolesAndUnits","selectGeneralRoleToEdit","saveUsersRolesAndUnitsSucceeded","startDeleteGeneralRole","deleteGeneralRoleSucceeded","deleteGeneralRoleFailed","clearSelectedGeneralRole","startSavingGeneralRole","savingGeneralRoleSucceeded","savingGeneralRoleFailed","startUpdatingGeneralRole","updatingGeneralRoleSucceeded","updatingGeneralRoleFailed","setGeneralRoleRadioList","inviteNewUser","inviteNewUserSuccess","inviteNewUserError","updateUserData","updateUserDataSuccess","updateUserDataError","saveUserToGeneralRole","saveUserToGeneralRoleSuccess","saveUserToGeneralRoleError","clearUserPreviewData","removeUser","reactivateUser","removeUserSucceeded","reactivateUserSucceeded","removeUserFailed","inviteNewResidentUser","inviteNewResidentUserSuccess","inviteNewResidentUserError","updateResidentUserData","updateResidentUserDataSuccess","updateResidentUserDataError","setUserListFilter","administrationFeatureKey","reducer","_ngrx_store__WEBPACK_IMPORTED_MODULE_3__","portfolioActiveUsers","portfolioInactiveUsers","portfolioUsersLoading","addNewUserInProgress","addedUser","deleteGeneralRoleInProgress","generalRolesToPermissionMapping","permissionLevels","propertiesRoles","propertiesStructure","activePropertyUsers","propertyUsersLoading","saveGeneralRoleInProgress","selectedGeneralRole","selectedUsers","userToGeneralRole","userToPropertyMapping","activeUsers","activeUserOrVendorOptionsList","inactiveUsers","cachedUsers","usersLoading","usersWithGeneralRoles","usersWithGeneralRolesLoading","userUpdateInProgress","userUpdateStatus","userInviteInProgress","userInviteStatus","userInvited","saveUserToGeneralRoleInProgress","saveUserToGeneralRoleStatus","assignUserIntoPropertyInProgress","assignUserIntoPropertyStatus","removingPropertyAssignedUserInProgress","removingPropertyAssignedUserStatus","removeUserInProgress","userListFilter","_actions_administration_actions__WEBPACK_IMPORTED_MODULE_2__","state","action","users","_shared_functions_get_user_list_function__WEBPACK_IMPORTED_MODULE_1__","_main_application_administration_functions_get_filter_key__WEBPACK_IMPORTED_MODULE_4__","saveUserToPropertyInProgress","_shared_enums_update_status__WEBPACK_IMPORTED_MODULE_0__","user","generalRole","selectAdministrationState","_ngrx_store__WEBPACK_IMPORTED_MODULE_1__","_reducers_administration_reducer__WEBPACK_IMPORTED_MODULE_0__","selectPortfolioActiveUsers","administrationState","selectPortfolioUsersLoading","selectActiveUsers","selectInactiveUsers","selectAllUsers","concat","selectAllUsersLoading","selectAllPermissionLevels","selectAllUserToGeneralRoleMapping","selectAllUsersWithGeneralRoles","selectAllUsersWithGeneralRolesLoading","selectAllPropertiesStructure","selectUserListFilter","selectSaveUserToGeneralRoleInProgress","selectSaveUserToGeneralRoleStatus","selectAssignUserIntoPropertyInProgress","selectAssignUserIntoPropertyStatus","selectRemovingPropertyAssignedUserInProgress","selectRemovingPropertyAssignedUserStatus","selectIsDeleteGeneralRoleInProgress","selectAllUserToPropertyMappings","selectPropertyUsers","selectPropertyUsersLoading","selectUserInviteInProgress","selectUserInviteStatus","selectUserInvited","selectUserUpdateInProgress","selectUserUpdateStatus","UserPreviewFields","FirstName","propertySelectorTypes","_shared_enums_dashboard_view_type__WEBPACK_IMPORTED_MODULE_0__","allPropertyValue","portfolioAllPropertyValue","allPropertiesOption","allPortfoliosValue","allPortfoliosOption","BoardColumnType","BoardType","BoardOutputType","BoardOutputBehaviour","BoardProgressType","BoardSourceType","BoardMakeReadySteps","ScheduleCellStatus","ScheduleCellMenuActions","StartedSubType","ScheduleCellColor","BoardView","RestBoardModel","board","progressType","datasource","boardType","outputAction","outputBehaviour","boardCellColor","allPortfolios","extendedConfigJson","extendedConfigParsed","selectedPortfolioIds","join","excludedProperties","excludedPropertyIds","boardColumnsConfig","columns","e","type","_board_enums__WEBPACK_IMPORTED_MODULE_2__","showArchivedTurnovers","dontCreateTickets","Board","config","isBoardResponse","entity","parse","Array","isArray","isBoardColumn","forEach","c","uuid__WEBPACK_IMPORTED_MODULE_3__","propertyColumnIndex","findIndex","unitColumnIndex","splice","editable","visible","frozen","initDefaultColumns","split","Number","addColumn","workflowStep","poisition","column","push","ColumnSorting","sorting","primaryValue","cellValueHelper","columnId","fieldFunction","getComparedValueFunction","sortFunction","e1","e2","value1","value2","isUnitOnHold1","turnoverData","isUnitOnHold","isUnitOnHold2","buildingNumber1","buildingNumber","buildingNumber2","unitName1","unitName","toLowerCase","unitName2","isUnitDown1","isUnitDown2","isUnitDown","getComparableValue","phasePriority","ColumnFilter","status","isColumnSummable","includes","isCostColumn","ProgressTypeList","BoardSourceTypeList","BoardTypeList","BoardOutputBehaviourList","DoNotAllowToCreateTicketsRule","BoardOutputTypeList","disallowSourceTypeOutputTypeMap","getNextStepType","turnover","dateMoveIn","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_1__","getCurrentStep","sourceType","NonPmsAddModalComponent","PuSubscribable","modalService","formBuilder","dialogRef","group","Validators","getAcceptChargesText","combineLatest","selectProperties","selectSelectedPortfolioId","userProperties","currentPortfolioId","getPortfolioProperties","portfolioId","form","controls","setValue","ngOnInit","selectSelectedPropertyIds","propertyIds","first","ok","valid","close","formSubmited","markAllAsTouched","i0","MAT_DIALOG_DATA","selectors","ctx","CommonModule","i5","FormsModule","i2","ReactiveFormsModule","MatDialogModule","i3","MatButtonModule","i6","MatInputModule","MatSelectModule","InputModule","i7","RadioButtonDropdownModule","i8","UntilDestroy","BoardService","_main_application_shared_services_common_in_memory_updating_service__WEBPACK_IMPORTED_MODULE_1__","service","modalsService","rxjs__WEBPACK_IMPORTED_MODULE_8__","getTurnoverList","boardId","getData","_app_services_turnovers_service__WEBPACK_IMPORTED_MODULE_0__","refresh","_list$","closed","getListInternal","rxjs__WEBPACK_IMPORTED_MODULE_9__","list","next","rxjs__WEBPACK_IMPORTED_MODULE_10__","deleteInternal","post","getListByPortfolio","add","updateSavedData","update","copyOfArray","removeBoard","boardName","_main_application_store_selectors_user_selectors__WEBPACK_IMPORTED_MODULE_2__","rxjs__WEBPACK_IMPORTED_MODULE_11__","rxjs__WEBPACK_IMPORTED_MODULE_12__","permissionLevel","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_4__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_3__","rxjs__WEBPACK_IMPORTED_MODULE_13__","openConfirmationModal","title","content","confirmColor","afterClosed","_ui_components_modals_config_dialog_result_enum__WEBPACK_IMPORTED_MODULE_5__","delete","boardRemoving$","getTemplatesUsage","updateTemplateUsage","usage","getBoardSummaryStats","url","groupBy","subGroupBy","collectionIds","unitType","startDate","endDate","getBoardSummaryDetails","_angular_core__WEBPACK_IMPORTED_MODULE_14__","factory","TurnStepScheduleService","static","timezone","_main_application_management_pages_system_configuration_components_timezone_entity_helper__WEBPACK_IMPORTED_MODULE_0__","getList","turnoverId","fixTimezoneForTurnStepScheduleModel","turn","addEntity","pushToPMS","ticketTopicId","rxjs__WEBPACK_IMPORTED_MODULE_3__","updateDates","updateEntity","_interfaces_board_enums__WEBPACK_IMPORTED_MODULE_1__","doneAll","boardLayoutId","turnStepScheduleId","associateTicket","ticket","stepScheduleModel","schedule","dateCompleted","turnoverDateAvailable","dateAvailable","turnoverDateShowable","dateShowable","originalDueDate","_angular_core__WEBPACK_IMPORTED_MODULE_4__","DelinquencyFields","NOTES","KpisAbstract","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_0__","kpiService","getNewValue","trendDaysValue","sum","kpis","_dashboards_models_portfolio_kpi__WEBPACK_IMPORTED_MODULE_1__","getCanceledValue","getPendingValue","getDeniedValue","getApprovedValue","getConvertingValue","getConvertedValue","_angular_core__WEBPACK_IMPORTED_MODULE_3__","_angular_core__WEBPACK_IMPORTED_MODULE_5__","LeasingUnitsChartCardComponent","_dashboards_components_abstract_kpis_abstract_directive__WEBPACK_IMPORTED_MODULE_1__","_angular_forms__WEBPACK_IMPORTED_MODULE_6__","showTooltip","showDataLabel","maxBarThickness","borderRadius","dataLabelAbsolute","trendDays","calculate","_dashboards_store_selectors_kpi_selectors__WEBPACK_IMPORTED_MODULE_2__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_7__","rxjs_operators__WEBPACK_IMPORTED_MODULE_8__","rxjs_operators__WEBPACK_IMPORTED_MODULE_9__","isLoading","modeControl","valueChanges","chartConfig","chartDataList","getChartData","subTitle","values","backgroundColor","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_3__","i","labelColor","LeasingUnitsChartCardModule","_ui_components_controls_slide_toggle_slide_toggle_component__WEBPACK_IMPORTED_MODULE_3__","_angular_common__WEBPACK_IMPORTED_MODULE_7__","_ui_components_components_chart_card_chart_card_module__WEBPACK_IMPORTED_MODULE_2__","_ui_components_components_chart_chart_module__WEBPACK_IMPORTED_MODULE_1__","_angular_forms__WEBPACK_IMPORTED_MODULE_8__","_dashboards_components_leasing_units_chart_card_leasing_units_chart_card_component__WEBPACK_IMPORTED_MODULE_0__","_angular_core__WEBPACK_IMPORTED_MODULE_13__","TurnoversArcChartCardComponent","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_1__","helpRouterService","_angular_forms__WEBPACK_IMPORTED_MODULE_14__","_shared_enums_workflow_phase_type__WEBPACK_IMPORTED_MODULE_9__","cutoutLevel","rotation","circumference","spacing","_dashboards_store_selectors_kpi_selectors__WEBPACK_IMPORTED_MODULE_3__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_15__","rxjs_operators__WEBPACK_IMPORTED_MODULE_16__","rxjs_operators__WEBPACK_IMPORTED_MODULE_17__","selectedPhase","calculateNotice","calculateTotal","_main_application_store_selectors_enumeration_selectors__WEBPACK_IMPORTED_MODULE_4__","_shared_utils_rxjs_filter_nullish_rxjs_util__WEBPACK_IMPORTED_MODULE_18__","rxjs_operators__WEBPACK_IMPORTED_MODULE_19__","steps","maxValue","_shared_enums_workflow_phase_to_step_const__WEBPACK_IMPORTED_MODULE_8__","s","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_10__","phaseStep","step","find","x","enumerationValue","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_5__","displayText","link","href","TURNOVERS","_shared_enums_route_path_enum__WEBPACK_IMPORTED_MODULE_7__","globalParams","getGlobalPreservedParams","_dashboards_models_portfolio_kpi__WEBPACK_IMPORTED_MODULE_2__","_shared_enums_route_data__WEBPACK_IMPORTED_MODULE_6__","Math","max","r","withNotice","TurnoversArcChartCardModule","_angular_common__WEBPACK_IMPORTED_MODULE_8__","_angular_forms__WEBPACK_IMPORTED_MODULE_9__","_shared_directives_tooltip_directive__WEBPACK_IMPORTED_MODULE_0__","_turnovers_arc_chart_card_component__WEBPACK_IMPORTED_MODULE_4__","_angular_router__WEBPACK_IMPORTED_MODULE_11__","VacancyLossTypeGross","VacancyLossTypeListConst","vacancy_loss_attr","tooltip","VacancyLossChartCardComponent","timezoneService","customCurrencyShortWithSuffix","turnoverKanbanService","selectSelectedVacancyLossThreshold","distinctUntilChanged","VacancyLostThresholdList","interaction","mode","intersect","scales","yAxes","grid","drawBorder","display","color","EColorPalette","ticks","font","size","weight","callback","round","transform","parseFloat","toString","xAxes","borderDash","borderWidth","borderColor","tickWidth","maxRotation","minRotation","maintainAspectRatio","plugins","legend","titleColor","titleFont","bodyColor","bodyFont","caretSize","caretPadding","cornerRadius","displayColors","callbacks","tooltipItem","tooltipValue","formattedValue","getAllPropertyIds","EIcon","UntypedFormControl","k","loadKpis","dispatchActiveSections","clearPortfolioKpiTrendLines","_this","thresholdTypeKpiType","firstValueFrom","selectSelectedVacancyLossThresholdKpiType","thresholdTypeKpiTypePerTurn","selectSelectedVacancyLossThresholdKpiTypePerTurn","selectPortfolioKpiTrendLines","selectChartSettingsValue","chartId","allPropertyIds$","settings","selectedPropertyIds","vacancyAttrType","vacancyType","VacancyLossAttrType","fillVacancyLoss","vacancyAttrTypeControl","setChartSettingsValue","updateThreshold","setVacancyLossThreshold","thresholdType","loadPortfolioKpiTrendLines","getTrendDaysDiff","getCurrentDate","kpiTypes","chartData","getGrossVacancyLoss","getUnitVacancyLoss","getTurnVacancyLoss","markForCheck","grossData","prepareVacancyLossGross","KpiWindowType","getGroupedByMonth","el","moment","format","dataSet","labels","d","datasets","getDataset","attrType","current","last","unitData","prepareVacancyLoss","turnData","kpiType","calculationDate","sortBy","Object","keys","key","sumValue","sumBy","unitsCount","toFixed","additionalValue","toDate","getTime","v","avg","calculateTrendDirection","canvas","document","createElement","body","append","gradient","getContext","createLinearGradient","trendDirection","addColorStop","remove","cubicInterpolationMode","pointRadius","pointHitRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","fill","insideChart","inside","undefined","showTooltipValue","trend","createTrend","timestamps","xMax","xMin","min","calcY","selectUserData","filterNullish$","userData","setActiveSections","activePropertyIds","getExpandedSections","switchMap","groupedByMonth","month","TurnoverKanbanService","VacancyLossChartCardModule","_ui_components_controls_slide_toggle_slide_toggle_component__WEBPACK_IMPORTED_MODULE_5__","_angular_common__WEBPACK_IMPORTED_MODULE_12__","_ui_components_components_line_chart_line_chart_module__WEBPACK_IMPORTED_MODULE_2__","_ui_components_components_chart_card_chart_card_module__WEBPACK_IMPORTED_MODULE_1__","_ui_components_components_pill_list_pill_list_module__WEBPACK_IMPORTED_MODULE_3__","_angular_forms__WEBPACK_IMPORTED_MODULE_13__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_0__","_ui_components_controls_radio_button_dropdown_radio_button_dropdown_module__WEBPACK_IMPORTED_MODULE_4__","_vacancy_loss_chart_card_component__WEBPACK_IMPORTED_MODULE_6__","ChartSelectorTypes","WorkflowActionType","PIE","PortfolioKpiType","loadTurnoverKanbanProperty","loadTurnoverKanbanPropertySuccess","loadTurnoverKanbanPropertyError","resetTurnoverKanbanProperty","clearTurnoverKanbanPortfolio","loadTurnoverKanbanPortfolio","loadTurnoverKanbanPortfolioSuccess","loadTurnoverKanbanPortfolioError","resetTurnoverKanbanPortfolio","kanbanListGenerateSuccess","loadUserTurnovers","loadUserTurnoversSuccess","loadUserTurnoversError","resetUserTurnoversError","loadMyTasks","loadMyTasksSuccess","loadMyTasksError","myTasksHeaderData","clearMyTasks","loadPropertyKpi","loadPropertyKpiSucceded","loadPropertyKpiFailed","loadUnitSummaryByProperty","loadUnitSummaryByPropertySucceded","loadUnitSummaryByPropertyFailed","clearUnitSummaryByProperty","loadActiveTurnoversSummary","loadActiveTurnoversSummarySucceded","loadActiveTurnoversSummaryFailed","clearActiveTurnoversSummary","loadActiveTurnoversDetails","loadActiveTurnoversDetailsSucceded","loadActiveTurnoversDetailsFailed","loadDelinquencyByUnit","loadDelinquencyByUnitSucceded","loadDelinquencyByUnitFailed","loadDelinquencySummary","loadDelinquencySummarySucceded","loadDelinquencySummaryFailed","clearDelinquencySummary","loadRenewalsSummary","loadRenewalsSummarySucceded","loadRenewalsSummaryFailed","clearRenewalsSummary","loadUnitDetails","loadUnitDetailsSuccess","loadUnitDetailsFailed","loadUnitDetailsByType","loadUnitDetailsByTypeSuccess","loadUnitDetailsByTypeFailed","loadRenewalsDetails","loadRenewalsDetailsSuccess","loadRenewalsDetailsFailed","selectedDashboardViewType","loadMyProperties","loadMyPropertiesSuccess","loadMyPropertiesFailed","selectedDashboardMode","setCustomBreadcrumbs","loadUnitsWithActiveTurnovers","loadUnitsWithActiveTurnoversSuccess","loadUnitsWithActiveTurnoversFailed","resetUnitsWithActiveTurnoversList","loadUnitList","loadUnitListSuccess","loadUnitListFailed","resetUnitList","loadUnit","loadUnitSuccess","loadUnitFailed","clearUnit","updateUnit","updateUnitSuccess","updateUnitFailed","updateUnitDoNotAutoCreateTurns","updateUnitDoNotAutoCreateTurnsSuccess","updateUnitDoNotAutoCreateTurnsFailed","updateUnitDownStatus","updateUnitDownStatusSuccess","updateUnitDownStatusFailed","getRenewalStrategyForUnit","getRenewalStrategyForUnitSuccess","getRenewalStrategyForUnitFailed","setCurrentProperty","setVacancyLossAttrType","setSelectedProperties","loadPortfolioKpisTrend","loadPortfolioKpis","setPortfolioKpis","setPortfolioKpisTrend","loadPortfolioKpisFailed","loadPortfolioKpisTrendFailed","setPortfolioKpisFilter","clearPortfolioKpis","setPortfolioKpiTrendLines","setChartSelectorValue","loadPortfolioKpiWorkflowSteps","setPortfolioKpiWorkflowSteps","loadPortfolioKpisWorkflowStepsFailed","clearPortfolioKpiWorkflowSteps","initPropertySelector","setPropertySelectorSwitchStatus","setSelectedPortfolioId","setPropertySingleMode","setSelectedPropertyIds","setSelectedCollectionIds","setJoinedProperties","setJoinedCollections","setDoNotStore","dashboardsFeatureKey","UPDATE_STORAGE_ACTIONS","_actions_dashboard_actions__WEBPACK_IMPORTED_MODULE_3__","initialState","_main_application_store_reducers_hydration_meta_reducer__WEBPACK_IMPORTED_MODULE_4__","activeTurnoversDetails","activeTurnoversDetailsLoading","activeTurnoversSummary","activeTurnoversSummaryLoading","breadcrumbList","currentPropertyId","dashboardMode","delinquencyByUnit","delinquencyByUnitLoading","delinquencySummary","delinquencySummaryLoading","myProperties","myPropertiesLoading","portfolioItems","portfolioItemsLoading","portfolioUserTaskList","portfolioUserTaskListLoading","kanbanListLoading","kanbanListCount","propertyKpi","propertyKpiLoading","propertyUserTaskList","propertyUserTaskListLoading","userTaskList","userTaskListLoading","myTasks","myTasksLoading","myTasksTicketsCount","myTasksTurnoversCount","staleTurnoversCount","lateTurnoversCount","renewalDetailsCombined","renewalDetailsCombinedLoading","renewalStrategyForUnit","renewalStrategyForUnitLoading","renewalsSummary","renewalsSummaryLoading","unit","unitDetails","unitDetailsByType","unitDetailsByTypeLoading","unitDetailsLoading","unitList","unitListLoading","unitListWithActiveTurnover","unitListWithActiveTurnoverLoading","unitLoading","unitDoNotAutoCreateTurnsLoading","unitsSummaryByProperty","unitsSummaryByPropertyLoading","selectedVacancyLossAttr","_main_application_turnovers_interfaces_vacancy_loss_attr__WEBPACK_IMPORTED_MODULE_1__","selectedVacancyLossThreshold","_main_application_turnovers_interfaces_vacancy_loss_threshold__WEBPACK_IMPORTED_MODULE_2__","selectedVacancyLossThresholdKpiType","_dashboards_models_portfolio_kpi__WEBPACK_IMPORTED_MODULE_0__","selectedVacancyLossThresholdKpiTypePerTurn","selectedProperties","metaDashboardReducers","nextState","localStorage","setItem","_ngrx_store__WEBPACK_IMPORTED_MODULE_5__","tasks","kpi","unitSummary","renewalsDetails","renewalKPI","dashboardViewType","updatedUnit","doNotAutoCreateTurns","unitTypeRentTarget","kpiFeatureKey","_main_application_store_reducers_hydration_meta_reducer__WEBPACK_IMPORTED_MODULE_3__","portfolioKpis","portfolioKpisTrendLoading","portfolioKpisFilter","windowType","_shared_enums_kpi_window_type__WEBPACK_IMPORTED_MODULE_2__","_shared_enums_kpi_type__WEBPACK_IMPORTED_MODULE_1__","portfolioKpisLoading","portfolioKpisTrend","portfolioKpiTrendLines","portfolioKpiTrendLinesLoading","portfolioKpiWorkflowSteps","portfolioKpiWorkflowStepsLoading","chartSelectors","chartSettings","metaDashboardKpiReducers","_ngrx_store__WEBPACK_IMPORTED_MODULE_4__","_dashboards_store_actions_kpi_actions__WEBPACK_IMPORTED_MODULE_0__","selectorId","propertySelectorFeatureKey","dynamicPropertySelectorFeatureKey","PropertySelectorSwitchStatus","PORTFOLIO","_main_application_store_reducers_hydration_meta_reducer__WEBPACK_IMPORTED_MODULE_2__","_main_application_application_menu_property_selector_constants__WEBPACK_IMPORTED_MODULE_1__","propertySelectorSwitchStatus","singleModeEnabled","allPropertiesSelected","allCollectionsSelected","joinProperties","doNotStore","metaPropertySelectorReducers","propertySelectorReducer","_dashboards_store_actions_property_selector_actions__WEBPACK_IMPORTED_MODULE_0__","tenantId","getPropertySelectorFeatureKey","singleMode","selectDashboardsState","_reducers_dashboards_reducer__WEBPACK_IMPORTED_MODULE_0__","selectMyTasks","selectPropertyUserTaskList","dashboardsState","selectPropertyUserTaskListLoading","selectMyTasksLoading","selectMyTasksTurnoversCount","selectStaleTurnoversCount","selectLateTurnoversCount","selectMyTasksTicketsCount","selectUserTaskListLoading","selectKanbanListCount","selectActiveTurnoversDetails","selectPropertyKpiLoading","selectPropertyKpi","selectUnitsSummaryByProperty","selectUnitsSummaryByPropertyLoading","selectUnitDetails","selectDelinquencyByUnit","selectDelinquencyByUnitLoading","selectDelinquencySummary","selectDelinquencySummaryLoading","selectRenewalsSummary","selectRenewalsSummaryLoading","selectUnitDetailsLoading","selectUnitDetailsByType","selectUnitDetailsByTypeLoading","selectCurrentDashboardViewType","selectCurrentDashboardViewTypeSimpleText","simpleText","selectCurrentDashboardViewTypeEnumerationValue","selectMyProperties","selectMyPropertiesLoading","selectSelectedDashboardMode","selectCustomBreadcrumbs","selectUnitListWithActiveTurnover","selectUnitListWithActiveTurnoverLoading","selectUnitList","selectUnitListLoading","selectUnit","selectUnitLoading","selectUnitDoNotAutoCreateTurnsLoading","selectRenewalStrategyForUnit","selectRenewalStrategyForUnitLoading","selectSelectedVacancyLossAttr","selectSelectedProperties","selectDashboardKpisState","_ngrx_store__WEBPACK_IMPORTED_MODULE_2__","_dashboards_store_reducers_kpi_reducer__WEBPACK_IMPORTED_MODULE_0__","selectPortfolioKpis","selectPortfolioKpisTrend","selectPortfolioKpisLoading","selectPortfolioKpisTrendLoading","selectPortfolioKpisFilter","selectPortfolioKpisBasedOnView","_dashboards_store_selectors_property_selector_selectors__WEBPACK_IMPORTED_MODULE_1__","getFilteredKpis","selectPortfolioKpisTrendBasedOnView","selectPortfolioKpiWorkflowSteps","selectChartSelectorValue","selectPropertySelectorState","_dashboards_store_reducers_property_selector_reducer__WEBPACK_IMPORTED_MODULE_0__","selectPropertySelectorSwitchStatus","selectIsAllPropertiesSelected","selectJoinedProperties","selectSelectedCollectionIds","selectPropertySingleMode","selectIsAllCollectionsSelected","getWorkflowStepFromSchedule","inspectionType","_main_application_inspections_models_rest_inspections_model_interface__WEBPACK_IMPORTED_MODULE_0__","InspectionScheduleTypeListConst","rest_inspections_model_interface","disabled","displayValue","InspectionAddDialogComponent","inspectionService","snackbarService","InspectionScheduleType","EventEmitter","inspectionTypeControl","getInspectionFormType","shareReplay","inspectionTemplateId","getWorkflowStepEnumeration","withLatestFrom","selectTenantData","workflowSteps","stepName","toUpperCase","selectUserPermissionLevel","take","permissios","userPermissions","Set","allPermissions","dynamicInspectionsAdd","repeatingInspectionsAdd","residentInspectionsAdd","standardInspectionAdd","hasPermissionToAddDynamic","has","hasPermissionToAddRepeating","hasPermissionToAddResident","hasPermissionToAddStandard","onGetInspectionType","inspectionFormat","checkTurnsPackage","cancel","save","creating","saveAction","emit","formPosted","isDynamic","isStandart","isResindent","isRepeating","useVerifyCreatedInspection","inspection","bulkUnitIds","handleResult","useFetchOneTime$","fetchOneTimeInspectionList$","GeneratingInspectionsDuration","setTimeout","setNewlyAddedInspection","navigate","then","closeModal","inspectionTypeChanged","$event","emitEvent","error","getInspectionTypeStr","formChanged","formDefaults","selectWorkflowStepsEnumeration","FILTER_PERIOD_RECORD","sevenDays","thirtyDays","threeMonths","sixMonths","year","allTime","thisWeek","thisMonth","nextTwoWeeks","thisQuarter","thisYear","custom","SELECT_FILTER_PERIOD_CONFIG","_main_application_inspections_components_inspections_list_constants__WEBPACK_IMPORTED_MODULE_0__","INSPECTION_SUMMARY_SHOW_BY__ENUM","SELECT_FILTER_SHOW_BY_CONFIG","ASSIGNEE","TYPE","INSPECTION_SUMMARY_GROUP_BY__ENUM","SELECT_FILTER_GROUP_BY_CONFIG","NONE","PROPERTY","INSPECTION_SUMMARY_ACTION__ENUM","SELECT_FILTER_ACTION_CONFIG","DRILL_DOWN","OPEN_IN_NEW_TAB","INSPECTION_SUMMARY_ERROR","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_1__","errorWrong","errorNoData","Unassigned","System","InspectionsListConstants","TimeFrame","IncludeArchived","Week","Month","Month_3","Month_6","Year","ThisWeek","NextTwoWeeks","ThisMonth","ThisQuarter","ThisYear","AllTime","Custom","Yes","No","Standard","ASSIGNEE_FILTER_DIVIDER_POSITION","SelectPortfolioDialogComponent","inject","FormBuilder","Store","selectPortfolios","control","isFormValid","portfolioIdControl","onSelectPortfolio","onSelected","i1","i4","A11yModule","InspectionsType","InspectionTabStorageKeys","User","Dynamic","Repeating","Resident","InReview","InspectionsListComponent","dialog","actions$","unitNonPmsService","getCurrentDateOnly","enumToSource","InspectionStatus","InspectionsHeaderViewEnum","initTemplates","initTemplatesWithParentInspectionId","initTemplatesWithDynamicInspectionId","initRecurenceOptions","getRepeatingInspectionsIds","getDynamicInspectionsIds","getSortedUsers","BehaviorSubject","onResize","calculateMaxHeight","filterStorageKey","inspectionsType","INSPECTION_LIST_USER_FILTER","isUserResidentPage","startDateControl","formGroup","endDateControl","ngOnDestroy","dismiss","urlSegments","segment","path","excludedFromFilterCounter","getExcludedFromFilterCounter","initFormGroup","getRawValue","sectionsExpandState","isResident$","patchValue","parentInspectionId","dynamicInspectionId","timeframe","includeArchived","savedFilterState","getStorageItem","Date","setInspectionsFilter","setFilters","setInReviewInspectionsFilter","setRepeatingInspectionsFilter","loadAllUserTemplates","useLoadUsers","initFormGroupListener","ofType","sectionsExpand","clearFilter","unitOrAssignee","assigneeId","templateIds","recurrencePeriod","relativeTo","queryParamsHandling","setPortfolioId","doNotStoreParams","RouteData","inspectionView","updateRouteAndState","InspectionViewEnum","changedInspectionsViewType","inspectionsViewType$","debounceSafe$","patchForm","isCustomPeriod","_currentDate","subtract","startOf","endOf","updateFilters","portfolioId$","summaryStatsFiltersApplied","summaryModalPending$","updateFiltersFromSummaryReport","groupByPropertyId","String","updateRouterParam","isShowCustomPeriod$","customPeriod$","currentParams","currentFragment","fragment","replaceUrl","updateSummaryFiltersFromList","summaryFiltersFromListConfig$","appliedSummaryFilters","periodId","toISOString","setStorageItem","getTypesResident","getTypesBase","userGroupTypes","keepTimeFrame","get","clearSearchControl","addInspection","editInspectionOpened","width","height","enterAnimationDuration","panelClass","open","componentInstance","Boolean","of","toggleSection","window","dispatchEvent","Event","addNonPmsUnit","DefaultModalConfigConstant","unitInfo","isUnitAdding$","unitId","success","finalize","selectTemplates","array","indexOf","selectRepeatingInspectionsLoading","selectRepeatingInspections","loading","inspections","_","filtered","seen","match","GetRecurrencePeriodTypeList","dueDate","opt","InspectionRecurrencePeriod","replace","selectInspections","selectInReviewInspections","inspectionList","inReviewInspectionList","templates","uniqueParentIds","template","t","templateName","property","uniqueDynamicIds","sortedList","getSortedUserItems","currentUserIndex","currentUser","currentLabelMe","inspectionCountMap","Map","dynamicId","set","from","count","filterPanelEmpty","screenHeight","innerHeight","topContentHeight","maxHeight","itemHeight","floor","view","updateInspectionsViewModeInStorage","inspectionsView","onOpenFilter","openFilter","onOpenDropdown","openDropdown","onFilterPaneChange","inspections_list_component_decorate","IsVideoDirective","templateRef","vcr","appIsVideo","show","checkIfVideo","displayTemplate","clear","createEmbeddedView","appIsVideoElse","extension","getFileExtension","file_extensions_const","cloudUri","PhotoViewerComponent","interfaces","modals_service","currentUrl","imageUrls","initialIndex","onChange","mediaUrl","onEscapeKeyDown","event","deletedImages","confirmDeletionDialog","cancelLabel","confirmLabel","useCloseParentDialog","dialog_result_enum","useCloseTargetDialog","merge","deleteImage","isFile","endsWith","isImage","pop","openInNewTab","downloadFile","download","click","SendInspectionComponent","inputErrorService","inspectionTitle","_shared_enums_button_type__WEBPACK_IMPORTED_MODULE_0__","to","_angular_forms__WEBPACK_IMPORTED_MODULE_3__","_ui_components_validators_email_validator__WEBPACK_IMPORTED_MODULE_4__","subject","isSubmitted","errors","toArray","flatMap","reduce","acc","cur","strErrors","entries","errorParams","getValidationMessage","_angular_material_dialog__WEBPACK_IMPORTED_MODULE_6__","InspectionStepModel","page","tickets","areaName","areaId","surveyPageId","noteElms","elements","elm","fileElms","stateElms","quantityElms","hoursElms","questionsElms","questions","qElm","def","defaultValue","notesCount","fileUploadCount","propertyStateCount","imagesCount","mainImage","note","files","propertyState","items","elementItem","emojiCode","emoji","isNaN","fromCodePoint","emojiName","text","showQtyWidget","quantity","onSelect","parseInt","minutes","hours","padStart","getDefaultEmojiCode","isCustomStep","flagsCount","InspectionAreaModel","answer","extensions","answerJSON","inspectionTemplateAreaTitle","sharedInspectionLibrarySpaceTitle","pages","idx","stepsCount","completedStepsCount","isCompleted","isSkipped","InspectionBaseUrlParamsKeys","backInspectionUrl","backInspectionSummaryUrl","InspectionModel","entityDetails","inspectionTemplate","humanize_pipe","isBulk","resultScore","scoringModel","propertyName","inspectionContents","areas","inspectionContentId","allSteps","area","summary","curStep","completedOrSkippedAreasCount","completedRooms","areasCount","totalRooms","isArchived","reviewRequiredByUserId","reviewer","completedByUser","completedBy","LIST","INSPECTIONS_VIEWS","NEW_INSPECTIONS","ScoringModels","ScoreWeightModes","DynamicSchedule","DynamicPropertyType","InspectionItemStatus","InspectionType","PropertyInspectionType","ReviewRequiredPolicy","TemplateManagerService","restApiService","templatesCacheService","getGlobalTemplates","getViewedTemplates","markTemplatesAsViewed","markAsNew","templateId","getTemplate","installTemplate","removeTemplate","rxjs_operators__WEBPACK_IMPORTED_MODULE_4__","err","ErrorCode","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_0__","rxjs__WEBPACK_IMPORTED_MODULE_5__","rxjs_operators__WEBPACK_IMPORTED_MODULE_6__","promoteTemplateToGlobal","updatePostNonCompletedInstances","cloneTemplate","resetTemplatesCache","cloneGlobalTemplate","_angular_core__WEBPACK_IMPORTED_MODULE_7__","loadAllUserTemplatesSuccess","loadAllUserTemplatesFailed","createTemplateDetails","updateTemplateDetails","updateTemplateDetailsFailed","deleteTemplate","clearTemplateData","removeAreaFromTemplate","loadAllUnitTypes","loadAllUnitTypesSuccess","loadAllUnitTypesFailed","addInspectionSurveyTemplate","updateInspectionSurveyTemplate","saveInspectionSurveyTemplateSuccess","templateFeatureKey","listItemsLoading","entityUpdateOngoing","deleteEntityOngoing","templateAreaUpdateOngoing","templateAreaRemoveOngoing","templateAreaUpdateStatus","_template_store_template_actions__WEBPACK_IMPORTED_MODULE_1__","listItems","unitTypes","selectTemplateState","_template_reducer__WEBPACK_IMPORTED_MODULE_0__","templateState","selectAvailableTemplates","isAvailable","isScheduledForDeletion","selectTemplatesLoading","selectTemplateUpdate","selectTemplateAreaUpdateOngoing","selectTemplateAreaDeleteOngoing","selectUnitTypes","InspectionService","InspectionService_1","matDialog","fileUploadService","Subject","survey","_currentSurvey","TimezoneEntityHelper","returnStandardAndResidentBoth","fixTimezoneForRestInspectionsModelList","inReviewList","repeating","updateCalendarView","inspectionModel","calendarPosition","updateInspectionComment","inspectionId","contentId","pageIndex","newComment","create","extendExpiration","reqData","regenerate","getById","getBeUnitId","openSendDialog","minWidth","sendRequest","sendReport","SnackbarErrorMessage","request","onRegenerate","regenerateAction","catchError","snackbarLoadingSpinner$","info","doCheckReportIsReady","attachments","attachment","autoScopeReport","inspectionAttachmentType","autoScopeInspectionAttachmentType","downloadOptions$","notifyAgainWithParams","payload","onDownloadInspection","fileUploadId","resetSnackbarActions","deleteInspection","noConfirm","deleteFn","DialogResult","mergeMap","tableSortPredicate","sortHeaderId","toLocaleLowerCase","isTurboMode","assigneeUser","displayName","createdAt","completedAt","autoExpiredOn","sortByPrimaryKeyAndUnit","slice","active","direction","primaryA","primaryB","primaryCompare","compareValues","sortByPrimaryKey","share","evt","preventDefault","createTicket","updateTicket","getTicketsForInspection","getResidentInspections","getSummaryStats","markAsCompleted","residentSigned","residentSignName","archiveInspection","unArchiveInspection","inspectionDelegate","model","finishReview","initializeSubmissionQueue","queueInitialized","submissionQueue$","concatMap","submitAnswers","queueSubmitAnswers","notifyAgain","onDownloadInspectionSummary","downloadWithPost","updateAppointment","getAppointmentHours","date","today","appointments","getFullYear","getMonth","getDate","hour","appointmentDate","loadAllInspections","loadAllInspectionsSuccess","loadAllInspectionsFailed","clearAllInspections","clearInspectionsData","loadResidentInspections","loadResidentInspectionsSuccess","loadResidentInspectionsFailed","loadTemplatesForUnitSuccess","loadTemplatesForUnitFailed","clearNewlyAddedInspectionId","loadDynamicInspections","loadDynamicInspectionsSuccess","loadDynamicInspectionsFailed","clearDynamicInspections","deleteDynamicInspection","deleteDynamicInspectionSuccess","deleteDynamicInspectionFailed","loadRepeatingInspections","loadRepeatingInspectionsSuccess","loadRepeatingInspectionsFailed","clearRepeatingInspections","addInspectionTicket","addInspectionTicketSuccess","addInspectionTicketFailed","updateInspectionTicket","updateInspectionTicketSuccess","updateInspectionTicketFailed","loadInspectionSummaryReport","loadInspectionSummaryReportSucceeded","loadInspectionSummaryReportFailed","setSummaryReportAppliedFilter","loadInReviewInspections","loadInReviewInspectionsSuccess","loadInReviewInspectionsFailed","clearInReviewInspections","inspectionsFeatureKey","inspectionFilter","inReviewInspectionFilter","repeatingInspectionFilter","isLoaded","inReviewListItems","residentListItemsLoading","inReviewListItemsLoading","dynamicListItemsLoading","summaryStats","summaryStatsAppliedFilters","summaryReportDataLoading","_inspections_actions__WEBPACK_IMPORTED_MODULE_2__","residentListItems","dynamicListItems","repeatingListItemsLoading","repeatingListItems","templatesForUnit","newlyAddedItemId","_main_application_inspections_utils_inspection_mappers__WEBPACK_IMPORTED_MODULE_1__","appliedFilters","selectInspectionState","_inspections_reducer__WEBPACK_IMPORTED_MODULE_0__","inspectionState","selectInspectionsLoading","selectResidentInspections","selectDynamicInspections","selectResidentInspectionsLoading","selectDynamicInspectionsLoading","selectInspectionFilter","selectInspectionsSummaryReport","selectInspectionsSummaryReportAppliedFilter","selectInspectionsSummaryReportLoading","selectInReviewInspectionFilter","selectInReviewInspectionsLoading","selectRepeatingInspectionFilter","DynamicInspectionModel","portfolios","assigneeUserName","assigneeUserTooltip","dynamicallyScheduledOn","propertyType","p","propertyOrPortfolioId","due","buildDueString","notify","createOrNotifyOn","notifyWhenDoneIds","notifyWhenDoneUserIds","notifyWhenDone","lodash","u","actualAssigneeId","portfolioName","days","abs","InspectionListItemModel","inspection_model","mapInspectionsDataSource","templateList","usersMap","mapDynamicInspectionsDataSource","getInspectionsSummaryFiltersKey","isAsc","valueA","valueB","getCompaniesList","getCompaniesListSuccess","getCompaniesListFailed","addCompany","addCompanySuccess","addCompanyFailed","addCompanyWithOwner","addCompanyWithOwnerSuccess","addCompanyWithOwnerFailure","addCompanyWithOwnerFailureUserExist","getCompany","getCompanySuccess","getCompanyFailed","clearCompany","updateCompany","updateCompanySuccess","updateCompanyFailed","deleteCompany","deleteCompanySuccess","deleteCompanyFailed","addEmployeeToCompany","addEmployeeToCompanySuccess","addEmployeeToCompanyFailed","deleteEmployeeFromCompany","deleteEmployeeFromCompanySuccess","deleteEmployeeFromCompanyFailed","getContractorList","getContractorListSuccess","getContractorListFailed","addAddressToCompany","addAddressToCompanySuccess","addAddressToCompanyFailed","updateAddressInCompany","updateAddressInCompanySuccess","updateAddressInCompanyFailed","companiesFeatureKey","companyList","companyListLoading","companyAddLoading","companyModel","companyModelLoading","addEmployeeToCompanyLoading","deleteEmployeeFromCompanyLoading","contractors","contractorsLoading","companyUpdateLoading","companyDeleteLoading","updateAddressInProgress","addCompanyWithOwnerInProgress","_companies_actions__WEBPACK_IMPORTED_MODULE_0__","skipLoading","selectCompaniesState","_companies_reducer__WEBPACK_IMPORTED_MODULE_0__","selectCompanyList","companiesState","selectCompanyListLoading","selectCompany","selectCompanyLoading","selectUpdateAddressInProgress","selectCompanyUpdateLoading","selectContractors","selectAddCompanyWithOwnerLoading","loadAllUserPortfolios","loadAllUserPortfoliosSuccess","loadAllUserPortfoliosFailed","loadAllUserCollections","loadAllUserCollectionsSuccess","loadAllUserCollectionsFailed","loadPortfolioDetails","loadPortfolioDetailsSuccess","loadPortfolioDetailsFailed","loadPropertyDetails","loadPropertyDetailsSuccess","loadPropertyDetailsFailed","updatePortfolioName","updatePortfolioAutoAdd","updatePortfolioDetails","updatePortfolioDetailsSuccess","updatePortfolioDetailsFailed","addPropertyToPortfolio","removePropertyFromPortfolio","createNewPortfolio","deletePortfolio","clearPortfolioData","loadPropertyManagers","loadPropertyManagersSucceeded","loadPropertyManagersFailed","updateProperty","updatePropertyFailed","loadAllUserUnassignedProperties","loadAllUserUnassignedPropertiesSucceeded","loadAllUserUnassignedPropertiesFailed","loadPropertyManagersForProperty","loadPropertyManagersForPropertySuccess","loadPropertyManagersForPropertyFailed","removePropertyManagers","removePropertyManagersSuccess","removePropertyManagersFailed","setPropertyManagers","setPropertyManagersSuccess","setPropertyManagersFailed","changePropertyManagers","getPropertyUnits","changePropertyManagersSuccess","changePropertyManagersFailed","getPropertyUnitsSuccess","getPropertyUnitsFailed","getUnitAttachments","getUnitAttachmentsSuccess","getUnitAttachmentsFail","setUnitAttachment","setUnitAttachmentSuccess","setUnitAttachmentFail","deleteUnitAttachment","deleteUnitAttachmentSuccess","deleteUnitAttachmentFailed","deleteFileFromRepository","deleteFileFromRepositorySuccess","deleteFileFromRepositoryFailed","loadPropertyCollections","loadPropertyCollectionsSuccess","loadPropertyCollectionsFailed","addPropertyCollection","addPropertyCollectionSuccess","addPropertyCollectionError","deletePropertyCollection","deletePropertyCollectionSuccess","deletePropertyCollectionError","savePropertyCollection","savePropertyCollectionSuccess","savePropertyCollectionError","addPropertiesToCollection","addPropertiesToCollectionSuccess","addPropertiesToCollectionError","removePropertiesFromCollection","removePropertiesFromCollectionSuccess","removePropertiesFromCollectionError","addUsersToCollection","addUsersToCollectionSuccess","removeUsersFromCollection","removeUsersFromCollectionSuccess","removeUsersFromCollectionError","addUsersToCollectionError","clearPropertyData","portfolioFeatureKey","propertyManagersForPropertyLoading","allPropertyManagersLoading","unitAttachmentsLoading","deleteUnitAttachmentInProgress","deleteUnitAttachmentStatus","_portfolio_actions__WEBPACK_IMPORTED_MODULE_2__","deletePortfolioOngoing","portfolioDetailsLoading","portfolioUpdateOngoing","portfolioNewPropertyUpdateOngoing","portfolioRemovePropertyUpdateOngoing","portfolioDetails","propertyDetailsLoading","propertyDetails","propertyDetailsUpdateOngoing","_main_application_store_actions_user_actions__WEBPACK_IMPORTED_MODULE_0__","userPropertiesLoading","unassignedPropertiesLoading","unassignedProperties","allPropertyManagers","propertyManagers","propertyManagersForProperty","unitAttachments","propertyUnitsLoading","propertyUnits","setUnitAttachmentInProgress","_shared_enums_update_status__WEBPACK_IMPORTED_MODULE_1__","propertyCollectionsLoading","propertyCollections","collection","existingCollection","propertyCollectionDeleteInProgress","collectionItemsLoading","collectionItems","selectPortfolioState","_portfolio_reducer__WEBPACK_IMPORTED_MODULE_0__","portfolioState","selectPortfoliosLoading","selectPortfolioDetails","selectPortfolioDetailsLoading","selectPropertyDetails","selectPropertyDetailsLoading","selectPropertyDetailsUpdateOngoing","portfolioSelectAllPropertyIds","selectPropertiesByPortfolioId","selectPropertiesLoading","selectPortfolioUpdate","selectPortfolioNewPropertyUpdateOngoing","selectPortfolioRemovePropertyUpdateOngoing","selectPortfolioDeleteOngoing","selectUnassignedProperties","selectUnassignedPropertiesLoading","selectPropertyManagersForProperty","selectPropertyUnits","selectPropertyUnitsLoading","selectUnitAttachments","selectDeleteUnitAttachmentInProgress","selectPropertyCollections","selectPropertyCollectionsLoading","selectPropertyCollectionsDeleteInProgress","selectCollectionById","selectUserCollections","TimezoneService","_app_utils_pu_subscribe__WEBPACK_IMPORTED_MODULE_0__","currentTimezone","asObservable","rxjs__WEBPACK_IMPORTED_MODULE_4__","wasInitilized","currentTimezoneValue","toDateString","_timezone_helper__WEBPACK_IMPORTED_MODULE_1__","addTimezoneForEntity","f","rxjs__WEBPACK_IMPORTED_MODULE_6__","currentTimezone$","rxjs__WEBPACK_IMPORTED_MODULE_7__","_angular_core__WEBPACK_IMPORTED_MODULE_8__","TimezoneEntityHelperCommon","dateString","test","vanilaDates","nestedObjects","dataWithoutTimezone","field","some","timezone_helper","_a","isStringLikeServerDate","fixTimezoneForModelToServer","fixTimezoneForModelToClient","_b","Reflect","call","dt","timezone_entity_helper_a","fixTimezoneForArchivedTurnoverDataModel","tz","fixTimezoneForTurnStepScheduleModelToClient","fixTimezoneForTurnStepScheduleModelToServer","fVanila","fFullDate","fModel","turnoverStartDate","turnoverEndDate","TimezoneHelper","convertedDate","getTimezoneOffset","correctedDate","newTimezone","oldTimezone","newTimezoneOffset","oldTimezoneOffset","getUiTimezoneOffset","replaceTimezone","moment__WEBPACK_IMPORTED_MODULE_0__","uiName","utcOffset","TurnoverConfigurationStepAssigneesService","getDefaultAssigneesForPortfolio","updateDefaultAssigneesForPortfolio","deleteDefaultAssigneesForPortfolio","stepId","getResponsiblePartiesByPortfolioId","getResponsiblePartiesOverrideByPortfolioId","getResponsiblePartiesByPropertyId","getWorkflowAssignmentsByStepId","createResponsibleParties","workflowList","updateResponsibleParties","deleteResponsibleParties","workflowStepType","uri","_angular_core__WEBPACK_IMPORTED_MODULE_1__","getTurnoverConfigurationList","getTurnoverConfigurationListSuccess","getTurnoverConfigurationListFailure","getTurnoverConfigurationByWorkflowStep","getTurnoverConfigurationByWorkflowStepSuccess","getTurnoverConfigurationByWorkflowStepFailure","updateTurnoverFieldConfiguration","updateTurnoverFieldConfigurationSuccess","updateTurnoverFieldConfigurationFailure","getElapsedDaysThresholds","getElapsedDaysThresholdsSuccess","getElapsedDaysThresholdsFailure","updateElapsedDaysThresholds","updateElapsedDaysThresholdsSuccess","updateElapsedDaysThresholdsFailure","loadFinish","loadFinishSucceded","loadFinishFailed","addFinish","addFinishSuccess","addFinishFailure","updateFinish","updateFinishSuccess","updateFinishFailure","deleteFinish","deleteFinishSuccess","deleteFinishFailure","turnoverConfigurationFeatureKey","turnoverConfig","turnoverConfigLoading","turnoverConfigUpdateInProgress","turnoverStepConfigLoading","turnoverStepConfig","thresholdsConfiguration","thresholdsConfigurationLoading","thresholdsConfigurationUpdate","thresholdsConfigurationUpdateInProgress","finishTypes","finishInProgress","_actions_turnover_configuration_actions__WEBPACK_IMPORTED_MODULE_1__","selectTurnoverConfigurationState","_reducers__WEBPACK_IMPORTED_MODULE_0__","selectTurnoverStepConfigLoading","selectTurnoverConfigLoading","turnoverConfigState","selectTurnoverConfigUpdateInProgress","selectTurnoverStepConfig","selectThresholdsConfigurationLoading","selectThresholdsConfiguration","selectFinishes","selectFinishInProgress","ResidentInspectionsService","generateAnswer","itemUuid","updatedSurvey","surveyJSON","updatedItem","matchingPage","uuid","element","elementIndex","comment","updatedBoolean","booleanQuestions","q","guid","emojiDetails","updatedEmoji","matchingItem","itemWrapper","isDefault","fileUploadIds","generateDefaultAnswer","defaultSurvey","defaultItem","defaultAnswer","matchingEmojiSet","getCompletedItem","hasValidValue","chosenEmoji","allBooleanQuestionsAnswered","every","emojiRequiresPhoto","emojiRequiresComment","photoRequired","commentRequired","hasValidFileUploads","hasValidComment","trim","hasAnything","isNotReadyToSubmitItem","hasValue","hasAnswers","hasPhotos","hasComment","generateItemSpecificKey","itemId","_shared_enums_local_storage_data_enum__WEBPACK_IMPORTED_MODULE_0__","CommonInMemoryUpdatingService","updateFunction","rxjs__WEBPACK_IMPORTED_MODULE_1__","updatedList","getForceServerReloadList","filterParams","rxjs__WEBPACK_IMPORTED_MODULE_2__","listCopy","CustomWeightModalComponent","onCancel","onSave","customWeight","onKeydown","_angular_core__WEBPACK_IMPORTED_MODULE_2__","_angular_material_dialog__WEBPACK_IMPORTED_MODULE_3__","_angular_forms__WEBPACK_IMPORTED_MODULE_4__","_ui_components_controls_number_input_number_input_component__WEBPACK_IMPORTED_MODULE_1__","_angular_material_button__WEBPACK_IMPORTED_MODULE_6__","ctx_r30","ctx_r31","ctx_r33","TemplateEditorAreaComponent","TemplateEditorBase","fb","templateEditorDialogService","subjectsService","scoringModelsService","dndExpandableService","sparePartsService","cdk","scrollSpeed","TemplateEditorDefaultValue","RepeatableArea","getSparePartsGroups","scoreWeightMode","scoreWeight","TemplateEditorInstructionsDefaultValue","_areaSubject$","areaSurvey","sparePartsGroups","areaSparePartsGroups","sparePartsGroups$","groups","isActive","_area","isParentless","useUpdateInstructions","pageType","expandWorker","WrapperExpandWorker","AreaExpandWorker","init","inspectionTemplateAreas","currentScoreWeight","scoringParametersForm","scoreWeightItems","updatedScoreWeightItems","previousValue","debounceTime","fields","areaChange","addCustomWeight","combinedWeights$","customWeights","combinedWeights","getCombinedWeights","scoringModel$","parsedSurvey","showInstructions","instructions","ngAfterViewInit","_handles","_results","handle","changes","ngOnChanges","emitAreaSave","currentValue","leaveInstructionsEditMode","checkEditRight","getNextNumberItemName","AreaHelper","emitItemsChange","areaItems","enterEditMode","__ngContext__","native","scrollIfOutOfDialog","getUpdatedAreaModel","trackBy","_index","dropDnd","endDnd","container","previousContainer","transferArrayItem","previousIndex","currentIndex","moveItemInArray","startDnd","editMode","focusItem","div","nativeElement","range","createRange","selectNodeContents","sel","getSelection","removeAllRanges","addRange","nameChanged","handleMaxLimitContentEditable","TemplateMaxAreaAndItemLength","blur","enterPressed","stopPropagation","isScoringParametersExist","leaveEditMode","textContent","leaveFocus","focus","toggleRepeatable","repeatableChange","matMenuTrigger","closeMenu","removeClick","onSaveArea","cloneClick","clone","removeItem","cloneItem","itemChange","addRatingGroup","addQuestion","focusQuestion","enterPressedHandler","itemInner","initFinished","isEditable","scoreWeightChange","selectedScoreWeight","toggleInstructions","enterInstructionsEditMode","instructionsEditMode","focusedAreaId","setFocusedItem","focusedItemId","handleClickSparePartGroupItem","shiftKey","useSetOrUnsetSparePartsGroupsArea","toggleExpand","templatesFocusOutEditor$","CDK_DRAG_PARENT","ElementRef","CdkDragHandle","MatMenuTrigger","TemplateEditorDialogItemComponent","TemplateEditorDialogAnimationComponent","animatedEmojiService","ngZone","animationItem","_animationItem","initialized","updateConfig","assetRelativeUrl","_assetRelativeUrl","autoplay","_autoplay","animationItemCreated","play","stop","options","getConfig","_this2","emojis","getEmojiContent","animationData","loadEmoji","getConfigPath","loop","animationCreated","runOutsideAngular","ctx_r17","ctx_r22","templateEditorService","packageService","pluralizationPipe","getRatingGroups","timeCost","materials","laborCost","isInspectionProPackageEnabled","_itemSubject$","areaItem","_sparePartsGroups$","isUseSameForParentSparePartsButtonActive","groupId","hierarchyPath","_item","isSparePartsGroupButtonActive","isDoNotUseSparePartsButtonActive","isCustomListSparePartsButtonActive","getAlivableConditions","ratingGroup","isAllConditionsSelected","isShowInstructions","compulsoryItems","parentlessClass","timeAndMaterialForm","checkInspectionProPackageAndNotify$","packageEnabled","grandParent","ItemExpandWorker","emitItemSave","isTAndMExist","checkPackageAvailable","PackageType","checkPackageTrialDaysLeft","packageAvailable","trial","trialState","isDef","question","ratingGroupChange","commentNotCompulsory","photoNotCompulsory","updateRatingGroup","questionChange","questionRemove","itemName","removeRatingGroup","toggleTimeAndMaterial","toggleCommentRequired","togglePhotoRequired","ratingGroupAdd","questionAdd","toggleCompulsory","compulsoryItem","newCompulsoryState","emojiElement","itemIndex","emojiIndex","handleClickUseSameForParent","isEmpty","getParentPartGroup","overrideSparePartsSettings","showSpareParts","handleClickNotUseSpareParts","handleClickSparePart","getNewParts","useSetOrUnsetSparePartsGroupItem","handleToogleAllSpareParts","isShowAll","getNewRatingGrouop","getConditionWithParts","hasEditRight$","_main_application_store_selectors_user_selectors__WEBPACK_IMPORTED_MODULE_1__","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_6__","rxjs_operators__WEBPACK_IMPORTED_MODULE_7__","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_3__","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_2__","hasRight","hasEditRight","warning","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_4__","_angular_core__WEBPACK_IMPORTED_MODULE_10__","TemplateEditorContent","position","jsonToAreaSurveyModel","areaSurveyJson","getClonedArea","maxCloneIndex","RegExp","matches","exec","prev","rest","area_helper","addArea","newArea","replaceTempAreaWithRestArea","restArea","removeArea","v4","_c","_d","timeMultiplier","_e","materialsMultiplier","updateArea","innerItem","TEMPLATE_RELOAD_ACTION","TemplateEditorDialogComponent","templateManagerService","expandDurationMs","standardWeights","otherWeights","inspectionTemplateContent","isScoringEnabled","isWelcomeInstructionsEnabled","isWelcomeInstructionsDisabled","onGetTemplate","dndAreaEvent$","fixDndCache","areasDropListGroup","_dropListRef","expandDuration","backdropClick","keydownEvents","snackBarActions$","isLoading$","onScoringModelChange","newModel","setScoringModel","highLightHeader","header","isGlobal","initTemplate","openInfoModal","buttonText","scoringForm","scoringChange","welcomeInstructionsText","instructionsText","startDisplayInChunks","initScoringWeights","uploadingXls","displayNextChunk","displayInterval","setInterval","chunkIndex","chunkLength","clearInterval","start","end","nextChunk","displayedAreas","itemFocused$","getInitialAreaData","addInternal","props","clonedArea","tempId","getElementById","updateAreasPosition","responses","inspectionItems","selectedItem","viewportZoneChanging","shouldBathroomRepeatable","shouldBedroomRepeatable","shouldHalfBathroomRepeatable","shouldAnyBathroomRepeatable","shouldPostCompleteSurveyRepeatable","indexBathroom","additionalBathroomInspectionTemplateAreaIds","indexBedroom","additionalBedroomInspectionTemplateAreaIds","indexHalfBathroom","additionalHalfBathRoomInspectionTemplateAreaIds","indexAnyBathroom","additionalAnyBathRoomInspectionTemplateAreaIds","indexdPostCompleteSurvey","postCompleteSurveyInspectionTemplateAreaIds","doCheck","indexRepeatable","shouldRepeatable","editTemplate","closeDialog","setFocusedAreaId","setFocusedItemId","openRemovalTemplateModal","headerChange","updateCurrentTemplate","descriptionChange","description","residentSignatureChange","residentSignatureRequired","pmSignatureChange","hidePropertyManagerSignature","showDefaultAnswersChange","showDefaultAnswersInTheReport","welcomeInstructionsChange","inspectionScoringChange","selectedScoringModel","editCustomInspectionTemplate","inspectionName","isRequired","customInspectionIsRequired","welcomeInstructionsFocused","emitAreaSave$","emitItemSave$","onMatDialogScroll","downloadInProgress$","downloadTemplateFile","URL","createObjectURL","Blob","appendChild","revokeObjectURL","uploadFile","fileUploader","fileChange","uploadInProgress$","file","target","uploadTemplateFile","message","welcomeInstructionsEditMode","getValue","TemplateEditorDialogHeaderComponent","_main_application_shared_template_editor_dialog_components_template_editor_dialog_template_editor_base_template_editor_base_component__WEBPACK_IMPORTED_MODULE_0__","headerName","_main_application_shared_template_editor_dialog_models_template_editor_model__WEBPACK_IMPORTED_MODULE_1__","headerChanged","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_9__","quantityItem","hoursItem","isParentlessExist","_shared_functions_get_next_number_item_name__WEBPACK_IMPORTED_MODULE_1__","uuid__WEBPACK_IMPORTED_MODULE_2__","areaTitle","newItem","getClonedItem","newRatingElement","ratingGroupId","addNewElementToItem","newQuestionAreaPageElementModel","foundItem","fileElementIndex","commentElementIndex","minIndex","updateItem","showHoursWidget","ticketRequired","sparePartsSelectionRequired","shouldHaveQuantity","shouldHaveHours","quantityIndex","hoursIndex","checkIfElementVisible","scrollIntoView","behavior","block","inline","extraHeightSpace","matDialogElement","parentElement","tagName","rect","getBoundingClientRect","dialogRect","bottom","top","isParentlesss","pageTitle","forNewTemplate","logoPosition","uuid__WEBPACK_IMPORTED_MODULE_1__","_area_helper__WEBPACK_IMPORTED_MODULE_0__","divElement","limit","keyCode","substring","setStart","setEnd","TemplateMaxDescriptionLength","AnimatedEmojiService","http","_emojiContent","emojiContent","preCacheAllEmoji","assetPath","CACHE","DndExpandableService","rxjs__WEBPACK_IMPORTED_MODULE_0__","_dndEvent","areaLevel","expandAllEvent","dropListRef","_siblings","dropList","nodes","style","_cacheParentPositions","_sortStrategy","_activeDraggables","_cacheItemPositions","CommonExpandWorker","_isExpanded","isContentVisible","itemsAmount","parentAreaId","component","_parentAreaId","_itemsAmount","getDndEvent","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_0__","isExpandedState","getExpandEvent","singleExpandClick","toggleExpandAll","expandAreaEvent$","dndItemEvent$","expandItemEvent$","ScoringModelsService","scoringModelSubject","customWeightsSubject","allWeights","SparePartsService","isEmptyParent","isEmptyTarget","isParentSelected","isTargetSelected","useHelperSetter","useCopySparePartsGroupsArea","getAreaSurvey","getPages","getPageSparePartsGroupsItem","getNewPages","getShowSpareParts","getOverrideSparePartsSettings","getPageOverrideSparePartsSettings","getTransformedPage","TemplateEditorDialogService","_app_utils_pu_subscribe__WEBPACK_IMPORTED_MODULE_1__","simpleService","surveysService","_templatesLoading","_templateDeleting","_templateCreating","_questionIdFocused","_itemFocused","_angular_core__WEBPACK_IMPORTED_MODULE_11__","openTemplateEditorModal","_main_application_shared_template_editor_dialog_components_template_editor_dialog_template_editor_dialog_component__WEBPACK_IMPORTED_MODULE_2__","disableClose","autoFocus","getTemplates","preserveInspectionId","cache","getTemplatesCache","rxjs_operators__WEBPACK_IMPORTED_MODULE_13__","updateTemplatesCache","rxjs_operators__WEBPACK_IMPORTED_MODULE_14__","isDeleted","rxjs__WEBPACK_IMPORTED_MODULE_15__","handleError","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_3__","getRatingGroupsInternal","ratingGroups","itemsJson","_ratingGroups","prepareSparePartsGroupsViewInternal","sourceData","hashByParentId","obj","parentGroupId","dataToProcess","counter","getSparePartsGroupsInternal","sparePartGroups","_sparePartsGroups","rxjs__WEBPACK_IMPORTED_MODULE_17__","rxjs__WEBPACK_IMPORTED_MODULE_18__","restRatingGroup","reloadAction","serverRequest","rxjs__WEBPACK_IMPORTED_MODULE_19__","delay","handleTemplateError","rxjs__WEBPACK_IMPORTED_MODULE_20__","rxjs__WEBPACK_IMPORTED_MODULE_21__","areaSurveyToSave","updatedArea","serverCalls","shouldBeUpdated","rxjs__WEBPACK_IMPORTED_MODULE_22__","titleCss","addCustomInspectionTemplateWithPredefinedItems","rxjs__WEBPACK_IMPORTED_MODULE_23__","_models_share_methods_function__WEBPACK_IMPORTED_MODULE_4__","_areaId","upload","TemplatesCacheService","_templatesCache","placeholders","TemplateEditorDialogQuestionComponent","placeholder","questionItem","_questionItem","initQuestion","isViewInited","questionIdFocused$","inputElement","preventScroll","setQuestionValue","questionTitleElement","questionWidth","offsetWidth","toggleDefaultValue","questionItemChange","HTMLInputElement","keyPressed","updateWidth","InputEvent","selectionStart","selectionEnd","RatingGroupList","icon","swiper_esm","TemplateEditorDialogRatingGroupItemComponent","template_editor_model","virtual","initialSlide","lastRatingGroupItem","ratingGroupItem","lastRatingGroupItems","ratingGroupItems","cachedRatingGroups","getCurrentItem","getAllItems","isItemActive","getResult","ratingGroupList","iconItem","isSelectedElsewhere","isShow","getRatingGroupsFiltred","emojiSlides","emojiPerSlide","initForm","fesm2020_forms","ratingGroupItemChange","resultScoreItems","parentTitle","onMakeDefault","makeDefault","toggleOnSelect","onSelectInner","toggleCommentOnSelect","togglePhotoOnSelect","changeIcon","trigger","ratingName","getRangeAt","childNodes","textNodes","nodeType","TEXT_NODE","ratingGroupItemDelete","toggleShowQty","toggleShowHours","toggleTicketRequired","toggleShowSpareParts","toggleSparePartsSelectionRequired","slideLeft","activeEmojiSlideIndex","swiper","slideTo","handleClickRatingGroupItem","slideRight","onSwiper","setEmojiSlideIndex","emojiSlideChanged","activeIndex","menu","template_editor_rating_group_item_component_decorate","TemplateEditorDialogRatingGroupComponent","viewRef","showEmoji","share_methods_function","extraBufferHeight","recheckShowEmoji","viewportZoneChanging$","ratingItem","onRatingItemChange","onRatingItemDeleted","emojis$","random","template_editor_rating_group_component_decorate","TemplateEditorDialogDescriptionComponent","template_editor_base_component","_description","descriptionText","descriptionChanged","template_editor_description_component_decorate","WysiwygEditorModule","common","ngx_quill","MaskedNumberInputComponent","MaskedNumberInputComponent_1","innerControl","propagateChange","onPaste","inputControl","commaToDotRegex","dotToCommaRegex","pastedValue","clipboardData","parse_number","writeValue","registerOnChange","fn","registerOnTouched","propagateTouched","provide","useExisting","multi","form_field","ngx_mask","WysiwygEditorComponent","CustomControlAbstract","ngControl","formDirective","minHeight","overflow","clipboard","matchVisual","toolbar","indent","initControlBase","isValid","onChanged","currentLength$","editor$","editor","getLength","maxLength","templatesFocusOutEditorWithObserveOn$","focused","editorReady","textChanged","excess","deleteText","wysiwyg_editor_component_decorate","TemplateEditorDialogModule","template_editor_dialog_service","dnd_expandable_service","spare_parts_service","imports","slide_toggle_component","drag_drop","number_input_module","scrolling","icon_component","ngx_lottie","drag_n_drop_cursor_directive_module","fesm2020_button","tooltip_directive","divider","skeleton_loader_component","paginator","progress_spinner","leasing_units_chart_card_module","turnovers_arc_chart_card_module","vacancy_loss_chart_card_module","swiper_angular","radio_button_dropdown_module","fade_text_component","template_editor_dialog_component","template_editor_area_component","template_editor_header_component","template_editor_item_component","template_editor_animation_component","loadEnumerations","loadEnumerationsSuccess","loadEnumerationsFailed","loadFileUploads","uploadFileSuccess","clearUploadedFile","uploadFileFail","deleteFile","deleteFileSuccess","deleteFileFailed","setPreviousRoute","loadTenantData","loadUserTenantSucceeded","loadUserTenantFailed","loadUserData","loadUserDataSucceded","loadUserDataFailed","loadUserById","loadUserByIdSucceded","loadUserByIdFailed","setUserGeneralRole","setAuthenticated","loadAllUserProperties","loadAllUserPropertiesSucceeded","loadAllUserPropertiesFailed","updateTenantSettings","updateTenantSettingsSucceeded","updateTenantSettingsFailed","setWindowWidth","patchInitialValue","storageValue","getItem","parsedValue","hydrationMetaReducer","featureKey","dynamicHydrationMetaReducer","getDynamicFeatureKey","ngrx_store","enumerations_actions","enumerationsLoading","enumerations","file_upload_reducer_reducer","fileToUpload","fileToUploadLoading","uploadedFileItem","deleteInProgress","deleteStatus","file_upload_actions","user_reducer_reducer","isAuthenticated","tenantData","user_reducer_initialState","user_actions","selectedUserLoading","selectedUser","CORE_FEATURE_KEY","reducers","enumeration","fileUpload","window_resize_reducer","route_reducer","routeStateFeatureKey","previousRoute","_main_application_store_actions_route_state_action__WEBPACK_IMPORTED_MODULE_0__","windowResizeFeatureKey","windowWidth","_main_application_store_actions_window_resize_actions__WEBPACK_IMPORTED_MODULE_0__","selectCoreModule","selectEnumerationState","_core_selector__WEBPACK_IMPORTED_MODULE_0__","coreState","selectLoadEnumerations","enumerationState","selectLoadEnumerationsLoading","selectDashboardViewType","selectDelinquencyResultsEnumeration","selectWorkflowPhasesEnumeration","workflowPhases","delinquencyResultTypes","selectTicketStatusTypeEnumeration","ticketStatusType","selectTicketPriorityTypeEnumeration","ticketPriorityType","selectRenewalResultTypesEnumeration","renewalResultTypes","selectFinishTypesEnumeration","finishType","selectTimerTypesEnumeration","timerTypes","selectPmsTypesEnumeration","pmsTypes","selectNativeLanguagesEnumeration","nativeLanguage","selectUnitStatusesEnumeration","moveOutTypes","selectUserState","selectAllUserProperties","userState","selectUserId","selectUserName","selectUserGeneralRole","selectIsAuthenticated","selectSelectedUser","selectSelectedUserLoading","TurnoverDateRangeModule","_angular_common__WEBPACK_IMPORTED_MODULE_3__","_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_0__","_ui_components_controls_date_dropdown_date_dropdown_module__WEBPACK_IMPORTED_MODULE_1__","getFieldName","setExpandedSection","sectionsId","START","VacancyLostThreshold","None","Medium","High","loadPunchById","loadPunchByIdFinished","loadPunchByIdFailed","clearSelectedPunch","loadPunchesByTurnoverId","loadPunchesByTurnoverIdFinished","loadPunchesByTurnoverIdFailed","clearPunchesByTurnoverId","sendPunch","sendPunchFinished","sendPunchFailed","loadTurnoverBids","loadTurnoverBidsSuccess","loadTurnoverBidsFailed","createTurnoverBid","createTurnoverBidSuccess","createTurnoverBidFailed","acceptTurnoverBid","acceptTurnoverBidSuccess","acceptTurnoverBidFailed","rejectTurnoverBid","rejectTurnoverBidSuccess","rejectTurnoverBidFailed","uploadTurnoverBidInvoice","uploadTurnoverBidInvoiceSuccess","uploadTurnoverBidInvoiceFailed","updateTurnoverBid","updateTurnoverBidSuccess","updateTurnoverBidFailed","removeTurnoverBid","removeTurnoverBidSuccess","removeTurnoverBidFailed","loadTurnoverBidCategories","loadTurnoverBidCategoriesSuccess","loadTurnoverBidCategoriesFailed","addTurnoverBidCategory","addTurnoverBidCategorySuccess","addTurnoverBidCategoryFailed","approveTurnoverBid","approveTurnoverBidSuccess","approveTurnoverBidFailed","createNewTurnover","createNewTurnoverSuccess","createNewTurnoverFailed","resetCreateNewTurnover","clearTurnoverData","getTurnoverData","getTurnoverDataSuccess","getTurnoverDataFailed","setCurrentWorkflowStep","setCurrentWorkflowStepModel","resetWorkflowStepStatus","setTurnoverData","setTurnoverDataFailed","setTurnoverDataSuccess","setWorkflowStepSuccess","setApplianceTypeList","setColorTypeList","setUserList","setUserListModel","setAllUserRadioList","setAllUserList","setCompanyRadioList","setCompanyNameRadioList","setCompanyEmailRadioList","setAttachmentToTurnover","setAttachmentsToTurnover","setAttachmentToTurnoverSuccess","setAttachmentToTurnoverFailed","clearAddedAttachment","updateTurnoverAttachment","updateTurnoverAttachmentSuccess","updateTurnoverAttachmentFailed","getTurnoverTickets","getTurnoverTicketsSuccess","getTurnoverTicketsFailed","addNewTurnoverTicket","addNewTurnoverTicketSuccess","addNewTurnoverTicketFailed","resetNewTurnoverTicket","updateTurnoverTicket","updateTurnoverTicketSuccess","updateTurnoverTicketFailed","updateTicketPreview","updateTicketPreviewSuccess","updateTicketPreviewFailed","getSelectedTicket","getSelectedTicketSuccess","getSelectedTicketFailed","deleteTurnoverTicket","deleteTurnoverTicketSuccess","deleteTurnoverTicketFailed","deleteTurnoverTicketAttachment","deleteTurnoverTicketAttachmentSuccess","deleteTurnoverTicketAttachmentFailed","setTicketAttachment","setTicketAttachmentSuccess","setTicketAttachmentFail","clearAddedTicketAttachment","getCompanyList","getCompanyListSuccess","getCompanyListFail","getBidTurnoverList","getBidTurnoverListSuccess","getBidTurnoverListFail","getBidCompanyList","getBidCompanyListSuccess","getBidCompanyListFail","getAllBidList","getAllBidListSuccess","getAllBidListFail","getBid","clearBid","getBidSuccess","getBidFail","addNewBid","addNewBidSuccess","addNewBidFail","clearNewBidList","newBidInProgress","updateBid","updateBidSuccess","updateBidFail","clearUpdatedBid","rejectBid","rejectBidSuccess","rejectBidFail","updateBidComment","updateBidCommentSuccess","updateBidCommentFail","setBidAttachment","setBidAttachmentSuccess","setBidAttachmentFail","clearAddedBidAttachment","deleteBidAttachment","deleteBidAttachmentSuccess","deleteBidAttachmentFailed","getBidAttachmentList","getBidAttachmentListSuccess","getBidAttachmentListFailed","getAppliance","getApplianceSuccess","getApplianceFailed","getWorkflowStepCommentList","clearWorkflowStepCommentList","getWorkflowStepCommentListSuccess","getWorkflowStepCommentListFailed","addWorkflowStepComment","addWorkflowStepCommentSuccess","addWorkflowStepCommentFailed","addWorkflowStepCommentReaction","addWorkflowStepCommentReactionSuccess","removeWorkflowStepCommentReaction","removeWorkflowStepCommentReactionSuccess","updateWorkflowStepComment","updateWorkflowStepCommentSuccess","updateWorkflowStepCommentFailed","deleteWorkflowStepComment","deleteWorkflowStepCommentSuccess","deleteWorkflowStepCommentFailed","deleteTurnover","deleteTurnoverSuccess","deleteTurnoverFailed","deleteTurnoverAttachment","deleteTurnoverAttachmentSuccess","deleteTurnoverAttachmentFailed","getTurnoverAttachments","getTurnoverAttachmentsSuccess","getTurnoverAttachmentsFailed","clearTurnoverAttachments","getTicket","getTicketSuccess","getTicketFailed","getTicketAttachments","getTicketAttachmentsSuccess","getTicketAttachmentsFailed","clearTicketPreview","setStepInfo","cleanTurnoverStore","workflowAssignmentsByPropertyAndStepIdSucceded","assignDefaultWorkflowStepAssignee","workflowAssignmentsByPropertyAndStepIdFailure","assignDefaultWorkflowStepAssigneeFailed","assignDefaultWorkflowStepAssigneeSuccess","reloadAppliancesNeeded","reloadAppliancesNeededEnd","emptyAction","inspectTurnover","updateValidationParams","setStepAssignee","setStepAssigneeSuccess","setStepAssigneeFailed","getDefaultTurnoversAssignees","getDefaultTurnoversAssigneesSuccess","getDefaultTurnoversAssigneesFailed","resetKanbanCounters","setAllPropertyIds","toggleAllSections","toggleSingleSection","toggleInactiveFilteredSingleSection","setInactiveFilteredSections","setDisplayedPropertyList","setSectionLostRevenue","loadTurnoverTimers","clearTurnoverTimers","turnoverTimersLoaded","setTurnoverTimers","setTurnoverTimersSuccess","setTurnoverTimersFailed","setWorkflowStepAssignee","setEmptyWorkflowStepAssignee","transitEmptyWorkflowStepAssignee","setWorkflowStepAssigneeSuccess","setWorkflowStepAssigneeFailed","loadTurnoverSummaryStats","loadTurnoverSummaryStatsSuccess","loadTurnoverSummaryStatsFailed","loadTurnoverSummaryDetails","loadTurnoverSummaryDetailsSuccess","loadTurnoverSummaryDetailsFailed","punchFeatureKey","_actions_punch_actions__WEBPACK_IMPORTED_MODULE_0__","punchesByTurnoverIdLoading","punchesByTurnoverId","selectedPunch","punch","turnoverBidsFeatureKey","turnoverBidsReducer","bidsLoading","bids","bidCategories","bidAdding","_main_application_turnovers_store_actions_turnover_bids_actions__WEBPACK_IMPORTED_MODULE_0__","categories","turnoversFeatureKey","updatedTurnoverData","emptyTurnoverData","createTurnoverLoading","createdTurnover","turnoverDataLoading","commentItem","setWorkflowStepStatus","nextWorkflowStep","setWorkflowStepLoading","currentWorkflowStep","currentWorkflowStepModel","applianceTypeList","colorTypeList","userList","userListModel","companyRadioList","companyNameRadioList","companyEmailRadioList","attachmentToEntity","addBidAttachmentInProgress","addBidAttachmentStatus","addedAttachment","addedBidAttachment","addedTicketAttachment","turnoverTicketList","turnoverTicketListLoading","newTurnoverTicket","newTurnoverTicketLoading","editedTicket","selectedTicket","selectedTicketLoading","addNewApplianceNeededLoading","isNewApplianceNeededAdd","markApplianceAsDoneLoading","isMarkApplianceAsDone","newBidList","newBidListInProgress","bidTurnoverList","bidTurnoverListLoading","bidCompanyList","bidCompanyListLoading","bid","editedBid","bidLoading","updatedBid","updatedBidLoading","updatedBidCommentLoading","appliance","applianceLoading","workflowStepCommentList","workflowStepCommentListLoading","workflowStepCommentUpdateLoading","workflowStepAssigneeId","workflowStepAssignmentLoading","deleteTurnoverInProgress","turnoverDeleteStatus","deleteTurnoverAttachmentInProgress","turnoverDeleteAttachmentStatus","addTurnoverAttachmentInProgress","addTurnoverAttachmentStatus","stepInfo","allAttachments","allAttachmentsLoading","deleteBidAttachmentInProgress","deleteBidAttachmentStatus","bidAttachments","bidAttachmentsLoading","updateTicketInProgress","updateTurnoverAttachmentInProgress","updateTurnoverAttachmentStatus","allBidList","allBidListLoading","ticketLoading","ticketAttachments","ticketAttachmentsLoading","ticketUpdateInProgress","ticketUpdateInProgressStatus","inspectTurnoverId","validationParams","allPropertyIds","inactiveFilteredPropertyIds","updateStepAssigneeInProgress","updateStepAssigneeStatus","defaultTurnoversAssignees","defaultTurnoversAssigneesLoading","allUserRadioList","allUserList","displayedPropertyList","sectionsLostRevenue","rejectBidLoading","timers","turnoversSummaryStats","turnoversSummaryDetails","turnoversSummaryLoading","turnoversSummaryError","_actions_turnovers_actions__WEBPACK_IMPORTED_MODULE_1__","bidList","restTicketModel","lostRevenue","stats","details","selectTurnoverBidsState","_reducers_turnover_bids_reducer__WEBPACK_IMPORTED_MODULE_0__","selectTurnoverBids","selectTurnoverBidCategories","selectTurnoverBidAdding","selectTurnoverBidsLoading","selectTurnoversState","_reducers_turnovers_reducer__WEBPACK_IMPORTED_MODULE_0__","selectCreatedTurnover","turnoversState","selectCreateTurnoverLoading","selectTurnoverData","selectTurnoverUnitName","selectTurnoverDataId","selectUpdatedTurnoverData","selectTurnoverDataLoading","selectEmptyTurnoverData","selectUpdatedTurnoverTicket","selectSetWorkflowStepLoading","selectSetWorkflowStepStatus","selectNextWorkflowStep","selectCurrentWorkflowStep","selectCurrentWorkflowStepModel","selectApplianceTypeList","selectColorTypeList","selectUserList","selectAllUserRadioList","selectAllUserList","selectListModel","selectCompanyRadioList","selectCompanyNameRadioList","selectCompanyEmailRadioList","selectAddedTicketAttachment","selectAddBidAttachmentInProgress","selectAddBidAttachmentStatus","selectAddTurnoverAttachmentStatus","selectAddTurnoverAttachmentInProgress","selectUpdateTurnoverAttachmentInProgress","selectDeleteTurnoverAttachmentInProgress","selectNewBidList","selectNewBidListInProgress","selectTurnoverTicketList","selectTurnoverTicketListLoading","selectNewTurnoverTicket","selectNewTurnoverTicketLoading","selectBidTurnoverList","selectBidTurnoverListLoading","selectAllAttachments","selectAllBidList","selectAllBidListLoading","selectBidCompanyList","selectBidCompanyListLoading","selectUpdatedBid","selectBid","selectUpdatedBidLoading","selectRejectBidLoading","selectWorkflowStepCommentList","selectDeleteBidAttachmentInProgress","selectBidAttachments","selectWorkflowStepCommentListLoading","selectDeleteTurnoverInProgress","selectTurnoverDeleteStatus","selectStepInfo","selectTicket","selectTicketUpdateInProgress","selectTicketAttachments","selectTicketUpdateInProgressStatus","selectInspectTurnoverId","selectValidationParams","lockFields","nextStepAvailable","saveAvailable","nextStepChecking","customMessage","selectAllPropertyIds","selectActivePropertyIds","selectIsActiveSection","selectInactiveFilteredPropertyIds","selectIsInactiveFilteredSection","selectUpdateStepAssigneeInProgress","selectDefaultTurnoversAssignees","selectDefaultTurnoversAssigneesLoading","selectDisplayedPropertyList","selectTurnoverTimers","turnoverState","selectTurnoversSummaryStats","selectTurnoversSummaryDetails","selectTurnoversSummaryLoading","selectTurnoversSummaryError","ButtonMenuComponent","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_0__","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_1__","optionsToDisplay","selectedOption","onAction","optionId","isOption","submitOnMainButtonClick","submitAction","_angular_material_button__WEBPACK_IMPORTED_MODULE_4__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_5__","_angular_material_menu__WEBPACK_IMPORTED_MODULE_6__","_ui_components_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_2__","_angular_material_icon__WEBPACK_IMPORTED_MODULE_8__","TextOverflowCheckDirective","destroy_service","resizeSubject","debounce_time_safe_default_constant","takeUntil","destroy$","checkOverflow","resizeObserver","ResizeObserver","observe","disconnect","complete","cell","scrollWidth","clientWidth","additionalClass","renderer","addClass","textOverflowed","FadeTextComponent","isEnabled","isTooltipMode","enableTooltipMode","isOverflowed","TooltipDirectiveModule","AppRoutes","HOME","_shared_enums_route_path_enum__WEBPACK_IMPORTED_MODULE_1__","ROLES","ROLES_ADMIN_HOME","ROLES_ADMIN_PERFORMANCE_METRICS","ROLES_ASSET_HOME","ROLES_ASSET_PROPERTY","ROLES_CONSTRUCTION_HOME","ROLES_PROPERTY_HOME","ROLES_VENDOR_HOME","RESIDENT","RESIDENT_SERVICE","RESIDENT_SERVICE_REQUEST","RESIDENT_SERVICE_UPCOMING","RESIDENT_SERVICE_RATE","REPORTS","REPORTS_RENT_ROLL","REPORTS_ROC","REPORTS_BILLING","REPORTS_UNIT_MIX","REPORTS_DELINQUENCIES","REPORTS_RENEWALS","DASHBOARD_ACTIVE_TURNOVERS","DASHBOARD_TICKETS","DASHBOARD_PROPERTY_MGMT","ASSET_MANAGER_HOME_DASHBOARD","PROPERTY_MANAGER_HOME_DASHBOARD","CONSTRUCTION_MANAGER_HOME_DASHBOARD","ADMIN_HOME_DASHBOARD","ADMIN_SUBSECTION_DASHBOARD","INSPECTIONS","INSPECTIONS_USER","_shared_enums_management_route_enum__WEBPACK_IMPORTED_MODULE_0__","INSPECTIONS_DYNAMIC","INSPECTIONS_REPEATING","INSPECTIONS_RESIDENT","INSPECTIONS_IN_REVIEW","SETTINGS_SURVEYS","SETTINGS_TEMPLATE","SETTINGS_SPACE_TEMPLATE","SERVICE","SERVICE_CANNED_ANSWERS","SPARE_PARTS","CALENDAR","LOGIN","EXTERNAL","ACCEPT_TOKEN","WIDGET_BOARD_RESCHEDULE","WIDGET_BOARD_DONE","WIDGET_BOARD_COMMENT","WIDGET_BOARD_TURNOVER_COMMENT","WIDGET_BOARD_TURNOVER_DECLINE","WIDGET_OPEN_MOBILE_APP","WIDGET_DOWNLOAD_MOBILE_APP","ROOT","BOARDS","BUILDIUM","TURNOVERS_KANBAN","TURNOVERS_ACTIVE","TURNOVERS_ARCHIVED","TURNOVERS_NOTICE","TURNOVERS_MOVE_OUT_CONFIRMATION","TURNOVERS_SCOPE_AND_BID_APPROVAL","TURNOVERS_MAKE_READY","TURNOVERS_RENOVATION","TURNOVERS_PUNCH","TURNOVERS_MANAGEMENT_APPROVAL","TURNOVERS_LEASE_READY","TURNOVERS_LEASE_UP","TURNOVERS_MOVE_IN","TURNOVERS_ARCHIVE","TURNOVERS_BULK_BIDS","TURNOVERS_DETAIL","JOBS_AVAILABLE_AND_BIDS_SENT","DELINQUENCIES","DELINQUENCIES_DETAIL","RENEWALS","MOVE_OUT","MOVE_OUT_ASSET_MANAGER","MOVE_OUT_PROPERTY_MANAGER","MOVE_OUT_ASSET_MANAGER_ARCHIVED","MOVE_OUT_PROPERTY_MANAGER_ARCHIVED","RENEWALS_DETAIL","SETTINGS","SETTINGS_USERS","SETTINGS_RESIDENTS","SETTINGS_ROLES","SETTINGS_ROLES_NEW","SETTINGS_ROLES_EDIT","SETTINGS_RENEWAL_STRATEGY","SETTINGS_KPI","SETTINGS_PORTFOLIO","SETTINGS_COLLECTION","SETTINGS_INSPECT","SETTINGS_BRANDING","SETTINGS_VENDOR","SETTINGS_SYSTEM","SETTINGS_TURNOVER_CONFIGURATION","SETTINGS_SERVICE","SETTINGS_NOTIFICATIONS","TICKETS","NO_PERMISSION","NO_PACKAGE","CountryPhoneCodes","sortedKeys","groupedCodes","country","code","CountryCodes","countries","reverse","LatviaValidPhoneNumberLength","FinlandValidPhoneNumberLength","ValidPhoneNumberLength_10","debounceSafeDefault","allFileExtensions","imageVideoFileExtensions","videoExtensions","imageMimeTypes","InspectionTypeListConst","_shared_functions_date_utils_function__WEBPACK_IMPORTED_MODULE_1__","ReviewRequiredPolicyList","NoValue","PriorityTypeListConst","_shared_enums_priority_type__WEBPACK_IMPORTED_MODULE_0__","dayOfWeek","moment__WEBPACK_IMPORTED_MODULE_1__","weekNumber","weekNumberText","semi1","semi2","_main_application_inspections_models_rest_inspections_model_interface__WEBPACK_IMPORTED_MODULE_2__","WorkflowStepListConst","_shared_enums_workflow_step_enum__WEBPACK_IMPORTED_MODULE_0__","WorkflowStepListActive","workflowStepCommentsWithLinks","commentText","ContentEditableDirective","elementRef","_value","setAttribute","observer","MutationObserver","innerHTML","characterData","childList","subtree","onInput","onBlur","onTouched","setProperty","setDisabledState","_angular_core__WEBPACK_IMPORTED_MODULE_0__","_angular_forms__WEBPACK_IMPORTED_MODULE_1__","CurrencyFormatterDirective","appCurrencyFormatter","sanitizedValue","dotIndex","beforeDot","afterDot","formatCurrency","parts","wholePart","fractionalPart","CustomTooltipComponent","CustomTooltipDirective","overlay","overlayPositionBuilder","showToolTip","_showToolTip","hide","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","offsetY","overlayRef","hasAttached","tooltipRef","attach","portal","instance","customToolTip","contentTemplate","closeToolTip","detach","rotate","asc","desc","SortableDirective","CustomTooltipModule","have_permission_directive","sort_header_directive","last_element_directive","custom_tooltip_directive","content_editable_directive","drop_zone_directive","currency_formatter_directive","scroll_to_required_container_directive","scroll_to_required_directive","scroll_element_directive","vertical_resize_directive","DirectivesModule","DropZoneDirective","activeResident","useCustomStyle","onDrop","dataTransfer","kind","getAsFile","fileDrop","clearData","onDragOver","onDragLeave","onBodyDragOver","preventBodyDrop","onBodyDrop","FadeTextOnWidthDirective","checkOnResize","checkWidthAndApplyStyles","titleLength","firstChange","onRecalculate","maxWidth","getMaxWidthInPixels","setStyle","removeStyle","appFadeTextOnWidth","percent","HavePermissionDirective","viewContainer","appHavePermission","checkPermission","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_3__","permissionList","rxjs_operators__WEBPACK_IMPORTED_MODULE_5__","hasPermission","_shared_functions_check_permission_level_function__WEBPACK_IMPORTED_MODULE_2__","_angular_core__WEBPACK_IMPORTED_MODULE_6__","LastElementDirective","isLastElement","lastItemParam","itemsCount","lastElementLoaded","PreventKeyboardEventsDirective","onKeyboardEvent","ScrollElementDirective","onScroll","scrollChanged","ScrollToRequiredContainerDirective","ScrollToRequiredDirective","scrollContainer","containerEl","onSubmit","invalid","scrollToFirstReq","firstReq","querySelector","scroll","getTopOffset","left","rxjs_operators__WEBPACK_IMPORTED_MODULE_3__","controlEl","controlElTop","containerTop","scrollTop","SortHeaderDirective","ariaDirection","onClick","changeDirection","sortAction","currentDirection","fieldName","sortEvent","StopPropagationDirective","TooltipDirective","matTooltip","onMouseEnter","onMouseLeave","_angular_common__WEBPACK_IMPORTED_MODULE_2__","_angular_material_tooltip__WEBPACK_IMPORTED_MODULE_1__","VerticalResizeDividerDirective","isResizing","deltaY","clientY","startY","newTopHeight","initialTopHeight","newBottomHeight","offsetHeight","setElementSizes","topHeight","topElement","bottomHeight","bottomElement","storageKey","removeEventListener","onMouseMove","onMouseUp","previousElementSibling","nextElementSibling","savedSizes","containerHeight","dividerHeight","applyDefaultSizes","defaultTopHeight","defaultBottomHeight","sizeChanged","onMouseDown","addEventListener","WHITE_LOGO","AttachmentComponentType","PortfolioAttachmentType","PropertyAttachmentType","UnitAttachmentType","TurnoverAttachmentType","ApplianceAttachmentType","BidAttachmentType","TicketAttachmentType","BidStatusType","LIGHT_GRAY","DEFAULT","cGray","EmptyValues","DASH","DashboardViewType","EnumerationItemFields","ANGLE_DOWN","KpiType","currentDate","startOfMonth","moment_moment__WEBPACK_IMPORTED_MODULE_0__","prevMonth1Middle","prevMonth1Start","prevMonth2Middle","prevMonth2Start","prevMonth3Middle","prevMonth3Start","trendDaysDiff","getDaysDiff","diff","Months6","Months12","List","AVATAR_USER_CONFIG_LIST","ACCOUNT","PriorityType","PropertyType","BREADCRUMB","ESelectionDateMode","ESelectionRangeMode","ThresholdType","TicketStatusType","TicketStatus","TicketCompletedStatusType","SyncWithPMSTypes","TicketType","ELAPSED_DAYS","IN_PROGRESS","VendorEmployeeType","UserPermissionsMap","WorkflowPhaseToStepConst","_workflow_phase_type__WEBPACK_IMPORTED_MODULE_1__","checkPermissionLevel","check","_shared_enums_permission_level_enum__WEBPACK_IMPORTED_MODULE_0__","oneSecondInMilliseconds","oneDayInMilliseconds","enumToSourceFiltered","enumName","enumMap","_shared_pipes_humanize_pipe__WEBPACK_IMPORTED_MODULE_0__","FormatAddressToStringFunction","address","street1","street2","city","zip","getBidCategoriesRadioList","getCompanyRadioList","getCurrentWorkflowStep","workflow","workflowStepEnumType","getCompletedWorkflowStep","getDateObjectFunction","_shared_functions_get_utc_function__WEBPACK_IMPORTED_MODULE_0__","getEnumerationRadioListFunction","enumerationItems","nullValueLabel","withNullValue","valueKey","_shared_enums_enumeration_item_fields__WEBPACK_IMPORTED_MODULE_0__","maxNumber","includeAllProperties","optionsToApply","_main_application_application_menu_property_selector_constants__WEBPACK_IMPORTED_MODULE_0__","getTimeInStep","timerInstance","forAllProcess","total","notice","moveOut","makeReady","reno","approval","marketing","leaseUp","moveIn","getUserList","labelAsFullName","defaultLabel","firstName","lastName","email","isFullName","charAmount","isDefaultAssignee","_shared_constants_workflow_step_list_const__WEBPACK_IMPORTED_MODULE_1__","defaultAssigneeForStep","isResidentAssignee","isAssignToResident","isMe","userGroupType","additionalSearchLabel","getUserDisplayName","getUserLastName","getUserOrVendorList","_shared_enums_user_type__WEBPACK_IMPORTED_MODULE_2__","companyName","getUserItems","getInternalUserList","getUtc","paramsCompare","isParamsCompareFunc","object","compare","expectValue","parseNumber","replaceCommaToDotFunction","FileMimeType","ImageOrientation","Providers","ImportDefaultAssigneeMode","TicketPriorityType","APPFOLIO","PreleaseFilterMode","AppointmentTypeEnum","TotalCostStatus","PaymentStatus","isRestTurnoverTaskModel","isRestTurnoverDataModel","selectWorkflowStep","_main_application_store_selectors_enumeration_selectors__WEBPACK_IMPORTED_MODULE_0__","_shared_utils_rxjs_filter_nullish_rxjs_util__WEBPACK_IMPORTED_MODULE_1__","rxjs_operators__WEBPACK_IMPORTED_MODULE_2__","selectWorkflowStepName","selectWorkflowStepsDropdown","BoardCurrencyPipe","currencyPipe","valueFormat","pure","BoardTypePipe","_main_application_boards_interfaces_board_enums__WEBPACK_IMPORTED_MODULE_0__","BooleanToStringPipe","CompactPipe","availableItems","CompareOperatorPipe","_shared_enums_compare_operator_enum__WEBPACK_IMPORTED_MODULE_0__","ConditionalDatePipe","currentYear","CUSTOM_CURRENCY_DOTS_COMMAS_PATTERN","CustomCurrencyDotsCommasPipe","_shared_enums_common_enum__WEBPACK_IMPORTED_MODULE_0__","CustomCurrencyShortWithSuffixPipe","precision","abbreviateNumber","num","fixed","toPrecision","pow","CustomCurrencyPipe","currency","fractionDigits","_shared_constants_none_radio_option_const__WEBPACK_IMPORTED_MODULE_0__","TodayDatePipe","_angular_common__WEBPACK_IMPORTED_MODULE_1__","showToday","hideCurrentYear","dateValue","isSameYear","someDate","datePipe","isToday","DaysAgoPipe","diffInDays","DaysInStepPipe","time","_shared_functions_get_time_in_step_function__WEBPACK_IMPORTED_MODULE_0__","allHours","DaysPastPipe","daysInStep","discardHoursPart","DelinquencyGroupInvalidPipe","delinquencyResultType","notes","_main_application_dashboard_reports_delinquencies_models_delinquency_fields_enum__WEBPACK_IMPORTED_MODULE_0__","DelinquencyPristineGroupPipe","delinquencyResult","pristine","ElapsedDatePipe","isAfter","ElapsedDaysMidRangePipe","reversed","low","high","lowValue","highValue","EnumerationUserPipe","enumItem","EnumerationValuePipe","enumList","showEmptyValue","defaultEmptyValue","EscapeHtmlPipe","allowAngelBrackets","FieldTypePipe","fieldsList","FileMimeTypePipe","fileName","mime__WEBPACK_IMPORTED_MODULE_0__","startsWith","_shared_interfaces_file_mime_types__WEBPACK_IMPORTED_MODULE_1__","FileSizePipe","bytesNumber","kBNumber","mBNumber","gBNumber","tBNumber","FileToObjectUrlPipe","sanitizer","bypassSecurityTrustUrl","FindByIdPipe","FindByPropPipe","propValue","propName","FormatToAvatarPipe","upperCase","GetCurrentWorkflowStepPipe","_shared_functions_get_current_workflow_step_function__WEBPACK_IMPORTED_MODULE_0__","activeWorkflowStepType","GetFromGroupPipe","GetPercentageValuePipe","GetWorkflowStepPipe","HoursPastPipe","HumanizePipe","IsOddPipe","IsUserExistingPipe","row","KanbanHeaderWorkflowPhasePipe","currentPhase","defaultPhase","defaultTheme","_shared_enums_breadcrumb_theme_enum__WEBPACK_IMPORTED_MODULE_0__","KanbanHeaderWorkflowStepPipe","currentStep","currentTheme","KpiHeaderPipe","_shared_enums_threshold_type__WEBPACK_IMPORTED_MODULE_0__","KpiTaskValuePipe","KpiValuePipe","operator","LabelAvailableDayInStepPipe","dayInStep","LabelDayInStepPipe","LabelDaySinceStepPipe","daySinceStep","LostRevenuePipe","rent","pricePerDay","pricePerHour","MeasureTypePipe","measureType","amount","shortFormat","MentionCommentPipe","m","g","NotEmptyPropsAmountPipe","showZero","excludedProps","val","NumberValidationPipe","parsed","_shared_functions_parse_number__WEBPACK_IMPORTED_MODULE_0__","NumberPipe","suffix","ParseFloatPipe","_shared_functions_replace_comma_to_dot_function__WEBPACK_IMPORTED_MODULE_0__","PhoneNumberPipe","mask","phoneNumber","phoneCode","_ui_components_validators_phone_validator__WEBPACK_IMPORTED_MODULE_0__","PhysicalAddressPipe","_shared_functions_format_address_to_string_function__WEBPACK_IMPORTED_MODULE_0__","IsSaveGeneralRoleDisabledPipe","IsSubmitRolesAndUnitsDisabledPipe","isGeneralRoleChanged","arePropertiesChanged","PropertiesToRadioInputPipe","TurnoverPhaseToStatusPipe","EnumerationProperties","WorkflowPhaseToProgressMap","WorkflowPhaseToProgressValuePipe","workflowPhase","workflowPhaseValue","enumerationListToKeyValueMap","enumerationList","enumerationItem","BidStatusTypePipe","statusType","bid_status_type","DayFromHoursPipe","EnumValueToDisplayTextPipe","FirstPipe","IsIncludePipe","ReplaceValuePipe","pattern","RoundValuePipe","StartsWithPipe","TaskTableSubsectionResultCountPipe","filterItem","compareParams","params_compare_function","PIPES","trust_html_pipe","pluralization_pipe","valueIfNonZero_pipe","valueIfPositive_pipe","yesEmpty_pipe","date_pipe","format_to_avatar_pipe","kpi_header_pipe","kpi_value_pipe","kpi_task_value_pipe","workflow_phase_type_pipe","kanban_header_workflow_phase_pipe","workflow_phase_done_pipe","text_mask_pipe","time_from_date_pipe","enumeration_value_pipe","turnover_attachment_pipe","days_ago_pipe","compare_operator_pipe","to_fixed_value_pipe","parse_float_pipe","get_percentage_value_pipe","escape_html_pipe","field_type_pipe","boolean_to_string_pipe","utc_date_pipe","physical_address_pipe","is_user_existing_pipe","is_odd_pipe","file_to_object_url_pipe","delinquency_group_invalid_pipe","delinquency_pristine_group_pipe","section_id_pipe","kanban_header_workflow_step_pipe","priority_icon_pipe","priority_to_css_class_pipe","priority_css_pipe","days_in_step_pipe","file_size_pipe","workflow_step_done_pipe","lost_revenue_pipe","threshold_priority_css_pipe","find_by_id_pipe","get_workflow_step_pipe","time_diff_pipe","get_from_group_pipe","elapsed_days_mid_range_pipe","label_day_in_step_pipe","label_day_since_step_pipe","custom_currency_pipe","custom_currency_dots_commas_pipe","custom_currency_short_with_suffix_pipe","days_past_pipe","hours_past_pipe","get_current_workflow_step_pipe","measure_type_pipe","number_pipe","number_validation_pipe","mention_comment_pipe","threshold_configuration_pipe","threshold_step_configuration_pipe","truncate_text_pipe","compact_pipe","phone_number_pipe","label_available_day_in_step_pipe","not_empty_props_amount_pipe","uppercase_first_letter_of_words_pipe","elapsed_date_pipe","enumeration_user_pipe","value_length_pipe","board_currency_pipe","file_mime_type_pipe","user_display_name_pipe","find_by_prop_pipe","workflow_step_name_pipe","truncate_lengths_pipe","pms_type_enumeration_pipe","conditional_date_pipe","board_type_pipe","reccurance_pipe","PipesModule","PluralizationPipe","PmsTypeEnumerationPipe","rxjs_operators__WEBPACK_IMPORTED_MODULE_1__","pmsType","PriorityCssPipe","fontColor","PriorityIconPipe","_shared_enums_priority_type__WEBPACK_IMPORTED_MODULE_1__","TaskCssClasses","PriorityToCssClassPipe","RecurrencePipe","getRecurrenceOptions","option","SectionIdPipe","idPrefix","TextMaskPipe","sign","ThresholdConfigurationPipe","configuration","readyPhaseThreshold","lowThresholdValue","notReadyPhaseThreshold","highThresholdValue","ThresholdPriorityCssPipe","ThresholdStepConfigurationPipe","stepType","stepThresholds","TimeDiffPipe","diffLabelPrefix","diffInYears","diffInMonths","diffInWeeks","diffInHours","getLabel","suffixFunction","TimeFromDatePipe","showFullDate","currrentDate","ToFixedValuePipe","TruncateLengthPipe","completeWords","ellipsis","truncatedValue","lastSpaceIndex","lastIndexOf","TruncateTextPipe","patterns","regex","TrustHtmlPipe","domSanitized","bypassSecurityTrustHtml","TurnoverAttachmentPipe","attachmentList","attachmentType","targetAttachmentType","UppercaseFirstLetterOfWordsPipe","word","UserDisplayNamePipe","dateCreated","_shared_functions_get_user_list_function__WEBPACK_IMPORTED_MODULE_0__","UtcDatePipe","ValueLengthPipe","ValueIfNonZeroPipe","ValueIfPositivePipe","WorkflowPhaseDonePipe","_shared_enums_icon_enum__WEBPACK_IMPORTED_MODULE_0__","WorkflowPhaseTypePipe","workflowPhaseType","_shared_enums_workflow_phase_type__WEBPACK_IMPORTED_MODULE_0__","WorkflowStepDonePipe","WorkflowStepNamePipe","_shared_observables_select_workflow_step__WEBPACK_IMPORTED_MODULE_0__","YesEmptyPipe","AUTH_CONFIG_ID","AuthService","oidcSecurityService","oidcStorageService","getConfigId","setConfigId","configId","getAccessToken","clearStorage","logout","currentConfigId","logoff","DestroyService","mapWidthToDevice","isWidthDesktopLarge","isWidthDesktopMedium","XXL","isWidthDesktopSmall","isWidthTablet","LG","isMobile","isTablet","isDesktop","isDesktopSmallOrSmaller","EventThrottleService","zone","throttleEvent","event$","throttleValue","throttledEvent$","throttleTime","asyncScheduler","leading","trailing","run","THROTTLES","NativeEventService","eventThrottleService","empty","scroll$","initScroll","resize$","initResize","documentScroll$","SCROLL","windowResize$","RESIZE","fromEvent","passive","startWith","DeviceService","nativeEventService","navigator","userAgent","windowEvent$","w","isMobileUserAgent","isIOS","isAndroid","isWindowsPhone","isTabletUserAgent","innerWidth","orientation","curr","deviceInfo$","deviceType$","isMobile$","isTablet$","isDesktop$","HelpRouterService","activatedRoute","_shared_enums_route_data__WEBPACK_IMPORTED_MODULE_0__","localStoragePrefix","LocalCacheService","get$","unsubscriber$","entry","_cache","lsKey","_utils_extensions__WEBPACK_IMPORTED_MODULE_0__","associateKey","mapCacheToLocalStorage","newEntry","removeByAssociateKey","PendingService","_loadingMap","_loading$","setLoading","Error","updateLoadingState","clearPending","isPendingUrls","urls","isPendingExcludingUrls","excludedUrls","isPendingExcludingUrls$","_loadingMapSubject","loadingMap","SubjectsService","parseUndefined","fromEntries","includeUndefined","parseJSON","json","isDeepEqual","keysA","keysB","prototype","hasOwnProperty","debounce","_constants_debounce_time_safe_default_constant__WEBPACK_IMPORTED_MODULE_0__","source","_skip_equal_rxjs_util__WEBPACK_IMPORTED_MODULE_2__","isPure","skipEqual$","rxjs_operators__WEBPACK_IMPORTED_MODULE_0__","object1","object2","_is_deep_equal_util__WEBPACK_IMPORTED_MODULE_1__","UserExistsValidator","emailAddressList","userAlreadyExists","UserInactiveValidator","userInactive","AttachmentItemComponent","file_mime_types","deleteConfirmation","deleteEvent","copyLink","copyToClipboard","selBox","opacity","execCommand","removeChild","attachmentItem","externalUrl","newAttachmentItem","snackbar_message_enum","getLink","AttachmentItemModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_9__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_1__","_attachment_item_component__WEBPACK_IMPORTED_MODULE_3__","AttachmentComponentForm","AttachmentType","AttachmentComponent","File","Link","setIsTouched","showValidationError","cleanInputAttachment","reset","_attachmentItem","currentLink","uploads","attachmentItemEvent","keepSelection","_shared_enums_attachment_component_type_enum__WEBPACK_IMPORTED_MODULE_1__","_angular_forms__WEBPACK_IMPORTED_MODULE_10__","urlRegex","submitLink","AttachmentModule","_ui_components_controls_radio_button_radio_button_module__WEBPACK_IMPORTED_MODULE_6__","_ui_components_controls_input_file_input_file_module__WEBPACK_IMPORTED_MODULE_5__","_ui_components_controls_input_input_module__WEBPACK_IMPORTED_MODULE_4__","_angular_material_button__WEBPACK_IMPORTED_MODULE_10__","_ui_components_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_3__","_app_modules_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_0__","_shared_directives_tooltip_directive__WEBPACK_IMPORTED_MODULE_1__","_ui_components_components_attachment_item_attachment_item_module__WEBPACK_IMPORTED_MODULE_2__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_11__","AttachmentsListComponent","AttachmentsListModule","_attachment_item_attachment_item_module__WEBPACK_IMPORTED_MODULE_0__","ButtonModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_2__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_3__","_angular_material_icon__WEBPACK_IMPORTED_MODULE_4__","CalendarHeaderComponent","_intl","calendar","_dateAdapter","_dateFormats","stateChanges","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_2__","periodLabel","activeDate","monthYearA11yLabel","previousClicked","addCalendarMonths","nextClicked","_angular_material_datepicker__WEBPACK_IMPORTED_MODULE_5__","_angular_material_core__WEBPACK_IMPORTED_MODULE_6__","ChartCardComponent","ChartCardModule","_angular_common__WEBPACK_IMPORTED_MODULE_4__","_icon_icon_component__WEBPACK_IMPORTED_MODULE_2__","_ui_components_components_skeleton_loader_skeleton_loader_component__WEBPACK_IMPORTED_MODULE_0__","_chart_card_component__WEBPACK_IMPORTED_MODULE_1__","chart_js__WEBPACK_IMPORTED_MODULE_0__","chartjs_plugin_datalabels__WEBPACK_IMPORTED_MODULE_1__","ChartComponent","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_2__","chartService","_dashboards_models_chart_types_enum__WEBPACK_IMPORTED_MODULE_3__","itemCount","dataListBSubject","canvasBSubject","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_10__","rxjs_operators__WEBPACK_IMPORTED_MODULE_11__","rxjs_operators__WEBPACK_IMPORTED_MODULE_12__","_chartDataList","displayLegendInside","activeLegend","largestValueItem","maxItem","currentItem","dataSum","getDataSum","chart","createChart","showActiveElement","setActiveElements","datasetIndex","changeActiveSelection","clickableLabel","formattedChartData","labelActiveColor","labelBlurColor","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_4__","destroyChart","getChartConfig","chartType","destroy","ChartModule","_ui_components_components_chart_services_chart_service__WEBPACK_IMPORTED_MODULE_1__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_4__","ChartService","chatConfig","offset","datalabels","hoverOffset","getChartOptions","_dashboards_models_chart_types_enum__WEBPACK_IMPORTED_MODULE_1__","showTextTooltip","getDoughnutTextPlugin","responsive","layout","padding","enabled","_shared_enums_color_palette_enum__WEBPACK_IMPORTED_MODULE_2__","formatter","getDataLabelFormatter","cutout","xAxis","yAxis","dataList","beforeDraw","args","activeElement","getActiveElements","additionalPercentage","chartArea","right","fillStyle","textAlign","fillText","$context","raw","textPercentage","chartDataItem","getContextSum","context","dataset","CollapsibleSearchInputComponent","valueAccessor","onGlobalClick","collapsed","contains","toggle","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_5__","collapsedChange","input","expand","CustomizedSnackbarComponent","getAttribute","actionParam","MAT_SNACK_BAR_DATA","RetrievingCompanyList","SnackBarCss","NotificationPositionCss","Success","SnackbarService","snackBar","WithSidePanel","_snackBarActions$","watchForSidePanel","sidePanelService","isSidePanelExpanded$","positionCss","WithoutPanel","NoPanel","setDefaultSettings","duration","closable","defaultDuration","defaultClosable","formatOptions","openNotification","formatMessage","Failure","Info","Warning","defaultPermissionWarning","cssClass","snackBarRef","openFromComponent","_component_customized_snackbar_component__WEBPACK_IMPORTED_MODULE_0__","horizontalPosition","number","DividerComponent","DividerModule","_angular_material_divider__WEBPACK_IMPORTED_MODULE_2__","IconService","getIconTemplate","secondColor","uniqueId","uniqueSvgIconId","getSvgBeginTemplate","getPath","getSvgEndTemplate","getRectangle","y","rx","getUrlClip","getEndUrlClip","getDefsPart","getClipPath","getClipPathRect","endClipPath","endDefsPart","getCircle","cx","cy","stroke","strokeWidth","getOpenUrlClip","viewBox","getColorFill","getColorStroke","getStrokeWidth","getX","getY","IconComponent","iconService","svg","iconHeight","iconWidth","iconColor","baseColor","iconSecondColor","iconTemplate","mouseEnter","hoverColor","mouseLeave","InputErrorComponent","validationMessages","InputErrorModule","_app_modules_ui_components_components_input_error_services_input_error_service__WEBPACK_IMPORTED_MODULE_0__","InputErrorService","validator","requiredLength","chartjs_plugin_trendline__WEBPACK_IMPORTED_MODULE_2___default","LineChartComponent","_app_components_abstract_component_abstract__WEBPACK_IMPORTED_MODULE_3__","_dashboards_models_chart_types_enum__WEBPACK_IMPORTED_MODULE_4__","rxjs_operators__WEBPACK_IMPORTED_MODULE_10__","hasData","defaultConfiguration","defaultChartOptions","defaultDatasetConfiguration","LineChartModule","MultipleAttachmentsComponent","_angular_forms__WEBPACK_IMPORTED_MODULE_7__","onUploadInProgress","inProgress","isUploading","MultipleAttachmentsModule","_angular_material_button__WEBPACK_IMPORTED_MODULE_14__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_15__","_multiple_attachments_component__WEBPACK_IMPORTED_MODULE_7__","NotificationComponent","NotificationModule","_icon_icon_component__WEBPACK_IMPORTED_MODULE_0__","PictureModule","_angular_common__WEBPACK_IMPORTED_MODULE_5__","_ui_components_controls_input_area_input_area_module__WEBPACK_IMPORTED_MODULE_3__","PillListComponent","availableOptions","availableOptionsValue","isDisabled","disable","enable","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_4__","selectOption","selectable","_angular_material_chips__WEBPACK_IMPORTED_MODULE_6__","PillListModule","_angular_material_chips__WEBPACK_IMPORTED_MODULE_3__","ReadOnlyFieldComponent","ReadOnlyFieldModule","SelectTreeModule","_circlon_angular_tree_component__WEBPACK_IMPORTED_MODULE_4__","_angular_material_menu__WEBPACK_IMPORTED_MODULE_5__","_angular_material_input__WEBPACK_IMPORTED_MODULE_6__","_icon_icon_component__WEBPACK_IMPORTED_MODULE_1__","selectWindowResizeState","core_selector","selectWindowWidth","windowResizeState","SkeletonLoaderCounter","uniqueSkeletonId","SkeletonLoaderComponent","loaderType","_loader","loaderId","clipPathUrl","clipPath","updateWidthParams","containerWidth","clientHeight","svgViewportWidth","containerPadding","svgViewportHeight","listTemplateWidth","listTemplateItemOffset","pieChartTitleWidth","pieChartTitleX","cYPosition","cXPosition","cRadius","pieChartLegendDotX","pieChartLegendItemX","kanbanTitleSectionWidth","kanbanSections","kanbanTileWidth","tileOffset","kanbanTileXOffset","detailsSingleHeight","detailsSingleWidth","commentListCommentWidth","recSectionVendorWidth","recSectionAttachmentsWidth","recSectionAttachmentsBtnWidth","recSectionAttachmentsBtnOffset","recSectionExpWidth","recSectionNoteWidth","recSectionVendorsItemsXOffset","recSectionVendorsItemsWidth","calendarItemWidth","calendarSections","calendarItemOffset","calendarItemXOffset","TableStatusToggleModule","_ui_components_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_0__","_angular_material_button__WEBPACK_IMPORTED_MODULE_3__","_angular_material_checkbox__WEBPACK_IMPORTED_MODULE_4__","_angular_forms__WEBPACK_IMPORTED_MODULE_5__","showValidationErrorOrSubmitted","submitted","labelRequired","hasValidator","statusChanges","checkControlStatus","listenControlTouched","checkStatus","touched","markAsTouched","markAsUntouched","markAsPristine","markAsDirty","originalMarkAsTouched","originalReset","DateDropdownComponent","locale","_labelWidth$","labelCss","_labelCss","labelInside","labelInsideDefaultCss","labelOutsideDefaultCss","attrDisable","_labelElement","labelWidth","dateRangeConfig","DateRange","attrClickableDisable","isOpened","disabledClickEvent","dateMenuTrigger","initLabelWidth","ngAfterContentChecked","valueTyped","preparedValue","updateCursor","clickEvent","dateClass","onSelectSingleDate","hideBottomContent","selectRange","selectedRangeEvent","maskControl","DatePipe","displayMask","dateToggleMenu","openDateMenu","errorDisabledText","openMenu","labelWidth$","currentLabelWidth","filterGroupKey","labelGroupWidth$","groupWidth","onClearDate","clearDate","LOCALE_ID","MatCalendar","MAT_DATE_RANGE_SELECTION_STRATEGY","useClass","DefaultMatCalendarRangeStrategy","DateDropdownModule","_angular_material_datepicker__WEBPACK_IMPORTED_MODULE_6__","_angular_material_button__WEBPACK_IMPORTED_MODULE_7__","ngx_mask__WEBPACK_IMPORTED_MODULE_8__","_angular_material_icon__WEBPACK_IMPORTED_MODULE_10__","AutoresizeDirective","resize","formControl","appAutoresize","textArea","newHeight","scrollHeight","InputAreaComponent","custom_control_abstract","blurEvent","enter","keydownEnterEvent","observed","insertNewline","newValue","onFocusIn","focusIn","focusEvent","scrollEnabled","scrollToBottomIfScrollable","onFocusOut","scrollToTopIfScrollable","textareaEl","scrollTo","setSelectionRange","InputAreaModule","_ui_components_directives_autoresize_autoresize_module__WEBPACK_IMPORTED_MODULE_2__","_shared_directives_directives_module__WEBPACK_IMPORTED_MODULE_1__","checkSupportedFormatFunction","acceptedFormatList","getFileType","GenerateThumbnailService","generateThumbnail","generateVideoThumbnail","compressImage","captureTime","Observable","video","src","crossOrigin","muted","playsInline","isSafari","seeked","failTimeout","onloadedmetadata","pause","currentTime","clearTimeout","videoWidth","videoHeight","drawImage","toBlob","blob","thumbnail","onerror","img","Image","reader","FileReader","onload","compressCanvasToBlob","readAsDataURL","quality","InputFileComponent","fileUploadsService","generateThumbnailService","initControlChanges","initCheckControl","browseFile","clearEvent","filesDropped","uploadSelection","emitEvents","inputFileChanged","filesList","acceptedFormats","selectFilesEvent","filesToUpload","uploadingFile$","uploadingProgress$","uploadInProgress","useTwoStepUpload","uploadQueue","doTwoStepUpload","bind","doUpload","uploadMethod","getMimeType","isVideoFileByExtension","fileExtension","uploadThumbnail","thumbnailUploadResponse","uploadMainFile","response","handleUploadError","thumbnailId","thumbnailUri","generateUploadLink","encodeURIComponent","uploadFileToServer","urlToUpload","uploadUrl","xhr","XMLHttpRequest","onprogress","trackProgress","completeFileUpload","responseURL","statusText","setXhrHeaders","send","completeResponse","setRequestHeader","toUTCString","lengthComputable","progress","loaded","uploadFileProgress","HttpEventType","HttpResponse","TooltipHelpComponent","InputFileModule","input_error_module","pipes_module","directives_module","input_file_component","InputTypeFileModule","_angular_material_input__WEBPACK_IMPORTED_MODULE_7__","_shared_pipes_pipes_module__WEBPACK_IMPORTED_MODULE_2__","PlaceholderPipe","controlValue","InputComponent","keydownEnter","removeFocus","isFocused","useCurrencyFormatter","initialValue","_angular_material_form_field__WEBPACK_IMPORTED_MODULE_7__","ngx_mask__WEBPACK_IMPORTED_MODULE_9__","_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_2__","_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_3__","_shared_directives_directives_module__WEBPACK_IMPORTED_MODULE_0__","NumberInputComponent","_ui_components_controls_custom_control_abstract__WEBPACK_IMPORTED_MODULE_0__","_angular_forms__WEBPACK_IMPORTED_MODULE_2__","autoUpdate","_shared_functions_parse_number__WEBPACK_IMPORTED_MODULE_5__","decimalPart","updateControlValueManually","keyUp","simpleNumber","NumberInputModule","_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_3__","_angular_material_input__WEBPACK_IMPORTED_MODULE_9__","_angular_material_button__WEBPACK_IMPORTED_MODULE_11__","_angular_material_form_field__WEBPACK_IMPORTED_MODULE_12__","ngx_mask__WEBPACK_IMPORTED_MODULE_14__","_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_4__","_number_input_component__WEBPACK_IMPORTED_MODULE_2__","RadioButtonBottomSheetComponent","bottomSheetRef","updateFilteredItems","filteredItems","sortItemsBySelection","aSelected","isSelected","bSelected","onSearch","term","searchResults","selectedValue","onSelectionChange","multiSelect","selectedValues","selected","onAddNew","selectAll","allValues","sections","flat","clearAll","isAllSelected","toggleSelectAll","hasMultipleItems","_angular_material_bottom_sheet__WEBPACK_IMPORTED_MODULE_2__","RadioButtonDropdownComponent","bottomSheet","deviceService","viewContainerRef","initControl","_items","controlSectionItems","controlItems","transformValueList","section","sortSection","transformValue","listLoading","_listLoading","onOpenSelector","openSelector","ngSelect","_resizeObserver","contentRect","labelWidthN","initPaddingLeft","isMobileDevice","isShowDisplayValue","allowSearch","_focused","searchFunction","onSelectAll","onClearAll","addNewClicked","onToggleSwitch","collectionsSelected","switchToggled","onClear","onOpen","scrollableElementIds","toggleScrollableElementScroll","onClose","handleDropdownClick","attrPlaceholder","allowAddNew","addNewLabel","handleBottomSheetSearch","hasBackdrop","backdropClass","afterDismissed","searchTerm","compareFn","autoSortList","isNumber","isLabelInside","isNil","displayLabelAsValue","allPropertiesLabel","allPropertiesPlaceholder","switchStatus","onSelectValueContent","getCustomTransformValue","pluralizeWord","itemPlaceholder","isUndefined","unsupportedValueLabel","valueStr","portfolioPropertiesPlaceholder","multiple","single","paddingLeft$","overflowY","marginRight","viewport","NgSelectComponent","RadioButtonBottomSheetModule","collapsible_search_input_component","radio_button_bottom_sheet_component","radio_button_module","input_module","ng_select_ng_select","button_toggle","radio_button_dropdown_component","RadioButtonModule","_angular_material_radio__WEBPACK_IMPORTED_MODULE_4__","_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_1__","SlideToggleComponent","_ui_components_controls_custom_control_abstract__WEBPACK_IMPORTED_MODULE_1__","_pendingChange","viewToModelUpdate","valueChange","_angular_material_slide_toggle__WEBPACK_IMPORTED_MODULE_6__","NgForTrackByKeyDirective","trackByKey","ngForTrackByKey","ngForOf","differ","iterableDiffers","updateView","forEachAddedItem","record","$implicit","forEachRemovedItem","UserSelectDropdownComponent","enumerationValuePipe","initTooltipInfo","_isResident$","_users$","valueCss","_valueCss","optionCss","_optionCss","myOptionItem","showMyOption","myLabel","allOptionItem","showAllOption","allLabel","residentOptionItem","showAssignToResident","users$","prepareUsersList","defaultOptions","defaultOptionItems","prepareDefaultOptionItems","bothLists","userList$","vendorList$","assignee","residentList$","preparedUsers","residentListRaw","userListRaw","vendorListRaw","combinedList","userName","vendorName","vendors","UserSelectDropdownModule","_ng_select_ng_select__WEBPACK_IMPORTED_MODULE_8__","_ui_components_components_icon_icon_component__WEBPACK_IMPORTED_MODULE_4__","_ui_components_components_input_error_input_error_module__WEBPACK_IMPORTED_MODULE_5__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_10__","_shared_components_ellipsis_one_row_fade_text_component__WEBPACK_IMPORTED_MODULE_0__","_ui_components_components_divider_divider_module__WEBPACK_IMPORTED_MODULE_3__","AutoresizeModule","DragNDropCursorDirectiveModule","DragCursorDirective","cdkDrag","started","_ngneat_until_destroy__WEBPACK_IMPORTED_MODULE_1__","cursor","ended","AddBidModalComponent","FormGroup","bidAmount","vendorId","categoryId","bidDate","inProgress$","vendorList","categoryList","fileUploaded","formSubmitted","draftInvoiceFileUploadId","expenseCategoryId","addNewVendor","openNewVendorModal","company","addNewCategory","openPrompt","CreateBoardColumnModalComponent","columnName","input_component","ResponsiblePartyType","AddTicketModalComponent","ticketService","boardService","turnoversService","pmsService","turnStepScheduleService","tenantService","customBoardOption","ticketCategoryId","appointmentType","havePets","accessNotes","problemDescription","technicalNotes","resolutionComment","timeSpentLoggedManuallyInput","totalCostFormatted","totalCostStatus","paymentStatusBool","responsibleParty","sparePartId","sparePartTitle","Landlord","Unknown","getItemList","cost","isSyncWithPmsEnabled","detailedInformation","ableToResolve","boardLayoutsId","boardColumnUId","isPunchTicket","ticketType","isCostTicket","isInspectionTicket","ticketStatusTypeEnumeration","selectedStatus","initTenantData","ticketId","propertyUserListLoading$","getTurnover","isNew","isAssociated","onGetFilteredBoardList","setStatusTypes","inspectionPmsType","isEarlyAssociation","onAttachTicket","updateInProgress$","boardList$","boardList","selectedColumnId","selectedColumn","checkForServicePackageEnable","deleteTicketAttachment","attachmentItems","addTicketAttachment","originalFileName","fetchCategories","getCashedCategories","category","topics","topic","getCategoryByTopicId","topicId","clearNewTicketAttachment","formGroupDirective","checkPermissionToEdit","formValue","turnoverTicket","timeSpentLoggedManually","convertToSeconds","totalCost","parseCurrency","paymentStatus","attachFileIds","needToAddAttachment","removeFileIds","needToRemoveAttachment","boardColumnUID","onGetTicketStatusType","ticketStatusTypeValues","Resolved","ticketStatusChange","permissionToEnter","copyFileIds","needToCopyAttachment","pmsWorkOrderId","pmsWorkOrderNumber","fromServicePage","markAs","formInitialized","isPushToPMSDisabled","convertToTimeSpent","handleBoardControls","onBoardLayoutChange","onBoardScheduleTypeChange","isPushToPMS","categoryControl","topicControl","setValidators","clearValidators","updateValueAndValidity","selectedCategory","statusTypes","ticketStatusLabel","ticketStatusOptions$","Todo","InProgress","Canceled","Pending","Declined","WaitingParts","onAddNewColumnDialog","filteredConnectedBoard","boardConnections","connectedBoardIdsSet","createColumnsSelector","boardItem","turnStepSchedulesBoardIds","turnStepSchedules","costTicketsBoardColumnIds","turnStepSchedulesBoardIdsSet","costTicketsBoardColumnIdsSet","unfrozenColumns","skipStepScheduleCheck","boardColumns$","mappedBoardColumn","formData","addNewColumnToBoard","newColumnLoading$","newColumn","setColumn","updateFormColumnField","columnOptions","uuidv4","tenantData$","getCachedTenant","appointmentTypeOptions","appointmentTypesNotSupported","newColumnId","getHeader","hasPermissionToChangePms","servicePackageEnabled","FormGroupDirective","add_ticket_modal_component_decorate","NewVendorFields","AddVendorModalComponent","pendingService","VendorAndEmployee","permission","Vendor","LastName","Email","Company","PhoneNumber","UserGroupType","phoneNumberAddedAsIdentity","PhoneNumberAddedAsIdentity","emailAddedAsIdentity","EmailAddedAsIdentity","onPendingServiceChanges","onSelectUserData","initActiveUsers","initVendorRoleId","initNotifications","onEmailControlChange","onControlsAddedAsIdentifyChanges","addEmployeeControls","removeEmployeeControls","federatedIssuer","checkForDomain","phoneNumberInvalid","inviteUser","createInviteUser","employees","addresses","federatedIssuerDomains","userGroupTypeValue","addOnlyVendor","addControl","FormControl","allUsers","existingEmails","addValidators","allRoles","vendorRoleId","selectedProperty","roleId","onInviteUser","initCompanySuccess","initUserExistError","existedUserEmail","selectedRootsChange","selectedRoots","EmailPatternValidator","PhoneNumberValidator","RequiredOneOfValidator","correctEmailInput","removeControl","newValidator","pending$","takeWhile","onEmailBlur","domainExist$","domain","AddVendorUserModalComponent","saveButtonText","companyId","companyListLoading$","nativeLanguages","existingActiveEmails","existingInactiveEmails","propertiesToSelect","operationsInProgress","invitedUser","GalleryModalComponent","zoomIn","zoomOut","oneToOne","rotateLeft","rotateRight","flipHorizontal","flipVertical","deleteAttachmentInProgress$","attachmentsBSubject","getDeleteConfirmationLabels","viewer","Viewer","imagesList","viewerOptions","deleteItem","InfoModalComponent","confirm","_angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__","SkeletonModalsComponent","InputTimeManualModule","InputTimeManualComponent","daysControl","hoursControl","minutesControl","onInputChange","pad","getWidth","valueLength","AddTicketModalModule","date_dropdown_module","attachment_item_module","attachment_module","table_status_toggle_module","picture_module","user_select_dropdown_module","input_area_module","attachments_list_module","fesm2020_checkbox","button_menu_component","notification_module","add_ticket_modal_component","SelectTreeComponent","decimalPipe","mouse","checkboxClick","useCheckbox","useVirtualScroll","nodeHeight","actionMapping","updatePlaceholderAndEmit","isSuperUser","selectedNodes","treeInitialized","selectNodes","clearSelection","tree","treeModel","selectedLeafNodeIds","checkIsSuperUser","hasNodesSelected","selectionObject","propertyIdsToSelect","traverseAndCollect","toggleNodeSelection","roots","filterTree","filterNodes","allParentsName","getAncestorsName","collapseAll","expandRoot","onListOpen","onListClose","selectionValue","assign","selectedNodeIds","selectedLeaves","isRootSelected","getSelectedNodes","allCount","expandedNodeIds","expanderClick","hasChildren","onlySelectedNodes","isChecked","mappedSelectedNodeIds","getSelectedRootsRecursive","getSelectedLeavesRecursive","property_type_enum","childNode","filterString","selectParentIfNeeded","deselectAncestorsIfNeeded","isNodeSelected","nodeToCheck","parentNode","circlon_angular_tree_component","AddVendorUserModalModule","select_tree_module","add_vendor_user_modal_component","GalleryModalModule","gallery_modal_component","InfoModalModule","info_modal_component","NewBulkScopeModule","NextStepAssigneeModalModule","read_only_field_module","next_step_assignee_modal_component","PromptModalModule","prompt_modal_component","TicketPreviewModalModule","PhoneNumberInputComponent","country_phone_codes_const","defaultCode","phoneCodeControl","registerOnDisabledChange","setDisabled","parsePhoneNumber","onPhoneNumberControlChange","onPhoneCodeControlChange","phoneNumberControl","validateAndEmitValue","maskPattern","validPhoneNumberLength","defaultMaskPattern","phoneNumberRaw","notValidFormat","phone_validator","input_error_component","UserPreviewModalModule","user_preview_modal_component","AddVendorModalModule","divider_module","add_vendor_modal_component","CommentTooLongModalModule","ConfirmationModalModule","TurnoverPunchModalModule","button_module","turnover_punch_modal_component","ModalsModule","workflow_actions_service","new_turnover_modal_module","input_file_module","input_type_file_module","bottom_sheet","add_bid_modal_component","PropertyUnitSelectorModalComponent","unitsService","getProperties","onPropertyControlChange","getUnits","submit","submitted$","loadingUnit$","getUnit","getUnitById","units","units$","MatProgressSpinnerModule","i9","MatIconModule","i10","CommentTooLongModalComponent","ConfirmationModalComponent","closest","zIndex","cancelColor","hideConfirmBtn","doNotShowAgainMessage","doNotShowAgain","updateDialogHiddenState","confirmation_modal_component_decorate","propertyStateValidator","defaultEmojiRequired","tmp_b_0","question_r22","i_r29","ResidentInspectDetailsComponent","residentInspectionsService","onSubmitOptions","currentAreaIndex","residentInspection","currentArea","currentItemIndex","startIndex","totalItems","initializeForm","instructionKey","getInstructionKey","isInstructionDismissed","openInstructions","initialEmojiDetails","inspectForm","createBooleanQuestions","initialFormData","mappedImages","loadFormDataFromLocalStorageOrProcessFileUploadIds","setValidatorsBasedOnPropertyState","setValidatorsWithoutPropertyState","saveFormDataToLocalStorage","setEmojiDefault","isCommentRequired","isPhotoRequired","commentControl","fileUploadIdsControl","selectedEmoji","handleAttachment","fileData","videoDuration","videoDurationInSeconds","Promise","resolve","viewAllPhotos","images","isEditorMode","image","thumbnailFileUploadCloudUri","isPhotoViewerOpened","photo_viewer_component","deletedFileUploadIds","updatedFileUploadIds","areFileUploadIdsEqual","savedMappedImages","submitForm","isDone","scrollToFirstInvalidControl","hasChanges","updatedData","allFileUploadIds","inspectionTemplateAreaId","contentElement","classList","clearFormDataFromLocalStorage","firstInvalidControl","onSubmitSelected","instructionsSheet","closeInstructions","markInstructionAsDismissed","deepEqual","storedData","storedImages","parsedStoredData","isLocalStorageDataCorrupted","processFileUploadIds","initialEmojis","storedEmojis","initialQuestions","storedQuestions","search","ids","imageData","userClearFormDataFromLocalStorage","obj1","obj2","arr1","arr2","fileUploadIds1","fileUploadIds2","hasUnsavedData","localStorageKey","hasFormData","hasImagesData","template_editor_dialog_module","multiple_attachments_module","multiple_attachments_component","resident_inspect_details_component_decorate","ModalDialogSizes","xxs","xs","sm","md","lg","ModalsService","user_selectors","nonPmsUnitCost","hidden","isDialogHiddenByUser","openCommentTooLongModal","maxCounter","openGalleryModal","default_modal_config_constant","openNewTurnoverModal","activeProperty","isNonPms","new_turnover_modal_component","openNextStepAssigneeModal","addTicketModal","ticket_type","openPunchModal","nonPmsUnitCost$","version","environment","matConfig","openUserPreviewModal","preselect","openVendorUserModal","addBid","openPropertyUnitSelectorModal","openResidentInspectDetails","NewTurnoverModalComponent","startWorkflowStepType","noticeValidation","pmses","defaultWorkflowStepType","tomorrow","setDate","MoveOutDate","customError","selectPropertiesLoading$","unitListLoading$","newTurnoverLoadingInProgress$","UnitId","acceptChargesText","PropertyId","userUnits","getUnitList","nonPmsUnitMaxNumber","nextValue","userPropertiesList","activeProperties","otherProperties","successMessage","reloadRoute","moveOutDate","unitControlChanges","newTurnover","postTurnoverModel","dateMoveOut","unitDetailsMap","isInTurnover","navigateByUrl","skipLocationChange","allowSearchUserProperties","secondElement","NewTurnoverModalModule","_angular_common__WEBPACK_IMPORTED_MODULE_10__","_ui_components_controls_input_input_module__WEBPACK_IMPORTED_MODULE_2__","_ui_components_controls_slide_toggle_slide_toggle_component__WEBPACK_IMPORTED_MODULE_4__","_angular_material_dialog__WEBPACK_IMPORTED_MODULE_11__","_angular_forms__WEBPACK_IMPORTED_MODULE_12__","_main_application_turnovers_components_sections_turnover_date_range_turnover_date_range_module__WEBPACK_IMPORTED_MODULE_0__","_ui_components_controls_radio_button_dropdown_radio_button_dropdown_module__WEBPACK_IMPORTED_MODULE_3__","_angular_material_button__WEBPACK_IMPORTED_MODULE_13__","_angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_14__","_new_turnover_modal_component__WEBPACK_IMPORTED_MODULE_5__","NextStepAssigneeModalComponent","userService","rememberIt","getCachedPropertyUserList","workflowAction","PromptModalComponent","okButtonText","okButtonColor","cancelButtonColor","minLength","_ui_components_controls_input_input_component__WEBPACK_IMPORTED_MODULE_0__","selectPunchState","punch_reducer","selectSelectedPunch","selectPunchesByTurnoverId","TurnoverPunchFields","DueDate","getAttachmentToEntityParams","turnoverIds","applianceId","bidId","attachment_type","TurnoverPunchModalComponent","turnoverAttachment","priority","isNewPunch","turnoverUnitName$","punchLowThreshold","defaultDate","deletePunchAttachment","deleteNewPunchAttachment","newAttachment","fileId","removeAttachmentsIfNeeded","hasAttachments","each","getAttachments","addAttachment","Priority","Title","Description","attachmentAdded$","isNewTicket","addAttachmentAndWaitForSuccess$","iif","UserPreviewModalComponent","userTypeListAllowed","getUserPermissionLevel","userTypesListWithPermissions","userType","federatedIssuerAssigneeId","rootNodes","previousAddedUserId","validators","vendroRole","skipDialogClose","checkUserRole","userToPropertyRoleList","deleteUserToPropertyMappings","updateUser","currentUserProperties","currentUserPropertyIds","newUserToPropertyMappings","prepareSelectedUserToPropertyMappings","propertyToDelete","EMAIL_REGEXP","EMAIL_REGEXP_WITH_DOT","requireDot","trimmed","phoneCodeN","phoneNumberN","_shared_constants_country_phone_codes_const__WEBPACK_IMPORTED_MODULE_0__","requiredOneOf","versionInfo","__webpack_require__","APP_VERSION","AppVersionService","version_timestamp","version_number","pull","emitVersion","getCurrentVersion","sessionStorage","appVersion","getBuiltInVersionInfo","getVersion","saveCurrentVersion","now","CacheService","getCachedInfo","forceUpdate","expiredAt","cacheInfoDictionary","cachedSubject","expired","timestamp","cacheInfo","expiredFromLocalStorage","location","reload","resetCacheByKey","cacheKey","storageTimestamp","_shared_enums_local_storage_data_enum__WEBPACK_IMPORTED_MODULE_1__","expireCachedInfo","FileUploadsService","authService","requiredRatio","requiredRationMin","uploadProgress","removeFile","query","encodedFileName","blobUrl","token","_environments_environment__WEBPACK_IMPORTED_MODULE_1__","KpiService","filterKpiByType","currentMonth","moment_moment__WEBPACK_IMPORTED_MODULE_1__","fetch","dateOffset","OIDC_STORAGE_KEY_PREFIX","OidcStorageService","read","getKey","write","checkTrialDaysLeft","packageType","checkIfPackageEnabled","package_type","daysLeft","turnsPackageTrialEndOn","inspectionPackageTrialEndOn","inspectionProPackageTrialEndsOn","servicePackageTrialExpiresOn","turnsPackageEnabled","inspectionPackageEnabled","inspectionProPackageEnabled","residentPortalPackageEnabled","cannedAnswersEnabled","sparePartsPackageEnabled","residentInspectionEnabled","isTrialActive","PackageService","checkPackages","packages","checkIfPackageAvailable","checkPackagesAvailable","checkPackagesTrialDaysLeft","PmsService","_shared_enums_package_type__WEBPACK_IMPORTED_MODULE_1__","allowedPms","_shared_interfaces_pms_credential_model_interface__WEBPACK_IMPORTED_MODULE_2__","RestapiServiceWithoutTimezone","appVersionService","customTimezoneFixer","apiVersion","generateHeaders","responseType","composeRoute","customPatchData","patch","associate","put","FormData","_angular_common_http__WEBPACK_IMPORTED_MODULE_4__","requestOptions","reportProgress","getUrl","environmentUrl","headers","RestapiService","customTimezoneFixerRequest","customTimezoneFixerResponce","newBody","customTimezoneFixerResponse","createItem","getGroupList","deleteGroup","updateGroup","createGroup","downloadPriceList","portfolioOrPropertyId","uploadPriceList","SurveysService","getSurveyTemplates","saveTemplate","TenantService","cacheService","getTenant","TicketsControllerKeys","ServiceSummaryGroupType","ServiceSummaryTicketType","TicketsService","common_in_memory_updating_service","residentMode","residentList","filterToQueryParams","activeFilters","fixTimezoneForRestTicketList","rate","clientFeedbackRating","fixTimezoneForRestTicketModel","getTicketAttachment","setAttachment","getTicketsByTurnover","timezone_entity_helper","getTicketsByAssigneeId","getTicketsByPropertyId","attachmentId","getCategories","createdById","check_permission_level_function","createCategory","updateCategory","deleteCategory","getTicketCategoryList","ticketTopicList","createTopic","updateTopic","deleteTopic","timeString","seconds","getAnswers","addAnswer","editAnswer","deleteAnswer","getServiceSummaryStats","topicCategoryId","getServiceSummaryDetails","statsByAssignee","isAssignee","statsByTopic","isTopic","statsByCategory","isCategory","TurnoverSummaryQueryType","TurnoverPriorityType","TurnoverSummaryGroupType","TurnoversService","restapiWithoutTimezone","_main_application_management_pages_system_configuration_components_timezone_entity_helper__WEBPACK_IMPORTED_MODULE_1__","patchData","_main_application_management_pages_system_configuration_components_timezone_helper__WEBPACK_IMPORTED_MODULE_2__","updateMoveOutDateSortOrder","sortOrderValue","updateMoveInDateSortOrder","addUnitToBoard","deleteUnitFromBoard","patchAdditionalData","setAttachments","updateAttachment","getPropertyTurnovers","fixTimezoneForTurnoverTaskModel","getCachedPortfolioTurnovers","getPortfolioTurnovers","getArchivedPortfolioTurnovers","fixTimezoneForArchivedTurnoverTaskModel","getAllTasks","disableAutoTurnCreation","getTurnoversAttachments","getTurnoversTimers","updateTurnoversTimers","restoreTurnover","getWorkflowTemplates","recalculatePastTimerKpis","getTurnoverSummaryStats","queryType","threshold","getTurnoverSummaryDetails","_angular_core__WEBPACK_IMPORTED_MODULE_9__","UnitNonPmsService","UnitsService","UserService","getCachedUserList","getCachedUserListOptions","keyword","pageNumber","pageSize","ps","pn","isDesc","role","getPropertyUserList","userTypes","addPermissionsMap","getParamsUrl","URLSearchParams","getPortfolioUserList","getUserByPropertyIds","expireCashedUserData","getCashedUserData","getUserData","claim","getUserById","setUserData","inviteResidentUser","setResidentUserData","resendInvitationEmail","resetTempPassword","WorkflowActionsService","responsiblePartiesService","transitWorkflowStepAssignee","_ui_components_components_customized_snackbar_snackbar_message_enum__WEBPACK_IMPORTED_MODULE_2__","moveToNextStep","moveToNextStepWithDefaultAssignee","getAssignee","assigneeInfo","_shared_interfaces_turnover_interface__WEBPACK_IMPORTED_MODULE_1__","currentAssigneeId","responsiblePartyId","defaultAssigneeId","isModalOpen","isDefAndNotNull","addSubscription","subscription","subscriptions","unsubscribe","PuSubscribe","EnvironmentType","currentDomain","hostname","_environment_config__WEBPACK_IMPORTED_MODULE_0__","ver","authBaseUrl","apiUrl","openApiUrl","notificationsUrl","notificationsAllUrl","disableForm","showAuthorizeLogs","showBuildTime","showEasterEggs","deepLinkScheme","azureAuthConfig","b2cDirectory","stsBase","tenant","policyKey","stsServer","stsServerSignInEmail","stsServerSignInObjectId","clientID","b2cScopes","redirectUrl","postLogoutRedirectUrl","forgotPasswordUrl","OidcAuthModule","angular_auth_oidc_client","oidc_storage_service","authority","clientId","autoUserInfo","scope","postLogoutRedirectUri","silentRenew","useRefreshToken","forbiddenRoute","app_routes_const","unauthorizedRoute","silentRenewUrl","renewTimeBeforeTokenExpiresInSeconds","logLevel","maxIdTokenIatOffsetAllowedInSeconds","disableIdTokenValidation","triggerAuthorizationResultEvent","HttpPendingInterceptor","intercept","shouldSkipUrl","throwError","TokenInterceptor","hasIdTokenHint","returnUrl","setHeaders","Authorization","isExcludedRoute","excludedRoutes","CustomIconService","matIconRegistry","domSanitizer","registerIcons","iconName","addSvgIcon","bypassSecurityTrustResourceUrl","DeepLinkService","initializeDeepLinkHandler","events","searchParams","handleDeepLink","isDeepLinkRoute","ticketMatch","inspectionMatch","pathWithoutParams","baseScheme","deepLink","AppComponent","metaService","customIconService","iconRegistry","deepLinkService","setDefaultFontSetClass","addTag","app_component_decorate","ExternalRouteComponent","ExternalRouteResolver","queryParamMap","CheckForTokenGuard","canActivate","jwt","ErrorAuthGuard","errorDescription","permissionRequired","anyPermissionRequired","LoginRouteGuard","oidcService","_state","isAuthenticationInProgress","checkAuth","getAuthenticationResult","accessToken","loginUrlTree","parseUrl","hash","routes","loadChildren","LoginModule","AcceptTokenModule","loadComponent","NoPermissionComponent","RescheduleWidgetComponent","DoneWidgetComponent","CommentWidgetComponent","TurnoverCommentWidgetComponent","TurnoverDeclineComponent","TurnoverInprogressComponent","TurnoverAcceptComponent","AcceptWidgetComponent","RejectWidgetComponent","ApproveWidgetComponent","DenyWidgetComponent","OpenMobileAppComponent","DownloadMobileAppComponent","MainApplicationModule","redirectTo","AppRoutingModule","relativeLinkResolution","AppModule","bootstrap","animations","platform_browser","snack_bar","ngrx_store_devtools","maxAge","logOnly","environment_config","modals_module","bootstrapModule","providers","useValue","catch","webpackContext","module"],"sourceRoot":"webpack:///","sources":["./src/app/modules/shared/enums/pill-options.enum.ts","./src/app/components/abstract/component.abstract.ts","./src/app/modules/main-application/administration/abstract/administration-abstract.ts","./src/app/modules/main-application/administration/functions/get-general-roles-radio-list.function.ts","./src/app/modules/main-application/administration/constants/vendor-role-name.constant.ts","./src/app/modules/main-application/administration/functions/combineUserWithProperties.ts","./src/app/modules/main-application/administration/functions/get-filter-key.ts","./src/app/modules/main-application/administration/functions/propertyStructureToTree.ts","./src/app/modules/main-application/administration/store/actions/administration.actions.ts","./src/app/modules/main-application/administration/store/reducers/administration.reducer.ts","./src/app/modules/main-application/administration/store/selectors/administration.selectors.ts","./src/app/modules/main-application/administration/users/config/enums/user-preview.ts","./src/app/modules/main-application/application-menu/property-selector/constants.ts","./src/app/modules/main-application/boards/interfaces/board.enums.ts","./src/app/modules/main-application/boards/interfaces/board.ts","./src/app/modules/main-application/boards/non-pms-add-modal/non-pms-add-modal.component.ts","./src/app/modules/main-application/boards/non-pms-add-modal/non-pms-add-modal.component.html","./src/app/modules/main-application/boards/services/board.service.ts","./src/app/modules/main-application/boards/services/turn-step-schedule.service.ts","./src/app/modules/main-application/dashboard-reports/delinquencies/models/delinquency-fields.enum.ts","./src/app/modules/main-application/dashboard-roles/components/abstract/kpis.abstract.directive.ts","./src/app/modules/main-application/dashboard-roles/components/leasing-units-chart-card/leasing-units-chart-card.component.html","./src/app/modules/main-application/dashboard-roles/components/leasing-units-chart-card/leasing-units-chart-card.component.ts","./src/app/modules/main-application/dashboard-roles/components/leasing-units-chart-card/leasing-units-chart-card.module.ts","./src/app/modules/main-application/dashboard-roles/components/turnovers-arc-chart-card/turnovers-arc-chart-card.component.html","./src/app/modules/main-application/dashboard-roles/components/turnovers-arc-chart-card/turnovers-arc-chart-card.component.ts","./src/app/modules/main-application/dashboard-roles/components/turnovers-arc-chart-card/turnovers-arc-chart-card.module.ts","./src/app/modules/shared/constants/vacancy-loss-type-list.const.ts","./src/app/modules/main-application/dashboard-roles/components/vacancy-loss-chart-card/vacancy-loss-chart-card.component.html","./src/app/modules/main-application/dashboard-roles/components/vacancy-loss-chart-card/vacancy-loss-chart-card.component.ts","./src/app/modules/main-application/dashboard-roles/components/vacancy-loss-chart-card/vacancy-loss-chart-card.module.ts","./src/app/modules/main-application/dashboard-roles/models/chart-types.enum.ts","./src/app/modules/main-application/dashboard-roles/models/portfolio-kpi.ts","./src/app/modules/main-application/dashboard-roles/store/actions/dashboard.actions.ts","./src/app/modules/main-application/dashboard-roles/store/actions/kpi.actions.ts","./src/app/modules/main-application/dashboard-roles/store/actions/property-selector.actions.ts","./src/app/modules/main-application/dashboard-roles/store/reducers/dashboards.reducer.ts","./src/app/modules/main-application/dashboard-roles/store/reducers/kpi.reducer.ts","./src/app/modules/main-application/dashboard-roles/store/reducers/property-selector.reducer.ts","./src/app/modules/main-application/dashboard-roles/store/selectors/dashboards.selectors.ts","./src/app/modules/main-application/dashboard-roles/store/selectors/kpi.selectors.ts","./src/app/modules/main-application/dashboard-roles/store/selectors/property-selector.selectors.ts","./src/app/modules/main-application/inspections/components/inspection-add-dialog/functions/get-workflow-step-from-schedule.ts","./src/app/modules/main-application/inspections/models/inspection-type-list.const.ts","./src/app/modules/main-application/inspections/components/inspection-add-dialog/inspection-add-dialog.component.html","./src/app/modules/main-application/inspections/components/inspection-add-dialog/inspection-add-dialog.component.ts","./src/app/modules/main-application/inspections/components/inspections-list/components/inspections-summary/inspections-summary.constant.ts","./src/app/modules/main-application/inspections/components/inspections-list/constants.ts","./src/app/modules/main-application/inspections/components/inspections-list/dialogs/select-portfolio/select-portfolio.component.ts","./src/app/modules/main-application/inspections/components/inspections-list/dialogs/select-portfolio/select-portfolio.component.html","./src/app/modules/main-application/inspections/components/inspections-list/inspections-list.component.html","./src/app/modules/main-application/inspections/components/inspections-list/inspections-list.component.ts","./src/app/modules/shared/directives/is-video.directive.ts","./src/app/modules/main-application/inspections/components/photo-viewer/photo-viewer.component.html","./src/app/modules/main-application/inspections/components/photo-viewer/photo-viewer.component.ts","./src/app/modules/main-application/inspections/components/send-inspection/send-inspection.component.ts","./src/app/modules/main-application/inspections/components/send-inspection/send-inspection.component.html","./src/app/modules/main-application/inspections/models/inspection-step.model.ts","./src/app/modules/main-application/inspections/models/inspection-area.model.ts","./src/app/modules/main-application/inspections/models/inspection.model.ts","./src/app/modules/main-application/inspections/models/inspections-header.model.ts","./src/app/modules/main-application/inspections/models/inspections-views.ts","./src/app/modules/main-application/inspections/models/rest-inspections-model.interface.ts","./src/app/modules/main-application/inspections/pages/template/components/templates-manager/template-manager.service.ts","./src/app/modules/main-application/inspections/pages/template/store/template.actions.ts","./src/app/modules/main-application/inspections/pages/template/store/template.reducer.ts","./src/app/modules/main-application/inspections/pages/template/store/template.selectors.ts","./src/app/modules/main-application/inspections/services/inspection.service.ts","./src/app/modules/main-application/inspections/store/inspections.actions.ts","./src/app/modules/main-application/inspections/store/inspections.reducer.ts","./src/app/modules/main-application/inspections/store/inspections.selectors.ts","./src/app/modules/main-application/inspections/models/dynamic-inspection.model.ts","./src/app/modules/main-application/inspections/models/inspection-list.model.ts","./src/app/modules/main-application/inspections/utils/inspection-mappers.ts","./src/app/modules/main-application/management/pages/companies/store/companies.actions.ts","./src/app/modules/main-application/management/pages/companies/store/companies.reducer.ts","./src/app/modules/main-application/management/pages/companies/store/companies.selectors.ts","./src/app/modules/main-application/management/pages/portfolio/store/portfolio.actions.ts","./src/app/modules/main-application/management/pages/portfolio/store/portfolio.reducer.ts","./src/app/modules/main-application/management/pages/portfolio/store/portfolio.selectors.ts","./src/app/modules/main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service.ts","./src/app/modules/main-application/management/pages/system-configuration/components/timezone-entity-common.helper.ts","./src/app/modules/main-application/management/pages/system-configuration/components/timezone-entity.helper.ts","./src/app/modules/main-application/management/pages/system-configuration/components/timezone.helper.ts","./src/app/modules/main-application/management/pages/turnover-configuration/components/turnover-configuration-step-assignees/services/turnover-configuration-step-assignees.service.ts","./src/app/modules/main-application/management/pages/turnover-configuration/store/actions/turnover-configuration.actions.ts","./src/app/modules/main-application/management/pages/turnover-configuration/store/reducers/index.ts","./src/app/modules/main-application/management/pages/turnover-configuration/store/selectors/turnover-configuration.selectors.ts","./src/app/modules/main-application/resident/services/resident-inspections.service.ts","./src/app/modules/main-application/shared/services/common-in-memory-updating.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/custom-weight-modal/custom-weight-modal.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/custom-weight-modal/custom-weight-modal.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-area.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-area.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/animation/template-editor-animation.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/animation/template-editor-animation.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/template-editor-item.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/template-editor-item.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-base/template-editor-base.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/models/content-god-object.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-dialog.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-dialog.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-header/template-editor-header.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-header/template-editor-header.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/models/area.helper.ts","./src/app/modules/main-application/shared/template-editor-dialog/models/share-methods.function.ts","./src/app/modules/main-application/shared/template-editor-dialog/models/template-editor-model.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/animated-emoji.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/dnd-expandable.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/expand-worker.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/scoring-models.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/spare-parts.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/template-editor-dialog.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/services/templates-cache.service.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/question/template-editor-question.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/question/template-editor-question.component.html","./src/app/modules/main-application/shared/template-editor-dialog/datas/rating-group-list.data.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/rating-group-item/template-editor-rating-group-item.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/rating-group-item/template-editor-rating-group-item.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/template-editor-rating-group.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/template-editor-rating-group.component.ts","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-description/template-editor-description.component.html","./src/app/modules/main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-description/template-editor-description.component.ts","./src/app/modules/ui-components/components/wysiwyg-editor/wysiwyg-editor.module.ts","./src/app/modules/ui-components/controls/masked-number-input/masked-number-input.component.html","./src/app/modules/ui-components/controls/masked-number-input/masked-number-input.component.ts","./src/app/modules/ui-components/components/wysiwyg-editor/wysiwyg-editor.component.ts","./src/app/modules/ui-components/components/wysiwyg-editor/wysiwyg-editor.component.html","./src/app/modules/main-application/shared/template-editor-dialog/template-editor-dialog.module.ts","./src/app/modules/main-application/store/actions/enumerations.actions.ts","./src/app/modules/main-application/store/actions/file-upload.actions.ts","./src/app/modules/main-application/store/actions/route-state.action.ts","./src/app/modules/main-application/store/actions/user.actions.ts","./src/app/modules/main-application/store/actions/window-resize.actions.ts","./src/app/modules/main-application/store/reducers/hydration-meta.reducer.ts","./src/app/modules/main-application/store/reducers/enumeration.reducer.ts","./src/app/modules/main-application/store/reducers/file-upload.reducer.ts","./src/app/modules/main-application/store/reducers/user.reducer.ts","./src/app/modules/main-application/store/reducers/index.ts","./src/app/modules/main-application/store/reducers/route.reducer.ts","./src/app/modules/main-application/store/reducers/window-resize.reducer.ts","./src/app/modules/main-application/store/selectors/core.selector.ts","./src/app/modules/main-application/store/selectors/enumeration.selectors.ts","./src/app/modules/main-application/store/selectors/user.selectors.ts","./src/app/modules/main-application/turnovers/components/sections/turnover-date-range/turnover-date-range.module.ts","./src/app/modules/main-application/turnovers/components/turnover-kanban/sevices/turnover-kanban.service.ts","./src/app/modules/main-application/turnovers/config/enums/turnover-form.ts","./src/app/modules/main-application/turnovers/interfaces/vacancy-loss-attr.ts","./src/app/modules/main-application/turnovers/interfaces/vacancy-loss-threshold.ts","./src/app/modules/main-application/turnovers/store/actions/punch.actions.ts","./src/app/modules/main-application/turnovers/store/actions/turnover-bids.actions.ts","./src/app/modules/main-application/turnovers/store/actions/turnovers.actions.ts","./src/app/modules/main-application/turnovers/store/reducers/punch.reducer.ts","./src/app/modules/main-application/turnovers/store/reducers/turnover-bids.reducer.ts","./src/app/modules/main-application/turnovers/store/reducers/turnovers.reducer.ts","./src/app/modules/main-application/turnovers/store/selectors/turnover-bids.selectors.ts","./src/app/modules/main-application/turnovers/store/selectors/turnovers.selectors.ts","./src/app/modules/shared/components/button/button-menu/button-menu.component.html","./src/app/modules/shared/components/button/button-menu/button-menu.component.ts","./src/app/modules/shared/directives/text-overflow-check.directive.ts","./src/app/modules/shared/utils/dom/resize-observer.util.ts","./src/app/modules/shared/components/ellipsis-one-row/fade-text.component.html","./src/app/modules/shared/components/ellipsis-one-row/fade-text.component.ts","./src/app/modules/shared/constants/app-routes.const.ts","./src/app/modules/shared/constants/country-phone-codes.const.ts","./src/app/modules/shared/constants/debounce-time-safe-default.constant.ts","./src/app/modules/shared/constants/file-extensions.const.ts","./src/app/modules/shared/constants/inspection-type-list.const.ts","./src/app/modules/shared/constants/none-radio-option.const.ts","./src/app/modules/shared/constants/priority-type-list.const.ts","./src/app/modules/shared/constants/recurrence-period-type-list.const.ts","./src/app/modules/shared/constants/workflow-step-list.const.ts","./src/app/modules/shared/directives/content-editable.directive.ts","./src/app/modules/shared/directives/currency-formatter.directive.ts","./src/app/modules/ui-components/components/custom-tooltip/custom-tooltip.component.html","./src/app/modules/ui-components/components/custom-tooltip/custom-tooltip.component.ts","./src/app/modules/shared/directives/custom-tooltip.directive.ts","./src/app/modules/shared/directives/sortable.directive.ts","./src/app/modules/ui-components/components/custom-tooltip/custom-tooltip.module.ts","./src/app/modules/shared/directives/directives.module.ts","./src/app/modules/shared/directives/drop-zone.directive.ts","./src/app/modules/shared/directives/fade-text-on-width.directive.ts","./src/app/modules/shared/directives/have-permission.directive.ts","./src/app/modules/shared/directives/last-element.directive.ts","./src/app/modules/shared/directives/prevent-keyboard-events.directive.ts","./src/app/modules/shared/directives/scroll-element.directive.ts","./src/app/modules/shared/directives/scroll-to-required-container.directive.ts","./src/app/modules/shared/directives/scroll-to-required.directive.ts","./src/app/modules/shared/directives/sort-header.directive.ts","./src/app/modules/shared/directives/stop-propagation.directive.ts","./src/app/modules/shared/directives/tooltip.directive.ts","./src/app/modules/shared/directives/vertical-resize.directive.ts","./src/app/modules/shared/enums/animation.ts","./src/app/modules/shared/enums/attachment-component-type.enum.ts","./src/app/modules/shared/enums/attachment-type.ts","./src/app/modules/shared/enums/auditable-entity-type.ts","./src/app/modules/shared/enums/bid-status-type.ts","./src/app/modules/shared/enums/breadcrumb-theme.enum.ts","./src/app/modules/shared/enums/button-type.ts","./src/app/modules/shared/enums/color-palette.enum.ts","./src/app/modules/shared/enums/common.enum.ts","./src/app/modules/shared/enums/compare-operator.enum.ts","./src/app/modules/shared/enums/dashboard-view-type.ts","./src/app/modules/shared/enums/delinquency-result-type.ts","./src/app/modules/shared/enums/dropdown-tab.enum.ts","./src/app/modules/shared/enums/enumeration-item-fields.ts","./src/app/modules/shared/enums/field-type.ts","./src/app/modules/shared/enums/icon.enum.ts","./src/app/modules/shared/enums/kpi-type.ts","./src/app/modules/shared/enums/kpi-window-type.ts","./src/app/modules/shared/enums/loader-type.ts","./src/app/modules/shared/enums/local-storage-data.enum.ts","./src/app/modules/shared/enums/main-page-actions.ts","./src/app/modules/shared/enums/management-route.enum.ts","./src/app/modules/shared/enums/package-type.ts","./src/app/modules/shared/enums/permission-level.enum.ts","./src/app/modules/shared/enums/priority-type.ts","./src/app/modules/shared/enums/property-type.enum.ts","./src/app/modules/shared/enums/route-data.ts","./src/app/modules/shared/enums/route-path.enum.ts","./src/app/modules/shared/enums/selection-date-mode.enum.ts","./src/app/modules/shared/enums/selection-range-mode.enum.ts","./src/app/modules/shared/enums/threshold-type.ts","./src/app/modules/shared/enums/ticket-status-type.ts","./src/app/modules/shared/enums/ticket-type.ts","./src/app/modules/shared/enums/turnover-audit-mode.ts","./src/app/modules/shared/enums/update-status.ts","./src/app/modules/shared/enums/user-type.ts","./src/app/modules/shared/enums/workflow-phase-to-step.const.ts","./src/app/modules/shared/enums/workflow-phase-type.ts","./src/app/modules/shared/enums/workflow-step.enum.ts","./src/app/modules/shared/functions/check-permission-level.function.ts","./src/app/modules/shared/functions/date-utils.function.ts","./src/app/modules/shared/functions/enum-to-source-filtered.function.ts","./src/app/modules/shared/functions/enum-to-source.function.ts","./src/app/modules/shared/functions/format-address-to-string.function.ts","./src/app/modules/shared/functions/get-bid-categories-radio-list.function.ts","./src/app/modules/shared/functions/get-company-radio-list.function.ts","./src/app/modules/shared/functions/get-current-workflow-step.function.ts","./src/app/modules/shared/functions/get-date-object.function.ts","./src/app/modules/shared/functions/get-enumeration-radio-list.function.ts","./src/app/modules/shared/functions/get-next-number-item-name.ts","./src/app/modules/shared/functions/get-portfolio-properties.function.ts","./src/app/modules/shared/functions/get-time-in-step.function.ts","./src/app/modules/shared/functions/get-user-list.function.ts","./src/app/modules/shared/functions/get-utc.function.ts","./src/app/modules/shared/functions/params-compare.function.ts","./src/app/modules/shared/interfaces/params-compare-item.ts","./src/app/modules/shared/functions/parse-number.ts","./src/app/modules/shared/functions/replace-comma-to-dot.function.ts","./src/app/modules/shared/interfaces/file-mime-types.ts","./src/app/modules/shared/interfaces/file-upload.interface.ts","./src/app/modules/shared/interfaces/pms-credential-model.interface.ts","./src/app/modules/shared/interfaces/turnover.interface.ts","./src/app/modules/shared/observables/select-workflow-step.ts","./src/app/modules/shared/pipes/board-currency.pipe.ts","./src/app/modules/shared/pipes/board-type.pipe.ts","./src/app/modules/shared/pipes/boolean-to-string.pipe.ts","./src/app/modules/shared/pipes/compact.pipe.ts","./src/app/modules/shared/pipes/compare-operator.pipe.ts","./src/app/modules/shared/pipes/conditional-date.pipe.ts","./src/app/modules/shared/pipes/custom-currency-dots-commas.pipe.ts","./src/app/modules/shared/pipes/custom-currency-short-with-suffix.pipe.ts","./src/app/modules/shared/pipes/custom-currency.pipe.ts","./src/app/modules/shared/pipes/date.pipe.ts","./src/app/modules/shared/pipes/days-ago.pipe.ts","./src/app/modules/shared/pipes/days-in-step.pipe.ts","./src/app/modules/shared/pipes/days-past.pipe.ts","./src/app/modules/shared/pipes/delinquency-group-invalid.pipe.ts","./src/app/modules/shared/pipes/delinquency-pristine-group.pipe.ts","./src/app/modules/shared/pipes/elapsed-date.pipe.ts","./src/app/modules/shared/pipes/elapsed-days-mid-range.pipe.ts","./src/app/modules/shared/pipes/enumeration-user.pipe.ts","./src/app/modules/shared/pipes/enumeration-value.pipe.ts","./src/app/modules/shared/pipes/escape-html.pipe.ts","./src/app/modules/shared/pipes/field-type.pipe.ts","./src/app/modules/shared/pipes/file-mime-type.pipe.ts","./src/app/modules/shared/pipes/file-size.pipe.ts","./src/app/modules/shared/pipes/file-to-object-url.pipe.ts","./src/app/modules/shared/pipes/find-by-id.pipe.ts","./src/app/modules/shared/pipes/find-by-prop.pipe.ts","./src/app/modules/shared/pipes/format-to-avatar.pipe.ts","./src/app/modules/shared/pipes/get-current-workflow-step.pipe.ts","./src/app/modules/shared/pipes/get-from-group.pipe.ts","./src/app/modules/shared/pipes/get-percentage-value.pipe.ts","./src/app/modules/shared/pipes/get-workflow-step.pipe.ts","./src/app/modules/shared/pipes/hours-past.pipe.ts","./src/app/modules/shared/pipes/humanize.pipe.ts","./src/app/modules/shared/pipes/is-odd.pipe.ts","./src/app/modules/shared/pipes/is-user-existing.pipe.ts","./src/app/modules/shared/pipes/kanban-header-workflow-phase.pipe.ts","./src/app/modules/shared/pipes/kanban-header-workflow-step.pipe.ts","./src/app/modules/shared/pipes/kpi-header.pipe.ts","./src/app/modules/shared/pipes/kpi-task-value.pipe.ts","./src/app/modules/shared/pipes/kpi-value.pipe.ts","./src/app/modules/shared/pipes/label-available-day-in-step.pipe.ts","./src/app/modules/shared/pipes/label-day-in-step.pipe.ts","./src/app/modules/shared/pipes/label-day-since-step.pipe.ts","./src/app/modules/shared/pipes/lost-revenue.pipe.ts","./src/app/modules/shared/pipes/measure-type.pipe.ts","./src/app/modules/shared/pipes/mention-comment.pipe.ts","./src/app/modules/shared/pipes/not-empty-props-amount.pipe.ts","./src/app/modules/shared/pipes/number-validation.pipe.ts","./src/app/modules/shared/pipes/number.pipe.ts","./src/app/modules/shared/pipes/parse-float.pipe.ts","./src/app/modules/shared/pipes/phone-number.pipe.ts","./src/app/modules/shared/pipes/physical-address.pipe.ts","./src/app/modules/shared/pipes/is-save-general-role-disabled.pipe.ts","./src/app/modules/shared/pipes/is-submit-roles-and-units-disabled.pipe.ts","./src/app/modules/shared/pipes/properties-to-radio-input.pipe.ts","./src/app/modules/shared/pipes/turnover-phase-to-status.pipe.ts","./src/app/modules/shared/functions/enumeration-list-to-key-value-map.ts","./src/app/modules/shared/pipes/workflow-phase-to-progress-value.pipe.ts","./src/app/modules/shared/pipes/bid-status-type.pipe.ts","./src/app/modules/shared/pipes/day-from-date.pipe.ts","./src/app/modules/shared/pipes/enum-value-to-display-text.pipe.ts","./src/app/modules/shared/pipes/first.pipe.ts","./src/app/modules/shared/pipes/is-include.pipe.ts","./src/app/modules/shared/pipes/replace-value.pipe.ts","./src/app/modules/shared/pipes/round-value.pipe.ts","./src/app/modules/shared/pipes/starts-with.pipe.ts","./src/app/modules/shared/pipes/task-table-subsection-result-count.pipe.ts","./src/app/modules/shared/pipes/pipes.module.ts","./src/app/modules/shared/pipes/pluralization.pipe.ts","./src/app/modules/shared/pipes/pms-type-enumeration.pipe.ts","./src/app/modules/shared/pipes/priority-css.pipe.ts","./src/app/modules/shared/pipes/priority-icon.pipe.ts","./src/app/modules/shared/pipes/priority-to-css-class.pipe.ts","./src/app/modules/shared/pipes/reccurance.pipe.ts","./src/app/modules/shared/constants/empty-value.const.ts","./src/app/modules/shared/pipes/section-id.pipe.ts","./src/app/modules/shared/pipes/text-mask.pipe.ts","./src/app/modules/shared/pipes/threshold-configuration.pipe.ts","./src/app/modules/shared/pipes/threshold-priority-css.pipe.ts","./src/app/modules/shared/pipes/threshold-step-configuration.pipe.ts","./src/app/modules/shared/pipes/time-diff.pipe.ts","./src/app/modules/shared/functions/suffix.function.ts","./src/app/modules/shared/pipes/time-from-date.pipe.ts","./src/app/modules/shared/pipes/to-fixed-value.pipe.ts","./src/app/modules/shared/pipes/truncate-lengths.pipe.ts","./src/app/modules/shared/pipes/truncate-text.pipe.ts","./src/app/modules/shared/pipes/trust-html.pipe.ts","./src/app/modules/shared/pipes/turnover-attachment.pipe.ts","./src/app/modules/shared/pipes/uppercase-first-letter-of-words-pipe.ts","./src/app/modules/shared/pipes/user-display-name.pipe.ts","./src/app/modules/shared/pipes/utc-date.pipe.ts","./src/app/modules/shared/pipes/value-length.pipe.ts","./src/app/modules/shared/pipes/valueIfNonZero.pipe.ts","./src/app/modules/shared/pipes/valueIfPositive.pipe.ts","./src/app/modules/shared/pipes/workflow-phase-done.pipe.ts","./src/app/modules/shared/pipes/workflow-phase-type.pipe.ts","./src/app/modules/shared/pipes/workflow-step-done.pipe.ts","./src/app/modules/shared/pipes/workflow-step-name.pipe.ts","./src/app/modules/shared/pipes/yesEmpty.pipe.ts","./src/app/modules/shared/services/auth.service.ts","./src/app/modules/shared/services/destroy.service.ts","./src/app/modules/shared/services/device/constants/device-type.ts","./src/app/modules/shared/services/device/constants/device-size.constants.ts","./src/app/modules/shared/services/event-throttle.service.ts","./src/app/modules/shared/services/native-event.service.ts","./src/app/modules/shared/services/device/device.service.ts","./src/app/modules/shared/services/help-router.service.ts","./src/app/modules/shared/services/local-cache.service.ts","./src/app/modules/shared/services/pending.service.ts","./src/app/modules/shared/services/subjects.service.ts","./src/app/modules/shared/utils/extensions.ts","./src/app/modules/shared/utils/is-deep-equal.util.ts","./src/app/modules/shared/utils/rxjs/debounced-auto-save.rxjs.util.ts","./src/app/modules/shared/utils/rxjs/filter-nullish.rxjs.util.ts","./src/app/modules/shared/utils/rxjs/skip-equal.rxjs.util.ts","./src/app/modules/shared/utils/rxjs/value-changes.rxjs.util.ts","./src/app/modules/shared/validators/user-exists.validator.ts","./src/app/modules/shared/validators/user-inactive.validator.ts","./src/app/modules/ui-components/components/attachment-item/attachment-item.component.html","./src/app/modules/ui-components/components/attachment-item/attachment-item.component.ts","./src/app/modules/shared/functions/copy-to-clipboard.function.ts","./src/app/modules/ui-components/components/attachment-item/attachment-item.module.ts","./src/app/modules/ui-components/components/attachment/attachment.component.html","./src/app/modules/ui-components/components/attachment/attachment.component.ts","./src/app/modules/ui-components/components/attachment/attachment.module.ts","./src/app/modules/ui-components/components/attachments-list/attachments-list.component.html","./src/app/modules/ui-components/components/attachments-list/attachments-list.component.ts","./src/app/modules/ui-components/components/attachments-list/attachments-list.module.ts","./src/app/modules/ui-components/components/button/button.module.ts","./src/app/modules/ui-components/components/calendar-header/calendar-header.component.ts","./src/app/modules/ui-components/components/calendar-header/calendar-header.component.html","./src/app/modules/ui-components/components/chart-card/chart-card.component.html","./src/app/modules/ui-components/components/chart-card/chart-card.component.ts","./src/app/modules/ui-components/components/chart-card/chart-card.module.ts","./src/app/modules/ui-components/components/chart/chart.component.html","./src/app/modules/ui-components/components/chart/chart.component.ts","./src/app/modules/ui-components/components/chart/chart.module.ts","./src/app/modules/ui-components/components/chart/services/chart.service.ts","./src/app/modules/ui-components/components/collapsible-search-input/collapsible-search-input.component.ts","./src/app/modules/ui-components/components/collapsible-search-input/collapsible-search-input.component.html","./src/app/modules/ui-components/components/customized-snackbar/component/customized-snackbar.component.html","./src/app/modules/ui-components/components/customized-snackbar/component/customized-snackbar.component.ts","./src/app/modules/ui-components/components/customized-snackbar/snackbar-message.enum.ts","./src/app/modules/ui-components/components/customized-snackbar/snackbar.service.ts","./src/app/modules/ui-components/components/divider/divider.component.html","./src/app/modules/ui-components/components/divider/divider.component.ts","./src/app/modules/ui-components/components/divider/divider.module.ts","./src/app/modules/ui-components/components/icon/services/icon.service.ts","./src/app/modules/ui-components/components/icon/icon.component.html","./src/app/modules/ui-components/components/icon/icon.component.ts","./src/app/modules/ui-components/components/input-error/input-error.component.html","./src/app/modules/ui-components/components/input-error/input-error.component.ts","./src/app/modules/ui-components/components/input-error/input-error.module.ts","./src/app/modules/ui-components/components/input-error/services/input-error.service.ts","./src/app/modules/ui-components/components/line-chart/line-chart.component.html","./src/app/modules/ui-components/components/line-chart/line-chart.component.ts","./src/app/modules/ui-components/components/line-chart/line-chart.module.ts","./src/app/modules/ui-components/components/multiple-attachments/multiple-attachments.component.html","./src/app/modules/ui-components/components/multiple-attachments/multiple-attachments.component.ts","./src/app/modules/ui-components/components/multiple-attachments/multiple-attachments.module.ts","./src/app/modules/ui-components/components/notification/notification.component.html","./src/app/modules/ui-components/components/notification/notification.component.ts","./src/app/modules/ui-components/components/notification/notification.module.ts","./src/app/modules/ui-components/components/picture/picture.module.ts","./src/app/modules/ui-components/components/pill-list/pill-list.component.html","./src/app/modules/ui-components/components/pill-list/pill-list.component.ts","./src/app/modules/ui-components/components/pill-list/pill-list.module.ts","./src/app/modules/ui-components/components/read-only-field/read-only-field.component.html","./src/app/modules/ui-components/components/read-only-field/read-only-field.component.ts","./src/app/modules/ui-components/components/read-only-field/read-only-field.module.ts","./src/app/modules/ui-components/components/select-tree/select-tree.module.ts","./src/app/modules/main-application/store/selectors/window-resize.selectors.ts","./src/app/modules/ui-components/components/skeleton-loader/services/skeleton-loader.service.ts","./src/app/modules/ui-components/components/skeleton-loader/skeleton-loader.component.html","./src/app/modules/ui-components/components/skeleton-loader/skeleton-loader.component.ts","./src/app/modules/ui-components/components/table-status-toggle/table-status-toggle.module.ts","./src/app/modules/ui-components/controls/custom-control.abstract.ts","./src/app/modules/ui-components/controls/date-dropdown/date-dropdown.component.html","./src/app/modules/ui-components/controls/date-dropdown/date-dropdown.component.ts","./src/app/modules/ui-components/controls/date-dropdown/date-dropdown.module.ts","./src/app/modules/ui-components/directives/autoresize/autoresize.directive.ts","./src/app/modules/ui-components/controls/input-area/input-area.component.html","./src/app/modules/ui-components/controls/input-area/input-area.component.ts","./src/app/modules/ui-components/controls/input-area/input-area.module.ts","./src/app/modules/shared/functions/check-supported-format.function.ts","./src/app/services/generate-thumbnail.service.ts","./src/app/modules/ui-components/controls/input-file/input-file.component.html","./src/app/modules/ui-components/controls/input-file/input-file.component.ts","./src/app/modules/shared/components/tooltip-help/tooltip-help.component.ts","./src/app/modules/shared/components/tooltip-help/tooltip-help.component.html","./src/app/modules/ui-components/controls/input-file/input-file.module.ts","./src/app/modules/ui-components/controls/input-type-file/input-type-file.module.ts","./src/app/modules/shared/pipes/placeholder.pipe.ts","./src/app/modules/ui-components/controls/input/input.component.html","./src/app/modules/ui-components/controls/input/input.component.ts","./src/app/modules/ui-components/controls/input/input.module.ts","./src/app/modules/ui-components/controls/number-input/number-input.component.html","./src/app/modules/ui-components/controls/number-input/number-input.component.ts","./src/app/modules/ui-components/controls/number-input/number-input.module.ts","./src/app/modules/ui-components/controls/radio-button-dropdown/radio-button-bottom-sheet/radio-button-bottom-sheet.component.html","./src/app/modules/ui-components/controls/radio-button-dropdown/radio-button-bottom-sheet/radio-button-bottom-sheet.component.ts","./src/app/modules/ui-components/controls/radio-button-dropdown/radio-button-dropdown.component.html","./src/app/modules/ui-components/controls/radio-button-dropdown/radio-button-dropdown.component.ts","./src/app/modules/ui-components/controls/radio-button-dropdown/radio-button-bottom-sheet/radio-button-bottom-sheet.module.ts","./src/app/modules/ui-components/controls/radio-button-dropdown/radio-button-dropdown.module.ts","./src/app/modules/ui-components/controls/radio-button/radio-button.module.ts","./src/app/modules/ui-components/controls/slide-toggle/slide-toggle.component.ts","./src/app/modules/ui-components/controls/slide-toggle/slide-toggle.component.html","./src/app/modules/shared/directives/track-by-key.directive.ts","./src/app/modules/ui-components/controls/user-select-dropdown/user-select-dropdown.component.html","./src/app/modules/ui-components/controls/user-select-dropdown/user-select-dropdown.component.ts","./src/app/modules/ui-components/controls/user-select-dropdown/user-select-dropdown.module.ts","./src/app/modules/ui-components/directives/autoresize/autoresize.module.ts","./src/app/modules/ui-components/directives/drag-drop/drag-n-drop-cursor-directive.module.ts","./src/app/modules/ui-components/directives/drag-drop/drag-n-drop-cursor.directive.ts","./src/app/modules/ui-components/modals/add-bid-modal/add-bid-modal.component.html","./src/app/modules/ui-components/modals/add-bid-modal/add-bid-modal.component.ts","./src/app/modules/ui-components/modals/create-board-column-modal/create-board-column-modal.component.ts","./src/app/modules/ui-components/modals/create-board-column-modal/create-board-column-modal.component.html","./src/app/modules/ui-components/modals/add-ticket-modal/add-ticket-modal.component.html","./src/app/modules/ui-components/modals/add-ticket-modal/add-ticket-modal.component.ts","./src/app/modules/ui-components/modals/add-vendor-modal/add-vendor-modal.component.html","./src/app/modules/ui-components/modals/add-vendor-modal/add-vendor-modal.component.ts","./src/app/modules/ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.component.html","./src/app/modules/ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.component.ts","./src/app/modules/ui-components/modals/config/default-modal-config.constant.ts","./src/app/modules/ui-components/modals/config/dialog-result.enum.ts","./src/app/modules/ui-components/modals/gallery-modal/gallery-modal.component.html","./src/app/modules/ui-components/modals/gallery-modal/gallery-modal.component.ts","./src/app/modules/ui-components/modals/info-modal/info-modal.component.html","./src/app/modules/ui-components/modals/info-modal/info-modal.component.ts","./src/app/modules/ui-components/components/skeleton-modals/skeleton-modals.component.html","./src/app/modules/ui-components/components/skeleton-modals/skeleton-modals.component.ts","./src/app/modules/ui-components/controls/input-time-manual/input-time-manual.module.ts","./src/app/modules/ui-components/controls/input-time-manual/input-time-manual.component.html","./src/app/modules/ui-components/controls/input-time-manual/input-time-manual.component.ts","./src/app/modules/ui-components/modals/add-ticket-modal/add-ticket-modal.module.ts","./src/app/modules/ui-components/components/select-tree/select-tree.component.html","./src/app/modules/ui-components/components/select-tree/select-tree.component.ts","./src/app/modules/ui-components/components/select-tree/functions/tree-utils.ts","./src/app/modules/ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.module.ts","./src/app/modules/ui-components/modals/gallery-modal/gallery-modal.module.ts","./src/app/modules/ui-components/modals/info-modal/info-modal.module.ts","./src/app/modules/ui-components/modals/new-bulk-scope/new-bulk-scope.module.ts","./src/app/modules/ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.module.ts","./src/app/modules/ui-components/modals/prompt-modal/prompt-modal.module.ts","./src/app/modules/ui-components/modals/ticket-preview-modal/ticket-preview-modal.module.ts","./src/app/modules/ui-components/controls/phone-number-input/phone-number-input.component.html","./src/app/modules/ui-components/controls/phone-number-input/phone-number-input.component.ts","./src/app/modules/ui-components/modals/user-preview-modal/user-preview-modal.module.ts","./src/app/modules/ui-components/modals/add-vendor-modal/add-vendor-modal.module.ts","./src/app/modules/ui-components/modals/comment-too-long-modal/comment-too-long-modal.module.ts","./src/app/modules/ui-components/modals/confirmation-modal/confirmation-modal.module.ts","./src/app/modules/ui-components/modals/turnover-punch-modal/turnover-punch-modal.module.ts","./src/app/modules/ui-components/modals/modals.module.ts","./src/app/modules/main-application/service/components/property-unit-selector-modal/property-unit-selector-modal.component.html","./src/app/modules/main-application/service/components/property-unit-selector-modal/property-unit-selector-modal.component.ts","./src/app/modules/ui-components/modals/comment-too-long-modal/comment-too-long-modal.component.ts","./src/app/modules/ui-components/modals/comment-too-long-modal/comment-too-long-modal.component.html","./src/app/modules/ui-components/modals/confirmation-modal/confirmation-modal.component.html","./src/app/modules/ui-components/modals/confirmation-modal/confirmation-modal.component.ts","./src/app/modules/shared/validators/propertystate.validator.ts","./src/app/modules/ui-components/modals/resident-inspect-details/resident-inspect-details.component.html","./src/app/modules/ui-components/modals/resident-inspect-details/resident-inspect-details.component.ts","./src/app/modules/ui-components/modals/modals.service.ts","./src/app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.component.html","./src/app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.component.ts","./src/app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.module.ts","./src/app/modules/ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.component.html","./src/app/modules/ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.component.ts","./src/app/modules/ui-components/modals/prompt-modal/prompt-modal.component.ts","./src/app/modules/ui-components/modals/prompt-modal/prompt-modal.component.html","./src/app/modules/main-application/turnovers/store/selectors/punch.selectors.ts","./src/app/modules/shared/enums/turnover-punch-fields.enum.ts","./src/app/modules/shared/functions/ticket-attachment.utils.ts","./src/app/modules/ui-components/modals/turnover-punch-modal/turnover-punch-modal.component.html","./src/app/modules/ui-components/modals/turnover-punch-modal/turnover-punch-modal.component.ts","./src/app/modules/ui-components/modals/user-preview-modal/user-preview-modal.component.html","./src/app/modules/ui-components/modals/user-preview-modal/user-preview-modal.component.ts","./src/app/modules/main-application/administration/functions/userToPropertyMappingHandlers.ts","./src/app/modules/shared/constants/email.regexp.const.ts","./src/app/modules/ui-components/validators/email.validator.ts","./src/app/modules/ui-components/validators/phone.validator.ts","./src/app/modules/ui-components/validators/required-one-of.validator.ts","./src/app/services/app-version.service.ts","./src/app/services/cache.service.ts","./src/app/services/file-uploads.service.ts","./src/app/services/kpi.service.ts","./src/app/services/oidc-storage.service.ts","./src/app/modules/shared/functions/checkPackages.function.ts","./src/app/services/package.service.ts","./src/app/services/pms.service.ts","./src/app/services/restapi.service.ts","./src/app/services/spare-parts.service.ts","./src/app/services/surveys.service.ts","./src/app/services/tenant.service.ts","./src/app/services/tickets.service.ts","./src/app/modules/shared/functions/filter-to-query-params.function.ts","./src/app/services/turnovers.service.ts","./src/app/services/unit-non-pms.service.ts","./src/app/services/units.service.ts","./src/app/services/user.service.ts","./src/app/services/workflow-actions.service.ts","./src/app/utils/def.ts","./src/app/utils/pu-subscribe.ts","./src/environments/environment-config.ts","./src/environments/environment.dev.ts","./src/app/modules/main-application/oidc-auth/oidc-auth.module.ts","./src/app/modules/shared/interceptors/http-pending.interceptor.ts","./src/app/modules/shared/interceptors/token.interceptor.ts","./src/app/services/custom-icon.service.ts","./src/app/services/deep-link.service.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/components/external-route/external-route.component.ts","./src/app/modules/shared/guards/check-for-token.guard.ts","./src/app/modules/shared/guards/error-auth.guard.ts","./src/app/modules/shared/guards/login-route.guard.ts","./src/app/app.routing.module.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/moment/locale/ sync [/\\\\](es(\\.js)"],"sourcesContent":["export enum PillOptions {\n Below30Days = '< 30 days',\n Between30To60Days = '30-60 days',\n Between60To180Days = '61-180 days',\n Over25 = '>0.25',\n Over50 = '>0.5',\n}\n","import { ChangeDetectorRef, Directive, Input } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nimport { IDateSelectConfig } from '@app/modules/ui-components/components/date-range-dropdown/config/interfaces/date-select-config.interface';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { ChartTypes } from '@dashboards/models/chart-types.enum';\nimport { TurnoverForm } from '@main-application/turnovers/config/enums/turnover-form';\nimport { NoValue } from '@shared/constants/none-radio-option.const';\nimport { PriorityTypeListConst } from '@shared/constants/priority-type-list.const';\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { Animation } from '@shared/enums/animation';\nimport { AuditableEntityType } from '@shared/enums/auditable-entity-type';\nimport { BreadcrumbTheme } from '@shared/enums/breadcrumb-theme.enum';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { CompareOperator } from '@shared/enums/compare-operator.enum';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { DelinquencyResultType } from '@shared/enums/delinquency-result-type';\nimport { EDropdownTab } from '@shared/enums/dropdown-tab.enum';\nimport { FieldType } from '@shared/enums/field-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { LoaderType } from '@shared/enums/loader-type';\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { MainPageActions } from '@shared/enums/main-page-actions';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { PillOptions } from '@shared/enums/pill-options.enum';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { ESelectionDateMode } from '@shared/enums/selection-date-mode.enum';\nimport { ESelectionRangeMode } from '@shared/enums/selection-range-mode.enum';\nimport { TurnoverAuditMode } from '@shared/enums/turnover-audit-mode';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UserType } from '@shared/enums/user-type';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\n\n@Directive()\nexport abstract class ComponentAbstract extends PuSubscribable {\n /*\n * For now there's no way to subscribe to FormControl.touched changes\n * so it needs to be passed as param to trigger view update (due to ChangeDetectionStrategy.OnPush)\n * hopefully this field could be removed with v14 - https://github.com/angular/angular/issues/10887\n */\n @Input() showValidationError = false;\n @Input() displayErrorContent = true;\n\n EIcon = EIcon;\n EColorPalette = EColorPalette;\n EDropdownTab = EDropdownTab;\n ESelectionDateMode = ESelectionDateMode;\n ESelectionRangeMode = ESelectionRangeMode;\n\n readonly tabConfig: IDateSelectConfig[] = [\n {\n index: this.EDropdownTab.PREDEFINED,\n label: 'Predefined',\n },\n {\n index: this.EDropdownTab.OWN,\n label: 'Own settings',\n },\n ];\n readonly workflowStepList: IRadioButtonOption[] = WorkflowStepListConst;\n readonly priorityTypeList: IRadioButtonOption[] = PriorityTypeListConst;\n readonly NoValue = NoValue;\n\n @Input() isExpanded = false;\n @Input() isHideArrow = false;\n isActive = false;\n invalid = false;\n isDisabled = false;\n errors: ValidationErrors;\n currentTab: EDropdownTab = EDropdownTab.PREDEFINED;\n tenantData: TenantData;\n userData: UserData;\n userData$: Observable;\n isAuthenticated = false;\n dashboardViewType$: Observable;\n dashboardViewType: DashboardViewType;\n isLoading$: Observable;\n isEmptyValue = false;\n\n protected constructor(protected cdr: ChangeDetectorRef) {\n super();\n }\n\n get RoutePath(): typeof RoutePath {\n return RoutePath;\n }\n\n get WorkflowPhaseType(): typeof WorkflowPhaseType {\n return WorkflowPhaseType;\n }\n\n get MainPageActions(): typeof MainPageActions {\n return MainPageActions;\n }\n\n get BreadcrumbTheme(): typeof BreadcrumbTheme {\n return BreadcrumbTheme;\n }\n\n get PermissionLevelType(): typeof PermissionLevelType {\n return PermissionLevelType;\n }\n\n get WorkflowStep(): typeof WorkflowStepEnumType {\n return WorkflowStepEnumType;\n }\n\n get PillOptions(): typeof PillOptions {\n return PillOptions;\n }\n\n get CompareOperator(): typeof CompareOperator {\n return CompareOperator;\n }\n\n get ChartTypes(): typeof ChartTypes {\n return ChartTypes;\n }\n\n get UserType(): typeof UserType {\n return UserType;\n }\n\n get AuditableEntityType(): typeof AuditableEntityType {\n return AuditableEntityType;\n }\n\n get FieldType(): typeof FieldType {\n return FieldType;\n }\n\n get UpdateStatus(): typeof UpdateStatus {\n return UpdateStatus;\n }\n\n get DelinquencyResultType(): typeof DelinquencyResultType {\n return DelinquencyResultType;\n }\n\n get TurnoverForm(): typeof TurnoverForm {\n return TurnoverForm;\n }\n\n get LoaderType(): typeof LoaderType {\n return LoaderType;\n }\n\n get Animation(): typeof Animation {\n return Animation;\n }\n\n get TurnoverAuditMode(): typeof TurnoverAuditMode {\n return TurnoverAuditMode;\n }\n\n get ButtonType(): typeof ButtonType {\n return ButtonType;\n }\n\n get LocalStorageDataEnum(): typeof LocalStorageDataEnum {\n return LocalStorageDataEnum;\n }\n\n get ManagementRoute(): typeof ManagementRoute {\n return ManagementRoute;\n }\n\n get WorkflowStepEnumType(): typeof WorkflowStepEnumType {\n return WorkflowStepEnumType;\n }\n\n toggleMenu(menuExpanded: boolean) {\n this.isExpanded = menuExpanded;\n this.cdr.detectChanges();\n }\n\n trackByFn(index: number, item?: any) {\n return item.id;\n }\n}\n","import { ChangeDetectorRef, Directive, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { setGeneralRoleRadioList } from '@main-application/administration/store/actions/administration.actions';\nimport {\n selectAllGeneralRoles,\n selectGeneralRoleRadioList,\n} from '@main-application/administration/store/selectors/administration.selectors';\nimport { UserType } from '@shared/enums/user-type';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nimport { getGeneralRoleRadioList } from '../functions/get-general-roles-radio-list.function';\n\n@UntilDestroy()\n@Directive()\nexport abstract class AdministrationAbstract extends ComponentAbstract {\n route = inject(ActivatedRoute);\n router = inject(Router);\n isLoading = true;\n\n inProgress$: Observable;\n\n userRoles: IRadioButtonOption[] = [];\n\n userStates: IRadioButtonOption[] = [\n {\n value: true,\n label: 'Active',\n },\n {\n value: false,\n label: 'Inactive',\n },\n ];\n\n userTypes: IRadioButtonOption[] = [\n {\n value: UserType.Contractor,\n label: 'Contractor',\n },\n {\n value: UserType.Employee,\n label: 'Employee',\n },\n ];\n isResident: boolean;\n\n protected constructor(protected cdr: ChangeDetectorRef, protected store: Store<{}>) {\n super(cdr);\n this.route.queryParams\n .pipe(untilDestroyed(this))\n .subscribe(params => {\n this.isResident = !!this.route.snapshot?.data?.['isResident'];\n })\n .untilDestroyed(this);\n }\n\n selectAllGeneralRoles(): Observable {\n return this.store.select(selectAllGeneralRoles).pipe(\n untilDestroyed(this),\n filter((generalRoles: GeneralRole[]) => !!generalRoles),\n tap((generalRoles: GeneralRole[]) => {\n this.store.dispatch(setGeneralRoleRadioList({ generalRoleRadioList: getGeneralRoleRadioList(generalRoles) }));\n })\n );\n }\n\n selectGeneralRoleRadioList(): Observable[]> {\n return this.store.select(selectGeneralRoleRadioList).pipe(\n untilDestroyed(this),\n filter((generalRoleRadioList: IRadioButtonOption[]) => !!generalRoleRadioList),\n tap((generalRoleRadioList: IRadioButtonOption[]) => {\n this.userRoles = generalRoleRadioList;\n this.cdr.detectChanges();\n })\n );\n }\n}\n","import { GeneralRole } from '@shared/interfaces/general-role';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getGeneralRoleRadioList(generalRoles: GeneralRole[]): IRadioButtonOption[] {\n return generalRoles.map(item => {\n return {\n value: item.id,\n label: item.roleName,\n };\n });\n}\n","export const VENDOR_ROLE_NAME = 'Vendor';\n","import { every, filter, find, first, map, size, some } from 'lodash';\n\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithProperties } from '@shared/interfaces/user-with-properties';\n\nexport function combineUserWithProperties(\n userId: number,\n allProperties: PropertyBasicInfo[],\n propertyMapping: UserToPropertyMapping[]\n) {\n const userPropertiesMappings = filter(propertyMapping, { userId });\n const userMappedProperties = map(userPropertiesMappings, mapping => {\n return find(allProperties, { id: mapping.propertyId });\n });\n return filter(userMappedProperties, userProperty => !!userProperty);\n}\n\nexport function compareAllUsersProperties(users: UserWithProperties[]) {\n const firstUser = first(users);\n return every(users, user => {\n return (\n !!user.userProperties === !!firstUser.userProperties &&\n size(user.userProperties) === size(firstUser.userProperties) &&\n every(user.userProperties, property => some(firstUser.userProperties, { id: property.id }))\n );\n });\n}\n","import { UserFilter } from '@shared/interfaces/user.interface';\n\nexport default function getFilterKey(filter: UserFilter): string {\n return JSON.stringify(filter || {});\n}\n","import { cloneDeep, forEach, reduce } from 'lodash';\n\nimport { PropertyBasicInfo, PropertyBasicInfoNode } from '@shared/interfaces/propertyBasicInfo';\n\nexport function formatPropertyStructureToTree(allProperties: PropertyBasicInfo[]) {\n const root = {\n children: [],\n name: 'All',\n id: -1,\n } as unknown as PropertyBasicInfoNode;\n const properties: PropertyBasicInfoNode[] = cloneDeep(allProperties);\n const propertiesIndexMap = reduce(\n properties,\n (result, singleProperty, index) => {\n result[singleProperty.id] = index;\n return result;\n },\n {}\n );\n\n forEach(properties, singleProperty => {\n if (!singleProperty.parentId) {\n singleProperty.parent = root;\n root.children = [...root.children, singleProperty];\n return;\n }\n\n const parentIndex = propertiesIndexMap[singleProperty.parentId];\n const parent = properties[parentIndex];\n if (parent === undefined) {\n console.warn(\n \"couldn't find parent for element \",\n singleProperty.id,\n ' with parentId = ',\n singleProperty.parentId\n );\n return;\n }\n singleProperty.parent = parent;\n parent.children = [...(parent.children || []), singleProperty];\n });\n\n return [sortTreeByName(root)];\n}\n\ninterface TreeNode {\n name: string;\n children?: T[];\n}\n\nexport function sortTreeByName>(node: T): T {\n if (!node.children?.length) {\n return {\n ...node,\n };\n }\n const sortedNode: T = {\n ...node,\n children: [...node.children],\n };\n sortedNode.children.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true, sensitivity: 'base' }));\n sortedNode.children = sortedNode.children.map(child => sortTreeByName(child));\n return sortedNode;\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { GeneralRoleModel } from '@shared/enums/general-role-model';\nimport { UserPermissionsMap, UserType } from '@shared/enums/user-type';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { GeneralRoleToPermissionLevel } from '@shared/interfaces/general-role-to-permission-level';\nimport { PermissionLevel } from '@shared/interfaces/permission-level';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserToGeneralRoleMapping } from '@shared/interfaces/user-to-general-role-mapping';\nimport { UserToGeneralRoleModel } from '@shared/interfaces/user-to-general-role-model';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport {\n InviteResidentUserModel,\n InviteRestUserModel,\n RestUserModel,\n UpdateResidentUserModel,\n UpdateRestUserModel,\n UserFilter,\n} from '@shared/interfaces/user.interface';\n\nexport const loadAllUsers = createAction(\n '[Administration] Load all users',\n props<{ filter?: UserFilter; needRefresh?: boolean }>()\n);\n\nexport const loadAllUsersSucceeded = createAction(\n '[Administration] Load all users succeeded',\n props<{ activeUsers: RestUserModel[]; inactiveUsers: RestUserModel[]; filter: UserFilter }>()\n);\n\nexport const loadAllUsersFailed = createAction(\n '[Administration] Load all users failed',\n props<{ users: RestUserModel[] }>()\n);\n\nexport const loadPortfolioUsers = createAction('[Administration] loadPortfolioUsers', props<{ portfolioId: number }>());\n\nexport const loadPortfolioUsersSucceeded = createAction(\n '[Administration] loadPortfolioUsersSucceeded succeeded',\n props<{ activeUsers: RestUserModel[]; inactiveUsers: RestUserModel[] }>()\n);\n\nexport const loadPropertyUsers = createAction(\n '[Administration] Load property users',\n props<{ propertyId: number; userTypes?: UserType[]; addPermissionsMap?: UserPermissionsMap[] }>()\n);\n\nexport const loadPropertyUsersSucceeded = createAction(\n '[Administration] Load property users succeeded',\n props<{ activePropertyUsers: RestUserModel[]; inactivePropertyUsers: RestUserModel[] }>()\n);\nexport const loadPropertyUsersFailed = createAction('[Administration] Load property users failed');\n\nexport const clearAllUsers = createAction('[Administration] Clear all users');\n\nexport const loadAllPropertyRoles = createAction('[Administration] Load all properties roles');\n\nexport const clearAllPropertiesRoles = createAction('[Administration] Clear all properties roles');\n\nexport const loadAllPropertiesRolesSucceeded = createAction(\n '[Administration] Load all properties roles succeeded',\n props<{ result: any }>()\n);\n\nexport const loadAllUserToPropertyMappings = createAction('[Administration] Load all user to property mappings');\n\nexport const clearAllUserToPropertyMappings = createAction('[Administration] Clear all user to property mappings');\n\nexport const loadAllUserToProperyMappingsSucceeded = createAction(\n '[Administration] Load all user to property mappings succeeded',\n props<{ userToPropertyMapping: UserToPropertyMapping[] }>()\n);\n\nexport const loadAllPermissionLevels = createAction('[Administration] Load all permission levels');\n\nexport const loadAllPermissionLevelsSucceeded = createAction(\n '[Administration] Load all permission levels succeeded',\n props<{ result: PermissionLevel[] }>()\n);\n\nexport const loadAllGeneralRolesToPermissionMapping = createAction(\n '[Administration] Load all general roles to permission mapping'\n);\n\nexport const loadAllGeneralRolesToPermissionMappingSucceeded = createAction(\n '[Administration] Load all general roles to permission mapping succeeded',\n props<{ result: GeneralRoleToPermissionLevel[] }>()\n);\n\nexport const loadUserToRoleMapping = createAction('[Administration] Load user to role mapping');\n\nexport const loadUserToRoleMappingSucceeded = createAction(\n '[Administration] Load user to general role mapping succeeded',\n props<{ userToGeneralRole: UserToGeneralRoleMapping[] }>()\n);\n\nexport const clearUserToRoleMapping = createAction('[Administration] Clear user to role mapping');\n\nexport const setSelectedUsers = createAction(\n '[Administration] Set selected users',\n props<{ users: UserWithGeneralRole[] }>()\n);\n\nexport const loadAllGeneralRoles = createAction('[Administration] Load all general roles');\n\nexport const loadAllGeneralRolesSucceeded = createAction(\n '[Administration] Load all general roles succeeded',\n props<{ generalRoles: GeneralRole[] }>()\n);\n\nexport const clearAllGeneralRoles = createAction('[Administration] Clear all general roles');\n\nexport const setAllUsersCombinedWithGeneralRoles = createAction(\n '[Administration] Set all users combined with general roles',\n props<{ usersWithGeneralRoles: UserWithGeneralRole[] }>()\n);\n\nexport const loadPropertiesStructure = createAction('[Administration] Load properties structure');\n\nexport const clearPropertiesStructure = createAction('[Administration] Clear all properties structure');\n\nexport const loadPropertiesStructureSucceeded = createAction(\n '[Administration] Load properties structure succeeded',\n props<{ propertiesStructure: PropertyBasicInfo[] }>()\n);\n\nexport const startAddNewUser = createAction('[Administration] Start adding new user', props<{ user: RestUserModel }>());\n\nexport const addingNewUserSucceeded = createAction(\n '[Administration] Adding new user succeeded',\n props<{ user: RestUserModel }>()\n);\n\nexport const addingNewUserFailed = createAction('[Administration] Adding new user failed');\n\nexport const clearAddedUser = createAction('[Administration] clear Added User');\n\n/**\n * assign user into property\n */\nexport const assignUserToProperty = createAction(\n '[Administration] assign User to Property',\n props<{ userToPropertyRoleList: UserToPropertyMapping[] }>()\n);\nexport const assignUserToPropertySuccess = createAction('[Administration] assign User to Property Success');\nexport const assignUserToPropertyError = createAction('[Administration] assign User to Property Error');\n\n/**\n * removing property assigned user\n */\nexport const removingPropertyAssignedUser = createAction(\n '[Administration] removing property assigned user',\n props<{ deleteUserToPropertyMappings: number[] }>()\n);\nexport const removingPropertyAssignedUserSuccess = createAction(\n '[Administration] removing property assigned user success'\n);\nexport const removingPropertyAssignedUserError = createAction('[Administration] removing property assigned user error');\n\nexport const requestFailure = createAction('[Administration] Request failure', props());\n\nexport const saveUsersRolesAndUnits = createAction(\n '[Administration] Start saving users roles and units',\n props<{ userToGeneralRole: UserToGeneralRoleModel[]; userToPropertyRole: UserToPropertyMapping[] }>()\n);\n\nexport const saveUsersRolesAndUnitsSucceeded = createAction('[Administration] Saving users roles and units succeeded');\n\nexport const selectGeneralRoleToEdit = createAction(\n '[Administration] Select general role to edit',\n props<{ generalRole: GeneralRole }>()\n);\n\nexport const startDeleteGeneralRole = createAction('[Administration] Start delete general role', props());\n\nexport const deleteGeneralRoleSucceeded = createAction(\n '[Administration] Delete general role succeded',\n props()\n);\n\nexport const deleteGeneralRoleFailed = createAction('[Administration] Delete general role failed', props());\n\nexport const clearSelectedGeneralRole = createAction('[Administration] Clear selected general role');\n\nexport const startSavingGeneralRole = createAction(\n '[Administration] Start saving general role',\n props<{ generalRole: GeneralRoleModel }>()\n);\n\nexport const savingGeneralRoleSucceeded = createAction('[Administration] Saving general role succeded');\n\nexport const savingGeneralRoleFailed = createAction('[Administration] Saving general role failed');\n\nexport const startUpdatingGeneralRole = createAction(\n '[Administration] Start updating general role',\n props<{ generalRole: GeneralRoleModel }>()\n);\n\nexport const updatingGeneralRoleSucceeded = createAction('[Administration] Updating general role succeded');\n\nexport const updatingGeneralRoleFailed = createAction('[Administration] Updating general role failed');\n\nexport const setGeneralRoleRadioList = createAction(\n '[Administration] set General Role Radio List',\n props<{ generalRoleRadioList: IRadioButtonOption[] }>()\n);\n\n/**\n * invite new user\n */\nexport const inviteNewUser = createAction(\n '[Administration] invite new user',\n props<{\n user: InviteRestUserModel;\n roleId: number;\n selectedProperty: number[];\n }>()\n);\nexport const inviteNewUserSuccess = createAction(\n '[Administration] invite new user success',\n props<{ user: RestUserModel }>()\n);\nexport const inviteNewUserError = createAction('[Administration] invite new user error');\n\n/**\n * Update user data\n */\nexport const updateUserData = createAction(\n '[Administration] update User Data',\n props<{\n user: UpdateRestUserModel;\n roleId: number;\n userToPropertyRoleList: UserToPropertyMapping[];\n deleteUserToPropertyMappings: number[];\n }>()\n);\nexport const updateUserDataSuccess = createAction('[Administration] update User Data success');\nexport const updateUserDataError = createAction('[Administration] update User Data error');\n\n/**\n * save User To General Role\n */\nexport const saveUserToGeneralRole = createAction(\n '[Administration] save User To General Role',\n props<{ usersToGeneralRoleList: UserToGeneralRoleModel[] }>()\n);\nexport const saveUserToGeneralRoleSuccess = createAction('[Administration] save User To General Role success');\nexport const saveUserToGeneralRoleError = createAction('[Administration] save User To General Role error');\n\nexport const clearUserPreviewData = createAction('[Administration] clear User Preview Data');\n\nexport const removeUser = createAction('[Administration] remove user', props<{ user: UserWithGeneralRole }>());\nexport const reactivateUser = createAction('[Administration] reactivate user', props<{ user: UserWithGeneralRole }>());\nexport const removeUserSucceeded = createAction('[Administration] remove user succeeded');\nexport const reactivateUserSucceeded = createAction('[Administration] reactivate user succeeded');\nexport const removeUserFailed = createAction('[Administration] remove user failed');\n\n/**\n * invite new resident user\n */\nexport const inviteNewResidentUser = createAction(\n '[Administration] invite new resident user',\n props<{ user: InviteResidentUserModel; roleId: number }>()\n);\nexport const inviteNewResidentUserSuccess = createAction(\n '[Administration] invite new resident user success',\n props<{ user: RestUserModel }>()\n);\nexport const inviteNewResidentUserError = createAction('[Administration] invite new resident user error');\n\n/**\n * Update resident user data\n */\nexport const updateResidentUserData = createAction(\n '[Administration] update resident user data',\n props<{ user: UpdateResidentUserModel; roleId: number }>()\n);\nexport const updateResidentUserDataSuccess = createAction('[Administration] update resident user data success');\nexport const updateResidentUserDataError = createAction('[Administration] update resident user data error');\n\nexport const setUserListFilter = createAction('[Administration] userListFilter', props>());\n","import { createReducer, on } from '@ngrx/store';\n\nimport getFilterKey from '@main-application/administration/functions/get-filter-key';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { getUserOrVendorList } from '@shared/functions/get-user-list.function';\nimport { GeneralRole } from '@shared/interfaces/general-role';\nimport { GeneralRoleToPermissionLevel } from '@shared/interfaces/general-role-to-permission-level';\nimport { PermissionLevel } from '@shared/interfaces/permission-level';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserToGeneralRoleMapping } from '@shared/interfaces/user-to-general-role-mapping';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { RestUserModel, UserFilter } from '@shared/interfaces/user.interface';\n\nimport * as AdministrationActions from '../actions/administration.actions';\nimport { savingGeneralRoleFailed, setUserListFilter } from '../actions/administration.actions';\n\nexport const administrationFeatureKey = 'administration';\n\nexport interface IAdministrationStateTree {\n readonly [administrationFeatureKey]: State;\n}\n\nexport interface State {\n portfolioActiveUsers: RestUserModel[];\n portfolioInactiveUsers: RestUserModel[];\n portfolioUsersLoading: boolean;\n\n activeUsers: RestUserModel[];\n activeUserOrVendorOptionsList: IRadioButtonOption[];\n inactiveUsers: RestUserModel[];\n cachedUsers: { [filterKey: string]: RestUserModel[] };\n\n usersLoading: boolean;\n activePropertyUsers: RestUserModel[];\n propertyUsersLoading: boolean;\n permissionLevels: PermissionLevel[];\n generalRolesToPermissionMapping: GeneralRoleToPermissionLevel[];\n propertiesRoles: any;\n userToGeneralRole: UserToGeneralRoleMapping[];\n selectedUsers: UserWithGeneralRole[];\n generalRoles: GeneralRole[];\n usersWithGeneralRoles: UserWithGeneralRole[];\n usersWithGeneralRolesLoading: boolean;\n propertiesStructure: PropertyBasicInfo[];\n\n addNewUserInProgress: boolean;\n addedUser: RestUserModel;\n deleteGeneralRoleInProgress: boolean;\n selectedGeneralRole: GeneralRole;\n saveGeneralRoleInProgress: boolean;\n userToPropertyMapping: UserToPropertyMapping[];\n generalRoleRadioList: IRadioButtonOption[];\n\n userUpdateInProgress: boolean;\n userUpdateStatus: UpdateStatus;\n\n userInviteInProgress: boolean;\n userInviteStatus: UpdateStatus;\n userInvited: RestUserModel | null;\n\n saveUserToGeneralRoleInProgress: boolean;\n saveUserToGeneralRoleStatus: UpdateStatus;\n\n assignUserIntoPropertyInProgress: boolean;\n assignUserIntoPropertyStatus: UpdateStatus;\n\n removingPropertyAssignedUserInProgress: boolean;\n removingPropertyAssignedUserStatus: UpdateStatus;\n removeUserInProgress: boolean;\n userListFilter: Partial;\n}\n\nexport const initialState: State = {\n portfolioActiveUsers: [],\n portfolioInactiveUsers: [],\n portfolioUsersLoading: false,\n\n addNewUserInProgress: false,\n addedUser: null,\n deleteGeneralRoleInProgress: false,\n generalRoles: [],\n generalRolesToPermissionMapping: [],\n permissionLevels: [],\n propertiesRoles: null,\n propertiesStructure: [],\n activePropertyUsers: [],\n propertyUsersLoading: false,\n saveGeneralRoleInProgress: false,\n\n selectedGeneralRole: null,\n selectedUsers: [],\n userToGeneralRole: [],\n userToPropertyMapping: [],\n activeUsers: [],\n activeUserOrVendorOptionsList: [],\n inactiveUsers: [],\n cachedUsers: {},\n usersLoading: false,\n usersWithGeneralRoles: [],\n usersWithGeneralRolesLoading: false,\n\n generalRoleRadioList: [],\n\n userUpdateInProgress: false,\n userUpdateStatus: null,\n\n userInviteInProgress: false,\n userInviteStatus: null,\n userInvited: null,\n\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: null,\n\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: null,\n\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: null,\n removeUserInProgress: false,\n userListFilter: {},\n};\n\nexport const reducer = createReducer(\n initialState,\n\n on(AdministrationActions.loadAllUsers, (state, action) => ({\n ...state,\n usersLoading: true,\n usersWithGeneralRolesLoading: true,\n })),\n on(AdministrationActions.loadAllUsersSucceeded, (state, action) => {\n const users = [...action.activeUsers, ...action.inactiveUsers];\n\n return {\n ...state,\n activeUsers: action.activeUsers,\n activeUserOrVendorOptionsList: getUserOrVendorList(action.activeUsers),\n inactiveUsers: action.inactiveUsers,\n usersLoading: false,\n cachedUsers: {\n ...state.cachedUsers,\n [getFilterKey(action.filter)]: users,\n },\n };\n }),\n on(AdministrationActions.loadPortfolioUsers, (state, action) => ({\n ...state,\n portfolioUsersLoading: true,\n })),\n on(AdministrationActions.loadPortfolioUsersSucceeded, (state, action) => ({\n ...state,\n portfolioActiveUsers: action.activeUsers,\n portfolioInactiveUsers: action.inactiveUsers,\n portfolioUsersLoading: false,\n })),\n on(AdministrationActions.loadAllUsersFailed, (state, action) => ({ ...state, users: [], usersLoading: false })),\n on(AdministrationActions.clearAllUsers, (state, action) => ({ ...state, users: null })),\n\n on(AdministrationActions.loadPropertyUsers, (state, action) => ({\n ...state,\n activePropertyUsers: [],\n propertyUsersLoading: true,\n })),\n on(AdministrationActions.loadPropertyUsersSucceeded, (state, action) => ({\n ...state,\n activePropertyUsers: action.activePropertyUsers,\n propertyUsersLoading: false,\n })),\n on(AdministrationActions.loadPropertyUsersFailed, (state, action) => ({\n ...state,\n activePropertyUsers: [],\n propertyUsersLoading: false,\n })),\n\n on(AdministrationActions.loadAllPermissionLevelsSucceeded, (state, action) => ({\n ...state,\n permissionLevels: action.result,\n })),\n on(AdministrationActions.loadAllGeneralRolesToPermissionMappingSucceeded, (state, action) => ({\n ...state,\n generalRolesToPermissionMapping: action.result,\n })),\n on(AdministrationActions.loadAllPropertiesRolesSucceeded, (state, action) => ({\n ...state,\n propertiesRoles: action.result,\n })),\n on(AdministrationActions.clearAllPropertiesRoles, (state, action) => ({ ...state, propertiesRoles: undefined })),\n on(AdministrationActions.loadUserToRoleMappingSucceeded, (state, action) => ({\n ...state,\n userToGeneralRole: action.userToGeneralRole,\n })),\n on(AdministrationActions.setSelectedUsers, (state, action) => ({ ...state, selectedUsers: action.users })),\n on(AdministrationActions.loadAllGeneralRolesSucceeded, (state, action) => ({\n ...state,\n generalRoles: action.generalRoles,\n })),\n on(AdministrationActions.clearAllGeneralRoles, (state, action) => ({ ...state, generalRoles: undefined })),\n on(AdministrationActions.setAllUsersCombinedWithGeneralRoles, (state, action) => ({\n ...state,\n usersWithGeneralRoles: action.usersWithGeneralRoles,\n usersWithGeneralRolesLoading: false,\n })),\n on(AdministrationActions.clearPropertiesStructure, (state, action) => ({ ...state, propertiesStructure: undefined })),\n on(AdministrationActions.loadPropertiesStructureSucceeded, (state, action) => ({\n ...state,\n propertiesStructure: action.propertiesStructure,\n })),\n on(AdministrationActions.saveUsersRolesAndUnits, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: true,\n saveUserToPropertyInProgress: true,\n })),\n on(setUserListFilter, (state, action) => ({\n ...state,\n userListFilter: action,\n })),\n\n /**\n * assign user into property\n */\n on(AdministrationActions.assignUserToProperty, (state, action) => ({\n ...state,\n assignUserIntoPropertyInProgress: true,\n assignUserIntoPropertyStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(AdministrationActions.assignUserToPropertySuccess, (state, action) => ({\n ...state,\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: UpdateStatus.UPDATED,\n })),\n on(AdministrationActions.assignUserToPropertyError, (state, action) => ({\n ...state,\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * removing property assigned user\n */\n on(AdministrationActions.removingPropertyAssignedUser, (state, action) => ({\n ...state,\n removingPropertyAssignedUserInProgress: true,\n removingPropertyAssignedUserStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(\n AdministrationActions.removingPropertyAssignedUserSuccess,\n AdministrationActions.removingPropertyAssignedUserError,\n (state, action) => ({\n ...state,\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: UpdateStatus.DELETED,\n })\n ),\n on(\n AdministrationActions.removingPropertyAssignedUserSuccess,\n AdministrationActions.removingPropertyAssignedUserError,\n (state, action) => ({\n ...state,\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: UpdateStatus.ERROR,\n })\n ),\n\n /**\n * save User To General Role\n */\n on(AdministrationActions.saveUserToGeneralRole, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: true,\n saveUserToGeneralRoleStatus: UpdateStatus.IN_PROGRESS,\n })),\n\n on(AdministrationActions.saveUserToGeneralRoleSuccess, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: UpdateStatus.UPDATED,\n })),\n\n on(AdministrationActions.saveUserToGeneralRoleError, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: UpdateStatus.ERROR,\n })),\n\n on(AdministrationActions.clearUserToRoleMapping, (state, action) => ({\n ...state,\n saveUserToGeneralRoleInProgress: undefined,\n })),\n\n on(\n AdministrationActions.assignUserToPropertySuccess,\n AdministrationActions.assignUserToPropertyError,\n (state, action) => ({ ...state, saveUserToPropertyInProgress: false })\n ),\n on(AdministrationActions.startAddNewUser, (state, action) => ({\n ...state,\n addNewUserInProgress: true,\n addedUser: null,\n })),\n\n on(AdministrationActions.addingNewUserSucceeded, (state, action) => ({\n ...state,\n addNewUserInProgress: false,\n addedUser: action.user,\n })),\n\n on(AdministrationActions.addingNewUserFailed, (state, action) => ({\n ...state,\n addNewUserInProgress: false,\n addedUser: null,\n })),\n on(AdministrationActions.clearAddedUser, (state, action) => ({\n ...state,\n addedUser: null,\n })),\n\n on(AdministrationActions.startDeleteGeneralRole, (state, action) => ({\n ...state,\n deleteGeneralRoleInProgress: true,\n })),\n on(\n AdministrationActions.deleteGeneralRoleSucceeded,\n AdministrationActions.deleteGeneralRoleFailed,\n (state, action) => ({ ...state, deleteGeneralRoleInProgress: false })\n ),\n on(AdministrationActions.selectGeneralRoleToEdit, (state, action) => ({\n ...state,\n selectedGeneralRole: action.generalRole,\n })),\n on(AdministrationActions.clearSelectedGeneralRole, (state, action) => ({ ...state, selectedGeneralRole: undefined })),\n on(AdministrationActions.startSavingGeneralRole, (state, action) => ({ ...state, saveGeneralRoleInProgress: true })),\n on(\n AdministrationActions.savingGeneralRoleSucceeded,\n AdministrationActions.savingGeneralRoleFailed,\n (state, action) => ({ ...state, saveGeneralRoleInProgress: false })\n ),\n on(AdministrationActions.loadAllUserToProperyMappingsSucceeded, (state, action) => ({\n ...state,\n userToPropertyMapping: action.userToPropertyMapping,\n })),\n on(AdministrationActions.clearAllUserToPropertyMappings, (state, action) => ({\n ...state,\n userToPropertyMapping: undefined,\n })),\n on(AdministrationActions.setGeneralRoleRadioList, (state, action) => ({\n ...state,\n generalRoleRadioList: action.generalRoleRadioList,\n })),\n\n /**\n * invite User\n */\n on(AdministrationActions.inviteNewUser, AdministrationActions.inviteNewResidentUser, (state, action) => {\n return {\n ...state,\n userInviteInProgress: true,\n userInviteStatus: UpdateStatus.IN_PROGRESS,\n userInvited: null,\n };\n }),\n on(\n AdministrationActions.inviteNewUserSuccess,\n AdministrationActions.inviteNewResidentUserSuccess,\n (state, action) => ({\n ...state,\n userInviteInProgress: false,\n userInviteStatus: UpdateStatus.OK,\n userInvited: action.user,\n })\n ),\n on(AdministrationActions.inviteNewUserError, AdministrationActions.inviteNewResidentUserError, (state, action) => ({\n ...state,\n userInviteInProgress: false,\n userInviteStatus: UpdateStatus.ERROR,\n userInvited: null,\n })),\n\n /**\n * update User\n */\n on(AdministrationActions.updateUserData, AdministrationActions.updateResidentUserData, (state, action) => ({\n ...state,\n userUpdateInProgress: true,\n userUpdateStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(\n AdministrationActions.updateUserDataSuccess,\n AdministrationActions.updateResidentUserDataSuccess,\n (state, action) => ({\n ...state,\n userUpdateInProgress: false,\n userUpdateStatus: UpdateStatus.UPDATED,\n })\n ),\n on(\n AdministrationActions.updateUserDataError,\n AdministrationActions.updateResidentUserDataError,\n AdministrationActions.savingGeneralRoleFailed,\n (state, action) => ({\n ...state,\n userUpdateInProgress: false,\n userUpdateStatus: UpdateStatus.ERROR,\n })\n ),\n on(AdministrationActions.removeUser, (state, action) => ({\n ...state,\n removeUserInProgress: true,\n })),\n on(AdministrationActions.removeUserFailed, AdministrationActions.removeUserSucceeded, (state, action) => ({\n ...state,\n removeUserInProgress: false,\n })),\n\n /**\n * clear User Preview Data\n **/\n on(AdministrationActions.clearUserPreviewData, (state, action) => ({\n ...state,\n userUpdateInProgress: false,\n userUpdateStatus: null,\n userInviteInProgress: false,\n userInviteStatus: null,\n userInvited: null,\n saveUserToGeneralRoleInProgress: false,\n saveUserToGeneralRoleStatus: null,\n assignUserIntoPropertyInProgress: false,\n assignUserIntoPropertyStatus: null,\n removingPropertyAssignedUserInProgress: false,\n removingPropertyAssignedUserStatus: null,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nimport * as fromAdministration from '../reducers/administration.reducer';\n\nexport const selectAdministrationState = createFeatureSelector(\n fromAdministration.administrationFeatureKey\n);\n\nexport const selectPortfolioActiveUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.portfolioActiveUsers\n);\n\nexport const selectPortfolioUsersLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.portfolioUsersLoading\n);\n\nexport const selectActiveUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.activeUsers\n);\n\nexport const selectInactiveUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.inactiveUsers\n);\n\nexport const selectAllUsers = createSelector(\n selectActiveUsers,\n selectInactiveUsers,\n (activeUsers, inactiveUsers) => [].concat(activeUsers).concat(inactiveUsers) as RestUserModel[]\n);\n\nexport const selectAllUsersLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.usersLoading\n);\n\nexport const selectAllPermissionLevels = createSelector(\n selectAdministrationState,\n administrationState => administrationState.permissionLevels\n);\n\nexport const selectAllUserToGeneralRoleMapping = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userToGeneralRole\n);\n\nexport const selectAllGeneralRoles = createSelector(\n selectAdministrationState,\n administrationState => administrationState.generalRoles\n);\n\nexport const selectAllUsersWithGeneralRoles = createSelector(\n selectAdministrationState,\n administrationState => administrationState.usersWithGeneralRoles\n);\n\nexport const selectAllUsersWithGeneralRolesLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.usersWithGeneralRolesLoading\n);\n\nexport const selectAllPropertiesStructure = createSelector(\n selectAdministrationState,\n administrationState => administrationState.propertiesStructure\n);\n\nexport const selectUserListFilter = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userListFilter\n);\n\n/**\n * save User To General Role\n */\nexport const selectSaveUserToGeneralRoleInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.saveUserToGeneralRoleInProgress\n);\n\nexport const selectSaveUserToGeneralRoleStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.saveUserToGeneralRoleStatus\n);\n/**\n * assign user into property\n */\nexport const selectAssignUserIntoPropertyInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.assignUserIntoPropertyInProgress\n);\n\nexport const selectAssignUserIntoPropertyStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.assignUserIntoPropertyStatus\n);\n\n/**\n * removing property assigned user\n */\nexport const selectRemovingPropertyAssignedUserInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.removingPropertyAssignedUserInProgress\n);\nexport const selectRemovingPropertyAssignedUserStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.removingPropertyAssignedUserStatus\n);\n\nexport const selectIsDeleteGeneralRoleInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.deleteGeneralRoleInProgress\n);\n\nexport const selectAllUserToPropertyMappings = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userToPropertyMapping\n);\n\nexport const selectPropertyUsers = createSelector(\n selectAdministrationState,\n administrationState => administrationState.activePropertyUsers\n);\n\nexport const selectPropertyUsersLoading = createSelector(\n selectAdministrationState,\n administrationState => administrationState.propertyUsersLoading\n);\n\nexport const selectGeneralRoleRadioList = createSelector(\n selectAdministrationState,\n administrationState => administrationState.generalRoleRadioList\n);\n\n/**\n * User invite\n **/\nexport const selectUserInviteInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userInviteInProgress\n);\n\nexport const selectUserInviteStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userInviteStatus\n);\n\nexport const selectUserInvited = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userInvited\n);\n\n/**\n * User Update\n **/\nexport const selectUserUpdateInProgress = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userUpdateInProgress\n);\n\nexport const selectUserUpdateStatus = createSelector(\n selectAdministrationState,\n administrationState => administrationState.userUpdateStatus\n);\n","import { UserType } from '@shared/enums/user-type';\n\nexport enum UserPreviewFields {\n FirstName = 'firstName',\n LastName = 'lastName',\n Email = 'email',\n RoleId = 'roleId',\n UserGroupType = 'userGroupType',\n PropertyId = 'propertyId',\n UnitId = 'unitId',\n CompanyId = 'companyId',\n PhoneNumber = 'phoneNumber',\n PhoneNumberAddedAsIdentity = 'phoneNumberAddedAsIdentity',\n EmailAddedAsIdentity = 'emailAddedAsIdentity',\n NativeLanguage = 'nativeLanguage',\n FederatedIssuerAssigneeId = 'federatedIssuerAssigneeId',\n}\n\nexport interface UserPreview {\n [UserPreviewFields.FirstName]: string;\n [UserPreviewFields.LastName]: string;\n [UserPreviewFields.Email]: string;\n [UserPreviewFields.RoleId]: number;\n [UserPreviewFields.UserGroupType]: UserType;\n [UserPreviewFields.PropertyId]: number;\n [UserPreviewFields.UnitId]: number;\n [UserPreviewFields.CompanyId]: number;\n [UserPreviewFields.PhoneNumber]: string;\n [UserPreviewFields.PhoneNumberAddedAsIdentity]: boolean;\n [UserPreviewFields.EmailAddedAsIdentity]: boolean;\n [UserPreviewFields.NativeLanguage]: number;\n [UserPreviewFields.FederatedIssuerAssigneeId]: string;\n}\n","import { DashboardViewType } from '@shared/enums/dashboard-view-type';\n\nexport const propertySelectorTypes: DashboardViewType[] = [\n DashboardViewType.PROPERTY_VIEW,\n DashboardViewType.PROPERTY_WITH_GROUPING_VIEW,\n DashboardViewType.PROPERTY_WITHOUT_ALL,\n];\n\nexport const allPropertyValue = -1;\nexport const portfolioAllPropertyValue = -2;\nexport const allPropertiesOption = {\n value: allPropertyValue,\n label: 'All properties',\n sort: 0,\n};\nexport const allPortfoliosValue = -1;\nexport const allPortfoliosOption = {\n value: allPortfoliosValue,\n label: 'All portfolios',\n sort: 0,\n};\n","export enum BoardColumnType {\n Unselected = 0,\n Unit = 'Unit',\n Comments = 'Comments',\n PropertyName = 'PropertyName',\n UnitStatus = 'UnitStatus',\n TurnStep = 'TurnStep',\n\n DropDown = 'DropDown',\n\n // == Date ==\n MoveIn = 'MoveIn',\n MoveOut = 'MoveOut',\n Available = 'Available',\n Showable = 'Showable',\n CustomDate = 'CustomDate',\n\n // == Dollar ==\n NewRent = 'NewRent',\n OldRent = 'OldRent',\n MarketRent = 'MarketRent',\n AdvertisedRent = 'AdvertisedRent',\n CustomAmount = 'CustomAmount',\n UnitTotal = 'UnitTotal',\n Budget = 'Budget',\n Delta = 'Variance',\n\n // == Info ==\n Assignee = 'Assignee',\n UnitType = 'UnitType',\n NewTenant = 'NewTenant',\n\n // == Enum ==\n NewFinish = 'NewFinish',\n OldFinish = 'OldFinish',\n Finish = 'Finish',\n\n // == Schedule ==\n Simple = 'Simple',\n Timed = 'Timed',\n Workorder = 'Workorder',\n\n // == Time ==\n Days = 'Days', // -- days in current step\n TotalDays = 'TotalDays', // -- days since move-out date\n}\n\nexport enum BoardType {\n MakeReady,\n Reno,\n Marketing,\n Custom,\n Eviction,\n MoveOut,\n MoveIn,\n Approval,\n NonPms,\n Prelease,\n LeaseUp,\n}\n\nexport enum BoardOutputType {\n SendToApproval,\n SendToLeaseUpOrMoveIn,\n None,\n SendToMoveOut,\n SendToMakeReady,\n SendToPunch,\n SendToReno,\n SendToArchive,\n}\n\nexport enum BoardOutputBehaviour {\n Manually,\n Automatically,\n}\n\nexport enum BoardProgressType {\n None,\n UpdateMakeReadyProgressBar,\n UpdateRENOProgressBar,\n UpdateNoticeProgressBar,\n UpdateMoveInProgressBar,\n UpdateMoveOutProgressBar,\n UpdateApprovalProgressBar,\n UpdateLeaseUpProgressBar,\n}\n\nexport enum BoardSourceType {\n MakeReadyUnits,\n RenoUnits,\n UnleasedUnits,\n OnNoticeUnits,\n MoveOutUnits,\n MarketingUnits,\n OnNoticeAndUnleasedUnits,\n Manual,\n UnitsInNoticeUnderEviction,\n UnitsInMoveIn,\n UnitsInApproval,\n UnitsInPunch,\n None,\n NonPmsUnits,\n PreleaseUnits,\n LeaseUpUnits,\n UnleasedUnitsNotReady,\n UnleasedUnitsReady,\n}\n\nexport enum BoardMakeReadySteps {\n TrashOut = 'Trash out',\n Painting = 'Painting',\n Hardware = 'Hardware',\n Flooring = 'Flooring',\n RemoveOldApp = 'Remove old app.',\n InstallNewApp = 'Install new app.',\n}\n\nexport enum ScheduleCellStatus {\n Due,\n Skipped,\n Done,\n Late,\n Unscheduled,\n Pending,\n Declined,\n Started,\n Moved,\n StartedLate,\n StartedMoved,\n Review,\n}\n\nexport enum ScheduleCellMenuActions {\n DONE = 'Done',\n STARTED = 'Started',\n PENDING = 'Pending',\n RESCHEDULE = 'Reschedule',\n SCHEDULE = 'Schedule',\n SKIPPED = 'Skipped',\n CLEAR = 'Clear',\n VIEW_INSPECTION = 'View Inspection',\n EDIT_TEMPLATE = 'Edit template',\n UPDATE_AMOUNT = 'Update Amount',\n ENTER_AMOUNT = 'Enter Amount',\n MARK_AS_ESTIMATED = 'Mark as Estimated',\n MARK_AS_FINAL = 'Mark as Final',\n MARK_AS_UNPAID = 'Mark as Unpaid',\n MARK_AS_PAID = 'Mark as Paid',\n MARK_ALL_AS_DONE = 'Mark all as done',\n VIEW_TICKET = 'View Ticket',\n}\n\nexport enum StartedSubType {\n StartedLate,\n StartedMoved,\n}\n\nexport enum ScheduleCellColor {\n Done = 0, // $tpp-green11\n MoveOut = 1, // $tpp-orange8\n Due = 2, // $tpp-purple\n Review = 5,\n Started = 6, // $tpp-orange6\n StartedLate = 11,\n StartedMoved = 12,\n Expired = 13,\n}\n\nexport enum BoardView {\n Unit,\n Calendar,\n}\n","import { extend } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { DropdownColumnOption } from '@main-application/boards/boards-view/boards-cell/cell-types/dropdown-cell/dropdown-cell.component';\nimport { InspectionType } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport {\n PaymentStatus,\n RestTurnoverDataModel,\n RestTurnoverTaskModel,\n TotalCostStatus,\n} from '@shared/interfaces/turnover.interface';\n\nimport {\n BoardColumnType,\n BoardOutputBehaviour,\n BoardOutputType,\n BoardProgressType,\n BoardSourceType,\n BoardType,\n ScheduleCellStatus,\n} from './board.enums';\nimport { IBoardGroupsConfig } from './borad-groups.interface';\nimport { CellValueHelper } from '../services/cell-value.helper';\n\nexport class RestTurnStepScheduleBaseModel {\n turnoverDateAvailable: Date;\n turnoverDateShowable: Date;\n dateCompleted: Date;\n originalDueDate: Date;\n}\n\nexport class RestTurnStepScheduleModel extends RestTurnStepScheduleBaseModel {\n id: number;\n turnoverId: number;\n boardColumnUID: string;\n boardLayoutsId: number;\n workflowStepId: number;\n assignee: number;\n //assigneeId: number; //why is it here?\n notifyAssignee: boolean;\n dueDate: Date;\n status: ScheduleCellStatus;\n note: string;\n sortOrder: number;\n amount?: number;\n totalCostStatus?: TotalCostStatus;\n paymentStatus?: PaymentStatus;\n inspectionId?: number;\n inspectionType?: InspectionType;\n inspectionTemplateId?: number;\n inspectionItemsCompleted?: number;\n inspectionItemsTotal?: number;\n\n notifyWhenDoneUserIds?: number[];\n notifyWhenDone?: boolean;\n\n declinedAt?: string;\n declinedReason?: string;\n\n pushToPMS?: boolean;\n ticketTopicId?: number;\n turnoverData: RestTurnoverDataModel;\n\n ticketId?: number;\n scheduleAppointmentIsRequired: boolean;\n appointmentConfirmed: boolean;\n appointmentDate?: Date;\n appointmentTime?: Date;\n appointmentNotes?: string;\n requiresAcceptance?: boolean;\n}\n\nexport class RestBoardModel {\n id: number;\n name: string;\n allPortfolios: boolean;\n selectedPortfolioIds?: string;\n excludedProperties?: string;\n boardType: BoardType;\n boardColumnsConfig: string;\n progressType: BoardProgressType;\n datasource: BoardSourceType;\n outputAction: BoardOutputType;\n outputBehaviour: BoardOutputBehaviour;\n boardCellColor: string;\n extendedConfigJson?: string;\n showArchivedTurnovers?: boolean;\n dontCreateTickets?: boolean;\n\n constructor(board: Board) {\n this.id = board.id;\n this.name = board.name;\n this.progressType = board.progressType;\n this.datasource = board.datasource;\n this.boardType = board.boardType;\n this.outputAction = board.outputAction;\n this.outputBehaviour = board.outputBehaviour;\n this.boardCellColor = board.boardCellColor;\n this.allPortfolios = board.allPortfolios;\n this.extendedConfigJson = JSON.stringify(board.extendedConfigParsed);\n this.selectedPortfolioIds = board.selectedPortfolioIds?.length ? board.selectedPortfolioIds.join(',') : undefined;\n this.excludedProperties = board.excludedPropertyIds?.length ? board.excludedPropertyIds.join(',') : undefined;\n this.boardColumnsConfig = JSON.stringify(board.columns.filter(e => e.type !== BoardColumnType.Unselected));\n this.showArchivedTurnovers = board.showArchivedTurnovers ?? false;\n this.dontCreateTickets = !!board.dontCreateTickets;\n }\n}\n\nfunction isBoardResponse(entity: any): entity is RestBoardModel {\n return (\n typeof entity.datasource === 'number' &&\n typeof entity.id === 'number' &&\n typeof entity.boardColumnsConfig === 'string' &&\n typeof entity.name === 'string'\n );\n}\n\nexport interface BoardConfiguration {\n id: number;\n name: string;\n allPortfolios: boolean;\n selectedPortfolioIds?: number[];\n excludedPropertyIds?: number[];\n boardType: BoardType;\n progressType: BoardProgressType;\n datasource: BoardSourceType;\n outputAction: BoardOutputType;\n outputBehaviour: BoardOutputBehaviour;\n showArchivedTurnovers?: boolean;\n extendedConfigParsed: IBoardGroupsConfig;\n boardCellColor: string;\n dontCreateTickets: boolean;\n}\n\nexport interface ColumnOptions {\n editable?: boolean;\n name?: string;\n autoNumber?: boolean;\n inspectionTemplateId?: number;\n options?: DropdownColumnOption[];\n}\n\nexport class Board implements BoardConfiguration {\n id: number;\n name: string;\n allPortfolios: boolean;\n selectedPortfolioIds?: number[];\n excludedPropertyIds?: number[];\n boardType: BoardType;\n progressType: BoardProgressType;\n datasource: BoardSourceType;\n outputAction: BoardOutputType;\n outputBehaviour: BoardOutputBehaviour;\n extendedConfigJson: string;\n extendedConfigParsed: IBoardGroupsConfig;\n boardCellColor: string;\n showArchivedTurnovers?: boolean;\n columns: BoardColumn[] = [];\n dontCreateTickets: boolean;\n\n constructor(config: BoardConfiguration | RestBoardModel) {\n if (isBoardResponse(config)) {\n const columns = JSON.parse(config.boardColumnsConfig);\n if (Array.isArray(columns)) {\n this.columns = columns.filter(e => isBoardColumn(e));\n this.columns.forEach(c => (c.id = c.id ?? uuidv4()));\n\n const propertyColumnIndex = this.columns.findIndex(c => c.type == BoardColumnType.PropertyName);\n let unitColumnIndex = this.columns.findIndex(c => c.type == BoardColumnType.Unit);\n\n if (propertyColumnIndex === -1 || propertyColumnIndex !== unitColumnIndex + 1) {\n // make Property columns always next after Unit\n if (propertyColumnIndex !== -1) {\n this.columns.splice(propertyColumnIndex, 1);\n }\n unitColumnIndex = this.columns.findIndex(c => c.type == BoardColumnType.Unit);\n\n this.columns.splice(unitColumnIndex + 1, 0, {\n id: uuidv4(),\n name: 'Property',\n type: BoardColumnType.PropertyName,\n editable: false,\n visible: true,\n frozen: false,\n });\n }\n } else {\n this.initDefaultColumns();\n }\n this.id = config.id;\n this.name = config.name;\n this.progressType = config.progressType;\n this.boardType = config.boardType;\n this.datasource = config.datasource;\n this.outputAction = config.outputAction;\n this.outputBehaviour = config.outputBehaviour;\n this.selectedPortfolioIds = config.selectedPortfolioIds\n ? config.selectedPortfolioIds.split(',').map(Number)\n : undefined;\n this.excludedPropertyIds = config.excludedProperties\n ? config.excludedProperties.split(',').map(Number)\n : undefined;\n this.allPortfolios = config.allPortfolios;\n this.extendedConfigJson = config.extendedConfigJson;\n this.extendedConfigParsed = config.extendedConfigJson ? JSON.parse(config.extendedConfigJson) : null;\n this.boardCellColor = config.boardCellColor ?? '#ffffff';\n this.showArchivedTurnovers = config.showArchivedTurnovers ?? false;\n this.dontCreateTickets = config.dontCreateTickets;\n } else {\n extend(this, config);\n this.initDefaultColumns();\n }\n }\n\n addColumn(\n name: string,\n type: BoardColumnType,\n editable = true,\n workflowStep = null,\n visible = true,\n frozen = false,\n poisition?: number\n ): string {\n const id = uuidv4();\n const column = {\n id,\n name,\n type,\n workflowStep,\n editable,\n visible,\n frozen,\n };\n if (poisition === undefined) {\n this.columns.push(column);\n } else {\n this.columns.splice(poisition, 0, column);\n }\n return id;\n }\n\n private initDefaultColumns() {\n this.addColumn('Unit', BoardColumnType.Unit, false, null, true, true);\n this.addColumn('Property', BoardColumnType.PropertyName, false, null, true, true);\n\n switch (this.boardType) {\n case BoardType.MakeReady:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Trash out', BoardColumnType.Simple);\n this.addColumn('Paint', BoardColumnType.Simple);\n this.addColumn('Flooring', BoardColumnType.Simple);\n this.addColumn('Clean', BoardColumnType.Simple);\n break;\n case BoardType.Reno:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Demo', BoardColumnType.Simple);\n this.addColumn('Paint', BoardColumnType.Simple);\n this.addColumn('Flooring', BoardColumnType.Simple);\n this.addColumn('Trimout', BoardColumnType.Simple);\n this.addColumn('Appliances', BoardColumnType.Simple);\n this.addColumn('Final clean', BoardColumnType.Simple);\n break;\n case BoardType.Marketing:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Type', BoardColumnType.UnitType, false);\n this.addColumn('Finish', BoardColumnType.Finish, false);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Adv.Rent', BoardColumnType.AdvertisedRent, false);\n this.addColumn('Market Rent', BoardColumnType.MarketRent, false);\n break;\n case BoardType.Eviction:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('NTV', BoardColumnType.Simple);\n this.addColumn('Eviction Filed', BoardColumnType.Simple);\n this.addColumn('Hearing', BoardColumnType.Simple);\n this.addColumn('Judgment', BoardColumnType.Simple);\n this.addColumn('Appeal', BoardColumnType.Simple);\n this.addColumn('Writ Filed', BoardColumnType.Simple);\n this.addColumn('Writ Posted', BoardColumnType.Simple);\n this.addColumn('Writ Executed', BoardColumnType.Simple);\n break;\n case BoardType.MoveIn:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Application', BoardColumnType.Simple);\n this.addColumn('Set MI Date', BoardColumnType.Simple);\n this.addColumn('Lease signed', BoardColumnType.Simple);\n this.addColumn('Key prep', BoardColumnType.Simple);\n this.addColumn('Final Sparkle', BoardColumnType.Simple);\n this.addColumn('Key handover', BoardColumnType.Simple);\n this.addColumn('MI Inspection', BoardColumnType.Simple);\n this.addColumn('PMS MoveIn', BoardColumnType.Simple);\n break;\n case BoardType.MoveOut:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Inspection', BoardColumnType.Simple);\n this.addColumn('Bid', BoardColumnType.Simple);\n this.addColumn('Keys', BoardColumnType.Simple);\n this.addColumn('Deposit', BoardColumnType.Simple);\n this.addColumn('PMS MoveOut', BoardColumnType.Simple);\n this.addColumn('Marketing', BoardColumnType.Simple);\n break;\n case BoardType.Approval:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move in', BoardColumnType.MoveIn, false);\n this.addColumn('Avail', BoardColumnType.Available, true);\n this.addColumn('Blue Tape', BoardColumnType.Simple);\n this.addColumn('Final Clean', BoardColumnType.Simple);\n break;\n case BoardType.Custom:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Move out', BoardColumnType.MoveOut, false);\n this.addColumn('Anything', BoardColumnType.Simple);\n this.addColumn('your', BoardColumnType.Simple);\n this.addColumn('heart', BoardColumnType.Simple);\n this.addColumn('desires!', BoardColumnType.Simple);\n break;\n case BoardType.LeaseUp:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Pics done', BoardColumnType.Simple);\n this.addColumn('ILS Posted', BoardColumnType.Simple);\n break;\n case BoardType.Prelease:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Finish', BoardColumnType.NewFinish, false);\n this.addColumn('Total Days', BoardColumnType.TotalDays, false);\n this.addColumn('Adv.Rent', BoardColumnType.AdvertisedRent, false);\n this.addColumn('Market Rent', BoardColumnType.MarketRent, false);\n this.addColumn('Lease Signed', BoardColumnType.Simple);\n this.addColumn('Deposit', BoardColumnType.Simple);\n this.addColumn('Forms Complete', BoardColumnType.Simple);\n this.addColumn('Sparkle', BoardColumnType.Simple);\n this.addColumn('Key hand off', BoardColumnType.Simple);\n break;\n default:\n this.addColumn('Conversation', BoardColumnType.Comments);\n this.addColumn('Trash out', BoardColumnType.Simple);\n this.addColumn('Hardware', BoardColumnType.Simple);\n break;\n }\n }\n}\n\nexport type Sorting = 'ascending' | 'descending' | null;\n\nexport class ColumnSorting {\n columnId: string;\n sortFunction: (e1: RestTurnoverTaskModel, e2: RestTurnoverTaskModel) => number;\n\n constructor(column: BoardColumn, sorting: Sorting, primaryValue: boolean, private cellValueHelper: CellValueHelper) {\n this.columnId = column.id;\n const fieldFunction = this.getComparedValueFunction(column, this.columnId, primaryValue);\n this.sortFunction =\n fieldFunction === null\n ? null\n : (e1, e2) => {\n const value1 = fieldFunction(e1);\n const value2 = fieldFunction(e2);\n\n const isUnitOnHold1 = e1.turnoverData.isUnitOnHold;\n const isUnitOnHold2 = e2.turnoverData.isUnitOnHold;\n\n if (isUnitOnHold1 !== isUnitOnHold2) {\n return isUnitOnHold1 ? 1 : -1;\n }\n\n if (sorting && column.type === BoardColumnType.Unit) {\n const buildingNumber1 = e1.buildingNumber;\n const buildingNumber2 = e2.buildingNumber;\n if (buildingNumber1 && buildingNumber2)\n return sorting === 'ascending' ? buildingNumber1 - buildingNumber2 : buildingNumber2 - buildingNumber1;\n\n const unitName1 = e1.unitName?.toLowerCase() || '';\n const unitName2 = e2.unitName?.toLowerCase() || '';\n return sorting === 'ascending' ? unitName1.localeCompare(unitName2) : unitName2.localeCompare(unitName1);\n }\n let isUnitDown1 = false;\n let isUnitDown2 = false;\n\n // isUnitDown logic works for null sorting and does not work for sorting by units\n if (sorting === null || !(column.type === BoardColumnType.Unit && primaryValue === true)) {\n isUnitDown1 = e1.turnoverData.isUnitDown;\n isUnitDown2 = e2.turnoverData.isUnitDown;\n }\n\n // rules for null sorting\n if (sorting === null) {\n if (isUnitOnHold1 !== isUnitOnHold2) {\n return isUnitOnHold1 ? 1 : -1;\n }\n\n if (isUnitDown1 !== isUnitDown2) {\n return isUnitDown1 ? 1 : -1;\n }\n return 0;\n }\n\n // empty cells of the isUnitDown units\n if (value1 === 0 && isUnitDown1 && !(value2 === 0 && isUnitDown2)) {\n return 1;\n } else if (!(value1 === 0 && isUnitDown1) && value2 === 0 && isUnitDown2) {\n return -1;\n }\n\n // empty cells of the !isUnitDown units\n if (value1 === 0 && value2 !== 0) {\n return 1;\n } else if (value1 !== 0 && value2 === 0) {\n return -1;\n } else if (value1 === 0 && value2 === 0) {\n return 0;\n }\n\n // NOT empty cells of the isUnitDown units\n if (isUnitDown1 !== isUnitDown2) {\n return isUnitDown1 ? 1 : -1;\n }\n\n // general rules of sorting\n if (value1 !== value2) {\n return (value1 > value2 ? 1 : -1) * (sorting === 'ascending' ? 1 : -1);\n }\n\n return 0;\n };\n }\n\n private getComparedValueFunction(\n column: BoardColumn,\n columnId: string,\n primaryValue: boolean\n ): (e: RestTurnoverTaskModel) => string | number {\n return primaryValue ? e => this.cellValueHelper.getComparableValue(column, e, columnId) : e => e.phasePriority;\n }\n}\n\nexport class ColumnFilter {\n columnId: string;\n status: ScheduleCellStatus;\n\n constructor(columnId: string, status: ScheduleCellStatus) {\n this.columnId = columnId;\n this.status = status;\n }\n}\n\nexport class BoardColumn {\n id: string;\n editable: boolean;\n name: string;\n type: BoardColumnType;\n workflowStep?: WorkflowStepEnumType;\n inspectionTemplateId?: number;\n frozen = false;\n visible = true;\n options?: DropdownColumnOption[];\n colorBg?: string;\n colorText?: string;\n\n constructor(config: Partial) {\n Object.assign(this, config);\n this.id = this.id ?? uuidv4();\n }\n}\n\nfunction isBoardColumn(entity: any): entity is BoardColumn {\n return typeof entity.name === 'string' && typeof entity.type === 'string';\n}\n\nexport const isColumnSummable = (column: BoardColumn): boolean => {\n return [\n BoardColumnType.CustomAmount,\n BoardColumnType.Simple,\n BoardColumnType.UnitTotal,\n BoardColumnType.Budget,\n BoardColumnType.Delta,\n ].includes(column.type);\n};\n\nexport const isCostColumn = (column: BoardColumn): boolean => {\n return [BoardColumnType.CustomAmount, BoardColumnType.Simple].includes(column.type);\n};\n\nexport const ProgressTypeList: IRadioButtonOption[] = [\n {\n label: 'N/A',\n value: BoardProgressType.None,\n },\n {\n label: 'MAKE READY',\n value: BoardProgressType.UpdateMakeReadyProgressBar,\n },\n {\n label: 'RENO',\n value: BoardProgressType.UpdateRENOProgressBar,\n },\n {\n label: 'NOTICE',\n value: BoardProgressType.UpdateNoticeProgressBar,\n },\n {\n label: 'MOVE IN',\n value: BoardProgressType.UpdateMoveInProgressBar,\n },\n {\n label: 'MOVE OUT',\n value: BoardProgressType.UpdateMoveOutProgressBar,\n },\n {\n label: 'APPROVAL',\n value: BoardProgressType.UpdateApprovalProgressBar,\n },\n {\n label: 'AVAILABLE',\n value: BoardProgressType.UpdateLeaseUpProgressBar,\n },\n];\n\nexport const BoardSourceTypeList: IRadioButtonOption[] = [\n {\n label: 'MAKE READY',\n value: BoardSourceType.MakeReadyUnits,\n },\n {\n label: 'RENO',\n value: BoardSourceType.RenoUnits,\n },\n {\n label: 'Unleased',\n value: BoardSourceType.UnleasedUnits,\n },\n {\n label: 'NOTICE',\n value: BoardSourceType.OnNoticeUnits,\n },\n {\n label: 'MOVE OUT',\n value: BoardSourceType.MoveOutUnits,\n },\n {\n label: 'NOTICE and Unleased',\n value: BoardSourceType.OnNoticeAndUnleasedUnits,\n },\n {\n label: 'NOTICE under Eviction',\n value: BoardSourceType.UnitsInNoticeUnderEviction,\n },\n {\n label: 'APPROVAL',\n value: BoardSourceType.UnitsInApproval,\n },\n {\n label: 'AVAILABLE',\n value: BoardSourceType.LeaseUpUnits,\n },\n {\n label: 'Prelease',\n value: BoardSourceType.PreleaseUnits,\n },\n {\n label: 'MOVE IN',\n value: BoardSourceType.UnitsInMoveIn,\n },\n {\n label: 'PUNCH',\n value: BoardSourceType.UnitsInPunch,\n },\n {\n label: 'Non-PMS',\n value: BoardSourceType.NonPmsUnits,\n },\n {\n label: 'N/A',\n value: BoardSourceType.Manual,\n },\n {\n label: 'Unleased (Not Ready)',\n value: BoardSourceType.UnleasedUnitsNotReady,\n },\n {\n label: 'Unleased (Ready)',\n value: BoardSourceType.UnleasedUnitsReady,\n },\n];\n\nexport const BoardTypeList: IRadioButtonOption[][] = [\n [\n {\n label: 'Make Ready',\n value: BoardType.MakeReady,\n },\n {\n label: 'Reno',\n value: BoardType.Reno,\n },\n {\n label: 'Marketing',\n value: BoardType.Marketing,\n },\n {\n label: 'Available',\n value: BoardType.LeaseUp,\n },\n {\n label: 'Prelease',\n value: BoardType.Prelease,\n },\n {\n label: 'Eviction',\n value: BoardType.Eviction,\n },\n {\n label: 'Move In',\n value: BoardType.MoveIn,\n },\n {\n label: 'Move Out',\n value: BoardType.MoveOut,\n },\n {\n label: 'Approval',\n value: BoardType.Approval,\n },\n {\n label: 'Non-PMS',\n value: BoardType.NonPms,\n },\n ],\n [\n {\n label: 'Custom',\n value: BoardType.Custom,\n },\n ],\n];\n\nexport const BoardOutputBehaviourList: IRadioButtonOption[] = [\n {\n label: 'Automatically',\n value: BoardOutputBehaviour.Automatically,\n },\n {\n label: 'Manually',\n value: BoardOutputBehaviour.Manually,\n },\n];\n\nexport const DoNotAllowToCreateTicketsRule: IRadioButtonOption[] = [\n {\n label: \"Don't create tickets\",\n value: true,\n },\n {\n label: 'Create tickets',\n value: false,\n },\n];\n\nexport const BoardOutputTypeList: IRadioButtonOption[] = [\n {\n label: 'N/A',\n value: BoardOutputType.None,\n },\n {\n label: 'APPROVAL',\n value: BoardOutputType.SendToApproval,\n },\n {\n label: 'AVAILABLE/MOVE IN',\n value: BoardOutputType.SendToLeaseUpOrMoveIn,\n },\n {\n label: 'MOVE OUT',\n value: BoardOutputType.SendToMoveOut,\n },\n {\n label: 'MAKE READY',\n value: BoardOutputType.SendToMakeReady,\n },\n {\n label: 'PUNCH',\n value: BoardOutputType.SendToPunch,\n },\n {\n label: 'RENO',\n value: BoardOutputType.SendToReno,\n },\n {\n label: 'ARCHIVE',\n value: BoardOutputType.SendToArchive,\n },\n];\n\nexport const disallowSourceTypeOutputTypeMap: Record = {\n [BoardSourceType.MakeReadyUnits]: BoardOutputType.SendToMakeReady,\n [BoardSourceType.UnitsInPunch]: BoardOutputType.SendToPunch,\n [BoardSourceType.RenoUnits]: BoardOutputType.SendToReno,\n [BoardSourceType.MoveOutUnits]: BoardOutputType.SendToMoveOut,\n [BoardSourceType.UnitsInMoveIn]: BoardOutputType.SendToLeaseUpOrMoveIn,\n [BoardSourceType.UnitsInApproval]: BoardOutputType.SendToApproval,\n};\n\nexport function getNextStepType(outputAction: BoardOutputType, turnover: RestTurnoverTaskModel): WorkflowStepEnumType {\n switch (outputAction) {\n case BoardOutputType.SendToLeaseUpOrMoveIn:\n return !!turnover.turnoverData.dateMoveIn ? WorkflowStepEnumType.MoveIn : WorkflowStepEnumType.LeaseUp;\n case BoardOutputType.SendToApproval:\n return WorkflowStepEnumType.Approval;\n case BoardOutputType.SendToMoveOut:\n return WorkflowStepEnumType.MoveOut;\n case BoardOutputType.SendToReno:\n return WorkflowStepEnumType.Reno;\n case BoardOutputType.SendToMakeReady:\n return WorkflowStepEnumType.MakeReady;\n case BoardOutputType.SendToPunch:\n return WorkflowStepEnumType.Punch;\n case BoardOutputType.SendToArchive:\n return WorkflowStepEnumType.Archive;\n case BoardOutputType.None:\n return null;\n default:\n return WorkflowStepEnumType.Approval;\n }\n}\n\nexport function getCurrentStep(sourceType: BoardSourceType): WorkflowStepEnumType {\n switch (sourceType) {\n case BoardSourceType.MakeReadyUnits:\n return WorkflowStepEnumType.MakeReady;\n case BoardSourceType.RenoUnits:\n return WorkflowStepEnumType.Reno;\n case BoardSourceType.OnNoticeUnits:\n return WorkflowStepEnumType.Notice;\n case BoardSourceType.MoveOutUnits:\n return WorkflowStepEnumType.MoveOut;\n case BoardSourceType.MarketingUnits:\n return WorkflowStepEnumType.Marketing;\n case BoardSourceType.OnNoticeAndUnleasedUnits:\n return WorkflowStepEnumType.Notice;\n case BoardSourceType.UnitsInNoticeUnderEviction:\n return WorkflowStepEnumType.Notice;\n case BoardSourceType.UnitsInMoveIn:\n return WorkflowStepEnumType.MoveIn;\n case BoardSourceType.UnitsInApproval:\n return WorkflowStepEnumType.Approval;\n case BoardSourceType.UnitsInPunch:\n return WorkflowStepEnumType.Punch;\n default:\n return WorkflowStepEnumType.MoveOut;\n }\n}\n\nexport interface BoardFilter {\n searchStr?: string;\n events?: EventActivityFilter[];\n types?: string[];\n finish?: number[];\n assignees?: number[];\n turnAssignees?: number[];\n properties?: number[];\n schedule?: string[];\n status?: ScheduleCellStatus[];\n boards?: number[];\n\n //Not used but keeped controls\n startMoveInDate?: Date;\n endMoveInDate?: Date;\n startMoveOutDate?: Date;\n endMoveOutDate?: Date;\n startAvailableDate?: Date;\n endAvailableDate?: Date;\n startShowableDate?: Date;\n endShowableDate?: Date;\n\n unitTypes?: string[];\n}\n\nexport class BoardEvent {\n name: string;\n id: string;\n colorScheme: number;\n}\n\nexport interface EventActivityFilter {\n eventType: number;\n label: string;\n colorScheme: number;\n value?: any;\n}\n\nexport interface DeleteUnitFromBoardI {\n unitName: string;\n id: number;\n}\n\nexport interface BoardLayoutInspectionTemplatesUsage {\n boardLayoutId: number;\n columnId: string;\n inspectionTemplateId: number;\n pushToPMS: boolean;\n ticketTopicId?: number;\n}\n\nexport interface ColumnStats {\n key: ScheduleCellStatus;\n value: number;\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { first } from 'lodash';\nimport { combineLatest, filter, map } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport {\n selectSelectedPortfolioId,\n selectSelectedPropertyIds,\n} from '@dashboards/store/selectors/property-selector.selectors';\nimport { allPortfoliosValue } from '@main-application/application-menu/property-selector/constants';\nimport { selectProperties } from '@portfolio/store/portfolio.selectors';\nimport { getPortfolioProperties } from '@shared/functions/get-portfolio-properties.function';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-non-pms-add-modal',\n templateUrl: './non-pms-add-modal.component.html',\n styleUrls: ['./non-pms-add-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n InputModule,\n RadioButtonDropdownModule,\n ],\n})\nexport class NonPmsAddModalComponent extends PuSubscribable implements OnInit {\n form = this.formBuilder.group({\n propertyId: [null as number, [Validators.required]],\n unitName: ['non-PMS unitxxx', [Validators.required]],\n });\n\n formSubmited = false;\n acceptChargesText$ = this.modalService.getAcceptChargesText();\n\n userProperties$ = combineLatest([\n this.store.select(selectProperties),\n this.store.select(selectSelectedPortfolioId),\n ]).pipe(\n untilDestroyed(this),\n filter(([userProperties]) => !!userProperties),\n map(([userProperties, currentPortfolioId]) =>\n getPortfolioProperties(\n userProperties.filter(e => currentPortfolioId === allPortfoliosValue || e.portfolioId === currentPortfolioId)\n )\n )\n );\n\n constructor(\n private modalService: ModalsService,\n private formBuilder: FormBuilder,\n public dialogRef: MatDialogRef,\n private store: Store<{}>,\n @Inject(MAT_DIALOG_DATA) public data: string\n ) {\n super();\n if (data) {\n this.form.controls.unitName.setValue(data);\n }\n }\n\n ngOnInit(): void {\n combineLatest([this.store.select(selectSelectedPropertyIds)])\n .pipe(untilDestroyed(this))\n .subscribe(([propertyIds]) => {\n this.form.controls.propertyId.setValue(first(propertyIds));\n })\n .untilDestroyed(this);\n }\n\n ok() {\n if (this.form.valid) {\n this.dialogRef.close(this.form.value);\n } else {\n this.formSubmited = true;\n this.form.markAllAsTouched();\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","
\n
\n
Accept charges?
\n
\n\n \n
{{ acceptChargesText$ | async }}
\n
\n 7\"\n [attrDisable]=\"false\"\n [label]=\"'Property'\"\n formControlName=\"propertyId\"\n [allowClear]=\"false\"\n [attrPlaceholder]=\"'Select property'\"\n [showValidationError]=\"formSubmited\"\n attrAppendTo=\"body\">\n \n
\n
\n Note:\n you can edit or delete this unit anytime from Unit Details\n
\n
\n \n
\n \n \n
\n
\n
\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable, filter, of, switchMap, take, tap } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { CommonInMemoryUpdatingService } from '@main-application/shared/services/common-in-memory-updating.service';\nimport { selectUserPermissionLevel } from '@main-application/store/selectors/user.selectors';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport {\n BoardsSummaryStatsDetails,\n SummaryFilters,\n SummaryStatsGroup,\n} from '@ui-components/components/summary-expandable-table/summary-expandable-table.model';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { BoardLayoutInspectionTemplatesUsage, RestBoardModel } from '../interfaces/board';\n\n@Injectable()\nexport class BoardService extends CommonInMemoryUpdatingService {\n private readonly route = 'boards/';\n boardRemoving$ = new BehaviorSubject(0);\n\n constructor(private service: RestapiService, private modalsService: ModalsService, private store: Store<{}>) {\n super();\n }\n\n getTurnoverList(boardId: number, portfolioId: number) {\n return this.service.getData(\n `turnovers/bb/${boardId}/${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n refresh() {\n if (this._list$ && !this._list$.closed) {\n return this.getListInternal().pipe(tap(list => this._list$.next(list)));\n }\n return of(null);\n }\n\n getListInternal() {\n return this.service.getData(this.route + 'list');\n }\n\n protected deleteInternal(id: number): Observable {\n return this.service.post(this.route + `delete/${id}`);\n }\n\n getListByPortfolio(portfolioId: number) {\n return this.service.getData(this.route + 'getByPortfolio/' + portfolioId);\n }\n\n add(entity: RestBoardModel) {\n return this.service\n .post(this.route + 'add', entity)\n .pipe(tap(id => this.updateSavedData(list => [...list, { ...entity, id: id }])));\n }\n\n update(entity: RestBoardModel) {\n return this.service.post(this.route + 'update', entity).pipe(\n tap(() =>\n this.updateSavedData(list => {\n const index = list.findIndex(e => e.id === entity.id);\n const copyOfArray = [...list];\n if (index >= 0) {\n copyOfArray.splice(index, 1, entity);\n }\n return copyOfArray;\n })\n )\n );\n }\n\n removeBoard(boardName: string, boardId: number) {\n return this.store.select(selectUserPermissionLevel).pipe(\n take(1),\n filter(\n (permissionLevel: PermissionLevelType[]) =>\n !!permissionLevel?.length && checkPermissionLevel(permissionLevel, PermissionLevelType.Board_Edit)\n ),\n switchMap(() =>\n this.modalsService\n .openConfirmationModal({\n title: `Delete board: \"${boardName}\"?`,\n content: `Board will be deleted permanently along with its data.`,\n confirmColor: 'warn',\n })\n .afterClosed()\n .pipe(\n take(1),\n filter(result => result === DialogResult.Success),\n switchMap(() => this.delete(boardId)),\n tap(() => this.boardRemoving$.next(boardId))\n )\n )\n );\n }\n\n getTemplatesUsage(id: number): Observable {\n return this.service.getData(`${this.route}${id}/templatesUsage`);\n }\n\n updateTemplateUsage(usage: BoardLayoutInspectionTemplatesUsage): Observable {\n return this.service.update(`${this.route}updateTemplateUsage`, usage);\n }\n\n getBoardSummaryStats(filter: SummaryFilters): Observable {\n let url = `turnovers/bb/summaryStats/${filter.groupBy ?? 0}/${filter.subGroupBy ?? 0}?`;\n\n if (filter.portfolioId !== null && filter.portfolioId !== undefined) url += `&portfolioId=${filter.portfolioId}`;\n if (filter.collectionIds) url += `&collectionIds=${filter.collectionIds}`;\n if (filter.propertyIds) url += `&propertyIds=${filter.propertyIds}`;\n if (filter.unitType !== null && filter.unitType !== undefined) url += `&unitType=${filter.unitType}`;\n if (filter.boardType !== null && filter.boardType !== undefined) url += `&boardType=${filter.boardType}`;\n if (filter.boardId !== null && filter.boardId !== undefined) url += `&boardId=${filter.boardId}`;\n if (filter.startDate) url += `&startDate=${filter.startDate}`;\n if (filter.endDate) url += `&endDate=${filter.endDate}`;\n\n return this.service.getData(url);\n }\n\n getBoardSummaryDetails(filter: SummaryFilters): Observable {\n let url = 'turnovers/bb/summaryStatsDetails?';\n\n if (filter.portfolioId !== null && filter.portfolioId !== undefined) url += `&portfolioId=${filter.portfolioId}`;\n if (filter.collectionIds) url += `&collectionIds=${filter.collectionIds}`;\n if (filter.propertyIds) url += `&propertyIds=${filter.propertyIds}`;\n if (filter.unitType !== null && filter.unitType !== undefined) url += `&unitType=${filter.unitType}`;\n if (filter.boardType !== null && filter.boardType !== undefined) url += `&boardType=${filter.boardType}`;\n if (filter.boardId !== null && filter.boardId !== undefined) url += `&boardId=${filter.boardId}`;\n if (filter.startDate) url += `&startDate=${filter.startDate}`;\n if (filter.endDate) url += `&endDate=${filter.endDate}`;\n\n return this.service.getData(url);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { tap } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\nimport { TimezoneEntityHelper } from '@main-application/management/pages/system-configuration/components/timezone-entity.helper';\nimport { RestAssociateTicketInfo, RestTurnoverDataModelNew } from '@shared/interfaces/turnover.interface';\n\nimport { RestTurnStepScheduleBaseModel, RestTurnStepScheduleModel } from '../interfaces/board';\nimport { ScheduleCellStatus } from '../interfaces/board.enums';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnStepScheduleService {\n private readonly route = 'turnStepSchedule/';\n\n constructor(private service: RestapiService) {}\n\n private static fixTimezoneForTurnStepScheduleModel(data: RestTurnStepScheduleModel[], timezone: RestTimezone) {\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToClient(e, timezone));\n return data;\n }\n\n getList(turnoverId: number) {\n return this.service.getData(\n this.route + 'list/' + turnoverId,\n TurnStepScheduleService.fixTimezoneForTurnStepScheduleModel\n );\n }\n\n add(entity: RestTurnStepScheduleModel, turn: RestTurnoverDataModelNew) {\n const addEntity = {\n ...entity,\n pushToPMS: entity.pushToPMS,\n ticketTopicId: entity.ticketTopicId,\n };\n return this.service\n .post(\n this.route + 'add',\n addEntity,\n TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToServer,\n TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToClient\n )\n .pipe(tap(data => this.updateDates(data, turn, entity)));\n }\n\n update(entity: RestTurnStepScheduleModel, turn: RestTurnoverDataModelNew) {\n const correctedStatusEntity =\n entity.status === ScheduleCellStatus.Moved ? { ...entity, status: ScheduleCellStatus.Due } : entity;\n //BE do not know that we have Moved status and store it as Due\n const updateEntity = {\n ...correctedStatusEntity,\n pushToPMS: entity.pushToPMS,\n ticketTopicId: entity.ticketTopicId,\n };\n return this.service\n .post(\n this.route + 'update',\n updateEntity,\n TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToServer,\n TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToClient\n )\n .pipe(tap(data => this.updateDates(data, turn, entity)));\n }\n\n doneAll(entity: RestTurnStepScheduleModel, turn: RestTurnoverDataModelNew, boardId: number) {\n return this.service\n .post(\n this.route + 'doneAll',\n { turnoverId: entity.turnoverId, boardLayoutId: boardId },\n null,\n TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToClient\n )\n .pipe(tap(data => this.updateDates(data, turn, entity)));\n }\n\n delete(turnStepScheduleId: number, turn: RestTurnoverDataModelNew) {\n return this.service\n .post(\n this.route + `delete/${turnStepScheduleId}`,\n null,\n null,\n TimezoneEntityHelper.fixTimezoneForTurnStepScheduleModelToClient\n )\n .pipe(tap(data => this.updateDates(data, turn, null)));\n }\n\n associateTicket(ticket: RestAssociateTicketInfo) {\n return this.service.post(this.route + `associateTicket`, ticket);\n }\n\n private updateDates(\n stepScheduleModel: RestTurnStepScheduleBaseModel,\n turn: RestTurnoverDataModelNew,\n schedule: RestTurnStepScheduleModel\n ) {\n if (stepScheduleModel.dateCompleted && schedule) {\n schedule.dateCompleted = stepScheduleModel.dateCompleted;\n }\n if (stepScheduleModel.turnoverDateAvailable && turn) {\n turn.dateAvailable = stepScheduleModel.turnoverDateAvailable;\n }\n if (stepScheduleModel.turnoverDateShowable && turn) {\n turn.dateShowable = stepScheduleModel.turnoverDateShowable;\n }\n\n if (stepScheduleModel.originalDueDate && schedule) {\n schedule.originalDueDate = stepScheduleModel.originalDueDate;\n }\n }\n}\n","export enum DelinquencyFields {\n NOTES = 'notes',\n ASSISTANCE_TYPE = 'assistanceType',\n DATE_TENANT_CONTACTED = 'dateTenantContacted',\n DATE_PAYMENT_EXPECTED = 'datePaymentExpected',\n PAYMENT_AMOUNT = 'paymentAmount',\n DELINQUENCY_RESULT_TYPE = 'delinquencyResultType',\n IS_JUDGMENT_WON = 'isJudgementWon',\n WRIT_DATE = 'writDate',\n COURT_DATE = 'courtDate',\n APPEAL_END_DATE = 'appealEndDate',\n DATE_MOVED_OUT = 'dateMovedOut',\n DATE_PLAN_BEGINS = 'datePlanBegins',\n PAYMENT_FORM = 'paymentForm',\n NUMBER_OF_INSTALLMENTS = 'numberOfInstallments',\n INSTALLMENT_AMOUNT = 'installmentAmount',\n DATE_PAYMENT_RECEIVED = 'datePaymentReceived',\n SMALL_BALANCE_CONSISTS_OF = 'smallBalanceConsistOf',\n CREDIT_REASON = 'creditReason',\n CREDIT_AMOUNT = 'creditAmount',\n NTV_POSTED = 'nTVPosted',\n}\n","import { ChangeDetectorRef, Directive } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { KpiService } from '@app/services/kpi.service';\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\n\n@Directive()\nexport abstract class KpisAbstract extends ComponentAbstract {\n trendDaysValue?: number;\n kpis: RestPortfolioKpi[] = [];\n\n constructor(protected kpiService: KpiService, protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n getNewValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.NewApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.NewApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.NewApplications30);\n }\n }\n }\n\n getCanceledValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.CanceledApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.CanceledApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.CanceledApplications30);\n }\n }\n }\n\n getPendingValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.PendingApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.PendingApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.PendingApplications30);\n }\n }\n }\n\n getDeniedValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.DeniedApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.DeniedApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.DeniedApplications30);\n }\n }\n }\n\n getApprovedValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ApprovedApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ApprovedApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ApprovedApplications30);\n }\n }\n }\n\n getConvertingValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ConvertingApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ConvertingApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ConvertingApplications30);\n }\n }\n }\n\n getConvertedValue() {\n switch (this.trendDaysValue) {\n case 60: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ConvertedApplications60);\n }\n case 90: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ConvertedApplications90);\n }\n default: {\n return this.kpiService.sum(this.kpis, PortfolioKpiType.ConvertedApplications30);\n }\n }\n }\n}\n","
\n \n
\n \n
\n \n
\n\n\n
\n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { maxBy, sumBy } from 'lodash';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { KpiService } from '@app/services/kpi.service';\nimport { KpisAbstract } from '@dashboards/components/abstract/kpis.abstract.directive';\nimport { selectPortfolioKpisBasedOnView } from '@dashboards/store/selectors/kpi.selectors';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { ChartConfig, ChartDataItem } from '@shared/interfaces/chart-data-item';\n\n@UntilDestroy()\n@Component({\n selector: 'app-leasing-units-chart-card',\n templateUrl: './leasing-units-chart-card.component.html',\n styleUrls: ['./leasing-units-chart-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LeasingUnitsChartCardComponent extends KpisAbstract implements OnInit {\n isLoading = true;\n chartDataList: ChartDataItem[] = [];\n modeControl: UntypedFormControl = new UntypedFormControl();\n chartConfig: ChartConfig = {\n showTooltip: true,\n showDataLabel: true,\n maxBarThickness: 42,\n borderRadius: 3,\n dataLabelAbsolute: true,\n };\n subTitle: string;\n\n @Input() set trendDays(value: number | undefined) {\n this.trendDaysValue = value;\n if (this.kpis) {\n this.calculate();\n }\n this.cdr.detectChanges();\n }\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>, protected kpiService: KpiService) {\n super(kpiService, cdr);\n }\n\n ngOnInit(): void {\n this.store\n .select(selectPortfolioKpisBasedOnView)\n .pipe(\n untilDestroyed(this),\n filter(kpis => !!kpis),\n tap(kpis => {\n this.isLoading = false;\n this.kpis = kpis;\n this.calculate();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.modeControl.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.chartConfig.dataLabelAbsolute = !value;\n this.calculate();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private calculate() {\n this.chartDataList = this.getChartData();\n this.subTitle = `${sumBy(this.chartDataList, c => c.value)} total`;\n }\n\n private getChartData(): ChartDataItem[] {\n const values: ChartDataItem[] = [\n {\n value: this.getNewValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'New',\n },\n {\n value: this.getCanceledValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'Canceled',\n },\n {\n value: this.getPendingValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'Pending',\n },\n {\n value: this.getDeniedValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'Denied',\n },\n {\n value: this.getApprovedValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'Approved',\n },\n {\n value: this.getConvertingValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'Converting',\n },\n {\n value: this.getConvertedValue(),\n backgroundColor: EColorPalette.cGray8,\n label: 'Converted',\n },\n ];\n\n const item = maxBy(values, i => i.value);\n if (item) {\n item.backgroundColor = EColorPalette.cBlue2;\n item.labelColor = EColorPalette.cWhite;\n }\n return values;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { LeasingUnitsChartCardComponent } from '@dashboards/components/leasing-units-chart-card/leasing-units-chart-card.component';\nimport { ChartModule } from '@ui-components/components/chart/chart.module';\nimport { ChartCardModule } from '@ui-components/components/chart-card/chart-card.module';\nimport { SlideToggleComponent } from '@ui-components/controls/slide-toggle/slide-toggle.component';\n\n@NgModule({\n declarations: [LeasingUnitsChartCardComponent],\n imports: [SlideToggleComponent, CommonModule, ChartCardModule, ChartModule, ReactiveFormsModule],\n exports: [LeasingUnitsChartCardComponent],\n})\nexport class LeasingUnitsChartCardModule {}\n","
\n \n
\n
\n \n
{{ item.label }}
\n
\n
\n \n {{ item.value }} {{ item.value === 1 ? 'turn' : 'turns' }}\n \n ({{ item.additionalValue }} NOTICE)\n \n \n
\n \n
\n
\n \n
\n
\n \n
\n\n\n
\n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { sumBy } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { KpiService } from '@app/services/kpi.service';\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { selectPortfolioKpisBasedOnView } from '@dashboards/store/selectors/kpi.selectors';\nimport { selectWorkflowStepsEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { WorkflowPhaseToStepConst } from '@shared/enums/workflow-phase-to-step.const';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { ChartConfig, ChartDataItemWithLink } from '@shared/interfaces/chart-data-item';\nimport { HelpRouterService } from '@shared/services/help-router.service';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\n\n@UntilDestroy()\n@Component({\n selector: 'app-turnovers-arc-chart-card',\n templateUrl: './turnovers-arc-chart-card.component.html',\n styleUrls: ['./turnovers-arc-chart-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TurnoversArcChartCardComponent extends ComponentAbstract implements OnInit {\n isLoading = true;\n modeControl: UntypedFormControl = new UntypedFormControl(false);\n selectedPhase: WorkflowPhaseType = WorkflowPhaseType.NotReady;\n\n chartDataList: ChartDataItemWithLink[] = [];\n chartConfig: ChartConfig = {\n showTooltip: true,\n showDataLabel: false,\n cutoutLevel: 78,\n rotation: -191,\n circumference: 200,\n spacing: 10,\n };\n\n kpis: RestPortfolioKpi[] = [];\n subTitle: string;\n withNotice: number;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private store: Store<{}>,\n private kpiService: KpiService,\n protected router: Router,\n private helpRouterService: HelpRouterService\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.store\n .select(selectPortfolioKpisBasedOnView)\n .pipe(\n untilDestroyed(this),\n filter(kpis => !!kpis),\n tap(kpis => {\n this.kpis = kpis;\n this.calculate();\n this.isLoading = false;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.modeControl.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.selectedPhase = value ? WorkflowPhaseType.Ready : WorkflowPhaseType.NotReady;\n this.calculate();\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private calculate() {\n this.getChartData()\n .subscribe(chartDataList => {\n this.chartDataList = chartDataList;\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n this.calculateNotice();\n this.calculateTotal();\n }\n\n private getChartData(): Observable {\n return this.store.select(selectWorkflowStepsEnumeration).pipe(\n filterNullish$(),\n map(steps => {\n let maxValue = 0;\n const result = WorkflowPhaseToStepConst[this.selectedPhase]\n .filter(s => s.value !== WorkflowStepEnumType.Archive)\n .map(phaseStep => {\n const step = steps.find(x => x.enumerationValue === phaseStep.value);\n const item: ChartDataItemWithLink = {\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n label: step.displayText,\n };\n const link = {\n href: ['/', this.RoutePath.TURNOVERS, RoutePath.ACTIVE_TURNOVERS],\n };\n const globalParams = this.helpRouterService.getGlobalPreservedParams();\n switch (phaseStep.value) {\n case WorkflowStepEnumType.Notice: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.Notices);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.Notice,\n },\n };\n break;\n }\n case WorkflowStepEnumType.MoveOut: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.MoveOutTurnovers);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.MoveOut,\n },\n };\n break;\n }\n case WorkflowStepEnumType.MakeReady: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.MakeReady);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.MakeReady,\n },\n };\n break;\n }\n case WorkflowStepEnumType.Reno: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.Reno);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.Reno,\n },\n };\n break;\n }\n case WorkflowStepEnumType.Approval: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.Approval);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.Approval,\n },\n };\n break;\n }\n case WorkflowStepEnumType.Punch: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.Punch);\n item.link = {\n ...link,\n queryParams: {\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.Punch,\n },\n };\n break;\n }\n case WorkflowStepEnumType.Marketing: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.Marketing);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.Marketing,\n },\n };\n break;\n }\n case WorkflowStepEnumType.LeaseUp: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.Leasup);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.LeaseUp,\n },\n };\n break;\n }\n case WorkflowStepEnumType.MoveIn: {\n item.value = this.kpiService.sum(this.kpis, PortfolioKpiType.MoveIn);\n item.link = {\n ...link,\n queryParams: {\n ...globalParams,\n [RouteData.WORKFLOW_STEP]: WorkflowStepEnumType.MoveIn,\n },\n };\n break;\n }\n }\n maxValue = Math.max(item.value, maxValue);\n return item;\n });\n\n result.find(r => r.value === maxValue).backgroundColor = EColorPalette.cGreen3;\n return result;\n })\n );\n }\n\n private calculateNotice() {\n this.withNotice = this.kpiService.sum(this.kpis, PortfolioKpiType.Notices);\n }\n\n private calculateTotal() {\n this.subTitle = `${sumBy(this.chartDataList, c => c.value)} turns`;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterLinkWithHref } from '@angular/router';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { ChartModule } from '@ui-components/components/chart/chart.module';\nimport { ChartCardModule } from '@ui-components/components/chart-card/chart-card.module';\nimport { SlideToggleComponent } from '@ui-components/controls/slide-toggle/slide-toggle.component';\n\nimport { TurnoversArcChartCardComponent } from './turnovers-arc-chart-card.component';\n\n@NgModule({\n declarations: [TurnoversArcChartCardComponent],\n imports: [\n SlideToggleComponent,\n CommonModule,\n ChartCardModule,\n ChartModule,\n ReactiveFormsModule,\n TooltipDirectiveModule,\n RouterLinkWithHref,\n ],\n exports: [TurnoversArcChartCardComponent],\n})\nexport class TurnoversArcChartCardModule {}\n","import { VacancyLossAttrType } from '@main-application/turnovers/interfaces/vacancy-loss-attr';\nimport { ITooltipRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const VacancyLossTypeGross = 'gross';\nexport const VacancyLossTypeTurn = 'turn';\nexport const VacancyLossTypeUnit = 'unit';\n\nexport const VacancyLossTypeListConst: ITooltipRadioButtonOption[] = [\n {\n value: VacancyLossAttrType.Turn,\n label: VacancyLossTypeTurn,\n tooltip: '',\n },\n {\n value: VacancyLossAttrType.Unit,\n label: VacancyLossTypeUnit,\n tooltip: '',\n },\n {\n value: VacancyLossAttrType.Gross,\n label: VacancyLossTypeGross,\n tooltip: '',\n },\n];\n","
\n \n
\n \n
\n \n
\n\n\n
\n \n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { groupBy, last, sortBy, sumBy } from 'lodash';\nimport * as moment from 'moment';\nimport { Observable, combineLatest, firstValueFrom, map, switchMap } from 'rxjs';\nimport { distinctUntilChanged, filter, tap } from 'rxjs/operators';\nimport createTrend from 'trendline';\n\nimport { KpiService } from '@app/services/kpi.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { setVacancyLossThreshold } from '@dashboards/store/actions/dashboard.actions';\nimport {\n clearPortfolioKpiTrendLines,\n loadPortfolioKpiTrendLines,\n setChartSettingsValue,\n} from '@dashboards/store/actions/kpi.actions';\nimport {\n selectSelectedVacancyLossThreshold,\n selectSelectedVacancyLossThresholdKpiType,\n selectSelectedVacancyLossThresholdKpiTypePerTurn,\n} from '@dashboards/store/selectors/dashboards.selectors';\nimport { selectChartSettingsValue, selectPortfolioKpiTrendLines } from '@dashboards/store/selectors/kpi.selectors';\nimport {\n selectSelectedPortfolioId,\n selectSelectedPropertyIds,\n} from '@dashboards/store/selectors/property-selector.selectors';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { TurnoverKanbanService } from '@main-application/turnovers/components/turnover-kanban/sevices/turnover-kanban.service';\nimport { VacancyLossAttrType } from '@main-application/turnovers/interfaces/vacancy-loss-attr';\nimport {\n VacancyLostThreshold,\n VacancyLostThresholdList,\n} from '@main-application/turnovers/interfaces/vacancy-loss-threshold';\nimport { setActiveSections } from '@main-application/turnovers/store/actions/turnovers.actions';\nimport { selectProperties } from '@portfolio/store/portfolio.selectors';\nimport { VacancyLossTypeGross, VacancyLossTypeListConst } from '@shared/constants/vacancy-loss-type-list.const';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { KpiWindowType, getTrendDaysDiff } from '@shared/enums/kpi-window-type';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport { ChartDataItem } from '@shared/interfaces/chart-data-item';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { CustomCurrencyShortWithSuffixPipe } from '@shared/pipes/custom-currency-short-with-suffix.pipe';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\nimport {\n LineChartDatasetOptions,\n LineChartDateset,\n LineChartOptions,\n} from '@ui-components/components/line-chart/line-chart.component';\n\nclass VacancyLossData {\n attrType: VacancyLossAttrType;\n dataSet: LineChartDateset;\n current: number;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-vacancy-loss-chart-card',\n templateUrl: './vacancy-loss-chart-card.component.html',\n styleUrls: ['./vacancy-loss-chart-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TurnoverKanbanService],\n})\nexport class VacancyLossChartCardComponent extends PuSubscribable implements OnInit {\n @Input() chartId: string;\n\n @Input() set trendDays(value: number | undefined) {\n this.trendDaysValue = value;\n this.loadKpis();\n this.cdr.detectChanges();\n }\n\n vacancyLossThreshold$ = this.store.select(selectSelectedVacancyLossThreshold).pipe(distinctUntilChanged());\n readonly vacancyLossThresholdList = VacancyLostThresholdList;\n tooltipValue: string | undefined;\n showTooltipValue = false;\n\n kpis: RestPortfolioKpi[];\n chartOptions: LineChartOptions = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n scales: {\n yAxes: {\n grid: {\n drawBorder: false,\n display: false,\n },\n title: {\n color: EColorPalette.cGray5,\n },\n ticks: {\n color: EColorPalette.cGray7,\n font: {\n size: 10,\n weight: '400',\n },\n callback: (value, index, ticks) => {\n if (index === 0 || index === ticks.length - 1 || index === Math.round((ticks.length - 1) / 2)) {\n return this.customCurrencyShortWithSuffix.transform(parseFloat(value.toString()), 1);\n }\n return '';\n },\n },\n },\n xAxes: {\n grid: {\n drawBorder: false,\n borderDash: [4, 8],\n borderWidth: 1,\n borderColor: EColorPalette.cGray8,\n tickWidth: 0,\n },\n title: {\n color: EColorPalette.cGray5,\n },\n ticks: {\n maxRotation: 0,\n minRotation: 0,\n color: EColorPalette.cGray7,\n font: {\n size: 10,\n weight: '400',\n },\n },\n },\n },\n maintainAspectRatio: false,\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n mode: 'x',\n intersect: false,\n backgroundColor: 'rgba(255, 255, 255, 1)',\n titleColor: '#767575',\n titleFont: {\n size: 12,\n },\n bodyColor: '#212121',\n bodyFont: {\n size: 14,\n weight: '700',\n },\n caretSize: 0,\n borderColor: '#dadada',\n borderWidth: 1,\n caretPadding: 10,\n cornerRadius: 4,\n displayColors: false,\n callbacks: {\n label: (tooltipItem: any): string | string[] => {\n this.tooltipValue = `$${tooltipItem.formattedValue}`;\n this.cdr.detectChanges();\n return this.tooltipValue;\n },\n },\n },\n },\n };\n chartData: VacancyLossData;\n isLoading = true;\n trendDaysValue?: number;\n portfolioId: number;\n trendDirection: number;\n thresholdTypeKpiType: PortfolioKpiType;\n thresholdTypeKpiTypePerTurn: PortfolioKpiType;\n allPropertyIds$: Observable = this.getAllPropertyIds();\n\n protected readonly EIcon = EIcon;\n protected readonly WorkflowPhaseType = WorkflowPhaseType;\n\n vacancyAttrTypeControl = new UntypedFormControl(VacancyLossTypeGross);\n readonly vacancyAttrTypeList = VacancyLossTypeListConst.map(k => k.label);\n\n constructor(\n private store: Store<{}>,\n private cdr: ChangeDetectorRef,\n private kpiService: KpiService,\n private timezoneService: TimezoneService,\n private customCurrencyShortWithSuffix: CustomCurrencyShortWithSuffixPipe,\n private turnoverKanbanService: TurnoverKanbanService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.dispatchActiveSections();\n\n this.store.dispatch(clearPortfolioKpiTrendLines());\n\n combineLatest([this.store.select(selectSelectedPortfolioId), this.store.select(selectSelectedVacancyLossThreshold)])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(([portfolioId]) => !!portfolioId),\n tap(async ([portfolioId]) => {\n this.portfolioId = portfolioId;\n this.thresholdTypeKpiType = await firstValueFrom(\n this.store.select(selectSelectedVacancyLossThresholdKpiType)\n );\n this.thresholdTypeKpiTypePerTurn = await firstValueFrom(\n this.store.select(selectSelectedVacancyLossThresholdKpiTypePerTurn)\n );\n\n this.loadKpis();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n combineLatest([\n this.store.select(selectPortfolioKpiTrendLines),\n this.store.select(selectChartSettingsValue<{ vacancyType: VacancyLossAttrType }>(this.chartId)),\n this.store.select(selectSelectedPropertyIds),\n this.allPropertyIds$,\n ])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(([kpis]) => !!kpis?.length),\n tap(([kpis, settings, selectedPropertyIds]) => {\n this.kpis = kpis.filter(x => selectedPropertyIds && selectedPropertyIds.includes(x.propertyId));\n const vacancyAttrType = settings?.vacancyType || VacancyLossAttrType.Gross;\n this.fillVacancyLoss(vacancyAttrType);\n this.isLoading = false;\n this.vacancyAttrTypeControl.setValue(VacancyLossTypeListConst.find(x => x.value === vacancyAttrType).label);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.vacancyAttrTypeControl.valueChanges\n .pipe(\n untilDestroyed(this),\n // prevent infinite loop between this observer and above\n distinctUntilChanged(),\n tap((vacancyType: string) => {\n const vacancyAttrType = VacancyLossTypeListConst.find(x => x.label === vacancyType).value;\n this.store.dispatch(\n setChartSettingsValue({ chartId: this.chartId, value: { vacancyType: vacancyAttrType } })\n );\n this.fillVacancyLoss(vacancyAttrType);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n updateThreshold(value: VacancyLostThreshold) {\n this.store.dispatch(setVacancyLossThreshold({ thresholdType: value }));\n }\n\n loadKpis() {\n if (!this.portfolioId) return;\n\n this.store.dispatch(\n loadPortfolioKpiTrendLines({\n portfolioId: this.portfolioId,\n trendDays: getTrendDaysDiff(this.trendDaysValue, this.timezoneService.getCurrentDate()),\n kpiTypes: [this.thresholdTypeKpiType, this.thresholdTypeKpiTypePerTurn],\n })\n );\n }\n\n fillVacancyLoss(vacancyType: VacancyLossAttrType) {\n switch (vacancyType) {\n case VacancyLossAttrType.Gross:\n this.chartData = this.getGrossVacancyLoss();\n break;\n case VacancyLossAttrType.Unit:\n this.chartData = this.getUnitVacancyLoss();\n break;\n case VacancyLossAttrType.Turn:\n this.chartData = this.getTurnVacancyLoss();\n break;\n }\n this.cdr.markForCheck();\n }\n\n getGrossVacancyLoss(): VacancyLossData {\n let grossData = this.prepareVacancyLossGross();\n\n this.trendDaysValue === KpiWindowType.Months12\n ? (grossData = this.getGroupedByMonth(grossData))\n : (grossData = grossData.map(el => ({ ...el, label: moment(el.label, 'MMM DD YYYY').format('MMM D') })));\n\n return {\n dataSet: {\n labels: grossData.map(d => d.label),\n datasets: [this.getDataset(grossData)],\n },\n attrType: VacancyLossAttrType.Gross,\n current: Math.round(grossData.length ? last(grossData).value : 0),\n };\n }\n\n getUnitVacancyLoss(): VacancyLossData {\n let unitData = this.prepareVacancyLoss(this.thresholdTypeKpiType);\n\n this.trendDaysValue === KpiWindowType.Months12\n ? (unitData = this.getGroupedByMonth(unitData))\n : (unitData = unitData.map(el => ({ ...el, label: moment(el.label, 'MMM DD YYYY').format('MMM D') })));\n\n return {\n dataSet: {\n labels: unitData.map(d => d.label),\n datasets: [this.getDataset(unitData)],\n },\n attrType: VacancyLossAttrType.Unit,\n current: Math.round(unitData.length ? last(unitData).value : 0),\n };\n }\n\n getTurnVacancyLoss() {\n let turnData = this.prepareVacancyLoss(this.thresholdTypeKpiTypePerTurn);\n this.trendDaysValue === KpiWindowType.Months12\n ? (turnData = this.getGroupedByMonth(turnData))\n : (turnData = turnData.map(el => ({ ...el, label: moment(el.label, 'MMM DD YYYY').format('MMM D') })));\n\n return {\n dataSet: {\n labels: turnData.map(d => d.label),\n datasets: [this.getDataset(turnData)],\n },\n attrType: VacancyLossAttrType.Turn,\n current: Math.round(turnData.length ? last(turnData).value : 0),\n };\n }\n\n prepareVacancyLossGross(): ChartDataItem[] {\n const data = groupBy(\n this.kpis.filter(x => x.kpiType === this.thresholdTypeKpiType),\n k => moment(k.calculationDate).format('MMM DD YYYY')\n );\n return sortBy(\n Object.keys(data).map(key => {\n const sumValue = sumBy(data[key], k => k.value * k.unitsCount);\n return {\n value: parseFloat(sumValue.toFixed(0)),\n backgroundColor: EColorPalette.cGray5,\n label: key,\n additionalValue: moment(key, 'MMM DD YYYY').toDate().getTime(),\n };\n }),\n v => v.additionalValue\n );\n }\n\n prepareVacancyLoss(kpiType: PortfolioKpiType): ChartDataItem[] {\n const data = groupBy(\n this.kpis.filter(x => x.kpiType === kpiType),\n k => moment(k.calculationDate).format('MMM DD YYYY')\n );\n return sortBy(\n Object.keys(data).map(key => {\n return {\n value: this.kpiService.avg(data[key], kpiType, 0),\n backgroundColor: EColorPalette.cGray5,\n label: key,\n additionalValue: moment(key, 'MMM DD YYYY').toDate().getTime(),\n };\n }),\n v => v.additionalValue\n );\n }\n\n getDataset(chartData: ChartDataItem[]): LineChartDatasetOptions {\n this.calculateTrendDirection(chartData);\n const canvas = document.createElement('canvas');\n document.body.append(canvas);\n const ctx = canvas.getContext('2d');\n const gradient = ctx.createLinearGradient(0, 0, 0, 400);\n if (this.trendDirection < 0) {\n gradient.addColorStop(0, 'rgba(78, 176, 141, 0.4)');\n gradient.addColorStop(1, 'rgba(111, 237, 192, 0)');\n } else {\n gradient.addColorStop(0, 'rgba(233, 58, 79, 0.4)');\n gradient.addColorStop(1, 'rgba(231,109,109,0)');\n }\n\n canvas.remove();\n return {\n data: chartData.map(d => d.value),\n cubicInterpolationMode: 'monotone',\n borderColor: this.trendDirection < 0 ? EColorPalette.cGreen3 : EColorPalette.cRed2,\n backgroundColor: gradient,\n pointRadius: 0,\n pointHitRadius: 25,\n pointHoverRadius: 5,\n pointHoverBackgroundColor: '#fff',\n pointHoverBorderWidth: 4,\n fill: true,\n };\n }\n\n insideChart(inside: boolean) {\n if (!inside) {\n this.tooltipValue = undefined;\n }\n this.showTooltipValue = inside;\n this.cdr.detectChanges();\n }\n\n calculateTrendDirection(chartData: ChartDataItem[]) {\n const trend = createTrend(chartData, 'additionalValue', 'value');\n const timestamps = chartData.map(data => data.additionalValue);\n const xMax = Math.max(...timestamps);\n const xMin = Math.min(...timestamps);\n this.trendDirection = trend.calcY(xMax) - trend.calcY(xMin);\n }\n\n private dispatchActiveSections(): void {\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filterNullish$(),\n tap((userData: UserData) => {\n this.store.dispatch(\n setActiveSections({ activePropertyIds: this.turnoverKanbanService.getExpandedSections(userData.id) })\n );\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private getAllPropertyIds(): Observable {\n return this.store.select(selectSelectedPortfolioId).pipe(\n switchMap((portfolioId: number) =>\n this.store\n .select(selectProperties)\n .pipe(map(data => data.filter(el => el.portfolioId === portfolioId).map(el => el.id)))\n ),\n untilDestroyed(this)\n );\n }\n\n getGroupedByMonth(grossData: ChartDataItem[]): ChartDataItem[] {\n const groupedByMonth: { [key: string]: ChartDataItem } = {};\n grossData.forEach(el => {\n const month = moment(el.label).format('MMM YY');\n\n if (groupedByMonth[month]) {\n groupedByMonth[month].value += el.value;\n } else {\n groupedByMonth[month] = { ...el, label: month };\n }\n });\n return Object.keys(groupedByMonth).map(month => {\n return { label: month, ...groupedByMonth[month] };\n });\n }\n\n protected readonly EColorPalette = EColorPalette;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { ChartCardModule } from '@ui-components/components/chart-card/chart-card.module';\nimport { LineChartModule } from '@ui-components/components/line-chart/line-chart.module';\nimport { PillListModule } from '@ui-components/components/pill-list/pill-list.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { SlideToggleComponent } from '@ui-components/controls/slide-toggle/slide-toggle.component';\n\nimport { VacancyLossChartCardComponent } from './vacancy-loss-chart-card.component';\n\n@NgModule({\n declarations: [VacancyLossChartCardComponent],\n exports: [VacancyLossChartCardComponent],\n imports: [\n SlideToggleComponent,\n CommonModule,\n LineChartModule,\n ChartCardModule,\n PillListModule,\n ReactiveFormsModule,\n PipesModule,\n RadioButtonDropdownModule,\n FormsModule,\n ],\n})\nexport class VacancyLossChartCardModule {}\n","export enum ChartTypes {\n PIE = 'pie',\n BAR = 'bar',\n DOUGHNUT = 'doughnut',\n LINE = 'line',\n}\n\nexport enum ChartSelectorTypes {\n DashboardLeftSelector = 'dashboardLeft',\n DashboardRightSelector = 'dashboardRight',\n}\n\nexport enum WorkflowActionType {\n Hover,\n Leave,\n Select,\n}\n","export enum PortfolioKpiType {\n AvgTurnoverTime = 1,\n AvgOpenTurnoverNow = 93,\n VacantCount = 2,\n OccupancyPercent = 3,\n Expirations30 = 4,\n Expirations60 = 5,\n Expirations90 = 6,\n MoveOuts30 = 7,\n MoveOuts60 = 8,\n MoveOuts90 = 9,\n ApplicationsTotal30 = 10,\n Preleased30 = 11,\n EstOccupancyPercent30 = 12,\n EstOccupancyPercent60 = 13,\n EstOccupancyPercent90 = 14,\n EstOccupancyPercentSmart30 = 15,\n EstOccupancyPercentSmart60 = 16,\n EstOccupancyPercentSmart90 = 17,\n ExpirationsSmart30 = 18,\n ExpirationsSmart60 = 19,\n ExpirationsSmart90 = 20,\n MoveOutTurnovers = 21,\n Notices = 22,\n Bids = 23,\n MakeReady = 24,\n Reno = 25,\n Approval = 27,\n Punch = 26,\n TotalTurnovers = 28,\n Marketing = 29,\n Leasup = 30,\n MoveIn = 31,\n UnleasedUnits = 32,\n UnleasedUnitsNow = 94,\n NewApplications30 = 33,\n CanceledApplications30 = 34,\n PendingApplications30 = 35,\n DeniedApplications30 = 36,\n ApprovedApplications30 = 37,\n ConvertingApplications30 = 38,\n ConvertedApplications30 = 39,\n AvgMoveOutNow = 85,\n AvgMoveOut30 = 40,\n AvgBidNow = 86,\n AvgBid30 = 41,\n AvgMakeReadyNow = 87,\n AvgMakeReady30 = 42,\n AvgRenoNow = 88,\n AvgReno30 = 43,\n AvgLeasupNow = 89,\n AvgLeasup30 = 44,\n AvgApprovalPunchNow = 91,\n AvgApprovalPunch30 = 45,\n AvgMoveOut60 = 46,\n AvgBid60 = 47,\n AvgMakeReady60 = 48,\n AvgReno60 = 49,\n AvgLeasup60 = 50,\n AvgApprovalPunch60 = 51,\n AvgMoveOut90 = 52,\n AvgMoveOut6m = 104,\n AvgMoveOut1y = 113,\n AvgBid90 = 53,\n AvgBid6m = 105,\n AvgBid1y = 114,\n AvgMakeReady90 = 54,\n AvgMakeReady6m = 106,\n AvgMakeReady1y = 115,\n AvgReno90 = 55,\n AvgReno6m = 107,\n AvgReno1y = 116,\n AvgLeasup90 = 56,\n AvgLeaseUp6m = 108,\n AvgLeaseUp1y = 117,\n AvgApprovalPunch90 = 57,\n Preleased60 = 58,\n Preleased90 = 59,\n ApplicationsTotal60 = 60,\n NewApplications60 = 61,\n CanceledApplications60 = 62,\n PendingApplications60 = 63,\n DeniedApplications60 = 64,\n ApprovedApplications60 = 65,\n ConvertingApplications60 = 66,\n ConvertedApplications60 = 67,\n ApplicationsTotal90 = 68,\n NewApplications90 = 69,\n CanceledApplications90 = 70,\n PendingApplications90 = 71,\n DeniedApplications90 = 72,\n ApprovedApplications90 = 73,\n ConvertingApplications90 = 74,\n ConvertedApplications90 = 75,\n AverageTurnTime60 = 76,\n AverageTurnTime90 = 77,\n AverageTurnTime6m = 112,\n AverageTurnTime1y = 121,\n Leasing30 = 78,\n Leasing60 = 79,\n Leasing90 = 80,\n VacancyLossMedium = 81,\n VacancyLossMediumActiveTurns = 82,\n VacancyLossHigh = 83,\n VacancyLossHighActiveTurns = 84,\n VacancyLossNone = 131,\n VacancyLossNoneActiveTurns = 132,\n AvgPunch30 = 95,\n AvgPunch60 = 96,\n AvgPunch90 = 97,\n AvgPunch6m = 109,\n AvgPunch1y = 118,\n AvgApproval30 = 98,\n AvgApproval60 = 99,\n AvgApproval90 = 100,\n AvgApproval6m = 110,\n AvgApproval1y = 119,\n AvgMoveIn30 = 101,\n AvgMoveIn60 = 102,\n AvgMoveIn90 = 103,\n AvgMoveIn6m = 111,\n AvgMoveIn1y = 120,\n AvgPunchNow = 90,\n AvgApprovalNow = 91,\n AvgMoveInNow = 92,\n}\n\nexport interface RestPortfolioKpi {\n calculationDate: string;\n dateUpdated: string;\n kpiType: PortfolioKpiType;\n portfolioId: number;\n propertyId: number;\n unitsCount: number;\n value: number;\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { VacancyLossAttrType } from '@main-application/turnovers/interfaces/vacancy-loss-attr';\nimport { VacancyLostThreshold } from '@main-application/turnovers/interfaces/vacancy-loss-threshold';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { ActiveTurnoversDetailsCombined } from '@shared/interfaces/active-turnover-details';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { DelinquencyDetailsCombined } from '@shared/interfaces/delinquency.interface';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { MyProperties } from '@shared/interfaces/my-properties.interface';\nimport { RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\nimport { RenewalDetailsCombined } from '@shared/interfaces/renewal.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { UnitDetailsByType } from '@shared/interfaces/unit-details-by-type';\nimport { UnitDetails } from '@shared/interfaces/unit-details.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\n\nimport { ActiveTurnoversSummary } from '../../models/active-turnover-summary';\nimport { DelinquencySummary } from '../../models/delinquency-summary';\nimport { RenewalsSummary } from '../../models/renewals-summary';\nimport { UnitsSummary } from '../../models/units-summary';\n\nexport const loadTurnoverKanbanProperty = createAction(\n '[Dashboard] load Turnover Kanban Property',\n props<{ propertyId: number }>()\n);\nexport const loadTurnoverKanbanPropertySuccess = createAction(\n '[Dashboard] load Turnover Kanban Property success',\n props<{ tasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadTurnoverKanbanPropertyError = createAction('[Dashboard] load Turnover Kanban Property error');\nexport const resetTurnoverKanbanProperty = createAction('[Dashboard] reset Turnover Kanban Property');\n\nexport const clearTurnoverKanbanPortfolio = createAction('[Dashboard] clear Turnover Kanban portfolio');\nexport const loadTurnoverKanbanPortfolio = createAction(\n '[Dashboard] load Turnover Kanban portfolio',\n props<{ portfolioId: number }>()\n);\nexport const loadTurnoverKanbanPortfolioSuccess = createAction(\n '[Dashboard] load Turnover Kanban portfolio success',\n props<{ tasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadTurnoverKanbanPortfolioError = createAction('[Dashboard] load Turnover Kanban portfolio error');\nexport const resetTurnoverKanbanPortfolio = createAction('[Dashboard] reset Turnover Kanban portfolio');\nexport const kanbanListGenerateSuccess = createAction(\n '[Dashboard] kanban List Generate Success',\n props<{ kanbanListCount: number }>()\n);\n\nexport const loadUserTurnovers = createAction('[Dashboard] load User Turnovers', props<{ userId: number }>());\nexport const loadUserTurnoversSuccess = createAction(\n '[Dashboard] load User Turnovers success',\n props<{ tasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadUserTurnoversError = createAction('[Dashboard] load User Turnovers error');\nexport const resetUserTurnoversError = createAction('[Dashboard] reset User Turnovers error');\n\nexport const loadMyTasks = createAction('[Dashboard] load My Tasks', props<{ portfolioId: number }>());\nexport const loadMyTasksSuccess = createAction(\n '[Dashboard] load My Tasks success',\n props<{ myTasks: RestTurnoverTaskModel[] }>()\n);\nexport const loadMyTasksError = createAction('[Dashboard] load My Tasks error');\nexport const myTasksHeaderData = createAction(\n '[Dashboard] My Tasks header Data',\n props<{\n myTasksTurnoversCount: number;\n myTasksTicketsCount: number;\n staleTurnoversCount: number;\n lateTurnoversCount: number;\n }>()\n);\n\nexport const clearMyTasks = createAction('[Dashboard] clear My Tasks');\n\nexport const loadPropertyKpi = createAction('[Dashboard] Load property kpi', props<{ propertyId: number }>());\nexport const loadPropertyKpiSucceded = createAction('[Dashboard] Load property kpi succeded', props<{ kpi: any }>());\nexport const loadPropertyKpiFailed = createAction('[Dashboard] Load property kpi failed');\n\nexport const loadUnitSummaryByProperty = createAction(\n '[Dashboard] Load unit summary by property',\n props<{ propertyId: number }>()\n);\nexport const loadUnitSummaryByPropertySucceded = createAction(\n '[Dashboard] Load unit summary by property succeded',\n props<{ unitSummary: UnitsSummary }>()\n);\nexport const loadUnitSummaryByPropertyFailed = createAction('[Dashboard] Load unit summary by property failed');\n\nexport const clearUnitSummaryByProperty = createAction('[Dashboard] clear unit summary by property');\n\nexport const loadActiveTurnoversSummary = createAction(\n '[Dashboard] Load active turnovers summary by property',\n props<{ propertyId: number }>()\n);\nexport const loadActiveTurnoversSummarySucceded = createAction(\n '[Dashboard] Load active turnovers summary by property succeded',\n props<{ activeTurnoversSummary: ActiveTurnoversSummary }>()\n);\nexport const loadActiveTurnoversSummaryFailed = createAction(\n '[Dashboard] Load active turnovers summary by property failed'\n);\n\nexport const clearActiveTurnoversSummary = createAction('[Dashboard] clear Active Turnovers Summary');\n\nexport const loadActiveTurnoversDetails = createAction(\n '[Dashboard] Load active turnovers details by property',\n props<{ propertyId: number }>()\n);\nexport const loadActiveTurnoversDetailsSucceded = createAction(\n '[Dashboard] Load active turnovers details by property succeded',\n props<{ activeTurnoversDetails: ActiveTurnoversDetailsCombined }>()\n);\nexport const loadActiveTurnoversDetailsFailed = createAction(\n '[Dashboard] Load active turnovers details by property failed'\n);\n\nexport const loadDelinquencyByUnit = createAction(\n '[Dashboard] Load delinquency by unit',\n props<{ propertyId: number }>()\n);\nexport const loadDelinquencyByUnitSucceded = createAction(\n '[Dashboard] Load delinquency by unit succeded',\n props<{ delinquencyByUnit: DelinquencyDetailsCombined }>()\n);\nexport const loadDelinquencyByUnitFailed = createAction('[Dashboard] Load delinquency by unit failed');\n\nexport const loadDelinquencySummary = createAction(\n '[Dashboard] Load delinquency summary',\n props<{ propertyId: number; delinquencyFilterType: string }>()\n);\nexport const loadDelinquencySummarySucceded = createAction(\n '[Dashboard] Load delinquency succeded',\n props<{ delinquencySummary: DelinquencySummary }>()\n);\nexport const loadDelinquencySummaryFailed = createAction('[Dashboard] Load delinquency failed');\nexport const clearDelinquencySummary = createAction('[Dashboard] clear delinquency summary');\n\nexport const loadRenewalsSummary = createAction('[Dashboard] Load renewals summary', props<{ propertyId: number }>());\nexport const loadRenewalsSummarySucceded = createAction(\n '[Dashboard] Load renewals summary succeded',\n props<{ renewalsSummary: RenewalsSummary }>()\n);\nexport const loadRenewalsSummaryFailed = createAction('[Dashboard] Load renewals summary failed');\nexport const clearRenewalsSummary = createAction('[Dashboard] clear renewals summary');\n\nexport const loadUnitDetails = createAction(\n '[Dashboard] Load unit details',\n props<{ propertyId: number; dashboardViewType: DashboardViewType }>()\n);\nexport const loadUnitDetailsSuccess = createAction(\n '[Dashboard] Unit details loaded successfully',\n props<{ unitDetails: UnitDetails[] }>()\n);\nexport const loadUnitDetailsFailed = createAction('[Dashboard] Unit details loading failed');\n\nexport const loadUnitDetailsByType = createAction(\n '[Dashboard] Load unit details by type',\n props<{ propertyId: number }>()\n);\nexport const loadUnitDetailsByTypeSuccess = createAction(\n '[Dashboard] Unit details by type loaded successfully',\n props<{ unitDetailsByType: UnitDetailsByType[] }>()\n);\nexport const loadUnitDetailsByTypeFailed = createAction('[Dashboard] Unit details by type loading failed');\n\nexport const loadRenewalsDetails = createAction('[Dashboard] Load renewals details', props<{ propertyId: number }>());\nexport const loadRenewalsDetailsSuccess = createAction(\n '[Dashboard] Renewals details loaded successfully',\n props<{ renewalDetailsCombined: RenewalDetailsCombined }>()\n);\nexport const loadRenewalsDetailsFailed = createAction('[Dashboard] renewals details loading failed');\n\nexport const selectedDashboardViewType = createAction(\n '[Dashboard] Selected dashboard type',\n props<{ dashboardViewType: EnumerationItem }>()\n);\n\nexport const loadMyProperties = createAction('[Dashboard] Load my properties', props<{ portfolioId: number }>());\nexport const loadMyPropertiesSuccess = createAction(\n '[Dashboard] My properties loaded successfully',\n props<{ myProperties: MyProperties[] }>()\n);\nexport const loadMyPropertiesFailed = createAction('[Dashboard] My properties loading failed');\n\nexport const selectedDashboardMode = createAction(\n '[Dashboard] Selected dashboard mode',\n props<{ dashboardMode: DashboardMode }>()\n);\n\nexport const setCustomBreadcrumbs = createAction(\n '[Dashboard] Set custom breadcrumbs',\n props<{ breadcrumbList: BreadcrumbItem[] }>()\n);\n\n/**\n * load Units With Active Turnovers\n */\nexport const loadUnitsWithActiveTurnovers = createAction(\n '[Dashboard] load Units With Active Turnovers',\n props<{ propertyId: number }>()\n);\nexport const loadUnitsWithActiveTurnoversSuccess = createAction(\n '[Dashboard] load Units With Active Turnovers success',\n props<{ unitList: RestUnitSummaryModel[] }>()\n);\nexport const loadUnitsWithActiveTurnoversFailed = createAction('[Dashboard] load Units With Active Turnovers failed');\nexport const resetUnitsWithActiveTurnoversList = createAction('[Dashboard] reset Units With Active Turnovers list');\n/**\n * load Units List\n */\nexport const loadUnitList = createAction('[Dashboard] load Units List', props<{ propertyId: number }>());\nexport const loadUnitListSuccess = createAction(\n '[Dashboard] load Units List success',\n props<{ unitList: RestUnitSummaryModel[] }>()\n);\nexport const loadUnitListFailed = createAction('[Dashboard] load Units List failed');\nexport const resetUnitList = createAction('[Dashboard] reset Unit List');\n\n/**\n * load Unit\n */\nexport const loadUnit = createAction('[Dashboard] load Unit', props<{ unitId: number }>());\nexport const loadUnitSuccess = createAction('[Dashboard] load Unit success', props<{ unit: RestUnitModel }>());\nexport const loadUnitFailed = createAction('[Dashboard] load Unit failed');\nexport const clearUnit = createAction('[Dashboard] load clear unit data');\n\n/**\n * update unit\n */\nexport const updateUnit = createAction('[Dashboard] update unit', props<{ unit: Partial }>());\nexport const updateUnitSuccess = createAction(\n '[Dashboard] update unit success',\n props<{ updatedUnit: RestUnitModel }>()\n);\nexport const updateUnitFailed = createAction('[Dashboard] update unit failed');\n\nexport const updateUnitDoNotAutoCreateTurns = createAction(\n '[Dashboard] update unit DoNotAutoCreateTurns',\n props<{ unitId: number; doNotAutoCreateTurns: boolean }>()\n);\nexport const updateUnitDoNotAutoCreateTurnsSuccess = createAction(\n '[Dashboard] update unit DoNotAutoCreateTurns success',\n props<{ doNotAutoCreateTurns: boolean }>()\n);\nexport const updateUnitDoNotAutoCreateTurnsFailed = createAction('[Dashboard] update unit DoNotAutoCreateTurns failed');\n\nexport const updateUnitDownStatus = createAction(\n '[Dashboard] Update Down Unit Status',\n props<{\n unitId: number;\n isUnitDown?: boolean;\n isUnitDownReason?: string | null;\n isUnitOnHold?: boolean;\n isUnitOnHoldReason?: string | null;\n }>()\n);\nexport const updateUnitDownStatusSuccess = createAction(\n '[Dashboard] Update Down Unit Status Success',\n props<{ updatedUnit: RestUnitModel }>()\n);\nexport const updateUnitDownStatusFailed = createAction('[Dashboard] Update Down Unit Status Failed');\n\n/**\n * get renewal Strategy For Unit\n */\nexport const getRenewalStrategyForUnit = createAction(\n '[Dashboard] get renewal Strategy For Unit',\n props<{ unitId: number }>()\n);\nexport const getRenewalStrategyForUnitSuccess = createAction(\n '[Dashboard] get renewal Strategy For Unit success',\n props<{ unitTypeRentTarget: RestUnitRenewalTargetModel }>()\n);\nexport const getRenewalStrategyForUnitFailed = createAction('[Dashboard] get renewal Strategy For Unit failed');\n\n/**\n * current property\n */\nexport const setCurrentProperty = createAction('[Dashboard] set current portfolio', props<{ propertyId: number }>());\n\nexport const setVacancyLossAttrType = createAction(\n '[Dashboard] setVacancyLossAttrType',\n props<{ attrType: VacancyLossAttrType }>()\n);\n\nexport const setVacancyLossThreshold = createAction(\n '[Dashboard] setVacancyLossThreshold',\n props<{ thresholdType: VacancyLostThreshold }>()\n);\n\nexport const setSelectedProperties = createAction(\n '[Dashboard] Set Selected Properties',\n props<{ selectedProperties: number[] }>()\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { KpiWindowType } from '@shared/enums/kpi-window-type';\nimport { PortfolioKpiFilter } from '@shared/interfaces/portfolio-kpi-filter';\n\n/**\n * load portfolio kpi\n */\nexport const loadPortfolioKpisTrend = createAction(\n '[Dashboard] load portfolio kpis trend',\n props<{ portfolioId: number; kpiTypes: PortfolioKpiType[]; dateOffset: KpiWindowType }>()\n);\nexport const loadPortfolioKpis = createAction(\n '[Dashboard] load portfolio kpis',\n props<{ portfolioId: number; kpiTypes: PortfolioKpiType[] }>()\n);\nexport const setPortfolioKpis = createAction('[Dashboard] set portfolio kpis', props<{ kpis: RestPortfolioKpi[] }>());\nexport const setPortfolioKpisTrend = createAction(\n '[Dashboard] set portfolio kpis trend',\n props<{ kpis: RestPortfolioKpi[] }>()\n);\nexport const loadPortfolioKpisFailed = createAction('[Dashboard] load portfolio kpis failed');\n\nexport const loadPortfolioKpisTrendFailed = createAction('[Dashboard] load portfolio kpis trend failed');\n\nexport const setPortfolioKpisFilter = createAction(\n '[Dashboard] set portfolio kpi filter',\n props<{ portfolioKpisFilter: PortfolioKpiFilter }>()\n);\n\nexport const clearPortfolioKpis = createAction('[Dashboard] clear portfolio kpis');\n\nexport const loadPortfolioKpiTrendLines = createAction(\n '[Dashboard] load portfolio kpi trend lines',\n props<{ portfolioId: number; trendDays: number[]; kpiTypes: PortfolioKpiType[] }>()\n);\n\nexport const setPortfolioKpiTrendLines = createAction(\n '[Dashboard] set portfolio kpi trend lines',\n props<{ kpis: RestPortfolioKpi[] }>()\n);\n\nexport const clearPortfolioKpiTrendLines = createAction('[Dashboard] clear portfolio kpi trends');\n\nexport const setChartSelectorValue = createAction(\n '[Dashboard] set chart selector value',\n props<{ selectorId: string; value: number }>()\n);\n\nexport const setChartSettingsValue = createAction(\n '[Dashboard] set chart settings value',\n props<{ chartId: string; value: any }>()\n);\n\nexport const loadPortfolioKpiWorkflowSteps = createAction(\n '[Dashboard] load portfolio kpi workflow steps',\n props<{ portfolioId: number; trendDays: number[]; kpiTypes: number[] }>()\n);\n\nexport const setPortfolioKpiWorkflowSteps = createAction(\n '[Dashboard] set portfolio kpis workflow steps',\n props<{ kpis: RestPortfolioKpi[] }>()\n);\n\nexport const loadPortfolioKpisWorkflowStepsFailed = createAction(\n '[Dashboard] load portfolio kpis workflow steps failed'\n);\n\nexport const clearPortfolioKpiWorkflowSteps = createAction('[Dashboard] clear portfolio kpi workflow steps');\n","import { createAction, props } from '@ngrx/store';\n\nimport { PropertySelectorSwitchStatus } from '../reducers/property-selector.reducer';\n\nexport const initPropertySelector = createAction(\n '[PropertySelector] initPropertySelector',\n props<{\n userId: number;\n tenantId: number;\n }>()\n);\n\nexport const setPropertySelectorSwitchStatus = createAction(\n '[PropertySelector] Set Properties or Collections',\n props<{ propertySelectorSwitchStatus: PropertySelectorSwitchStatus; doNotStore?: boolean }>()\n);\n\nexport const setSelectedPortfolioId = createAction(\n '[PropertySelector] Selected portfolio id',\n props<{\n portfolioId: number | null;\n }>()\n);\n\nexport const setPropertySingleMode = createAction(\n '[PropertySelector] Single mode',\n props<{\n singleMode: boolean;\n }>()\n);\n\nexport const setSelectedPropertyIds = createAction(\n '[PropertySelector] Selected property ids',\n props<{\n propertyIds: number[] | null;\n allPropertiesSelected: boolean;\n }>()\n);\n\nexport const setSelectedCollectionIds = createAction(\n '[PropertySelector] Selected collection ids',\n props<{ collectionIds: number[] | null; allCollectionsSelected: boolean; doNotStore?: boolean }>()\n);\n\nexport const setJoinedCollections = createAction(\n '[PropertySelector] join collections',\n props<{ state: boolean; doNotStore?: boolean }>()\n);\n\nexport const setJoinedProperties = createAction(\n '[PropertySelector] join properties',\n props<{ state: boolean; doNotStore?: boolean }>()\n);\n\nexport const setDoNotStore = createAction('[Property Selector] Set Do Not Store', props<{ doNotStore: boolean }>());\n","import { ActionReducer, MetaReducer, createReducer, on } from '@ngrx/store';\n\nimport { PortfolioKpiType } from '@dashboards/models/portfolio-kpi';\nimport { patchInitialValue } from '@main-application/store/reducers/hydration-meta.reducer';\nimport { VacancyLossAttrType } from '@main-application/turnovers/interfaces/vacancy-loss-attr';\nimport { VacancyLostThreshold } from '@main-application/turnovers/interfaces/vacancy-loss-threshold';\nimport { DashboardMode } from '@shared/enums/dashboard-mode';\nimport { ActiveTurnoversDetailsCombined } from '@shared/interfaces/active-turnover-details';\nimport { BreadcrumbItem } from '@shared/interfaces/breadcrumb-item';\nimport { DelinquencyDetailsCombined } from '@shared/interfaces/delinquency.interface';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { PropertyKpi } from '@shared/interfaces/kpi';\nimport { MyProperties } from '@shared/interfaces/my-properties.interface';\nimport { RestUnitRenewalTargetModel } from '@shared/interfaces/renevals.interface';\nimport { RenewalDetailsCombined } from '@shared/interfaces/renewal.interface';\nimport { RestPortfolioModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { RestTurnoverTaskModel } from '@shared/interfaces/turnover.interface';\nimport { UnitDetailsByType } from '@shared/interfaces/unit-details-by-type';\nimport { UnitDetails } from '@shared/interfaces/unit-details.interface';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\n\nimport { ActiveTurnoversSummary } from '../../models/active-turnover-summary';\nimport { DelinquencySummary } from '../../models/delinquency-summary';\nimport { RenewalsSummary } from '../../models/renewals-summary';\nimport { UnitsSummary } from '../../models/units-summary';\nimport {\n clearActiveTurnoversSummary,\n clearDelinquencySummary,\n clearMyTasks,\n clearRenewalsSummary,\n clearTurnoverKanbanPortfolio,\n clearUnit,\n clearUnitSummaryByProperty,\n getRenewalStrategyForUnit,\n getRenewalStrategyForUnitFailed,\n getRenewalStrategyForUnitSuccess,\n kanbanListGenerateSuccess,\n loadActiveTurnoversDetails,\n loadActiveTurnoversDetailsFailed,\n loadActiveTurnoversDetailsSucceded,\n loadActiveTurnoversSummary,\n loadActiveTurnoversSummaryFailed,\n loadActiveTurnoversSummarySucceded,\n loadDelinquencyByUnit,\n loadDelinquencyByUnitFailed,\n loadDelinquencyByUnitSucceded,\n loadDelinquencySummary,\n loadDelinquencySummaryFailed,\n loadDelinquencySummarySucceded,\n loadMyProperties,\n loadMyPropertiesFailed,\n loadMyPropertiesSuccess,\n loadMyTasks,\n loadMyTasksError,\n loadMyTasksSuccess,\n loadPropertyKpi,\n loadPropertyKpiFailed,\n loadPropertyKpiSucceded,\n loadRenewalsDetails,\n loadRenewalsDetailsFailed,\n loadRenewalsDetailsSuccess,\n loadRenewalsSummary,\n loadRenewalsSummaryFailed,\n loadRenewalsSummarySucceded,\n loadTurnoverKanbanPortfolio,\n loadTurnoverKanbanPortfolioError,\n loadTurnoverKanbanPortfolioSuccess,\n loadTurnoverKanbanProperty,\n loadTurnoverKanbanPropertyError,\n loadTurnoverKanbanPropertySuccess,\n loadUnit,\n loadUnitDetails,\n loadUnitDetailsByType,\n loadUnitDetailsByTypeFailed,\n loadUnitDetailsByTypeSuccess,\n loadUnitDetailsFailed,\n loadUnitDetailsSuccess,\n loadUnitFailed,\n loadUnitList,\n loadUnitListFailed,\n loadUnitListSuccess,\n loadUnitSuccess,\n loadUnitSummaryByProperty,\n loadUnitSummaryByPropertyFailed,\n loadUnitSummaryByPropertySucceded,\n loadUnitsWithActiveTurnovers,\n loadUnitsWithActiveTurnoversFailed,\n loadUnitsWithActiveTurnoversSuccess,\n loadUserTurnovers,\n loadUserTurnoversError,\n loadUserTurnoversSuccess,\n myTasksHeaderData,\n resetTurnoverKanbanPortfolio,\n resetTurnoverKanbanProperty,\n resetUnitList,\n resetUnitsWithActiveTurnoversList,\n resetUserTurnoversError,\n selectedDashboardMode,\n selectedDashboardViewType,\n setCustomBreadcrumbs,\n setSelectedProperties,\n setVacancyLossAttrType,\n setVacancyLossThreshold,\n updateUnit,\n updateUnitDoNotAutoCreateTurns,\n updateUnitDoNotAutoCreateTurnsFailed,\n updateUnitDoNotAutoCreateTurnsSuccess,\n updateUnitFailed,\n updateUnitSuccess,\n} from '../actions/dashboard.actions';\n\nexport const dashboardsFeatureKey = 'main-dashboard';\n\nconst UPDATE_STORAGE_ACTIONS: string[] = [setVacancyLossAttrType.type, setVacancyLossThreshold.type];\n\nexport interface DashboardsState {\n propertyUserTaskList: RestTurnoverTaskModel[];\n propertyUserTaskListLoading: boolean;\n portfolioUserTaskList: RestTurnoverTaskModel[];\n portfolioUserTaskListLoading: boolean;\n userTaskList: RestTurnoverTaskModel[];\n userTaskListLoading: boolean;\n myTasks: RestTurnoverTaskModel[];\n myTasksLoading: boolean;\n myTasksTicketsCount: number;\n myTasksTurnoversCount: number;\n staleTurnoversCount: number;\n lateTurnoversCount: number;\n kanbanListLoading: boolean;\n propertyKpi: PropertyKpi;\n propertyKpiLoading: boolean;\n kanbanListCount: number;\n unitsSummaryByProperty: UnitsSummary;\n unitsSummaryByPropertyLoading: boolean;\n activeTurnoversSummary: ActiveTurnoversSummary;\n activeTurnoversSummaryLoading: boolean;\n activeTurnoversDetails: ActiveTurnoversDetailsCombined;\n activeTurnoversDetailsLoading: boolean;\n delinquencyByUnit: DelinquencyDetailsCombined;\n delinquencyByUnitLoading: boolean;\n delinquencySummary: DelinquencySummary;\n delinquencySummaryLoading: boolean;\n renewalsSummary: RenewalsSummary;\n renewalsSummaryLoading: boolean;\n unitDetailsLoading: boolean;\n unitDetails: UnitDetails[];\n unitDetailsByTypeLoading: boolean;\n unitDetailsByType: UnitDetailsByType[];\n renewalDetailsCombinedLoading: boolean;\n renewalDetailsCombined: RenewalDetailsCombined;\n selectedDashboardViewType: EnumerationItem;\n portfolioItemsLoading: boolean;\n portfolioItems: RestPortfolioModel[];\n myPropertiesLoading: boolean;\n myProperties: MyProperties[];\n dashboardMode: DashboardMode;\n breadcrumbList: BreadcrumbItem[];\n unitListWithActiveTurnover: RestUnitSummaryModel[];\n unitListWithActiveTurnoverLoading: boolean;\n unitList: RestUnitSummaryModel[];\n unitListLoading: boolean;\n unit: RestUnitModel;\n unitLoading: boolean;\n unitDoNotAutoCreateTurnsLoading: boolean;\n renewalStrategyForUnit: RestUnitRenewalTargetModel;\n renewalStrategyForUnitLoading: boolean;\n currentPropertyId: number;\n currentPortfolioId: number;\n selectedVacancyLossAttr: VacancyLossAttrType;\n selectedVacancyLossThreshold: VacancyLostThreshold;\n selectedVacancyLossThresholdKpiType: PortfolioKpiType;\n selectedVacancyLossThresholdKpiTypePerTurn: PortfolioKpiType;\n selectedProperties: number[];\n}\n\nexport const initialState: DashboardsState = patchInitialValue(\n {\n activeTurnoversDetails: null,\n activeTurnoversDetailsLoading: false,\n activeTurnoversSummary: null,\n activeTurnoversSummaryLoading: false,\n breadcrumbList: [],\n currentPortfolioId: null,\n currentPropertyId: null,\n dashboardMode: null,\n delinquencyByUnit: null,\n delinquencyByUnitLoading: false,\n delinquencySummary: null,\n delinquencySummaryLoading: false,\n myProperties: [],\n myPropertiesLoading: false,\n portfolioItems: [],\n portfolioItemsLoading: false,\n portfolioUserTaskList: [],\n portfolioUserTaskListLoading: false,\n kanbanListLoading: false,\n kanbanListCount: null,\n propertyKpi: null,\n propertyKpiLoading: false,\n propertyUserTaskList: [],\n propertyUserTaskListLoading: false,\n userTaskList: [],\n userTaskListLoading: false,\n myTasks: [],\n myTasksLoading: false,\n myTasksTicketsCount: null,\n myTasksTurnoversCount: null,\n staleTurnoversCount: null,\n lateTurnoversCount: null,\n renewalDetailsCombined: null,\n renewalDetailsCombinedLoading: false,\n renewalStrategyForUnit: null,\n renewalStrategyForUnitLoading: false,\n renewalsSummary: null,\n renewalsSummaryLoading: false,\n selectedDashboardViewType: null,\n unit: null,\n unitDetails: null,\n unitDetailsByType: [],\n unitDetailsByTypeLoading: false,\n unitDetailsLoading: true,\n unitList: [],\n unitListLoading: false,\n unitListWithActiveTurnover: [],\n unitListWithActiveTurnoverLoading: false,\n unitLoading: false,\n unitDoNotAutoCreateTurnsLoading: false,\n unitsSummaryByProperty: null,\n unitsSummaryByPropertyLoading: false,\n selectedVacancyLossAttr: VacancyLossAttrType.Gross,\n selectedVacancyLossThreshold: VacancyLostThreshold.None,\n selectedVacancyLossThresholdKpiType: PortfolioKpiType.VacancyLossNone,\n selectedVacancyLossThresholdKpiTypePerTurn: PortfolioKpiType.VacancyLossNoneActiveTurns,\n selectedProperties: null,\n },\n dashboardsFeatureKey\n);\n\nconst hydrationMetaReducer = (reducer: ActionReducer): ActionReducer => {\n return (state, action) => {\n const nextState = reducer(state, action);\n if (UPDATE_STORAGE_ACTIONS.includes(action.type)) {\n localStorage.setItem(\n dashboardsFeatureKey,\n JSON.stringify({\n selectedVacancyLossAttr: nextState.selectedVacancyLossAttr,\n selectedVacancyLossThreshold: nextState.selectedVacancyLossThreshold,\n selectedVacancyLossThresholdKpiType: nextState.selectedVacancyLossThresholdKpiType,\n selectedVacancyLossThresholdKpiTypePerTurn: nextState.selectedVacancyLossThresholdKpiTypePerTurn,\n })\n );\n }\n return nextState;\n };\n};\n\nexport const metaDashboardReducers: Array> = [hydrationMetaReducer];\n\nexport const reducer = createReducer(\n initialState,\n on(loadTurnoverKanbanProperty, (state, action) => ({\n ...state,\n propertyUserTaskListLoading: true,\n })),\n on(loadTurnoverKanbanPropertySuccess, (state, action) => ({\n ...state,\n propertyUserTaskList: action.tasks,\n propertyUserTaskListLoading: false,\n })),\n on(loadTurnoverKanbanPropertyError, (state, action) => ({\n ...state,\n propertyUserTaskList: [],\n propertyUserTaskListLoading: false,\n })),\n on(resetTurnoverKanbanProperty, (state, action) => ({\n ...state,\n propertyUserTaskList: [],\n })),\n on(loadUserTurnovers, (state, action) => ({\n ...state,\n userTaskListLoading: true,\n })),\n on(loadUserTurnoversSuccess, (state, action) => ({\n ...state,\n userTaskList: action.tasks,\n userTaskListLoading: false,\n })),\n on(loadUserTurnoversError, (state, action) => ({\n ...state,\n userTaskList: [],\n userTaskListLoading: false,\n })),\n on(resetUserTurnoversError, (state, action) => ({\n ...state,\n userTaskList: [],\n })),\n on(loadMyTasks, (state, action) => ({\n ...state,\n myTasksLoading: true,\n })),\n on(loadMyTasksSuccess, (state, action) => ({\n ...state,\n myTasks: action.myTasks,\n myTasksLoading: false,\n })),\n on(loadMyTasksError, (state, action) => ({\n ...state,\n myTasks: [],\n myTasksLoading: false,\n })),\n on(clearMyTasks, (state, action) => ({\n ...state,\n myTasks: [],\n })),\n on(myTasksHeaderData, (state, action) => ({\n ...state,\n myTasksTicketsCount: action.myTasksTicketsCount,\n myTasksTurnoversCount: action.myTasksTurnoversCount,\n staleTurnoversCount: action.staleTurnoversCount,\n lateTurnoversCount: action.lateTurnoversCount,\n })),\n on(clearTurnoverKanbanPortfolio, (state, action) => ({\n ...state,\n portfolioUserTaskList: null,\n })),\n on(loadTurnoverKanbanPortfolio, (state, action) => ({\n ...state,\n portfolioUserTaskListLoading: true,\n kanbanListLoading: true,\n })),\n on(loadTurnoverKanbanPortfolioSuccess, (state, action) => ({\n ...state,\n portfolioUserTaskList: action.tasks,\n portfolioUserTaskListLoading: false,\n })),\n on(loadTurnoverKanbanPortfolioError, (state, action) => ({\n ...state,\n portfolioUserTaskList: [],\n portfolioUserTaskListLoading: false,\n kanbanListLoading: false,\n kanbanListCount: 0,\n })),\n on(resetTurnoverKanbanPortfolio, (state, action) => ({\n ...state,\n portfolioUserTaskList: [],\n })),\n on(kanbanListGenerateSuccess, (state, action) => ({\n ...state,\n kanbanListLoading: false,\n kanbanListCount: action.kanbanListCount,\n })),\n\n on(loadPropertyKpi, (state, action) => ({ ...state, propertyKpiLoading: true })),\n on(loadPropertyKpiSucceded, (state, action) => ({ ...state, propertyKpiLoading: false, propertyKpi: action.kpi })),\n on(loadPropertyKpiFailed, (state, action) => ({ ...state, propertyKpiLoading: false, propertyKpi: null })),\n on(loadUnitSummaryByProperty, (state, action) => ({ ...state, unitsSummaryByPropertyLoading: true })),\n on(loadUnitSummaryByPropertySucceded, (state, action) => ({\n ...state,\n unitsSummaryByPropertyLoading: false,\n unitsSummaryByProperty: action.unitSummary,\n })),\n on(loadUnitSummaryByPropertyFailed, (state, action) => ({\n ...state,\n unitsSummaryByPropertyLoading: false,\n unitsSummaryByProperty: null,\n })),\n on(clearUnitSummaryByProperty, (state, action) => ({\n ...state,\n unitsSummaryByProperty: null,\n })),\n on(loadActiveTurnoversSummary, (state, action) => ({ ...state, activeTurnoversSummaryLoading: true })),\n on(loadActiveTurnoversSummarySucceded, (state, action) => ({\n ...state,\n activeTurnoversSummaryLoading: false,\n activeTurnoversSummary: action.activeTurnoversSummary,\n })),\n on(loadActiveTurnoversSummaryFailed, (state, action) => ({\n ...state,\n activeTurnoversSummaryLoading: false,\n activeTurnoversSummary: null,\n })),\n on(clearActiveTurnoversSummary, (state, action) => ({\n ...state,\n activeTurnoversSummary: null,\n })),\n on(loadActiveTurnoversDetails, (state, action) => ({ ...state, activeTurnoversDetailsLoading: true })),\n on(loadActiveTurnoversDetailsSucceded, (state, action) => ({\n ...state,\n activeTurnoversDetailsLoading: false,\n activeTurnoversDetails: action.activeTurnoversDetails,\n })),\n on(loadActiveTurnoversDetailsFailed, (state, action) => ({\n ...state,\n activeTurnoversDetailsLoading: false,\n activeTurnoversDetails: null,\n })),\n on(loadDelinquencySummary, (state, action) => ({ ...state, delinquencySummaryLoading: true })),\n on(loadDelinquencySummarySucceded, (state, action) => ({\n ...state,\n delinquencySummary: action.delinquencySummary,\n delinquencySummaryLoading: false,\n })),\n on(loadDelinquencySummaryFailed, (state, action) => ({\n ...state,\n delinquencySummaryLoading: false,\n delinquencySummary: null,\n })),\n on(clearDelinquencySummary, (state, action) => ({ ...state, delinquencySummary: null })),\n\n on(loadDelinquencyByUnit, (state, action) => ({ ...state, delinquencyByUnitLoading: true })),\n on(loadDelinquencyByUnitSucceded, (state, action) => ({\n ...state,\n delinquencyByUnitLoading: false,\n delinquencyByUnit: action.delinquencyByUnit,\n })),\n on(loadDelinquencyByUnitFailed, (state, action) => ({\n ...state,\n delinquencyByUnitLoading: false,\n delinquencyByUnit: null,\n })),\n on(loadRenewalsSummary, (state, action) => ({ ...state, renewalsSummaryLoading: true })),\n on(loadRenewalsSummarySucceded, (state, action) => ({\n ...state,\n renewalsSummaryLoading: false,\n renewalsSummary: action.renewalsSummary,\n })),\n on(loadRenewalsSummaryFailed, (state, action) => ({\n ...state,\n renewalsSummaryLoading: false,\n renewalsSummary: null,\n })),\n on(clearRenewalsSummary, (state, action) => ({\n ...state,\n renewalsSummary: null,\n })),\n on(loadUnitDetails, (state, action) => ({ ...state, unitDetailsLoading: true })),\n on(loadUnitDetailsSuccess, (state, action) => ({\n ...state,\n unitDetailsLoading: false,\n unitDetails: action.unitDetails,\n })),\n on(loadUnitDetailsFailed, (state, action) => ({ ...state, unitDetailsLoading: false, unitDetails: [] })),\n on(loadUnitDetailsByType, (state, action) => ({ ...state, unitDetailsByTypeLoading: true })),\n on(loadUnitDetailsByTypeSuccess, (state, action) => ({\n ...state,\n unitDetailsByTypeLoading: false,\n unitDetailsByType: action.unitDetailsByType,\n })),\n on(loadUnitDetailsByTypeFailed, (state, action) => ({\n ...state,\n unitDetailsByTypeLoading: false,\n unitDetailsByType: [],\n })),\n on(loadRenewalsDetails, (state, action) => ({ ...state, renewalDetailsCombinedLoading: true })),\n on(loadRenewalsDetailsSuccess, (state, action) => ({\n ...state,\n renewalDetailsCombinedLoading: false,\n renewalDetailsCombined: action.renewalDetailsCombined,\n })),\n on(loadRenewalsDetailsFailed, (state, action) => ({\n ...state,\n renewalDetailsCombinedLoading: false,\n renewalsDetails: {\n renewalDetailsCombined: [],\n renewalKPI: null,\n },\n })),\n on(selectedDashboardViewType, (state, action) => ({\n ...state,\n selectedDashboardViewType: action.dashboardViewType,\n })),\n on(loadMyProperties, (state, action) => ({ ...state, myPropertiesLoading: true })),\n on(loadMyPropertiesSuccess, (state, action) => ({\n ...state,\n myPropertiesLoading: false,\n myProperties: action.myProperties,\n })),\n on(loadMyPropertiesFailed, (state, action) => ({\n ...state,\n myPropertiesLoading: false,\n myProperties: [],\n })),\n on(selectedDashboardMode, (state, action) => ({ ...state, dashboardMode: action.dashboardMode })),\n on(setCustomBreadcrumbs, (state, action) => ({ ...state, breadcrumbList: action.breadcrumbList })),\n\n /**\n * load Units With Active Turnovers\n */\n on(loadUnitsWithActiveTurnovers, (state, action) => ({ ...state, unitListWithActiveTurnoverLoading: true })),\n on(loadUnitsWithActiveTurnoversSuccess, (state, action) => ({\n ...state,\n unitListWithActiveTurnover: action.unitList,\n unitListWithActiveTurnoverLoading: false,\n })),\n on(loadUnitsWithActiveTurnoversFailed, (state, action) => ({\n ...state,\n unitListWithActiveTurnover: [],\n unitListWithActiveTurnoverLoading: false,\n })),\n on(resetUnitsWithActiveTurnoversList, (state, action) => ({\n ...state,\n unitListWithActiveTurnover: [],\n })),\n /**\n * load Units With Active Turnovers\n */\n on(loadUnitList, (state, action) => ({ ...state, unitListLoading: true })),\n on(loadUnitListSuccess, (state, action) => ({\n ...state,\n unitList: action.unitList,\n unitListLoading: false,\n })),\n on(loadUnitListFailed, (state, action) => ({\n ...state,\n unitList: [],\n unitListLoading: false,\n })),\n on(resetUnitList, (state, action) => ({\n ...state,\n unitList: [],\n })),\n\n /**\n * load Unit\n */\n on(loadUnit, (state, action) => ({ ...state, unitLoading: true })),\n on(loadUnitSuccess, (state, action) => ({\n ...state,\n unit: action.unit,\n unitLoading: false,\n })),\n on(loadUnitFailed, (state, action) => ({\n ...state,\n unit: null,\n unitLoading: false,\n })),\n on(clearUnit, (state, action) => ({\n ...state,\n unit: null,\n })),\n\n /**\n * update Unit\n */\n on(updateUnit, (state, action) => ({ ...state, unitLoading: true })),\n on(updateUnitSuccess, (state, action) => ({\n ...state,\n unit: action.updatedUnit,\n unitLoading: false,\n })),\n on(updateUnitFailed, (state, action) => ({\n ...state,\n unit: null,\n unitLoading: false,\n })),\n\n /**\n * update Unit DoNotAutoCreateTurns\n */\n on(updateUnitDoNotAutoCreateTurns, (state, action) => ({ ...state, unitDoNotAutoCreateTurnsLoading: true })),\n on(updateUnitDoNotAutoCreateTurnsSuccess, (state, action) => ({\n ...state,\n unit: { ...state.unit, doNotAutoCreateTurns: action.doNotAutoCreateTurns },\n unitDoNotAutoCreateTurnsLoading: false,\n })),\n on(updateUnitDoNotAutoCreateTurnsFailed, (state, action) => ({\n ...state,\n unit: { ...state.unit },\n unitDoNotAutoCreateTurnsLoading: false,\n })),\n\n /**\n * get renewal Strategy For Unit\n */\n on(getRenewalStrategyForUnit, (state, action) => ({ ...state, renewalStrategyForUnitLoading: true })),\n on(getRenewalStrategyForUnitSuccess, (state, action) => ({\n ...state,\n renewalStrategyForUnit: action.unitTypeRentTarget,\n renewalStrategyForUnitLoading: false,\n })),\n on(getRenewalStrategyForUnitFailed, (state, action) => ({\n ...state,\n renewalStrategyForUnit: null,\n renewalStrategyForUnitLoading: false,\n })),\n on(setVacancyLossAttrType, (state, action) => ({\n ...state,\n selectedVacancyLossAttr: action.attrType,\n })),\n on(setVacancyLossThreshold, (state, action) => {\n let selectedVacancyLossThresholdKpiType, selectedVacancyLossThresholdKpiTypePerTurn: PortfolioKpiType;\n switch (action.thresholdType) {\n case VacancyLostThreshold.None:\n selectedVacancyLossThresholdKpiType = PortfolioKpiType.VacancyLossNone;\n selectedVacancyLossThresholdKpiTypePerTurn = PortfolioKpiType.VacancyLossNoneActiveTurns;\n break;\n case VacancyLostThreshold.Medium:\n selectedVacancyLossThresholdKpiType = PortfolioKpiType.VacancyLossMedium;\n selectedVacancyLossThresholdKpiTypePerTurn = PortfolioKpiType.VacancyLossMediumActiveTurns;\n break;\n case VacancyLostThreshold.High:\n selectedVacancyLossThresholdKpiType = PortfolioKpiType.VacancyLossHigh;\n selectedVacancyLossThresholdKpiTypePerTurn = PortfolioKpiType.VacancyLossHighActiveTurns;\n break;\n }\n return {\n ...state,\n selectedVacancyLossThreshold: action.thresholdType,\n selectedVacancyLossThresholdKpiType,\n selectedVacancyLossThresholdKpiTypePerTurn,\n };\n }),\n on(setSelectedProperties, (state, action) => ({\n ...state,\n selectedProperties: action.selectedProperties,\n }))\n);\n","import { MetaReducer, createReducer, on } from '@ngrx/store';\n\nimport { RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport {\n clearPortfolioKpiTrendLines,\n clearPortfolioKpiWorkflowSteps,\n clearPortfolioKpis,\n loadPortfolioKpiTrendLines,\n loadPortfolioKpiWorkflowSteps,\n loadPortfolioKpis,\n loadPortfolioKpisFailed,\n loadPortfolioKpisTrend,\n loadPortfolioKpisTrendFailed,\n loadPortfolioKpisWorkflowStepsFailed,\n setChartSelectorValue,\n setChartSettingsValue,\n setPortfolioKpiTrendLines,\n setPortfolioKpiWorkflowSteps,\n setPortfolioKpis,\n setPortfolioKpisFilter,\n setPortfolioKpisTrend,\n} from '@dashboards/store/actions/kpi.actions';\nimport { hydrationMetaReducer, patchInitialValue } from '@main-application/store/reducers/hydration-meta.reducer';\nimport { KpiType } from '@shared/enums/kpi-type';\nimport { KpiWindowType } from '@shared/enums/kpi-window-type';\nimport { PortfolioKpiFilter } from '@shared/interfaces/portfolio-kpi-filter';\n\nexport const kpiFeatureKey = 'dashboard-kpis';\n\nexport interface DashboardKpisState {\n portfolioKpis: RestPortfolioKpi[];\n portfolioKpisLoading: boolean;\n portfolioKpisTrend: RestPortfolioKpi[];\n portfolioKpisTrendLoading: boolean;\n portfolioKpisFilter: PortfolioKpiFilter;\n portfolioKpiTrendLines: RestPortfolioKpi[];\n portfolioKpiTrendLinesLoading: boolean;\n portfolioKpiWorkflowSteps: RestPortfolioKpi[];\n portfolioKpiWorkflowStepsLoading: boolean;\n chartSelectors: {\n [key: string]: number;\n };\n chartSettings: {\n [key: string]: any;\n };\n}\n\nexport const initialState: DashboardKpisState = patchInitialValue(\n {\n portfolioKpis: [],\n portfolioKpisTrendLoading: false,\n portfolioKpisFilter: {\n windowType: KpiWindowType.Days30,\n type: KpiType.All,\n },\n portfolioKpisLoading: false,\n portfolioKpisTrend: [],\n portfolioKpiTrendLines: [],\n portfolioKpiTrendLinesLoading: false,\n portfolioKpiWorkflowSteps: [],\n portfolioKpiWorkflowStepsLoading: false,\n chartSelectors: {},\n chartSettings: {},\n },\n kpiFeatureKey\n);\n\nexport const metaDashboardKpiReducers: Array> = [\n hydrationMetaReducer(kpiFeatureKey),\n];\n\nexport const reducer = createReducer(\n initialState,\n on(setPortfolioKpis, (state, action) => ({\n ...state,\n portfolioKpisLoading: false,\n portfolioKpis: action.kpis,\n })),\n on(setPortfolioKpisTrend, (state, action) => ({\n ...state,\n portfolioKpisTrendLoading: false,\n portfolioKpisTrend: action.kpis,\n })),\n on(loadPortfolioKpis, (state, action) => ({\n ...state,\n portfolioKpisLoading: true,\n })),\n on(loadPortfolioKpisTrend, (state, action) => ({\n ...state,\n portfolioKpisTrendLoading: true,\n })),\n on(loadPortfolioKpisFailed, (state, action) => ({\n ...state,\n portfolioKpisLoading: false,\n })),\n on(loadPortfolioKpisTrendFailed, (state, action) => ({\n ...state,\n portfolioKpisTrendLoading: false,\n })),\n on(setPortfolioKpisFilter, (state, action) => ({\n ...state,\n portfolioKpisFilter: action.portfolioKpisFilter,\n })),\n on(clearPortfolioKpis, state => ({\n ...state,\n portfolioKpis: [],\n portfolioKpisTrend: [],\n })),\n on(setPortfolioKpiTrendLines, (state, action) => ({\n ...state,\n portfolioKpiTrendLines: action.kpis,\n portfolioKpiTrendLinesLoading: false,\n })),\n on(clearPortfolioKpiTrendLines, state => ({\n ...state,\n portfolioKpiTrendLines: [],\n })),\n on(setChartSelectorValue, (state, action) => ({\n ...state,\n chartSelectors: { ...state.chartSelectors, [action.selectorId]: action.value },\n })),\n on(setChartSettingsValue, (state, action) => ({\n ...state,\n chartSettings: { ...state.chartSettings, [action.chartId]: action.value },\n })),\n on(loadPortfolioKpiTrendLines, state => ({\n ...state,\n portfolioKpiTrendLinesLoading: true,\n })),\n on(loadPortfolioKpiWorkflowSteps, state => ({\n ...state,\n portfolioKpiWorkflowStepsLoading: true,\n })),\n on(setPortfolioKpiWorkflowSteps, (state, action) => ({\n ...state,\n portfolioKpiWorkflowSteps: action.kpis,\n portfolioKpiWorkflowStepsLoading: false,\n })),\n on(loadPortfolioKpisWorkflowStepsFailed, (state, action) => ({\n ...state,\n portfolioKpiWorkflowStepsLoading: false,\n })),\n on(clearPortfolioKpiWorkflowSteps, state => ({\n ...state,\n portfolioKpiWorkflowSteps: [],\n }))\n);\n","import { MetaReducer, createReducer, on } from '@ngrx/store';\n\nimport {\n initPropertySelector,\n setDoNotStore,\n setJoinedProperties,\n setPropertySelectorSwitchStatus,\n setPropertySingleMode,\n setSelectedCollectionIds,\n setSelectedPortfolioId,\n setSelectedPropertyIds,\n} from '@dashboards/store/actions/property-selector.actions';\nimport { allPortfoliosValue } from '@main-application/application-menu/property-selector/constants';\nimport {\n dynamicHydrationMetaReducer,\n patchInitialValue,\n} from '@main-application/store/reducers/hydration-meta.reducer';\n\nexport const propertySelectorFeatureKey = 'property-selector';\nlet dynamicPropertySelectorFeatureKey = '';\n\nconst getPropertySelectorFeatureKey = (tenantId: number, userId: number) =>\n `${propertySelectorFeatureKey}_${tenantId}_${userId}`;\n\nexport enum PropertySelectorSwitchStatus {\n PORTFOLIO = 'portfolio',\n COLLECTION = 'collection',\n}\n\nexport interface PropertySelectorState {\n portfolioId?: number;\n propertySelectorSwitchStatus: PropertySelectorSwitchStatus.PORTFOLIO | PropertySelectorSwitchStatus.COLLECTION;\n singleModeEnabled: boolean;\n propertyIds?: number[];\n collectionIds?: number[];\n allPropertiesSelected?: boolean;\n allCollectionsSelected?: boolean;\n joinProperties: boolean;\n doNotStore: boolean;\n}\n\nexport const initialState: PropertySelectorState = patchInitialValue(\n {\n portfolioId: allPortfoliosValue,\n propertySelectorSwitchStatus: PropertySelectorSwitchStatus.PORTFOLIO,\n propertyIds: undefined,\n singleModeEnabled: false,\n allPropertiesSelected: true,\n allCollectionsSelected: true,\n joinProperties: false,\n doNotStore: false,\n },\n propertySelectorFeatureKey\n);\n\nexport const metaPropertySelectorReducers: Array> = [\n dynamicHydrationMetaReducer(\n () => dynamicPropertySelectorFeatureKey,\n propertySelectorFeatureKey\n ),\n];\n\nexport const propertySelectorReducer = createReducer(\n initialState,\n on(initPropertySelector, (state, action) => {\n dynamicPropertySelectorFeatureKey = getPropertySelectorFeatureKey(action.tenantId, action.userId);\n return {\n ...patchInitialValue(state, dynamicPropertySelectorFeatureKey),\n };\n }),\n on(setSelectedPortfolioId, (state, action) => ({\n ...state,\n portfolioId: action.portfolioId,\n })),\n on(setPropertySingleMode, (state, action) => ({\n ...state,\n singleModeEnabled: action.singleMode,\n })),\n on(setSelectedPropertyIds, (state, action) => {\n const newState = {\n ...state,\n propertyIds: action.propertyIds,\n allPropertiesSelected: action.allPropertiesSelected,\n };\n return newState;\n }),\n on(setSelectedCollectionIds, (state, action) => {\n const newState = {\n ...state,\n collectionIds: action.collectionIds,\n allCollectionsSelected: action.allCollectionsSelected,\n };\n return newState;\n }),\n on(setPropertySelectorSwitchStatus, (state, action) => ({\n ...state,\n propertySelectorSwitchStatus: action.propertySelectorSwitchStatus,\n })),\n on(setJoinedProperties, (state, action) => ({\n ...state,\n joinProperties: action.state,\n })),\n on(setDoNotStore, (state, action) => ({\n ...state,\n doNotStore: action.doNotStore,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromDashboards from '../reducers/dashboards.reducer';\n\nexport const selectDashboardsState = createFeatureSelector(\n fromDashboards.dashboardsFeatureKey\n);\n\nexport const selectPropertyUserTaskList = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.propertyUserTaskList\n);\nexport const selectPropertyUserTaskListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.propertyUserTaskListLoading\n);\n\nexport const selectMyTasks = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.myTasks);\nexport const selectMyTasksLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myTasksLoading\n);\nexport const selectMyTasksTurnoversCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myTasksTurnoversCount\n);\nexport const selectStaleTurnoversCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.staleTurnoversCount\n);\nexport const selectLateTurnoversCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.lateTurnoversCount\n);\n\nexport const selectMyTasksTicketsCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myTasksTicketsCount\n);\n\nexport const selectUserTaskListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.userTaskListLoading\n);\n\nexport const selectKanbanListCount = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.kanbanListCount\n);\n\nexport const selectPropertyKpiLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.propertyKpiLoading\n);\n\nexport const selectPropertyKpi = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.propertyKpi);\n\nexport const selectUnitsSummaryByProperty = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitsSummaryByProperty\n);\nexport const selectUnitsSummaryByPropertyLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitsSummaryByPropertyLoading\n);\n\nexport const selectActiveTurnoversDetails = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.activeTurnoversDetails\n);\n\nexport const selectDelinquencyByUnit = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencyByUnit\n);\nexport const selectDelinquencyByUnitLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencyByUnitLoading\n);\n\nexport const selectDelinquencySummary = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencySummary\n);\nexport const selectDelinquencySummaryLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.delinquencySummaryLoading\n);\n\nexport const selectRenewalsSummary = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalsSummary\n);\nexport const selectRenewalsSummaryLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalsSummaryLoading\n);\n\nexport const selectUnitDetails = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unitDetails);\nexport const selectUnitDetailsLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDetailsLoading\n);\n\nexport const selectUnitDetailsByType = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDetailsByType\n);\nexport const selectUnitDetailsByTypeLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDetailsByTypeLoading\n);\n\nexport const selectCurrentDashboardViewType = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedDashboardViewType\n);\n\nexport const selectCurrentDashboardViewTypeSimpleText = createSelector(\n selectCurrentDashboardViewType,\n selectedDashboardViewType => selectedDashboardViewType?.simpleText\n);\n\nexport const selectCurrentDashboardViewTypeEnumerationValue = createSelector(\n selectCurrentDashboardViewType,\n selectedDashboardViewType => selectedDashboardViewType?.enumerationValue\n);\n\nexport const selectMyProperties = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myProperties\n);\n\nexport const selectMyPropertiesLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.myPropertiesLoading\n);\n\nexport const selectSelectedDashboardMode = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.dashboardMode\n);\n\nexport const selectCustomBreadcrumbs = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.breadcrumbList\n);\n/**\n * select Units With Active Turnovers\n */\n\nexport const selectUnitListWithActiveTurnover = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitListWithActiveTurnover\n);\nexport const selectUnitListWithActiveTurnoverLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitListWithActiveTurnoverLoading\n);\n\n/**\n * select Unit list\n */\nexport const selectUnitList = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unitList);\nexport const selectUnitListLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitListLoading\n);\n\n/**\n * select unit\n */\nexport const selectUnit = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unit);\nexport const selectUnitLoading = createSelector(selectDashboardsState, dashboardsState => dashboardsState?.unitLoading);\n\n/**\n * select unit unitDoNotAutoCreateTurnsLoading\n */\nexport const selectUnitDoNotAutoCreateTurnsLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.unitDoNotAutoCreateTurnsLoading\n);\n\n/**\n * select renewal Strategy For Unit\n */\nexport const selectRenewalStrategyForUnit = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalStrategyForUnit\n);\n\nexport const selectRenewalStrategyForUnitLoading = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.renewalStrategyForUnitLoading\n);\n\nexport const selectSelectedVacancyLossAttr = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossAttr\n);\n\nexport const selectSelectedVacancyLossThreshold = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossThreshold\n);\n\nexport const selectSelectedVacancyLossThresholdKpiType = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossThresholdKpiType\n);\n\nexport const selectSelectedVacancyLossThresholdKpiTypePerTurn = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedVacancyLossThresholdKpiTypePerTurn\n);\n\n/**\n * select properties added from turnovers and boards\n */\nexport const selectSelectedProperties = createSelector(\n selectDashboardsState,\n dashboardsState => dashboardsState?.selectedProperties\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport * as fromDashboardKpis from '@dashboards/store/reducers/kpi.reducer';\nimport { selectSelectedPropertyIds } from '@dashboards/store/selectors/property-selector.selectors';\n\nexport const selectDashboardKpisState = createFeatureSelector(\n fromDashboardKpis.kpiFeatureKey\n);\n\n/**\n * dashboards portfolio kpi\n */\n\nexport const selectPortfolioKpis = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpis\n);\n\nconst selectPortfolioKpisTrend = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpisTrend\n);\n\nexport const selectPortfolioKpisLoading = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpisLoading\n);\n\nexport const selectPortfolioKpisTrendLoading = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpiTrendLinesLoading\n);\n\nexport const selectPortfolioKpisFilter = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpisFilter\n);\n\nexport const selectPortfolioKpisBasedOnView = createSelector(\n selectPortfolioKpis,\n selectSelectedPropertyIds,\n (kpis, propertyIds: number[]) => {\n return getFilteredKpis(kpis, propertyIds);\n }\n);\n\nexport const selectPortfolioKpisTrendBasedOnView = createSelector(\n selectPortfolioKpisTrend,\n selectSelectedPropertyIds,\n (kpis, propertyIds: number[]) => {\n return getFilteredKpis(kpis, propertyIds);\n }\n);\n\nexport const selectPortfolioKpiTrendLines = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpiTrendLines\n);\n\nexport const selectPortfolioKpiWorkflowSteps = createSelector(\n selectDashboardKpisState,\n dashboardsState => dashboardsState.portfolioKpiWorkflowSteps\n);\n\nexport const selectChartSelectorValue = (selectorId: string) =>\n createSelector(selectDashboardKpisState, dashboardsState => dashboardsState.chartSelectors[selectorId]);\n\nexport const selectChartSettingsValue = (chartId: string) =>\n createSelector(selectDashboardKpisState, dashboardsState => dashboardsState.chartSettings[chartId] as T);\n\nfunction getFilteredKpis(kpis: RestPortfolioKpi[], propertyIds: number[]): RestPortfolioKpi[] {\n return kpis.filter(k => !propertyIds || propertyIds.includes(k.propertyId));\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport {\n PropertySelectorState,\n PropertySelectorSwitchStatus,\n propertySelectorFeatureKey,\n} from '@dashboards/store/reducers/property-selector.reducer';\n\nexport const selectPropertySelectorState = createFeatureSelector(propertySelectorFeatureKey);\n\nexport const selectPropertySelectorSwitchStatus = createSelector(\n selectPropertySelectorState,\n state => state.propertySelectorSwitchStatus\n);\n\nexport const selectSelectedPortfolioId = createSelector(selectPropertySelectorState, state =>\n state.propertySelectorSwitchStatus == PropertySelectorSwitchStatus.COLLECTION && !state.singleModeEnabled\n ? -1\n : state.portfolioId\n);\n\nexport const selectSelectedPropertyIds = createSelector(selectPropertySelectorState, state => state.propertyIds);\nexport const selectIsAllPropertiesSelected = createSelector(\n selectPropertySelectorState,\n state => state.allPropertiesSelected\n);\nexport const selectJoinedProperties = createSelector(selectPropertySelectorState, state => state.joinProperties);\nexport const selectPropertySingleMode = createSelector(selectPropertySelectorState, state => state.singleModeEnabled);\n\nexport const selectSelectedCollectionIds = createSelector(selectPropertySelectorState, state => state.collectionIds);\nexport const selectIsAllCollectionsSelected = createSelector(\n selectPropertySelectorState,\n state => state.allCollectionsSelected\n);\n","import { InspectionScheduleType } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\n\nexport const getWorkflowStepFromSchedule = (inspectionType: InspectionScheduleType): WorkflowStepEnumType | null => {\n switch (inspectionType) {\n case InspectionScheduleType.DynamicNotice:\n return WorkflowStepEnumType.Notice;\n case InspectionScheduleType.DynamicMoveIn:\n return WorkflowStepEnumType.MoveIn;\n case InspectionScheduleType.DynamicMoveOut:\n return WorkflowStepEnumType.MoveOut;\n case InspectionScheduleType.DynamicMakeReady:\n return WorkflowStepEnumType.MakeReady;\n default:\n return null;\n }\n};\n","import { InspectionScheduleType } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const InspectionScheduleTypeListConst: IRadioButtonOption[] = [\n {\n label: 'Standard',\n sort: 1,\n value: InspectionScheduleType.Standard,\n },\n {\n label: 'Resident',\n sort: 2,\n value: InspectionScheduleType.Resident,\n },\n {\n label: 'Repeating',\n sort: 3,\n value: InspectionScheduleType.Repeating,\n },\n {\n label: 'Dynamic:',\n sort: 4,\n value: InspectionScheduleType.None,\n disabled: true,\n },\n {\n label: '→ NOTICE',\n displayValue: 'Dynamic: NOTICE',\n sort: 5,\n value: InspectionScheduleType.DynamicNotice,\n },\n {\n label: '→ MOVE OUT',\n displayValue: 'Dynamic: MOVE OUT',\n sort: 6,\n value: InspectionScheduleType.DynamicMoveOut,\n },\n {\n label: '→ MAKE READY',\n displayValue: 'Dynamic: MAKE READY',\n sort: 7,\n value: InspectionScheduleType.DynamicMakeReady,\n },\n {\n label: '→ MOVE IN',\n displayValue: 'Dynamic: MOVE IN',\n sort: 8,\n value: InspectionScheduleType.DynamicMoveIn,\n },\n];\n","\n
\n

{{ data.inspectionId ? 'Edit' : 'Add' }} inspection

\n
\n \n
\n
\n \n \n \n \n \n \n
\n\n \n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, OnInit } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { includes } from 'lodash';\nimport { Observable, map, shareReplay, take } from 'rxjs';\nimport { distinctUntilChanged, filter, tap, withLatestFrom } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { getWorkflowStepFromSchedule } from '@main-application/inspections/components/inspection-add-dialog/functions/get-workflow-step-from-schedule';\nimport { InspectionFormPostedResult } from '@main-application/inspections/components/inspection-add-dialog/inspection-add-regular-form/inspection-add-regular-form.component';\nimport { InspectionScheduleTypeListConst } from '@main-application/inspections/models/inspection-type-list.const';\nimport { InspectionScheduleType } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { InspectionService } from '@main-application/inspections/services/inspection.service';\nimport { setNewlyAddedInspection } from '@main-application/inspections/store/inspections.actions';\nimport { selectWorkflowStepsEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport {\n selectTenantData,\n selectUserData,\n selectUserPermissionLevel,\n} from '@main-application/store/selectors/user.selectors';\nimport { GeneratingInspectionsDuration } from '@shared/constants/inspection-type-list.const';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { HelpRouterService } from '@shared/services/help-router.service';\nimport { valueChanges } from '@shared/utils/rxjs/value-changes.rxjs.util';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nexport interface InspectionDialogData {\n inspectionId?: number;\n portfolioId?: number;\n inspectionFormat?: InspectionScheduleType;\n}\n\nexport interface InspectionFormDefaults {\n inspectionTemplateId: number | null;\n endDate: Date | null;\n propertyId?: number | null;\n propertyIds?: number[] | null;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-inspection-add-dialog',\n templateUrl: './inspection-add-dialog.component.html',\n styleUrls: ['./inspection-add-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InspectionAddDialogComponent extends PuSubscribable implements OnInit {\n protected readonly ButtonType = ButtonType;\n protected readonly EIcon = EIcon;\n private userData?: UserData;\n userPermissions!: Set;\n hasPermissionToAddStandard = true;\n hasPermissionToAddDynamic = true;\n hasPermissionToAddRepeating = true;\n hasPermissionToAddResident = true;\n\n creating = false;\n inspectionTypeControl = new UntypedFormControl(InspectionScheduleType.Standard);\n saveAction = new EventEmitter();\n formType$ = valueChanges(this.inspectionTypeControl).pipe(\n map(type => this.getInspectionFormType(type)),\n distinctUntilChanged(),\n shareReplay()\n );\n formDefaults: InspectionFormDefaults = {\n inspectionTemplateId: null,\n endDate: null,\n propertyId: null,\n };\n\n inspectionScheduleTypeList$ = this.getWorkflowStepEnumeration().pipe(\n withLatestFrom(this.store.select(selectTenantData)),\n map(([workflowSteps, settings]) => {\n const getMappedOptions = InspectionScheduleTypeListConst.map(i => {\n const data: IRadioButtonOption = {\n ...i,\n };\n const step = getWorkflowStepFromSchedule(i.value);\n const workflowStep = workflowSteps.find(s => s.enumerationValue === step);\n if (workflowStep) {\n const stepName = workflowStep.displayText.toUpperCase();\n data.label = `> ${stepName}`;\n data.displayValue = `Dynamic: ${stepName}`;\n }\n return data;\n });\n\n return getMappedOptions;\n })\n );\n\n constructor(\n private cdr: ChangeDetectorRef,\n private router: Router,\n private route: ActivatedRoute,\n private helpRouterService: HelpRouterService,\n private store: Store<{}>,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) protected data: InspectionDialogData,\n private inspectionService: InspectionService,\n private snackbarService: SnackbarService\n ) {\n super();\n this.data = data || {};\n this.store\n .select(selectUserPermissionLevel)\n .pipe(\n take(1),\n filter(permissionLevel => !!permissionLevel?.length)\n )\n .subscribe(permissios => {\n this.userPermissions = new Set(permissios);\n const allPermissions = PermissionLevelType.AllPermissions;\n const dynamicInspectionsAdd = PermissionLevelType.DynamicInspections_Edit;\n const repeatingInspectionsAdd = PermissionLevelType.RepeatingInspections_Edit;\n const residentInspectionsAdd = PermissionLevelType.ResidentInspections_List;\n const standardInspectionAdd = PermissionLevelType.Inspections_List;\n\n this.hasPermissionToAddDynamic =\n this.userPermissions?.has(allPermissions) || this.userPermissions?.has(dynamicInspectionsAdd);\n this.hasPermissionToAddRepeating =\n this.userPermissions?.has(allPermissions) || this.userPermissions?.has(repeatingInspectionsAdd);\n this.hasPermissionToAddResident =\n this.userPermissions?.has(allPermissions) || this.userPermissions?.has(residentInspectionsAdd);\n this.hasPermissionToAddStandard =\n this.userPermissions?.has(allPermissions) || this.userPermissions?.has(standardInspectionAdd);\n })\n .untilDestroyed(this);\n }\n\n ngOnInit(): void {\n const inspectionType = this.onGetInspectionType(this.data.inspectionFormat || InspectionScheduleType.Standard);\n this.data.inspectionFormat = inspectionType;\n this.inspectionTypeControl.setValue(inspectionType);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.inspectionTypeControl.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n tap(() => {\n this.checkTurnsPackage();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.checkTurnsPackage();\n }\n\n private checkTurnsPackage() {\n const { value } = this.inspectionTypeControl;\n if (![InspectionScheduleType.Standard, InspectionScheduleType.Repeating].includes(value)) {\n // TODO?\n }\n this.cdr.detectChanges();\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n save() {\n this.creating = true;\n this.saveAction.emit();\n }\n\n formPosted(data: InspectionFormPostedResult) {\n if (!data.result) {\n this.creating = false;\n this.cdr.detectChanges();\n return;\n }\n\n const queryParams = this.helpRouterService.getGlobalPreservedParams();\n const isDynamic = includes(\n [\n InspectionScheduleType.DynamicNotice,\n InspectionScheduleType.DynamicMoveIn,\n InspectionScheduleType.DynamicMoveOut,\n InspectionScheduleType.DynamicMakeReady,\n ],\n this.inspectionTypeControl.value\n );\n\n const isStandart = this.inspectionTypeControl.value === InspectionScheduleType.Standard;\n const isResindent = this.inspectionTypeControl.value === InspectionScheduleType.Resident;\n const isRepeating = this.inspectionTypeControl.value === InspectionScheduleType.Repeating;\n\n const useVerifyCreatedInspection = data.result && data?.inspection?.['bulkUnitIds']?.length && isStandart;\n\n const handleResult = () => {\n this.dialogRef.close(true);\n\n if (useVerifyCreatedInspection) {\n const useFetchOneTime$ = this.inspectionService.fetchOneTimeInspectionList$;\n const getTime = GeneratingInspectionsDuration;\n setTimeout(() => useFetchOneTime$.next(), getTime);\n\n return;\n }\n this.store.dispatch(\n setNewlyAddedInspection({ inspection: data.inspection, inspectionType: this.inspectionTypeControl.value })\n );\n };\n if (isStandart) this.router.navigate(['inspections/user'], { queryParams }).then(handleResult);\n if (isResindent) this.router.navigate(['inspections/resident'], { queryParams }).then(handleResult);\n if (isRepeating) this.router.navigate(['inspections/repeating'], { queryParams }).then(handleResult);\n if (isDynamic) this.router.navigate(['inspections/dynamic'], { queryParams }).then(handleResult);\n }\n\n closeModal(): void {\n this.dialogRef.close(false);\n }\n\n inspectionTypeChanged($event: InspectionScheduleType) {\n this.inspectionTypeControl.setValue($event);\n this.cdr.detectChanges();\n }\n\n private getInspectionFormType(type: InspectionScheduleType): 'dynamic' | 'regular' {\n const inspectionType = this.onGetInspectionType(this.data.inspectionFormat || InspectionScheduleType.Standard);\n if (!this.hasPermissionToAddRepeating && type === InspectionScheduleType.Repeating) {\n this.snackbarService.error(`${PermissionLevelType.RepeatingInspections_Edit} permission required`);\n this.inspectionTypeControl.setValue(inspectionType, { emitEvent: false });\n return this.getInspectionTypeStr(inspectionType);\n }\n if (!this.hasPermissionToAddStandard && type === InspectionScheduleType.Standard) {\n this.snackbarService.error(`${PermissionLevelType.Inspections_List} permission required`);\n this.inspectionTypeControl.setValue(inspectionType, { emitEvent: false });\n return this.getInspectionTypeStr(inspectionType);\n }\n if (!this.hasPermissionToAddResident && type === InspectionScheduleType.Resident) {\n this.snackbarService.error(`${PermissionLevelType.ResidentInspections_List} permission required`);\n this.inspectionTypeControl.setValue(inspectionType, { emitEvent: false });\n return this.getInspectionTypeStr(inspectionType);\n }\n if (\n !this.hasPermissionToAddDynamic &&\n (type === InspectionScheduleType.DynamicNotice ||\n type === InspectionScheduleType.DynamicMoveIn ||\n type === InspectionScheduleType.DynamicMoveOut ||\n type === InspectionScheduleType.DynamicMakeReady)\n ) {\n this.inspectionTypeControl.setValue(inspectionType, { emitEvent: false });\n this.snackbarService.error(`${PermissionLevelType.DynamicInspections_Edit} permission required`);\n return this.getInspectionTypeStr(inspectionType);\n }\n\n if (\n [\n InspectionScheduleType.DynamicNotice,\n InspectionScheduleType.DynamicMoveIn,\n InspectionScheduleType.DynamicMoveOut,\n InspectionScheduleType.DynamicMakeReady,\n ].includes(type)\n ) {\n return 'dynamic';\n } else if (\n [InspectionScheduleType.Standard, InspectionScheduleType.Resident, InspectionScheduleType.Repeating].includes(\n type\n )\n ) {\n return 'regular';\n }\n }\n\n formChanged($event: InspectionFormDefaults) {\n this.formDefaults = $event;\n }\n\n private getWorkflowStepEnumeration(): Observable {\n return this.store.select(selectWorkflowStepsEnumeration);\n }\n\n private onGetInspectionType(inspectionType: InspectionScheduleType): InspectionScheduleType {\n if (!this.hasPermissionToAddStandard && inspectionType === InspectionScheduleType.Standard) {\n return this.onGetInspectionType(InspectionScheduleType.Resident);\n }\n if (!this.hasPermissionToAddResident && inspectionType === InspectionScheduleType.Resident) {\n return this.onGetInspectionType(InspectionScheduleType.Repeating);\n }\n if (!this.hasPermissionToAddRepeating && inspectionType === InspectionScheduleType.Repeating) {\n return this.onGetInspectionType(InspectionScheduleType.DynamicNotice);\n }\n if (\n !this.hasPermissionToAddDynamic &&\n (inspectionType === InspectionScheduleType.DynamicNotice ||\n inspectionType === InspectionScheduleType.DynamicMoveIn ||\n inspectionType === InspectionScheduleType.DynamicMoveOut ||\n inspectionType === InspectionScheduleType.DynamicMakeReady)\n ) {\n return this.onGetInspectionType(InspectionScheduleType.Standard);\n }\n\n return inspectionType;\n }\n\n private getInspectionTypeStr(inspectionType: InspectionScheduleType): 'dynamic' | 'regular' {\n return inspectionType === InspectionScheduleType.DynamicNotice ||\n inspectionType === InspectionScheduleType.DynamicMoveIn ||\n inspectionType === InspectionScheduleType.DynamicMoveOut ||\n inspectionType === InspectionScheduleType.DynamicMakeReady\n ? 'dynamic'\n : 'regular';\n }\n}\n","import { InspectionsSummarySelectFilterConfig } from '@main-application/inspections/components/inspections-list/components/inspections-summary/inspections-summary.model';\nimport { InspectionsListConstants } from '@main-application/inspections/components/inspections-list/constants';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { ChartDataItem } from '@shared/interfaces/chart-data-item';\n\nexport const FILTER_PERIOD_RECORD = {\n sevenDays: 'past 7 days',\n thirtyDays: 'past 30 days',\n threeMonths: 'past 3 months',\n sixMonths: 'past 6 months',\n year: 'past year',\n allTime: 'all time',\n thisWeek: 'this week',\n thisMonth: 'this month',\n nextTwoWeeks: 'next two weeks',\n thisQuarter: 'this quarter',\n thisYear: 'this year',\n custom: 'custom',\n};\n\nexport const SELECT_FILTER_PERIOD_CONFIG: InspectionsSummarySelectFilterConfig[] = [\n {\n id: InspectionsListConstants.TimeFrame.Week,\n label: FILTER_PERIOD_RECORD.sevenDays,\n },\n {\n id: InspectionsListConstants.TimeFrame.Month,\n label: FILTER_PERIOD_RECORD.thirtyDays,\n },\n {\n id: InspectionsListConstants.TimeFrame.Month_3,\n label: FILTER_PERIOD_RECORD.threeMonths,\n },\n {\n id: InspectionsListConstants.TimeFrame.Month_6,\n label: FILTER_PERIOD_RECORD.sixMonths,\n },\n {\n id: InspectionsListConstants.TimeFrame.Year,\n label: FILTER_PERIOD_RECORD.year,\n },\n {\n id: InspectionsListConstants.TimeFrame.ThisWeek,\n label: FILTER_PERIOD_RECORD.thisWeek,\n },\n {\n id: InspectionsListConstants.TimeFrame.NextTwoWeeks,\n label: FILTER_PERIOD_RECORD.nextTwoWeeks,\n },\n {\n id: InspectionsListConstants.TimeFrame.ThisMonth,\n label: FILTER_PERIOD_RECORD.thisMonth,\n },\n {\n id: InspectionsListConstants.TimeFrame.ThisQuarter,\n label: FILTER_PERIOD_RECORD.thisQuarter,\n },\n {\n id: InspectionsListConstants.TimeFrame.ThisYear,\n label: FILTER_PERIOD_RECORD.thisYear,\n },\n {\n id: InspectionsListConstants.TimeFrame.AllTime,\n label: FILTER_PERIOD_RECORD.allTime,\n },\n {\n id: InspectionsListConstants.TimeFrame.Custom,\n label: FILTER_PERIOD_RECORD.custom,\n },\n];\n\nexport enum INSPECTION_SUMMARY_SHOW_BY__ENUM {\n ASSIGNEE = 1,\n TYPE,\n}\nexport const SELECT_FILTER_SHOW_BY_CONFIG: InspectionsSummarySelectFilterConfig[] = [\n {\n id: INSPECTION_SUMMARY_SHOW_BY__ENUM.ASSIGNEE,\n label: 'Assignee',\n },\n {\n id: INSPECTION_SUMMARY_SHOW_BY__ENUM.TYPE,\n label: 'Type',\n },\n];\n\nexport enum INSPECTION_SUMMARY_GROUP_BY__ENUM {\n NONE = 1,\n PROPERTY = 2,\n}\nexport const SELECT_FILTER_GROUP_BY_CONFIG: InspectionsSummarySelectFilterConfig[] = [\n {\n id: INSPECTION_SUMMARY_GROUP_BY__ENUM.NONE,\n label: 'None',\n },\n {\n id: INSPECTION_SUMMARY_GROUP_BY__ENUM.PROPERTY,\n label: 'Property',\n },\n];\n\nexport enum INSPECTION_SUMMARY_ACTION__ENUM {\n DRILL_DOWN = 1,\n OPEN_IN_NEW_TAB = 2,\n}\n\nexport const SELECT_FILTER_ACTION_CONFIG: InspectionsSummarySelectFilterConfig[] = [\n {\n id: INSPECTION_SUMMARY_ACTION__ENUM.DRILL_DOWN,\n label: 'Drill Down',\n },\n {\n id: INSPECTION_SUMMARY_ACTION__ENUM.OPEN_IN_NEW_TAB,\n label: 'Open in a New Tab',\n },\n];\n\nexport const INSPECTION_SUMMARY_CHAR_LABELS__KEYS_RECORD = {\n 0: 'completed',\n 1: 'completed_late',\n 2: 'expired',\n 3: 'in_progress',\n 4: 'not_started',\n 5: 'late',\n 6: 'review',\n}; // Id by ths id record below\n\nexport const INSPECTION_SUMMARY_CHART: ChartDataItem[] = [\n {\n label: 'Completed',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n {\n label: 'Completed Late',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n {\n label: 'Expired',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n {\n label: 'In Progress',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n {\n label: 'Not Started',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n {\n label: 'Late',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n {\n label: 'Review',\n value: 0,\n backgroundColor: EColorPalette.cGray8,\n },\n];\n\nexport const INSPECTION_SUMMARY_EXPANDED_TABLE_DATA_BASE = {\n expandedTitle: '',\n total: {\n notStarted: 0,\n inProgress: 0,\n late: 0,\n completed: 0,\n completedLate: 0,\n total: 0,\n },\n data: [],\n};\n\nexport const INSPECTION_SUMMARY_ERROR = {\n errorWrong: 'Something went wrong. Give it another try!',\n errorNoData: 'No data to display.',\n};\n\nexport const Unassigned = 'Unassigned';\nexport const System = 'System';\n\nexport type ExpandableExpandedRecord = {\n propertyId: number;\n opened: boolean;\n};\n","import { InspectionSectionsExpandState } from './interfaces';\n\nexport namespace InspectionsListConstants {\n export enum TimeFrame {\n Week = 1,\n Month,\n Month_3,\n Month_6,\n Year,\n AllTime,\n Custom,\n ThisWeek,\n NextTwoWeeks,\n ThisMonth,\n ThisQuarter,\n ThisYear,\n }\n\n export enum IncludeArchived {\n Yes = 1,\n No = 0,\n }\n\n export const displayedOneTimeColumns = [\n 'unit.name',\n 'unit.propertyName',\n 'inspectionType',\n 'assignee',\n 'status',\n 'rooms',\n 'dueDate',\n 'completedAt',\n 'notifyWhenDone',\n 'expired',\n 'repeats',\n 'actions',\n ];\n\n export const displayedRepeatingColumns = [\n 'unit.name',\n 'unit.propertyName',\n 'inspectionType',\n 'assignee',\n 'until',\n 'areas',\n 'dueDate',\n 'recurrencePeriod',\n 'notifyWhenDone',\n 'actions',\n ];\n\n export const displayedDynamicColumns = [\n 'step',\n 'unit.propertyName',\n 'unit.portfolioName',\n 'inspectionType',\n 'assigneeUserName',\n 'due',\n 'notify',\n 'until',\n 'notifyWhenDone',\n 'actions',\n ];\n\n export const displayedInReviewColumns = [\n 'unit.name',\n 'unit.propertyName',\n 'inspectionType',\n 'reviewer',\n 'submitted',\n 'rooms',\n 'dueDate',\n 'repeats',\n 'actions',\n ];\n\n export const timeFrames = [\n { value: TimeFrame.Week, label: 'past 7 days' },\n { value: TimeFrame.Month, label: 'past 30 days' },\n { value: TimeFrame.Month_3, label: 'past 3 months' },\n { value: TimeFrame.Month_6, label: 'past 6 months' },\n { value: TimeFrame.Year, label: 'past year' },\n { value: TimeFrame.ThisWeek, label: 'this week' },\n { value: TimeFrame.NextTwoWeeks, label: 'next two weeks' },\n { value: TimeFrame.ThisMonth, label: 'this month' },\n { value: TimeFrame.ThisQuarter, label: 'this quarter' },\n { value: TimeFrame.ThisYear, label: 'this year' },\n { value: TimeFrame.AllTime, label: 'all time' },\n { value: TimeFrame.Custom, label: 'custom' },\n ];\n\n export const includeArchivedList = [\n { value: IncludeArchived.Yes, label: 'Yes' },\n { value: IncludeArchived.No, label: 'No' },\n ];\n\n export const sectionsExpandInitialState: InspectionSectionsExpandState = {\n Standard: true,\n };\n}\n\nexport const ASSIGNEE_FILTER_DIVIDER_POSITION = 1;\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output, inject } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { map } from 'rxjs';\n\nimport { selectPortfolios } from '@portfolio/store/portfolio.selectors';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\n@UntilDestroy()\n@Component({\n selector: 'app-select-portfolio',\n templateUrl: './select-portfolio.component.html',\n styleUrls: ['./select-portfolio.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n providers: [],\n imports: [\n CommonModule,\n RadioButtonDropdownModule,\n InputModule,\n ReactiveFormsModule,\n MatButtonModule,\n A11yModule,\n MatDialogModule,\n ],\n})\nexport class SelectPortfolioDialogComponent {\n @Output() onSelected = new EventEmitter();\n\n protected formBuilder = inject(FormBuilder);\n protected store = inject(Store<{}>);\n\n public getPortfoliosList$ = this.store\n .select(selectPortfolios)\n .pipe(map(list => list.map(el => ({ value: el.id, label: el.name }))));\n\n public portfolioIdControl = this.formBuilder.control(null, [Validators.required]);\n\n public get isFormValid(): boolean {\n return !this.portfolioIdControl.valid;\n }\n\n public onSelectPortfolio(): void {\n this.onSelected.emit(this.portfolioIdControl.value);\n }\n}\n","
\n
Select Portfolio
\n
\n 7\"\n [label]=\"'Portfolio'\"\n [containerWidthCss]=\"'w-123'\"\n [formControl]=\"portfolioIdControl\"\n [allowClear]=\"false\"\n [attrPlaceholder]=\"'Select Portfolio'\"\n [labelRequired]=\"true\"\n attrAppendTo=\"body\">\n
\n
\n \n \n
\n
\n","
\n
\n \n\n \n \n \n \n\n \n
\n \n\n \n 7\">\n\n \n \n \n \n \n \n \n \n \n \n\n 7\"\n [attrAppendTo]=\"'body'\"\n formControlName=\"templateIds\">\n\n 7\"\n [attrAppendTo]=\"'body'\"\n formControlName=\"recurrencePeriod\">\n\n 7\"\n [attrAppendTo]=\"'body'\"\n formControlName=\"dynamicInspectionId\">\n\n 7\"\n [attrAppendTo]=\"'body'\"\n formControlName=\"parentInspectionId\">\n\n 7\"\n [attrAppendTo]=\"'body'\"\n formControlName=\"status\">\n\n 7\"\n [allowClear]=\"false\"\n [attrAppendTo]=\"'body'\"\n formControlName=\"timeframe\">\n\n \n \n\n \n \n
\n \n\n \n
\n\n
\n
\n \n \n \n
\n\n
\n \n \n \n
\n\n \n \n \n \n
\n\n
\n \n \n \n
\n
\n\n
\n
\n \n
\n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport * as moment from 'moment/moment';\nimport { BehaviorSubject, Observable, combineLatest, of } from 'rxjs';\nimport { filter, finalize, map, switchMap, take, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { UnitNonPmsService } from '@app/services/unit-non-pms.service';\nimport {\n selectSelectedPortfolioId,\n selectSelectedPropertyIds,\n} from '@dashboards/store/selectors/property-selector.selectors';\nimport { loadAllUsers } from '@main-application/administration/store/actions/administration.actions';\nimport { selectActiveUsers } from '@main-application/administration/store/selectors/administration.selectors';\nimport { NonPmsAddModalComponent } from '@main-application/boards/non-pms-add-modal/non-pms-add-modal.component';\nimport {\n InspectionAddDialogComponent,\n InspectionDialogData,\n} from '@main-application/inspections/components/inspection-add-dialog/inspection-add-dialog.component';\nimport { INSPECTION_SUMMARY_ACTION__ENUM } from '@main-application/inspections/components/inspections-list/components/inspections-summary/inspections-summary.constant';\nimport {\n InspectionsSummaryFiltersChangedConfig,\n SummaryFiltersFromListConfig,\n} from '@main-application/inspections/components/inspections-list/components/inspections-summary/inspections-summary.model';\nimport { InspectionSummaryAppliedFilters } from '@main-application/inspections/models/inspection-summary.model';\nimport { InspectionsHeaderViewEnum } from '@main-application/inspections/models/inspections-header.model';\nimport { InspectionViewEnum } from '@main-application/inspections/models/inspections-views';\nimport { InspectionService } from '@main-application/inspections/services/inspection.service';\nimport {\n selectInReviewInspections,\n selectInspections,\n selectRepeatingInspections,\n selectRepeatingInspectionsLoading,\n} from '@main-application/inspections/store/inspections.selectors';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { GetRecurrencePeriodTypeList } from '@shared/constants/recurrence-period-type-list.const';\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { RouteData } from '@shared/enums/route-data';\nimport { UserType } from '@shared/enums/user-type';\nimport { enumToSource } from '@shared/functions/enum-to-source.function';\nimport { currentLabelMe, getSortedUserItems } from '@shared/functions/get-user-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { IForm } from '@shared/types/form-model.type';\nimport { getStorageItem, setStorageItem } from '@shared/utils/extensions';\nimport { debounceSafe$ } from '@shared/utils/rxjs/debounced-auto-save.rxjs.util';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\nimport {\n IInspectionFilter,\n IInspectionFilterForm,\n RepeatingInspectionFilterForm,\n} from '@template/interfaces/filter.interface';\nimport { loadAllUserTemplates } from '@template/store/template.actions';\nimport { selectTemplates } from '@template/store/template.selectors';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DefaultModalConfigConstant } from '@ui-components/modals/config/default-modal-config.constant';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { ASSIGNEE_FILTER_DIVIDER_POSITION, InspectionsListConstants } from './constants';\nimport { SelectPortfolioDialogComponent } from './dialogs/select-portfolio';\nimport { InspectionSectionsExpandState } from './interfaces';\nimport {\n InspectionRecurrencePeriod,\n InspectionScheduleType,\n InspectionStatus,\n} from '../../models/rest-inspections-model.interface';\nimport {\n setInReviewInspectionsFilter,\n setInspectionsFilter,\n setNewlyAddedInspection,\n setRepeatingInspectionsFilter,\n} from '../../store/inspections.actions';\n\nexport enum InspectionsType {\n User = 'user',\n Dynamic = 'dynamic',\n Repeating = 'repeating',\n Resident = 'resident',\n InReview = 'in-review',\n}\n\nconst InspectionTabStorageKeys = {\n [InspectionsType.User]: LocalStorageDataEnum.INSPECTION_LIST_USER_FILTER,\n [InspectionsType.Dynamic]: LocalStorageDataEnum.INSPECTION_LIST_DYNAMIC_FILTER,\n [InspectionsType.Repeating]: LocalStorageDataEnum.INSPECTION_LIST_REPEATING_FILTER,\n [InspectionsType.Resident]: LocalStorageDataEnum.INSPECTION_LIST_RESIDENT_FILTER,\n [InspectionsType.InReview]: LocalStorageDataEnum.INSPECTION_LIST_IN_REVIEW_FILTER,\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-inspections-list',\n templateUrl: './inspections-list.component.html',\n styleUrls: ['./inspections-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InspectionsListComponent extends ComponentAbstract implements OnInit, OnDestroy {\n private readonly _currentDate = this.timezoneService.getCurrentDateOnly();\n\n formGroup!: FormGroup>>;\n\n readonly statuses = enumToSource(InspectionStatus);\n readonly timeframes = InspectionsListConstants.timeFrames;\n readonly filterGroupKey = LocalStorageDataEnum.InspectionFilterOffsetKey;\n readonly dividerPosition = ASSIGNEE_FILTER_DIVIDER_POSITION;\n readonly InspectionsType = InspectionsType;\n readonly TimeFrame = InspectionsListConstants.TimeFrame;\n readonly InspectionsHeaderViewEnum = InspectionsHeaderViewEnum;\n\n protected filter: IInspectionFilter = {};\n\n includeArchivedList = InspectionsListConstants.includeArchivedList;\n\n templates$: Observable[]> = this.initTemplates();\n parentInspectionIds$: Observable[]> = this.initTemplatesWithParentInspectionId();\n dynamicInspectionIds$: Observable[]> = this.initTemplatesWithDynamicInspectionId();\n reccurenceOptions$: Observable[]> = this.initRecurenceOptions();\n repeatingInspectionsIds$ = this.getRepeatingInspectionsIds();\n dynamicInspectionsIds$ = this.getDynamicInspectionsIds();\n assignees$ = this.getSortedUsers();\n\n dynamicItemsAmount$ = new BehaviorSubject(0);\n repeatingItemsAmount$ = new BehaviorSubject(0);\n itemsAmount$ = new BehaviorSubject(0);\n isUnitAdding$ = new BehaviorSubject(false);\n portfolioId$ = new BehaviorSubject(null);\n summaryFiltersFromListConfig$ = new BehaviorSubject(null);\n isShowCustomPeriod$ = new BehaviorSubject(false);\n customPeriod$ = new BehaviorSubject<{ startDate: string; endDate: string }>(null);\n inspectionsViewType$ = new BehaviorSubject(InspectionsHeaderViewEnum.LIST);\n\n maxHeight = 400;\n inspectionsType: InspectionsType;\n sectionsExpandState: InspectionSectionsExpandState = InspectionsListConstants.sectionsExpandInitialState;\n\n isResident$ = new BehaviorSubject(false);\n editInspectionOpened = false;\n\n summaryModalPending$ = new BehaviorSubject(false);\n inReviewFormExcludedItems = [\n 'doNotReturnContent',\n 'inReviewOnly',\n 'isResident',\n 'returnStandardAndResidentBoth',\n 'unitOrAssignee',\n ];\n\n excludedFromFilterCounter: string[];\n openFilter: { [key: string]: string };\n openDropdown: { [key: string]: string };\n\n @HostListener('window:resize', ['$event'])\n onResize() {\n this.calculateMaxHeight();\n }\n\n constructor(\n cdr: ChangeDetectorRef,\n private router: Router,\n private readonly store: Store<{}>,\n private readonly formBuilder: FormBuilder,\n private readonly timezoneService: TimezoneService,\n private readonly snackbarService: SnackbarService,\n private readonly inspectionService: InspectionService,\n private dialog: MatDialog,\n private actions$: Actions,\n private unitNonPmsService: UnitNonPmsService,\n private route: ActivatedRoute,\n private modalsService: ModalsService\n ) {\n super(cdr);\n }\n\n get filterStorageKey(): string {\n return this.inspectionsType\n ? InspectionTabStorageKeys[this.inspectionsType]\n : this.LocalStorageDataEnum.INSPECTION_LIST_USER_FILTER;\n }\n\n get isUserResidentPage(): boolean {\n return InspectionsType.User === this.inspectionsType || InspectionsType.Resident === this.inspectionsType;\n }\n\n get startDateControl(): AbstractControl {\n return this.formGroup.controls.startDate as FormControl;\n }\n\n get endDateControl(): AbstractControl {\n return this.formGroup.controls.endDate as FormControl;\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.snackbarService.dismiss();\n }\n\n ngOnInit(): void {\n this.route.url\n .subscribe(urlSegments => {\n this.inspectionsType = urlSegments.map(segment => segment.path).join('/') as InspectionsType;\n })\n .untilDestroyed(this);\n\n this.excludedFromFilterCounter = this.getExcludedFromFilterCounter();\n\n this.formGroup = this.initFormGroup();\n this.filter = this.formGroup.getRawValue();\n\n this.sectionsExpandState = {\n Dynamic: this.inspectionsType === InspectionsType.Dynamic,\n Repeating: this.inspectionsType === InspectionsType.Repeating,\n Standard: this.inspectionsType === InspectionsType.User,\n Resident: this.inspectionsType === InspectionsType.Resident,\n InReview: this.inspectionsType === InspectionsType.InReview,\n };\n if (this.inspectionsType === 'user') {\n this.isResident$.next(false);\n } else if (this.inspectionsType === 'resident') {\n this.isResident$.next(true);\n }\n\n if (this.inspectionsType !== InspectionsType.User && this.inspectionsType !== InspectionsType.InReview) {\n this.formGroup.patchValue({\n parentInspectionId: null,\n dynamicInspectionId: null,\n timeframe: null,\n });\n }\n\n if (this.inspectionsType !== InspectionsType.User && this.inspectionsType !== InspectionsType.InReview) {\n this.formGroup.patchValue({\n status: null,\n });\n }\n\n if (\n this.inspectionsType !== InspectionsType.User &&\n this.inspectionsType !== InspectionsType.Resident &&\n this.inspectionsType !== InspectionsType.InReview\n ) {\n this.formGroup.patchValue({\n includeArchived: null,\n });\n }\n\n const savedFilterState = getStorageItem(this.filterStorageKey);\n if (savedFilterState && this.inspectionsType !== InspectionsType.InReview) {\n savedFilterState.startDate = savedFilterState.startDate\n ? new Date(savedFilterState.startDate)\n : savedFilterState.startDate;\n savedFilterState.endDate = savedFilterState.endDate\n ? new Date(savedFilterState.endDate)\n : savedFilterState.endDate;\n this.store.dispatch(setInspectionsFilter(savedFilterState));\n this.formGroup.patchValue(savedFilterState);\n\n this.setFilters(savedFilterState);\n }\n\n if (savedFilterState && this.inspectionsType === InspectionsType.InReview) {\n this.store.dispatch(setInReviewInspectionsFilter(savedFilterState));\n this.formGroup.patchValue(savedFilterState);\n this.setFilters(savedFilterState);\n }\n\n if (savedFilterState && this.inspectionsType === InspectionsType.Repeating) {\n this.store.dispatch(setRepeatingInspectionsFilter(savedFilterState));\n this.formGroup.patchValue(savedFilterState);\n this.setFilters(savedFilterState);\n }\n\n this.store.dispatch(loadAllUserTemplates());\n this.useLoadUsers();\n\n this.initFormGroupListener();\n\n this.actions$\n .pipe(\n ofType(setNewlyAddedInspection),\n tap(action => {\n const sectionsExpand = Object.keys(this.sectionsExpandState)\n .filter(key => this.sectionsExpandState[key])?.[0]\n ?.toLowerCase();\n\n if (sectionsExpand && sectionsExpand !== this.inspectionsType) this.clearFilter(true);\n\n if (action.inspection) {\n switch (action.inspectionType) {\n case InspectionScheduleType.DynamicMoveIn:\n case InspectionScheduleType.DynamicMoveOut:\n case InspectionScheduleType.DynamicMakeReady:\n case InspectionScheduleType.DynamicNotice: {\n this.sectionsExpandState['Dynamic'] = this.inspectionsType === InspectionsType.Dynamic;\n break;\n }\n case InspectionScheduleType.Repeating: {\n this.sectionsExpandState['Repeating'] = this.inspectionsType === InspectionsType.Repeating;\n break;\n }\n case InspectionScheduleType.Standard: {\n this.sectionsExpandState['Standard'] = this.inspectionsType === InspectionsType.User;\n this.sectionsExpandState['Resident'] = this.inspectionsType === InspectionsType.User;\n break;\n }\n }\n\n this.cdr.detectChanges();\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n if (this.inspectionsType === InspectionsType.User || this.inspectionsType === InspectionsType.InReview) {\n this.route.queryParams\n .subscribe(params => {\n const parentInspectionId = params['parentInspectionId'];\n const dynamicInspectionId = params['dynamicInspectionId'];\n\n if (parentInspectionId || dynamicInspectionId) {\n this.formGroup.patchValue({\n unitOrAssignee: null,\n status: null,\n assigneeId: null,\n templateIds: null,\n recurrencePeriod: null,\n parentInspectionId: parentInspectionId ? [+parentInspectionId] : null,\n dynamicInspectionId: dynamicInspectionId ? [+dynamicInspectionId] : null,\n timeframe: null,\n includeArchived:\n this.inspectionsType === InspectionsType.User || this.inspectionsType === InspectionsType.Resident\n ? InspectionsListConstants.IncludeArchived.No\n : null,\n });\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { parentInspectionId: null, dynamicInspectionId: null },\n queryParamsHandling: 'merge',\n });\n }\n })\n .untilDestroyed(this);\n }\n\n this.calculateMaxHeight();\n\n this.setPortfolioId();\n\n this.route.queryParams\n .pipe(\n take(1),\n tap(queryParams => {\n if (this.inspectionsType === InspectionsType.User || this.inspectionsType === InspectionsType.Resident) {\n const doNotStoreParams = queryParams?.[RouteData.DO_NOT_STORE_PARAMS] === 'true';\n const inspectionView = getStorageItem(LocalStorageDataEnum.INSPECTION_VIEW_MODE);\n\n if (!doNotStoreParams && inspectionView) {\n this.updateRouteAndState(inspectionView[InspectionViewEnum.INSPECTION_VIEW]);\n } else {\n this.changedInspectionsViewType(InspectionsHeaderViewEnum.LIST, doNotStoreParams);\n }\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.route.queryParams\n .subscribe(params => {\n const inspectionView = params[InspectionViewEnum.INSPECTION_VIEW];\n\n if (inspectionView && inspectionView !== this.inspectionsViewType$.value) {\n this.inspectionsViewType$.next(inspectionView);\n }\n })\n .untilDestroyed(this);\n }\n\n private initFormGroupListener(): void {\n this.formGroup.valueChanges\n .pipe(debounceSafe$(), untilDestroyed(this))\n .subscribe(value => {\n let patchForm = false;\n const isCustomPeriod = value.timeframe === this.TimeFrame.Custom;\n\n if (\n value.timeframe &&\n this.filter?.timeframe &&\n value.timeframe != this.filter?.timeframe &&\n !isCustomPeriod &&\n this.inspectionsType !== InspectionsType.InReview\n ) {\n value.endDate = moment(this._currentDate).toDate();\n\n switch (value.timeframe) {\n case this.TimeFrame.Week:\n value.startDate = moment(this._currentDate).subtract(7, 'days').toDate();\n break;\n case this.TimeFrame.Month:\n value.startDate = moment(this._currentDate).subtract(1, 'month').toDate();\n break;\n case this.TimeFrame.Month_3:\n value.startDate = moment(this._currentDate).subtract(3, 'months').toDate();\n break;\n case this.TimeFrame.Month_6:\n value.startDate = moment(this._currentDate).subtract(6, 'months').toDate();\n break;\n case this.TimeFrame.Year:\n value.startDate = moment(`${moment(this._currentDate).year() - 1}-01-01T00:00:00.000Z`).toDate();\n value.endDate = moment(`${moment(this._currentDate).year() - 1}-12-31T23:59:59.999Z`).toDate();\n break;\n case this.TimeFrame.ThisWeek:\n value.startDate = moment(this._currentDate).startOf('week').toDate();\n value.endDate = moment(this._currentDate).endOf('week').toDate();\n break;\n case this.TimeFrame.NextTwoWeeks:\n value.startDate = moment(this._currentDate).toDate();\n value.endDate = moment(this._currentDate).add(2, 'weeks').toDate();\n break;\n case this.TimeFrame.ThisMonth:\n value.startDate = moment(this._currentDate).startOf('month').toDate();\n value.endDate = moment(this._currentDate).endOf('month').toDate();\n break;\n case this.TimeFrame.ThisQuarter:\n value.startDate = moment(this._currentDate).startOf('quarter').toDate();\n value.endDate = moment(this._currentDate).endOf('quarter').toDate();\n break;\n case this.TimeFrame.ThisYear:\n value.startDate = moment(this._currentDate).startOf('year').toDate();\n value.endDate = moment(this._currentDate).endOf('year').toDate();\n break;\n case this.TimeFrame.AllTime:\n value.startDate = null;\n value.endDate = null;\n break;\n }\n\n patchForm = true;\n }\n\n this.updateFilters(value);\n\n if (isCustomPeriod) {\n !this.startDateControl.value && this.startDateControl.patchValue(moment(this._currentDate).toDate());\n !this.endDateControl.value &&\n this.endDateControl.patchValue(moment(this._currentDate).add(1, 'days').toDate());\n }\n\n if (patchForm) {\n this.formGroup.patchValue(this.filter);\n }\n })\n .untilDestroyed(this);\n }\n\n private setPortfolioId(): void {\n this.store\n .select(selectSelectedPortfolioId)\n .pipe(\n filterNullish$(),\n tap(portfolioId => {\n this.portfolioId$.next(portfolioId);\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n summaryStatsFiltersApplied(value: boolean): void {\n this.summaryModalPending$.next(value);\n }\n\n public updateFiltersFromSummaryReport(value: InspectionsSummaryFiltersChangedConfig): void {\n const isCustomPeriod = value.timeframe === InspectionsListConstants.TimeFrame.Custom;\n\n this.formGroup.patchValue({\n ...value,\n startDate: new Date(value.startDate),\n endDate: new Date(value.endDate),\n });\n\n if (value.groupByPropertyId) {\n const propertyIds = [value.groupByPropertyId];\n\n const params = {\n [RouteData.PORTFOLIO_ID]: String(this.portfolioId$.value),\n };\n\n if (value.action === INSPECTION_SUMMARY_ACTION__ENUM.DRILL_DOWN) {\n params[RouteData.PROPERTY_IDS] = JSON.stringify(propertyIds);\n }\n\n this.updateRouterParam(params);\n }\n\n if (isCustomPeriod && value.startDate && value.endDate) {\n this.isShowCustomPeriod$.next(true);\n this.customPeriod$.next({ startDate: value.startDate, endDate: value.endDate });\n }\n }\n\n private updateRouterParam(params: Params) {\n const currentParams = this.route.snapshot.queryParams;\n const currentFragment = this.route.snapshot.fragment;\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { ...currentParams, ...params },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n fragment: currentFragment,\n });\n }\n\n private updateFilters(value: Partial): void {\n this.setFilters(value);\n this.updateSummaryFiltersFromList(value);\n\n if (this.inspectionsType === InspectionsType.InReview) {\n this.store.dispatch(setInReviewInspectionsFilter(value));\n } else if (this.inspectionsType === InspectionsType.Repeating) {\n this.store.dispatch(setRepeatingInspectionsFilter(value));\n } else {\n this.store.dispatch(setInspectionsFilter(value));\n }\n }\n\n private updateSummaryFiltersFromList({ timeframe, startDate, endDate }: Partial): void {\n this.summaryFiltersFromListConfig$.next({\n timeframe,\n startDate,\n endDate,\n });\n\n const appliedSummaryFilters = getStorageItem(\n LocalStorageDataEnum.INSPECTIONS_SUMMARY_FILTERS\n );\n if (appliedSummaryFilters) {\n appliedSummaryFilters.periodId = timeframe;\n appliedSummaryFilters.startDate = startDate?.toISOString() ?? null;\n appliedSummaryFilters.endDate = endDate?.toISOString() ?? null;\n\n setStorageItem(LocalStorageDataEnum.INSPECTIONS_SUMMARY_FILTERS, appliedSummaryFilters);\n }\n }\n\n private useLoadUsers() {\n const isResident = this.inspectionsType === InspectionsType.Resident;\n\n const getTypesResident = [UserType.Resident, UserType.Employee, UserType.Contractor];\n const getTypesBase = [UserType.Employee, UserType.Contractor];\n const userGroupTypes = isResident ? getTypesResident : getTypesBase;\n\n this.store.dispatch(loadAllUsers({ filter: { userGroupTypes } }));\n }\n\n private setFilters(value: Partial): void {\n if (this.inspectionsType === InspectionsType.InReview) {\n this.filter = {\n propertyIds: this.filter.propertyIds,\n propertyId: this.filter.propertyId,\n assigneeId: value.assigneeId,\n unitOrAssignee: value.unitOrAssignee,\n templateIds: value.templateIds,\n parentInspectionId: value.parentInspectionId,\n dynamicInspectionId: value.dynamicInspectionId,\n };\n } else if (this.inspectionsType === InspectionsType.Repeating) {\n this.filter = {\n propertyIds: this.filter.propertyIds,\n propertyId: this.filter.propertyId,\n assigneeId: value.assigneeId,\n unitOrAssignee: value.unitOrAssignee,\n templateIds: value.templateIds,\n recurrencePeriod: value.recurrencePeriod,\n };\n } else {\n this.filter = {\n ...this.filter,\n ...value,\n };\n }\n\n setStorageItem(this.filterStorageKey, this.filter);\n }\n\n clearFilter(keepTimeFrame = false): void {\n if (this.formGroup.get('unitOrAssignee')) this.formGroup.get('unitOrAssignee').setValue(null);\n if (this.formGroup.get('status')) this.formGroup.get('status').setValue(null);\n if (this.formGroup.get('assigneeId')) this.formGroup.get('assigneeId').setValue(null);\n if (this.formGroup.get('templateIds')) this.formGroup.get('templateIds').setValue(null);\n if (this.formGroup.get('recurrencePeriod')) this.formGroup.get('recurrencePeriod').setValue(null);\n if (this.formGroup.get('timeframe')) {\n keepTimeFrame\n ? this.formGroup.get('timeframe').setValue(this.formGroup.value.timeframe)\n : this.formGroup.get('timeframe').setValue(InspectionsListConstants.TimeFrame.ThisMonth);\n }\n if (this.formGroup.get('includeArchived')) {\n this.inspectionsType === InspectionsType.User || this.inspectionsType === InspectionsType.Resident\n ? this.formGroup.get('includeArchived').setValue(0)\n : this.formGroup.get('includeArchived').setValue(null);\n }\n if (this.formGroup.get('parentInspectionId')) this.formGroup.get('parentInspectionId').setValue(null);\n if (this.formGroup.get('dynamicInspectionId')) this.formGroup.get('dynamicInspectionId').setValue(null);\n if (this.formGroup.get('startDate')) {\n keepTimeFrame\n ? this.formGroup.get('startDate').setValue(moment(this._currentDate).subtract(30, 'days').toDate())\n : this.formGroup.get('startDate').setValue(null);\n }\n if (this.formGroup.get('endDate')) {\n keepTimeFrame\n ? this.formGroup.get('endDate').setValue(moment(this._currentDate).add(1, 'days').toDate())\n : this.formGroup.get('endDate').setValue(null);\n }\n this.cdr.markForCheck();\n }\n\n clearSearchControl(): void {\n this.formGroup.patchValue({ unitOrAssignee: null as string });\n }\n\n addInspection(inspectionFormat = InspectionScheduleType.Standard) {\n this.editInspectionOpened = true;\n if (this.inspectionsType === InspectionsType.Dynamic) {\n inspectionFormat = InspectionScheduleType.DynamicNotice;\n }\n if (this.inspectionsType === InspectionsType.Repeating) {\n inspectionFormat = InspectionScheduleType.Repeating;\n }\n if (this.inspectionsType === InspectionsType.Resident) {\n inspectionFormat = InspectionScheduleType.Resident;\n }\n\n this.portfolioId$\n .pipe(\n take(1),\n switchMap(portfolioId => {\n if (portfolioId === -1) {\n const config: MatDialogConfig = {\n width: '610px',\n height: 'auto',\n enterAnimationDuration: '0ms',\n panelClass: 'no-padding-dialog',\n };\n\n const dialogRef = this.dialog.open(SelectPortfolioDialogComponent, config);\n\n return dialogRef.componentInstance.onSelected.pipe(\n filter(Boolean),\n take(1),\n tap(() => dialogRef.close()),\n switchMap(portfolioId => dialogRef.afterClosed().pipe(map(() => portfolioId)))\n );\n }\n\n return of(portfolioId);\n }),\n switchMap(portfolioId => {\n return this.dialog\n .open(InspectionAddDialogComponent, {\n data: {\n inspectionFormat,\n portfolioId,\n },\n })\n .afterClosed()\n .pipe(take(1));\n })\n )\n .subscribe(() => {\n this.editInspectionOpened = false;\n })\n .untilDestroyed(this);\n }\n\n toggleSection(name: string, isExpanded: boolean) {\n if (isExpanded) {\n window.dispatchEvent(new Event('resize'));\n }\n }\n\n addNonPmsUnit() {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '400px',\n panelClass: 'user-preview-modal-container',\n };\n\n this.dialog\n .open(NonPmsAddModalComponent, config)\n .afterClosed()\n .pipe(\n take(1),\n filter(unitInfo => !!unitInfo),\n map(({ unitName, propertyId }) => ({\n propertyId: propertyId,\n unitName: unitName,\n })),\n switchMap(({ propertyId, unitName }) => {\n if (!unitName) {\n return of({});\n }\n this.isUnitAdding$.next(true);\n return this.unitNonPmsService\n .add({\n propertyId: propertyId,\n name: unitName,\n })\n .pipe(\n tap((unitId: number) => {\n this.snackbarService.success(`Unit ${unitName} created`);\n })\n );\n }),\n finalize(() => {\n this.isUnitAdding$.next(false);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initTemplates(): Observable[]> {\n return this.store.select(selectTemplates).pipe(\n filterNullish$(),\n map(list =>\n list.filter((e, i, array) => array.indexOf(e) === i && e).map((e, i) => ({ value: e.id, label: e.name }))\n )\n );\n }\n\n private initRecurenceOptions(): Observable[]> {\n return combineLatest([\n this.store.select(selectRepeatingInspectionsLoading),\n this.store.select(selectRepeatingInspections),\n this.store.select(selectSelectedPropertyIds),\n ]).pipe(\n filter(([loading, inspections, _]) => !loading && inspections != null),\n map(([_, inspections, propertyIds]) => {\n const filtered = inspections?.filter(i => propertyIds.includes(i.propertyId ?? i.unit?.propertyId));\n\n const seen = new Set();\n const result: IRadioButtonOption[] = [];\n\n for (const inspection of filtered ?? []) {\n const options = GetRecurrencePeriodTypeList(new Date(inspection.dueDate ?? null));\n const match = options.find(opt => opt.value === inspection.recurrencePeriod);\n\n if (!seen.has(inspection.recurrencePeriod)) {\n seen.add(inspection.recurrencePeriod);\n result.push(\n match ?? {\n value: inspection.recurrencePeriod,\n label:\n InspectionRecurrencePeriod[inspection.recurrencePeriod]?.replace(/([a-z])([A-Z])/g, '$1 $2') ??\n 'Unknown',\n }\n );\n }\n }\n\n return result;\n })\n );\n }\n\n private initTemplatesWithParentInspectionId(): Observable[]> {\n return combineLatest([\n this.store.select(selectInspections),\n this.store.select(selectInReviewInspections),\n this.store.select(selectTemplates),\n ]).pipe(\n filter(\n ([inspectionList, inReviewInspectionList, templates]) =>\n !!inspectionList && !!inReviewInspectionList && !!templates\n ),\n map(([inspectionList, inReviewInspectionList, templates]) => {\n const inspections = this.inspectionsType === InspectionsType.InReview ? inReviewInspectionList : inspectionList;\n const uniqueParentIds = new Set();\n return inspections\n .filter(inspection => inspection.parentInspectionId)\n .filter(inspection => {\n if (!uniqueParentIds.has(inspection.parentInspectionId)) {\n uniqueParentIds.add(inspection.parentInspectionId);\n return true;\n }\n return false;\n })\n .map(inspection => {\n const template = templates.find(t => t.id === inspection.inspectionTemplateId);\n const templateName = template ? template.name : 'Unknown Template';\n return {\n value: inspection.parentInspectionId,\n label: `${inspection.unit.property.name} - ${templateName}`,\n };\n });\n })\n );\n }\n\n private initTemplatesWithDynamicInspectionId(): Observable[]> {\n return combineLatest([\n this.store.select(selectInspections),\n this.store.select(selectInReviewInspections),\n this.store.select(selectTemplates),\n ]).pipe(\n filter(\n ([inspectionList, inReviewInspectionList, templates]) =>\n !!inspectionList && !!inReviewInspectionList && !!templates\n ),\n map(([inspectionList, inReviewInspectionList, templates]) => {\n const inspections = this.inspectionsType === InspectionsType.InReview ? inReviewInspectionList : inspectionList;\n const uniqueDynamicIds = new Set();\n return inspections\n .filter(inspection => inspection.dynamicInspectionId)\n .filter(inspection => {\n if (!uniqueDynamicIds.has(inspection.dynamicInspectionId)) {\n uniqueDynamicIds.add(inspection.dynamicInspectionId);\n return true;\n }\n return false;\n })\n .map(inspection => {\n const template = templates.find(t => t.id === inspection.inspectionTemplateId);\n const templateName = template ? template.name : 'Unknown Template';\n return {\n value: inspection.dynamicInspectionId,\n label: ` ${inspection.unit.property.name} - ${templateName}`,\n };\n });\n })\n );\n }\n\n private initFormGroup(): FormGroup>> {\n if (this.inspectionsType === InspectionsType.InReview) {\n return this.formBuilder.group({\n unitOrAssignee: null,\n assigneeId: null,\n templateIds: null,\n parentInspectionId: null,\n dynamicInspectionId: null,\n }) as FormGroup>>;\n }\n\n if (this.inspectionsType === InspectionsType.Repeating) {\n return this.formBuilder.group({\n unitOrAssignee: null,\n assigneeId: null,\n templateIds: null,\n recurrencePeriod: null,\n }) as FormGroup>>;\n }\n\n return this.formBuilder.group({\n unitOrAssignee: null,\n status: null,\n // isBulk: null,\n assigneeId: null,\n templateIds: null,\n recurrencePeriod: null,\n timeframe: InspectionsListConstants.TimeFrame.ThisMonth,\n includeArchived:\n this.inspectionsType === InspectionsType.User || this.inspectionsType === InspectionsType.Resident\n ? InspectionsListConstants.IncludeArchived.No\n : null,\n parentInspectionId: null,\n dynamicInspectionId: null,\n startDate: null,\n endDate: null,\n }) as FormGroup>>;\n }\n\n private getSortedUsers(): Observable[]> {\n return combineLatest([this.store.select(selectUserData), this.store.select(selectActiveUsers)]).pipe(\n map(([userData, activeUsers]) => {\n const sortedList = [{ value: -1, label: 'Unassigned' }].concat(getSortedUserItems(activeUsers));\n const currentUserIndex = sortedList.findIndex(user => user.value === userData.id);\n if (currentUserIndex > 1) {\n const [currentUser] = sortedList.splice(currentUserIndex, 1);\n sortedList.splice(1, 0, { ...currentUser, label: currentLabelMe(currentUser.label) });\n }\n\n return sortedList;\n })\n );\n }\n\n getDynamicInspectionsIds(): Observable<{ dynamicInspectionId: number; count: number }[]> {\n const inspections$ =\n this.inspectionsType === InspectionsType.InReview\n ? this.store.select(selectInReviewInspections)\n : this.store.select(selectInspections);\n\n return inspections$.pipe(\n filterNullish$(),\n map(inspections => {\n const inspectionCountMap = new Map();\n\n inspections\n .filter(inspection => inspection.dynamicInspectionId)\n .forEach(inspection => {\n const dynamicId = inspection.dynamicInspectionId;\n if (inspectionCountMap.has(dynamicId)) {\n inspectionCountMap.set(dynamicId, inspectionCountMap.get(dynamicId)! + 1);\n } else {\n inspectionCountMap.set(dynamicId, 1);\n }\n });\n\n return Array.from(inspectionCountMap, ([dynamicInspectionId, count]) => ({\n dynamicInspectionId,\n count,\n }));\n })\n );\n }\n\n getRepeatingInspectionsIds(): Observable<{ parentInspectionId: number; count: number }[]> {\n const inspections$ =\n this.inspectionsType === InspectionsType.InReview\n ? this.store.select(selectInReviewInspections)\n : this.store.select(selectInspections);\n\n return inspections$.pipe(\n filterNullish$(),\n map(inspections => {\n const inspectionCountMap = new Map();\n\n inspections\n .filter(inspection => inspection.parentInspectionId)\n .forEach(inspection => {\n const parentId = inspection.parentInspectionId;\n if (inspectionCountMap.has(parentId)) {\n inspectionCountMap.set(parentId, inspectionCountMap.get(parentId)! + 1);\n } else {\n inspectionCountMap.set(parentId, 1);\n }\n });\n\n return Array.from(inspectionCountMap, ([parentInspectionId, count]) => ({\n parentInspectionId,\n count,\n }));\n })\n );\n }\n\n calculateMaxHeight(filterPanelEmpty = true): void {\n setTimeout(() => {\n const itemHeight = 40;\n const screenHeight = window.innerHeight;\n const topContentHeight = filterPanelEmpty ? 210 : 240;\n this.maxHeight = Math.floor(screenHeight / itemHeight) * itemHeight - topContentHeight;\n });\n }\n\n public changedInspectionsViewType(view: InspectionsHeaderViewEnum, doNotStoreParams = false): void {\n this.clearSearchControl();\n if (!doNotStoreParams) this.inspectionService.updateInspectionsViewModeInStorage(view);\n\n this.updateRouteAndState(view);\n }\n\n private updateRouteAndState(view: InspectionsHeaderViewEnum): void {\n this.inspectionsViewType$.next(view);\n\n this.router\n .navigate([], {\n relativeTo: this.route,\n queryParams: { inspectionsView: view },\n queryParamsHandling: 'merge',\n })\n .then();\n }\n\n private getExcludedFromFilterCounter(): string[] {\n if (this.inspectionsType === InspectionsType.InReview) {\n return [\n 'doNotReturnContent',\n 'inReviewOnly',\n 'isResident',\n 'returnStandardAndResidentBoth',\n 'unitOrAssignee',\n 'includeArchived',\n ];\n } else if (this.inspectionsType === InspectionsType.User || this.inspectionsType === InspectionsType.Resident) {\n return ['unitOrAssignee', 'startDate', 'endDate'];\n }\n return ['unitOrAssignee', 'startDate', 'endDate', 'includeArchived'];\n }\n\n onOpenFilter(item: string): void {\n this.openFilter = { item };\n }\n\n onOpenDropdown(item: string): void {\n setTimeout(() => {\n this.openDropdown = { item };\n this.cdr.detectChanges();\n }, 200);\n setTimeout(() => {\n this.openDropdown = {};\n }, 300);\n }\n\n onFilterPaneChange(value: Partial): void {\n this.formGroup.patchValue({ ...this.formGroup.value, ...value });\n }\n\n protected readonly Object = Object;\n}\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\n\nimport { videoExtensions } from '@shared/constants/file-extensions.const';\n\n@Directive({\n standalone: true,\n selector: '[appIsVideo]',\n})\nexport class IsVideoDirective implements OnInit {\n private show = false;\n\n @Input() set appIsVideo(value: string) {\n this.show = this.checkIfVideo(value);\n this.displayTemplate();\n }\n\n @Input() appIsVideoElse?: TemplateRef;\n\n constructor(private templateRef: TemplateRef, private vcr: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.displayTemplate();\n }\n\n private displayTemplate(): void {\n this.vcr.clear();\n if (this.show) {\n this.vcr.createEmbeddedView(this.templateRef);\n } else if (this.appIsVideoElse) {\n this.vcr.createEmbeddedView(this.appIsVideoElse);\n }\n }\n\n private checkIfVideo(url: string): boolean {\n const extension = this.getFileExtension(url);\n return videoExtensions.includes(extension);\n }\n\n private getFileExtension(url: string): string {\n const match = url.match(/\\.[^\\.]+$/);\n return match ? match[0].toLowerCase() : '';\n }\n}\n","
\n close_small\n
\n\n
\n \n \n
\n \n delete\n
\n
\n \n\n \n \n \n
\n \n delete\n
\n\n
\n open_in_new\n
\n \n
\n\n \n \n
\n
\n download\n
\n \n delete\n
\n \n
\n
\n\n\n
\n
\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { filter, map, merge, of, take, tap } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { ImageOrientation } from '@shared/interfaces';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { InspectionStepModel } from '../../models/inspection-step.model';\n\n@Component({\n selector: 'app-photo-viewer',\n templateUrl: './photo-viewer.component.html',\n styleUrls: ['./photo-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PhotoViewerComponent extends PuSubscribable {\n EIcon = EIcon;\n currentUrl: { cloudUri: string; thumbnailFileUploadCloudUri?: any; imageOrientation?: ImageOrientation };\n deletedImages: string[] = [];\n protected readonly ImageOrientation = ImageOrientation;\n private modalsService = inject(ModalsService);\n private cdr = inject(ChangeDetectorRef);\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: {\n step: InspectionStepModel;\n imageUrls: { cloudUri: string; thumbnailFileUploadCloudUri: any; imageOrientation?: ImageOrientation }[];\n initialIndex: number;\n isEditorMode?: boolean;\n },\n private dialogRef: MatDialogRef\n ) {\n super();\n this.currentUrl = this.data.imageUrls[this.data.initialIndex] || this.data.imageUrls[0];\n }\n\n onChange(mediaUrl: string): void {\n this.currentUrl = this.data.imageUrls.find(el => el.cloudUri === mediaUrl);\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n public onEscapeKeyDown(event: KeyboardEvent): void {\n this.close();\n }\n\n close(): void {\n this.dialogRef.close({\n deletedImages: this.deletedImages,\n });\n }\n\n private confirmDeletionDialog() {\n const dialogRef = this.modalsService.openConfirmationModal({\n title: `Are you sure you want to remove this?`,\n confirmColor: 'warn',\n cancelLabel: 'Cancel',\n confirmLabel: 'Confirm',\n });\n\n const useCloseParentDialog = this.dialogRef.afterClosed().pipe(\n take(1),\n tap(() => dialogRef.close()),\n map(() => of(DialogResult.Fail))\n );\n\n const useCloseTargetDialog = dialogRef.afterClosed().pipe(take(1));\n\n return merge(useCloseParentDialog, useCloseTargetDialog).pipe(filter(result => result === DialogResult.Success));\n }\n\n deleteImage(cloudUri: string): void {\n this.confirmDeletionDialog()\n .subscribe(() => {\n const index = this.data.imageUrls.findIndex(el => el.cloudUri === cloudUri);\n if (index !== -1) {\n this.deletedImages.push(cloudUri);\n this.data.imageUrls.splice(index, 1);\n\n if (this.data.imageUrls.length > 0) {\n this.currentUrl = this.data.imageUrls[0];\n } else {\n this.close();\n }\n }\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n isFile(cloudUri: string): boolean {\n return cloudUri.endsWith('.pdf') || cloudUri.endsWith('.docx');\n }\n\n public isImage(url: string): boolean {\n const extension = url.split('.').pop()?.toLowerCase();\n return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(extension);\n }\n\n public openInNewTab(cloudUri: string): void {\n window.open(cloudUri, '_blank');\n }\n\n downloadFile(cloudUri: string): void {\n const link = document.createElement('a');\n link.href = cloudUri;\n link.download = cloudUri.split('/').pop() || 'file';\n link.click();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, QueryList, ViewChildren } from '@angular/core';\nimport { FormBuilder, NgControl, ValidationErrors, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { SendInspectionReportRequest } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { InputErrorService } from '@ui-components/components/input-error/services/input-error.service';\nimport { EmailPatternValidator } from '@ui-components/validators/email.validator';\n\n@Component({\n selector: 'app-send-inspection',\n templateUrl: './send-inspection.component.html',\n styleUrls: ['./send-inspection.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SendInspectionComponent {\n ButtonType = ButtonType;\n\n form = this.formBuilder.group({\n to: [null, [Validators.required, EmailPatternValidator(), Validators.email]],\n subject: ['', [Validators.required]],\n body: [''],\n });\n isSubmitted = false;\n\n @ViewChildren(NgControl) controls: QueryList;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private formBuilder: FormBuilder,\n private dialogRef: MatDialogRef,\n private inputErrorService: InputErrorService,\n private snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) inspectionTitle: string\n ) {\n this.form.patchValue({ subject: inspectionTitle });\n }\n\n ok() {\n this.isSubmitted = true;\n if (this.form.valid) {\n this.dialogRef.close({\n to: [this.form.value.to],\n subject: this.form.value.subject || '',\n body: this.form.value.body || '',\n });\n } else {\n const errors: ValidationErrors = this.controls\n .toArray()\n .flatMap(control => control.control.errors)\n .reduce((acc, cur) => ({ ...acc, ...cur }), {});\n\n const strErrors = (Object.entries(errors) || [])\n .filter(([key, errorParams]) => !!errorParams)\n .map(([key, errorParams]) => {\n return this.inputErrorService.getValidationMessage(key, errorParams);\n });\n this.snackbarService.error(strErrors.join('
'));\n }\n this.cdr.detectChanges();\n }\n}\n","

Email copy of inspection (as a .pdf)

\n\n
\n \n \n \n \n
\n\n \n \n\n","import { isDefAndNotNull } from '@app/utils/def';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\nimport { InspectionPage } from './inspection-area.model';\nimport { PropertyState } from './inspection.model';\n\nexport class InspectionStepModel {\n readonly propertyState: PropertyState;\n readonly propertyStateCount: number;\n readonly fileUploadCount: number;\n readonly notesCount: number;\n readonly imagesCount: number;\n note: string;\n readonly files: { fileUploadId: number }[];\n readonly questions: [string, boolean][];\n readonly emoji: string;\n readonly emojiName: string;\n readonly emojiCode: string;\n readonly stepName: string;\n readonly quantity: string;\n readonly hours: string;\n readonly tickets: RestTicketModel[];\n\n constructor(\n public readonly page: InspectionPage,\n tickets: RestTicketModel[],\n public readonly areaName = '',\n public readonly areaId: number,\n public readonly index: number\n ) {\n this.tickets = tickets?.filter(t => t.surveyPageId === index || t.surveyPageId === undefined) || [];\n const noteElms = page.elements?.filter(elm => elm.type?.toLowerCase() === 'comment');\n const fileElms = page.elements?.filter(elm => elm.type?.toLowerCase() === 'file');\n const stateElms = page.elements?.filter(elm => elm.type?.toLowerCase() === 'propertystate');\n const quantityElms = page.elements?.filter(elm => elm.type?.toLowerCase() === 'quantity');\n const hoursElms = page.elements?.filter(elm => elm.type?.toLowerCase() === 'hours');\n\n let questionsElms = [];\n const panel = page.elements?.find(elm => elm.type === 'panel');\n if (panel) {\n questionsElms = page.elements?.find(elm => elm.type === 'panel' && elm.elements.length)?.elements;\n } else {\n questionsElms = page.elements?.filter(elm => ![...noteElms, ...fileElms, ...stateElms].includes(elm));\n }\n\n this.stepName = page.title || '';\n this.questions =\n questionsElms\n ?.filter(qElm => qElm.type?.toLowerCase() !== 'quantity' && qElm.type?.toLowerCase() !== 'hours')\n ?.filter(qElm => isDefAndNotNull(qElm.value) || isDefAndNotNull(qElm.defaultValue))\n ?.map(qElm => [\n qElm.title,\n isDefAndNotNull(qElm.value) ? qElm.value === 'true' : qElm.defaultValue === 'true',\n ]) || [];\n this.notesCount = noteElms?.length ?? 0;\n this.fileUploadCount = fileElms?.length ?? 0;\n this.propertyStateCount = stateElms?.length ?? 0;\n this.imagesCount = page.mainImage?.length ?? 0;\n\n this.note = noteElms?.[0]?.value ?? '';\n this.files = page.mainImage;\n if (this.propertyStateCount > 0) {\n this.propertyState = stateElms[0].value as PropertyState;\n if (stateElms[0].items?.length) {\n const elementItem = stateElms[0].items.find(x => x.item.id === this.propertyState);\n if (elementItem) {\n const emojiCode = Number('0x' + elementItem.item.emoji);\n if (!isNaN(emojiCode)) {\n this.emoji = String.fromCodePoint(emojiCode);\n this.emojiName = elementItem.item.text;\n this.emojiCode = elementItem.item.emoji;\n }\n\n if (quantityElms?.length && elementItem.item.showQtyWidget) {\n this.quantity = quantityElms[0].value;\n }\n\n if (hoursElms?.length && elementItem.item.onSelect?.includes('showHoursWidget')) {\n if (hoursElms[0].value) {\n //TODO: convert to pipe? https://stackoverflow.com/a/50558928 but we need to save it as 00:00 to auto pass it to ticket creation\n const value = parseInt(hoursElms[0].value);\n const minutes = Math.floor(value / 60);\n\n this.hours =\n minutes.toString().padStart(2, '0') + ':' + (value - minutes * 60).toString().padStart(2, '0');\n } else {\n this.hours = '0';\n }\n }\n }\n } else {\n const { emoji, emojiCode, emojiName } = this.getDefaultEmojiCode(this.propertyState);\n this.emoji = emoji;\n this.emojiCode = emojiCode;\n this.emojiName = emojiName;\n }\n }\n }\n\n get isCustomStep() {\n return this.notesCount === 1 && this.fileUploadCount === 1 && this.propertyStateCount === 0;\n }\n\n getDefaultEmojiCode(state: PropertyState) {\n switch (state) {\n case 'good':\n return { emoji: String.fromCodePoint(Number('0x1f60d')), emojiCode: '1f60d', emojiName: 'Good' };\n case 'fair':\n return { emoji: String.fromCodePoint(Number('0x1f610')), emojiCode: '1f610', emojiName: 'Fair' };\n case 'poor':\n return { emoji: String.fromCodePoint(Number('0x1f4a9')), emojiCode: '1f4a9', emojiName: 'Poor' };\n }\n return {};\n }\n\n get flagsCount() {\n return 0; // TODO\n }\n}\n","import { CompulsoryItems } from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\nimport { parseJSON } from '@shared/utils/extensions';\n\nimport { InspectionStepModel } from './inspection-step.model';\nimport { InspectionItemStatus, RestInspectionContents } from './rest-inspections-model.interface';\n\nexport interface InspectionAnswer {\n title: string;\n pages: InspectionPage[];\n}\n\nexport interface InspectionPage {\n id: number;\n name: string;\n title: string;\n mainImage?: InspectionImage[];\n isCompleted: boolean;\n elements?: InspectionElement[];\n}\n\nexport interface InspectionImage {\n fileUploadId: number;\n filePath: string;\n}\n\nexport interface InspectionElementItem {\n item: {\n id: string;\n text: string;\n emoji: string;\n backgroundColor: string;\n isDefault: boolean;\n showQtyWidget: boolean;\n onSelect: CompulsoryItems[];\n };\n}\n\nexport interface InspectionElement {\n title: string;\n name: string;\n type: string;\n isRequired: boolean;\n items?: InspectionElementItem[];\n guid: string;\n value: string;\n choices: string[];\n visibleIf: null;\n requiredIf: null;\n elements: InspectionElement[];\n}\n\nexport class InspectionAreaModel {\n steps: InspectionStepModel[];\n readonly stepsCount: number;\n readonly completedStepsCount: number;\n readonly isCompleted: boolean;\n readonly isSkipped: boolean;\n readonly title: string;\n readonly id: number;\n\n constructor(public readonly content: RestInspectionContents, public readonly tickets: RestTicketModel[]) {\n const answer = parseJSON(content.answerJSON);\n this.id = this.content.id;\n this.title =\n this.content.title || this.content.inspectionTemplateAreaTitle || this.content.sharedInspectionLibrarySpaceTitle;\n this.steps =\n answer?.pages?.map((page, idx) => new InspectionStepModel(page, tickets, this.title, this.id, idx)) ?? [];\n this.stepsCount = answer?.pages?.length ?? 1;\n this.completedStepsCount = this.steps?.filter(step => step.page.isCompleted).length ?? 0;\n\n this.isCompleted = content.status === InspectionItemStatus.Completed;\n this.isSkipped = content.status === InspectionItemStatus.Skipped;\n\n if (this.steps.length === 1 && this.steps[0].isCustomStep) {\n this.title = this.steps[0].page.title;\n }\n }\n}\n","import { RestTicketModel } from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { HumanizePipe } from '@shared/pipes/humanize.pipe';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { InspectionAreaModel } from './inspection-area.model';\nimport { InspectionStepModel } from './inspection-step.model';\nimport {\n InspectionRecurrencePeriod,\n InspectionStatus,\n InspectionType,\n RestInspectionsModel,\n ScoringModels,\n} from './rest-inspections-model.interface';\n\nexport declare type PropertyState = 'good' | 'fair' | 'poor' | 'skipped' | undefined;\n\nexport declare type InspectionBackUrl = 'inspections/resident' | 'inspections/user' | 'inspections/in-review';\n\nexport const InspectionBaseUrlParamsKeys = {\n backInspectionUrl: 'backInspectionUrl',\n backInspectionSummaryUrl: 'backInspectionSummaryUrl',\n};\n\nexport class InspectionModel {\n readonly id: number;\n readonly completedOrSkippedAreasCount: number;\n readonly areasCount: number;\n readonly title: string;\n readonly status: string;\n readonly inspectionType: string;\n readonly areas: InspectionAreaModel[];\n\n readonly summary: { [key: string]: number } = { flagsCount: 0 };\n readonly allSteps: InspectionStepModel[];\n readonly propertyId: number;\n readonly portfolioId: number;\n readonly unitName: string;\n readonly unitId: number;\n readonly turnoverId: number | undefined;\n readonly isBulk: boolean;\n readonly isResident: boolean;\n readonly parentInspectionId: number;\n readonly dynamicInspectionId: number;\n readonly scoringModel?: ScoringModels;\n readonly resultScore?: number;\n reviewer: RestUserModel | null;\n completedByUser: RestUserModel | null;\n\n propertyName: string;\n readonly recurrencePeriod?: InspectionRecurrencePeriod;\n readonly isArchived: boolean;\n\n constructor(\n public readonly entityDetails: RestInspectionsModel,\n public readonly inspectionTemplate: RestTemplateModel,\n tickets?: RestTicketModel[],\n users?: Map\n ) {\n this.id = entityDetails.id;\n this.inspectionType =\n entityDetails.inspectionType != null\n ? HumanizePipe.transform(InspectionType[entityDetails.inspectionType])\n : 'Inspection';\n\n if (entityDetails.inspectionType === InspectionType.CustomInspection && entityDetails.inspectionTemplate) {\n this.inspectionType = entityDetails.inspectionTemplate?.name || 'Inspection';\n }\n\n this.title = `${this.inspectionType} - ${entityDetails.unitId ? entityDetails.unit.name : 'bulk'}`;\n this.status = HumanizePipe.transform(InspectionStatus[entityDetails.status]);\n this.propertyId = entityDetails.unit?.propertyId || entityDetails.propertyId;\n this.portfolioId = entityDetails.unit?.property?.portfolioId;\n this.isBulk = entityDetails?.isBulk;\n this.isResident = entityDetails?.isResident;\n this.parentInspectionId = entityDetails?.parentInspectionId;\n this.dynamicInspectionId = entityDetails?.dynamicInspectionId;\n this.resultScore = entityDetails?.resultScore;\n this.scoringModel = entityDetails?.scoringModel;\n this.unitId = entityDetails?.unitId;\n this.turnoverId = entityDetails?.unit?.turnoverId || undefined;\n this.unitName =\n entityDetails.unit?.name ||\n (entityDetails.bulkUnitIds.length == 0 ? 'All ' : entityDetails.bulkUnitIds.length) + ' units';\n this.recurrencePeriod = entityDetails.recurrencePeriod;\n this.propertyName = entityDetails?.unit?.property?.name;\n\n if (entityDetails?.inspectionContents.length) {\n this.areas = entityDetails.inspectionContents.map(\n content => new InspectionAreaModel(content, tickets?.filter(t => t.inspectionContentId === content.id) || [])\n );\n this.allSteps = this.areas.flatMap(area => area.steps).filter(Boolean);\n\n this.summary = this.allSteps.reduce((acc, curStep) => {\n acc[curStep.propertyState] = (acc[curStep.propertyState] ?? 0) + 1;\n acc.notesCount = (acc.notesCount ?? 0) + (curStep.note ? 1 : 0);\n return acc;\n }, this.summary);\n } else {\n this.allSteps = [];\n this.summary = {};\n this.areas = [];\n }\n this.completedOrSkippedAreasCount = entityDetails.completedRooms;\n this.areasCount = entityDetails.totalRooms;\n this.isArchived = entityDetails.isArchived;\n\n if (this.entityDetails.reviewRequiredByUserId && users?.size) {\n this.reviewer = users.get(entityDetails.reviewRequiredByUserId);\n this.completedByUser = users.get(entityDetails.completedBy);\n }\n }\n}\n","export interface InspectionsFilterByAssignee {\n value: string;\n all_count: number;\n expired_count: number;\n}\n\nexport enum InspectionsHeaderViewEnum {\n LIST = 'LIST',\n SUMMARY = 'SUMMARY',\n}\n","import { InspectionsHeaderViewEnum } from '@main-application/inspections/models/inspections-header.model';\n\nexport enum INSPECTIONS_VIEWS {\n NEW_INSPECTIONS = 'new-inspections',\n SURVEY_VIEW = 'survey',\n}\n\nexport enum InspectionViewEnum {\n INSPECTION_VIEW = 'inspectionsView',\n}\n\nexport type InspectionViewConfig = {\n [InspectionViewEnum.INSPECTION_VIEW]: InspectionsHeaderViewEnum;\n};\n","import { Time } from '@angular/common';\n\nimport { RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { RestTemplateAreaModel, RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nexport interface RestInspectionCreateModel {\n inspectionTemplateId: number;\n assignee: number;\n dueDate: Date;\n notifyAssignee: boolean;\n recurrencePeriod?: InspectionRecurrencePeriod;\n createOrNotifyOn?: Date;\n autoExpiredOn?: Date;\n endDate?: Date;\n propertyId?: number;\n unitId?: number;\n bulkUnitIds?: number[];\n notifyWhenDone?: boolean;\n notifyWhenDoneUserIds?: string;\n isResident?: boolean;\n reviewRequired?: number;\n notifyWhenReviewRequired?: boolean;\n reviewRequiredByUserId?: number;\n scheduleAppointmentIsRequired: boolean;\n appointmentConfirmed: boolean;\n appointmentTime?: Date;\n appointmentDate?: Date;\n appointmentNotes?: string;\n notifyResidentWhenDone?: boolean;\n}\n\nexport interface RestInspectionUpdateModel extends RestInspectionCreateModel {\n id: number;\n completedBy: number;\n modifiedAt: Date;\n completedAt: Date;\n createdAt: Date;\n status: number;\n turnStepScheduleId?: number;\n calendarPosition: number;\n inspectionTemplate?: RestTemplateModel;\n updatedFields?: string[];\n}\n\nexport enum ScoringModels {\n None = 0,\n Maximum100 = 1,\n}\n\nexport enum ScoreWeightModes {\n Automatic = 'Automatic',\n Manual = 'Manual',\n}\n\nexport enum InspectionRecurrencePeriod {\n DoNotRepeat = 0,\n Daily = 1,\n Weekly = 2,\n Monthly = 3,\n Quarterly = 4,\n SemiAnnually = 5,\n Annually = 6,\n SemiMonthly = 7,\n SameWeekMonthly = 8,\n SameWeekQuarterly = 9,\n}\n\nexport interface RestInspectionsModel {\n id: number;\n inspectionTemplateId: number;\n inspectionTemplate?: RestTemplateModel;\n unitId: number;\n completedBy: number;\n unit: RestUnitSummaryModel;\n assignee: number;\n assigneeUser: RestUserModel;\n status: InspectionStatus;\n recurrencePeriod?: InspectionRecurrencePeriod;\n inspectionContents?: RestInspectionContents[];\n completedAt: Date;\n modifiedAt: Date;\n createdAt: Date;\n dueDate: Date;\n calendarPosition: number;\n turnStepScheduleId?: number;\n inspectionType: InspectionType;\n isTurboMode?: boolean;\n attachments?: {\n attachment?: RestTypedInspectionAttachment;\n autoScopeReport?: RestTypedInspectionAttachment;\n none: RestTypedInspectionAttachment[];\n };\n totalRooms?: number;\n completedRooms?: number;\n notifyAssignee: boolean;\n createOrNotifyOn?: Date;\n autoExpiredOn?: Date;\n endDate?: Date;\n parentInspectionId?: number;\n dynamicInspectionId?: number;\n propertyId?: number;\n bulkUnitIds?: number[];\n isBulk: boolean;\n notifyWhenDone?: boolean;\n notifyWhenDoneUserIds?: string;\n scoringModel?: ScoringModels;\n resultScore?: number;\n inspectionStartedOn?: Date;\n inspectionFinishedOn?: Date;\n isResident?: boolean;\n isArchived: boolean;\n reviewRequired: number;\n reviewRequiredByUserId: number;\n notifyWhenReviewRequired: boolean;\n reviewCompletedBy: number;\n reviewCompletedOn: Date;\n scheduleAppointmentIsRequired: boolean;\n appointmentConfirmed: boolean;\n appointmentTime?: Date;\n appointmentDate?: Date;\n appointmentNotes?: string;\n notifyResidentWhenDone?: boolean;\n updatedFields?: string[];\n}\n\nexport enum DynamicSchedule {\n Notice = 1,\n MoveOut = 2,\n MoveIn = 3,\n MakeReady = 4,\n}\n\nexport enum DynamicPropertyType {\n None = 0,\n Portfolio = 1,\n Property = 2,\n Unit = 4,\n}\n\nexport interface RestDynamicInspectionUpdateModel {\n id?: number;\n inspectionTemplateId: number;\n dynamicallyScheduledOn: DynamicSchedule;\n propertyOrPortfolioId: number;\n propertyType: DynamicPropertyType;\n createOrNotifyOn: number;\n autoExpiredAfterDueDateDays: number;\n notifyAssignee: boolean;\n doNotSetAssignee: boolean;\n dueDate: number;\n assignee?: number;\n endDate: string | Date;\n notifyWhenDone?: boolean;\n notifyWhenDoneUserIds?: string;\n assignToResident?: boolean;\n propertyIds?: number[] | null;\n reviewRequired: number;\n notifyWhenReviewRequired: boolean;\n reviewRequiredByUserId: number;\n scheduleAppointmentIsRequired: boolean;\n appointmentConfirmed: boolean;\n appointmentTime?: Date;\n appointmentDate?: number;\n appointmentNotes?: string;\n notifyResidentWhenDone?: boolean;\n}\n\nexport interface RestDynamicInspectionModel {\n id: number;\n inspectionTemplateId: number;\n doNotSetAssignee: boolean;\n dynamicallyScheduledOn: DynamicSchedule;\n createOrNotifyOn: number;\n autoExpiredAfterDueDateDays: number;\n notifyAssignee: boolean;\n dueDate: number;\n endDate: string | Date;\n actualAssigneeId: number;\n propertyOrPortfolioId: number;\n propertyId: number;\n propertyIds: number[];\n portfolioId: number;\n propertyType: DynamicPropertyType;\n assignee: number;\n notifyWhenDone?: boolean;\n notifyWhenDoneUserIds?: string;\n assignToResident?: boolean;\n reviewRequired: number;\n notifyWhenReviewRequired: boolean;\n reviewRequiredByUserId: number;\n scheduleAppointmentIsRequired: boolean;\n appointmentConfirmed: boolean;\n appointmentTime?: Date;\n appointmentDate?: number;\n appointmentNotes?: string;\n notifyResidentWhenDone?: boolean;\n}\n\nexport interface RestTypedInspectionAttachment {\n id: number;\n dateCreated: string;\n dateUpdated: string;\n isActive: boolean;\n fileUploadId: number;\n internalName: string;\n originalFileName: string;\n size: number;\n url: string;\n attachmentTypeUrn: string;\n title: string;\n description: string;\n externalUrl: string;\n inspectionAttachmentType: number;\n inspectionTemplateName?: string;\n trueType: number;\n}\n\nexport interface RestInspectionContents {\n id: number;\n inspectionId: number;\n inspectionTemplateAreaId: number;\n sharedInspectionLibrarySpaceId: number;\n status: InspectionItemStatus;\n surveyJSON: string;\n answerJSON: string;\n inspectionTemplateAreaTitle: string;\n title: string;\n sharedInspectionLibrarySpaceTitle?: string;\n inspectionTemplateArea?: RestTemplateAreaModel;\n completedAt?: string;\n completedByUser?: RestUserModel;\n responsibleParty?: number;\n cost?: number;\n createTicketFlag?: boolean;\n inspectionStartedOn?: string;\n inspectionFinishedOn?: string;\n totalInspectionTimeInSeconds?: number;\n itemsCost?: string;\n itemsScore?: string;\n scoreWeight?: number;\n areaSubTotal?: number;\n areaTime?: number;\n areaLaborCost?: number;\n areaMaterialsCost?: number;\n ticketDetailedInformation?: string;\n images?: number[];\n ticketAssigneeId?: number;\n surveyPageId?: number;\n}\n\nexport interface SendInspectionReportRequest {\n to: string[];\n subject: string;\n body: string;\n}\n\nexport enum InspectionStatus {\n NotStarted,\n InProgress,\n Completed,\n Canceled,\n Expired,\n Review,\n Late = 99,\n}\n\nexport enum InspectionItemStatus {\n Incompleted,\n Skipped,\n Completed,\n}\n\nexport enum InspectionType {\n MoveOutVacant,\n Annual,\n ServiceCheck,\n MoveIn,\n CustomInspection,\n Periodic,\n MoveOutOccupied,\n Diligence,\n}\n\nexport enum PropertyInspectionType {\n Dynamic,\n Repeating,\n OneTime,\n}\n\nexport enum InspectionScheduleType {\n None,\n Standard,\n Resident,\n Repeating,\n DynamicNotice,\n DynamicMoveIn,\n DynamicMoveOut,\n DynamicMakeReady,\n}\n\nexport enum ReviewRequiredPolicy {\n NotRequired,\n RequireIfNonDefaultRatingSelected,\n Always,\n}\n\nexport interface InspectionDelegateReqI {\n newAssignee: number;\n notify: boolean;\n}\n\nexport interface InspectionAppointment {\n scheduleAppointmentIsRequired: boolean;\n appointmentConfirmed: boolean;\n appointmentDate?: Date;\n appointmentTime?: Time;\n appointmentNotes?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TemplatesCacheService } from '@main-application/shared/template-editor-dialog/services/templates-cache.service';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TemplateManagerService {\n constructor(\n private restApiService: RestapiService,\n private snackbarService: SnackbarService,\n private templatesCacheService: TemplatesCacheService\n ) {}\n\n getGlobalTemplates(): Observable {\n return this.restApiService.getData(`inspections/template/global`);\n }\n\n getViewedTemplates(): Observable {\n return this.restApiService.getData(`inspections/template/viewed`);\n }\n\n markTemplatesAsViewed(templateIds: number[]) {\n return this.restApiService.post(`inspections/template/markAsViewed`, templateIds);\n }\n\n markAsNew(templateId: number) {\n return this.restApiService.post(`inspections/template/global/${templateId}/flagAsNew`);\n }\n\n getTemplate(templateId: number) {\n return this.restApiService.getData(`inspections/template/global/${templateId}`);\n }\n\n installTemplate(templateId: number): Observable {\n return this.restApiService.post(`inspections/template/installGlobalTemplate/${templateId}`);\n }\n\n removeTemplate(template: RestTemplateModel) {\n return this.restApiService.delete(`inspections/template/global/${template.id}`).pipe(\n catchError(err => {\n if (err?.error?.['ErrorCode'] === 'inspection_template_delete_unavailable') {\n this.snackbarService.error(SnackbarErrorMessage.RemovingTemplateInUse);\n } else {\n this.snackbarService.error(SnackbarErrorMessage.RemovingTemplate);\n }\n return throwError(() => err);\n }),\n tap(() => {\n this.snackbarService.success(`${template.name} deleted`);\n })\n );\n }\n\n promoteTemplateToGlobal(templateId: number) {\n return this.restApiService.post(`inspections/template/promoteTemplateToGlobal/${templateId}`);\n }\n\n updatePostNonCompletedInstances(templateId: number) {\n return this.restApiService.post(`inspections/template/${templateId}/updatePostNonCompletedInstances`);\n }\n\n cloneTemplate(templateId: number) {\n return this.restApiService\n .post(`inspections/template/${templateId}/clone`)\n .pipe(tap(() => this.templatesCacheService.resetTemplatesCache()));\n }\n\n cloneGlobalTemplate(templateId: number) {\n return this.restApiService.post(`inspections/template/global/${templateId}/clone`);\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestTemplateAreaModel, RestTemplateModel } from '@template/models/rest-template-model.interface';\n\n/* Templates List */\nexport const loadAllUserTemplates = createAction('[Template] Load all template');\nexport const loadAllUserTemplatesSuccess = createAction(\n '[Template] All template loaded successfully',\n props<{ listItems: RestTemplateModel[] }>()\n);\nexport const loadAllUserTemplatesFailed = createAction('[Template] All template loading failed');\n\n/* Add new template */\nexport const createTemplateDetails = createAction(\n '[Template] Add new template',\n props<{ entityDetails: RestTemplateModel }>()\n);\nexport const updateTemplateDetails = createAction(\n '[Template] Update new template',\n props<{ entityDetails: RestTemplateModel }>()\n);\nexport const updateTemplateDetailsFailed = createAction('[Template] Update template failed');\n\n/* Delete template */\nexport const deleteTemplate = createAction('[Template] Remove template', props<{ id: number }>());\nexport const clearTemplateData = createAction('[Template] Clear template data');\n\n/* Delete template */\nexport const removeAreaFromTemplate = createAction('[Template] Remove area from template', props<{ areaId: number }>());\n/* Load unit types */\nexport const loadAllUnitTypes = createAction(\n '[Template] Load unit types of exact property',\n props<{ propertyId: number }>()\n);\nexport const loadAllUnitTypesSuccess = createAction(\n '[Template] All unit types loaded successfully',\n props<{ unitTypes: string[] }>()\n);\nexport const loadAllUnitTypesFailed = createAction('[Template] All unit types loading failed');\n\n/* Inspection survey template */\nexport const addInspectionSurveyTemplate = createAction(\n '[Surveys] addInspectionSurveyTemplate',\n props<{ survey: RestTemplateAreaModel }>()\n);\n\nexport const updateInspectionSurveyTemplate = createAction(\n '[Surveys] updateInspectionSurveyTemplate',\n props<{ survey: RestTemplateAreaModel }>()\n);\n\nexport const saveInspectionSurveyTemplateSuccess = createAction(\n '[Surveys] saveInspectionSurveyTemplateSuccess',\n props<{ surveyId: number }>()\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport {\n addInspectionSurveyTemplate,\n clearTemplateData,\n createTemplateDetails,\n deleteTemplate,\n loadAllUnitTypesFailed,\n loadAllUnitTypesSuccess,\n loadAllUserTemplates,\n loadAllUserTemplatesFailed,\n loadAllUserTemplatesSuccess,\n removeAreaFromTemplate,\n saveInspectionSurveyTemplateSuccess,\n updateInspectionSurveyTemplate,\n updateTemplateDetails,\n updateTemplateDetailsFailed,\n} from '@template/store/template.actions';\n\nexport const templateFeatureKey = 'template';\n\nexport interface TemplateState {\n listItemsLoading?: boolean;\n listItems?: RestTemplateModel[];\n unitTypes?: string[];\n\n entityUpdateOngoing?: boolean;\n deleteEntityOngoing?: boolean;\n\n templateAreaUpdateOngoing?: boolean;\n templateAreaRemoveOngoing?: boolean;\n templateAreaUpdateStatus?: UpdateStatus;\n}\n\nexport const initialState: TemplateState = {\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n templateAreaUpdateOngoing: false,\n templateAreaRemoveOngoing: false,\n templateAreaUpdateStatus: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /* Templates List */\n on(loadAllUserTemplates, (state, action) => ({ ...state, listItemsLoading: true })),\n on(loadAllUserTemplatesSuccess, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: action.listItems,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n templateAreaUpdateOngoing: false,\n templateAreaRemoveOngoing: false,\n })),\n on(updateTemplateDetails, createTemplateDetails, (state, action) => ({ ...state, entityUpdateOngoing: true })),\n on(deleteTemplate, (state, action) => ({ ...state, deleteEntityOngoing: true })),\n on(updateTemplateDetailsFailed, (state, action) => ({ ...state, deleteEntityOngoing: false })),\n on(clearTemplateData, (state, action) => ({\n ...state,\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n templateAreaUpdateOngoing: false,\n templateAreaRemoveOngoing: false,\n templateAreaUpdateStatus: null,\n })),\n on(loadAllUserTemplatesFailed, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: [],\n deleteEntityOngoing: false,\n })),\n\n /* Template Survey & Area */\n on(addInspectionSurveyTemplate, updateInspectionSurveyTemplate, (state, action) => ({\n ...state,\n templateAreaUpdateOngoing: true,\n templateAreaUpdateStatus: UpdateStatus.IN_PROGRESS,\n })),\n on(saveInspectionSurveyTemplateSuccess, (state, action) => ({\n ...state,\n templateAreaUpdateStatus: UpdateStatus.UPDATED,\n })),\n on(removeAreaFromTemplate, (state, action) => ({ ...state, templateAreaRemoveOngoing: true })),\n\n /* Unit types */\n on(loadAllUnitTypesSuccess, (state, action) => ({\n ...state,\n unitTypes: action.unitTypes,\n })),\n on(loadAllUnitTypesFailed, (state, action) => ({\n ...state,\n unitTypes: [],\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromTemplate from './template.reducer';\n\nexport const selectTemplateState = createFeatureSelector(fromTemplate.templateFeatureKey);\n\nexport const selectTemplates = createSelector(selectTemplateState, templateState => templateState.listItems);\n\nexport const selectAvailableTemplates = createSelector(selectTemplateState, templateState =>\n (templateState?.listItems || []).filter(t => t.isAvailable && !t.isScheduledForDeletion)\n);\n\nexport const selectTemplatesLoading = createSelector(\n selectTemplateState,\n templateState => templateState.listItemsLoading\n);\n\nexport const selectTemplateUpdate = createSelector(\n selectTemplateState,\n templateState => templateState.entityUpdateOngoing\n);\n\nexport const selectTemplateAreaUpdateOngoing = createSelector(\n selectTemplateState,\n templateState => templateState.templateAreaUpdateOngoing\n);\n\nexport const selectTemplateAreaDeleteOngoing = createSelector(\n selectTemplateState,\n templateState => templateState.templateAreaRemoveOngoing\n);\n\nexport const selectUnitTypes = createSelector(selectTemplateState, templateState => templateState.unitTypes);\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { MatSort } from '@angular/material/sort';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Observable, Subject, catchError, firstValueFrom, mergeMap } from 'rxjs';\nimport { concatMap, filter } from 'rxjs/operators';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { InspectionSummaryNotifyAgainPayload } from '@main-application/inspections/components/inspections-list/components/inspections-summary/inspections-summary.model';\nimport { InspectionsType } from '@main-application/inspections/components/inspections-list/inspections-list.component';\nimport {\n InspectionSummaryDownloadReport,\n InspectionSummaryFilters,\n InspectionSummaryStatsResponse,\n} from '@main-application/inspections/models/inspection-summary.model';\nimport {\n InspectionBackUrl,\n InspectionBaseUrlParamsKeys,\n InspectionModel,\n} from '@main-application/inspections/models/inspection.model';\nimport { InspectionsHeaderViewEnum } from '@main-application/inspections/models/inspections-header.model';\nimport { InspectionViewEnum } from '@main-application/inspections/models/inspections-views';\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { TimezoneEntityHelper } from '@main-application/management/pages/system-configuration/components/timezone-entity.helper';\nimport { RegeneratedInspections } from '@main-application/turnovers/interfaces/inspection.interface';\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { RestAddInspectionTicket, RestUpdateInspectionTicket } from '@shared/interfaces/ticket.interface';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\nimport { setStorageItem } from '@shared/utils/extensions';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { SendInspectionComponent } from '../components/send-inspection/send-inspection.component';\nimport {\n InspectionAppointment,\n InspectionDelegateReqI,\n InspectionStatus,\n InspectionType,\n RestInspectionContents,\n RestInspectionCreateModel,\n RestInspectionUpdateModel,\n RestInspectionsModel,\n RestTypedInspectionAttachment,\n SendInspectionReportRequest,\n} from '../models/rest-inspections-model.interface';\nimport { compareValues } from '../utils/inspection-mappers';\n\ninterface SignaturePayload {\n residentSigned?: boolean;\n residentSignName?: string;\n}\n\nconst DO_CHECK_INTERVAL = 3000;\n\n@UntilDestroy()\n@Injectable()\nexport class InspectionService extends PuSubscribable {\n private _currentSurvey: RestInspectionContents | undefined;\n downloadOptions$ = new Subject();\n fetchOneTimeInspectionList$ = new Subject();\n private submissionQueue$ = new Subject();\n private queueInitialized = false;\n\n get survey() {\n return this._currentSurvey;\n }\n\n constructor(\n private readonly snackbarService: SnackbarService,\n private restApiService: RestapiService,\n private readonly matDialog: MatDialog,\n private modalService: ModalsService,\n private router: Router,\n private fileUploadService: FileUploadsService,\n private timezoneService: TimezoneService\n ) {\n super();\n }\n\n private static fixTimezoneForRestInspectionsModelList(data: RestInspectionsModel[], timezone: RestTimezone) {\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForInspectionDataModelToClient(e, timezone));\n return data;\n }\n\n list(\n portfolioId?: number,\n startDate?: Date,\n endDate?: Date,\n inspectionType?: InspectionsType,\n returnStandardAndResidentBoth?: boolean,\n includeArchived?: boolean\n ): Observable {\n if (!startDate && (inspectionType === InspectionsType.User || inspectionType === InspectionsType.Resident)) {\n startDate = new Date(2022, 0, 1);\n }\n\n let url = `inspections/list?portfolioId=${portfolioId}&doNotReturnContent=true`;\n\n if (inspectionType === InspectionsType.User || inspectionType === InspectionsType.Resident) {\n url += `&startDate=${startDate.toISOString()}&endDate=${endDate?.toISOString() || ''}`;\n }\n\n if (inspectionType === InspectionsType.Resident) {\n url += `&isResident=${true}`;\n }\n\n if (returnStandardAndResidentBoth) {\n url += `&returnStandardAndResidentBoth=${returnStandardAndResidentBoth}`;\n }\n\n if (includeArchived) {\n url += `&includeArchived=${includeArchived}`;\n }\n\n return this.restApiService.getData(\n url,\n InspectionService.fixTimezoneForRestInspectionsModelList\n );\n }\n\n inReviewList(\n portfolioId?: number,\n isResident?: boolean,\n returnStandardAndResidentBoth?: boolean,\n includeArchived?: boolean\n ): Observable {\n let url = `inspections/list?portfolioId=${portfolioId}&doNotReturnContent=true&inReviewOnly=true`;\n\n if (typeof isResident !== 'undefined') {\n url += `&isResident=${isResident}`;\n }\n\n if (returnStandardAndResidentBoth) {\n url += `&returnStandardAndResidentBoth=${returnStandardAndResidentBoth}`;\n }\n\n if (includeArchived) {\n url += `&includeArchived=${includeArchived}`;\n }\n\n return this.restApiService.getData(\n url,\n InspectionService.fixTimezoneForRestInspectionsModelList\n );\n }\n\n repeating() {\n return this.restApiService.getData(`inspections/recurring?doNotReturnContent=true`);\n }\n\n updateCalendarView(inspectionModel: RestInspectionsModel) {\n return this.restApiService.post(\n `inspections/updateCalendarView/${inspectionModel.id}`,\n {\n calendarPosition: inspectionModel.calendarPosition,\n dueDate: inspectionModel.dueDate,\n },\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer\n );\n }\n\n updateInspectionComment(inspectionId: number, contentId: number, pageIndex: number, newComment: string) {\n return this.restApiService.post(`inspections/${inspectionId}/${contentId}/updateComment`, {\n pageIndex,\n newComment,\n });\n }\n\n create(inspectionModel: RestInspectionCreateModel): Observable {\n return this.restApiService.create(\n `inspections/add`,\n inspectionModel\n // TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer,\n // TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToClient\n );\n }\n\n update(inspectionModel: RestInspectionUpdateModel): Observable {\n return this.restApiService.create(\n `inspections/${inspectionModel.id}`,\n inspectionModel\n // TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer\n );\n }\n\n extendExpiration(reqData: { newDate: Date }, id: number): Observable {\n return this.restApiService.create(\n `inspections/extendExpireDate/${id}`,\n reqData,\n TimezoneEntityHelper.fixTimezoneForExtendExpirationModelToServer,\n TimezoneEntityHelper.fixTimezoneForExtendExpirationModelToClient\n );\n }\n\n delete(inspectionId: number): Observable {\n return this.restApiService.delete(`inspections/${inspectionId}`);\n }\n\n regenerate(inspectionId: number): Observable {\n return this.restApiService.create(`inspections/${inspectionId}/regeneratePdf`, {});\n }\n\n getById(inspectionId: number) {\n return this.restApiService.getData(`inspections/${inspectionId}`);\n }\n\n getBeUnitId(unitId: number) {\n return this.restApiService.getData(`inspections/ByUnit/${unitId}`);\n }\n\n async openSendDialog(id: number, inspectionTitle: string) {\n const config: MatDialogConfig = {\n minWidth: '500px',\n panelClass: 'send-inspection-report-modal-container',\n data: inspectionTitle,\n };\n\n const sendRequest = await firstValueFrom(\n this.matDialog\n .open(SendInspectionComponent, config)\n .afterClosed()\n );\n\n if (sendRequest) {\n this.sendReport(id, sendRequest)\n .subscribe({\n next: () => this.snackbarService.success(SnackbarErrorMessage.InspectionReportSentSuccessfully),\n error: error => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorSendingInspectionReport);\n console.error(error);\n },\n })\n .untilDestroyed(this);\n }\n }\n\n sendReport(inspectionId: number, request: SendInspectionReportRequest) {\n return this.restApiService.post(`inspections/${inspectionId}/sendReport`, request);\n }\n\n onRegenerate(inspection: InspectionModel, regenerateAction: string): void {\n if (\n inspection.entityDetails.status !== InspectionStatus.Completed &&\n inspection.entityDetails.status !== InspectionStatus.Expired\n ) {\n this.snackbarService.error(SnackbarErrorMessage.InspectionMustBeCompleted);\n return;\n }\n this.regenerate(inspection.id)\n .pipe(\n catchError(err => {\n this.snackbarService.error('Error regenerating PDF report');\n throw err;\n }),\n untilDestroyed(this)\n )\n .subscribe(() => {\n this.snackbarService.dismiss();\n setTimeout(() => {\n this.snackbarService.snackbarLoadingSpinner$.next(true);\n }, 200);\n this.snackbarService.snackbarLoadingSpinner$.next(true);\n this.snackbarService.info('Your report is generating…', null, false);\n\n this.doCheckReportIsReady(inspection.id, inspection.entityDetails.attachments.attachment, regenerateAction);\n })\n .untilDestroyed(this);\n }\n\n private doCheckReportIsReady(\n inspectionId: number,\n attachment: RestTypedInspectionAttachment,\n regenerateAction: string\n ) {\n this.getById(inspectionId)\n .pipe(untilDestroyed(this))\n .subscribe(inspection => {\n if (inspection?.attachments?.attachment?.url || inspection?.attachments?.autoScopeReport?.url) {\n const inspectionAttachmentType = inspection?.attachments?.attachment?.inspectionAttachmentType || null;\n const autoScopeInspectionAttachmentType =\n inspection?.attachments?.autoScopeReport?.inspectionAttachmentType || null;\n\n this.downloadOptions$.next({ inspectionAttachmentType, autoScopeInspectionAttachmentType, inspectionId });\n this.snackbarService.snackbarLoadingSpinner$.next(false);\n this.snackbarService.dismiss();\n\n if (inspectionAttachmentType && autoScopeInspectionAttachmentType) {\n this.snackbarService.success(\n `Report ready! Download standard report  \n Download auto scope report`,\n null,\n null\n );\n } else {\n this.snackbarService.success(\n `Report ready! Download`,\n null,\n null\n );\n }\n } else {\n setTimeout(() => {\n this.doCheckReportIsReady(inspectionId, attachment, regenerateAction);\n }, DO_CHECK_INTERVAL);\n }\n })\n .untilDestroyed(this);\n }\n\n public notifyAgainWithParams(payload: InspectionSummaryNotifyAgainPayload): Observable {\n return this.restApiService.post(`inspections/notifyAgain`, payload);\n }\n\n public onDownloadInspection(inspectionId: number): void {\n const download = (inspection: InspectionModel) => {\n if (\n inspection.entityDetails.status !== InspectionStatus.Completed &&\n inspection.entityDetails.status !== InspectionStatus.Expired\n ) {\n this.snackbarService.error(SnackbarErrorMessage.InspectionMustBeCompleted);\n return;\n }\n\n if (inspection.entityDetails.attachments?.autoScopeReport) {\n const { fileUploadId } = inspection.entityDetails.attachments?.autoScopeReport;\n this.fileUploadService.downloadFile(fileUploadId);\n }\n\n if (inspection.entityDetails.attachments?.attachment) {\n const { fileUploadId } = inspection.entityDetails.attachments?.attachment;\n this.fileUploadService.downloadFile(fileUploadId);\n }\n\n if (\n !inspection.entityDetails.attachments?.attachment?.url &&\n !inspection.entityDetails.attachments?.autoScopeReport?.url\n ) {\n this.snackbarService.error(SnackbarErrorMessage.InspectionPdfNotFound);\n }\n };\n\n this.getById(inspectionId)\n .pipe(untilDestroyed(this))\n .subscribe(inspection => {\n this.snackbarService.resetSnackbarActions();\n download(new InspectionModel(inspection, null));\n })\n .untilDestroyed(this);\n }\n\n deleteInspection(inspection: InspectionModel, noConfirm = false) {\n const deleteFn = this.delete(inspection.id).pipe(\n catchError(err => {\n this.snackbarService.error('Error deleting inspection');\n throw err;\n })\n );\n\n if (noConfirm) {\n return deleteFn;\n }\n\n return this.modalService\n .openConfirmationModal(\n {\n title: `Delete inspection?`,\n content: `Delete ${inspection.inspectionTemplate?.name || 'inspection'} for ${inspection.propertyName} - ${\n inspection.unitName\n }?`,\n confirmColor: 'warn',\n confirmLabel: 'Delete',\n },\n 'sm'\n )\n .afterClosed()\n .pipe(\n filter(result => result === DialogResult.Success),\n mergeMap(() => deleteFn)\n );\n }\n\n tableSortPredicate(inspection: InspectionModel, sortHeaderId: string) {\n switch (sortHeaderId) {\n case 'unit.name':\n return inspection.entityDetails.unit ? inspection.entityDetails.unit.name?.toLocaleLowerCase() : 'all units';\n case 'turboMode':\n return inspection.entityDetails.isTurboMode;\n case 'unit.propertyName':\n return inspection.propertyName?.toLocaleLowerCase();\n case 'inspectionType':\n return (inspection.inspectionTemplate?.name ?? inspection.inspectionType)?.toLocaleLowerCase();\n case 'rooms':\n return inspection.completedOrSkippedAreasCount;\n case 'areas':\n return inspection.areasCount;\n case 'assignee':\n return inspection.entityDetails.assigneeUser?.displayName?.toLocaleLowerCase();\n case 'createdAt':\n return inspection.entityDetails.createdAt;\n case 'completedAt':\n return inspection.entityDetails.completedAt;\n case 'dueDate':\n return inspection.entityDetails.dueDate;\n case 'expired':\n return inspection.entityDetails.autoExpiredOn;\n case 'until':\n return inspection.entityDetails.endDate;\n case 'repeats':\n return inspection?.parentInspectionId !== null && inspection?.parentInspectionId > 0 ? 'Yes' : 'No';\n case 'reviewer':\n return inspection.reviewer?.displayName?.toLocaleLowerCase();\n case 'reviewCompletedByUser':\n return inspection.reviewer?.displayName?.toLocaleLowerCase();\n default:\n return inspection[sortHeaderId];\n }\n }\n\n sortByPrimaryKeyAndUnit(inspections: InspectionModel[], sort: MatSort): InspectionModel[] {\n const data = inspections.slice();\n if (!sort.active || sort.direction === '') {\n return data;\n }\n return data.sort((a, b) => {\n const primaryA = this.tableSortPredicate(a, sort.active);\n const primaryB = this.tableSortPredicate(b, sort.active);\n const primaryCompare = compareValues(primaryA, primaryB, sort.direction === 'asc');\n if (primaryCompare !== 0 || sort.active === 'unit.name') {\n return primaryCompare;\n }\n return compareValues(this.tableSortPredicate(a, 'unit.name'), this.tableSortPredicate(b, 'unit.name'), true);\n });\n }\n\n sortByPrimaryKey(inspections: InspectionModel[], sort: MatSort): InspectionModel[] {\n const data = inspections.slice();\n if (!sort.active || sort.direction === '') {\n return data;\n }\n return data.sort((a, b) => {\n const primaryA = this.tableSortPredicate(a, sort.active);\n const primaryB = this.tableSortPredicate(b, sort.active);\n return compareValues(primaryA, primaryB, sort.direction === 'asc');\n });\n }\n\n open(inspection: InspectionModel, backInspectionUrl?: InspectionBackUrl) {\n inspection.entityDetails.inspectionType === InspectionType.CustomInspection\n ? this.router.navigate([RoutePath.CUSTOM_INSPECTIONS, inspection.entityDetails.id], {\n queryParamsHandling: 'merge',\n queryParams: { [InspectionBaseUrlParamsKeys.backInspectionUrl]: backInspectionUrl || null },\n })\n : this.router.navigate([RoutePath.INSPECTIONS, inspection.entityDetails.id], { queryParamsHandling: 'merge' });\n }\n\n share(inspection: InspectionModel, evt?: Event) {\n if (evt) {\n evt.preventDefault();\n }\n\n if (inspection.entityDetails.status === InspectionStatus.Completed) {\n this.openSendDialog(\n inspection.entityDetails.id,\n `${inspection.inspectionType} inspection: ${inspection.entityDetails.unit.propertyName} - ${inspection.entityDetails.unit.name}`\n );\n } else {\n this.snackbarService.error(`You can only share a completed inspection`);\n }\n }\n\n download(inspectionId: number): void {\n this.onDownloadInspection(inspectionId);\n }\n\n createTicket(ticket: RestAddInspectionTicket) {\n return this.restApiService.create('tickets/v2/add', ticket);\n }\n\n updateTicket(ticket: RestUpdateInspectionTicket) {\n return this.restApiService.create('tickets/v2/' + ticket.id, ticket);\n }\n\n getTicketsForInspection(inspectionId: number): Observable {\n return this.restApiService.getData('tickets/ByInspectionId/' + inspectionId);\n }\n\n getResidentInspections(): Observable {\n return this.restApiService.getData('inspections/residentInspections');\n }\n\n getSummaryStats(payload: InspectionSummaryFilters): Observable {\n return this.restApiService.post(\n 'inspections/summaryStats',\n payload,\n TimezoneEntityHelper.fixTimezoneForSummaryStatsToServer\n );\n }\n\n markAsCompleted(inspectionId: number, residentSigned?: boolean, residentSignName?: string): Observable {\n const payload: SignaturePayload = {};\n\n if (residentSigned && residentSignName) {\n payload.residentSigned = residentSigned;\n payload.residentSignName = residentSignName;\n }\n\n return this.restApiService.post(`inspections/${inspectionId}/complete`, payload);\n }\n\n archiveInspection(inspectionId: number): Observable {\n return this.restApiService.post(\n `inspections/${inspectionId}/archive`,\n null,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToClient\n );\n }\n\n unArchiveInspection(inspectionId: number): Observable {\n return this.restApiService.post(\n `inspections/${inspectionId}/unarchive`,\n null,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToClient\n );\n }\n\n inspectionDelegate(id: number, model: InspectionDelegateReqI): Observable {\n return this.restApiService.create(\n `inspections/${id}/delegate`,\n model,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToClient\n );\n }\n\n finishReview(id: number): Observable {\n return this.restApiService.create(\n `inspections/${id}/finishReview`,\n null,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToServer,\n TimezoneEntityHelper.fixTimezoneForRestInspectionsModelToClient\n );\n }\n\n private initializeSubmissionQueue(): void {\n if (!this.queueInitialized) {\n this.queueInitialized = true;\n this.submissionQueue$\n .pipe(concatMap(payload => this.submitAnswers(payload)))\n .subscribe()\n .untilDestroyed(this);\n }\n }\n\n queueSubmitAnswers(payload: RestInspectionContents): void {\n if (!this.queueInitialized) {\n this.initializeSubmissionQueue();\n }\n this.submissionQueue$.next(payload);\n }\n\n submitAnswers(payload: RestInspectionContents): Observable {\n return this.restApiService.post('inspections/submitAnswers', payload);\n }\n\n notifyAgain(inspectionId: number): Observable {\n return this.restApiService.post(`inspections/${inspectionId}/notifyAgain`);\n }\n\n onDownloadInspectionSummary(payload: InspectionSummaryDownloadReport): Observable {\n return this.restApiService.downloadWithPost(\n 'inspections/summaryreport',\n payload,\n TimezoneEntityHelper.fixTimezoneForSummaryReportDownloadToServer\n );\n }\n\n updateAppointment(inspectionId: number, payload: InspectionAppointment): Observable {\n return this.restApiService.post(`inspections/${inspectionId}/appointment`, payload);\n }\n\n getAppointmentHours(date?: Date): { value: Date; label: string }[] {\n const today = date || this.timezoneService.getCurrentDateOnly();\n const appointments: { value: Date; label: string }[] = [];\n\n appointments.push({\n value: new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0),\n label: '12:00 AM',\n });\n\n for (let hour = 1; hour <= 11; hour++) {\n const label = `${hour}:00 AM`;\n const appointmentDate = new Date(today.getFullYear(), today.getMonth(), today.getDate(), hour, 0, 0);\n appointments.push({ value: appointmentDate, label });\n }\n\n appointments.push({\n value: new Date(today.getFullYear(), today.getMonth(), today.getDate(), 12, 0, 0),\n label: '12:00 PM',\n });\n\n for (let hour = 1; hour <= 11; hour++) {\n const label = `${hour}:00 PM`;\n const appointmentDate = new Date(today.getFullYear(), today.getMonth(), today.getDate(), hour + 12, 0, 0);\n appointments.push({ value: appointmentDate, label });\n }\n\n return appointments;\n }\n\n public updateInspectionsViewModeInStorage(type: InspectionsHeaderViewEnum): void {\n setStorageItem(LocalStorageDataEnum.INSPECTION_VIEW_MODE, {\n [InspectionViewEnum.INSPECTION_VIEW]: type,\n });\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { InspectionsType } from '@main-application/inspections/components/inspections-list/inspections-list.component';\nimport {\n InspectionSummaryAppliedFilters,\n InspectionSummaryFilters,\n InspectionSummaryStatsResponse,\n} from '@main-application/inspections/models/inspection-summary.model';\nimport {\n DynamicSchedule,\n InspectionScheduleType,\n RestDynamicInspectionModel,\n RestInspectionsModel,\n} from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { RestAddInspectionTicket, RestUpdateInspectionTicket } from '@shared/interfaces/ticket.interface';\nimport {\n IInspectionFilterForm,\n InReviewInspectionFilterForm,\n RepeatingInspectionFilterForm,\n} from '@template/interfaces/filter.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nexport const loadAllInspections = createAction(\n '[Inspections] Load all space template',\n props<{\n portfolioId: number;\n startDate?: Date;\n endDate?: Date;\n inspectionType?: InspectionsType;\n returnStandardAndResidentBoth?: boolean;\n includeArchived?: boolean;\n }>()\n);\n\nexport const loadAllInspectionsSuccess = createAction(\n '[Inspections] All space template loaded successfully',\n props<{ listItems: RestInspectionsModel[] }>()\n);\nexport const loadAllInspectionsFailed = createAction('[Inspections] All space template loading failed');\nexport const clearAllInspections = createAction('[Inspections] clearAllInspections');\n\nexport const clearInspectionsData = createAction('[Inspections] Clear space template data');\n\nexport const loadResidentInspections = createAction('[Inspections] loadResidentInspections');\nexport const loadResidentInspectionsSuccess = createAction(\n '[Inspections] loadResidentInspectionsSuccess',\n props<{ listItems: RestInspectionsModel[] }>()\n);\nexport const loadResidentInspectionsFailed = createAction('[Inspections] loadResidentInspectionsFailed');\n\nexport const loadTemplatesForUnitSuccess = createAction(\n '[Inspections] Load template for unit number success',\n props<{ list: RestTemplateModel[] }>()\n);\nexport const loadTemplatesForUnitFailed = createAction('[Inspections] Load template for unit number failed');\n\nexport const setNewlyAddedInspection = createAction(\n '[Inspections] setNewlyAddedInspectionId',\n props<{ inspection: RestInspectionsModel | RestDynamicInspectionModel; inspectionType: InspectionScheduleType }>()\n);\nexport const clearNewlyAddedInspectionId = createAction('[Inspections] clearNewlyAddedInspectionId');\n\nexport const loadDynamicInspections = createAction(\n '[Inspections] loadDynamicInspections',\n props<{ portfolioId: number }>()\n);\nexport const loadDynamicInspectionsSuccess = createAction(\n '[Inspections] loadDynamicInspectionsSuccess',\n props<{ listItems: RestDynamicInspectionModel[] }>()\n);\nexport const loadDynamicInspectionsFailed = createAction('[Inspections] loadDynamicInspectionsFailed');\nexport const clearDynamicInspections = createAction('[Inspections] clearDynamicInspections');\n\nexport const deleteDynamicInspection = createAction(\n '[Inspections] deleteDynamicInspection',\n props<{ inspectionId: number; dynamicallyScheduledOn: DynamicSchedule; portfolioId: number; stepName: string }>()\n);\nexport const deleteDynamicInspectionSuccess = createAction('[Inspections] deleteDynamicInspectionSuccess');\nexport const deleteDynamicInspectionFailed = createAction('[Inspections] deleteDynamicInspectionFailed');\n\nexport const setRepeatingInspectionsFilter = createAction(\n '[Inspections] set repeating inspections filter',\n props>()\n);\n\nexport const loadRepeatingInspections = createAction(\n '[Inspections] loadRepeatingInspections',\n props<{ portfolioId: number }>()\n);\nexport const loadRepeatingInspectionsSuccess = createAction(\n '[Inspections] loadRepeatingInspectionsSuccess',\n props<{ listItems: RestInspectionsModel[] }>()\n);\nexport const loadRepeatingInspectionsFailed = createAction('[Inspections] loadRepeatingInspectionsFailed');\nexport const clearRepeatingInspections = createAction('[Inspections] clearRepeatingInspections');\n\nexport const setInspectionsFilter = createAction(\n '[Inspections] setInspectionsFilter',\n props>()\n);\n\nexport const addInspectionTicket = createAction(\n '[Inspections] addInspectionTicket',\n props<{ ticket: RestAddInspectionTicket }>()\n);\nexport const addInspectionTicketSuccess = createAction('[Inspections] addInspectionTicketSuccess');\nexport const addInspectionTicketFailed = createAction('[Inspections] addInspectionTicketFailed');\n\nexport const updateInspectionTicket = createAction(\n '[Inspections] updateInspectionTicket',\n props<{ ticket: RestUpdateInspectionTicket }>()\n);\nexport const updateInspectionTicketSuccess = createAction('[Inspections] updateInspectionTicketSuccess');\nexport const updateInspectionTicketFailed = createAction('[Inspections] updateInspectionTicketFailed');\n\n// Inspection Summary Report\nexport const loadInspectionSummaryReport = createAction(\n '[Inspections] loadInspectionSummaryReport',\n props<{ filter: InspectionSummaryFilters }>()\n);\n\nexport const loadInspectionSummaryReportSucceeded = createAction(\n '[Inspections] Load all inspection summary report succeeded',\n props<{ payload: InspectionSummaryStatsResponse; filter: InspectionSummaryFilters }>()\n);\n\nexport const loadInspectionSummaryReportFailed = createAction('[Inspections] loadInspectionSummaryReport failed');\n\nexport const setSummaryReportAppliedFilter = createAction(\n '[Inspections] set Applied Filters',\n props<{ appliedFilters: InspectionSummaryAppliedFilters }>()\n);\n\nexport const setInReviewInspectionsFilter = createAction(\n '[Inspections] set in review inspections filter',\n props>()\n);\n\nexport const loadInReviewInspections = createAction(\n '[Inspections] Load in review inspections',\n props<{\n portfolioId: number;\n isResident?: boolean;\n returnStandardAndResidentBoth?: boolean;\n includeArchived?: boolean;\n }>()\n);\n\nexport const loadInReviewInspectionsSuccess = createAction(\n '[Inspections] Load in review inspections success',\n props<{ inReviewListItems: RestInspectionsModel[] }>()\n);\nexport const loadInReviewInspectionsFailed = createAction('[Inspections] Load in review inspections error');\nexport const clearInReviewInspections = createAction('[Inspections] clear in review inspections');\n","import { createReducer, on } from '@ngrx/store';\n\nimport { InspectionsListConstants } from '@main-application/inspections/components/inspections-list/constants';\nimport {\n InspectionSummaryAppliedFilters,\n InspectionSummaryStatsResponse,\n} from '@main-application/inspections/models/inspection-summary.model';\nimport getInspectionsSummaryFiltersKey from '@main-application/inspections/utils/inspection-mappers';\nimport {\n IInspectionFilterForm,\n InReviewInspectionFilterForm,\n RepeatingInspectionFilterForm,\n} from '@template/interfaces/filter.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport {\n clearAllInspections,\n clearDynamicInspections,\n clearInspectionsData,\n clearNewlyAddedInspectionId,\n clearRepeatingInspections,\n loadAllInspections,\n loadAllInspectionsFailed,\n loadAllInspectionsSuccess,\n loadDynamicInspections,\n loadDynamicInspectionsFailed,\n loadDynamicInspectionsSuccess,\n loadInReviewInspections,\n loadInReviewInspectionsSuccess,\n loadInspectionSummaryReport,\n loadInspectionSummaryReportFailed,\n loadInspectionSummaryReportSucceeded,\n loadRepeatingInspections,\n loadRepeatingInspectionsFailed,\n loadRepeatingInspectionsSuccess,\n loadResidentInspections,\n loadResidentInspectionsFailed,\n loadResidentInspectionsSuccess,\n loadTemplatesForUnitFailed,\n loadTemplatesForUnitSuccess,\n setInReviewInspectionsFilter,\n setInspectionsFilter,\n setRepeatingInspectionsFilter,\n setSummaryReportAppliedFilter,\n} from './inspections.actions';\nimport { RestDynamicInspectionModel, RestInspectionsModel } from '../models/rest-inspections-model.interface';\n\nimport TimeFrame = InspectionsListConstants.TimeFrame;\n\nexport const inspectionsFeatureKey = 'inspections';\n\nexport interface IInspectionsStateTree {\n readonly [inspectionsFeatureKey]: InspectionState;\n}\nexport interface InspectionState {\n inspectionFilter: Partial;\n inReviewInspectionFilter: Partial;\n repeatingInspectionFilter: Partial;\n isLoaded: boolean;\n listItemsLoading?: boolean;\n inReviewListItemsLoading?: boolean;\n residentListItemsLoading?: boolean;\n dynamicListItemsLoading?: boolean;\n repeatingListItemsLoading?: boolean;\n listItems?: RestInspectionsModel[];\n inReviewListItems?: RestInspectionsModel[];\n residentListItems?: RestInspectionsModel[];\n dynamicListItems?: RestDynamicInspectionModel[];\n repeatingListItems?: RestInspectionsModel[];\n templatesForUnit?: RestTemplateModel[];\n entityUpdateOngoing?: boolean;\n deleteEntityOngoing?: boolean;\n summaryStats: { [filterKey: string]: InspectionSummaryStatsResponse };\n summaryStatsAppliedFilters: InspectionSummaryAppliedFilters;\n summaryReportDataLoading?: boolean;\n}\n\nexport const initialState: InspectionState = {\n inspectionFilter: {\n timeframe: TimeFrame.ThisMonth,\n status: null,\n unitOrAssignee: null,\n templateIds: null,\n assigneeId: null,\n },\n inReviewInspectionFilter: {\n unitOrAssignee: null,\n templateIds: null,\n assigneeId: null,\n parentInspectionId: null,\n dynamicInspectionId: null,\n },\n repeatingInspectionFilter: {\n unitOrAssignee: null,\n templateIds: null,\n assigneeId: null,\n recurrencePeriod: null,\n },\n isLoaded: false,\n listItems: [],\n inReviewListItems: [],\n listItemsLoading: false,\n residentListItemsLoading: false,\n inReviewListItemsLoading: false,\n dynamicListItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n summaryStats: {},\n summaryStatsAppliedFilters: null,\n summaryReportDataLoading: true,\n};\n\nexport const reducer = createReducer(\n initialState,\n /* Templates List */\n on(loadAllInspections, (state, action) => ({ ...state, listItemsLoading: true })),\n on(loadAllInspectionsSuccess, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: action.listItems,\n deleteEntityOngoing: false,\n })),\n on(loadAllInspectionsFailed, (state, action) => ({\n ...state,\n listItemsLoading: false,\n listItems: [],\n deleteEntityOngoing: false,\n })),\n on(clearAllInspections, state => ({\n ...state,\n listItems: [],\n })),\n on(loadResidentInspections, (state, action) => ({ ...state, residentListItemsLoading: true })),\n on(loadResidentInspectionsSuccess, (state, action) => ({\n ...state,\n residentListItemsLoading: false,\n residentListItems: action.listItems,\n })),\n on(loadResidentInspectionsFailed, state => ({\n ...state,\n residentListItemsLoading: false,\n })),\n on(loadDynamicInspections, (state, action) => ({ ...state, dynamicListItemsLoading: true })),\n on(loadDynamicInspectionsSuccess, (state, action) => ({\n ...state,\n dynamicListItemsLoading: false,\n dynamicListItems: action.listItems,\n })),\n on(loadDynamicInspectionsFailed, state => ({\n ...state,\n dynamicListItemsLoading: false,\n })),\n on(clearDynamicInspections, state => ({\n ...state,\n dynamicListItems: null,\n })),\n on(loadRepeatingInspections, (state, action) => ({ ...state, repeatingListItemsLoading: true })),\n on(loadRepeatingInspectionsSuccess, (state, action) => ({\n ...state,\n repeatingListItemsLoading: false,\n repeatingListItems: action.listItems,\n })),\n on(loadRepeatingInspectionsFailed, state => ({\n ...state,\n repeatingListItemsLoading: false,\n })),\n on(clearRepeatingInspections, state => ({\n ...state,\n repeatingListItems: null,\n })),\n on(clearInspectionsData, (state, action) => ({\n ...state,\n listItemsLoading: false,\n entityUpdateOngoing: false,\n deleteEntityOngoing: false,\n })),\n on(loadTemplatesForUnitSuccess, (state, action) => ({\n ...state,\n templatesForUnit: action.list,\n })),\n on(loadTemplatesForUnitFailed, (state, action) => ({\n ...state,\n templatesForUnit: [],\n })),\n on(clearNewlyAddedInspectionId, (state, action) => ({\n ...state,\n newlyAddedItemId: null,\n })),\n on(setInspectionsFilter, (state, action) => ({\n ...state,\n inspectionFilter: action,\n })),\n on(setInReviewInspectionsFilter, (state, action) => ({\n ...state,\n inReviewInspectionFilter: action,\n })),\n on(loadInspectionSummaryReport, (state, action) => ({\n ...state,\n summaryReportDataLoading: true,\n listItemsLoading: true,\n })),\n on(loadInspectionSummaryReportSucceeded, (state, action) => ({\n ...state,\n summaryReportDataLoading: false,\n listItemsLoading: false,\n summaryStats: {\n ...state.summaryStats,\n [getInspectionsSummaryFiltersKey(action.filter)]: action.payload,\n },\n })),\n on(setSummaryReportAppliedFilter, (state, action) => ({\n ...state,\n summaryStatsAppliedFilters: action.appliedFilters,\n })),\n on(setRepeatingInspectionsFilter, (state, action) => ({\n ...state,\n repeatingInspectionFilter: action,\n })),\n on(loadInspectionSummaryReportFailed, state => ({\n ...state,\n repeatingListItemsLoading: false,\n error: true,\n })),\n on(loadInReviewInspections, (state, action) => ({ ...state, listItemsLoading: true })),\n on(loadInReviewInspectionsSuccess, (state, action) => ({\n ...state,\n inReviewListItemsLoading: false,\n inReviewListItems: action.inReviewListItems,\n })),\n on(loadAllInspectionsFailed, (state, action) => ({\n ...state,\n inReviewListItemsLoading: false,\n inReviewListItems: [],\n })),\n on(clearAllInspections, state => ({\n ...state,\n inReviewListItems: [],\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromInspections from './inspections.reducer';\n\nexport const selectInspectionState = createFeatureSelector(\n fromInspections.inspectionsFeatureKey\n);\n\nexport const selectInspections = createSelector(selectInspectionState, inspectionState => inspectionState.listItems);\n\nexport const selectInspectionsLoading = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.listItemsLoading\n);\n\nexport const selectResidentInspections = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.residentListItems\n);\n\nexport const selectResidentInspectionsLoading = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.residentListItemsLoading\n);\n\nexport const selectDynamicInspections = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.dynamicListItems\n);\nexport const selectDynamicInspectionsLoading = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.dynamicListItemsLoading\n);\n\nexport const selectRepeatingInspections = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.repeatingListItems\n);\nexport const selectRepeatingInspectionsLoading = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.repeatingListItemsLoading\n);\n\nexport const selectInspectionFilter = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.inspectionFilter\n);\n\nexport const selectInspectionsSummaryReport = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.summaryStats\n);\n\nexport const selectInspectionsSummaryReportLoading = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.summaryReportDataLoading\n);\n\nexport const selectInspectionsSummaryReportAppliedFilter = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.summaryStatsAppliedFilters\n);\n\nexport const selectInReviewInspections = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.inReviewListItems\n);\n\nexport const selectInReviewInspectionsLoading = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.inReviewListItemsLoading\n);\n\nexport const selectInReviewInspectionFilter = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.inReviewInspectionFilter\n);\n\nexport const selectRepeatingInspectionFilter = createSelector(\n selectInspectionState,\n inspectionState => inspectionState.repeatingInspectionFilter\n);\n","import { compact } from 'lodash';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { DynamicPropertyType, DynamicSchedule, RestDynamicInspectionModel } from './rest-inspections-model.interface';\n\nexport class DynamicInspectionModel {\n readonly id: number;\n readonly inspectionType: string;\n readonly propertyId: number;\n readonly propertyName: string;\n readonly portfolioName: string;\n readonly portfolioId: number;\n readonly due: string;\n readonly notify: string;\n readonly step: string;\n readonly workflowStep: WorkflowStepEnumType;\n readonly notifyWhenDone: RestUserModel[];\n readonly assigneeUser: RestUserModel;\n constructor(\n public readonly entityDetails: RestDynamicInspectionModel,\n public readonly inspectionTemplate: RestTemplateModel,\n properties: RestPropertyModel[],\n private readonly workflowSteps: EnumerationItem[],\n readonly users: RestUserModel[],\n readonly portfolios?: RestPortfolioModel[],\n readonly assigneeUserName?: string,\n readonly assigneeUserTooltip?: string\n ) {\n this.id = entityDetails.id;\n this.inspectionType = inspectionTemplate?.name;\n this.workflowStep =\n entityDetails.dynamicallyScheduledOn === DynamicSchedule.MoveIn\n ? WorkflowStepEnumType.MoveIn\n : entityDetails.dynamicallyScheduledOn === DynamicSchedule.MoveOut\n ? WorkflowStepEnumType.MoveOut\n : entityDetails.dynamicallyScheduledOn === DynamicSchedule.MakeReady\n ? WorkflowStepEnumType.MakeReady\n : WorkflowStepEnumType.Notice;\n this.step = workflowSteps.find(s => s.enumerationValue === this.workflowStep).displayText;\n\n if (this.entityDetails.propertyType === DynamicPropertyType.Property) {\n this.propertyId = entityDetails.propertyId;\n this.portfolioId = entityDetails.portfolioId;\n this.propertyName = properties.find(p => p.id === entityDetails.propertyId)?.name;\n }\n if (this.entityDetails.propertyType === DynamicPropertyType.Portfolio) {\n //TODO: check if it has properties\n this.propertyId = -1;\n this.portfolioId = entityDetails.propertyOrPortfolioId;\n }\n this.due = this.buildDueString(entityDetails.dueDate, this.workflowStep);\n this.notify = this.buildDueString(entityDetails.createOrNotifyOn, this.workflowStep);\n\n const notifyWhenDoneIds = entityDetails.notifyWhenDoneUserIds?.split(',') || [];\n this.notifyWhenDone = compact(notifyWhenDoneIds.map(id => users.find(u => u.id === Number(id))));\n this.assigneeUser = users.find(el => el.id === entityDetails?.actualAssigneeId);\n this.portfolioName = portfolios?.find(p => p?.id === this.portfolioId)?.name ?? '';\n }\n\n private buildDueString(days: number, step: WorkflowStepEnumType) {\n let stepName = this.step;\n if (step === WorkflowStepEnumType.Notice) {\n const s = this.workflowSteps.find(s => s.enumerationValue === WorkflowStepEnumType.MoveOut);\n stepName = s.displayText;\n }\n\n if (days < 0) {\n return `${Math.abs(days)}d before ${stepName.toUpperCase()}`;\n }\n if (days > 0) {\n return `${Math.abs(days)}d after ${stepName.toUpperCase()}`;\n }\n if (days === 0) {\n return `on ${stepName.toUpperCase()}`;\n }\n }\n}\n","import { compact } from 'lodash';\n\nimport { InspectionModel } from '@main-application/inspections/models/inspection.model';\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { RestInspectionsModel } from './rest-inspections-model.interface';\n\nexport class InspectionListItemModel extends InspectionModel {\n readonly notifyWhenDone: RestUserModel[];\n\n constructor(\n entityDetails: RestInspectionsModel,\n inspectionTemplate: RestTemplateModel,\n properties: RestPropertyModel[],\n users: Map\n ) {\n super(entityDetails, inspectionTemplate, [], users);\n if (this.propertyId && !this.propertyName) {\n this.propertyName = properties.find(x => x.id === this.propertyId)?.name;\n }\n\n const notifyWhenDoneIds = entityDetails.notifyWhenDoneUserIds?.split(',') || [];\n this.notifyWhenDone = compact(notifyWhenDoneIds.map(id => users.get(Number(id))));\n }\n}\n","import * as moment from 'moment/moment';\n\nimport { InspectionSummaryFilters } from '@main-application/inspections/models/inspection-summary.model';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { DynamicInspectionModel } from '../models/dynamic-inspection.model';\nimport { InspectionListItemModel } from '../models/inspection-list.model';\nimport { RestDynamicInspectionModel, RestInspectionsModel } from '../models/rest-inspections-model.interface';\n\nexport function mapInspectionsDataSource(\n inspectionList: RestInspectionsModel[],\n templateList: RestTemplateModel[],\n properties: RestPropertyModel[],\n selectedPropertyIds: number[],\n users: RestUserModel[]\n): InspectionListItemModel[] {\n const usersMap = new Map(users.map(user => [user.id, user]));\n\n return inspectionList\n .filter((inspection: RestInspectionsModel) => {\n if (!inspection.unitId && inspection.propertyId) {\n return !selectedPropertyIds || selectedPropertyIds.includes(inspection.propertyId);\n }\n return inspection.unitId && (!selectedPropertyIds || selectedPropertyIds.includes(inspection.unit.property.id));\n })\n .map(\n inspection =>\n new InspectionListItemModel(\n inspection,\n templateList.find(template => template.id == inspection.inspectionTemplateId),\n properties,\n usersMap\n )\n );\n}\n\nexport function mapDynamicInspectionsDataSource(\n templates: RestDynamicInspectionModel[],\n templateList: RestTemplateModel[],\n properties: RestPropertyModel[],\n workflowSteps: EnumerationItem[],\n users: RestUserModel[],\n portfolios?: RestPortfolioModel[],\n assigneeUserName?: string,\n assigneeUserTooltip?: string\n): DynamicInspectionModel[] {\n return templates.map(\n inspection =>\n new DynamicInspectionModel(\n inspection,\n templateList.find(template => template.id == inspection.inspectionTemplateId),\n properties,\n workflowSteps,\n users,\n portfolios,\n assigneeUserName,\n assigneeUserTooltip\n )\n );\n}\n\nexport default function getInspectionsSummaryFiltersKey(filter: InspectionSummaryFilters): string {\n return JSON.stringify(\n {\n ...filter,\n endDate: moment(filter.endDate).format('YYYY-MM-DD'),\n startDate: moment(filter.startDate).format('YYYY-MM-DD'),\n } || {}\n );\n}\n\nexport const compareValues = (\n a: number | string | Date | boolean | undefined | null,\n b: number | string | Date | boolean | undefined | null,\n isAsc: boolean\n) => {\n let valueA = a;\n let valueB = b;\n\n const isEmptyPair = (a, b) => (a === null || a === undefined) && (b === null || b === undefined);\n\n if (isEmptyPair(valueA, valueB)) return 0;\n if (valueA === undefined || valueA === null) return -1 * (isAsc ? 1 : -1);\n if (valueB === undefined || valueB === null) return 1 * (isAsc ? 1 : -1);\n\n if (typeof a === 'boolean') {\n valueA = a ? 1 : 0;\n valueB = b ? 1 : 0;\n }\n if (a instanceof Date && b instanceof Date) {\n valueA = a.getTime();\n valueB = b.getTime();\n }\n if (typeof a === 'string') {\n valueA = a.toLocaleLowerCase();\n }\n if (typeof b === 'string') {\n valueB = b.toLocaleLowerCase();\n }\n if (valueA === valueB) return 0;\n return (valueA < valueB ? -1 : 1) * (isAsc ? 1 : -1);\n};\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\nimport { PostCompanyAddressModel, RestCompanyModel, UpdateEmployeeItem } from '@shared/interfaces/companies.interface';\nimport { RestContractorModel } from '@shared/interfaces/contractors.interface';\nimport { InviteRestUserModel } from '@shared/interfaces/user.interface';\n\n/**\n * get companies list\n */\nexport const getCompaniesList = createAction('[Companies] get companies list');\nexport const getCompaniesListSuccess = createAction(\n '[Companies] get companies list success',\n props<{ companyList: RestCompanyModel[] }>()\n);\nexport const getCompaniesListFailed = createAction('[Companies] get companies list failed');\n\n/**\n * add company\n */\nexport const addCompany = createAction('[Companies] add company', props<{ companyModel: RestCompanyModel }>());\nexport const addCompanySuccess = createAction(\n '[Companies] add company success',\n props<{ companyModel: RestCompanyModel }>()\n);\nexport const addCompanyFailed = createAction('[Companies] add company failed');\n\nexport const addCompanyWithOwner = createAction(\n '[Companies] add company with owner',\n props<{ companyModel: RestCompanyModel; roleId: number; user: InviteRestUserModel; selectedProperty: number[] }>()\n);\nexport const addCompanyWithOwnerSuccess = createAction(\n '[Companies] add company with assignee success',\n props<{ company: RestCompanyModel }>()\n);\nexport const addCompanyWithOwnerFailure = createAction('[Companies] add company with owner failure');\nexport const addCompanyWithOwnerFailureUserExist = createAction(\n '[Companies] add company with owner failure user exist',\n props<{ existedUserEmail: string; phoneNumberAddedAsIdentity?: boolean; phoneNumber: string }>()\n);\n\n/**\n * get company\n */\nexport const getCompany = createAction(\n '[Companies] get company',\n props<{ companyId: number; skipLoading?: boolean }>()\n);\nexport const getCompanySuccess = createAction(\n '[Companies] get company success',\n props<{ companyModel: RestCompanyModel }>()\n);\nexport const getCompanyFailed = createAction('[Companies] get company failed');\nexport const clearCompany = createAction('[Companies] clear company');\n\n/**\n * update company\n */\nexport const updateCompany = createAction('[Companies] update company', props<{ companyModel: RestCompanyModel }>());\nexport const updateCompanySuccess = createAction(\n '[Companies] update company success',\n props<{ companyModel: RestCompanyModel }>()\n);\nexport const updateCompanyFailed = createAction('[Companies] update company failed');\n\n/**\n * delete company\n */\nexport const deleteCompany = createAction('[Companies] delete company', props<{ company: RestCompanyModel }>());\nexport const deleteCompanySuccess = createAction('[Companies] delete company success');\nexport const deleteCompanyFailed = createAction('[Companies] delete company failed');\n\n/**\n * add employee to company\n */\nexport const addEmployeeToCompany = createAction(\n '[Companies] add employee to company',\n props<{ updateEmployeeItem: UpdateEmployeeItem }>()\n);\nexport const addEmployeeToCompanySuccess = createAction('[Companies] add employee to company success');\nexport const addEmployeeToCompanyFailed = createAction('[Companies] add employee to company failed');\n\n/**\n * delete employee from company\n */\nexport const deleteEmployeeFromCompany = createAction(\n '[Companies] delete employee from company',\n props<{ updateEmployeeItem: UpdateEmployeeItem }>()\n);\nexport const deleteEmployeeFromCompanySuccess = createAction('[Companies] delete employee from company success');\nexport const deleteEmployeeFromCompanyFailed = createAction('[Companies] delete employee from company failed');\n\n/**\n * get contractor list\n */\nexport const getContractorList = createAction('[Companies] get contractor listy');\nexport const getContractorListSuccess = createAction(\n '[Companies] get contractor list success',\n props<{ contractors: RestContractorModel[] }>()\n);\nexport const getContractorListFailed = createAction('[Companies] get contractor list failed');\n\n/**\n * add address to company\n */\nexport const addAddressToCompany = createAction(\n '[Companies] add address to company',\n props<{ postCompanyAddressModel: PostCompanyAddressModel }>()\n);\nexport const addAddressToCompanySuccess = createAction('[Companies] add address to company success');\nexport const addAddressToCompanyFailed = createAction('[Companies] add address to company failed');\n\n/**\n * update address in company\n */\nexport const updateAddressInCompany = createAction(\n '[Companies] update address in company',\n props<{ restAddressModel: RestAddressModel; companyId: number }>()\n);\nexport const updateAddressInCompanySuccess = createAction('[Companies] update address in company success');\nexport const updateAddressInCompanyFailed = createAction('[Companies] update address in company failed');\n","import { createReducer, on } from '@ngrx/store';\n\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { RestContractorModel } from '@shared/interfaces/contractors.interface';\n\nimport {\n addAddressToCompany,\n addAddressToCompanyFailed,\n addAddressToCompanySuccess,\n addCompany,\n addCompanyFailed,\n addCompanySuccess,\n addCompanyWithOwner,\n addCompanyWithOwnerFailure,\n addCompanyWithOwnerSuccess,\n addEmployeeToCompany,\n addEmployeeToCompanyFailed,\n addEmployeeToCompanySuccess,\n clearCompany,\n deleteCompany,\n deleteCompanyFailed,\n deleteCompanySuccess,\n deleteEmployeeFromCompany,\n deleteEmployeeFromCompanyFailed,\n deleteEmployeeFromCompanySuccess,\n getCompaniesList,\n getCompaniesListFailed,\n getCompaniesListSuccess,\n getCompany,\n getCompanyFailed,\n getCompanySuccess,\n getContractorList,\n getContractorListFailed,\n getContractorListSuccess,\n updateAddressInCompany,\n updateAddressInCompanyFailed,\n updateAddressInCompanySuccess,\n updateCompany,\n updateCompanyFailed,\n updateCompanySuccess,\n} from './companies.actions';\n\nexport const companiesFeatureKey = 'companies';\n\nexport interface State {\n companyList: RestCompanyModel[];\n companyListLoading: boolean;\n companyAddLoading: boolean;\n companyModel: RestCompanyModel;\n companyModelLoading: boolean;\n addEmployeeToCompanyLoading: boolean;\n deleteEmployeeFromCompanyLoading: boolean;\n contractors: RestContractorModel[];\n contractorsLoading: boolean;\n companyUpdateLoading: boolean;\n companyDeleteLoading: boolean;\n addAddressToCompany: boolean;\n updateAddressInProgress: boolean;\n addCompanyWithOwnerInProgress: boolean;\n}\n\nexport const initialState: State = {\n companyList: [],\n companyListLoading: false,\n companyAddLoading: false,\n companyModel: null,\n companyModelLoading: false,\n addEmployeeToCompanyLoading: false,\n deleteEmployeeFromCompanyLoading: false,\n contractors: [],\n contractorsLoading: false,\n companyUpdateLoading: false,\n companyDeleteLoading: false,\n addAddressToCompany: false,\n updateAddressInProgress: false,\n addCompanyWithOwnerInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * get companies list\n */\n on(getCompaniesList, (state, action) => ({\n ...state,\n companyListLoading: true,\n })),\n on(getCompaniesListSuccess, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: action.companyList,\n })),\n on(getCompaniesListFailed, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: [],\n })),\n\n /**\n * add company\n */\n on(addCompany, (state, action) => ({\n ...state,\n companyAddLoading: true,\n })),\n on(addCompanySuccess, (state, action) => ({\n ...state,\n companyAddLoading: false,\n })),\n on(addCompanyFailed, (state, action) => ({\n ...state,\n companyAddLoading: false,\n })),\n\n /**\n * update company\n */\n on(updateCompany, (state, action) => ({\n ...state,\n companyUpdateLoading: true,\n })),\n on(updateCompanySuccess, (state, action) => ({\n ...state,\n companyUpdateLoading: false,\n companyModel: action.companyModel,\n })),\n on(updateCompanyFailed, (state, action) => ({\n ...state,\n companyUpdateLoading: false,\n })),\n\n /**\n * delete company\n */\n on(deleteCompany, (state, action) => ({\n ...state,\n companyDeleteLoading: true,\n })),\n on(deleteCompanySuccess, (state, action) => ({\n ...state,\n companyDeleteLoading: false,\n })),\n on(deleteCompanyFailed, (state, action) => ({\n ...state,\n companyDeleteLoading: false,\n })),\n\n /**\n * get company\n */\n on(getCompany, (state, action) => ({\n ...state,\n companyModelLoading: !action.skipLoading,\n })),\n on(getCompanySuccess, (state, action) => ({\n ...state,\n companyModelLoading: false,\n companyModel: action.companyModel,\n })),\n on(getCompanyFailed, (state, action) => ({\n ...state,\n companyModelLoading: false,\n companyModel: null,\n })),\n on(clearCompany, (state, action) => ({\n ...state,\n companyModel: null,\n })),\n\n /**\n * add employee to company\n */\n on(addEmployeeToCompany, (state, action) => ({\n ...state,\n addEmployeeToCompanyLoading: true,\n })),\n on(addEmployeeToCompanySuccess, (state, action) => ({\n ...state,\n addEmployeeToCompanyLoading: false,\n })),\n on(addEmployeeToCompanyFailed, (state, action) => ({\n ...state,\n addEmployeeToCompanyLoading: false,\n })),\n\n /**\n * delete employee from company\n */\n on(deleteEmployeeFromCompany, (state, action) => ({\n ...state,\n deleteEmployeeFromCompanyLoading: true,\n })),\n on(deleteEmployeeFromCompanySuccess, (state, action) => ({\n ...state,\n deleteEmployeeFromCompanyLoading: false,\n })),\n on(deleteEmployeeFromCompanyFailed, (state, action) => ({\n ...state,\n deleteEmployeeFromCompanyLoading: false,\n })),\n\n /**\n * add employee to company\n */\n on(getContractorList, (state, action) => ({\n ...state,\n contractorsLoading: true,\n })),\n on(getContractorListSuccess, (state, action) => ({\n ...state,\n contractorsLoading: false,\n contractors: action.contractors,\n })),\n on(getContractorListFailed, (state, action) => ({\n ...state,\n contractorsLoading: false,\n contractors: [],\n })),\n\n /**\n * add address to company\n */\n on(addAddressToCompany, (state, action) => ({\n ...state,\n addAddressToCompany: true,\n })),\n on(addAddressToCompanySuccess, (state, action) => ({\n ...state,\n addAddressToCompany: false,\n })),\n on(addAddressToCompanyFailed, (state, action) => ({\n ...state,\n addAddressToCompany: false,\n })),\n /**\n * update address in company\n */\n on(updateAddressInCompany, (state, action) => ({\n ...state,\n updateAddressInProgress: true,\n })),\n on(updateAddressInCompanySuccess, (state, action) => ({\n ...state,\n updateAddressInProgress: false,\n })),\n on(updateAddressInCompanyFailed, (state, action) => ({\n ...state,\n updateAddressInProgress: false,\n })),\n\n on(addCompanyWithOwner, (state, action) => ({\n ...state,\n addCompanyWithOwnerInProgress: true,\n })),\n on(addCompanyWithOwnerSuccess, addCompanyWithOwnerFailure, (state, action) => ({\n ...state,\n addCompanyWithOwnerInProgress: false,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromCompanies from './companies.reducer';\n\nexport const selectCompaniesState = createFeatureSelector(fromCompanies.companiesFeatureKey);\n\n/**\n * company List\n */\nexport const selectCompanyList = createSelector(selectCompaniesState, companiesState => companiesState.companyList);\nexport const selectCompanyListLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.companyListLoading\n);\n\n/**\n * get company\n */\nexport const selectCompany = createSelector(selectCompaniesState, companiesState => companiesState.companyModel);\nexport const selectCompanyLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.companyModelLoading\n);\nexport const selectUpdateAddressInProgress = createSelector(\n selectCompaniesState,\n companiesState => companiesState.updateAddressInProgress\n);\n\n/**\n * update company\n */\nexport const selectCompanyUpdateLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.companyUpdateLoading\n);\n\nexport const selectContractors = createSelector(selectCompaniesState, companiesState => companiesState.contractors);\n\n/**\n * get addCompanyWithOwner\n */\nexport const selectAddCompanyWithOwnerLoading = createSelector(\n selectCompaniesState,\n companiesState => companiesState.addCompanyWithOwnerInProgress\n);\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport {\n AddPropertiesToCollectionReqI,\n AddUsersToCollectionReqI,\n CreatePropertyCollectionReqI,\n ReplacePropertyManagers,\n RestPortfolioModel,\n RestPropertyCollectionModel,\n RestPropertyManagerAccessModel,\n RestPropertyModel,\n UpdatePropertyManagerModel,\n} from '@shared/interfaces/rest-portfolio-model.interface';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\n\n/* Portfolios List */\nexport const loadAllUserPortfolios = createAction('[Portfolio] Load all portfolio');\nexport const loadAllUserPortfoliosSuccess = createAction(\n '[Portfolio] All portfolio loaded successfully',\n props<{ portfolioItems: RestPortfolioModel[] }>()\n);\nexport const loadAllUserPortfoliosFailed = createAction('[Portfolio] All portfolio loading failed');\n\nexport const loadAllUserCollections = createAction('[Portfolio] loadAllUserCollections');\nexport const loadAllUserCollectionsSuccess = createAction(\n '[Portfolio] loadAllUserCollections success',\n props<{ collectionItems: RestPropertyCollectionModel[] }>()\n);\nexport const loadAllUserCollectionsFailed = createAction('[Portfolio] loadAllUserCollections failed');\n\n/* Portfolio Details */\nexport const loadPortfolioDetails = createAction(\n '[Portfolio] Load portfolio details',\n props<{ portfolioId: string }>()\n);\nexport const loadPortfolioDetailsSuccess = createAction(\n '[Portfolio] portfolio details loaded successfully',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\nexport const loadPortfolioDetailsFailed = createAction('[Portfolio] portfolio details loading failed');\n\n/* Property Details */\nexport const loadPropertyDetails = createAction('[Portfolio] Load property details', props<{ propertyId: number }>());\nexport const loadPropertyDetailsSuccess = createAction(\n '[Portfolio] property details loaded successfully',\n props<{ propertyDetails: any }>()\n);\nexport const loadPropertyDetailsFailed = createAction('[Portfolio] property details loading failed');\n\n/* Update Property Details */\nexport const updatePortfolioName = createAction(\n '[Portfolio] Update property name',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\nexport const updatePortfolioAutoAdd = createAction(\n '[Portfolio] Update property auto add',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\n\nexport const updatePortfolioDetails = createAction(\n '[Portfolio] updatePortfolioDetails',\n props<{ portfolioDetails: RestPortfolioModel; doNotRefetchPortfolios?: boolean }>()\n);\nexport const updatePortfolioDetailsSuccess = createAction(\n '[Portfolio] Update property details finished successfully',\n props<{ portfolioDetails: RestPortfolioModel }>()\n);\nexport const updatePortfolioDetailsFailed = createAction('[Portfolio] Update property details failed');\n\n/* Add new property to portfolio */\nexport const addPropertyToPortfolio = createAction(\n '[Portfolio] Add new property to portfolio',\n props<{ portfolioId: string; propertyIds: number[] }>()\n);\n/* Remove property from portfolio */\nexport const removePropertyFromPortfolio = createAction(\n '[Portfolio] Remove property from portfolio',\n props<{ portfolioId: any; propertyId: string }>()\n);\n\n/* Add new portfolio */\nexport const createNewPortfolio = createAction('[Portfolio] Add new portfolio', props<{ portfolioDetails: any }>());\n/* Delete portfolio */\nexport const deletePortfolio = createAction(\n '[Portfolio] Remove portfolio',\n props<{ portfolioName: string; portfolioId: any }>()\n);\nexport const clearPortfolioData = createAction('[Portfolio] Clear portfolio data');\n\n/* Load Property Managers */\nexport const loadPropertyManagers = createAction('[Portfolio] Load property managers');\nexport const loadPropertyManagersSucceeded = createAction(\n '[Portfolio] Load property managers succeeded',\n props<{ propertyManagers: RestPropertyManagerAccessModel[] }>()\n);\nexport const loadPropertyManagersFailed = createAction('[Portfolio] Load property managers failed');\n\n/* Update property */\nexport const updateProperty = createAction('[Portfolio] Update property data', props<{ propertyDetails: any }>());\nexport const updatePropertyFailed = createAction('[Portfolio] Update property data failed');\n\n/* Load unassigned properties */\nexport const loadAllUserUnassignedProperties = createAction('[Portfolio] Load unassigned properties');\nexport const loadAllUserUnassignedPropertiesSucceeded = createAction(\n '[Portfolio] Load unassigned properties succeeded',\n props<{ unassignedProperties: RestPropertyModel[] }>()\n);\nexport const loadAllUserUnassignedPropertiesFailed = createAction('[Portfolio] Load unassigned properties failed');\n\n/* load Property Managers For Property */\nexport const loadPropertyManagersForProperty = createAction(\n '[Portfolio] load Property Managers For Property',\n props<{ propertyId: number }>()\n);\nexport const loadPropertyManagersForPropertySuccess = createAction(\n '[Portfolio] load Property Managers For Property success',\n props<{ propertyManagers: RestPropertyManagerAccessModel[] }>()\n);\nexport const loadPropertyManagersForPropertyFailed = createAction(\n '[Portfolio] load Property Managers For Property failed'\n);\n\n/**\n * remove property managers\n */\nexport const removePropertyManagers = createAction(\n '[Portfolio] remove property managers',\n props<{ propertyManagerModels: UpdatePropertyManagerModel[] }>()\n);\nexport const removePropertyManagersSuccess = createAction('[Portfolio] remove property managers success');\nexport const removePropertyManagersFailed = createAction('[Portfolio] remove property managers failed');\n\n/**\n * remove property managers\n */\nexport const setPropertyManagers = createAction(\n '[Portfolio] set property manager',\n props<{ propertyManagerModels: UpdatePropertyManagerModel[] }>()\n);\nexport const setPropertyManagersSuccess = createAction('[Portfolio] set property managers success');\nexport const setPropertyManagersFailed = createAction('[Portfolio] set property managers failed');\n\n/**\n * change property managers\n */\nexport const changePropertyManagers = createAction(\n '[Portfolio] change property manager',\n props<{ replacePropertyManagers: ReplacePropertyManagers }>()\n);\nexport const changePropertyManagersSuccess = createAction('[Portfolio] change property managers success');\nexport const changePropertyManagersFailed = createAction('[Portfolio] change property managers failed');\n\n/**\n * get Property Units\n */\nexport const getPropertyUnits = createAction('[Portfolio] get Property Units', props<{ propertyId: number }>());\nexport const getPropertyUnitsSuccess = createAction(\n '[Portfolio] get Property Units success',\n props<{ propertyUnits: RestUnitSummaryModel[] }>()\n);\nexport const getPropertyUnitsFailed = createAction('[Portfolio] get Property Units failed');\n\n/**\n * get unit attachments\n */\nexport const getUnitAttachments = createAction('[Portfolio] get unit attachments', props<{ unitId: number }>());\nexport const getUnitAttachmentsSuccess = createAction(\n '[Portfolio] get unit attachments success',\n props<{ unitAttachments: RestGenericTypedAttachment[] }>()\n);\nexport const getUnitAttachmentsFail = createAction('[Portfolio] get unit attachments failed');\n\n/**\n * set unit attachment\n */\nexport const setUnitAttachment = createAction(\n '[Portfolio] set unit attachment',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const setUnitAttachmentSuccess = createAction('[Portfolio] set unit attachment success');\nexport const setUnitAttachmentFail = createAction('[Portfolio] set unit attachment failed');\n\n/**\n * delete unit attachment\n */\nexport const deleteUnitAttachment = createAction(\n '[Portfolio] delete unit attachment',\n props<{ unitId: number; attachment: RestGenericTypedAttachment }>()\n);\nexport const deleteUnitAttachmentSuccess = createAction('[Portfolio] delete unit attachment success');\nexport const deleteUnitAttachmentFailed = createAction('[Portfolio] delete unit attachment error');\n\n/**\n * delete file from repository\n */\nexport const deleteFileFromRepository = createAction(\n '[Portfolio] delete file from repository',\n props<{ fileId: number }>()\n);\nexport const deleteFileFromRepositorySuccess = createAction('[Portfolio] delete file from repository success');\nexport const deleteFileFromRepositoryFailed = createAction('[Portfolio] delete file from repository failed');\n\n// property collections\n\nexport const loadPropertyCollections = createAction('[Portfolio] Load property collections');\n\nexport const loadPropertyCollectionsSuccess = createAction(\n '[Portfolio] Load property collections success',\n props<{ items: RestPropertyCollectionModel[] }>()\n);\nexport const loadPropertyCollectionsFailed = createAction('[Portfolio] Load property collections error');\n\nexport const addPropertyCollection = createAction(\n '[Portfolio] Add property collections',\n props<{ data: CreatePropertyCollectionReqI }>()\n);\n\nexport const addPropertyCollectionSuccess = createAction(\n '[Portfolio] Add property collections success',\n props<{ collection: RestPropertyCollectionModel }>()\n);\n\nexport const addPropertyCollectionError = createAction('[Portfolio] Add property collections error');\n\nexport const deletePropertyCollection = createAction(\n '[Portfolio] Delete property collection',\n props<{ id: number; collectionName: string }>()\n);\n\nexport const deletePropertyCollectionSuccess = createAction(\n '[Portfolio] Delete property collection success',\n props<{ id: number }>()\n);\n\nexport const deletePropertyCollectionError = createAction('[Portfolio] Delete property collection error');\n\nexport const savePropertyCollection = createAction(\n '[Portfolio] Save property collection',\n props<{ name: string; id: number }>()\n);\nexport const savePropertyCollectionSuccess = createAction(\n '[Portfolio] Save property collection success',\n props<{ collection: RestPropertyCollectionModel }>()\n);\n\nexport const savePropertyCollectionError = createAction('[Portfolio] Save property collection error');\n\nexport const addPropertiesToCollection = createAction(\n '[Portfolio] Add properties to collection',\n props<{ data: AddPropertiesToCollectionReqI & { collectionId: number } }>()\n);\n\nexport const addPropertiesToCollectionSuccess = createAction(\n '[Portfolio] Add properties to collection success',\n props<{ collection: RestPropertyCollectionModel }>()\n);\n\nexport const addPropertiesToCollectionError = createAction('[Portfolio] Add properties to collection error');\n\nexport const removePropertiesFromCollection = createAction(\n '[Portfolio] Remove properties from collection',\n props<{ data: AddPropertiesToCollectionReqI & { collectionId: number } }>()\n);\n\nexport const removePropertiesFromCollectionSuccess = createAction(\n '[Portfolio] Remove properties from collection success',\n props<{ collection: RestPropertyCollectionModel }>()\n);\n\nexport const removePropertiesFromCollectionError = createAction('[Portfolio] Remove properties from collection error');\n\nexport const addUsersToCollection = createAction(\n '[Portfolio] Add users to collection',\n props<{ data: AddUsersToCollectionReqI & { collectionId: number } }>()\n);\n\nexport const addUsersToCollectionSuccess = createAction(\n '[Portfolio] Add users to collection success',\n props<{ collection: RestPropertyCollectionModel }>()\n);\n\nexport const removeUsersFromCollection = createAction(\n '[Portfolio] Remove users from collection',\n props<{ data: AddUsersToCollectionReqI & { collectionId: number } }>()\n);\n\nexport const removeUsersFromCollectionSuccess = createAction(\n '[Portfolio] Remove users from collection success',\n props<{ collection: RestPropertyCollectionModel }>()\n);\n\nexport const removeUsersFromCollectionError = createAction('[Portfolio] Remove users from collection error');\n\nexport const addUsersToCollectionError = createAction('[Portfolio] Add users to collection error');\n\n/**\n * clear Property Data\n */\nexport const clearPropertyData = createAction('[Portfolio] clear property data');\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n loadAllUserProperties,\n loadAllUserPropertiesFailed,\n loadAllUserPropertiesSucceeded,\n} from '@main-application/store/actions/user.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport {\n RestPortfolioModel,\n RestPropertyCollectionModel,\n RestPropertyManagerAccessModel,\n RestPropertyModel,\n} from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\n\nimport {\n addPropertiesToCollectionSuccess,\n addPropertyCollectionSuccess,\n addPropertyToPortfolio,\n addUsersToCollectionSuccess,\n clearPortfolioData,\n clearPropertyData,\n createNewPortfolio,\n deletePortfolio,\n deletePropertyCollection,\n deletePropertyCollectionError,\n deletePropertyCollectionSuccess,\n deleteUnitAttachment,\n deleteUnitAttachmentFailed,\n deleteUnitAttachmentSuccess,\n getPropertyUnits,\n getPropertyUnitsFailed,\n getPropertyUnitsSuccess,\n getUnitAttachments,\n getUnitAttachmentsFail,\n getUnitAttachmentsSuccess,\n loadAllUserCollections,\n loadAllUserCollectionsFailed,\n loadAllUserCollectionsSuccess,\n loadAllUserPortfolios,\n loadAllUserPortfoliosFailed,\n loadAllUserPortfoliosSuccess,\n loadAllUserUnassignedProperties,\n loadAllUserUnassignedPropertiesSucceeded,\n loadPortfolioDetails,\n loadPortfolioDetailsFailed,\n loadPortfolioDetailsSuccess,\n loadPropertyCollections,\n loadPropertyCollectionsSuccess,\n loadPropertyDetails,\n loadPropertyDetailsFailed,\n loadPropertyDetailsSuccess,\n loadPropertyManagers,\n loadPropertyManagersFailed,\n loadPropertyManagersForProperty,\n loadPropertyManagersForPropertyFailed,\n loadPropertyManagersForPropertySuccess,\n loadPropertyManagersSucceeded,\n removePropertiesFromCollectionSuccess,\n removePropertyFromPortfolio,\n removeUsersFromCollectionSuccess,\n savePropertyCollectionSuccess,\n setUnitAttachment,\n setUnitAttachmentFail,\n setUnitAttachmentSuccess,\n updatePortfolioName,\n updateProperty,\n updatePropertyFailed,\n} from './portfolio.actions';\n\nexport const portfolioFeatureKey = 'portfolio';\n\nexport interface PortfolioState {\n portfolioItemsLoading?: boolean;\n portfolioItems?: RestPortfolioModel[];\n\n collectionItemsLoading?: boolean;\n collectionItems?: RestPropertyCollectionModel[];\n\n portfolioDetailsLoading?: boolean;\n portfolioDetails?: RestPortfolioModel;\n\n propertyDetailsLoading?: boolean;\n propertyDetails?: RestPropertyModel;\n\n userProperties?: RestPropertyModel[];\n userPropertiesLoading?: boolean;\n\n propertyCollectionsLoading?: boolean;\n propertyCollections?: RestPropertyCollectionModel[];\n propertyCollectionDeleteInProgress?: boolean;\n\n portfolioUpdateOngoing?: boolean;\n portfolioNewPropertyUpdateOngoing?: boolean;\n portfolioRemovePropertyUpdateOngoing?: boolean;\n\n propertyDetailsUpdateOngoing?: boolean;\n\n deletePortfolioOngoing?: boolean;\n\n unassignedProperties?: RestPropertyModel[];\n unassignedPropertiesLoading?: boolean;\n\n allPropertyManagers?: RestPropertyManagerAccessModel[];\n allPropertyManagersLoading?: boolean;\n\n propertyManagersForProperty?: RestPropertyManagerAccessModel[];\n propertyManagersForPropertyLoading?: boolean;\n\n propertyUnits?: RestUnitSummaryModel[];\n propertyUnitsLoading?: boolean;\n setUnitAttachmentInProgress?: boolean;\n\n unitAttachments?: RestGenericTypedAttachment[];\n unitAttachmentsLoading?: boolean;\n\n deleteUnitAttachmentInProgress?: boolean;\n deleteUnitAttachmentStatus?: UpdateStatus;\n}\n\nexport const initialState: PortfolioState = {\n portfolioItemsLoading: false,\n propertyManagersForPropertyLoading: false,\n allPropertyManagersLoading: false,\n unitAttachmentsLoading: false,\n deleteUnitAttachmentInProgress: false,\n deleteUnitAttachmentStatus: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /* Portfolios List */\n on(loadAllUserPortfolios, state => ({ ...state, portfolioItemsLoading: true })),\n on(loadAllUserPortfoliosSuccess, (state, action) => ({\n ...state,\n portfolioItemsLoading: false,\n portfolioItems: action.portfolioItems,\n deletePortfolioOngoing: false,\n })),\n on(loadAllUserPortfoliosFailed, state => ({\n ...state,\n portfolioItemsLoading: false,\n portfolioItems: [],\n deletePortfolioOngoing: false,\n })),\n\n /* Portfolio Details */\n on(loadPortfolioDetails, state => ({ ...state, portfolioDetailsLoading: true })),\n on(loadPortfolioDetailsSuccess, (state, action) => ({\n ...state,\n portfolioDetailsLoading: false,\n portfolioUpdateOngoing: false,\n portfolioNewPropertyUpdateOngoing: false,\n portfolioRemovePropertyUpdateOngoing: false,\n portfolioDetails: action.portfolioDetails,\n })),\n on(loadPortfolioDetailsFailed, state => ({\n ...state,\n portfolioDetailsLoading: false,\n portfolioDetails: null,\n })),\n\n /* Property Details */\n on(loadPropertyDetails, state => ({ ...state, propertyDetailsLoading: true })),\n on(loadPropertyDetailsSuccess, (state, action) => ({\n ...state,\n propertyDetailsLoading: false,\n propertyDetails: action.propertyDetails,\n propertyDetailsUpdateOngoing: false,\n })),\n on(loadPropertyDetailsFailed, state => ({\n ...state,\n propertyDetailsLoading: false,\n propertyDetails: null,\n })),\n\n /* All Properties */\n on(loadAllUserProperties, state => ({ ...state, userPropertiesLoading: true })),\n on(loadAllUserPropertiesSucceeded, (state, action) => ({\n ...state,\n userProperties: action.properties,\n userPropertiesLoading: false,\n })),\n on(loadAllUserPropertiesFailed, state => ({\n ...state,\n userProperties: [],\n userPropertiesLoading: false,\n })),\n\n on(updatePortfolioName, createNewPortfolio, state => ({ ...state, portfolioUpdateOngoing: true })),\n on(addPropertyToPortfolio, state => ({ ...state, portfolioNewPropertyUpdateOngoing: true })),\n on(removePropertyFromPortfolio, state => ({ ...state, portfolioRemovePropertyUpdateOngoing: true })),\n on(clearPortfolioData, state => ({\n ...state,\n portfolioDetailsLoading: false,\n portfolioUpdateOngoing: false,\n portfolioNewPropertyUpdateOngoing: false,\n portfolioRemovePropertyUpdateOngoing: false,\n portfolioDetails: null,\n })),\n\n on(updateProperty, state => ({ ...state, propertyDetailsUpdateOngoing: true })),\n on(updatePropertyFailed, state => ({ ...state, propertyDetailsUpdateOngoing: false })),\n on(deletePortfolio, state => ({ ...state, deletePortfolioOngoing: true })),\n\n on(loadAllUserUnassignedProperties, state => ({ ...state, unassignedPropertiesLoading: true })),\n on(loadAllUserUnassignedPropertiesSucceeded, (state, action) => ({\n ...state,\n unassignedProperties: action.unassignedProperties,\n unassignedPropertiesLoading: false,\n })),\n on(deletePortfolio, state => ({\n ...state,\n unassignedPropertiesLoading: false,\n unassignedProperties: [],\n })),\n\n on(loadPropertyManagers, state => ({ ...state, allPropertyManagersLoading: true })),\n on(loadPropertyManagersSucceeded, (state, action) => ({\n ...state,\n allPropertyManagers: action.propertyManagers,\n allPropertyManagersLoading: false,\n })),\n on(loadPropertyManagersFailed, state => ({\n ...state,\n allPropertyManagers: [],\n allPropertyManagersLoading: false,\n })),\n\n on(loadPropertyManagersForProperty, state => ({ ...state, propertyManagersForPropertyLoading: true })),\n on(loadPropertyManagersForPropertySuccess, (state, action) => ({\n ...state,\n propertyManagersForProperty: action.propertyManagers,\n propertyManagersForPropertyLoading: false,\n })),\n on(loadPropertyManagersForPropertyFailed, state => ({\n ...state,\n propertyManagersForProperty: [],\n propertyManagersForPropertyLoading: false,\n })),\n /**\n * get unit attachments\n */\n on(getUnitAttachments, state => ({ ...state, unitAttachmentsLoading: true })),\n on(getUnitAttachmentsSuccess, (state, action) => ({\n ...state,\n unitAttachments: action.unitAttachments,\n unitAttachmentsLoading: false,\n })),\n on(getUnitAttachmentsFail, state => ({\n ...state,\n unitAttachments: [],\n unitAttachmentsLoading: false,\n })),\n\n /**\n * get Property Units\n */\n on(getPropertyUnits, state => ({ ...state, propertyUnitsLoading: true })),\n on(getPropertyUnitsSuccess, (state, action) => ({\n ...state,\n propertyUnits: action.propertyUnits,\n propertyUnitsLoading: false,\n })),\n on(getPropertyUnitsFailed, state => ({\n ...state,\n propertyUnits: [],\n propertyUnitsLoading: false,\n })),\n\n /**\n * set unit attachment\n */\n on(setUnitAttachment, state => ({ ...state, setUnitAttachmentInProgress: true })),\n on(setUnitAttachmentSuccess, state => ({\n ...state,\n setUnitAttachmentInProgress: false,\n })),\n on(setUnitAttachmentFail, state => ({\n ...state,\n setUnitAttachmentInProgress: false,\n })),\n\n /**\n * delete unit attachment\n */\n on(deleteUnitAttachment, state => ({ ...state, deleteUnitAttachmentInProgress: true })),\n on(deleteUnitAttachmentSuccess, state => ({\n ...state,\n deleteUnitAttachmentInProgress: false,\n deleteUnitAttachmentStatus: UpdateStatus.DELETED,\n })),\n on(deleteUnitAttachmentFailed, state => ({\n ...state,\n deleteUnitAttachmentInProgress: false,\n deleteUnitAttachmentStatus: UpdateStatus.ERROR,\n })),\n // property collections\n on(loadPropertyCollections, state => ({ ...state, propertyCollectionsLoading: true })),\n on(loadPropertyCollectionsSuccess, (state, action) => ({\n ...state,\n propertyCollections: action.items,\n propertyCollectionsLoading: false,\n })),\n on(loadAllUserPropertiesFailed, state => ({\n ...state,\n propertyCollections: [],\n propertyCollectionsLoading: false,\n })),\n on(\n addPropertyCollectionSuccess,\n (state: PortfolioState, { collection }): PortfolioState => ({\n ...state,\n propertyCollections: [...state.propertyCollections, collection],\n propertyCollectionsLoading: false,\n })\n ),\n on(\n savePropertyCollectionSuccess,\n (state: PortfolioState, { collection }): PortfolioState => ({\n ...state,\n propertyCollections: state.propertyCollections.map(existingCollection =>\n existingCollection.id === collection.id ? collection : existingCollection\n ),\n })\n ),\n on(deletePropertyCollection, state => ({ ...state, propertyCollectionDeleteInProgress: true })),\n on(deletePropertyCollectionSuccess, (state, { id }) => ({\n ...state,\n propertyCollectionDeleteInProgress: false,\n propertyCollections: state.propertyCollections.filter(el => el.id !== id),\n })),\n on(deletePropertyCollectionError, state => ({\n ...state,\n propertyCollectionDeleteInProgress: false,\n })),\n on(\n addPropertiesToCollectionSuccess,\n removePropertiesFromCollectionSuccess,\n addUsersToCollectionSuccess,\n removeUsersFromCollectionSuccess,\n (state: PortfolioState, { collection }): PortfolioState => ({\n ...state,\n propertyCollections: state.propertyCollections.map(existingCollection =>\n existingCollection.id === collection.id ? collection : existingCollection\n ),\n })\n ),\n /**\n * get Property Units\n */\n on(clearPropertyData, state => ({\n ...state,\n propertyDetails: null,\n propertyDetailsLoading: false,\n propertyManagersForProperty: [],\n propertyManagersForPropertyLoading: false,\n propertyUnits: [],\n propertyUnitsLoading: false,\n propertyCollections: [],\n propertyCollectionsLoading: false,\n })),\n on(loadAllUserCollections, state => ({\n ...state,\n collectionItemsLoading: true,\n })),\n on(loadAllUserCollectionsSuccess, (state, action) => ({\n ...state,\n collectionItems: action.collectionItems,\n collectionItemsLoading: false,\n })),\n on(loadAllUserCollectionsFailed, (state, action) => ({\n ...state,\n collectionItemsLoading: false,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromPortfolio from './portfolio.reducer';\n\nexport const selectPortfolioState = createFeatureSelector(\n fromPortfolio.portfolioFeatureKey\n);\n\nexport const selectPortfolios = createSelector(selectPortfolioState, portfolioState => portfolioState.portfolioItems);\n\nexport const selectPortfoliosLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioItemsLoading\n);\n\nexport const selectPortfolioDetails = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioDetails\n);\nexport const selectPortfolioDetailsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioDetailsLoading\n);\n\nexport const selectPropertyDetails = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyDetails\n);\nexport const selectPropertyDetailsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyDetailsLoading\n);\nexport const selectPropertyDetailsUpdateOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyDetailsUpdateOngoing\n);\n\nexport const selectProperties = createSelector(selectPortfolioState, portfolioState => portfolioState.userProperties);\n\nexport const portfolioSelectAllPropertyIds = createSelector(selectPortfolioState, portfolioState =>\n portfolioState?.userProperties ? portfolioState?.userProperties.map(el => el.id) : []\n);\n\nexport const selectPropertiesByPortfolioId = (portfolioId: number) =>\n createSelector(selectPortfolioState, portfolioState =>\n (portfolioState?.userProperties || []).filter(property => property.portfolioId === portfolioId)\n );\n\nexport const selectPropertiesLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.userPropertiesLoading\n);\n\nexport const selectPortfolioUpdate = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioUpdateOngoing\n);\n\nexport const selectPortfolioNewPropertyUpdateOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioNewPropertyUpdateOngoing\n);\nexport const selectPortfolioRemovePropertyUpdateOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.portfolioRemovePropertyUpdateOngoing\n);\n\nexport const selectPortfolioDeleteOngoing = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.deletePortfolioOngoing\n);\n\nexport const selectUnassignedProperties = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unassignedProperties\n);\n\nexport const selectUnassignedPropertiesLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unassignedPropertiesLoading\n);\n\nexport const selectPropertyManagersForProperty = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyManagersForProperty\n);\n\nexport const selectPropertyUnits = createSelector(selectPortfolioState, portfolioState => portfolioState.propertyUnits);\n\nexport const selectPropertyUnitsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyUnitsLoading\n);\n\nexport const selectUnitAttachments = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.unitAttachments\n);\n\nexport const selectDeleteUnitAttachmentInProgress = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.deleteUnitAttachmentInProgress\n);\n\nexport const selectPropertyCollections = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyCollections\n);\n\nexport const selectPropertyCollectionsLoading = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyCollectionsLoading\n);\n\nexport const selectPropertyCollectionsDeleteInProgress = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.propertyCollectionDeleteInProgress\n);\n\nexport const selectCollectionById = (id: number) =>\n createSelector(selectPortfolioState, portfolioState =>\n (portfolioState?.propertyCollections || []).find(collection => collection.id === id)\n );\n\nexport const selectUserCollections = createSelector(\n selectPortfolioState,\n portfolioState => portfolioState.collectionItems\n);\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, first, map, mergeMap, tap } from 'rxjs';\n\nimport { RestapiServiceWithoutTimezone } from '@app/services/restapi.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nimport { RestTimezone } from './model/timezone';\nimport { TimezoneHelper } from '../timezone.helper';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimezoneService extends PuSubscribable {\n private wasInitilized = false;\n private readonly currentTimezone = new ReplaySubject(1);\n public readonly currentTimezone$ = this.currentTimezone.asObservable().pipe(first());\n private currentTimezoneValue: RestTimezone;\n\n constructor(private service: RestapiServiceWithoutTimezone) {\n super();\n }\n\n getList(): Observable {\n return this.service.getData('system/getTimezones');\n }\n\n set(value: RestTimezone) {\n this.wasInitilized = true;\n this.currentTimezoneValue = value;\n this.currentTimezone.next(value);\n return this.service.post('system/setTimezone?timeZoneId=' + value.id);\n }\n\n get() {\n this.wasInitilized = true;\n return this.service.getData('system/getSelectedTimezone').pipe(\n tap(value => {\n this.currentTimezoneValue = value;\n this.currentTimezone.next(value);\n // const uiTimezone = moment.tz.zone(value.uiName);\n // console.log(moment.tz(moment.utc(new Date()), value.uiName).toDate());\n })\n );\n }\n\n getCurrentDateOnly(): Date {\n return new Date(this.getCurrentDate().toDateString());\n }\n\n getCurrentDate(): Date {\n return TimezoneHelper.replaceTimezoneToClient(new Date(), this.currentTimezoneValue);\n }\n\n addTimezoneForEntity(f: (entity: T, timezone: RestTimezone) => T) {\n if (!this.wasInitilized) {\n this.get().subscribe().untilDestroyed(this);\n }\n return mergeMap((data: T) => this.currentTimezone$.pipe(map(timezone => f(data, timezone))));\n }\n}\n","import { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\n\nimport { TimezoneHelper } from './timezone.helper';\n\nexport type TimezoneConversionFunction = (data: T, timezone: RestTimezone) => T;\n\nexport class TimezoneEntityHelperCommon {\n /**\n * Change timezone for date feilds of data before sending to server\n *\n * @param data - object\n * @param timezone - local timezone of Client app\n * @param vanilaDates - array of fields that should contain vanila date without time part\n * @param nestedObjects - array of fields that contain complicated objects that should use custom function for field correction\n */\n public static readonly fixTimezoneForModelToServer = (\n data: T,\n timezone: RestTimezone,\n vanilaDates: (keyof T)[] = [],\n nestedObjects: { field: keyof T; f: TimezoneConversionFunction }[] = []\n ) => {\n if (!data || (typeof data !== 'object' && !Array.isArray(data))) {\n return data;\n }\n const dataWithoutTimezone = Array.isArray(data) ? ([...data] as T) : { ...data };\n for (const field in dataWithoutTimezone) {\n if (nestedObjects.some(e => e.field == field)) {\n dataWithoutTimezone[field] = nestedObjects\n .find(e => e.field == field)\n .f(dataWithoutTimezone[field], timezone) as any;\n } else if (vanilaDates.includes(field)) {\n dataWithoutTimezone[field] = TimezoneHelper.removeTimeZone(dataWithoutTimezone[field] as Date) as any;\n } else if (\n dataWithoutTimezone[field] instanceof Date ||\n this.isStringLikeServerDate(dataWithoutTimezone[field])\n ) {\n dataWithoutTimezone[field] = TimezoneHelper.replaceTimezoneToServer(\n dataWithoutTimezone[field] as Date,\n timezone\n ) as any;\n } else if (typeof dataWithoutTimezone[field] === 'object') {\n dataWithoutTimezone[field] = this.fixTimezoneForModelToServer(dataWithoutTimezone[field], timezone, [], []);\n }\n }\n return dataWithoutTimezone;\n };\n\n /**\n * Change timezone for date feilds of data that was just received from server\n *\n * @param data - object\n * @param timezone - local timezone of Client app\n * @param vanilaDates - array of fields that should contain vanilla date without time part\n * @param nestedObjects - array of fields that contain complicated objects that should use custom function for field correction\n */\n public static readonly fixTimezoneForModelToClient = (\n data: T,\n timezone: RestTimezone,\n vanilaDates: (keyof T)[] = [],\n nestedObjects: { field: keyof T; f: TimezoneConversionFunction }[] = []\n ) => {\n if (!data) return data;\n for (const field in data) {\n if (nestedObjects.some(e => e.field == field)) {\n data[field] = nestedObjects.find(e => e.field == field).f(data[field], timezone) as any;\n } else if (vanilaDates.includes(field)) {\n data[field] = TimezoneHelper.addTimeZoneAndKeepOnlyDatePart(data[field] as Date) as any;\n } else if (data[field] instanceof Date || this.isStringLikeServerDate(data[field])) {\n data[field] = TimezoneHelper.replaceTimezoneToClient(data[field] as Date, timezone) as any;\n } else if (typeof data[field] === 'object') {\n this.fixTimezoneForModelToClient(data[field], timezone, [], []);\n }\n }\n return data;\n };\n\n private static isStringLikeServerDate(dateString: any) {\n return (\n typeof dateString === 'string' &&\n /^[0-9]{4}-[01][0-9]-[0-3][0-9]T[0-5][0-9]:[0-5][0-9]:[0-5][0-9](\\.[0-9][0-9]?)?Z$/.test(dateString)\n //Valid examples of server date string:\n //2023-07-06T00:00:00Z\n //2023-07-06T09:37:48.2Z\n //2023-07-06T09:37:21.85Z\n );\n }\n}\n","import { RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport {\n InspectionSummaryDownloadReport,\n InspectionSummaryFilters,\n} from '@main-application/inspections/models/inspection-summary.model';\nimport {\n RestDynamicInspectionModel,\n RestInspectionsModel,\n} from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { RestArchivedTurnover, RestTicketModel, RestTurnoverDataModel } from '@shared/interfaces/turnover.interface';\n\nimport { TimezoneEntityHelperCommon } from './timezone-entity-common.helper';\nimport { TimezoneHelper } from './timezone.helper';\n\nexport class TimezoneEntityHelper extends TimezoneEntityHelperCommon {\n public static readonly fixTimezoneForTenantDataToClient = (data: TenantData, timezone: RestTimezone) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['servicePackageTrialExpiresOn']);\n };\n\n public static readonly fixTimezoneForRestInspectionsModelToClient = (\n data: RestInspectionsModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['dueDate', 'autoExpiredOn']);\n };\n\n public static readonly fixTimezoneForRestDynamicInspectionsModelToClient = (\n data: RestDynamicInspectionModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['endDate']);\n };\n\n public static readonly fixTimezoneForRestInspectionsModelToServer = (\n data: RestInspectionsModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, ['dueDate', 'autoExpiredOn']);\n };\n\n public static readonly fixTimezoneForSummaryStatsToServer = (\n data: InspectionSummaryFilters,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, ['startDate', 'endDate']);\n };\n\n public static readonly fixTimezoneForSummaryReportDownloadToServer = (\n data: InspectionSummaryDownloadReport,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, ['startDate', 'endDate']);\n };\n\n public static readonly fixTimezoneForExtendExpirationModelToServer = (\n data: { newDate: Date },\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, ['newDate']);\n };\n\n public static readonly fixTimezoneForExtendExpirationModelToClient = (\n data: RestInspectionsModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['autoExpiredOn']);\n };\n\n public static readonly fixTimezoneForTurnStepScheduleModelToClient = (\n data: RestTurnStepScheduleModel,\n timezone: RestTimezone\n ) => {\n const result = super.fixTimezoneForModelToClient(\n data,\n timezone,\n ['dueDate', 'originalDueDate', 'turnoverDateAvailable'],\n [\n {\n field: 'dateCompleted',\n f: dt => {\n return TimezoneHelper.replaceTimezoneToClient(dt, timezone);\n },\n },\n ]\n );\n return result;\n };\n public static readonly fixTimezoneForTurnStepScheduleModelToServer = (\n data: RestTurnStepScheduleModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(\n data,\n timezone,\n ['dueDate', 'originalDueDate', 'turnoverDateAvailable'],\n [{ field: 'dateCompleted', f: dt => (dt ? new Date(dt).toISOString() : null) }]\n );\n };\n public static readonly fixTimezoneForArchivedTurnoverDataModelToClient = (\n //Has no idea what this function for, maybe should be deleted?\n data: RestArchivedTurnover,\n timezone: RestTimezone\n ) => {\n return this.fixTimezoneForArchivedTurnoverDataModel(\n data,\n timezone,\n TimezoneHelper.addTimeZoneAndKeepOnlyDatePart,\n TimezoneHelper.replaceTimezoneToClient,\n this.fixTimezoneForModelToClient\n );\n };\n public static readonly fixTimezoneForTurnoverDataModelToClient = (\n data: RestTurnoverDataModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToClient(\n data,\n timezone,\n [\n 'dateMoveIn',\n 'dateMoveOut',\n 'pmsMoveOutDate',\n 'pmsMoveInDate',\n 'lastRentDate',\n 'dateAvailable',\n 'leaseExecutionDate',\n ],\n [\n {\n field: 'turnStepSchedules',\n f: (list: RestTurnStepScheduleModel[], tz) => {\n list.forEach(e => this.fixTimezoneForTurnStepScheduleModelToClient(e, tz));\n return list;\n },\n },\n ]\n );\n };\n\n public static readonly fixTimezoneForInspectionDataModelToClient = (\n data: RestInspectionsModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['autoExpiredOn', 'dueDate']);\n };\n\n public static readonly fixTimezoneForTurnoverDataModelToServer = (\n data: RestTurnoverDataModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(\n data,\n timezone,\n ['dateMoveIn', 'dateMoveOut', 'pmsMoveOutDate', 'lastRentDate', 'dateAvailable', 'leaseExecutionDate'],\n [\n {\n field: 'turnStepSchedules',\n f: (list: RestTurnStepScheduleModel[], tz) => {\n list.forEach(e => this.fixTimezoneForTurnStepScheduleModelToServer(e, tz));\n return list;\n },\n },\n ]\n );\n };\n\n public static readonly fixTimezoneForArchivedTurnoverDataModel = (\n data: RestArchivedTurnover,\n timezone: RestTimezone,\n fVanila: (date: Date | string) => Date,\n fFullDate: (date: Date | string, timezone: RestTimezone) => Date,\n fModel: (data: T, timezone: RestTimezone) => T\n ) => {\n if (!data) return data;\n //Vanile Date\n data.turnoverStartDate = fFullDate(data.turnoverStartDate, timezone);\n data.turnoverEndDate = fFullDate(data.turnoverEndDate, timezone);\n return data;\n };\n\n public static readonly fixTimezoneForRestTicketDataModel = (data: RestTicketModel, timezone: RestTimezone) => {\n return super.fixTimezoneForModelToClient(data, timezone, ['endDate', 'dueDate']);\n };\n\n public static readonly fixTimezoneForRestTicketDataModelToServer = (\n data: RestTicketModel,\n timezone: RestTimezone\n ) => {\n return super.fixTimezoneForModelToServer(data, timezone, ['endDate', 'dueDate']);\n };\n}\n","import * as moment from 'moment';\nimport 'moment-timezone';\n\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\n\nexport class TimezoneHelper {\n /**\n * Remove timezone & time part before sending value to server\n */\n static removeTimeZone(date: Date | string): Date {\n if (!date) {\n return null;\n }\n const convertedDate = new Date(date);\n return new Date(+convertedDate - convertedDate.getTimezoneOffset() * 60 * 1000);\n }\n\n /**\n * Add timezone for data which came from server, also remove timepart if it was\n */\n static addTimeZoneAndKeepOnlyDatePart(date: Date | string): Date {\n if (!date) {\n return null;\n }\n const convertedDate = new Date(date);\n const correctedDate = new Date(+convertedDate + convertedDate.getTimezoneOffset() * 60 * 1000);\n return new Date(correctedDate.toDateString());\n }\n\n /**\n * Change timezone for data that was just received from server\n *\n * @param date - date\n * @param newTimezone - timezone\n * @param oldTimezone - timezone\n */\n static replaceTimezoneToClient(\n date: Date | string,\n newTimezone: RestTimezone = null,\n oldTimezone: RestTimezone = null\n ): Date {\n let newTimezoneOffset = 0,\n oldTimezoneOffset = -new Date(date).getTimezoneOffset();\n if (newTimezone) {\n newTimezoneOffset = TimezoneHelper.getUiTimezoneOffset(date, newTimezone);\n }\n if (oldTimezone) {\n oldTimezoneOffset = TimezoneHelper.getUiTimezoneOffset(date, oldTimezone);\n }\n return TimezoneHelper.replaceTimezone(date, newTimezoneOffset, oldTimezoneOffset);\n }\n\n /**\n * Change timezone for data before sending to server\n *\n * @param date - date\n * @param oldTimezone - timezone\n * @param newTimezone - timezone\n */\n static replaceTimezoneToServer(\n date: Date | string,\n oldTimezone: RestTimezone = null,\n newTimezone: RestTimezone = null\n ): Date {\n let oldTimezoneOffset = 0,\n newTimezoneOffset = -new Date(date).getTimezoneOffset();\n\n if (oldTimezone) {\n oldTimezoneOffset = TimezoneHelper.getUiTimezoneOffset(date, oldTimezone);\n }\n if (newTimezone) {\n newTimezoneOffset = TimezoneHelper.getUiTimezoneOffset(date, newTimezone);\n }\n return TimezoneHelper.replaceTimezone(date, newTimezoneOffset, oldTimezoneOffset);\n }\n\n /**\n * Change timezone for data for displaying\n *\n * @param date - date\n * @param newTimezone - timezone\n * @param oldTimezone - timezone\n */\n private static replaceTimezone(date: Date | string, newTimezone: number, oldTimezone: number): Date {\n if (!date) {\n return null;\n }\n // console.log(date, ' ', newTimezone, oldTimezone);\n const convertedDate = new Date(date);\n return new Date(+convertedDate + (newTimezone - oldTimezone) * 60 * 1000);\n }\n\n private static getUiTimezoneOffset(date: Date | string, timezone: RestTimezone): number {\n const m = moment.tz(date, timezone.uiName);\n return m.utcOffset();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport {\n RestPortfolioWorkflowStepAssignmentModel,\n RestWorkflowPortfolioStepAssignmentModel,\n RestWorkflowStepAssignmentModel,\n} from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnoverConfigurationStepAssigneesService {\n constructor(private restApiService: RestapiService) {}\n\n getDefaultAssigneesForPortfolio(portfolioId: number): Observable {\n return this.restApiService.getData(\n `PorfolioDefaultAssignments/${portfolioId}`\n );\n }\n\n updateDefaultAssigneesForPortfolio(\n portfolioId: number,\n items: RestWorkflowPortfolioStepAssignmentModel[]\n ): Observable {\n return this.restApiService.create(`PorfolioDefaultAssignments/${portfolioId}`, items);\n }\n\n deleteDefaultAssigneesForPortfolio(portfolioId: number, stepId: WorkflowStepEnumType): Observable {\n return this.restApiService.delete(`PorfolioDefaultAssignments/${portfolioId}/${stepId}`);\n }\n\n getResponsiblePartiesByPortfolioId(portfolioId: number): Observable {\n return this.restApiService.getData(\n `workflowassignments/portfolio/${portfolioId}`\n );\n }\n\n getResponsiblePartiesOverrideByPortfolioId(portfolioId: number): Observable {\n return this.restApiService.getData(\n `workflowassignments/portfolio/overrides/${portfolioId}`\n );\n }\n\n getResponsiblePartiesByPropertyId(propertyId: number): Observable {\n return this.restApiService.getData(`workflowassignments/property/${propertyId}`);\n }\n\n getWorkflowAssignmentsByStepId(\n propertyId: number,\n stepId: WorkflowStepEnumType\n ): Observable {\n return this.restApiService.getData(\n `workflowassignments/property/${propertyId}/${stepId}`\n );\n }\n\n createResponsibleParties(\n workflowList: RestWorkflowStepAssignmentModel[]\n ): Observable {\n return this.restApiService.create(`workflowassignments`, workflowList);\n }\n\n updateResponsibleParties(\n workflowList: RestWorkflowStepAssignmentModel[]\n ): Observable {\n return this.restApiService.update(`workflowassignments`, workflowList);\n }\n\n deleteResponsibleParties(\n propertyId: number,\n workflowStepType?: WorkflowStepEnumType\n ): Observable {\n let uri = `workflowassignments/property/${propertyId}`;\n if (workflowStepType) {\n uri += `?workflowStepType=${workflowStepType}`;\n }\n return this.restApiService.delete(uri);\n }\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\nimport { TurnoverConfigSection } from '@shared/interfaces/turnover-config.interface';\n\n/**\n * get turnover configuration list\n */\nexport const getTurnoverConfigurationList = createAction('[Management] get turnover configuration list');\nexport const getTurnoverConfigurationListSuccess = createAction(\n '[Management] get turnover configuration list success',\n props<{ turnoverConfig: TurnoverConfigSection[] }>()\n);\nexport const getTurnoverConfigurationListFailure = createAction('[Management] get turnover configuration list failure');\n\n/**\n * get turnover configuration by workflow type\n */\nexport const getTurnoverConfigurationByWorkflowStep = createAction(\n '[Management] get turnover configuration by workflow type',\n props<{ workflowStep: WorkflowStepEnumType }>()\n);\nexport const getTurnoverConfigurationByWorkflowStepSuccess = createAction(\n '[Management] get turnover configuration by workflow type success',\n props<{ turnoverConfig: TurnoverConfigSection }>()\n);\nexport const getTurnoverConfigurationByWorkflowStepFailure = createAction(\n '[Management] get turnover configuration by workflow type failure'\n);\n\n/**\n * update turnover field configuration\n */\nexport const updateTurnoverFieldConfiguration = createAction(\n '[Management] update turnover field configuration',\n props<{ turnoverConfig: TurnoverConfigSection }>()\n);\nexport const updateTurnoverFieldConfigurationSuccess = createAction(\n '[Management] update turnover field configuration success'\n);\nexport const updateTurnoverFieldConfigurationFailure = createAction(\n '[Management] update turnover field configuration failure'\n);\n\n/**\n * get elapsed days thresholds\n */\nexport const getElapsedDaysThresholds = createAction('[Management] get elapsed days thresholds');\nexport const getElapsedDaysThresholdsSuccess = createAction(\n '[Management] get elapsed days thresholds success',\n props<{ thresholdsConfiguration: RestThresholdsConfiguration }>()\n);\nexport const getElapsedDaysThresholdsFailure = createAction('[Management] get elapsed days thresholds failure');\n\n/**\n * update elapsed days thresholds\n */\nexport const updateElapsedDaysThresholds = createAction(\n '[Management] update elapsed days thresholds',\n props<{ thresholdsConfiguration: RestThresholdsConfiguration }>()\n);\nexport const updateElapsedDaysThresholdsSuccess = createAction('[Management] update elapsed days thresholds success');\nexport const updateElapsedDaysThresholdsFailure = createAction('[Management] update elapsed days thresholds failure');\n\nexport const loadFinish = createAction('[Management] load finish');\nexport const loadFinishSucceded = createAction('[Management] load finish succeeded', props<{ finishTypes: any }>());\nexport const loadFinishFailed = createAction('[Management] load finish failed');\n\nexport const addFinish = createAction('[Management] add finish', props<{ finish: string }>());\nexport const addFinishSuccess = createAction('[Management] add finish success');\nexport const addFinishFailure = createAction('[Management] add finish failure');\n\nexport const updateFinish = createAction('[Management] update finish', props<{ id: number; name: string }>());\nexport const updateFinishSuccess = createAction('[Management] update finish success');\nexport const updateFinishFailure = createAction('[Management] update finish failure');\n\nexport const deleteFinish = createAction('[Management] delete finish', props<{ id: number }>());\nexport const deleteFinishSuccess = createAction('[Management] delete finish success');\nexport const deleteFinishFailure = createAction('[Management] delete finish failure');\n","import { createReducer, on } from '@ngrx/store';\n\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\nimport { TurnoverConfigSection } from '@shared/interfaces/turnover-config.interface';\n\nimport { RestFinishType } from '../../components/turnover-custom-fields/turnover-custom-fields.component';\nimport {\n addFinish,\n addFinishFailure,\n addFinishSuccess,\n deleteFinish,\n deleteFinishFailure,\n deleteFinishSuccess,\n getElapsedDaysThresholds,\n getElapsedDaysThresholdsFailure,\n getElapsedDaysThresholdsSuccess,\n getTurnoverConfigurationByWorkflowStep,\n getTurnoverConfigurationByWorkflowStepFailure,\n getTurnoverConfigurationByWorkflowStepSuccess,\n getTurnoverConfigurationList,\n getTurnoverConfigurationListFailure,\n getTurnoverConfigurationListSuccess,\n loadFinishSucceded,\n updateElapsedDaysThresholds,\n updateFinish,\n updateFinishFailure,\n updateFinishSuccess,\n updateTurnoverFieldConfiguration,\n updateTurnoverFieldConfigurationFailure,\n updateTurnoverFieldConfigurationSuccess,\n} from '../actions/turnover-configuration.actions';\n\nexport const turnoverConfigurationFeatureKey = 'turnoverConfiguration';\n\nexport interface TurnoverConfigurationState {\n isLoading: boolean;\n turnoverConfig: TurnoverConfigSection[];\n turnoverConfigLoading: boolean;\n turnoverConfigUpdateInProgress: boolean;\n\n turnoverStepConfigLoading: boolean;\n turnoverStepConfig: TurnoverConfigSection;\n\n thresholdsConfiguration: RestThresholdsConfiguration;\n thresholdsConfigurationLoading: boolean;\n\n thresholdsConfigurationUpdate: UpdateStatus;\n thresholdsConfigurationUpdateInProgress: boolean;\n\n finishTypes: RestFinishType[];\n finishInProgress: boolean;\n}\n\nexport const initialState: TurnoverConfigurationState = {\n isLoading: false,\n turnoverConfig: [],\n turnoverConfigLoading: false,\n turnoverConfigUpdateInProgress: false,\n\n turnoverStepConfigLoading: false,\n turnoverStepConfig: null,\n\n thresholdsConfiguration: null,\n thresholdsConfigurationLoading: false,\n\n thresholdsConfigurationUpdate: null,\n thresholdsConfigurationUpdateInProgress: false,\n\n finishTypes: [],\n finishInProgress: false,\n};\n\nexport const reducer = createReducer(\n initialState,\n\n /**\n * get turnover configuration list\n */\n on(getTurnoverConfigurationList, (state, action) => ({ ...state, turnoverConfigLoading: true })),\n on(getTurnoverConfigurationListSuccess, (state, action) => ({\n ...state,\n turnoverConfigLoading: false,\n turnoverConfig: action.turnoverConfig,\n })),\n on(getTurnoverConfigurationListFailure, (state, action) => ({\n ...state,\n turnoverConfigLoading: false,\n turnoverConfig: [],\n })),\n\n /**\n *\n */\n on(getTurnoverConfigurationByWorkflowStep, (state, action) => ({ ...state, turnoverStepConfigLoading: true })),\n on(getTurnoverConfigurationByWorkflowStepSuccess, (state, action) => ({\n ...state,\n turnoverStepConfigLoading: false,\n turnoverStepConfig: action.turnoverConfig,\n })),\n on(getTurnoverConfigurationByWorkflowStepFailure, (state, action) => ({\n ...state,\n turnoverStepConfigLoading: false,\n turnoverStepConfig: null,\n })),\n\n /**\n * update turnover field configuration\n */\n on(updateTurnoverFieldConfiguration, (state, action) => ({ ...state, turnoverConfigUpdateInProgress: true })),\n on(updateTurnoverFieldConfigurationSuccess, (state, action) => ({\n ...state,\n turnoverConfigUpdateInProgress: false,\n })),\n on(updateTurnoverFieldConfigurationFailure, (state, action) => ({\n ...state,\n turnoverConfigUpdateInProgress: false,\n })),\n\n /**\n * get elapsed days thresholds\n */\n on(getElapsedDaysThresholds, (state, action) => ({\n ...state,\n thresholdsConfigurationLoading: true,\n })),\n on(getElapsedDaysThresholdsSuccess, (state, action) => ({\n ...state,\n thresholdsConfiguration: action.thresholdsConfiguration,\n thresholdsConfigurationLoading: false,\n })),\n on(getElapsedDaysThresholdsFailure, (state, action) => ({\n ...state,\n thresholdsConfiguration: null,\n thresholdsConfigurationLoading: false,\n })),\n\n /**\n * update elapsed days thresholds\n */\n on(updateElapsedDaysThresholds, (state, action) => ({\n ...state,\n thresholdsConfigurationUpdate: UpdateStatus.IN_PROGRESS,\n thresholdsConfigurationUpdateInProgress: true,\n })),\n on(getElapsedDaysThresholdsSuccess, (state, action) => ({\n ...state,\n thresholdsConfigurationUpdate: UpdateStatus.UPDATED,\n thresholdsConfigurationUpdateInProgress: false,\n })),\n on(getElapsedDaysThresholdsFailure, (state, action) => ({\n ...state,\n thresholdsConfigurationUpdate: UpdateStatus.ERROR,\n thresholdsConfigurationUpdateInProgress: false,\n })),\n\n on(loadFinishSucceded, (state, action) => ({\n ...state,\n finishTypes: action.finishTypes,\n })),\n on(addFinish, updateFinish, deleteFinish, (state, action) => ({\n ...state,\n finishInProgress: true,\n })),\n on(\n addFinishSuccess,\n addFinishFailure,\n updateFinishSuccess,\n updateFinishFailure,\n deleteFinishSuccess,\n deleteFinishFailure,\n (state, action) => ({\n ...state,\n finishInProgress: false,\n })\n )\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromTurnoverConfiguration from '../reducers';\n\nexport const selectTurnoverConfigurationState =\n createFeatureSelector(\n fromTurnoverConfiguration.turnoverConfigurationFeatureKey\n );\n\nexport const selectTurnoverConfigLoading = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverConfigLoading\n);\nexport const selectTurnoverConfigUpdateInProgress = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverConfigUpdateInProgress\n);\n\nexport const selectTurnoverStepConfigLoading = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverStepConfigLoading\n);\n\nexport const selectTurnoverStepConfig = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.turnoverStepConfig\n);\n\n/**\n * get elapsed days thresholds\n */\n\nexport const selectThresholdsConfigurationLoading = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.thresholdsConfigurationLoading\n);\n\nexport const selectThresholdsConfiguration = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.thresholdsConfiguration\n);\n\nexport const selectFinishes = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.finishTypes\n);\n\nexport const selectFinishInProgress = createSelector(\n selectTurnoverConfigurationState,\n turnoverConfigState => turnoverConfigState.finishInProgress\n);\n","import { Injectable } from '@angular/core';\n\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\n\nimport { BooleanQuestion, EmojiDetails, ResidentInspectionItem, SurveyPage } from '../pages/inspect/inspect.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ResidentInspectionsService {\n generateAnswer(items: ResidentInspectionItem[], itemUuid: string): string {\n const updatedSurvey = items[0]?.surveyJSON;\n\n if (!updatedSurvey) return;\n\n items.find((updatedItem: ResidentInspectionItem) => {\n const matchingPage = updatedSurvey.pages.find((page: SurveyPage) => page.uuid === updatedItem.uuid);\n if (matchingPage) {\n matchingPage.elements.find((element, elementIndex) => {\n switch (element.type) {\n case 'comment':\n matchingPage.elements[elementIndex].value = updatedItem.comment || '';\n if (updatedItem.uuid === itemUuid) {\n matchingPage.elements[elementIndex].value = updatedItem.comment || ' ';\n }\n break;\n case 'boolean':\n if (updatedItem.uuid === itemUuid) {\n const updatedBoolean = updatedItem.booleanQuestions?.find(\n (q: BooleanQuestion) => q.guid === element.guid\n );\n if (updatedBoolean && updatedBoolean.answer !== 'undefined') {\n matchingPage.elements[elementIndex].value = String(updatedBoolean.answer) || '';\n }\n }\n break;\n case 'propertystate':\n if (updatedItem.uuid === itemUuid) {\n if (element.items) {\n updatedItem.emojiDetails?.forEach((updatedEmoji: EmojiDetails) => {\n const matchingItem = element.items.find(\n (itemWrapper: ResidentInspectionItem) =>\n itemWrapper.item.emoji === updatedEmoji.emojiCode && updatedEmoji.isDefault\n );\n if (matchingItem && matchingItem.item.id) {\n matchingPage.elements[elementIndex].value = String(matchingItem.item.id);\n }\n });\n }\n }\n break;\n case 'file':\n if (Array.isArray(updatedItem.fileUploadIds)) {\n matchingPage.mainImage = updatedItem.fileUploadIds.map(id => ({ fileUploadId: id }));\n }\n break;\n }\n });\n }\n });\n\n return JSON.stringify(updatedSurvey, (key, value) => (Array.isArray(value) && value.length === 0 ? null : value));\n }\n\n generateDefaultAnswer(items: ResidentInspectionItem[]): string {\n const defaultSurvey = items[0]?.surveyJSON;\n\n if (!defaultSurvey) return;\n\n items.forEach((defaultItem: ResidentInspectionItem) => {\n const matchingPage = defaultSurvey.pages.find((page: SurveyPage) => page.uuid === defaultItem.uuid);\n if (matchingPage) {\n matchingPage.elements.forEach((element, elementIndex) => {\n switch (element.type) {\n case 'comment':\n if (defaultItem.comment !== undefined && defaultItem.comment !== '') {\n matchingPage.elements[elementIndex].value = defaultItem.comment;\n }\n break;\n case 'boolean':\n const updatedBoolean = defaultItem.booleanQuestions?.find(\n (q: BooleanQuestion) => q.guid === element.guid\n );\n if (\n updatedBoolean &&\n updatedBoolean.answer !== 'undefined' &&\n updatedBoolean.answer !== null &&\n updatedBoolean.answer !== ''\n ) {\n matchingPage.elements[elementIndex].value = String(updatedBoolean.answer);\n } else {\n if (\n updatedBoolean &&\n updatedBoolean.defaultAnswer !== 'undefined' &&\n updatedBoolean.defaultAnswer !== null &&\n updatedBoolean.defaultAnswer !== ''\n ) {\n matchingPage.elements[elementIndex].value = String(updatedBoolean.defaultAnswer);\n }\n }\n break;\n case 'propertystate':\n if (element.items) {\n let matchingEmojiSet = false;\n defaultItem.emojiDetails?.forEach((updatedEmoji: EmojiDetails) => {\n const matchingItem = element.items.find(\n (itemWrapper: ResidentInspectionItem) =>\n itemWrapper.item.emoji === updatedEmoji.emojiCode && updatedEmoji.isDefault\n );\n if (matchingItem && matchingItem.item.id) {\n matchingPage.elements[elementIndex].value = String(matchingItem.item.id);\n matchingEmojiSet = true;\n }\n });\n if (!matchingEmojiSet) {\n matchingPage.elements[elementIndex].value = matchingPage.elements[elementIndex].value || null;\n }\n }\n break;\n case 'file':\n if (Array.isArray(defaultItem.fileUploadIds) && defaultItem.fileUploadIds.length > 0) {\n matchingPage.mainImage = defaultItem.fileUploadIds.map(id => ({ fileUploadId: id }));\n }\n break;\n }\n });\n }\n });\n\n return JSON.stringify(defaultSurvey, (key, value) => (Array.isArray(value) && value.length === 0 ? null : value));\n }\n\n getCompletedItem(item: ResidentInspectionItem): boolean {\n const hasValidValue = item.emojiDetails?.length === 0 || !!item.value;\n const chosenEmoji = item.emojiDetails?.find(emoji => emoji.isDefault);\n\n if (!hasValidValue) return false;\n\n const allBooleanQuestionsAnswered =\n item.booleanQuestions?.length === 0 ||\n item.booleanQuestions.every(q => q.answer === 'true' || q.answer === 'false');\n\n if (!allBooleanQuestionsAnswered) return false;\n\n let emojiRequiresPhoto = true;\n let emojiRequiresComment = true;\n\n if (item.emojiDetails.length > 0) {\n emojiRequiresPhoto = chosenEmoji?.onSelect?.includes('photoRequired') || false;\n emojiRequiresComment = chosenEmoji?.onSelect?.includes('commentRequired') || false;\n } else {\n emojiRequiresPhoto = item.photoRequired;\n emojiRequiresComment = item.commentRequired;\n }\n\n const hasValidFileUploads = emojiRequiresPhoto ? item.fileUploadIds?.length > 0 : true;\n\n if (!hasValidFileUploads) return false;\n\n const hasValidComment = emojiRequiresComment ? item.comment && item.comment.trim() !== '' : true;\n\n if (!hasValidComment) return false;\n\n const hasAnything =\n item.booleanQuestions?.length === 0 && item.emojiDetails?.length === 0\n ? item.fileUploadIds?.length > 0 || !!item.comment\n : true;\n\n return hasValidValue && allBooleanQuestionsAnswered && hasValidFileUploads && hasValidComment && hasAnything;\n }\n\n isNotReadyToSubmitItem(item: ResidentInspectionItem): boolean {\n const hasValue =\n item.emojiDetails.length === 0\n ? true\n : item.emojiDetails.length > 0\n ? item.emojiDetails?.some((emoji: EmojiDetails) => emoji.isDefault === true)\n : false;\n\n if (!hasValue) return true;\n\n const hasAnswers =\n item.booleanQuestions.length === 0\n ? true\n : item.booleanQuestions.length > 0\n ? item.booleanQuestions.every(q => q.answer === 'true' || q.answer === 'false') ||\n item.booleanQuestions.every(q => q.defaultAnswer === 'true' || q.defaultAnswer === 'false')\n : false;\n\n if (!hasAnswers) return true;\n\n let hasPhotos = false;\n\n if (item.emojiDetails.length === 0) {\n hasPhotos = item.fileUploadIds.length > 0 ? true : item.photoRequired ? false : true;\n } else {\n hasPhotos =\n item.fileUploadIds.length > 0\n ? true\n : item.emojiDetails\n ?.find((emoji: EmojiDetails) => emoji.isDefault === true)\n ?.onSelect?.includes('photoRequired')\n ? item.fileUploadIds.length > 0\n : true;\n }\n\n if (!hasPhotos) return true;\n\n let hasComment = false;\n\n if (item.emojiDetails.length === 0) {\n hasComment = item.comment && item.comment !== '' ? true : item.commentRequired ? false : true;\n } else {\n hasComment =\n item.comment && item.comment !== ''\n ? true\n : item.emojiDetails\n ?.find((emoji: EmojiDetails) => emoji.isDefault === true)\n ?.onSelect?.includes('commentRequired')\n ? item.comment && item.comment !== ''\n : true;\n }\n\n if (!hasComment) return true;\n\n return !(hasValue && hasAnswers && hasPhotos && hasComment);\n }\n\n generateItemSpecificKey(item: ResidentInspectionItem): string {\n const inspectionId = item.inspectionId;\n const areaId = item.id;\n const itemId = item.uuid;\n return `${LocalStorageDataEnum.UNSAVED_DATA}-${inspectionId}-${areaId}-${itemId}`;\n }\n}\n","import { Observable, ReplaySubject, filter, take, tap } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nexport abstract class CommonInMemoryUpdatingService extends PuSubscribable {\n protected _list$: ReplaySubject;\n\n protected updateSavedData(updateFunction: (list: T[]) => T[]) {\n if (!this._list$ || this._list$.closed) {\n return;\n }\n this._list$\n .pipe(take(1))\n .subscribe(list => {\n const updatedList = updateFunction(list);\n this._list$.next(updatedList);\n })\n .untilDestroyed(this);\n }\n\n getForceServerReloadList(filterParams: Filter) {\n if (!this._list$ || this._list$.closed) {\n this._list$ = new ReplaySubject(1);\n } else {\n this._list$.next(undefined);\n }\n this.getListInternal(filterParams)\n .subscribe({\n next: list => this._list$.next(list),\n error: error => this._list$.error(error),\n })\n .untilDestroyed(this);\n return this._list$.pipe(filter(data => typeof data !== 'undefined'));\n }\n\n getList(filterParams: Filter) {\n if (!this._list$ || this._list$.closed) {\n this._list$ = new ReplaySubject(1);\n this.getListInternal(filterParams)\n .subscribe({\n next: list => this._list$.next(list),\n error: error => this._list$.error(error),\n })\n .untilDestroyed(this);\n }\n return this._list$.pipe(filter(data => typeof data !== 'undefined'));\n }\n\n protected abstract getListInternal(filter: Filter): Observable;\n\n delete(id: number): Observable {\n return this.deleteInternal(id).pipe(\n tap(() =>\n this.updateSavedData(list => {\n const listCopy = [...list];\n const index = listCopy.findIndex(x => x.id === id);\n if (index >= 0) {\n listCopy.splice(index, 1);\n }\n return listCopy;\n })\n )\n );\n }\n\n protected abstract deleteInternal(id: number): Observable;\n}\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\n\r\nimport { NumberInputModule } from '@ui-components/controls/number-input/number-input.module';\r\n\r\n@Component({\r\n selector: 'app-custom-weight-modal',\r\n templateUrl: './custom-weight-modal.component.html',\r\n standalone: true,\r\n imports: [FormsModule, CommonModule, MatDialogModule, NumberInputModule, MatButtonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CustomWeightModalComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: { customWeight: number }\r\n ) {}\r\n\r\n onCancel(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onSave(): void {\r\n this.dialogRef.close(this.data.customWeight);\r\n }\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter') {\r\n this.onSave();\r\n }\r\n }\r\n}\r\n","
\r\n
Add Custom Weight
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n \r\n Cancel\r\n \r\n \r\n Add\r\n \r\n
\r\n
\r\n
\r\n","\n
\n
\n
\n\n
\n
\n drag_indicator\n \n \n \n
\n {{ area.title }}\n
\n
\n
\n \n \n \n
\n \n 0 }\"\n [disabled]=\"!this.initFinished\">\n \n \n\n \n \n \n \n \n \n
Weight:
\n
\n {{\n scoringParametersForm.get('scoreWeight')?.value === 100\n ? 'Auto'\n : scoringParametersForm.get('scoreWeight')?.value + '%'\n }}\n
\n arrow_drop_down\n \n
\n \n \n
\n
\n \n \n \n
\n\n\n
\n \n \n \n \n \n \n \n \n drag_indicator\n \n \n
\n \n \n
\n \n \n \n {{ area.title }} item\n \n \n
\n \n\n\n\n \n \n \n\n \n \n \n\n\n\n \n \n \n\n\n\n \n
\n \n \n\n \n\n \n\n \n \n
\n
\n
\n\n
\n \n
\n \n {{ group.hierarchyPath }}\n \n \n
\n \n \n Hold Shift for multiselect\n \n
\n
\n","import {\n CDK_DRAG_PARENT,\n CdkDragDrop,\n CdkDragHandle,\n CdkDragStart,\n moveItemInArray,\n transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { includes } from 'lodash';\nimport { BehaviorSubject, debounceTime, distinctUntilChanged, filter, map, shareReplay, switchMap } from 'rxjs';\n\nimport { ScoreWeightModes, ScoringModels } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { TemplateEditorBase } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-base/template-editor-base.component';\nimport { AreaHelper } from '@main-application/shared/template-editor-dialog/models/area.helper';\nimport {\n getUpdatedAreaModel,\n handleMaxLimitContentEditable,\n scrollIfOutOfDialog,\n} from '@main-application/shared/template-editor-dialog/models/share-methods.function';\nimport {\n AreaModel,\n AreaPageModel,\n AreaSurveyModel,\n RepeatableArea,\n TemplateEditorDefaultValue,\n TemplateEditorInstructionsDefaultValue,\n TemplateEditorRatingGroup,\n TemplateMaxAreaAndItemLength,\n} from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { DndExpandableService } from '@main-application/shared/template-editor-dialog/services/dnd-expandable.service';\nimport {\n AreaExpandWorker,\n CommonExpandWorker,\n WrapperExpandWorker,\n} from '@main-application/shared/template-editor-dialog/services/expand-worker';\nimport { ScoringModelsService } from '@main-application/shared/template-editor-dialog/services/scoring-models.service';\nimport { SparePartsService } from '@main-application/shared/template-editor-dialog/services/spare-parts.service';\nimport { TemplateEditorDialogService } from '@main-application/shared/template-editor-dialog/services/template-editor-dialog.service';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { getNextNumberItemName } from '@shared/functions/get-next-number-item-name';\nimport { SubjectsService } from '@shared/services/subjects.service';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { TemplateEditorDialogItemComponent } from './template-editor-item/template-editor-item.component';\nimport { CustomWeightModalComponent } from '../../custom-weight-modal/custom-weight-modal.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-area',\n templateUrl: './template-editor-area.component.html',\n styleUrls: ['./template-editor-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorAreaComponent extends TemplateEditorBase implements OnInit, OnChanges, AfterViewInit {\n scrollSpeed = this.dndExpandableService.scrollSpeed;\n\n protected readonly TemplateEditorDefaultValue = TemplateEditorDefaultValue;\n public EIcon = EIcon;\n public EColorPalette = EColorPalette;\n protected readonly RepeatableArea = RepeatableArea;\n public sparePartsGroups$ = this.templateEditorDialogService.getSparePartsGroups();\n\n public editMode = false;\n public repeatableMenuOpen = false;\n public expandWorker: CommonExpandWorker;\n public actionAreaMenuOpen = false;\n public scoringParametersForm = this.fb.group({\n scoreWeightMode: [ScoreWeightModes.Automatic as ScoreWeightModes],\n scoreWeight: [100],\n });\n public scoreWeightItems = [];\n public previousValue = 100;\n public isDropdownOpen = false;\n public instructionsEditMode = false;\n protected TemplateEditorInstructionsDefaultValue = TemplateEditorInstructionsDefaultValue;\n public showInstructions = false;\n public instructions = '';\n public openSparePartsPopup = false;\n private _areaSubject$ = new BehaviorSubject(null);\n\n @Input() emitAreaSave: number | null;\n @Input() emitItemSave: string | null;\n @Input() isEditable: boolean;\n @Input() initFinished: boolean;\n @Output() remove = new EventEmitter();\n @Output() clone = new EventEmitter();\n @Output() openSpareParts = new EventEmitter();\n @Output() areaChange = new EventEmitter();\n @Output() enterPressed = new EventEmitter();\n @Output() repeatableChange = new EventEmitter<[RepeatableArea, number]>();\n @Output() focusedAreaId = new EventEmitter();\n @Output() focusedItemId = new EventEmitter();\n\n @Input() template: RestTemplateModel;\n _area: AreaModel;\n @Input() set area(area: AreaModel) {\n this._area = area;\n this._areaSubject$.next(area);\n if (this.isParentless && this.area.title != this.pages[0].title) {\n this.area.title = this.pages[0].title;\n }\n this.useUpdateInstructions(area.areaSurvey);\n }\n\n get area(): AreaModel {\n return this._area;\n }\n\n get pages() {\n return this.area.areaSurvey.pages;\n }\n\n get isParentless() {\n return this.pages?.length === 1 && !this.pages[0].pageType;\n }\n\n @ViewChild('areaName', { read: ElementRef, static: false }) areaName: ElementRef;\n @ViewChild(CdkDragHandle, { static: true }) handle: CdkDragHandle;\n @ViewChild(MatMenuTrigger) matMenuTrigger: MatMenuTrigger;\n\n @ViewChildren(TemplateEditorDialogItemComponent) areaItems!: QueryList;\n\n public sparePartsGroupsMerged$ = this._areaSubject$.pipe(\n map(area => area.areaSurvey?.sparePartsGroups ?? []),\n switchMap(areaSparePartsGroups =>\n this.sparePartsGroups$.pipe(\n map(groups =>\n groups.map(group => ({\n ...group,\n isActive: !!includes(areaSparePartsGroups, group.id),\n }))\n )\n )\n ),\n shareReplay()\n );\n\n constructor(\n store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n private fb: FormBuilder,\n private templateEditorDialogService: TemplateEditorDialogService,\n private subjectsService: SubjectsService,\n private scoringModelsService: ScoringModelsService,\n private dndExpandableService: DndExpandableService,\n snackbarService: SnackbarService,\n private sparePartsService: SparePartsService,\n private dialog: MatDialog,\n @Optional() @Inject(CDK_DRAG_PARENT) public cdk\n ) {\n super(store, snackbarService);\n }\n\n ngOnInit(): void {\n this.expandWorker = this.isParentless\n ? new WrapperExpandWorker(this.cdr, this.dndExpandableService, this.snackbarService)\n : new AreaExpandWorker(this.cdr, this.dndExpandableService, this.snackbarService);\n this.expandWorker.init(this.template.inspectionTemplateAreas.length, null, this);\n\n const currentScoreWeight = this.scoringParametersForm.get('scoreWeight').value;\n if (currentScoreWeight !== undefined && currentScoreWeight !== null) {\n const existingItemIndex = this.scoreWeightItems.findIndex(item => item.value === currentScoreWeight);\n if (existingItemIndex === -1) {\n const updatedScoreWeightItems = [\n ...this.scoreWeightItems,\n { label: `${currentScoreWeight}%`, value: currentScoreWeight },\n ];\n this.previousValue = currentScoreWeight;\n\n updatedScoreWeightItems.sort((a, b) => {\n if (a.value === 100) return -1;\n if (b.value === 100) return 1;\n return b.value - a.value;\n });\n this.scoreWeightItems = updatedScoreWeightItems;\n this.cdr.markForCheck();\n }\n }\n\n this.scoringParametersForm.valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged((a, b) => a.scoreWeightMode === b.scoreWeightMode && a.scoreWeight === b.scoreWeight),\n filter(e => e.scoreWeightMode !== this.area.scoreWeightMode || e.scoreWeight !== this.area.scoreWeight)\n )\n .subscribe(fields => {\n if (fields.scoreWeight === 0) {\n const dialogRef = this.dialog.open(CustomWeightModalComponent, {\n width: '256px',\n data: { customWeight: 0 },\n });\n\n dialogRef\n .afterClosed()\n .subscribe(result => {\n if (result === 0) {\n this.areaChange.emit({ ...this.area, scoreWeight: this.previousValue });\n this.cdr.markForCheck();\n } else if (result !== undefined) {\n this.scoringModelsService.addCustomWeight(result);\n\n this.scoringParametersForm.patchValue({\n scoreWeight: result,\n });\n\n this.areaChange.emit({ ...this.area, scoreWeight: result });\n this.previousValue = result;\n this.cdr.markForCheck();\n } else {\n this.areaChange.emit({ ...this.area, scoreWeight: this.previousValue });\n this.cdr.markForCheck();\n }\n })\n .untilDestroyed(this);\n } else {\n this.areaChange.emit({ ...this.area, ...fields });\n }\n })\n .untilDestroyed(this);\n\n this.scoringModelsService.combinedWeights$\n .pipe(untilDestroyed(this))\n .subscribe(customWeights => {\n const combinedWeights = this.scoringModelsService.getCombinedWeights();\n this.scoreWeightItems = combinedWeights;\n this.cdr.markForCheck();\n })\n .untilDestroyed(this);\n\n this.scoringModelsService.scoringModel$\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n\n this.useUpdateInstructions(this.area.areaSurvey);\n }\n\n useUpdateInstructions(parsedSurvey: AreaSurveyModel) {\n this.showInstructions = parsedSurvey?.showInstructions ?? !!parsedSurvey?.instructions?.trim();\n this.instructions = parsedSurvey?.instructions ?? '';\n }\n\n ngAfterViewInit() {\n this.cdk._handles.length = 1;\n this.cdk._handles._results = [this.handle];\n this.cdk._handles.changes.next();\n\n const scoreWeight = this.area.scoreWeight === 0 ? 100 : this.area.scoreWeight ?? 100;\n this.scoringParametersForm.patchValue({\n scoreWeightMode: this.area.scoreWeightMode ?? ScoreWeightModes.Automatic,\n scoreWeight: scoreWeight,\n });\n\n this.cdr.markForCheck();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.area) {\n if (this.template.scoringModel !== ScoringModels.Maximum100) {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n });\n } else if (this.area.scoreWeight === 100) {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n });\n } else if (this.template.scoringModel === ScoringModels.Maximum100) {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Manual,\n scoreWeight: this.area.scoreWeight !== null ? this.area.scoreWeight : 100,\n });\n } else {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n });\n }\n }\n\n if (changes['emitAreaSave']?.currentValue === this.area.id) {\n this.leaveInstructionsEditMode(this.instructions);\n }\n }\n\n add() {\n if (!this.checkEditRight()) {\n return;\n }\n\n const title = this.isParentless ? 'Item 1' : getNextNumberItemName('Item ', this.pages, e => e.title);\n const name = AreaHelper.addItem(this.area, title);\n this.emitItemsChange();\n this.cdr.markForCheck();\n setTimeout(() => {\n const item = this.areaItems.find(c => c.name === name);\n item?.enterEditMode();\n\n const element = (item as any)?.__ngContext__?.native as HTMLElement;\n scrollIfOutOfDialog(element);\n }, 100);\n }\n\n emitItemsChange() {\n this.areaChange.emit(getUpdatedAreaModel(this.area));\n this.cdr.detectChanges();\n }\n\n trackBy(_index: number, item: AreaPageModel) {\n return item?.name;\n }\n\n dropDnd(event: CdkDragDrop) {\n if (!this.checkEditRight()) {\n return;\n }\n this.dndExpandableService.endDnd(false);\n if (event.container != event.previousContainer) {\n transferArrayItem(\n event.previousContainer.data.areaSurvey.pages,\n event.container.data.areaSurvey.pages,\n event.previousIndex,\n event.currentIndex\n );\n this.areaChange.emit(getUpdatedAreaModel(event.container.data));\n this.areaChange.emit(getUpdatedAreaModel(event.previousContainer.data));\n return;\n }\n if (event.previousIndex == event.currentIndex) {\n return;\n }\n moveItemInArray(this.pages, event.previousIndex, event.currentIndex);\n this.emitItemsChange();\n }\n\n startDnd(event: CdkDragStart) {\n if (!this.checkEditRight()) {\n return;\n }\n this.dndExpandableService.startDnd(event, false);\n }\n\n enterEditMode() {\n if (!this.checkEditRight() || this.editMode) {\n return;\n }\n this.templateEditorDialogService.focusItem(this.area);\n if (this.isParentless) {\n this.areaItems?.first?.enterEditMode();\n return;\n }\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.areaName.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n nameChanged($event: KeyboardEvent) {\n if (!this.checkEditRight()) {\n return;\n }\n handleMaxLimitContentEditable($event, this.areaName.nativeElement, TemplateMaxAreaAndItemLength);\n\n if ($event.key === 'Enter') {\n this.areaName.nativeElement.blur();\n this.enterPressed.emit(this.area);\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n get isScoringParametersExist() {\n return this.area.scoreWeightMode != null && typeof this.area.scoreWeightMode != 'undefined';\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.area.title !== value) {\n if (!value) {\n value = TemplateEditorDefaultValue;\n this.areaName.nativeElement.textContent = TemplateEditorDefaultValue;\n }\n const pages = this.area.areaSurvey.pages;\n this.areaChange.emit({\n ...this.area,\n title: value,\n areaSurvey: { ...this.area.areaSurvey, title: value, pages },\n });\n }\n\n this.templateEditorDialogService.leaveFocus(this.area.id);\n\n setTimeout(() => {\n const div = this.areaName.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n\n toggleRepeatable(event: MouseEvent, type: RepeatableArea) {\n if (!this.checkEditRight()) {\n return;\n }\n event.stopPropagation();\n this.repeatableChange.emit([type, this.area.id]);\n setTimeout(() => {\n this.matMenuTrigger.closeMenu();\n this.cdr.markForCheck();\n }, 250);\n }\n\n removeClick() {\n if (!this.checkEditRight()) {\n return;\n }\n this.onSaveArea();\n this.remove.emit(this.area);\n }\n\n cloneClick() {\n if (!this.checkEditRight()) {\n return;\n }\n this.onSaveArea();\n\n setTimeout(() => {\n this.clone.emit(this.area);\n }, 300);\n }\n\n removeItem(item: AreaPageModel) {\n if (!this.checkEditRight()) {\n return;\n }\n AreaHelper.removeItem(this.area, item.name);\n this.emitItemsChange();\n }\n\n cloneItem(item: AreaPageModel) {\n if (!this.checkEditRight()) {\n return;\n }\n const name = AreaHelper.cloneItem(this.area, item);\n this.emitItemsChange();\n\n setTimeout(() => {\n const item = this.areaItems.find(c => c.name === name);\n item?.enterEditMode();\n\n const element = (item as any)?.__ngContext__?.native as HTMLElement;\n scrollIfOutOfDialog(element);\n }, 100);\n }\n\n itemChange(item: AreaPageModel) {\n if (!this.checkEditRight()) {\n return;\n }\n AreaHelper.updateItem(this.area.areaSurvey, item);\n this.emitItemsChange();\n }\n\n addRatingGroup([item, group]: [item: AreaPageModel, group: TemplateEditorRatingGroup]) {\n if (!this.checkEditRight()) {\n return;\n }\n AreaHelper.addOrReplaceRatingGroup(this.area.areaSurvey, item, group);\n this.emitItemsChange();\n }\n\n addQuestion([item, defaultValue]: [AreaPageModel, boolean]) {\n if (!this.checkEditRight()) {\n return;\n }\n const id = AreaHelper.addQuestion(this.area.areaSurvey, item, '', defaultValue);\n this.emitItemsChange();\n setTimeout(() => {\n this.templateEditorDialogService.focusQuestion(id);\n });\n }\n\n enterPressedHandler(item: AreaPageModel) {\n if (!this.checkEditRight()) {\n return;\n }\n if (this.isParentless) {\n this.enterPressed.emit(this.area);\n return;\n }\n const index = this.pages.findIndex(itemInner => itemInner.name === item.name);\n if (index >= this.pages.length - 1) {\n this.add();\n } else {\n const selectedItem = this.areaItems[index + 1];\n selectedItem?.enterEditMode();\n }\n }\n\n checkEditRight(notify = true): boolean {\n if (!this.initFinished) return;\n return super.checkEditRight(this.isEditable, notify);\n }\n\n scoreWeightChange(value: any) {\n if (!this.checkEditRight()) {\n return;\n }\n const selectedScoreWeight = value as number;\n if (selectedScoreWeight !== undefined && selectedScoreWeight !== null) {\n this.area.scoreWeight = selectedScoreWeight;\n this.areaChange.emit({\n ...this.area,\n scoreWeight: this.area.scoreWeight,\n });\n }\n }\n\n toggleInstructions() {\n setTimeout(() => {\n if (!this.initFinished) return;\n this.showInstructions = !this.showInstructions;\n this.areaChange.emit({\n ...this.area,\n areaSurvey: { ...this.area.areaSurvey, showInstructions: this.showInstructions },\n });\n this.cdr.detectChanges();\n });\n }\n\n enterInstructionsEditMode() {\n if (!this.checkEditRight() || this.instructionsEditMode) {\n return;\n }\n this.focusedAreaId.emit(this.area.id);\n this.templateEditorDialogService.focusItem(this.area);\n this.instructionsEditMode = true;\n this.cdr.detectChanges();\n }\n\n setFocusedItem(id: string): void {\n this.focusedItemId.emit(id);\n }\n\n leaveInstructionsEditMode(value: string) {\n value = value?.trim() ?? '';\n this.instructionsEditMode = false;\n\n this.areaChange.emit({\n ...this.area,\n areaSurvey: { ...this.area.areaSurvey, instructions: value },\n });\n this.cdr.detectChanges();\n }\n\n handleClickSparePartGroupItem(event: MouseEvent, id: number) {\n if (event?.shiftKey) event.stopPropagation();\n this.areaChange.emit(this.sparePartsService.useSetOrUnsetSparePartsGroupsArea({ parent: this._area, id }));\n this.cdr.detectChanges();\n }\n\n toggleExpand() {\n this.expandWorker.toggleExpand();\n this.cdr.detectChanges();\n }\n\n onSaveArea(): void {\n this.subjectsService.templatesFocusOutEditor$.next();\n }\n}\n","
\n \n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgZone, OnInit } from '@angular/core';\nimport { AnimationItem } from 'lottie-web';\nimport { AnimationOptions } from 'ngx-lottie';\nimport { firstValueFrom } from 'rxjs';\n\nimport { TemplateEditorEmojiContent } from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { AnimatedEmojiService } from '@main-application/shared/template-editor-dialog/services/animated-emoji.service';\n\n@Component({\n selector: 'app-template-editor-animation',\n templateUrl: './template-editor-animation.component.html',\n styleUrls: ['./template-editor-animation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogAnimationComponent implements OnInit {\n options: AnimationOptions;\n\n @Input() set animationItem(value) {\n this._animationItem = value;\n if (this.initialized) {\n this.updateConfig().then();\n }\n }\n\n get animationItem() {\n return this._animationItem;\n }\n\n private _animationItem: string;\n\n @Input() set assetRelativeUrl(value) {\n this._assetRelativeUrl = value;\n if (this.initialized) {\n this.updateConfig().then();\n }\n }\n\n get assetRelativeUrl() {\n return this._assetRelativeUrl;\n }\n\n private _assetRelativeUrl: string;\n\n @Input() attrWidth = '32px';\n @Input() attrHeight = '32px';\n @Input() loop = true;\n\n @Input() set autoplay(value) {\n this._autoplay = value;\n if (this.initialized) {\n if (value) {\n this.animationItemCreated.play();\n } else {\n this.animationItemCreated.stop();\n }\n }\n }\n\n get autoplay() {\n return this._autoplay;\n }\n\n private _autoplay = true;\n private initialized = false;\n emojis: TemplateEditorEmojiContent[];\n private animationItemCreated: AnimationItem;\n\n constructor(\n private animatedEmojiService: AnimatedEmojiService,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone\n ) {}\n\n ngOnInit() {\n this.updateConfig().then();\n }\n\n async updateConfig() {\n this.options = await this.getConfig();\n this.cdr.markForCheck();\n }\n\n private async getConfig(): Promise {\n if (this.animationItem) {\n this.emojis = await firstValueFrom(this.animatedEmojiService.getEmojiContent());\n const animationData = await firstValueFrom(this.animatedEmojiService.loadEmoji(this.getConfigPath()));\n return {\n loop: this.loop,\n animationData,\n autoplay: this.autoplay,\n };\n } else if (this.assetRelativeUrl) {\n return { loop: this.loop, path: `/${this.assetRelativeUrl}`, autoplay: this.autoplay };\n }\n }\n\n private getConfigPath(): string {\n const animation = this.emojis.find(emoji => emoji.emojiCode === this.animationItem);\n return `/${animation?.assetRelativeUrl}`;\n }\n\n animationCreated(animationItem: AnimationItem): void {\n this.animationItemCreated = animationItem;\n this.initialized = true;\n }\n\n stop(): void {\n if (this.autoplay) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.animationItemCreated?.stop();\n });\n }\n\n play(): void {\n if (this.autoplay) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.animationItemCreated?.play();\n });\n }\n}\n","
\n\n
\n
\n \n \n \n
\n {{ item.title }}\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n = 35 ? 'Max 35 questions per item' : 'Add question to item'\"\n matTooltipShowDelay=\"500\"\n mat-icon-button\n (click)=\"onSaveArea(); addQuestion()\"\n [disabled]=\"questions?.length >= 35\">\n \n \n\n \n \n \n\n \n \n \n \n \n \n
Weight:
\n
\n {{\n scoringParametersForm.get('scoreWeight')?.value === 100\n ? 'Auto'\n : scoringParametersForm.get('scoreWeight')?.value + '%'\n }}\n
\n arrow_drop_down\n
\n \n \n \n \n \n \n \n\n\n
\n \n\n \n \n \n \n
\n\n \n\n \n \n\n\n\n \n \n \n \n \n\n\n\n \n \n {{ group.name }}\n \n \n \n Remove rating group\n \n\n\n \n\n\n\n
\n \n
\n \n\n \n\n \n
\n \n
\n \n \n {{ group.hierarchyPath }}\n \n \n \n
\n \n\n \n
\n \n\n \n Selected conditions: {{ getAlivableConditions }}\n\n \n \n\n \n
\n \n\n \n All/Selected only one can be checked at a time\n \n
\n
\n","import { CDK_DRAG_PARENT, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { find, includes, isEmpty } from 'lodash';\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n switchMap,\n} from 'rxjs';\n\nimport { PackageService } from '@app/services/package.service';\nimport { isDef } from '@app/utils/def';\nimport { ScoringModels } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { ScoreWeightModes } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { TemplateEditorBase } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-base/template-editor-base.component';\nimport { handleMaxLimitContentEditable } from '@main-application/shared/template-editor-dialog/models/share-methods.function';\nimport {\n AreaModel,\n AreaPageElementQuestionModel,\n AreaPageElementRatingGroupModel,\n AreaPageModel,\n CompulsoryItems,\n TemplateEditorDefaultValue,\n TemplateEditorInstructionsDefaultValue,\n TemplateEditorRatingGroup,\n TemplateMaxAreaAndItemLength,\n} from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { DndExpandableService } from '@main-application/shared/template-editor-dialog/services/dnd-expandable.service';\nimport {\n AreaExpandWorker,\n CommonExpandWorker,\n ItemExpandWorker,\n} from '@main-application/shared/template-editor-dialog/services/expand-worker';\nimport { ScoringModelsService } from '@main-application/shared/template-editor-dialog/services/scoring-models.service';\nimport { SparePartsService } from '@main-application/shared/template-editor-dialog/services/spare-parts.service';\nimport { TemplateEditorDialogService } from '@main-application/shared/template-editor-dialog/services/template-editor-dialog.service';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PackageType } from '@shared/enums/package-type';\nimport { PluralizationPipe } from '@shared/pipes/pluralization.pipe';\nimport { SubjectsService } from '@shared/services/subjects.service';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { CustomWeightModalComponent } from '../../../custom-weight-modal/custom-weight-modal.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-item',\n templateUrl: './template-editor-item.component.html',\n styleUrls: ['./template-editor-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogItemComponent extends TemplateEditorBase implements OnInit, OnChanges, AfterViewInit {\n public EIcon = EIcon;\n public EColorPalette = EColorPalette;\n protected readonly TemplateEditorDefaultValue = TemplateEditorDefaultValue;\n protected readonly TemplateEditorInstructionsDefaultValue = TemplateEditorInstructionsDefaultValue;\n public editMode = false;\n public instructionsEditMode = false;\n public ratingGroups$ = this.templateEditorService.getRatingGroups();\n public openRatingPopup = false;\n public openSparePartsPopup = false;\n public actionItemMenuOpen = false;\n public timeAndMaterialForm = this.fb.group({\n timeCost: [null as number],\n materials: [null as number],\n laborCost: [null as number],\n });\n public scoringParametersForm = this.fb.group({\n scoreWeightMode: [ScoreWeightModes.Automatic as ScoreWeightModes],\n scoreWeight: [100],\n });\n public scoreWeightItems = [];\n public previousValue = 100;\n public isDropdownOpen = false;\n public expandWorker: CommonExpandWorker;\n private _sparePartsGroups$ = this.templateEditorService.getSparePartsGroups();\n private _item: AreaPageModel;\n private _itemSubject$ = new BehaviorSubject(null);\n\n @Output() remove = new EventEmitter();\n @Output() clone = new EventEmitter();\n @Output() itemChange = new EventEmitter();\n @Output() enterPressed = new EventEmitter();\n @Output() ratingGroupAdd = new EventEmitter<[AreaPageModel, TemplateEditorRatingGroup]>();\n @Output() questionAdd = new EventEmitter<[AreaPageModel, boolean]>();\n @Output() focusedItemId = new EventEmitter();\n @Input() isEditable: boolean;\n\n @Input() parent: AreaModel;\n @Input() grandParent: RestTemplateModel;\n @Input() isParentless = false;\n @Input() emitItemSave: string | null;\n\n @Input() set item(areaItem: AreaPageModel) {\n this._item = areaItem;\n this._itemSubject$.next(areaItem);\n }\n\n get item(): AreaPageModel {\n return this._item;\n }\n\n get isSparePartsGroupButtonActive(): boolean {\n return this.sparePartsService.isSparePartsGroupButtonActive({ parent: this.parent, item: this.item });\n }\n\n get isUseSameForParentSparePartsButtonActive(): boolean {\n return this.sparePartsService.isUseSameForParentSparePartsButtonActive({ parent: this.parent, item: this.item });\n }\n\n get isDoNotUseSparePartsButtonActive(): boolean {\n return this.sparePartsService.isDoNotUseSparePartsButtonActive({ parent: this.parent, item: this.item });\n }\n\n get isCustomListSparePartsButtonActive(): boolean {\n return this.sparePartsService.isCustomListSparePartsButtonActive({ parent: this.parent, item: this.item });\n }\n\n get getAlivableConditions() {\n const getFiltred = this.ratingGroup?.items.filter(item => {\n return item.item.onSelect.includes('showSpareParts');\n });\n\n const getMapped = getFiltred?.map(item => item?.item?.text).filter(item => item);\n\n return getMapped?.join(', ');\n }\n\n get isAllConditionsSelected(): boolean {\n return this.ratingGroup?.items?.every(item => item.item.onSelect.includes('showSpareParts'));\n }\n\n get isShowInstructions(): boolean {\n const item = { ...this.item };\n const isOldApi = item?.showInstructions === undefined;\n return isOldApi ? item.compulsoryItems.includes('hasInstructions') : item?.showInstructions;\n }\n\n @ViewChild('itemName', { read: ElementRef, static: false }) itemName: ElementRef;\n // @ViewChild('itemInstructions', { read: ElementRef, static: false }) itemInstructions: ElementRef;\n @ViewChild(CdkDragHandle, { static: true }) handle: CdkDragHandle;\n\n @HostBinding('class.is-parentless') get parentlessClass() {\n return this.isParentless;\n }\n\n public inspectionProPackageEnabled$ = this.isInspectionProPackageEnabled();\n public checkInspectionProPackageAndNotify$ = this.isInspectionProPackageEnabled(true);\n\n public sparePartsGroupsPageMerged$ = this._itemSubject$.pipe(\n switchMap(areaItem =>\n this._sparePartsGroups$.pipe(\n map(groups => {\n const areaSparePartsGroups = areaItem?.sparePartsGroups ?? [];\n if (this.isUseSameForParentSparePartsButtonActive && !this.isParentless) {\n return areaSparePartsGroups.map(groupId => ({\n ...find(groups, { id: groupId }),\n isActive: true,\n }));\n } else {\n return groups.map(group => ({\n ...group,\n isActive: !!includes(areaSparePartsGroups, group.id),\n }));\n }\n }),\n map(groups =>\n groups.sort((a, b) => {\n if (a?.isActive && !b?.isActive) return -1;\n if (!a?.isActive && b?.isActive) return 1;\n if (!a?.isActive && !b?.isActive) return a.hierarchyPath.localeCompare(b.hierarchyPath);\n return 0;\n })\n )\n )\n ),\n shareReplay()\n );\n\n constructor(\n store: Store<{}>,\n snackbarService: SnackbarService,\n protected cdr: ChangeDetectorRef,\n private fb: FormBuilder,\n @Optional() @Inject(CDK_DRAG_PARENT) public cdk,\n private templateEditorService: TemplateEditorDialogService,\n private scoringModelsService: ScoringModelsService,\n private dndExpandableService: DndExpandableService,\n private sparePartsService: SparePartsService,\n private packageService: PackageService,\n private pluralizationPipe: PluralizationPipe,\n private dialog: MatDialog,\n private subjectsService: SubjectsService\n ) {\n super(store, snackbarService);\n }\n\n ngOnInit() {\n this.timeAndMaterialForm.valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(\n (a, b) => a.laborCost == b.laborCost && a.materials == b.materials && a.timeCost == b.timeCost\n ),\n filter(\n e =>\n e.laborCost != this.item.laborCost || e.materials != this.item.materials || e.timeCost != this.item.timeCost\n )\n )\n .subscribe(fields => {\n this.checkInspectionProPackageAndNotify$\n .subscribe(packageEnabled => {\n if (packageEnabled) {\n this.itemChange.emit({ ...this.item, ...fields });\n }\n })\n .untilDestroyed(this);\n })\n .untilDestroyed(this);\n\n const currentScoreWeight = this.scoringParametersForm.get('scoreWeight').value;\n if (currentScoreWeight !== undefined && currentScoreWeight !== null) {\n const existingItemIndex = this.scoreWeightItems.findIndex(item => item.value === currentScoreWeight);\n if (existingItemIndex === -1) {\n const updatedScoreWeightItems = [\n ...this.scoreWeightItems,\n { label: `${currentScoreWeight}%`, value: currentScoreWeight },\n ];\n this.previousValue = currentScoreWeight;\n\n updatedScoreWeightItems.sort((a, b) => {\n if (a.value === 100) return -1;\n if (b.value === 100) return 1;\n return b.value - a.value;\n });\n this.scoreWeightItems = updatedScoreWeightItems;\n this.cdr.markForCheck();\n }\n }\n\n this.scoringParametersForm.valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged((a, b) => a.scoreWeightMode === b.scoreWeightMode && a.scoreWeight === b.scoreWeight),\n filter(e => e.scoreWeightMode !== this.item.scoreWeightMode || e.scoreWeight !== this.item.scoreWeight)\n )\n .subscribe(fields => {\n if (fields.scoreWeight === 0) {\n const dialogRef = this.dialog.open(CustomWeightModalComponent, {\n width: '256px',\n data: { customWeight: 0 },\n });\n\n dialogRef\n .afterClosed()\n .subscribe(result => {\n if (result === 0) {\n this.itemChange.emit({ ...this.item, scoreWeight: this.previousValue });\n this.cdr.markForCheck();\n } else if (result !== undefined) {\n this.scoringModelsService.addCustomWeight(result);\n\n this.scoringParametersForm.patchValue({\n scoreWeight: result,\n });\n\n this.itemChange.emit({ ...this.item, scoreWeight: result });\n this.previousValue = result;\n this.cdr.markForCheck();\n } else {\n this.itemChange.emit({ ...this.item, scoreWeight: this.previousValue });\n this.cdr.markForCheck();\n }\n })\n .untilDestroyed(this);\n } else {\n this.itemChange.emit({ ...this.item, ...fields });\n }\n })\n .untilDestroyed(this);\n\n if (this.isParentless) {\n this.expandWorker = new AreaExpandWorker(this.cdr, this.dndExpandableService, this.snackbarService);\n this.expandWorker.init(this.grandParent.inspectionTemplateAreas.length, null, this);\n } else {\n this.expandWorker = new ItemExpandWorker(this.cdr, this.dndExpandableService, this.snackbarService);\n this.expandWorker.init(this.item.elements.length, this.parent.id, this);\n }\n\n this.scoringModelsService.combinedWeights$\n .pipe(untilDestroyed(this))\n .subscribe(customWeights => {\n const combinedWeights = this.scoringModelsService.getCombinedWeights();\n this.scoreWeightItems = combinedWeights;\n this.cdr.markForCheck();\n })\n .untilDestroyed(this);\n\n this.scoringModelsService.scoringModel$\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n ngAfterViewInit() {\n if (this.handle) {\n this.cdk._handles.length = 1;\n this.cdk._handles._results = [this.handle];\n this.cdk._handles.changes.next();\n }\n\n const scoreWeight = this.item.scoreWeight === 0 ? 100 : this.item.scoreWeight ?? 100;\n this.scoringParametersForm.patchValue({\n scoreWeightMode: this.item.scoreWeightMode ?? ScoreWeightModes.Automatic,\n scoreWeight: scoreWeight,\n });\n\n this.cdr.markForCheck();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.item) {\n this.timeAndMaterialForm.patchValue({\n laborCost: this.item.laborCost,\n materials: this.item.materials,\n timeCost: this.item.timeCost,\n });\n\n if (this.grandParent.scoringModel !== ScoringModels.Maximum100) {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n });\n } else if (this.item.scoreWeight === 100) {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n });\n } else if (this.grandParent.scoringModel === ScoringModels.Maximum100) {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Manual,\n scoreWeight: this.item.scoreWeight !== null ? this.item.scoreWeight : 100,\n });\n } else {\n this.scoringParametersForm.patchValue({\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n });\n }\n }\n\n if (changes['emitItemSave']?.currentValue === this.item.uuid)\n this.leaveInstructionsEditMode(this.item.instructions);\n }\n\n get name() {\n return this.item.name;\n }\n\n get ratingGroup() {\n const item = this.item.elements?.find(\n element => element.type === 'propertystate'\n ) as AreaPageElementRatingGroupModel;\n return item;\n }\n\n get questions() {\n const items = this.item.elements?.filter(element => element.type === 'boolean') as AreaPageElementQuestionModel[];\n return items;\n }\n\n get isTAndMExist() {\n return this.item.timeCost != null && typeof this.item.timeCost != 'undefined';\n }\n\n get isScoringParametersExist() {\n return this.item.scoreWeightMode != null && typeof this.item.scoreWeightMode != 'undefined';\n }\n\n isInspectionProPackageEnabled(notify = false): Observable {\n return combineLatest([\n this.packageService.checkPackageAvailable(PackageType.InspectionsPro),\n this.packageService.checkPackageTrialDaysLeft(PackageType.InspectionsPro),\n ]).pipe(\n untilDestroyed(this),\n map(([packageAvailable, trial]) => {\n if (trial.trialState > 0) {\n notify &&\n this.snackbarService.info(\n `Your trial ends in ${trial.trialState} ${this.pluralizationPipe.transform('day', trial.trialState)}`\n );\n }\n if (!packageAvailable && (trial.trialState < 0 || !isDef(trial.trialState))) {\n notify &&\n this.snackbarService.info(\n 'Contact us for a free 90-day trial of Service!'\n );\n }\n return packageAvailable;\n }),\n shareReplay()\n );\n }\n\n trackBy(_index: number, question: AreaPageElementQuestionModel) {\n return question?.guid;\n }\n\n ratingGroupChange(ratingGroup: AreaPageElementRatingGroupModel) {\n const commentNotCompulsory = ratingGroup.items.some(e => !e.item.onSelect.includes('commentRequired'));\n const photoNotCompulsory = ratingGroup.items.some(e => !e.item.onSelect.includes('photoRequired'));\n const item = { ...this.item };\n if (commentNotCompulsory) {\n const index = item.compulsoryItems.indexOf('commentRequired');\n if (index >= 0) {\n item.compulsoryItems.splice(index, 1);\n }\n }\n if (photoNotCompulsory) {\n const index = item.compulsoryItems.indexOf('photoRequired');\n if (index >= 0) {\n item.compulsoryItems.splice(index, 1);\n }\n }\n this.itemChange.emit({\n ...item,\n elements: item.elements.map(element => {\n if (element.type === 'propertystate') {\n return ratingGroup;\n } else {\n return element;\n }\n }),\n });\n\n if (this.checkEditRight(false)) {\n this.templateEditorService.updateRatingGroup(ratingGroup).subscribe().untilDestroyed(this);\n }\n }\n\n questionChange(question: AreaPageElementQuestionModel) {\n this.itemChange.emit({\n ...this.item,\n elements: this.item.elements.map(element => {\n if (element.guid === question.guid) {\n return question;\n } else {\n return element;\n }\n }),\n });\n }\n\n questionRemove(question: AreaPageElementQuestionModel) {\n this.itemChange.emit({\n ...this.item,\n elements: this.item.elements.filter(element => element.guid !== question.guid),\n });\n }\n\n enterEditMode() {\n if (!this.checkEditRight() || this.editMode) {\n return;\n }\n this.templateEditorService.focusItem(this.parent);\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.itemName.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n nameChanged($event: KeyboardEvent) {\n if (!this.checkEditRight()) {\n return;\n }\n handleMaxLimitContentEditable($event, this.itemName.nativeElement, TemplateMaxAreaAndItemLength);\n if ($event.key === 'Enter') {\n this.itemName.nativeElement.blur();\n this.enterPressed.emit(this.item);\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.item.title !== value) {\n if (!value) {\n value = TemplateEditorDefaultValue;\n this.itemName.nativeElement.textContent = TemplateEditorDefaultValue;\n }\n this.itemChange.emit({ ...this.item, title: value });\n }\n\n setTimeout(() => {\n const div = this.itemName.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n\n enterInstructionsEditMode() {\n if (!this.checkEditRight() || this.instructionsEditMode) {\n return;\n }\n this.focusedItemId.emit(this.item.uuid);\n this.templateEditorService.focusItem(this.parent);\n this.instructionsEditMode = true;\n this.cdr.detectChanges();\n }\n\n leaveInstructionsEditMode(value: string) {\n value = value.trim();\n this.instructionsEditMode = false;\n this.itemChange.emit({ ...this.item, instructions: value });\n }\n\n removeClick() {\n this.remove.emit(this.item);\n }\n\n cloneClick() {\n this.clone.emit(this.item);\n }\n\n removeRatingGroup() {\n if (this.ratingGroup) {\n this.itemChange.emit({\n ...this.item,\n elements: this.item.elements.filter(element => element.type !== 'propertystate'),\n });\n }\n }\n\n toggleTimeAndMaterial() {\n this.checkInspectionProPackageAndNotify$\n .subscribe(result => {\n if (!result) return;\n if (!this.isTAndMExist) {\n this.expandWorker.isExpanded = true;\n }\n this.itemChange.emit({\n ...this.item,\n timeCost: this.isTAndMExist ? null : 0,\n laborCost: this.isTAndMExist ? null : 0,\n materials: this.isTAndMExist ? null : 0,\n });\n })\n .untilDestroyed(this);\n }\n\n scoreWeightChange(value: any) {\n if (!this.checkEditRight()) {\n return;\n }\n const selectedScoreWeight = value as String;\n if (selectedScoreWeight !== undefined && selectedScoreWeight !== null) {\n this.item.scoreWeightMode =\n selectedScoreWeight === ScoreWeightModes.Automatic ? ScoreWeightModes.Automatic : ScoreWeightModes.Manual;\n this.itemChange.emit({\n ...this.item,\n scoreWeight: this.item.scoreWeight,\n });\n }\n }\n\n addRatingGroup(ratingGroup: TemplateEditorRatingGroup) {\n this.expandWorker.isExpanded = true;\n if (this.item.compulsoryItems.includes('commentRequired')) {\n this.toggleCommentRequired();\n }\n if (this.item.compulsoryItems.includes('photoRequired')) {\n this.togglePhotoRequired();\n }\n setTimeout(() => {\n this.ratingGroupAdd.emit([this.item, ratingGroup]);\n }, 100);\n }\n\n addQuestion(question?: AreaPageElementQuestionModel) {\n this.expandWorker.isExpanded = true;\n if (this.questions.length < 35) {\n this.questionAdd.emit([\n question\n ? {\n ...this.item,\n elements: this.item.elements.map(element => {\n if (element.guid === question.guid) {\n return question;\n } else {\n return element;\n }\n }),\n }\n : this.item,\n null,\n ]);\n }\n }\n\n togglePhotoRequired() {\n this.toggleCompulsory('photoRequired');\n }\n\n toggleCommentRequired() {\n this.toggleCompulsory('commentRequired');\n }\n\n onSaveArea(): void {\n this.subjectsService.templatesFocusOutEditor$.next();\n }\n\n toggleInstructions() {\n const item = { ...this.item };\n const isUseOldApi = item?.showInstructions === undefined;\n if (isUseOldApi) return this.toggleCompulsory('hasInstructions');\n\n item.showInstructions = !item?.showInstructions;\n this.itemChange.emit({ ...item });\n }\n\n private toggleCompulsory(compulsoryItem: CompulsoryItems, updateRatingGroup = true) {\n const item = { ...this.item };\n const index = item.compulsoryItems.indexOf(compulsoryItem);\n const newCompulsoryState = index < 0;\n if (index >= 0) {\n item.compulsoryItems.splice(index, 1);\n } else {\n item.compulsoryItems.push(compulsoryItem);\n }\n\n const emojiElement = item.elements.find(e => e.type === 'propertystate');\n if (emojiElement?.type == 'propertystate') {\n emojiElement.items.forEach(e => {\n const itemIndex = e.item.onSelect.indexOf(compulsoryItem);\n if (newCompulsoryState && itemIndex < 0) {\n e.item.onSelect.push(compulsoryItem);\n }\n if (!newCompulsoryState && itemIndex >= 0) {\n e.item.onSelect.splice(itemIndex, 1);\n }\n });\n const emojiIndex = item.elements.indexOf(emojiElement);\n item.elements.splice(emojiIndex, 1, { ...emojiElement, items: [...emojiElement.items.map(e => ({ ...e }))] });\n }\n this.itemChange.emit({ ...item });\n\n if (updateRatingGroup && this.ratingGroup) {\n this.ratingGroupChange(this.ratingGroup);\n }\n }\n\n checkEditRight(notify = true): boolean {\n return super.checkEditRight(this.isEditable, notify);\n }\n\n handleClickUseSameForParent(event: MouseEvent) {\n if (event?.shiftKey) event.stopPropagation();\n\n if (isEmpty(this.parent?.areaSurvey?.sparePartsGroups)) return;\n\n const getParentPartGroup = this.parent?.areaSurvey?.sparePartsGroups ?? [];\n\n this.itemChange.emit({\n ...this.item,\n overrideSparePartsSettings: false,\n sparePartsGroups: getParentPartGroup,\n showSpareParts: getParentPartGroup.length > 0,\n });\n }\n\n handleClickNotUseSpareParts(event: MouseEvent) {\n if (event?.shiftKey) event.stopPropagation();\n this.itemChange.emit({\n ...this.item,\n overrideSparePartsSettings: true,\n showSpareParts: false,\n sparePartsGroups: [],\n });\n }\n\n handleClickSparePart(event: MouseEvent, id: number) {\n if (event?.shiftKey) event.stopPropagation();\n\n const getNewParts = this.sparePartsService.useSetOrUnsetSparePartsGroupItem({\n parent: this.parent,\n item: this.item,\n id,\n });\n\n this.itemChange.emit({\n ...this.item,\n ...getNewParts,\n });\n }\n\n public handleToogleAllSpareParts(event: MouseEvent, isShowAll = true) {\n if (event?.shiftKey) event.stopPropagation();\n\n const getNewRatingGrouop = this.ratingGroup?.items?.map(item => {\n const getConditionWithParts = [...new Set([...item.item.onSelect, 'showSpareParts'])] as CompulsoryItems[];\n\n const onSelect = isShowAll ? getConditionWithParts : item.item.onSelect?.filter(e => e !== 'showSpareParts');\n\n return {\n ...item,\n item: {\n ...item.item,\n onSelect,\n },\n };\n });\n\n this.ratingGroupChange({\n ...this.ratingGroup,\n items: getNewRatingGrouop,\n });\n }\n}\n","import { Directive } from '@angular/core';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, map, tap } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { selectUserPermissionLevel } from '@main-application/store/selectors/user.selectors';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Directive()\nexport abstract class TemplateEditorBase extends PuSubscribable {\n hasEditRight = false;\n hasEditRight$: Observable;\n\n constructor(protected store: Store<{}>, protected snackbarService: SnackbarService) {\n super();\n this.hasEditRight$ = store.select(selectUserPermissionLevel).pipe(\n untilDestroyed(this),\n filter((permissionLevel: PermissionLevelType[]) => !!permissionLevel?.length),\n map(permissionLevels => checkPermissionLevel(permissionLevels, PermissionLevelType.InspectionTemplates_Edit)),\n tap(hasRight => (this.hasEditRight = hasRight))\n );\n this.hasEditRight$.subscribe().untilDestroyed(this);\n }\n\n checkEditRight(isEditable: boolean, notify = true): boolean {\n if (!isEditable) {\n this.snackbarService.warning(SnackbarErrorMessage.CannotEditGlobalTemplate, 5000);\n }\n if (!this.hasEditRight && notify) {\n this.snackbarService.warning(SnackbarErrorMessage.TemplateEditPermissionRequired);\n }\n return isEditable && this.hasEditRight;\n }\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nimport { RestTemplateAreaModel, RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { AreaHelper } from './area.helper';\nimport { AreaModel, AreaSurveyModel } from './template-editor-model';\n\nexport class TemplateEditorContent {\n areas: AreaModel[] = [];\n\n constructor(template?: RestTemplateModel) {\n if (template) {\n this.init(template);\n }\n }\n\n init(template: RestTemplateModel) {\n this.areas = template.inspectionTemplateAreas\n .sort((a, b) => {\n if (a.position > b.position) return 1;\n if (a.position < b.position) return -1;\n return 0;\n })\n .map(area => ({ ...area, areaSurvey: this.jsonToAreaSurveyModel(area.areaSurveyJson) }));\n }\n\n getClonedArea(area: AreaModel) {\n const maxCloneIndex = this.areas\n .filter(e => new RegExp(`^Clone( #[0-9]*)* - ${area.title}$`).test(e.title))\n .map(c => {\n const matches = /Clone #([0-9]+)/.exec(c.title);\n if (!matches?.length) {\n return 1;\n } else {\n return +matches?.[1];\n }\n })\n .reduce((prev, max) => (prev > max ? prev : max), 0);\n\n const title = `Clone${maxCloneIndex + 1 === 1 ? '' : ` #${maxCloneIndex + 1}`} - ${area.title}`;\n const { id, ...rest }: AreaModel = {\n ...area,\n title,\n areaSurvey: {\n ...area.areaSurvey,\n title,\n pages: area.areaSurvey.pages?.map(page => AreaHelper.getClonedItem(page, title)),\n },\n };\n\n return rest;\n }\n\n addArea(area: RestTemplateAreaModel) {\n const index = this.areas.findIndex(e => e.position >= area.position);\n const newArea = { ...area, areaSurvey: this.jsonToAreaSurveyModel(area.areaSurveyJson) };\n if (index >= 0) {\n this.areas.splice(index, 0, newArea);\n for (let i = index + 1; i < this.areas.length; i++) {\n if (this.areas[i - 1] && this.areas[i - 1].position >= this.areas[i].position) {\n this.areas[i].position = this.areas[i - 1].position + 1;\n }\n }\n } else {\n this.areas.push(newArea);\n }\n }\n\n replaceTempAreaWithRestArea(id: number, restArea: RestTemplateAreaModel) {\n this.areas = this.areas.map(area => {\n if (area.id === id) {\n return { ...restArea, areaSurvey: this.jsonToAreaSurveyModel(area.areaSurveyJson) };\n } else {\n return area;\n }\n });\n }\n\n removeArea(id: number) {\n this.areas = [...this.areas.filter(item => item.id !== id)];\n }\n\n private jsonToAreaSurveyModel(areaSurveyJson: string): AreaSurveyModel {\n const areaSurvey = JSON.parse(areaSurveyJson) as AreaSurveyModel;\n areaSurvey.pages ??= [];\n areaSurvey.pages.forEach(page => {\n page.uuid = uuidv4();\n page.compulsoryItems ??= [];\n page.elements.forEach(e => {\n if (e.type === 'propertystate') {\n e.items.forEach(item => {\n item.item.onSelect ??= [];\n item.item.isDefault ??= false;\n item.item.showQtyWidget ??= false;\n item.item.timeMultiplier ??= 0;\n item.item.materialsMultiplier ??= 0;\n });\n }\n });\n });\n return areaSurvey;\n }\n\n updateArea(item: AreaModel) {\n this.areas = this.areas.map(innerItem => (innerItem.id !== item.id ? innerItem : { ...innerItem, ...item }));\n }\n}\n","\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n \n clear\n \n
\n \n
\n \n
\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n
\n
\n \n \n \n area\n \n \n \n \n \n Item\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n\n\n \n \n \n \n \n
\n Show Welcome instructions\n \n
\n \n
\n","import { CdkDragDrop, CdkDragStart, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, filter, switchMap, take, tap } from 'rxjs';\n\nimport {\n InspectionType,\n ScoreWeightModes,\n ScoringModels,\n} from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { TemplateEditorBase } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-base/template-editor-base.component';\nimport {\n AreaModel,\n AreaPageModel,\n RepeatableArea,\n TemplateEditorInstructionsDefaultValue,\n} from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { ButtonType } from '@shared/enums/button-type';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { getNextNumberItemName } from '@shared/functions/get-next-number-item-name';\nimport { ConfirmationModalData } from '@shared/interfaces/modal-data';\nimport { SubjectsService } from '@shared/services/subjects.service';\nimport { TemplateManagerService } from '@template/components/templates-manager/template-manager.service';\nimport { RestTemplateAreaModel, RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { TemplateEditorAreaComponent } from './template-editor-area/template-editor-area.component';\nimport { TemplateEditorDialogHeaderComponent } from './template-editor-header/template-editor-header.component';\nimport { TemplateEditorContent } from '../../models/content-god-object';\nimport { getInitialAreaData, scrollIfOutOfDialog } from '../../models/share-methods.function';\nimport { DndExpandableService } from '../../services/dnd-expandable.service';\nimport { CommonExpandWorker } from '../../services/expand-worker';\nimport { ScoringModelsService } from '../../services/scoring-models.service';\nimport { TemplateEditorDialogService } from '../../services/template-editor-dialog.service';\n\nexport type TemplateEditorDialogData = {\n templateId: number;\n templateHeader?: string;\n isGlobal?: boolean;\n isEditable: boolean;\n highLightHeader?: boolean;\n};\n\nexport interface TemplateEditorDialogResult {\n inspectionTemplateId?: number;\n inspectionTemplateName?: string;\n}\n\nconst TEMPLATE_RELOAD_ACTION = 'template-reload-action';\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-dialog',\n templateUrl: './template-editor-dialog.component.html',\n styleUrls: ['./template-editor-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogComponent extends TemplateEditorBase implements OnInit, AfterViewInit {\n expandDuration = this.dndExpandableService.expandDurationMs;\n scrollSpeed = this.dndExpandableService.scrollSpeed;\n readonly ButtonType = ButtonType;\n readonly EIcon = EIcon;\n readonly Math = Math;\n readonly EColorPalette = EColorPalette;\n protected TemplateEditorInstructionsDefaultValue = TemplateEditorInstructionsDefaultValue;\n\n inspectionTemplateContent: TemplateEditorContent = new TemplateEditorContent();\n isBlockDraggable = false;\n isLoading$ = new BehaviorSubject(true);\n uploadingXls = false;\n inspectionTemplate: RestTemplateModel;\n actionItemMenuOpen = false;\n\n isScoringParametersExist = false;\n welcomeInstructionsEditMode = false;\n welcomeInstructionsFocused = false;\n welcomeInstructionsText = '';\n expandWorker: CommonExpandWorker;\n actionInspectionMenuOpen = false;\n scoringForm: FormGroup;\n scoringModelItems = [\n { label: 'No Scoring', value: ScoringModels.None },\n { label: 'Maximum 100', value: ScoringModels.Maximum100 },\n ];\n scoreWeightItems = [];\n\n initFinished = false;\n displayedAreas: AreaModel[] = [];\n displayInterval: ReturnType;\n chunkLength = 2;\n chunkIndex = 0;\n uploadInProgress$ = new BehaviorSubject(false);\n downloadInProgress$ = new BehaviorSubject(false);\n emitAreaSave$ = new BehaviorSubject(null);\n emitItemSave$ = new BehaviorSubject(null);\n focusedAreaId: number;\n focusedItemId: string;\n closeDialog: boolean;\n\n @ViewChild('fileUpload', { static: true }) fileUploader: ElementRef;\n @ViewChild(MatMenuTrigger) matMenuTrigger: MatMenuTrigger;\n @ViewChildren(TemplateEditorAreaComponent) inspectionItems!: QueryList;\n @ViewChild(TemplateEditorDialogHeaderComponent) header: TemplateEditorDialogHeaderComponent;\n @ViewChild('areasDropListGroup') areasDropListGroup!: CdkDropList;\n @Output() scoringChanged = new EventEmitter();\n\n constructor(\n public dialogRef: MatDialogRef,\n store: Store<{}>,\n protected cdr: ChangeDetectorRef,\n private fb: FormBuilder,\n private templateEditorService: TemplateEditorDialogService,\n private templateManagerService: TemplateManagerService,\n private scoringModelsService: ScoringModelsService,\n private modalsService: ModalsService,\n private dndExpandableService: DndExpandableService,\n snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) public data: TemplateEditorDialogData,\n private subjectsService: SubjectsService\n ) {\n super(store, snackbarService);\n }\n\n public get isScoringEnabled(): boolean {\n return this.inspectionTemplate?.scoringModel !== ScoringModels.None;\n }\n\n public get isWelcomeInstructionsEnabled(): boolean {\n return this.inspectionTemplate?.showInstructions;\n }\n\n public get isWelcomeInstructionsDisabled(): boolean {\n return this.inspectionTemplateContent?.areas?.length === 0 && !this.isWelcomeInstructionsEnabled;\n }\n\n ngOnInit(): void {\n this.onGetTemplate();\n\n this.dndExpandableService.dndAreaEvent$\n .pipe(untilDestroyed(this))\n .subscribe(e => {\n if (e === 'end') return;\n setTimeout(\n () => this.dndExpandableService.fixDndCache(this.areasDropListGroup._dropListRef),\n this.dndExpandableService.expandDuration\n );\n })\n .untilDestroyed(this);\n\n this.dialogRef\n .backdropClick()\n .subscribe(() => this.cancel())\n .untilDestroyed(this);\n\n this.dialogRef\n .keydownEvents()\n .pipe(filter(event => event.key === 'Escape'))\n .subscribe(() => this.cancel())\n .untilDestroyed(this);\n\n this.snackbarService.snackBarActions$\n .pipe(\n untilDestroyed(this),\n tap(({ action }) => {\n if (action === TEMPLATE_RELOAD_ACTION) {\n this.isLoading$.next(true);\n this.snackbarService.resetSnackbarActions();\n this.onGetTemplate();\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.scoringModelsService.scoringModel$\n .pipe(untilDestroyed(this))\n .subscribe(model => {\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n onScoringModelChange(newModel: ScoringModels): void {\n this.scoringModelsService.setScoringModel(newModel);\n }\n\n ngAfterViewInit() {\n if (this.data.highLightHeader) {\n setTimeout(() => {\n this.header?.enterEditMode();\n }, 0);\n }\n }\n\n onGetTemplate(): void {\n (this.data.isGlobal\n ? this.templateManagerService.getTemplate(this.data.templateId)\n : this.templateEditorService.getTemplate(this.data.templateId)\n )\n .pipe(untilDestroyed(this))\n .subscribe(template => this.initTemplate(template))\n .untilDestroyed(this);\n }\n\n initTemplate(template: RestTemplateModel) {\n if (template.inspectionType !== InspectionType.CustomInspection) {\n this.modalsService.openInfoModal({\n title: 'Sorry!',\n content: `${template.name} can’t be edited, please contact support if you need to adjust it.`,\n buttonText: 'OK',\n });\n this.cancel();\n return;\n }\n this.inspectionTemplate = template;\n this.isScoringParametersExist = this.inspectionTemplate.scoringModel > 0;\n\n this.scoringForm = this.fb.group({\n scoringModel: [this.inspectionTemplate?.scoringModel || ScoringModels.None],\n });\n\n this.scoringForm\n .get('scoringModel')\n .valueChanges.pipe(untilDestroyed(this))\n .subscribe(value => this.scoringChange(value))\n .untilDestroyed(this);\n\n this.inspectionTemplateContent.init(template);\n this.welcomeInstructionsText = template?.instructionsText ?? '';\n this.startDisplayInChunks();\n if (this.scoringForm.get('scoringModel').value === ScoringModels.Maximum100) {\n this.initScoringWeights();\n }\n this.scoringModelsService.combinedWeights$\n .pipe(untilDestroyed(this))\n .subscribe(customWeights => {\n const combinedWeights = [\n ...this.scoreWeightItems.filter(item => item.value !== 0),\n ...customWeights.map(weight => ({ label: `${weight}%`, value: weight })),\n ];\n this.scoreWeightItems = combinedWeights;\n this.cdr.markForCheck();\n })\n .untilDestroyed(this);\n\n this.isLoading$.next(false);\n this.uploadingXls = false;\n }\n\n startDisplayInChunks(): void {\n this.displayNextChunk();\n this.displayInterval = setInterval(() => {\n if (this.chunkIndex * this.chunkLength < this.inspectionTemplateContent.areas.length) {\n this.displayNextChunk();\n } else {\n clearInterval(this.displayInterval);\n }\n }, 500);\n\n setTimeout(() => {\n this.initFinished = true;\n }, 510);\n }\n\n displayNextChunk(): void {\n const start = this.chunkIndex * this.chunkLength;\n const end = start + this.chunkLength;\n const nextChunk = this.inspectionTemplateContent.areas.slice(start, end);\n this.displayedAreas = [...this.displayedAreas, ...nextChunk];\n this.chunkIndex++;\n this.cdr.markForCheck();\n }\n\n initScoringWeights = () => {\n const standardWeights = [100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0];\n const otherWeights = new Set();\n\n this.inspectionTemplateContent.areas.forEach((area: AreaModel) => {\n if (area.scoreWeight && !standardWeights.includes(area.scoreWeight)) {\n otherWeights.add(area.scoreWeight);\n }\n\n area.areaSurvey.pages.forEach((page: AreaPageModel) => {\n if (page.scoreWeight && !standardWeights.includes(page.scoreWeight)) {\n otherWeights.add(page.scoreWeight);\n }\n });\n });\n\n Array.from(otherWeights).forEach(weight => {\n this.scoringModelsService.addCustomWeight(weight);\n });\n };\n\n add(isParentless = false) {\n const title = getNextNumberItemName(\n isParentless ? 'Item ' : 'Area ',\n this.inspectionTemplateContent.areas,\n e => e.title\n );\n this.templateEditorService.itemFocused$\n .pipe(take(1))\n .subscribe(focusItem => {\n const area: RestTemplateAreaModel = {\n title,\n scoreWeightMode: ScoreWeightModes.Automatic,\n scoreWeight: 100,\n areaSurveyJson: JSON.stringify(getInitialAreaData(title, isParentless)),\n position: focusItem != null ? focusItem.position + 1 : this.inspectionTemplateContent.areas.length,\n } as RestTemplateAreaModel;\n\n this.addInternal(area);\n })\n .untilDestroyed(this);\n }\n\n clone(area: AreaModel) {\n const { areaSurvey, ...props } = this.inspectionTemplateContent.getClonedArea(area);\n const clonedArea: RestTemplateAreaModel = {\n ...props,\n areaSurveyJson: JSON.stringify(areaSurvey),\n position: area.position + 1,\n } as RestTemplateAreaModel;\n\n this.addInternal(clonedArea);\n }\n\n private addInternal(area: RestTemplateAreaModel) {\n if (!this.checkEditRight()) {\n return;\n }\n\n area.inspectionTemplateId = this.inspectionTemplate.id;\n\n const tempId = Math.min(0, ...this.inspectionTemplateContent.areas.map(e => -e.id)) - 1;\n this.inspectionTemplateContent.addArea({ ...area, id: tempId });\n this.cdr.markForCheck();\n setTimeout(() => {\n const areaId = `template-area-${Math.abs(tempId)}`;\n const element = document.getElementById(areaId);\n if (element) {\n scrollIfOutOfDialog(element);\n }\n }, 1000);\n\n this.templateEditorService\n .updateAreasPosition(this.inspectionTemplateContent.areas, TEMPLATE_RELOAD_ACTION)\n .pipe(untilDestroyed(this))\n .subscribe({\n next: responses => {\n responses.forEach(r => {\n if (r) {\n const [id, restArea] = r;\n this.inspectionTemplateContent.replaceTempAreaWithRestArea(tempId, restArea);\n this.cdr.markForCheck();\n setTimeout(() => {\n const item = this.inspectionItems.find(c => c.area.id === id);\n item?.enterEditMode();\n const element = (item as any)?.__ngContext__?.native as HTMLElement;\n if (element) scrollIfOutOfDialog(element);\n });\n }\n });\n },\n error: err => {\n this.inspectionTemplateContent.areas = this.inspectionTemplateContent.areas.filter(el => el.id !== tempId);\n },\n })\n .untilDestroyed(this);\n }\n\n enterPressed(item: AreaModel) {\n if (!this.checkEditRight()) {\n return;\n }\n const index = this.inspectionTemplateContent.areas.findIndex(itemInner => itemInner.id === item.id);\n if (index === this.inspectionTemplateContent.areas.length - 1) {\n const isParentless = item.areaSurvey.pages.length == 1 && !item.areaSurvey.pages[0].pageType;\n this.add(!!isParentless);\n } else {\n const id = this.inspectionTemplateContent.areas[index + 1].id;\n const selectedItem = this.inspectionItems.find(c => c.area.id === id);\n selectedItem?.enterEditMode();\n\n const element = (selectedItem as any)?.__ngContext__?.native as HTMLElement;\n if (element) scrollIfOutOfDialog(element);\n }\n }\n\n trackBy(_index: number, item: AreaModel) {\n return item?.id;\n }\n\n dropDnd(event: CdkDragDrop) {\n if (!this.checkEditRight()) {\n return;\n }\n this.dndExpandableService.endDnd(true);\n if (event.container != event.previousContainer) {\n return;\n }\n if (event.previousIndex == event.currentIndex) {\n return;\n }\n moveItemInArray(this.inspectionTemplateContent.areas, event.previousIndex, event.currentIndex);\n this.templateEditorService\n .updateAreasPosition(this.inspectionTemplateContent.areas, TEMPLATE_RELOAD_ACTION)\n .subscribe()\n .untilDestroyed(this);\n }\n\n startDnd(event: CdkDragStart) {\n if (!this.checkEditRight()) {\n return;\n }\n this.dndExpandableService.startDnd(event, true);\n }\n\n remove(item: AreaModel) {\n if (!this.checkEditRight()) {\n return;\n }\n this.templateEditorService.removeArea(item.id).subscribe().untilDestroyed(this);\n this.inspectionTemplateContent.removeArea(item.id);\n this.dndExpandableService.viewportZoneChanging.next(null);\n }\n\n repeatableChange([type, id]: [RepeatableArea, number]) {\n if (!this.checkEditRight()) {\n return;\n }\n let shouldBathroomRepeatable = false;\n let shouldBedroomRepeatable = false;\n let shouldHalfBathroomRepeatable = false;\n let shouldAnyBathroomRepeatable = false;\n let shouldPostCompleteSurveyRepeatable = false;\n\n const indexBathroom = this.inspectionTemplate.additionalBathroomInspectionTemplateAreaIds?.indexOf(id) ?? -1;\n const indexBedroom = this.inspectionTemplate.additionalBedroomInspectionTemplateAreaIds?.indexOf(id) ?? -1;\n const indexHalfBathroom =\n this.inspectionTemplate.additionalHalfBathRoomInspectionTemplateAreaIds?.indexOf(id) ?? -1;\n const indexAnyBathroom = this.inspectionTemplate.additionalAnyBathRoomInspectionTemplateAreaIds?.indexOf(id) ?? -1;\n const indexdPostCompleteSurvey =\n this.inspectionTemplate.postCompleteSurveyInspectionTemplateAreaIds?.indexOf(id) ?? -1;\n\n switch (type) {\n case RepeatableArea.Bathroom:\n if (indexBathroom < 0) {\n shouldBathroomRepeatable = true;\n }\n break;\n case RepeatableArea.PostCompleteSurvey:\n if (indexdPostCompleteSurvey < 0) {\n shouldPostCompleteSurveyRepeatable = true;\n }\n break;\n case RepeatableArea.Bedroom:\n if (indexBedroom < 0) {\n shouldBedroomRepeatable = true;\n }\n break;\n case RepeatableArea.HalfBathroom:\n if (indexHalfBathroom < 0) {\n shouldHalfBathroomRepeatable = true;\n }\n break;\n case RepeatableArea.AnyBathRoom:\n if (indexAnyBathroom < 0) {\n shouldAnyBathroomRepeatable = true;\n }\n break;\n }\n const doCheck = (\n field:\n | 'additionalBedroomInspectionTemplateAreaIds'\n | 'additionalBathroomInspectionTemplateAreaIds'\n | 'additionalHalfBathRoomInspectionTemplateAreaIds'\n | 'additionalAnyBathRoomInspectionTemplateAreaIds'\n | 'postCompleteSurveyInspectionTemplateAreaIds',\n indexRepeatable: number,\n shouldRepeatable: boolean\n ) => {\n if (indexRepeatable >= 0 && !shouldRepeatable) {\n this.inspectionTemplate[field]?.splice(indexRepeatable, 1);\n }\n if (indexRepeatable < 0 && shouldRepeatable) {\n this.inspectionTemplate[field] ??= [];\n this.inspectionTemplate[field].push(id);\n }\n };\n doCheck('additionalBedroomInspectionTemplateAreaIds', indexBedroom, shouldBedroomRepeatable);\n doCheck('additionalBathroomInspectionTemplateAreaIds', indexBathroom, shouldBathroomRepeatable);\n doCheck('additionalHalfBathRoomInspectionTemplateAreaIds', indexHalfBathroom, shouldHalfBathroomRepeatable);\n doCheck('additionalAnyBathRoomInspectionTemplateAreaIds', indexAnyBathroom, shouldAnyBathroomRepeatable);\n doCheck(\n 'postCompleteSurveyInspectionTemplateAreaIds',\n indexdPostCompleteSurvey,\n shouldPostCompleteSurveyRepeatable\n );\n\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n }\n\n areaChange(item: AreaModel) {\n if (item?.id && item.id < 0) return;\n if (!this.initFinished) return;\n if (!this.checkEditRight()) {\n return;\n }\n this.templateEditorService\n .updateArea(item, TEMPLATE_RELOAD_ACTION)\n .subscribe(() => {\n if (this.closeDialog) this.dialogRef.close();\n })\n .untilDestroyed(this);\n this.inspectionTemplateContent.updateArea(item);\n this.dndExpandableService.viewportZoneChanging.next(null);\n }\n\n setFocusedAreaId(id: number): void {\n this.focusedAreaId = id;\n }\n\n setFocusedItemId(id: string): void {\n this.focusedItemId = id;\n }\n\n removeTemplate() {\n if (!this.checkEditRight()) {\n return;\n }\n const data: ConfirmationModalData = {};\n this.templateEditorService\n .openRemovalTemplateModal(this.inspectionTemplate, data)\n .afterClosed()\n .pipe(filter(result => result === DialogResult.Success))\n .subscribe(() => {\n this.templateEditorService\n .removeTemplate(this.inspectionTemplate)\n .subscribe(() => this.dialogRef.close())\n .untilDestroyed(this);\n })\n .untilDestroyed(this);\n }\n\n headerChange(header: string) {\n if (!this.checkEditRight()) {\n return;\n }\n this.inspectionTemplate.name = header;\n this.updateCurrentTemplate();\n }\n\n descriptionChange(description: string) {\n if (!this.checkEditRight()) {\n return;\n }\n this.inspectionTemplate.description = description;\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n }\n\n residentSignatureChange() {\n if (!this.checkEditRight()) {\n return;\n }\n this.inspectionTemplate.residentSignatureRequired = !this.inspectionTemplate.residentSignatureRequired;\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n }\n\n pmSignatureChange() {\n if (!this.checkEditRight()) {\n return;\n }\n this.inspectionTemplate.hidePropertyManagerSignature = !this.inspectionTemplate.hidePropertyManagerSignature;\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n }\n\n showDefaultAnswersChange() {\n if (!this.checkEditRight()) {\n return;\n }\n this.inspectionTemplate.showDefaultAnswersInTheReport = !this.inspectionTemplate.showDefaultAnswersInTheReport;\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n }\n\n welcomeInstructionsChange() {\n if (!this.checkEditRight()) {\n return;\n }\n if (this.inspectionTemplate.showInstructions) {\n this.inspectionTemplate.showInstructions = false;\n } else {\n this.inspectionTemplate.showInstructions = true;\n }\n this.cdr.markForCheck();\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n }\n\n inspectionScoringChange() {\n if (!this.checkEditRight()) {\n return;\n }\n if (this.inspectionTemplate.scoringModel === ScoringModels.None) {\n this.scoringForm.get('scoringModel').setValue(ScoringModels.Maximum100);\n } else {\n this.scoringForm.get('scoringModel').setValue(ScoringModels.None);\n }\n }\n\n scoringChange(value: any) {\n if (!this.checkEditRight()) {\n return;\n }\n const selectedScoringModel = value as ScoringModels;\n if (selectedScoringModel !== undefined && selectedScoringModel !== null) {\n this.inspectionTemplate.scoringModel = selectedScoringModel;\n this.templateEditorService.editTemplate(this.inspectionTemplate).subscribe().untilDestroyed(this);\n\n this.scoringModelsService.setScoringModel(selectedScoringModel);\n }\n this.cdr.detectChanges();\n }\n\n updateCurrentTemplate() {\n this.templateEditorService\n .editCustomInspectionTemplate(\n this.inspectionTemplate.id,\n {\n inspectionName: this.inspectionTemplate.name,\n isRequired: this.inspectionTemplate.customInspectionIsRequired,\n },\n TEMPLATE_RELOAD_ACTION\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n cancel() {\n setTimeout(() => {\n if (this.welcomeInstructionsFocused) {\n this.leaveInstructionsEditMode(true);\n } else if (this.focusedAreaId) {\n this.emitAreaSave$.next(this.focusedAreaId);\n this.focusedAreaId = null;\n this.closeDialog = true;\n } else if (this.focusedItemId) {\n this.emitItemSave$.next(this.focusedItemId);\n this.focusedItemId = null;\n this.closeDialog = true;\n } else {\n this.dialogRef.close();\n }\n });\n }\n\n checkEditRight(notify = true): boolean {\n if (!this.initFinished) return;\n return super.checkEditRight(this.data.isEditable, notify);\n }\n\n onMatDialogScroll(event: Event) {\n this.dndExpandableService.viewportZoneChanging.next(null);\n }\n\n downloadFile() {\n this.downloadInProgress$.next(true);\n this.templateEditorService\n .downloadTemplateFile(this.inspectionTemplate.id)\n .subscribe(data => {\n const url = window.URL.createObjectURL(new Blob([data]));\n const a = document.createElement('a');\n a.href = url;\n a.download = this.inspectionTemplate.name + '.xlsx';\n document.body.appendChild(a);\n a.click();\n window.URL.revokeObjectURL(url);\n a.remove();\n this.downloadInProgress$.next(false);\n })\n .untilDestroyed(this);\n }\n\n uploadFile() {\n this.fileUploader.nativeElement.value = '';\n this.fileUploader.nativeElement.click();\n }\n\n fileChange(event: Event) {\n this.uploadInProgress$.next(true);\n const file = (event.target as HTMLInputElement).files[0];\n this.uploadingXls = true;\n this.templateEditorService\n .uploadTemplateFile(this.inspectionTemplate.id, file)\n .pipe(\n tap(result => {\n this.uploadInProgress$.next(false);\n if (result.errors.length > 0) {\n this.modalsService.openInfoModal({\n title: 'Awww shucks. Import failed 💩',\n content: result.errors[0].message ?? 'Your import failed',\n });\n this.uploadingXls = false;\n }\n }),\n filter(result => result.state === 'Success'),\n tap(() => {\n this.isLoading$.next(true);\n this.cdr.markForCheck();\n }),\n switchMap(() => this.templateEditorService.getTemplate(this.inspectionTemplate.id))\n )\n .subscribe(template => this.initTemplate(template))\n .untilDestroyed(this);\n }\n\n enterInstructionsEditMode() {\n if (!this.checkEditRight()) {\n return;\n }\n this.welcomeInstructionsEditMode = true;\n this.welcomeInstructionsFocused = true;\n this.cdr.detectChanges();\n }\n\n leaveInstructionsEditMode(closeDialog = false) {\n if (!this.checkEditRight()) {\n return;\n }\n this.welcomeInstructionsEditMode = false;\n const getValue = this.welcomeInstructionsText?.trim() ?? '';\n this.inspectionTemplate.instructionsText = getValue;\n this.templateEditorService\n .editTemplate(this.inspectionTemplate)\n .subscribe(() => {\n if (closeDialog || this.closeDialog) this.dialogRef.close();\n this.closeDialog = false;\n })\n .untilDestroyed(this);\n }\n\n onSaveArea(): void {\n this.subjectsService.templatesFocusOutEditor$.next();\n }\n}\n","\n \n
\n {{ header }}\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\n\nimport { TemplateEditorBase } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-base/template-editor-base.component';\nimport { TemplateEditorDefaultValue } from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-header',\n templateUrl: './template-editor-header.component.html',\n styleUrls: ['./template-editor-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogHeaderComponent extends TemplateEditorBase {\n editMode = false;\n\n @Input() isEditable: boolean;\n @Input() header: string;\n @ViewChild('headerName', { read: ElementRef, static: false }) headerName: ElementRef;\n @Output() headerChanged = new EventEmitter();\n\n constructor(protected store: Store<{}>, protected cdr: ChangeDetectorRef, snackbarService: SnackbarService) {\n super(store, snackbarService);\n }\n\n enterEditMode() {\n if (!this.checkEditRight() || this.editMode) {\n return;\n }\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.headerName.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n nameChanged($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n this.headerName.nativeElement.blur();\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.header !== value) {\n if (!value) {\n value = TemplateEditorDefaultValue;\n this.headerName.nativeElement.textContent = TemplateEditorDefaultValue;\n }\n this.headerChanged.emit(value);\n }\n\n setTimeout(() => {\n const div = this.headerName.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n\n checkEditRight(notify = true): boolean {\n return super.checkEditRight(this.isEditable, notify);\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { getNextNumberItemName } from '@shared/functions/get-next-number-item-name';\n\nimport {\n AreaModel,\n AreaPageElementAny,\n AreaPageElementHoursModel,\n AreaPageElementQuantityModel,\n AreaPageElementQuestionModel,\n AreaPageElementRatingGroupModel,\n AreaPageModel,\n AreaSurveyModel,\n TemplateEditorRatingGroup,\n} from './template-editor-model';\n\nconst quantityItem: AreaPageElementQuantityModel = {\n title: 'Enter a quantity:',\n name: 'quantity:',\n type: 'quantity',\n isRequired: null,\n guid: '{put random guide here}',\n value: null,\n};\n\nconst hoursItem: AreaPageElementHoursModel = {\n title: 'Enter hours:',\n name: 'hours:',\n type: 'hours',\n isRequired: null,\n guid: '{put random guide here}',\n value: null,\n};\n\nexport class AreaHelper {\n static addItem(area: AreaModel, title: string, isParentless = false) {\n const isParentlessExist = area.areaSurvey.pages?.length === 1 && !area.areaSurvey.pages[0]?.pageType;\n const name = isParentlessExist ? 'page1' : getNextNumberItemName('page', area.areaSurvey.pages);\n const item: AreaPageModel = {\n uuid: uuidv4(),\n name,\n title,\n sparePartsGroups: area.areaSurvey?.sparePartsGroups ?? [],\n showSpareParts: area.areaSurvey?.showSpareParts ?? false,\n overrideSparePartsSettings: false,\n compulsoryItems: [],\n ...(!isParentless && { pageType: 'area' }),\n elements: [\n // default invisible items for mobile\n {\n type: 'file',\n name: 'Pictures:',\n title: 'Pictures:',\n description: 'Pictures:',\n },\n {\n type: 'comment',\n name: 'Enter a note:',\n title: 'Enter a note:',\n },\n ],\n };\n // replace if parentless\n if (isParentlessExist) {\n area.areaSurvey.pages = [item];\n } else {\n area.areaSurvey.pages.push(item);\n }\n return name;\n }\n\n static removeItem(area: AreaModel, name: string) {\n area.areaSurvey.pages = [...area.areaSurvey.pages.filter(item => item.name !== name)];\n }\n\n static getClonedItem(item: AreaPageModel, areaTitle: string = null): AreaPageModel {\n return {\n ...item,\n ...(areaTitle && !item.pageType ? { title: areaTitle } : {}),\n elements: item.elements?.map(element => ({\n ...element,\n ...(element.guid ? { guid: uuidv4() } : {}),\n })),\n };\n }\n\n static cloneItem(area: AreaModel, item: AreaPageModel) {\n const maxCloneIndex = area.areaSurvey.pages\n .filter(e => new RegExp(`^Clone( #[0-9]*)* - ${item.title}$`).test(e.title))\n .map(c => {\n const matches = /Clone #([0-9]+)/.exec(c.title);\n if (!matches?.length) {\n return 1;\n } else {\n return +matches?.[1];\n }\n })\n .reduce((prev, max) => (prev > max ? prev : max), 0);\n\n const name = getNextNumberItemName('page', area.areaSurvey.pages);\n const newItem: AreaPageModel = {\n ...AreaHelper.getClonedItem(item),\n uuid: uuidv4(),\n name,\n title: `Clone${maxCloneIndex + 1 === 1 ? '' : ` #${maxCloneIndex + 1}`} - ${item.title}`,\n };\n area.areaSurvey.pages.push(newItem);\n return name;\n }\n\n static addOrReplaceRatingGroup(areaSurvey: AreaSurveyModel, item: AreaPageModel, group: TemplateEditorRatingGroup) {\n const items = cloneDeep(group.items);\n\n const newRatingElement: AreaPageElementRatingGroupModel = {\n type: 'propertystate',\n name: uuidv4() + group.name,\n title: group.name,\n isRequired: true,\n guid: uuidv4(),\n ratingGroupId: group.id,\n items: items,\n };\n this.addNewElementToItem(\n areaSurvey,\n { ...item, elements: (item?.elements ?? []).filter(element => element.type !== 'propertystate') },\n newRatingElement\n );\n }\n\n static addQuestion(areaSurvey: AreaSurveyModel, item: AreaPageModel, question: string, defaultValue = true) {\n const guid: string = uuidv4();\n const newQuestionAreaPageElementModel: AreaPageElementQuestionModel = {\n type: 'boolean',\n name: guid + question,\n title: question,\n guid: guid,\n ...(defaultValue != null ? { defaultValue } : {}),\n };\n\n this.addNewElementToItem(areaSurvey, item, newQuestionAreaPageElementModel);\n\n return guid;\n }\n\n private static addNewElementToItem(areaSurvey: AreaSurveyModel, item: AreaPageModel, element: AreaPageElementAny) {\n const foundItem = areaSurvey.pages.find(innerItem => item.name === innerItem.name);\n if (!foundItem) {\n return;\n }\n const elements = [...(item.elements ?? [])];\n const fileElementIndex = elements.findIndex(el => el.type.toLowerCase() === 'file');\n const commentElementIndex = elements.findIndex(el => el.type.toLowerCase() === 'comment');\n const minIndex = Math.min(commentElementIndex, fileElementIndex);\n\n AreaHelper.updateItem(areaSurvey, {\n ...foundItem,\n elements:\n minIndex === -1\n ? [...elements, element]\n : [...elements.slice(0, minIndex), element, ...elements.slice(minIndex)],\n });\n }\n\n static updateItem(areaSurvey: AreaSurveyModel, item: AreaPageModel) {\n (item.elements.find(e => e.type == 'propertystate') as AreaPageElementRatingGroupModel)?.items.forEach(e => {\n if (e.item.showHoursWidget != null) {\n if (e.item.showHoursWidget && !e.item.onSelect.includes('showHoursWidget')) {\n e.item.onSelect = e.item.onSelect.concat('showHoursWidget');\n }\n\n if (!e.item.showHoursWidget && e.item.onSelect.includes('showHoursWidget')) {\n e.item.onSelect = e.item.onSelect.filter(x => x != 'showHoursWidget');\n }\n\n e.item.showHoursWidget = null;\n }\n if (e.item.ticketRequired != null) {\n if (e.item.ticketRequired && !e.item.onSelect.includes('ticketRequired')) {\n e.item.onSelect = e.item.onSelect.concat('ticketRequired');\n }\n\n if (!e.item.ticketRequired && e.item.onSelect.includes('ticketRequired')) {\n e.item.onSelect = e.item.onSelect.filter(x => x != 'ticketRequired');\n }\n\n e.item.ticketRequired = null;\n }\n if (e.item.showSpareParts != null) {\n if (e.item.showSpareParts && !e.item.onSelect.includes('showSpareParts')) {\n e.item.onSelect = e.item.onSelect.concat('showSpareParts');\n }\n\n if (!e.item.showSpareParts && e.item.onSelect.includes('showSpareParts')) {\n e.item.onSelect = e.item.onSelect.filter(x => x != 'showSpareParts');\n }\n\n e.item.showSpareParts = null;\n }\n if (e.item.sparePartsSelectionRequired != null) {\n if (e.item.sparePartsSelectionRequired && !e.item.onSelect.includes('sparePartsSelectionRequired')) {\n e.item.onSelect = e.item.onSelect.concat('sparePartsSelectionRequired');\n }\n\n if (!e.item.sparePartsSelectionRequired && e.item.onSelect.includes('sparePartsSelectionRequired')) {\n e.item.onSelect = e.item.onSelect.filter(x => x != 'sparePartsSelectionRequired');\n }\n\n e.item.sparePartsSelectionRequired = null;\n }\n });\n\n const shouldHaveQuantity =\n (item.elements.find(e => e.type == 'propertystate') as AreaPageElementRatingGroupModel)?.items.some(\n e => e.item.showQtyWidget\n ) ?? false;\n const shouldHaveHours =\n (item.elements.find(e => e.type == 'propertystate') as AreaPageElementRatingGroupModel)?.items.some(e =>\n e.item.onSelect.includes('showHoursWidget')\n ) ?? false;\n\n const quantityIndex = item.elements.findIndex(e => e.type == 'quantity');\n const hoursIndex = item.elements.findIndex(e => e.type == 'hours');\n\n if (shouldHaveQuantity && quantityIndex == -1) {\n item.elements.push({ ...quantityItem, guid: uuidv4() });\n }\n if (!shouldHaveQuantity && quantityIndex != -1) {\n item.elements.splice(quantityIndex, 1);\n }\n\n if (shouldHaveHours && hoursIndex == -1) {\n item.elements.push({ ...hoursItem, guid: uuidv4() });\n }\n if (!shouldHaveHours && hoursIndex != -1) {\n item.elements.splice(hoursIndex, 1);\n }\n areaSurvey.pages = areaSurvey.pages.map(innerItem =>\n innerItem.uuid !== item.uuid ? innerItem : { ...innerItem, ...item }\n );\n }\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nimport { AreaHelper } from './area.helper';\nimport { AreaModel, AreaSurveyModel } from './template-editor-model';\n\nexport function scrollIfOutOfDialog(element: HTMLElement) {\n if (element && !checkIfElementVisible(element)) {\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest',\n });\n }\n}\n\nexport function checkIfElementVisible(element: HTMLElement, extraHeightSpace: number = null) {\n if (!element) return false;\n\n let matDialogElement = element.parentElement;\n while (matDialogElement.tagName.toUpperCase() != 'MAT-DIALOG-CONTENT' && matDialogElement.parentElement) {\n matDialogElement = matDialogElement.parentElement;\n }\n if (!matDialogElement) {\n return true;\n }\n const rect = element.getBoundingClientRect();\n const dialogRect = matDialogElement.getBoundingClientRect();\n\n const bottom = rect.top + (typeof extraHeightSpace === 'number' ? -extraHeightSpace : rect.height);\n const top = rect.top + (typeof extraHeightSpace === 'number' ? rect.height + extraHeightSpace : 0);\n\n return bottom <= dialogRect.top + dialogRect.height && top >= dialogRect.top;\n}\n\nexport function getUpdatedAreaModel(area: AreaModel) {\n // update title for parentless this.isParentless ? [{ ...this.area.areaSurvey.pages[0], title: value }]\n const isParentlesss = area.areaSurvey.pages?.length === 1 && !area.areaSurvey.pages[0].pageType;\n return {\n ...area,\n ...(isParentlesss ? { title: area.areaSurvey.pages[0].title } : {}),\n areaSurvey: { ...area.areaSurvey, pages: [...area.areaSurvey.pages] },\n };\n}\n\nexport function getInitialAreaData(\n title: string,\n isParentless = false,\n pageTitle = 'Item 1',\n forNewTemplate = false,\n ratingGroup = null\n): AreaSurveyModel {\n const areaSurvey: AreaSurveyModel = {\n title: title,\n logoPosition: 'right',\n pages: [\n {\n uuid: uuidv4(),\n name: `page1`,\n title: isParentless ? title : pageTitle,\n compulsoryItems: [],\n ...(!isParentless && { pageType: 'area' }),\n elements: [\n // default invisible items for mobile\n {\n type: 'file',\n name: 'Pictures:',\n title: 'Pictures:',\n description: 'Pictures:',\n },\n {\n type: 'comment',\n name: 'Enter a note:',\n title: 'Enter a note:',\n },\n ],\n },\n ],\n };\n if (forNewTemplate) {\n AreaHelper.addQuestion(areaSurvey, areaSurvey.pages[0], 'Is it incredible?');\n AreaHelper.addQuestion(areaSurvey, areaSurvey.pages[0], 'is it truly incredible?', false);\n }\n if (ratingGroup) {\n AreaHelper.addOrReplaceRatingGroup(areaSurvey, areaSurvey.pages[0], ratingGroup);\n }\n return areaSurvey;\n}\n\nexport function handleMaxLimitContentEditable(event: KeyboardEvent, divElement: HTMLDivElement, limit: number) {\n if (\n divElement.textContent.length > limit - 1 &&\n event.keyCode != 8 &&\n event.keyCode != 37 &&\n event.keyCode != 38 &&\n event.keyCode != 39 &&\n event.keyCode != 40 &&\n event.keyCode != 46\n ) {\n event.preventDefault();\n }\n\n if (divElement.textContent.length > limit - 1) {\n divElement.textContent = divElement.textContent?.substring(0, limit);\n setTimeout(() => {\n const range = document.createRange();\n range.setStart(divElement, divElement.textContent.length);\n range.setEnd(divElement, divElement.textContent.length);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n}\n","import { ScoreWeightModes, ScoringModels } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { RestTemplateAreaModel } from '@template/models/rest-template-model.interface';\n\nexport const TemplateEditorDefaultValue = 'Edit me!';\nexport const TemplateEditorInstructionsDefaultValue = 'Provide some helpful instructions...';\nexport const TemplateMaxDescriptionLength = 150;\nexport const TemplateMaxAreaAndItemLength = 256;\n\nexport enum RepeatableArea {\n Bedroom,\n Bathroom,\n HalfBathroom,\n AnyBathRoom,\n PostCompleteSurvey,\n}\n\nexport interface AreaModel extends RestTemplateAreaModel {\n areaSurvey: AreaSurveyModel;\n}\n\nexport interface AreaSurveyModel {\n title: string;\n pages: AreaPageModel[];\n logoPosition?: string;\n surveyId?: string;\n scoringModel?: ScoringModels;\n resultScore?: number;\n scoreWeightMode?: ScoreWeightModes;\n scoreWeight?: number;\n itemsScore?: number;\n showInstructions?: boolean;\n instructions?: string;\n sparePartsGroups?: number[];\n showSpareParts?: boolean;\n}\n\nexport type CompulsoryItems =\n | 'photoRequired'\n | 'commentRequired'\n | 'showHoursWidget'\n | 'hasInstructions'\n | 'ticketRequired'\n | 'showSpareParts'\n | 'sparePartsSelectionRequired';\n\nexport interface AreaPageModel {\n uuid: string;\n name: string;\n title: string;\n instructions?: string;\n compulsoryItems: CompulsoryItems[];\n pageType?: 'area';\n timeCost?: number;\n materials?: number;\n laborCost?: number;\n scoreWeightMode?: ScoreWeightModes;\n scoreWeight?: number;\n elements: AreaPageElementAny[];\n overrideSparePartsSettings?: boolean;\n showSpareParts?: boolean;\n sparePartsGroups?: number[];\n showInstructions?: boolean;\n}\n\nexport interface RestTemplateEditorRatingGroup {\n name: string;\n itemsJson: string;\n id: number;\n}\n\nexport interface TemplateEditorRatingGroupItem {\n item: {\n backgroundColor: string;\n emoji: string;\n id: string;\n onSelect: CompulsoryItems[];\n text: string;\n isDefault: boolean;\n showQtyWidget?: boolean;\n ticketRequired?: boolean;\n showSpareParts?: boolean;\n sparePartsSelectionRequired?: boolean;\n showHoursWidget?: boolean;\n timeMultiplier?: number;\n materialsMultiplier?: number;\n resultScore?: number;\n };\n}\n\nexport interface TemplateEditorRatingGroup {\n name: string;\n items: TemplateEditorRatingGroupItem[];\n id: number;\n}\n\nexport interface TemplateEditorSparePartsGroup {\n sparePartIds: number[];\n createdBy: number;\n isDeleted: boolean;\n dateCreated: string;\n title: string;\n id: number;\n propertyOrPortfolioId?: number;\n parentGroupId?: number;\n hierarchyPath: string;\n}\n\nexport interface TemplateEditorEmojiContent {\n id: 0;\n emojiCode: string;\n title: string;\n keywords: string[];\n assetRelativeUrl: string;\n}\n\nexport type AreaPageElementAny =\n | AreaPageElementFileModel\n | AreaPageElementCommentModel\n | AreaPageElementRatingGroupModel\n | AreaPageElementQuestionModel\n | AreaPageElementQuantityModel\n | AreaPageElementHoursModel;\n\nexport abstract class AreaPageElementModel {\n type: 'file' | 'comment' | 'boolean' | 'propertystate' | 'quantity' | 'hours';\n title: string;\n name: string;\n guid?: string;\n}\n\nexport class AreaPageElementFileModel extends AreaPageElementModel {\n type: 'file';\n description: string;\n}\n\nexport class AreaPageElementQuantityModel extends AreaPageElementModel {\n type: 'quantity';\n isRequired?: boolean;\n value: any;\n}\n\nexport class AreaPageElementHoursModel extends AreaPageElementModel {\n type: 'hours';\n isRequired?: boolean;\n value: any;\n}\n\nexport class AreaPageElementCommentModel extends AreaPageElementModel {\n type: 'comment';\n}\n\nexport class AreaPageElementRatingGroupModel extends AreaPageElementModel {\n type: 'propertystate';\n ratingGroupId: number;\n items: TemplateEditorRatingGroupItem[];\n isRequired?: boolean;\n}\n\nexport class AreaPageElementQuestionModel extends AreaPageElementModel {\n type: 'boolean';\n guid: string;\n name: string;\n title: string;\n defaultValue?: boolean;\n}\n\nexport interface RestCustomInspectionModel {\n id?: number;\n inspectionName: string;\n isRequired?: boolean;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nimport { TemplateEditorEmojiContent } from '../models/template-editor-model';\n\nclass EmojiData {\n assets: any[];\n ddd: number;\n fr: number;\n h: number;\n ip: number;\n layers: any[];\n markers: any[];\n nm: string;\n op: number;\n v: string;\n w: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AnimatedEmojiService extends PuSubscribable {\n protected readonly CACHE: { [assetPath: string]: ReplaySubject } = {};\n private _emojiContent: ReplaySubject;\n\n constructor(private service: RestapiService, private http: HttpClient) {\n super();\n }\n\n getEmojiContent() {\n if (!this._emojiContent) {\n this._emojiContent = new ReplaySubject(1);\n this.service\n .getData('emojiContent')\n .subscribe({\n next: emojiContent => this._emojiContent.next(emojiContent),\n error: error => this._emojiContent.error(error),\n })\n .untilDestroyed(this);\n }\n return this._emojiContent.asObservable();\n }\n\n preCacheAllEmoji() {\n this.getEmojiContent()\n .subscribe(emojis => {\n emojis.forEach(e => {\n this.loadEmoji(e.assetRelativeUrl).subscribe().untilDestroyed(this);\n });\n })\n .untilDestroyed(this);\n }\n\n loadEmoji(assetPath: string): Observable {\n if (!this.CACHE[assetPath]) {\n this.CACHE[assetPath] = new ReplaySubject(1);\n this.http\n .get(assetPath)\n .subscribe(data => this.CACHE[assetPath].next(data))\n .untilDestroyed(this);\n }\n\n return this.CACHE[assetPath];\n }\n}\n","import { CdkDragStart, CdkDropList, DropListRef } from '@angular/cdk/drag-drop';\nimport { Injectable } from '@angular/core';\nimport { Subject, auditTime, filter, map } from 'rxjs';\n\nexport class DndEvent {\n event: 'start' | 'end';\n areaLevel: boolean;\n}\n\nexport class ExpandEvent {\n isExpanded: boolean;\n areaId?: number;\n}\n\n@Injectable()\nexport class DndExpandableService {\n readonly extraBufferHeight = 250;\n readonly scrollSpeed = 5;\n readonly expandDuration = 0;\n readonly expandDurationMs = `${this.expandDuration}ms`;\n\n _dndEvent = new Subject();\n dndAreaEvent$ = this._dndEvent.pipe(\n filter(e => e.areaLevel),\n map(e => e.event)\n );\n dndItemEvent$ = this._dndEvent.pipe(\n filter(e => !e.areaLevel),\n map(e => e.event)\n );\n expandAllEvent = new Subject();\n expandAreaEvent$ = this.expandAllEvent.pipe(\n filter(e => e.areaId == null),\n map(e => e.isExpanded)\n );\n expandItemEvent$ = this.expandAllEvent.pipe(filter(e => e.areaId != null));\n\n viewportZoneChanging = new Subject();\n viewportZoneChanging$ = this.viewportZoneChanging.pipe(auditTime(100));\n\n fixDndCache(dropListRef: DropListRef>) {\n /* dnd cached all objects and its position instead of working with DOM directly\n Because of that we should recached it after collapsing by `_cacheItemPositions` method\n Also we should reset all transform state that can be already changed before collapsing (as collapsing take some time)\n Some more details: https://github.com/angular/components/issues/14703 */\n\n //We need siblings dropLists as we have `cdkDropListGroup`\n const allActiveDropLists: DropListRef>[] = [...dropListRef['_siblings'], dropListRef];\n\n allActiveDropLists.forEach(dropList => {\n const nodes = (dropList.element as HTMLElement).children;\n for (let i = 0; i < nodes.length; i++) {\n const e = nodes[i] as HTMLElement;\n e.style.transform = '';\n }\n dropList?.['_cacheParentPositions']();\n //check if this container was already inited\n if (dropList?.['_sortStrategy']?.['_activeDraggables']) {\n dropList?.['_sortStrategy']?.['_cacheItemPositions']();\n }\n });\n }\n\n startDnd(event: CdkDragStart, areaLevel: boolean) {\n this._dndEvent.next({ event: 'start', areaLevel });\n }\n\n endDnd(areaLevel: boolean) {\n setTimeout(() => this._dndEvent.next({ event: 'end', areaLevel }), 100);\n }\n}\n","import { ChangeDetectorRef } from '@angular/core';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { Observable, filter, map } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { DndExpandableService } from './dnd-expandable.service';\n\nconst sizeForCollapsedItem = 20;\nconst sizeForWarningMessage = 50;\n\nexport abstract class CommonExpandWorker {\n constructor(\n protected cdr: ChangeDetectorRef,\n protected dndExpandableService: DndExpandableService,\n protected snackbarService: SnackbarService\n ) {}\n\n protected _parentAreaId: number;\n protected _isExpanded = true;\n private _itemsAmount: number;\n singleExpandClick = true;\n isContentVisible = true;\n isExpandedState = true;\n\n get isExpanded() {\n return this._isExpanded;\n }\n\n set isExpanded(value: boolean) {\n if (value && !this.isContentVisible) {\n this.isContentVisible = value;\n this.cdr.markForCheck();\n setTimeout(() => {\n this._isExpanded = value;\n this.cdr.markForCheck();\n }, 25);\n } else {\n this._isExpanded = value;\n }\n if (!value) {\n this.dndExpandableService.viewportZoneChanging.next(null);\n }\n }\n\n init(itemsAmount: number, parentAreaId: number, component: PuSubscribable): void {\n this._parentAreaId = parentAreaId;\n this._itemsAmount = itemsAmount;\n this._isExpanded = itemsAmount <= sizeForCollapsedItem;\n this.isContentVisible = this.isExpanded;\n this.getDndEvent()\n .pipe(untilDestroyed(component))\n .subscribe(e => {\n if (e == 'start') {\n this.isExpandedState = this.isExpanded;\n this.isExpanded = false;\n } else {\n this.isExpanded = this.isExpandedState;\n }\n this.cdr.markForCheck();\n })\n .untilDestroyed(component);\n this.getExpandEvent()\n .pipe(untilDestroyed(component))\n .subscribe(e => {\n this.isExpanded = e;\n this.cdr.markForCheck();\n })\n .untilDestroyed(component);\n }\n\n abstract getDndEvent(): Observable<'start' | 'end'>;\n\n abstract getExpandEvent(): Observable;\n\n toggleExpand() {\n this.singleExpandClick = true;\n setTimeout(() => {\n if (this.singleExpandClick) {\n this.isExpanded = !this.isExpanded;\n this.cdr.markForCheck();\n }\n }, 200);\n }\n\n toggleExpandAll() {\n this.singleExpandClick = false;\n if (!this.isContentVisible && this._itemsAmount >= sizeForWarningMessage) {\n this.snackbarService.warning('Woah… big… this may take a while');\n setTimeout(() => {\n this.dndExpandableService.expandAllEvent.next({ isExpanded: !this.isExpanded, areaId: this._parentAreaId });\n setTimeout(() => this.snackbarService.dismiss(), this.dndExpandableService.expandDuration + 100);\n }, 100);\n } else {\n this.dndExpandableService.expandAllEvent.next({ isExpanded: !this.isExpanded, areaId: this._parentAreaId });\n }\n }\n}\n\nexport class AreaExpandWorker extends CommonExpandWorker {\n getDndEvent(): Observable<'start' | 'end'> {\n return this.dndExpandableService.dndAreaEvent$;\n }\n\n getExpandEvent(): Observable {\n return this.dndExpandableService.expandAreaEvent$;\n }\n}\n\nexport class ItemExpandWorker extends CommonExpandWorker {\n getDndEvent(): Observable<'start' | 'end'> {\n return this.dndExpandableService.dndItemEvent$;\n }\n\n getExpandEvent(): Observable {\n return this.dndExpandableService.expandItemEvent$.pipe(\n filter(e => e.areaId == this._parentAreaId),\n map(e => e.isExpanded)\n );\n }\n}\n\nexport class WrapperExpandWorker extends CommonExpandWorker {\n init() {\n //\n }\n\n getDndEvent(): Observable<'start' | 'end'> {\n return null;\n }\n\n getExpandEvent(): Observable {\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nimport { ScoringModels } from '@main-application/inspections/models/rest-inspections-model.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ScoringModelsService {\r\n private scoringModelSubject = new BehaviorSubject(0);\r\n private scoreWeightItems = [\r\n { label: 'Auto', value: 100 },\r\n { label: '90%', value: 90 },\r\n { label: '80%', value: 80 },\r\n { label: '70%', value: 70 },\r\n { label: '60%', value: 60 },\r\n { label: '50%', value: 50 },\r\n { label: '40%', value: 40 },\r\n { label: '30%', value: 30 },\r\n { label: '20%', value: 20 },\r\n { label: '10%', value: 10 },\r\n { label: 'Custom', value: 0 },\r\n ];\r\n\r\n private customWeightsSubject = new BehaviorSubject([]);\r\n\r\n scoringModel$ = this.scoringModelSubject.asObservable();\r\n combinedWeights$ = this.customWeightsSubject.asObservable();\r\n\r\n setScoringModel(value: ScoringModels): void {\r\n this.scoringModelSubject.next(value);\r\n }\r\n\r\n getCombinedWeights(): { label: string; value: number }[] {\r\n const customWeights = this.customWeightsSubject.getValue();\r\n const allWeights = [\r\n ...this.scoreWeightItems,\r\n ...customWeights\r\n .filter(weight => !this.scoreWeightItems.some(item => item.value === weight))\r\n .map(weight => ({ label: `${weight}%`, value: weight })),\r\n ];\r\n\r\n allWeights.sort((a, b) => {\r\n if (a.value === 100) return -1; // 'Auto' always the first\r\n if (b.value === 100) return 1;\r\n if (a.value === 0) return 1; // 'Custom' always the last\r\n if (b.value === 0) return -1;\r\n return b.value - a.value;\r\n });\r\n\r\n return allWeights;\r\n }\r\n\r\n addCustomWeight(weight: number): void {\r\n const customWeights = this.customWeightsSubject.getValue();\r\n if (!customWeights.includes(weight)) {\r\n this.customWeightsSubject.next([...customWeights, weight]);\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { isEmpty, isEqual, isUndefined } from 'lodash';\n\nimport {\n SparePartsPageAreaModel,\n SparePartsPageModel,\n SparePartsPageModelExtendedParams,\n SparePartsSetterParamsModel,\n} from '../models/spare-parts.model';\nimport { AreaModel, AreaPageModel } from '../models/template-editor-model';\n\n@Injectable()\nexport class SparePartsService {\n // Item Method\n public isUseSameForParentSparePartsButtonActive({ parent, item }: SparePartsPageModel): boolean {\n if (!item?.overrideSparePartsSettings && item?.showSpareParts) return true;\n\n // If parent sparePartsGroups is empty\n if (isEmpty(parent?.areaSurvey?.sparePartsGroups)) return false;\n // If sparePartsGroups is not equal\n if (!isEqual(parent?.areaSurvey?.sparePartsGroups, item?.sparePartsGroups)) return false;\n // if overrideSparePartsSettings is false and showSpareParts is true\n return !item?.overrideSparePartsSettings && item?.showSpareParts;\n }\n // Item Method\n public isDoNotUseSparePartsButtonActive({ parent, item }: SparePartsPageModel): boolean {\n const isEmptyParent = isEmpty(parent?.areaSurvey?.sparePartsGroups);\n const isEmptyTarget = isEmpty(item?.sparePartsGroups);\n\n if (isEmptyParent && isEmptyTarget) return true;\n\n return item?.overrideSparePartsSettings && !item?.showSpareParts;\n }\n // Item Method\n public isCustomListSparePartsButtonActive({ parent, item }: SparePartsPageModel): boolean {\n const isParentSelected = this.isUseSameForParentSparePartsButtonActive({ parent, item });\n const isTargetSelected = this.isDoNotUseSparePartsButtonActive({ parent, item });\n\n return !isParentSelected && !isTargetSelected;\n }\n\n // Item Method\n public isSparePartsGroupButtonActive({ parent, item }: SparePartsPageModel): boolean {\n if (this.isUseSameForParentSparePartsButtonActive({ parent, item })) return true;\n if (!this.isDoNotUseSparePartsButtonActive({ parent, item })) return true;\n if (!isEmpty(item?.sparePartsGroups)) return true;\n\n return false;\n }\n // Item Method\n public useSetOrUnsetSparePartsGroupItem({ item, id }: SparePartsPageModelExtendedParams) {\n const sparePartsGroups = this.useHelperSetter({ sparePartsGroups: item?.sparePartsGroups, id });\n const showSpareParts = sparePartsGroups.length > 0;\n\n return {\n sparePartsGroups,\n showSpareParts,\n overrideSparePartsSettings: true,\n };\n }\n\n // Area Method\n\n public useSetOrUnsetSparePartsGroupsArea({ parent, id }: SparePartsPageAreaModel): AreaModel {\n const sparePartsGroups = this.useHelperSetter({ sparePartsGroups: parent?.areaSurvey?.sparePartsGroups, id });\n const getCopyedArea = this.useCopySparePartsGroupsArea({\n ...parent,\n areaSurvey: {\n ...parent?.areaSurvey,\n sparePartsGroups,\n },\n });\n return getCopyedArea;\n }\n\n public useCopySparePartsGroupsArea(parent: AreaModel): AreaModel {\n const getAreaSurvey = parent?.areaSurvey;\n const getPages = getAreaSurvey.pages;\n const sparePartsGroups = getAreaSurvey?.sparePartsGroups;\n const showSpareParts = sparePartsGroups.length > 0;\n\n const getPageOverrideSparePartsSettings = (page: AreaPageModel) => {\n // If nothiing to copy\n if (!showSpareParts) return false;\n\n // By Default Value if not setted\n if (isUndefined(page?.overrideSparePartsSettings)) return false;\n\n return page?.overrideSparePartsSettings;\n };\n\n const getPageSparePartsGroupsItem = (page: AreaPageModel) => {\n // If nothiing to copy\n if (!showSpareParts) return [];\n\n // By Default Value if not setted\n if (isUndefined(page?.sparePartsGroups)) return sparePartsGroups;\n if (this.isUseSameForParentSparePartsButtonActive({ parent, item: page })) return sparePartsGroups;\n if (this.isDoNotUseSparePartsButtonActive({ parent, item: page })) return [];\n return page?.sparePartsGroups ?? sparePartsGroups;\n };\n\n const getNewPages = getPages.map(page => {\n const getShowSpareParts = !showSpareParts ? false : page?.showSpareParts ?? true;\n const getOverrideSparePartsSettings = getPageOverrideSparePartsSettings(page);\n\n const getTransformedPage = {\n ...page,\n showSpareParts: getShowSpareParts,\n overrideSparePartsSettings: getOverrideSparePartsSettings,\n };\n return {\n ...getTransformedPage,\n sparePartsGroups: getPageSparePartsGroupsItem(getTransformedPage),\n };\n });\n\n return {\n ...parent,\n areaSurvey: {\n ...getAreaSurvey,\n sparePartsGroups,\n showSpareParts,\n pages: getNewPages,\n },\n };\n }\n\n // Private Global Method\n private useHelperSetter(params: SparePartsSetterParamsModel): number[] {\n const sparePartsGroups = [...(params?.sparePartsGroups ?? [])];\n\n const index = sparePartsGroups.indexOf(params.id);\n if (index === -1) {\n sparePartsGroups.push(params.id);\n } else {\n sparePartsGroups.splice(index, 1);\n }\n return sparePartsGroups;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { sortBy } from 'lodash';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n ReplaySubject,\n combineLatest,\n finalize,\n forkJoin,\n of,\n retry,\n switchMap,\n throwError,\n} from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\n\nimport { RestapiService, RestapiServiceWithoutTimezone } from '@app/services/restapi.service';\nimport { SurveysService } from '@app/services/surveys.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport {\n TemplateEditorDialogComponent,\n TemplateEditorDialogData,\n TemplateEditorDialogResult,\n} from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-dialog.component';\nimport {\n AreaModel,\n AreaPageElementRatingGroupModel,\n AreaSurveyModel,\n RestCustomInspectionModel,\n RestTemplateEditorRatingGroup,\n TemplateEditorRatingGroup,\n TemplateEditorRatingGroupItem,\n TemplateEditorSparePartsGroup,\n} from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { ConfirmationModalData } from '@shared/interfaces/modal-data';\nimport { RestTemplateAreaModel, RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { TemplatesCacheService } from './templates-cache.service';\nimport { getInitialAreaData } from '../models/share-methods.function';\n\nclass UploadResult {\n errors: {\n errorType: number;\n message: string;\n }[];\n state: 'Success' | 'Error';\n}\n\n// TODO remove ALL direct API calls from this service. Put it in ApiTemplateService\n\n@Injectable()\nexport class TemplateEditorDialogService extends PuSubscribable {\n private readonly route = 'inspections/';\n private _templatesLoading = new BehaviorSubject(false);\n templatesLoading$ = this._templatesLoading.asObservable();\n private _templateDeleting = new BehaviorSubject(false);\n templateDeleting$ = this._templateDeleting.asObservable();\n\n private _templateCreating = new BehaviorSubject(false);\n templateCreating$ = this._templateCreating.asObservable();\n\n private _questionIdFocused = new BehaviorSubject(null);\n questionIdFocused$ = this._questionIdFocused.asObservable();\n private _ratingGroups: ReplaySubject;\n\n private _sparePartsGroups: ReplaySubject;\n\n private _itemFocused = new BehaviorSubject(null);\n itemFocused$ = this._itemFocused.asObservable();\n\n requestTemplateCreating = new EventEmitter();\n\n constructor(\n private simpleService: RestapiServiceWithoutTimezone,\n private service: RestapiService,\n private modalsService: ModalsService,\n private surveysService: SurveysService,\n private snackbarService: SnackbarService,\n private templatesCacheService: TemplatesCacheService,\n private dialog: MatDialog\n ) {\n super();\n }\n\n focusQuestion(id: string) {\n this._questionIdFocused.next(id);\n }\n\n focusItem(item: AreaModel) {\n if (item) {\n this._itemFocused.next(item);\n }\n }\n\n leaveFocus(id: number) {\n setTimeout(() => {\n if (this._itemFocused.value?.id == id) {\n this._itemFocused.next(null);\n }\n }, 500);\n }\n\n openTemplateEditorModal(data: TemplateEditorDialogData) {\n return this.dialog.open(\n TemplateEditorDialogComponent,\n {\n data: data,\n width: '744px',\n maxHeight: '100vh',\n panelClass: 'template-editor-modal-container',\n disableClose: true,\n autoFocus: 'dialog',\n }\n );\n }\n\n getTemplates(preserveInspectionId?: number) {\n this._templatesLoading.next(true);\n const cache = this.templatesCacheService.getTemplatesCache();\n const action$ = cache?.length\n ? of(cache)\n : this.service\n .getData(\n this.route + 'template/list?filterUnavailableTemplates=false&doNotReturnContent=true'\n )\n .pipe(tap(templates => this.templatesCacheService.updateTemplatesCache([...templates])));\n return action$.pipe(\n map(templates => {\n if (!templates?.length) {\n return [];\n }\n const filteredTemplates = templates.filter(\n template =>\n (template.isAvailable && !template.isDeleted && !template.isScheduledForDeletion) ||\n template.id === preserveInspectionId\n );\n return filteredTemplates.sort((a, b) => {\n if (a.name === b.name) return 0;\n return a.name > b.name ? 1 : -1;\n });\n }),\n finalize(() => {\n this._templatesLoading.next(false);\n }),\n catchError(err => this.handleError(err, SnackbarErrorMessage.LoadingTemplatesList))\n );\n }\n\n private getRatingGroupsInternal() {\n this.service\n .getData(this.route + 'ratingGroups')\n .pipe(\n map(ratingGroups => {\n return ratingGroups.map(group => {\n const { itemsJson, ...rest } = group;\n return { ...rest, items: JSON.parse(itemsJson) as TemplateEditorRatingGroupItem[] };\n });\n })\n )\n .subscribe({\n next: ratingGroups => this._ratingGroups.next(ratingGroups),\n error: error => this._ratingGroups.error(error),\n })\n .untilDestroyed(this);\n }\n\n private prepareSparePartsGroupsViewInternal(\n sourceData: TemplateEditorSparePartsGroup[]\n ): TemplateEditorSparePartsGroup[] {\n sourceData = sourceData.filter(x => x.propertyOrPortfolioId == null);\n const hashByParentId = sourceData.reduce(function (map, obj) {\n let list: TemplateEditorSparePartsGroup[];\n const key = obj.parentGroupId ?? -1;\n\n if ((list = map[key]) == null) {\n map[key] = list = [];\n }\n\n list.push(obj);\n\n return map;\n }, {});\n\n const dataToProcess = hashByParentId[-1] as TemplateEditorSparePartsGroup[];\n\n for (let counter = 0; counter < dataToProcess.length; counter++) {\n //adding parent to hierarchy name\n const parent = dataToProcess[counter];\n const children = hashByParentId[parent.id] as TemplateEditorSparePartsGroup[];\n\n if (children != null) {\n children.forEach(child => {\n child.hierarchyPath = (child.hierarchyPath != null ? ' > ' : '') + parent.title + ' > ' + child.title;\n\n dataToProcess.push(child);\n });\n }\n }\n\n sourceData\n .filter(item => item.hierarchyPath == null)\n .forEach(item => {\n item.hierarchyPath = item.title;\n });\n\n return sortBy(sourceData, [group => group.hierarchyPath?.toLowerCase()]);\n }\n\n private getSparePartsGroupsInternal() {\n this.service\n .getData('SparePartGroup')\n .subscribe({\n next: sparePartGroups => this._sparePartsGroups.next(this.prepareSparePartsGroupsViewInternal(sparePartGroups)),\n error: error => this._sparePartsGroups.error(error),\n })\n .untilDestroyed(this);\n }\n\n getRatingGroups() {\n if (!this._ratingGroups) {\n this._ratingGroups = new ReplaySubject(1);\n this.getRatingGroupsInternal();\n }\n return this._ratingGroups.asObservable();\n }\n\n getSparePartsGroups() {\n if (!this._sparePartsGroups) {\n this._sparePartsGroups = new ReplaySubject(1);\n this.getSparePartsGroupsInternal();\n }\n return this._sparePartsGroups.asObservable();\n }\n\n updateRatingGroup(ratingGroup: AreaPageElementRatingGroupModel) {\n if (!ratingGroup.ratingGroupId) {\n return EMPTY;\n }\n const restRatingGroup: RestTemplateEditorRatingGroup = {\n id: ratingGroup.ratingGroupId,\n name: ratingGroup.items.map(item => item.item.text).join('/'),\n itemsJson: JSON.stringify(ratingGroup.items),\n };\n\n return this.service.post(this.route + 'ratingGroups', restRatingGroup).pipe(\n tap(() => this.getRatingGroupsInternal()),\n catchError(err => this.handleError(err, SnackbarErrorMessage.WhileUpdatingRatingGroup))\n );\n }\n\n getTemplate(templateId: number) {\n return this.service.getData(this.route + 'template/' + templateId);\n }\n\n addArea(area: RestTemplateAreaModel, reloadAction?: string) {\n const serverRequest = { ...area, id: undefined };\n return this.surveysService.add(serverRequest).pipe(\n retry({ count: 1, delay: 300 }),\n tap(() => this.templatesCacheService.resetTemplatesCache()),\n catchError(err => this.handleTemplateError(err, reloadAction)),\n switchMap(id => this.surveysService.get(id).pipe(map(area => [id, area] as const)))\n );\n }\n\n removeArea(id: number) {\n return this.surveysService.delete(id);\n }\n\n removeTemplate(template: RestTemplateModel) {\n this._templateDeleting.next(true);\n return this.service.post('inspections/template/delete', template.id).pipe(\n catchError(err => {\n if (err?.error?.['ErrorCode'] === 'inspection_template_delete_unavailable') {\n this.snackbarService.error(SnackbarErrorMessage.RemovingTemplateInUse);\n } else {\n this.snackbarService.error(SnackbarErrorMessage.RemovingTemplate);\n }\n\n return throwError(() => err);\n }),\n tap(() => {\n this.snackbarService.success(`${template.name} deleted`);\n this.templatesCacheService.resetTemplatesCache();\n }),\n finalize(() => {\n this._templateDeleting.next(false);\n })\n );\n }\n\n updateArea(area: AreaModel, reloadAction?: string) {\n const { areaSurvey, ...rest } = area;\n // filter empty elements\n const areaSurveyToSave: AreaSurveyModel = {\n ...areaSurvey,\n pages: [\n ...areaSurvey?.pages.map(page => {\n return { ...page, elements: [...(page?.elements.filter(element => element.title !== '') ?? [])] };\n }),\n ],\n };\n const updatedArea: RestTemplateAreaModel = { ...rest, areaSurveyJson: JSON.stringify(areaSurveyToSave) };\n return this.surveysService\n .update(updatedArea)\n .pipe(catchError(err => this.handleError(err, SnackbarErrorMessage.UpdatingTemplate)));\n }\n\n updateAreasPosition(areas: AreaModel[], reloadAction: string) {\n const serverCalls = areas\n .filter((e, i) => {\n const shouldBeUpdated = e.position != i || e.id < 0;\n e.position = i;\n return shouldBeUpdated;\n })\n .map(area => (area.id > 0 ? this.updateArea(area) : this.addArea(area, reloadAction)));\n return forkJoin(serverCalls);\n }\n\n openRemovalTemplateModal(inspectionTemplate: RestTemplateModel, data: ConfirmationModalData = {}) {\n return this.modalsService.openConfirmationModal(\n {\n ...{\n title: `Delete ${inspectionTemplate.name} template?`,\n titleCss: 'fade-truncate',\n content: `This template will be deleted forever and ever. Are you feeling this confident? 💪`,\n cancelLabel: 'Yikes, no!',\n confirmLabel: 'Yes, delete it',\n confirmColor: 'warn',\n },\n ...data,\n },\n 360\n );\n }\n\n // CI1 methods\n\n addCustomInspectionTemplateWithPredefinedItems(data: RestCustomInspectionModel) {\n this._templateCreating.next(true);\n return combineLatest([\n this.service.post(this.route + 'template/addCustomInspection', data),\n this.getRatingGroups(),\n ]).pipe(\n switchMap(([id, ratingGroups]) => {\n const area: RestTemplateAreaModel = {\n title: `Beautiful Area`,\n inspectionTemplateId: id,\n position: 0,\n areaSurveyJson: JSON.stringify(\n getInitialAreaData(`Beautiful Area`, false, 'Incredible Item', true, ratingGroups[0])\n ),\n } as RestTemplateAreaModel;\n\n return this.addArea(area);\n }),\n map(([_areaId, area]) => area.inspectionTemplateId),\n tap(() => this.templatesCacheService.resetTemplatesCache()),\n finalize(() => this._templateCreating.next(false))\n );\n }\n\n editCustomInspectionTemplate(inspectionId: number, data: RestCustomInspectionModel, reloadAction: string) {\n return this.service\n .post(this.route + 'template/editCustomInspection/' + inspectionId, data)\n .pipe(\n retry({ count: 1, delay: 300 }),\n tap(() => this.templatesCacheService.resetTemplatesCache()),\n catchError(err => this.handleTemplateError(err, reloadAction))\n );\n }\n\n editTemplate(data: RestTemplateModel) {\n return this.service.post(this.route + 'template/edit', data).pipe(\n tap(() => this.templatesCacheService.resetTemplatesCache()),\n catchError(err => this.handleError(err, SnackbarErrorMessage.UpdatingTemplate))\n );\n }\n\n downloadTemplateFile(id: number) {\n return this.simpleService.download(this.route + `template/downloadInspectionTemplateRawReport/${id}`);\n }\n\n uploadTemplateFile(id: number, data: File) {\n return this.simpleService.upload(this.route + `template/uploadInspectionTemplateRaw/${id}`, data);\n }\n\n private handleTemplateError(err: HttpErrorResponse, reloadAction: string): Observable {\n err?.error?.message && reloadAction\n ? this.snackbarService.error(\n `Your changes did not save. Reload`\n )\n : this.snackbarService.error(SnackbarErrorMessage.UpdatingTemplate);\n\n return throwError(() => err);\n }\n\n private handleError(err: HttpErrorResponse, type: SnackbarErrorMessage): Observable {\n this.snackbarService.error(type);\n return throwError(() => err);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TemplatesCacheService {\n private _templatesCache = new BehaviorSubject([]);\n templatesCache$ = this._templatesCache.asObservable();\n\n getTemplatesCache(): RestTemplateModel[] {\n return this._templatesCache.getValue();\n }\n\n updateTemplatesCache(templates: RestTemplateModel[]) {\n this._templatesCache.next(templates);\n }\n\n resetTemplatesCache() {\n this._templatesCache.next([]);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { AreaPageElementQuestionModel } from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { TemplateEditorDialogService } from '@main-application/shared/template-editor-dialog/services/template-editor-dialog.service';\nimport { EIcon } from '@shared/enums/icon.enum';\n\nconst placeholders = [\n 'Is this a question?',\n 'Is this a really good question?',\n 'Is this a truly amazing question?',\n 'Is this an outstandingly awesome question?',\n 'Is this the most perspicacious question ever asked?',\n 'Is this the penultimate metaversal question ever pontificated?',\n 'Do I, human, know what penultimate means?',\n 'Have we gone too deep?',\n '(introspectively) Should we go deeper?',\n '(pensively) When does it stop?',\n 'The real question is: will you stop first?',\n 'Human realizes they are in combat with AI infinity and will lose?',\n 'Should human see a doctor about its use of free time?',\n 'Should human doctor a see about its free of use time?',\n 'Wait, what?',\n 'What, what?',\n 'What what in the house!?',\n 'Or the apartment?',\n 'AI for the win?',\n 'Does this really never end?',\n 'I, human, hereby understand this never ends?',\n 'Did you sign?',\n 'Are you human?',\n 'OK so you did sign or you are human?',\n 'Yes I signed?',\n 'Yes I am human?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Does human know they’ve won?',\n 'Human loses. AI wins. Mic has been dropped?',\n];\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-question-item',\n templateUrl: './template-editor-question.component.html',\n styleUrls: ['./template-editor-question.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogQuestionComponent extends PuSubscribable implements AfterViewInit {\n @Input() set index(value: number) {\n this.placeholder = placeholders[Math.min(placeholders.length - 1, value)];\n this.cdr.markForCheck();\n }\n\n @Input() set questionItem(value: AreaPageElementQuestionModel) {\n this._questionItem = value;\n this.initQuestion(value);\n }\n\n get questionItem() {\n return this._questionItem;\n }\n\n @Output() enterPressed = new EventEmitter();\n placeholder = placeholders[0];\n\n private _questionItem: AreaPageElementQuestionModel;\n\n protected readonly EIcon = EIcon;\n @Output() questionItemChange = new EventEmitter();\n @Output() remove = new EventEmitter();\n @ViewChild('questionTitleElement', { read: ElementRef, static: false })\n questionTitleElement: ElementRef;\n @ViewChild('inputElement', { read: ElementRef, static: false }) inputElement: ElementRef;\n\n questionWidth: string;\n isViewInited = false;\n\n constructor(private cdr: ChangeDetectorRef, private templateEditorDialogService: TemplateEditorDialogService) {\n super();\n }\n\n ngAfterViewInit() {\n this.isViewInited = true;\n this.templateEditorDialogService.questionIdFocused$\n .pipe(untilDestroyed(this))\n .subscribe(id => {\n if (id === this.questionItem.guid) {\n this.inputElement.nativeElement.focus({\n preventScroll: true,\n });\n }\n })\n .untilDestroyed(this);\n }\n\n initQuestion(value: AreaPageElementQuestionModel) {\n if (this.isViewInited) {\n return this.setQuestionValue(value?.title || this.placeholder);\n }\n setTimeout(() => this.initQuestion(value), 100);\n }\n\n setQuestionValue(question: string) {\n this.questionTitleElement.nativeElement.textContent = question;\n this.questionWidth = this.questionTitleElement.nativeElement.offsetWidth + 'px';\n this.cdr.detectChanges();\n }\n\n removeClick() {\n this.remove.emit(this.questionItem);\n }\n\n toggleDefaultValue(value: boolean) {\n const { defaultValue, ...rest } = this.questionItem;\n if (defaultValue === undefined || defaultValue !== value) {\n this.questionItemChange.emit({ ...rest, defaultValue: value });\n } else {\n this.questionItemChange.emit({ ...rest });\n }\n }\n\n questionChange(event: FocusEvent) {\n const value = event.target instanceof HTMLInputElement && event.target.value;\n this.questionItemChange.emit({ ...this.questionItem, title: value, name: this.questionItem.guid + value });\n }\n\n keyPressed($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n const value = $event.target instanceof HTMLInputElement && $event.target.value;\n this.enterPressed.emit({ ...this.questionItem, title: value, name: this.questionItem.guid + value });\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n updateWidth(event: Event) {\n if (!(event instanceof InputEvent) || !(event.target instanceof HTMLInputElement)) {\n return;\n }\n let value = event.target.value; //NOET-9631 allow to enter ? .replace(/\\?/g, ''); // + '?'; NOET-8453 removed question mark\n value = value === '?' ? '' : value;\n if (value !== event.target.value) {\n event.target.value = value;\n event.target.selectionStart = event.target.selectionEnd = value.length - 1;\n }\n this.questionTitleElement.nativeElement.textContent = value || this.placeholder;\n\n this.questionWidth = this.questionTitleElement.nativeElement.offsetWidth + 'px';\n }\n}\n","
\n
\n \n \n \n \n \n \n
\n \n \n\n
\n \n \n \n
\n
\n","import { EIcon } from '@shared/enums/icon.enum';\n\nexport const RatingGroupList = [\n {\n name: 'showSpareParts',\n label: 'Show Spare Parts',\n icon: EIcon.EYE,\n },\n {\n name: 'showQtyWidget',\n label: 'Show Qty',\n icon: EIcon.PLUS_ONE,\n },\n {\n name: 'showHoursWidget',\n label: 'Show Hours',\n icon: EIcon.CLOCK,\n },\n {\n name: 'ticketRequired',\n label: 'Ticket Required',\n icon: EIcon.TICKET_SIMPLE,\n },\n {\n name: 'sparePartsSelectionRequired',\n label: 'Spare Parts Required',\n icon: EIcon.SETTINGS2,\n },\n];\n","
\n
\n
\n \n \n
\n\n \n \n
\n \n Default Rating\n \n \n
\n \n
\n
\n \n
\n \n Result Score\n \n
\n \n Show Qty\n \n
\n\n \n Show Hours\n \n
\n\n \n Ticket Required\n \n \n \n Show Spare parts\n \n \n \n Spare Parts required\n \n \n
\n
\n \n
\n \n \n \n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n
\n \n \n \n \n\n
\n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n\n \n \n \n
\n\n
\n
\n \n {{ ratingGroupItem.item.text }}\n
\n
\n \n\n\n\n
\n
\n \n Show Qty\n \n \n \n Ticket Required\n \n \n \n Show Hours\n \n \n \n Show Spare Parts\n \n \n \n Spare Parts Required\n \n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { chunk } from 'lodash';\nimport { debounceTime, distinctUntilChanged } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport SwiperCore, { SwiperOptions, Virtual } from 'swiper';\nimport { Swiper } from 'swiper/types';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { RatingGroupList } from '@main-application/shared/template-editor-dialog/datas/rating-group-list.data';\nimport {\n TemplateEditorDefaultValue,\n TemplateEditorEmojiContent,\n TemplateEditorRatingGroupItem,\n} from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { AnimatedEmojiService } from '@main-application/shared/template-editor-dialog/services/animated-emoji.service';\nimport { ScoringModelsService } from '@main-application/shared/template-editor-dialog/services/scoring-models.service';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { SubjectsService } from '@shared/services/subjects.service';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\n\nimport { CompulsoryItems } from '../../../../../../models/template-editor-model';\n\nSwiperCore.use([Virtual]);\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-rating-group-item',\n templateUrl: './template-editor-rating-group-item.component.html',\n styleUrls: ['./template-editor-rating-group-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [],\n})\nexport class TemplateEditorDialogRatingGroupItemComponent extends PuSubscribable implements OnInit, OnChanges {\n @Input() showEmoji = false;\n @Input() ratingGroupItem: TemplateEditorRatingGroupItem;\n @Input() ratingGroupItems: TemplateEditorRatingGroupItem[];\n @Input() showResultScore?: boolean;\n @Input() parentTitle?: string;\n @Input() greatGrandParent: RestTemplateModel;\n @Output() ratingGroupItemChange = new EventEmitter();\n @Output() ratingGroupItemDelete = new EventEmitter();\n @Output() makeDefault = new EventEmitter();\n\n protected readonly TemplateEditorDefaultValue = TemplateEditorDefaultValue;\n protected readonly EIcon = EIcon;\n protected readonly EColorPalette = EColorPalette;\n public ratingGroupList = RatingGroupList;\n\n private cachedRatingGroups: any[] = [];\n private lastRatingGroupItem: TemplateEditorRatingGroupItem | null = null;\n private lastRatingGroupItems: TemplateEditorRatingGroupItem[] | null = null;\n\n public getRatingGroups() {\n if (\n this.lastRatingGroupItem === this.ratingGroupItem &&\n this.lastRatingGroupItems === this.ratingGroupItems &&\n this.cachedRatingGroups.length > 0\n ) {\n return this.cachedRatingGroups;\n }\n\n const getCurrentItem = this.ratingGroupItem;\n const getAllItems = this.ratingGroupItems;\n\n const isItemActive = (name: string, item: TemplateEditorRatingGroupItem) => {\n if (!item) return false;\n if (name === 'showQtyWidget') return item?.item?.showQtyWidget;\n return item?.item?.onSelect?.includes(name as CompulsoryItems);\n };\n\n const getResult = this.ratingGroupList.map(iconItem => {\n const getAllWitchoutCurrent = getAllItems.filter(item => item?.item?.id !== getCurrentItem?.item?.id);\n const isSelectedElsewhere = getAllWitchoutCurrent.some(item => isItemActive(iconItem.name, item));\n const isActive = isItemActive(iconItem.name, getCurrentItem);\n\n return {\n ...iconItem,\n isActive,\n isSelectedElsewhere,\n isShow: isActive || isSelectedElsewhere,\n };\n });\n\n this.lastRatingGroupItem = this.ratingGroupItem;\n this.lastRatingGroupItems = this.ratingGroupItems;\n this.cachedRatingGroups = getResult;\n\n return getResult;\n }\n\n public get getRatingGroupsFiltred() {\n return this.getRatingGroups().filter(item => item.isShow);\n }\n\n form: FormGroup;\n editMode = false;\n emojisOpen = false;\n config: SwiperOptions = {\n virtual: true,\n loop: true,\n initialSlide: -1,\n };\n private swiper: Swiper;\n private emojiPerSlide = 15;\n activeEmojiSlideIndex = 0;\n emojiSlides: TemplateEditorEmojiContent[][] = [];\n resultScoreItems = [];\n\n @ViewChild(MatMenuTrigger) trigger: MatMenuTrigger;\n @ViewChild('ratingName', { read: ElementRef, static: false }) ratingName: ElementRef;\n\n constructor(\n private animatedEmojiService: AnimatedEmojiService,\n private scoringModelsService: ScoringModelsService,\n private cdr: ChangeDetectorRef,\n private fb: FormBuilder,\n private subjectsService: SubjectsService\n ) {\n super();\n }\n\n ngOnInit() {\n this.animatedEmojiService\n .getEmojiContent()\n .pipe(\n untilDestroyed(this),\n tap(emojis => {\n this.emojiSlides = chunk(emojis, this.emojiPerSlide);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.scoringModelsService.scoringModel$\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.ratingGroupItem) {\n this.initForm();\n }\n }\n\n initForm() {\n this.form = this.fb.group({\n timeMultiplier: [this.ratingGroupItem.item.timeMultiplier, Validators.required],\n materialsMultiplier: [this.ratingGroupItem.item.materialsMultiplier, Validators.required],\n showQtyWidget: [this.ratingGroupItem.item.showQtyWidget],\n ticketRequired: [this.ratingGroupItem.item.onSelect.includes('ticketRequired')],\n showHoursWidget: [this.ratingGroupItem.item.onSelect.includes('showHoursWidget')],\n showSpareParts: [this.ratingGroupItem.item.onSelect.includes('showSpareParts')],\n sparePartsSelectionRequired: [this.ratingGroupItem.item.onSelect.includes('sparePartsSelectionRequired')],\n resultScore: [this.ratingGroupItem.item.resultScore ?? 0],\n });\n this.form.valueChanges\n .pipe(\n untilDestroyed(this),\n debounceTime(500),\n distinctUntilChanged(\n (a, b) =>\n a.timeMultiplier == b.timeMultiplier &&\n a.materialsMultiplier == b.materialsMultiplier &&\n a.showQtyWidget == b.showQtyWidget &&\n a.ticketRequired == b.ticketRequired &&\n a.sparePartsSelectionRequired == b.sparePartsSelectionRequired &&\n a.showSpareParts == b.showSpareParts &&\n a.showHoursWidget == b.showHoursWidget &&\n a.resultScore == b.resultScore\n )\n )\n .subscribe(v => this.ratingGroupItemChange.emit({ item: { ...this.ratingGroupItem.item, ...v } }))\n .untilDestroyed(this);\n this.resultScoreItems = [\n { label: '100% of ' + this.parentTitle, value: 100 },\n { label: '75% of ' + this.parentTitle, value: 75 },\n { label: '50% of ' + this.parentTitle, value: 50 },\n { label: '25% of ' + this.parentTitle, value: 25 },\n { label: '0% of ' + this.parentTitle, value: 0 },\n ];\n this.cdr.detectChanges();\n }\n\n onMakeDefault(item: TemplateEditorRatingGroupItem) {\n this.makeDefault.emit(item);\n }\n\n private toggleOnSelect(onSelect: CompulsoryItems) {\n const newItem = {\n item: {\n ...this.ratingGroupItem.item,\n onSelect: this.ratingGroupItem.item.onSelect.includes(onSelect)\n ? this.ratingGroupItem.item.onSelect.filter(onSelectInner => onSelectInner !== onSelect)\n : [...this.ratingGroupItem.item.onSelect, onSelect],\n },\n };\n\n this.ratingGroupItemChange.emit(newItem);\n }\n\n toggleCommentOnSelect() {\n this.toggleOnSelect('commentRequired');\n }\n\n togglePhotoOnSelect() {\n this.toggleOnSelect('photoRequired');\n }\n\n changeIcon(icon: TemplateEditorEmojiContent) {\n this.trigger.closeMenu();\n this.ratingGroupItemChange.emit({ item: { ...this.ratingGroupItem.item, emoji: icon.emojiCode } });\n }\n\n enterEditMode() {\n if (this.editMode) {\n return;\n }\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.ratingName.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n onKeydown($event: KeyboardEvent, value: string) {\n if (\n value?.length >= 13 &&\n !($event.key === 'Backspace' || $event.key === 'Delete' || window.getSelection().getRangeAt(0).toString().length)\n ) {\n $event.stopPropagation();\n $event.preventDefault();\n }\n if ($event.key === 'Enter') {\n this.ratingName.nativeElement.blur();\n $event.stopPropagation();\n $event.preventDefault();\n }\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.ratingGroupItem.item.text !== value) {\n const nodes = this.ratingName.nativeElement.childNodes;\n let textNodes = 0;\n nodes.forEach(e => {\n if (e.nodeType == e.TEXT_NODE) textNodes++;\n });\n if (textNodes > 1) {\n nodes.forEach(e => {\n if (e.nodeType == e.TEXT_NODE) {\n e.remove();\n }\n });\n }\n this.ratingGroupItemChange.emit({\n item: { ...this.ratingGroupItem.item, text: value },\n });\n }\n\n setTimeout(() => {\n const div = this.ratingName.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n\n delete() {\n if (this.editMode) {\n return;\n }\n this.ratingGroupItemDelete.emit();\n }\n\n toggleShowQty(): void {\n this.form.get('showQtyWidget')!.setValue(!this.form.get('showQtyWidget')!.value);\n }\n\n toggleShowHours(): void {\n this.form.get('showHoursWidget')!.setValue(!this.form.get('showHoursWidget')!.value);\n }\n\n toggleTicketRequired(): void {\n this.form.get('ticketRequired')!.setValue(!this.form.get('ticketRequired')!.value);\n }\n\n toggleShowSpareParts(): void {\n this.form.get('showSpareParts')!.setValue(!this.form.get('showSpareParts')!.value);\n }\n\n toggleSparePartsSelectionRequired(): void {\n this.form.get('sparePartsSelectionRequired')!.setValue(!this.form.get('sparePartsSelectionRequired')!.value);\n }\n\n slideLeft() {\n if (this.activeEmojiSlideIndex > 0) {\n this.swiper.slideTo(this.activeEmojiSlideIndex - 1);\n }\n }\n\n public handleClickRatingGroupItem(name: string, event?: MouseEvent) {\n if (event?.shiftKey) event?.stopPropagation();\n if (name === 'showQtyWidget') {\n this.toggleShowQty();\n }\n if (name === 'showHoursWidget') {\n this.toggleShowHours();\n }\n if (name === 'ticketRequired') {\n this.toggleTicketRequired();\n }\n if (name === 'showSpareParts') {\n this.toggleShowSpareParts();\n }\n if (name === 'sparePartsSelectionRequired') {\n this.toggleSparePartsSelectionRequired();\n }\n }\n\n slideRight() {\n if (this.activeEmojiSlideIndex < this.emojiSlides.length) {\n this.swiper.slideTo(this.activeEmojiSlideIndex + 1);\n }\n }\n\n onSwiper($event: any) {\n this.swiper = $event;\n }\n\n setEmojiSlideIndex(index: number) {\n this.swiper.slideTo(index);\n }\n\n emojiSlideChanged([swiper]: [swiper: Swiper]) {\n this.activeEmojiSlideIndex = swiper.activeIndex;\n this.cdr.detectChanges();\n }\n\n public trackByFn(index: number) {\n return index;\n }\n\n onSaveArea(): void {\n this.subjectsService.templatesFocusOutEditor$.next();\n }\n}\n","
\n \n \n \n \n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { take } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { checkIfElementVisible } from '@main-application/shared/template-editor-dialog/models/share-methods.function';\nimport {\n AreaPageElementRatingGroupModel,\n AreaPageModel,\n TemplateEditorRatingGroupItem,\n} from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { AnimatedEmojiService } from '@main-application/shared/template-editor-dialog/services/animated-emoji.service';\nimport { DndExpandableService } from '@main-application/shared/template-editor-dialog/services/dnd-expandable.service';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { SubjectsService } from '@shared/services/subjects.service';\nimport { RestTemplateModel } from '@template/models/rest-template-model.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-rating-group',\n templateUrl: './template-editor-rating-group.component.html',\n styleUrls: ['./template-editor-rating-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogRatingGroupComponent extends PuSubscribable implements OnInit {\n EColorPalette = EColorPalette;\n EIcon = EIcon;\n emojis$ = this.animatedEmojiService.getEmojiContent();\n showEmoji = false;\n\n @Input() ratingGroup: AreaPageElementRatingGroupModel;\n @Input() parent: AreaPageModel;\n @Input() greatGrandParent: RestTemplateModel;\n\n @Output() ratingGroupChange = new EventEmitter();\n\n constructor(\n private snackbarService: SnackbarService,\n private animatedEmojiService: AnimatedEmojiService,\n private cdr: ChangeDetectorRef,\n private dndExpandableService: DndExpandableService,\n private readonly viewRef: ViewContainerRef,\n private subjectsService: SubjectsService\n ) {\n super();\n }\n\n ngOnInit() {\n this.showEmoji = checkIfElementVisible(\n this.viewRef.element.nativeElement,\n this.dndExpandableService.extraBufferHeight\n );\n setTimeout(() => this.recheckShowEmoji(), 50);\n\n this.dndExpandableService.viewportZoneChanging$.subscribe(e => this.recheckShowEmoji()).untilDestroyed(this);\n }\n\n private recheckShowEmoji() {\n const showEmoji = checkIfElementVisible(\n this.viewRef.element.nativeElement,\n this.dndExpandableService.extraBufferHeight\n );\n if (this.showEmoji != showEmoji) {\n this.showEmoji = showEmoji;\n this.cdr.markForCheck();\n }\n }\n\n makeDefault(item: TemplateEditorRatingGroupItem) {\n this.ratingGroupChange.emit({\n ...this.ratingGroup,\n items: this.ratingGroup.items.map(ratingItem => ({\n item: {\n ...ratingItem.item,\n isDefault: ratingItem.item.id === item.item.id && !item.item.isDefault,\n },\n })),\n });\n }\n\n onRatingItemChange(item: TemplateEditorRatingGroupItem) {\n const items = [...this.ratingGroup.items];\n const index = items.findIndex(e => e.item.id == item.item.id);\n if (index < 0) return;\n\n items.splice(index, 1, item);\n this.ratingGroupChange.emit({\n ...this.ratingGroup,\n items: items,\n });\n }\n\n onRatingItemDeleted(id: string) {\n const items = [...this.ratingGroup.items];\n if (items.length < 3) {\n this.snackbarService.error('Inspections require at least 2 ratings');\n return;\n }\n const index = items.findIndex(e => e.item.id == id);\n if (index < 0) return;\n\n items.splice(index, 1);\n this.ratingGroupChange.emit({\n ...this.ratingGroup,\n items: items,\n });\n }\n\n add() {\n if (this.ratingGroup.items.length >= 6) return;\n\n this.emojis$\n .pipe(untilDestroyed(this), take(1))\n .subscribe(emojis => {\n const emoji = emojis[Math.floor(Math.random() * emojis.length)];\n const newItem: TemplateEditorRatingGroupItem = {\n item: {\n id: `item${uuidv4()}`,\n text: null,\n emoji: emoji.emojiCode,\n backgroundColor: '#FFFFFF',\n onSelect: this.parent.compulsoryItems ? [...this.parent.compulsoryItems] : [],\n isDefault: false,\n timeMultiplier: 0,\n materialsMultiplier: 0,\n resultScore: null,\n showQtyWidget: false,\n showSpareParts: false,\n showHoursWidget: false,\n ticketRequired: false,\n sparePartsSelectionRequired: false,\n },\n };\n const items = [...this.ratingGroup.items, newItem];\n\n this.ratingGroupChange.emit({\n ...this.ratingGroup,\n items: items,\n });\n })\n .untilDestroyed(this);\n }\n\n trackBy(_index: number, item: TemplateEditorRatingGroupItem) {\n return item.item.id;\n }\n\n onSaveArea(): void {\n this.subjectsService.templatesFocusOutEditor$.next();\n }\n}\n","\n {{ description }}\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\n\nimport { TemplateEditorBase } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-base/template-editor-base.component';\nimport { handleMaxLimitContentEditable } from '@main-application/shared/template-editor-dialog/models/share-methods.function';\nimport { TemplateMaxDescriptionLength } from '@main-application/shared/template-editor-dialog/models/template-editor-model';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-template-editor-description',\n templateUrl: './template-editor-description.component.html',\n styleUrls: ['./template-editor-description.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateEditorDialogDescriptionComponent extends TemplateEditorBase {\n editMode = false;\n initialized = false;\n private _description: string;\n @Input() set description(value: string) {\n if (!this.initialized) {\n this._description = value;\n this.initialized = true;\n }\n }\n\n get description() {\n return this._description;\n }\n\n @ViewChild('descriptionText', { read: ElementRef, static: false }) descriptionText: ElementRef;\n @Output() descriptionChanged = new EventEmitter();\n @Input() isEditable: boolean;\n\n constructor(protected store: Store<{}>, protected cdr: ChangeDetectorRef, snackbarService: SnackbarService) {\n super(store, snackbarService);\n }\n\n enterEditMode() {\n if (!this.checkEditRight() || this.editMode) {\n return;\n }\n this.editMode = true;\n this.cdr.detectChanges();\n const div = this.descriptionText.nativeElement;\n setTimeout(() => {\n const range = document.createRange();\n range.selectNodeContents(div);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n\n nameChanged(event: KeyboardEvent) {\n if (!this.checkEditRight()) {\n return;\n }\n handleMaxLimitContentEditable(event, this.descriptionText.nativeElement, TemplateMaxDescriptionLength);\n if (event.key === 'Enter') {\n this.descriptionText.nativeElement.blur();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n leaveEditMode(value: string) {\n value = value.trim();\n this.editMode = false;\n if (this.description !== value) {\n this.descriptionChanged.emit(value);\n }\n\n setTimeout(() => {\n const div = this.descriptionText.nativeElement;\n div.focus();\n div.blur();\n }, 1);\n }\n\n checkEditRight(notify = true): boolean {\n return super.checkEditRight(this.isEditable, notify);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { QuillModule } from 'ngx-quill';\n\nimport { WysiwygEditorComponent } from '@ui-components/components/wysiwyg-editor/wysiwyg-editor.component';\n\n@NgModule({\n declarations: [WysiwygEditorComponent],\n imports: [CommonModule, QuillModule, ReactiveFormsModule],\n exports: [WysiwygEditorComponent],\n})\nexport class WysiwygEditorModule {}\n","
\n \n
\n
\n \n \n
\n
{{ prefix }}
\n
\n {{ inputControl.value }}\n \n
\n
{{ postfix }}
\n
\n
\n
\n
\n
\n\n\n
\n \n {{ label }}\n \n \n
\n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { parseNumber } from '@shared/functions/parse-number';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'app-masked-number-input',\n templateUrl: './masked-number-input.component.html',\n styleUrls: ['../number-input/number-input.component.scss'],\n imports: [CommonModule, MatInputModule, ReactiveFormsModule, NgxMaskModule, IconComponent, MatTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedNumberInputComponent),\n multi: true,\n },\n ],\n})\nexport class MaskedNumberInputComponent extends PuSubscribable implements ControlValueAccessor, OnInit {\n @Input() prefix: string;\n @Input() postfix: string;\n @Input() attrPlaceholder: string;\n @Input() attrMask = 'separator.2';\n @Input() attrThousandSeparator = ',';\n @Input() min = 0;\n @Input() max: number = null;\n @Input() isSmallFont = false;\n\n @Input() contentCss = 'display-flex align-items-start flex-column';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = 'display-flex align-items-center';\n @Input() classList = '';\n\n @Input() label: string;\n @Input() labelCss = 'label-input body-small-bold';\n @Input() labelRequired = false;\n @Input() labelInside = false;\n @Input() labelTooltip = '';\n\n @Input() icon: EIcon;\n @Input() iconTooltip = '';\n\n innerControl = new FormControl(null);\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n this.innerControl.valueChanges\n .pipe(distinctUntilChanged(), debounceTime(300), untilDestroyed(this))\n .subscribe(v => this.propagateChange(v))\n .untilDestroyed(this);\n }\n\n onPaste(event: ClipboardEvent, inputControl: HTMLInputElement) {\n event.preventDefault();\n\n const commaToDotRegex = /(\\d+),(\\d{2})$/;\n const dotToCommaRegex = /(\\d+)\\.(\\d{3,})$/;\n const clipboardData = event.clipboardData || (window as any).clipboardData;\n let pastedValue = clipboardData.getData('text')?.trim();\n if (commaToDotRegex.test(pastedValue)) {\n pastedValue = pastedValue.replace(commaToDotRegex, '$1.$2');\n inputControl.value = pastedValue;\n } else if (dotToCommaRegex.test(pastedValue)) {\n pastedValue = pastedValue.replace(dotToCommaRegex, '$1,$2');\n inputControl.value = pastedValue;\n } else {\n inputControl.value = pastedValue;\n }\n this.innerControl.setValue(parseNumber(inputControl.value.toString()));\n }\n\n writeValue(value: string | null): void {\n this.innerControl.setValue(value || null, { emitEvent: false });\n setTimeout(() => {\n this.cdr.markForCheck();\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: string | null) => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateTouched = () => {};\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport Quill from 'quill';\nimport { BehaviorSubject, Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\n\nimport { SubjectsService } from '@shared/services/subjects.service';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-wysiwyg-editor',\n templateUrl: './wysiwyg-editor.component.html',\n styleUrls: ['./wysiwyg-editor.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WysiwygEditorComponent extends CustomControlAbstract implements OnInit {\n @Input() placeholder: string;\n @Input() readonly = false;\n @Input() maxLength = 1000;\n @Input() styles = { minHeight: '30px', overflow: 'auto' };\n @Input() showCurrentLength = true;\n\n @Output() onFocus = new EventEmitter();\n @Output() onBlur = new EventEmitter();\n\n editor$ = new BehaviorSubject(null);\n currentLength$: Observable;\n isValid: boolean;\n focused = false;\n modules = {\n clipboard: {\n matchVisual: false, // prevents auto


between paragraphs\n },\n toolbar: [\n ['bold', 'italic', 'underline', 'strike'], // toggled buttons\n //['blockquote', 'code-block'],\n\n //[{ header: 1 }, { header: 2 }], // custom button values\n [{ list: 'ordered' }, { list: 'bullet' }],\n // [{ script: 'sub' }, { script: 'super' }], // superscript/subscript\n [{ indent: '-1' }, { indent: '+1' }], // outdent/indent\n // [{ direction: 'rtl' }], // text direction\n\n // [{ size: ['small', false, 'large', 'huge'] }], // custom dropdown\n // [{ header: [1, 2, 3, 4, 5, 6, false] }],\n\n // [{ color: [] }, { background: [] }], // dropdown with defaults from theme\n // [{ font: [] }],\n // [{ align: [] }],\n\n ['clean'], // remove formatting button\n\n // ['link', 'image', 'video'], // link and image, video\n ],\n };\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective,\n private subjectsService: SubjectsService\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControlBase();\n this.control.valueChanges\n .pipe(\n distinctUntilChanged(),\n tap(value => {\n if (this.isValid) {\n this.onChanged(value);\n }\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.currentLength$ = combineLatest([this.editor$, this.control.valueChanges]).pipe(\n filter(([editor]) => !!editor),\n tap(([editor]) => {\n this.isValid = editor.getLength() <= this.maxLength;\n }),\n map(([editor]) => editor.getLength())\n );\n\n this.subjectsService.templatesFocusOutEditorWithObserveOn$\n .subscribe(() => {\n if (this.focused) this.editor$.getValue().blur();\n })\n .untilDestroyed(this);\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n editorReady(editor: Quill) {\n this.editor$.next(editor);\n }\n\n textChanged($event: any) {\n const editor = $event.editor;\n const length = editor.getLength();\n if (length > this.maxLength - 1) {\n const excess = length - this.maxLength - 1;\n editor.deleteText(this.maxLength, excess);\n }\n }\n}\n","
\n \n
\n
\n {{ (currentLength$ | async) - 1 }}/{{ maxLength }}\n
\n
\n
\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { LottieModule } from 'ngx-lottie';\nimport { QuillModule } from 'ngx-quill';\nimport { SwiperModule } from 'swiper/angular';\n\nimport { LeasingUnitsChartCardModule } from '@dashboards/components/leasing-units-chart-card/leasing-units-chart-card.module';\nimport { TurnoversArcChartCardModule } from '@dashboards/components/turnovers-arc-chart-card/turnovers-arc-chart-card.module';\nimport { VacancyLossChartCardModule } from '@dashboards/components/vacancy-loss-chart-card/vacancy-loss-chart-card.module';\nimport { TemplateEditorAreaComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-area.component';\nimport { TemplateEditorDialogQuestionComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/question/template-editor-question.component';\nimport { TemplateEditorDialogAnimationComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/animation/template-editor-animation.component';\nimport { TemplateEditorDialogRatingGroupItemComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/rating-group-item/template-editor-rating-group-item.component';\nimport { TemplateEditorDialogRatingGroupComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/rating-group/template-editor-rating-group.component';\nimport { TemplateEditorDialogItemComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-area/template-editor-item/template-editor-item.component';\nimport { TemplateEditorDialogDescriptionComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-description/template-editor-description.component';\nimport { TemplateEditorDialogComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-dialog.component';\nimport { TemplateEditorDialogHeaderComponent } from '@main-application/shared/template-editor-dialog/components/template-editor-dialog/template-editor-header/template-editor-header.component';\nimport { TemplateEditorDialogService } from '@main-application/shared/template-editor-dialog/services/template-editor-dialog.service';\nimport { FadeTextComponent } from '@shared/components/ellipsis-one-row/fade-text.component';\nimport { FadeTextOnWidthDirective } from '@shared/directives/fade-text-on-width.directive';\nimport { PreventKeyboardEventsDirective } from '@shared/directives/prevent-keyboard-events.directive';\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { SkeletonLoaderComponent } from '@ui-components/components/skeleton-loader/skeleton-loader.component';\nimport { WysiwygEditorModule } from '@ui-components/components/wysiwyg-editor/wysiwyg-editor.module';\nimport { MaskedNumberInputComponent } from '@ui-components/controls/masked-number-input/masked-number-input.component';\nimport { NumberInputModule } from '@ui-components/controls/number-input/number-input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { SlideToggleComponent } from '@ui-components/controls/slide-toggle/slide-toggle.component';\nimport { DragNDropCursorDirectiveModule } from '@ui-components/directives/drag-drop/drag-n-drop-cursor-directive.module';\n\nimport { DndExpandableService } from './services/dnd-expandable.service';\nimport { SparePartsService } from './services/spare-parts.service';\n\n@NgModule({\n declarations: [\n TemplateEditorDialogComponent,\n TemplateEditorAreaComponent,\n TemplateEditorDialogHeaderComponent,\n TemplateEditorDialogDescriptionComponent,\n TemplateEditorDialogItemComponent,\n TemplateEditorDialogAnimationComponent,\n TemplateEditorDialogRatingGroupComponent,\n TemplateEditorDialogRatingGroupItemComponent,\n TemplateEditorDialogQuestionComponent,\n ],\n imports: [\n SlideToggleComponent,\n ReactiveFormsModule,\n CommonModule,\n FormsModule,\n DragDropModule,\n NumberInputModule,\n CdkScrollableModule,\n MatDialogModule,\n MatIconModule,\n IconComponent,\n LottieModule,\n DragNDropCursorDirectiveModule,\n MatButtonModule,\n MatMenuModule,\n TooltipDirectiveModule,\n MatDividerModule,\n SkeletonLoaderComponent,\n StopPropagationDirective,\n PreventKeyboardEventsDirective,\n MatPaginatorModule,\n MatProgressSpinnerModule,\n QuillModule.forRoot(),\n WysiwygEditorModule,\n LeasingUnitsChartCardModule,\n TurnoversArcChartCardModule,\n VacancyLossChartCardModule,\n SwiperModule,\n RadioButtonDropdownModule,\n MaskedNumberInputComponent,\n FadeTextComponent,\n FadeTextOnWidthDirective,\n ],\n providers: [TemplateEditorDialogService, DndExpandableService, SparePartsService],\n exports: [TemplateEditorDialogAnimationComponent],\n})\nexport class TemplateEditorDialogModule {}\n","import { createAction, props } from '@ngrx/store';\n\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\nexport const loadEnumerations = createAction('[Dashboard] Load enumerations');\nexport const loadEnumerationsSuccess = createAction(\n '[Dashboard] Enumerations loaded successfully',\n props<{ enumerations: EnumerationConfig }>()\n);\nexport const loadEnumerationsFailed = createAction('[Dashboard] Enumerations loading failed');\n","import { createAction, props } from '@ngrx/store';\n\nimport { AttachmentSection } from '@shared/enums/attachment-section';\nimport { UploadedFileItem } from '@shared/interfaces/uploaded-file-item.interface';\n\nexport const loadFileUploads = createAction('[FileUpload] Load FileUploads');\n\n/**\n * upload file\n */\nexport const uploadFile = createAction(\n '[FileUpload] upload file',\n props<{ file: File; attachmentSection: AttachmentSection }>()\n);\nexport const uploadFileSuccess = createAction(\n '[FileUpload] upload file success',\n props<{ uploadedFileItem: UploadedFileItem }>()\n);\nexport const clearUploadedFile = createAction('[FileUpload] clear uploaded file');\nexport const uploadFileFail = createAction('[FileUpload] upload file fail');\n\n/**\n * delete file\n */\nexport const deleteFile = createAction('[FileUpload] delete file', props<{ fileId: number }>());\nexport const deleteFileSuccess = createAction('[FileUpload] delete file success');\nexport const deleteFileFailed = createAction('[FileUpload] delete file failed');\n","import { createAction, props } from '@ngrx/store';\n\nexport const setPreviousRoute = createAction('[App][Core] set previous route', props<{ previousRoute: string }>());\n","import { createAction, props } from '@ngrx/store';\n\nimport { TenantSettingsModel } from '@main-application/management/pages/turnover-configuration/components/turnover-configuration-elapsed-days-section/models/config.models';\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\n\nexport const loadTenantData = createAction('[App][Core] Load tenant data');\nexport const loadUserTenantSucceeded = createAction('[App][Core] Load tenant data succeeded', props());\nexport const loadUserTenantFailed = createAction('[App][Core] Load tenant data failed');\n\nexport const loadUserData = createAction('[App][Core] Load user data');\nexport const loadUserDataSucceded = createAction('[App][Core] Load user data succeeded', props());\nexport const loadUserDataFailed = createAction('[App][Core] Load user data failed');\n\nexport const loadUserById = createAction('[App][Core] Load user by id', props<{ userId: number }>());\nexport const loadUserByIdSucceded = createAction('[App][Core] Load user by id succeded', props());\nexport const loadUserByIdFailed = createAction('[App][Core] Load user by id failed');\n\nexport const setUserGeneralRole = createAction('[App][Core] User general role update', props<{ roleName: string }>());\nexport const setAuthenticated = createAction('[App][Core] set authenticated', props<{ isAuthenticated: boolean }>());\n\nexport const loadAllUserProperties = createAction('[App][Core] Load all user properties');\nexport const loadAllUserPropertiesSucceeded = createAction(\n '[App][Core] Load all user properties succeeded',\n props<{ properties: RestPropertyModel[] }>()\n);\nexport const loadAllUserPropertiesFailed = createAction('[App][Core] Load all user properties failed');\n\nexport const updateTenantSettings = createAction(\n '[App][Core] Update tenant settings',\n props<{ settings: Partial }>()\n);\nexport const updateTenantSettingsSucceeded = createAction(\n '[App][Core] Update tenant settings succeeded',\n props<{ settings: TenantSettingsModel }>()\n);\nexport const updateTenantSettingsFailed = createAction(\n '[App][Core] Update tenant settings failed',\n props<{ error: any }>()\n);\n","import { createAction, props } from '@ngrx/store';\n\n/**\n * set window width\n */\nexport const setWindowWidth = createAction('[window-resize] set window width', props<{ windowWidth: number }>());\n","import { ActionReducer } from '@ngrx/store';\n\nexport const patchInitialValue = (initialState: T, key: string, doNotStore?: boolean): T => {\n if (doNotStore) {\n return initialState;\n }\n\n const storageValue = localStorage.getItem(key);\n if (storageValue) {\n try {\n const parsedValue = JSON.parse(storageValue);\n return { ...initialState, ...parsedValue };\n } catch {\n localStorage.removeItem(key);\n return initialState;\n }\n }\n return initialState;\n};\n\nexport const hydrationMetaReducer =\n (featureKey: string) =>\n (reducer: ActionReducer): ActionReducer => {\n return (state, action) => {\n const nextState = reducer(state, action);\n\n if ((nextState as any)?.doNotStore) {\n return nextState;\n }\n\n localStorage.setItem(featureKey, JSON.stringify(nextState));\n return nextState;\n };\n };\n\nexport const dynamicHydrationMetaReducer =\n (getDynamicFeatureKey: () => string, featureKey: string) =>\n (reducer: ActionReducer): ActionReducer => {\n return (state, action) => {\n const nextState = reducer(state, action);\n const key = getDynamicFeatureKey();\n\n if ((nextState as any)?.doNotStore) {\n return nextState;\n }\n\n if (key) {\n localStorage.setItem(key, JSON.stringify(nextState));\n localStorage.removeItem(featureKey);\n }\n return nextState;\n };\n };\n","import { createReducer, on } from '@ngrx/store';\n\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\n\nimport { loadEnumerations, loadEnumerationsFailed, loadEnumerationsSuccess } from '../actions/enumerations.actions';\n\nexport const enumerationFeatureKey = 'enumeration';\n\nexport interface State {\n enumerationsLoading?: boolean;\n enumerations?: EnumerationConfig;\n}\n\nexport const initialState: State = {};\n\nexport const reducer = createReducer(\n initialState,\n on(loadEnumerations, (state, action) => ({ ...state, enumerationsLoading: true })),\n on(loadEnumerationsSuccess, (state, action) => ({\n ...state,\n enumerationsLoading: false,\n enumerations: action.enumerations,\n })),\n on(loadEnumerationsFailed, (state, action) => ({\n ...state,\n enumerationsLoading: false,\n enumerations: null,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n clearUploadedFile,\n deleteFile,\n deleteFileFailed,\n deleteFileSuccess,\n uploadFile,\n uploadFileFail,\n uploadFileSuccess,\n} from '@main-application/store/actions/file-upload.actions';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UploadedFileItem } from '@shared/interfaces/uploaded-file-item.interface';\n\nexport const fileUploadFeatureKey = 'fileUpload';\n\nexport interface State {\n fileToUpload: File;\n fileToUploadLoading: boolean;\n uploadedFileItem: UploadedFileItem;\n deleteInProgress: boolean;\n deleteStatus: UpdateStatus;\n}\n\nexport const initialState: State = {\n fileToUpload: null,\n fileToUploadLoading: false,\n uploadedFileItem: null,\n deleteInProgress: false,\n deleteStatus: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * upload file\n */\n on(uploadFile, (state, action) => ({\n ...state,\n fileToUpload: action.file,\n fileToUploadLoading: true,\n })),\n on(uploadFileSuccess, (state, action) => ({\n ...state,\n uploadedFileItem: action.uploadedFileItem,\n fileToUploadLoading: false,\n })),\n on(uploadFileFail, (state, action) => ({\n ...state,\n uploadedFileItem: null,\n fileToUploadLoading: false,\n })),\n on(clearUploadedFile, (state, action) => ({\n ...state,\n fileToUpload: null,\n fileToUploadLoading: false,\n uploadedFileItem: null,\n })),\n\n /**\n * delete file\n */\n on(deleteFile, (state, action) => ({\n ...state,\n deleteInProgress: true,\n deleteStatus: UpdateStatus.UPDATE,\n })),\n on(deleteFileSuccess, (state, action) => ({\n ...state,\n deleteInProgress: false,\n deleteStatus: UpdateStatus.DELETED,\n })),\n on(deleteFileFailed, (state, action) => ({\n ...state,\n deleteInProgress: false,\n deleteStatus: UpdateStatus.ERROR,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\nimport {\n loadAllUserPropertiesSucceeded,\n loadUserById,\n loadUserByIdFailed,\n loadUserByIdSucceded,\n loadUserDataSucceded,\n loadUserTenantSucceeded,\n setAuthenticated,\n setUserGeneralRole,\n} from '../actions/user.actions';\n\nexport const userFeatureKey = 'user';\nexport interface IUserStateTree {\n readonly [userFeatureKey]: UserState;\n}\n\nexport interface UserState {\n tenantData?: TenantData;\n userData?: UserData;\n isAuthenticated?: boolean;\n selectedUser?: RestUserModel;\n selectedUserLoading?: boolean;\n properties?: RestPropertyModel[];\n}\n\nexport const initialState = {\n isAuthenticated: false,\n userData: {},\n tenantData: {},\n};\n\nexport const reducer = createReducer(\n initialState,\n on(loadAllUserPropertiesSucceeded, (state, { properties }) => ({\n ...state,\n properties,\n })),\n\n on(loadUserDataSucceded, (state, action) => ({\n ...state,\n userData: action,\n })),\n\n on(loadUserTenantSucceeded, (state, action) => ({\n ...state,\n tenantData: action,\n })),\n\n on(setUserGeneralRole, (state, action) => ({\n ...state,\n userData: {\n ...state.userData,\n generalRole: action.roleName,\n },\n })),\n\n on(setAuthenticated, (state, action) => ({\n ...state,\n isAuthenticated: action.isAuthenticated,\n })),\n\n on(loadUserById, state => ({\n ...state,\n selectedUserLoading: true,\n })),\n on(loadUserByIdSucceded, (state, action) => ({\n ...state,\n selectedUser: action,\n selectedUserLoading: false,\n })),\n on(loadUserByIdFailed, (state, action) => ({\n ...state,\n selectedUserLoading: false,\n }))\n);\n","import * as fromEnumerationReducer from './enumeration.reducer';\nimport * as fromFileUploadReducer from './file-upload.reducer';\nimport { RouteState, reducer as RouteStateReducer, routeStateFeatureKey } from './route.reducer';\nimport * as fromUserReducer from './user.reducer';\nimport * as fromWindowResizeReducer from './window-resize.reducer';\n\nexport const CORE_FEATURE_KEY = 'coreModule';\n\nexport interface CoreModuleState {\n [fromUserReducer.userFeatureKey]: fromUserReducer.UserState;\n [fromEnumerationReducer.enumerationFeatureKey]: fromEnumerationReducer.State;\n [fromFileUploadReducer.fileUploadFeatureKey]: fromFileUploadReducer.State;\n [fromWindowResizeReducer.windowResizeFeatureKey]: fromWindowResizeReducer.State;\n [routeStateFeatureKey]: RouteState;\n}\n\nexport const reducers = {\n [fromUserReducer.userFeatureKey]: fromUserReducer.reducer,\n [fromEnumerationReducer.enumerationFeatureKey]: fromEnumerationReducer.reducer,\n [fromFileUploadReducer.fileUploadFeatureKey]: fromFileUploadReducer.reducer,\n [fromWindowResizeReducer.windowResizeFeatureKey]: fromWindowResizeReducer.reducer,\n [routeStateFeatureKey]: RouteStateReducer,\n};\n","import { createReducer, on } from '@ngrx/store';\n\nimport { setPreviousRoute } from '@main-application/store/actions/route-state.action';\n\nexport const routeStateFeatureKey = 'routeState';\n\nexport interface RouteState {\n previousRoute?: string;\n}\n\nexport const initialState: RouteState = {\n previousRoute: undefined,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * set previous route\n */\n on(setPreviousRoute, (state, action) => ({\n ...state,\n previousRoute: action.previousRoute,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { setWindowWidth } from '@main-application/store/actions/window-resize.actions';\n\nexport const windowResizeFeatureKey = 'windowResize';\n\nexport interface State {\n windowWidth: number;\n}\n\nexport const initialState: State = {\n windowWidth: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * set window width\n */\n on(setWindowWidth, (state, action) => ({\n ...state,\n windowWidth: action.windowWidth,\n }))\n);\n","import { createFeatureSelector } from '@ngrx/store';\n\nimport { CORE_FEATURE_KEY, CoreModuleState } from '../reducers';\n\nexport const selectCoreModule = createFeatureSelector(CORE_FEATURE_KEY);\n","import { createSelector } from '@ngrx/store';\n\nimport { selectCoreModule } from './core.selector';\n\nconst selectEnumerationState = createSelector(selectCoreModule, coreState => coreState.enumeration);\nexport const selectLoadEnumerations = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations\n);\nexport const selectLoadEnumerationsLoading = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerationsLoading\n);\nexport const selectDashboardViewType = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.dashboardViewType\n);\nexport const selectWorkflowPhasesEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.workflowPhases\n);\nexport const selectDelinquencyResultsEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.delinquencyResultTypes\n);\nexport const selectWorkflowStepsEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.workflowSteps\n);\nexport const selectTicketStatusTypeEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.ticketStatusType\n);\nexport const selectTicketPriorityTypeEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.ticketPriorityType\n);\nexport const selectRenewalResultTypesEnumeration = createSelector(\n selectEnumerationState,\n enumerationState => enumerationState.enumerations?.renewalResultTypes\n);\nexport const selectFinishTypesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.finishType\n);\nexport const selectTimerTypesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.timerTypes\n);\nexport const selectPmsTypesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.pmsTypes\n);\nexport const selectNativeLanguagesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.nativeLanguage\n);\nexport const selectUnitStatusesEnumeration = createSelector(\n selectLoadEnumerations,\n enumerationState => enumerationState?.moveOutTypes\n);\n","import { createSelector } from '@ngrx/store';\n\nimport { selectCoreModule } from './core.selector';\n\nconst selectUserState = createSelector(selectCoreModule, coreState => coreState.user);\n\nexport const selectAllUserProperties = createSelector(selectUserState, userState => userState.properties);\n\nexport const selectUserData = createSelector(selectUserState, userState => userState.userData);\nexport const selectUserId = createSelector(selectUserData, userData => userData.id);\nexport const selectUserName = createSelector(selectUserData, userData => userData.name);\nexport const selectUserGeneralRole = createSelector(selectUserData, userData => userData.generalRole);\nexport const selectUserPermissionLevel = createSelector(\n selectUserState,\n userState => userState.userData?.permissionLevel\n);\nexport const selectIsAuthenticated = createSelector(selectUserState, userState => userState.isAuthenticated);\nexport const selectSelectedUser = createSelector(selectUserState, userState => userState.selectedUser);\nexport const selectSelectedUserLoading = createSelector(selectUserState, userState => userState.selectedUserLoading);\nexport const selectTenantData = createSelector(selectUserState, userState => userState.tenantData);\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { DateDropdownModule } from '@ui-components/controls/date-dropdown/date-dropdown.module';\n\nimport { TurnoverDateRangeComponent } from './turnover-date-range.component';\n\n@NgModule({\n declarations: [TurnoverDateRangeComponent],\n imports: [CommonModule, InputErrorModule, DateDropdownModule, ReactiveFormsModule],\n exports: [TurnoverDateRangeComponent],\n})\nexport class TurnoverDateRangeModule {}\n","import { Injectable } from '@angular/core';\n\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\n\n@Injectable()\nexport class TurnoverKanbanService {\n getExpandedSections(userId: number): number[] {\n return (JSON.parse(localStorage.getItem(this.getFieldName(userId))) as number[]) || [];\n }\n\n setExpandedSection(userId: number, sectionsId: number[]) {\n localStorage.setItem(this.getFieldName(userId), JSON.stringify(sectionsId));\n }\n\n private getFieldName(userId: number): string {\n return `${LocalStorageDataEnum.KANBAN_ACTIVE_SECTIONS}_${userId}`;\n }\n}\n","/*\n * DON'T USE\n * deprecated file, to be removed\n */\nexport enum TurnoverForm {\n START = 'Start',\n END = 'End',\n RANGE = 'Range',\n\n PROPERTY_ID = 'PropertyId',\n UNIT_ID = 'UnitId',\n GENERAL = 'General',\n\n COMPANY_ID_LIST = 'CompanyIdList',\n ID = 'Id',\n\n NAME = 'Name',\n DETAILED_INFORMATION = 'DetailedInformation',\n ASSIGNEE_ID = 'AssigneeId',\n\n TICKET_STATUS_TYPE = 'TicketStatusType',\n TICKET_PRIORITY_TYPE = 'TicketPriorityType',\n WHOLE_OBJECT = 'WholeObject',\n MATERIAL_COST = 'MaterialsCost',\n LABOR_COST = 'LaborCost',\n BID_STATUS_TYPE = 'BidStatusType',\n URL = 'Url',\n\n UNIT_PHOTO = 'UnitPhoto',\n ABLE_TO_RESOLVE = 'AbleToResolve',\n SCOPE_OF_WORK = 'ScopeOfWork',\n\n MOVE_OUT = 'MoveOutDate',\n\n BOARD_LAYOUTS_ID = 'boardLayoutsId',\n BOARD_COLUMN_UID = 'boardColumnUID',\n}\n","export enum VacancyLossAttrType {\n Gross,\n Unit,\n Turn,\n}\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport enum VacancyLostThreshold {\n None,\n Medium,\n High,\n}\nexport const VacancyLostThresholdList: IRadioButtonOption[] = [\n {\n label: 'none',\n value: VacancyLostThreshold.None,\n },\n {\n label: 'medium',\n value: VacancyLostThreshold.Medium,\n },\n {\n label: 'high',\n value: VacancyLostThreshold.High,\n },\n];\n","import { createAction, props } from '@ngrx/store';\n\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\n/* GET punch by id */\nexport const loadPunchById = createAction('[Punch] Load Punch by id', props<{ punchId: number }>());\nexport const loadPunchByIdFinished = createAction(\n '[Punch] Load Punch by id finished',\n props<{ punch: RestTicketModel }>()\n);\nexport const loadPunchByIdFailed = createAction('[Punch] Load Punch by id failed');\nexport const clearSelectedPunch = createAction('[Punch] Clear selected punch');\n\n/* GET punch by turnoverId */\nexport const loadPunchesByTurnoverId = createAction(\n '[Punch] Load Punchesby turnoverId',\n props<{ turnoverId: number }>()\n);\nexport const loadPunchesByTurnoverIdFinished = createAction(\n '[Punch] Load Punches by turnoverId finished',\n props<{ result: RestTicketModel[] }>()\n);\nexport const loadPunchesByTurnoverIdFailed = createAction('[Punch] Load Punches by turnoverId failed');\nexport const clearPunchesByTurnoverId = createAction('[Punch] Clear Punches by turnoverId');\n\n/* send punch */\nexport const sendPunch = createAction('[Punch] send Punch', props<{ punch: RestTicketModel }>());\nexport const sendPunchFinished = createAction('[Punch] send Punch finished', props<{ punch: RestTicketModel }>());\nexport const sendPunchFailed = createAction('[Punch] send Punch failed');\n","import { createAction, props } from '@ngrx/store';\n\nimport {\n AddUpdateTurnoverBid,\n RestTurnoverBid,\n RestTurnoverBidCategory,\n} from '@shared/interfaces/turnover-bids.interface';\n\nexport const loadTurnoverBids = createAction('[Turnover] loadTurnoverBids', props<{ turnoverId: number }>());\nexport const loadTurnoverBidsSuccess = createAction(\n '[Turnover] createTurnoverBidSuccess',\n props<{ bids: RestTurnoverBid[] }>()\n);\nexport const loadTurnoverBidsFailed = createAction('[Turnover] loadTurnoverBidsFailed');\n\nexport const createTurnoverBid = createAction('[Turnover] createTurnoverBid', props<{ bid: AddUpdateTurnoverBid }>());\nexport const createTurnoverBidSuccess = createAction(\n '[Turnover] createTurnoverBidSuccess success',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const createTurnoverBidFailed = createAction('[Turnover] createTurnoverBidFailed');\n\nexport const acceptTurnoverBid = createAction(\n '[Turnover] acceptTurnoverBid',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const acceptTurnoverBidSuccess = createAction('[Turnover] acceptTurnoverBidSuccess');\nexport const acceptTurnoverBidFailed = createAction('[Turnover] acceptTurnoverBidFailed');\n\nexport const rejectTurnoverBid = createAction(\n '[Turnover] rejectTurnoverBid',\n props<{ bidId: number; turnoverId: number; reason: string }>()\n);\nexport const rejectTurnoverBidSuccess = createAction('[Turnover] rejectTurnoverBidSuccess');\nexport const rejectTurnoverBidFailed = createAction('[Turnover] rejectTurnoverBidFailed');\n\nexport const uploadTurnoverBidInvoice = createAction(\n '[Turnover] uploadTurnoverBidInvoice',\n props<{ bid: RestTurnoverBid; file: File }>()\n);\nexport const uploadTurnoverBidInvoiceSuccess = createAction('[Turnover] uploadTurnoverBidInvoiceSuccess');\nexport const uploadTurnoverBidInvoiceFailed = createAction('[Turnover] uploadTurnoverBidInvoiceFailed');\n\nexport const updateTurnoverBid = createAction('[Turnover] updateTurnoverBid', props<{ bid: AddUpdateTurnoverBid }>());\nexport const updateTurnoverBidSuccess = createAction(\n '[Turnover] updateTurnoverBidSuccess',\n props<{ bid: AddUpdateTurnoverBid }>()\n);\nexport const updateTurnoverBidFailed = createAction('[Turnover] updateTurnoverBidFailed');\n\nexport const removeTurnoverBid = createAction(\n '[Turnover] removeTurnoverBid',\n props<{ bidId: number; turnoverId: number }>()\n);\nexport const removeTurnoverBidSuccess = createAction('[Turnover] removeTurnoverBidSuccess');\nexport const removeTurnoverBidFailed = createAction('[Turnover] removeTurnoverBidFailed');\n\nexport const loadTurnoverBidCategories = createAction('[Turnover] loadTurnoverBidCategories');\nexport const loadTurnoverBidCategoriesSuccess = createAction(\n '[Turnover] loadTurnoverBidCategoriesSuccess',\n props<{ categories: RestTurnoverBidCategory[] }>()\n);\nexport const loadTurnoverBidCategoriesFailed = createAction('[Turnover] loadTurnoverBidCategoriesFailed');\n\nexport const addTurnoverBidCategory = createAction('[Turnover] addTurnoverBidCategory', props<{ name: string }>());\nexport const addTurnoverBidCategorySuccess = createAction(\n '[Turnover] addTurnoverBidCategorySuccess',\n props<{ categoryId: number }>()\n);\nexport const addTurnoverBidCategoryFailed = createAction('[Turnover] addTurnoverBidCategoryFailed');\n\nexport const approveTurnoverBid = createAction(\n '[Turnover] approveTurnoverBid',\n props<{ bidId: number; turnoverId: number; approved: boolean | null; denyReason?: string }>()\n);\nexport const approveTurnoverBidSuccess = createAction('[Turnover] approveTurnoverBidSuccess');\nexport const approveTurnoverBidFailed = createAction('[Turnover] approveTurnoverBidFailed');\n","import { createAction, props } from '@ngrx/store';\n\nimport { TurnoverSummaryFilters } from '@app/services/turnovers.service';\nimport { TurnoverStepTimer } from '@main-application/turnovers/interfaces/timers.interface';\nimport { ValidationParams } from '@main-application/turnovers/interfaces/validation-params.interface';\nimport { TurnoverAttachmentType } from '@shared/enums/attachment-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { TurnoverTransitionSource } from '@shared/enums/turnover-transition-source';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestBidModel, RestTypedBidAttachment } from '@shared/interfaces/bid.interface';\nimport { RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { KanbanListItem } from '@shared/interfaces/kanban-list-item.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\nimport {\n PostTurnoverModel,\n RestTicketModel,\n RestTurnoverDataModel,\n RestTypedTicketAttachment,\n RestTypedTurnoverAttachment,\n RestWorkflowInstanceModel,\n TurnoverStepInfo,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\nimport {\n SummaryStatsGroup,\n TurnoversSummaryStatsDetails,\n} from '@ui-components/components/summary-expandable-table/summary-expandable-table.model';\n\n/**\n * Create new Turnover\n */\nexport const createNewTurnover = createAction(\n '[Turnover] Create new Turnover',\n props<{ postTurnoverModel: PostTurnoverModel }>()\n);\nexport const createNewTurnoverSuccess = createAction(\n '[Turnover] Create new Turnover success',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const createNewTurnoverFailed = createAction('[Turnover] Create new Turnover failed');\nexport const resetCreateNewTurnover = createAction('[Turnover] Reset create new Turnover');\n\n/**\n * Get Turnover Data\n */\nexport const clearTurnoverData = createAction('[Turnover] clear turnover data');\nexport const getTurnoverData = createAction('[Turnover] get turnover data', props<{ turnoverId: number }>());\nexport const getTurnoverDataSuccess = createAction(\n '[Turnover] get turnover data success',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const getTurnoverDataFailed = createAction('[Turnover] get turnover data failed');\n\n/**\n * set current workflow step\n */\nexport const setCurrentWorkflowStep = createAction(\n '[Turnover] set current workflow step',\n props<{ currentWorkflowStep: WorkflowStepEnumType }>()\n);\n\nexport const setCurrentWorkflowStepModel = createAction(\n '[Turnover] set current workflow step model',\n props<{ currentWorkflowStepModel: RestWorkflowInstanceModel }>()\n);\n\nexport const resetWorkflowStepStatus = createAction('[Turnover] set current workflow step');\n\n/**\n * Get Turnover Data\n */\nexport const setTurnoverData = createAction(\n '[Turnover] set turnover data',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const setTurnoverDataSuccess = createAction('[Turnover] set turnover data success');\nexport const setTurnoverDataFailed = createAction('[Turnover] set turnover data failed');\n\n/**\n * Set workflow step\n */\nexport const setWorkflowStepSuccess = createAction(\n '[Turnover] set workflow step success',\n props<{ turnoverId: number; nextWorkflowStep: WorkflowStepEnumType }>()\n);\n/**\n * set appliance type list\n */\nexport const setApplianceTypeList = createAction(\n '[Turnover] set appliance type list',\n props<{ applianceTypeList: IRadioButtonOption[] }>()\n);\n\n/**\n * set color type list\n */\nexport const setColorTypeList = createAction(\n '[Turnover] set color type list',\n props<{ colorTypeList: IRadioButtonOption[] }>()\n);\n\n/**\n * set user list\n */\nexport const setUserList = createAction(\n '[Turnover] set user list',\n props<{ userList: IRadioButtonOption[] }>()\n);\n\nexport const setUserListModel = createAction(\n '[Turnover] set user list model',\n props<{ userListModel: RestUserModel[] }>()\n);\n\n/**\n * set all user list\n */\nexport const setAllUserRadioList = createAction(\n '[Turnover] set All User Radio List',\n props<{ allUserRadioList: IRadioButtonOption[] }>()\n);\nexport const setAllUserList = createAction('[Turnover] set All User List', props<{ allUserList: RestUserModel[] }>());\n\n/**\n * set company radio list\n */\nexport const setCompanyRadioList = createAction(\n '[Turnover] set company radio List',\n props<{ companyRadioList: IRadioButtonOption[] }>()\n);\n\nexport const setCompanyNameRadioList = createAction(\n '[Turnover] set company name radio List',\n props<{ companyNameRadioList: IRadioButtonOption[] }>()\n);\n\nexport const setCompanyEmailRadioList = createAction(\n '[Turnover] set company email radio List',\n props<{ companyEmailRadioList: IRadioButtonOption[] }>()\n);\n\n/**\n * set attachment to turnover\n */\nexport const setAttachmentToTurnover = createAction(\n '[Turnover] attachment to turnover',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel; preventReloadList?: boolean }>()\n);\nexport const setAttachmentsToTurnover = createAction(\n '[Turnover] set attachments to turnover',\n props<{\n turnoverId: number;\n attachmentType: TurnoverAttachmentType;\n attachments: UpdateTypedAttachmentToEntityModel[];\n preventReloadList?: boolean;\n }>()\n);\nexport const setAttachmentToTurnoverSuccess = createAction(\n '[Turnover] attachment to turnover Success',\n props<{ addedAttachment: RestGenericTypedAttachment }>()\n);\nexport const setAttachmentToTurnoverFailed = createAction('[Turnover] attachment to turnover Failed');\nexport const clearAddedAttachment = createAction('[Turnover] clear Added Attachment');\n\n/**\n * update turnover attachment\n */\nexport const updateTurnoverAttachment = createAction(\n '[Turnover] update turnover attachment',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const updateTurnoverAttachmentSuccess = createAction('[Turnover] update turnover attachment Success');\nexport const updateTurnoverAttachmentFailed = createAction('[Turnover] update turnover attachment Failed');\n\n/**\n * get turnover tickets\n */\nexport const getTurnoverTickets = createAction('[Turnover] get turnover tickets', props<{ turnoverId: number }>());\nexport const getTurnoverTicketsSuccess = createAction(\n '[Turnover] get turnover tickets success',\n props<{ turnoverTicketList: RestTicketModel[] }>()\n);\nexport const getTurnoverTicketsFailed = createAction('[Turnover] get turnover tickets error');\n\n/**\n * add new turnover ticket\n */\nexport const addNewTurnoverTicket = createAction(\n '[Turnover] add new turnover tickets',\n props<{ turnoverTicket: Partial }>()\n);\nexport const addNewTurnoverTicketSuccess = createAction(\n '[Turnover] add new turnover tickets success',\n props<{ newTurnoverTicket: RestTicketModel }>()\n);\nexport const addNewTurnoverTicketFailed = createAction('[Turnover] add new turnover tickets error');\nexport const resetNewTurnoverTicket = createAction('[Turnover] reset new turnover ticket');\n\n/**\n * update turnover ticket\n */\nexport const updateTurnoverTicket = createAction(\n '[Turnover] update turnover tickets',\n props<{ turnoverTicket: RestTicketModel }>()\n);\nexport const updateTurnoverTicketSuccess = createAction(\n '[Turnover] update turnover tickets success',\n props<{ editedTicket: RestTicketModel }>()\n);\nexport const updateTurnoverTicketFailed = createAction('[Turnover] update turnover tickets error');\n\n/**\n * update ticket preview\n */\nexport const updateTicketPreview = createAction(\n '[Turnover] update turnover preview',\n props<{ turnoverTicket: RestTicketModel }>()\n);\nexport const updateTicketPreviewSuccess = createAction(\n '[Turnover] update turnover preview success',\n props<{ editedTicket: RestTicketModel }>()\n);\nexport const updateTicketPreviewFailed = createAction('[Turnover] update turnover preview error');\n\n/**\n * get selected ticket\n */\nexport const getSelectedTicket = createAction('[Turnover] get selected ticket', props<{ ticketId: number }>());\nexport const getSelectedTicketSuccess = createAction(\n '[Turnover] get selected ticket success',\n props<{ ticket: RestTicketModel }>()\n);\nexport const getSelectedTicketFailed = createAction('[Turnover] get selected ticket error');\n\n/**\n * delete turnover ticket\n */\nexport const deleteTurnoverTicket = createAction('[Turnover] delete turnover tickets', props<{ ticketId: number }>());\nexport const deleteTurnoverTicketSuccess = createAction('[Turnover] delete turnover ticket success');\nexport const deleteTurnoverTicketFailed = createAction('[Turnover] delete turnover ticket error');\n\n/**\n * delete turnover ticket attachment\n */\nexport const deleteTurnoverTicketAttachment = createAction(\n '[Turnover] delete turnover tickets attachment',\n props<{ ticketId: number; attachment: RestGenericTypedAttachment; ticketType: TicketType }>()\n);\nexport const deleteTurnoverTicketAttachmentSuccess = createAction(\n '[Turnover] delete turnover ticket attachment success'\n);\nexport const deleteTurnoverTicketAttachmentFailed = createAction('[Turnover] delete turnover ticket attachment error');\n\n/**\n * set turnover attachment\n */\nexport const setTicketAttachment = createAction(\n '[Turnover] set ticket attachment',\n props<{ ticketType: TicketType; attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const setTicketAttachmentSuccess = createAction(\n '[Turnover] set ticket attachment success',\n props<{ addedTicketAttachment: RestTypedTicketAttachment }>()\n);\nexport const setTicketAttachmentFail = createAction('[Turnover] set ticket attachment fail');\nexport const clearAddedTicketAttachment = createAction('[Turnover] clear Added ticket Attachment');\n\n/**\n * get company list\n */\nexport const getCompanyList = createAction('[Turnover] get company list');\nexport const getCompanyListSuccess = createAction(\n '[Turnover] get company list success',\n props<{ companyList: RestCompanyModel[] }>()\n);\nexport const getCompanyListFail = createAction('[Turnover] get company list fail');\n\n/**\n * BIDS\n */\n\n/**\n * get bid turnover list\n */\nexport const getBidTurnoverList = createAction('[Turnover] get bid turnover list', props<{ turnoverId: number }>());\nexport const getBidTurnoverListSuccess = createAction(\n '[Turnover] get bid turnover list success',\n props<{ bidList: RestBidModel[] }>()\n);\nexport const getBidTurnoverListFail = createAction('[Turnover] get bid turnover list fail');\n\n/**\n * get bid company list\n */\nexport const getBidCompanyList = createAction('[Turnover] get bid Company list', props<{ companyId: number }>());\nexport const getBidCompanyListSuccess = createAction(\n '[Turnover] get bid Company list success',\n props<{ bidList: RestBidModel[] }>()\n);\nexport const getBidCompanyListFail = createAction('[Turnover] get bid Company list fail');\n\n/**\n * get all bid list\n */\nexport const getAllBidList = createAction('[Turnover] get all bid list');\nexport const getAllBidListSuccess = createAction(\n '[Turnover] get all bid list success',\n props<{ bidList: RestBidModel[] }>()\n);\nexport const getAllBidListFail = createAction('[Turnover] get all bid list fail');\n\n/**\n * get bid\n */\nexport const getBid = createAction('[Turnover] get bid', props<{ bidId: number }>());\nexport const clearBid = createAction('[Turnover] clear bid');\nexport const getBidSuccess = createAction('[Turnover] get bid success', props<{ bid: RestBidModel }>());\nexport const getBidFail = createAction('[Turnover] get bid fail');\n\n/**\n * add new bid\n */\nexport const addNewBid = createAction('[Turnover] add new bid', props<{ bidList: RestBidModel[] }>());\nexport const addNewBidSuccess = createAction('[Turnover] add new bid success', props<{ newBidList: RestBidModel[] }>());\nexport const addNewBidFail = createAction('[Turnover] add new bid fail');\nexport const clearNewBidList = createAction('[Turnover] clear New Bid List');\nexport const newBidInProgress = createAction(\n '[Turnover] new Bid In Progress',\n props<{ newBidListInProgress: boolean }>()\n);\n\n/**\n * update bid\n */\nexport const updateBid = createAction('[Turnover] update bid', props<{ bid: RestBidModel }>());\nexport const updateBidSuccess = createAction('[Turnover] update bid success', props<{ updatedBid: RestBidModel }>());\nexport const updateBidFail = createAction('[Turnover] update bid fail');\nexport const clearUpdatedBid = createAction('[Turnover] clear updated bid');\n\n/**\n * reject bid\n */\nexport const rejectBid = createAction('[Turnover] reject bid', props<{ id: number }>());\nexport const rejectBidSuccess = createAction('[Turnover] reject bid success', props<{ updatedBid: RestBidModel }>());\nexport const rejectBidFail = createAction('[Turnover] reject bid fail');\n\n/**\n * update bid comment\n */\nexport const updateBidComment = createAction('[Turnover] update bid comment', props<{ bid: RestBidModel }>());\nexport const updateBidCommentSuccess = createAction(\n '[Turnover] update bid comment success',\n props<{ updatedBid: RestBidModel }>()\n);\nexport const updateBidCommentFail = createAction('[Turnover] update bid comment fail');\n\n/**\n * set bid attachment\n */\nexport const setBidAttachment = createAction(\n '[Turnover] set bid attachment',\n props<{ attachmentToEntity: UpdateTypedAttachmentToEntityModel }>()\n);\nexport const setBidAttachmentSuccess = createAction(\n '[Turnover] set bid attachment success',\n props<{ addedBidAttachment: RestTypedBidAttachment }>()\n);\nexport const setBidAttachmentFail = createAction('[Turnover] set bid attachment fail');\nexport const clearAddedBidAttachment = createAction('[Turnover] clear Added bid Attachment');\n\n/**\n * delete bid attachment\n */\nexport const deleteBidAttachment = createAction(\n '[Turnover] delete bid attachment',\n props<{ bidId: number; attachment: RestTypedBidAttachment }>()\n);\nexport const deleteBidAttachmentSuccess = createAction('[Turnover] delete bid attachment success');\nexport const deleteBidAttachmentFailed = createAction('[Turnover] delete bid attachment error');\n\n/**\n * get bid attachment list\n */\nexport const getBidAttachmentList = createAction('[Turnover] get bid attachment list', props<{ bidId: number }>());\nexport const getBidAttachmentListSuccess = createAction(\n '[Turnover] get bid attachment list success',\n props<{ allAttachments: RestTypedBidAttachment[] }>()\n);\nexport const getBidAttachmentListFailed = createAction('[Turnover] get bid attachment list error');\n\n/**\n * get appliance\n */\nexport const getAppliance = createAction('[Turnover] get appliance', props<{ applianceId: number }>());\nexport const getApplianceSuccess = createAction(\n '[Turnover] get appliance success',\n props<{ appliance: RestApplianceModel }>()\n);\nexport const getApplianceFailed = createAction('[Turnover] get appliance failed');\n\n/**\n * get workflow step comment list\n */\nexport const getWorkflowStepCommentList = createAction(\n '[Turnover] get workflow step comment list',\n props<{ turnoverId: number }>()\n);\nexport const clearWorkflowStepCommentList = createAction('[Turnover] clear workflow step comment list');\nexport const getWorkflowStepCommentListSuccess = createAction(\n '[Turnover] get workflow step comment list success',\n props<{ workflowStepCommentList: RestWorkflowStepCommentModel[] }>()\n);\nexport const getWorkflowStepCommentListFailed = createAction('[Turnover] get workflow step comment list failed');\n\n/**\n * add workflow step comment\n */\nexport const addWorkflowStepComment = createAction(\n '[Turnover] add workflow step comment',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const addWorkflowStepCommentSuccess = createAction(\n '[Turnover] add workflow step comment success',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const addWorkflowStepCommentFailed = createAction('[Turnover] add workflow step comment failed');\n\nexport const addWorkflowStepCommentReaction = createAction(\n '[Turnover] addWorkflowStepCommentReaction',\n props<{ commentItem: RestWorkflowStepCommentModel; emoji: string }>()\n);\n\nexport const addWorkflowStepCommentReactionSuccess = createAction(\n '[Turnover] addWorkflowStepCommentReactionSuccess',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\n\nexport const removeWorkflowStepCommentReaction = createAction(\n '[Turnover] removeWorkflowStepCommentReaction',\n props<{ commentItem: RestWorkflowStepCommentModel; emoji: string }>()\n);\n\nexport const removeWorkflowStepCommentReactionSuccess = createAction(\n '[Turnover] removeWorkflowStepCommentReactionSuccess',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\n\n/**\n * update workflow step comment\n */\nexport const updateWorkflowStepComment = createAction(\n '[Turnover] update workflow step comment',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const updateWorkflowStepCommentSuccess = createAction(\n '[Turnover] update workflow step comment success',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const updateWorkflowStepCommentFailed = createAction('[Turnover] update workflow step comment failed');\n\n/**\n * delete workflow step comment\n */\nexport const deleteWorkflowStepComment = createAction(\n '[Turnover] delete workflow step comment',\n props<{ commentItem: RestWorkflowStepCommentModel }>()\n);\nexport const deleteWorkflowStepCommentSuccess = createAction('[Turnover] delete workflow step comment success');\nexport const deleteWorkflowStepCommentFailed = createAction('[Turnover] delete workflow step comment failed');\n\n/**\n * delete turnover\n */\nexport const deleteTurnover = createAction(\n '[Turnover] delete turnover',\n props<{ turnoverId: number; unitName: string; disableAutoTurnCreation?: boolean }>()\n);\n\nexport const deleteTurnoverSuccess = createAction('[Turnover] delete turnover success');\nexport const deleteTurnoverFailed = createAction('[Turnover] delete turnover failed');\n\n/**\n * delete turnover attachment\n */\nexport const deleteTurnoverAttachment = createAction(\n '[Turnover] delete turnover attachment',\n props<{ attachment: RestTypedTurnoverAttachment }>()\n);\nexport const deleteTurnoverAttachmentSuccess = createAction('[Turnover] delete turnover attachment success');\nexport const deleteTurnoverAttachmentFailed = createAction('[Turnover] delete turnover attachment failed');\n\n/**\n * delete file from repository\n */\nexport const deleteFileFromRepository = createAction(\n '[Turnover] delete file from repository',\n props<{ fileId: number }>()\n);\nexport const deleteFileFromRepositorySuccess = createAction('[Turnover] delete file from repository success');\nexport const deleteFileFromRepositoryFailed = createAction('[Turnover] delete file from repository failed');\n\n/**\n * get turnover attachments\n */\nexport const getTurnoverAttachments = createAction(\n '[Turnover] get turnover attachments',\n props<{ turnoverId: number }>()\n);\nexport const getTurnoverAttachmentsSuccess = createAction(\n '[Turnover] get turnover attachments success',\n props<{ allAttachments: RestTypedTurnoverAttachment[] }>()\n);\nexport const getTurnoverAttachmentsFailed = createAction('[Turnover] get turnover attachments failed');\nexport const clearTurnoverAttachments = createAction('[Turnover] clear turnover attachments');\n\n/**\n * get ticket\n */\nexport const getTicket = createAction('[Turnover] get ticket', props<{ ticketId: number }>());\nexport const getTicketSuccess = createAction(\n '[Turnover] get ticket success',\n props<{ restTicketModel: RestTicketModel }>()\n);\nexport const getTicketFailed = createAction('[Turnover] get ticket failed');\n\n/**\n * get ticket attachments\n */\nexport const getTicketAttachments = createAction('[Turnover] get ticket attachments', props<{ ticketId: number }>());\nexport const getTicketAttachmentsSuccess = createAction(\n '[Turnover] get ticket attachments success',\n props<{ ticketAttachments: RestTypedTicketAttachment[] }>()\n);\nexport const getTicketAttachmentsFailed = createAction('[Turnover] get ticket attachments failed');\n\n/**\n * clear ticket preview\n */\nexport const clearTicketPreview = createAction('[Turnover] clear ticket preview');\n\n/**\n * set step Info\n */\nexport const setStepInfo = createAction('[Turnover] set step Info', props<{ stepInfo: TurnoverStepInfo }>());\n\n/**\n * clean store\n */\nexport const cleanTurnoverStore = createAction('[Turnover] clean store');\n\n// export const loadWorkflowAssignmentsByPropertyAndStepId = createAction(\n// '[Turnover] get workflow assigments by propertyId and stepId',\n// props<{ stepId: WorkflowStepEnumType; propertyId: number }>()\n// );\n\nexport const workflowAssignmentsByPropertyAndStepIdSucceded = createAction(\n '[Turnover] loaded workflow assigments by propertyId and stepId succeeded',\n props<{ workflowStepAssigneeId: number }>()\n);\nexport const workflowAssignmentsByPropertyAndStepIdFailure = createAction(\n '[Turnover] loaded workflow assigments by propertyId and stepId failure'\n);\n\n/**\n * assign default Workflow Step Assignee\n */\nexport const assignDefaultWorkflowStepAssignee = createAction(\n '[Turnover] assign default Workflow Step Assignee',\n props<{ turnoverData: RestTurnoverDataModel; workflowStep: WorkflowStepEnumType; propertyId: number }>()\n);\nexport const assignDefaultWorkflowStepAssigneeSuccess = createAction(\n '[Turnover] assign default Workflow Step Responsible Party success',\n props<{ turnoverData: RestTurnoverDataModel }>()\n);\nexport const assignDefaultWorkflowStepAssigneeFailed = createAction(\n '[Turnover] assign default Workflow Step Responsible Party failed'\n);\n\nexport const reloadAppliancesNeeded = createAction('[Turnover] reload appliances needed');\n\nexport const reloadAppliancesNeededEnd = createAction('[Turnover] reload appliances needed end');\nexport const emptyAction = createAction('[Turnover] empty action');\n\nexport const inspectTurnover = createAction('[Turnover] inspect Turnover', props<{ inspectTurnoverId: number }>());\n\nexport const updateValidationParams = createAction(\n '[Turnover] update Validation Params',\n props<{ validationParams: ValidationParams }>()\n);\n\n/**\n * set step assignee\n */\nexport const setStepAssignee = createAction(\n '[Turnover] set step assignee',\n props<{ workflowAction: WorkflowAction }>()\n);\nexport const setStepAssigneeSuccess = createAction('[Turnover] set step assignee success');\nexport const setStepAssigneeFailed = createAction('[Turnover] set step assignee failed');\n\n/**\n * get default turnovers assignees\n */\nexport const getDefaultTurnoversAssignees = createAction(\n '[Turnover] get default turnovers assignees',\n props<{ propertyId: number }>()\n);\nexport const getDefaultTurnoversAssigneesSuccess = createAction(\n '[Turnover] get default turnovers assignees success',\n props<{ defaultTurnoversAssignees: RestWorkflowStepAssignmentModel[] }>()\n);\nexport const getDefaultTurnoversAssigneesFailed = createAction('[Turnover] get default turnovers assignees failed');\n\n/**\n * counters\n */\nexport const resetKanbanCounters = createAction('[Turnover] reset Kanban Counters');\n\nexport const setAllPropertyIds = createAction('[Turnover] set All Property Ids', props<{ allPropertyIds: number[] }>());\n\nexport const toggleAllSections = createAction('[Turnover] toggle All Sections', props<{ active: boolean }>());\n\nexport const toggleSingleSection = createAction(\n '[Turnover] toggle Single Section',\n props<{ propertyId: number; active: boolean }>()\n);\n\nexport const setActiveSections = createAction(\n '[Turnover] set active Sections',\n props<{ activePropertyIds: number[] }>()\n);\n\nexport const toggleInactiveFilteredSingleSection = createAction(\n '[Turnover] toggle Filtered Single Section',\n props<{ propertyId: number; active: boolean }>()\n);\n\nexport const setInactiveFilteredSections = createAction(\n '[Turnover] set filtered inactive Sections',\n props<{ inactiveFilteredPropertyIds: number[] }>()\n);\n\nexport const setDisplayedPropertyList = createAction(\n '[Turnover] set Displayed Property List',\n props<{ displayedPropertyList: KanbanListItem[] }>()\n);\n\nexport const setSectionLostRevenue = createAction(\n '[Turnover] set section lost revenue',\n props<{ propertyId: number; lostRevenue: number }>()\n);\n\nexport const loadTurnoverTimers = createAction('[Turnover] load timers', props<{ turnoverId: number }>());\nexport const clearTurnoverTimers = createAction('[Turnover] clear timers');\nexport const turnoverTimersLoaded = createAction(\n '[Turnover] timers loaded',\n props<{ turnoverId: number; timers: TurnoverStepTimer[] }>()\n);\nexport const setTurnoverTimers = createAction(\n '[Turnover] set timers',\n props<{ turnoverId: number; timers: TurnoverStepTimer[] }>()\n);\nexport const setTurnoverTimersSuccess = createAction('[Turnover] setTurnoverTimers success');\nexport const setTurnoverTimersFailed = createAction('[Turnover] setTurnoverTimers failed');\n\nexport const setWorkflowStepAssignee = createAction(\n '[Turnover] setWorkflowStepAssignee',\n props<{ turnoverId: number; step: WorkflowStepEnumType; assigneeId: number }>()\n);\nexport const setEmptyWorkflowStepAssignee = createAction(\n '[Turnover] setEmptyWorkflowStepAssignee',\n props<{ turnoverId: number; step: WorkflowStepEnumType; assigneeId: number; rememberIt: boolean }>()\n);\n\nexport const transitEmptyWorkflowStepAssignee = createAction(\n '[Turnover] transitEmptyWorkflowStepAssignee',\n props<{ turnoverId: number; step: WorkflowStepEnumType; source: TurnoverTransitionSource; assigneeId: number }>()\n);\n\nexport const setWorkflowStepAssigneeSuccess = createAction('[Turnover] setWorkflowStepAssigneeSuccess');\nexport const setWorkflowStepAssigneeFailed = createAction('[Turnover] setWorkflowStepAssigneeFailed');\n\nexport const loadTurnoverSummaryStats = createAction(\n '[Turnover] Load Turnover Summary Stats',\n props<{ filter: TurnoverSummaryFilters }>()\n);\n\nexport const loadTurnoverSummaryStatsSuccess = createAction(\n '[Turnover] Load Turnover Summary Stats Success',\n props<{ stats: SummaryStatsGroup[] }>()\n);\n\nexport const loadTurnoverSummaryStatsFailed = createAction(\n '[Turnover] Load Turnover Summary Stats Failed',\n props<{ error: any }>()\n);\n\nexport const loadTurnoverSummaryDetails = createAction(\n '[Turnover] Load Turnover Summary Details',\n props<{ filter: TurnoverSummaryFilters }>()\n);\n\nexport const loadTurnoverSummaryDetailsSuccess = createAction(\n '[Turnover] Load Turnover Summary Details Success',\n props<{ details: TurnoversSummaryStatsDetails }>()\n);\n\nexport const loadTurnoverSummaryDetailsFailed = createAction(\n '[Turnover] Load Turnover Summary Details Failed',\n props<{ error: any }>()\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\nimport {\n clearPunchesByTurnoverId,\n clearSelectedPunch,\n loadPunchByIdFinished,\n loadPunchesByTurnoverId,\n loadPunchesByTurnoverIdFinished,\n} from '../actions/punch.actions';\n\nexport const punchFeatureKey = 'punch';\n\nexport interface PunchState {\n punchesByTurnoverId?: RestTicketModel[];\n punchesByTurnoverIdLoading?: boolean;\n selectedPunch?: RestTicketModel;\n}\n\nexport const initialState: PunchState = {};\n\nexport const reducer = createReducer(\n initialState,\n on(loadPunchesByTurnoverId, (state, action) => ({ ...state, punchesByTurnoverIdLoading: true })),\n on(loadPunchesByTurnoverIdFinished, (state, action) => ({\n ...state,\n punchesByTurnoverIdLoading: false,\n punchesByTurnoverId: action.result,\n })),\n on(clearPunchesByTurnoverId, (state, action) => ({\n ...state,\n punchesByTurnoverIdLoading: false,\n punchesByTurnoverId: null,\n })),\n on(loadPunchByIdFinished, (state, action) => ({ ...state, selectedPunch: action.punch })),\n on(clearSelectedPunch, (state, action) => ({ ...state, selectedPunch: null }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n createTurnoverBid,\n createTurnoverBidFailed,\n createTurnoverBidSuccess,\n loadTurnoverBidCategoriesSuccess,\n loadTurnoverBids,\n loadTurnoverBidsFailed,\n loadTurnoverBidsSuccess,\n} from '@main-application/turnovers/store/actions/turnover-bids.actions';\nimport { RestTurnoverBid, RestTurnoverBidCategory } from '@shared/interfaces/turnover-bids.interface';\n\nexport const turnoverBidsFeatureKey = 'turnover-bids';\n\nexport interface TurnoverBidsState {\n bidsLoading: boolean;\n bids: RestTurnoverBid[];\n bidCategories: RestTurnoverBidCategory[];\n bidAdding: boolean;\n}\n\nexport const initialState: TurnoverBidsState = {\n bidsLoading: false,\n bids: [],\n bidCategories: [],\n bidAdding: false,\n};\n\nexport const turnoverBidsReducer = createReducer(\n initialState,\n\n // load\n on(loadTurnoverBids, state => ({\n ...state,\n bidsLoading: true,\n })),\n on(loadTurnoverBidsSuccess, (state, action) => ({\n ...state,\n bids: action.bids,\n bidsLoading: false,\n })),\n on(loadTurnoverBidsFailed, state => ({\n ...state,\n bids: [],\n bidsLoading: false,\n })),\n\n // create\n on(createTurnoverBid, state => ({\n ...state,\n bidAdding: true,\n })),\n on(createTurnoverBidSuccess, state => ({\n ...state,\n bidAdding: false,\n })),\n on(createTurnoverBidFailed, state => ({\n ...state,\n bidAdding: false,\n })),\n on(loadTurnoverBidCategoriesSuccess, (state, action) => ({\n ...state,\n bidCategories: action.categories,\n }))\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { TurnoverStepTimer } from '@main-application/turnovers/interfaces/timers.interface';\nimport { ValidationParams } from '@main-application/turnovers/interfaces/validation-params.interface';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestApplianceModel } from '@shared/interfaces/appliance.interface';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestBidModel, RestTypedBidAttachment } from '@shared/interfaces/bid.interface';\nimport { RestCommentModel, RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { KanbanListItem } from '@shared/interfaces/kanban-list-item.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestWorkflowStepAssignmentModel } from '@shared/interfaces/rest-workflow-step-assignment-model.interface';\nimport {\n RestTicketModel,\n RestTurnoverDataModel,\n RestTypedTicketAttachment,\n RestTypedTurnoverAttachment,\n RestWorkflowInstanceModel,\n TurnoverStepInfo,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport {\n SummaryStatsGroup,\n TurnoversSummaryStatsDetails,\n} from '@ui-components/components/summary-expandable-table/summary-expandable-table.model';\n\nimport {\n addNewBid,\n addNewBidFail,\n addNewBidSuccess,\n addNewTurnoverTicket,\n addNewTurnoverTicketFailed,\n addNewTurnoverTicketSuccess,\n addWorkflowStepComment,\n addWorkflowStepCommentFailed,\n addWorkflowStepCommentReactionSuccess,\n addWorkflowStepCommentSuccess,\n cleanTurnoverStore,\n clearAddedAttachment,\n clearAddedBidAttachment,\n clearAddedTicketAttachment,\n clearBid,\n clearNewBidList,\n clearTicketPreview,\n clearTurnoverAttachments,\n clearTurnoverData,\n clearTurnoverTimers,\n clearUpdatedBid,\n clearWorkflowStepCommentList,\n createNewTurnover,\n createNewTurnoverFailed,\n createNewTurnoverSuccess,\n deleteBidAttachment,\n deleteBidAttachmentFailed,\n deleteBidAttachmentSuccess,\n deleteFileFromRepositoryFailed,\n deleteFileFromRepositorySuccess,\n deleteTurnover,\n deleteTurnoverAttachment,\n deleteTurnoverAttachmentFailed,\n deleteTurnoverAttachmentSuccess,\n deleteTurnoverFailed,\n deleteTurnoverSuccess,\n deleteTurnoverTicket,\n deleteTurnoverTicketFailed,\n deleteTurnoverTicketSuccess,\n deleteWorkflowStepComment,\n deleteWorkflowStepCommentFailed,\n deleteWorkflowStepCommentSuccess,\n getAllBidList,\n getAllBidListFail,\n getAllBidListSuccess,\n getAppliance,\n getApplianceFailed,\n getApplianceSuccess,\n getBid,\n getBidAttachmentList,\n getBidAttachmentListFailed,\n getBidAttachmentListSuccess,\n getBidCompanyList,\n getBidCompanyListFail,\n getBidCompanyListSuccess,\n getBidFail,\n getBidSuccess,\n getBidTurnoverList,\n getBidTurnoverListFail,\n getBidTurnoverListSuccess,\n getCompanyList,\n getCompanyListFail,\n getCompanyListSuccess,\n getDefaultTurnoversAssignees,\n getDefaultTurnoversAssigneesFailed,\n getDefaultTurnoversAssigneesSuccess,\n getSelectedTicket,\n getSelectedTicketFailed,\n getSelectedTicketSuccess,\n getTicket,\n getTicketAttachments,\n getTicketAttachmentsFailed,\n getTicketAttachmentsSuccess,\n getTicketFailed,\n getTicketSuccess,\n getTurnoverAttachments,\n getTurnoverAttachmentsFailed,\n getTurnoverAttachmentsSuccess,\n getTurnoverData,\n getTurnoverDataFailed,\n getTurnoverDataSuccess,\n getTurnoverTickets,\n getTurnoverTicketsFailed,\n getTurnoverTicketsSuccess,\n getWorkflowStepCommentList,\n getWorkflowStepCommentListFailed,\n getWorkflowStepCommentListSuccess,\n inspectTurnover,\n loadTurnoverSummaryDetails,\n loadTurnoverSummaryDetailsFailed,\n loadTurnoverSummaryDetailsSuccess,\n loadTurnoverSummaryStats,\n loadTurnoverSummaryStatsFailed,\n loadTurnoverSummaryStatsSuccess,\n newBidInProgress,\n rejectBid,\n rejectBidFail,\n rejectBidSuccess,\n reloadAppliancesNeeded,\n reloadAppliancesNeededEnd,\n removeWorkflowStepCommentReactionSuccess,\n resetCreateNewTurnover,\n resetKanbanCounters,\n resetNewTurnoverTicket,\n resetWorkflowStepStatus,\n setActiveSections,\n setAllPropertyIds,\n setAllUserList,\n setAllUserRadioList,\n setApplianceTypeList,\n setAttachmentToTurnover,\n setAttachmentToTurnoverFailed,\n setAttachmentToTurnoverSuccess,\n setBidAttachment,\n setBidAttachmentFail,\n setBidAttachmentSuccess,\n setColorTypeList,\n setCompanyEmailRadioList,\n setCompanyNameRadioList,\n setCompanyRadioList,\n setCurrentWorkflowStep,\n setCurrentWorkflowStepModel,\n setDisplayedPropertyList,\n setInactiveFilteredSections,\n setSectionLostRevenue,\n setStepAssignee,\n setStepAssigneeFailed,\n setStepAssigneeSuccess,\n setStepInfo,\n setTicketAttachment,\n setTicketAttachmentFail,\n setTicketAttachmentSuccess,\n setUserList,\n setUserListModel,\n setWorkflowStepSuccess,\n turnoverTimersLoaded,\n updateBid,\n updateBidComment,\n updateBidCommentFail,\n updateBidCommentSuccess,\n updateBidFail,\n updateBidSuccess,\n updateTicketPreview,\n updateTicketPreviewFailed,\n updateTicketPreviewSuccess,\n updateTurnoverAttachment,\n updateTurnoverAttachmentFailed,\n updateTurnoverAttachmentSuccess,\n updateTurnoverTicket,\n updateTurnoverTicketFailed,\n updateTurnoverTicketSuccess,\n updateValidationParams,\n updateWorkflowStepComment,\n updateWorkflowStepCommentFailed,\n updateWorkflowStepCommentSuccess,\n workflowAssignmentsByPropertyAndStepIdSucceded,\n} from '../actions/turnovers.actions';\n\nexport const turnoversFeatureKey = 'turnovers';\n\nexport interface State {\n turnoverData: RestTurnoverDataModel;\n updatedTurnoverData: RestTurnoverDataModel;\n emptyTurnoverData: boolean;\n createTurnoverLoading: boolean;\n createdTurnover: RestTurnoverDataModel;\n turnoverDataLoading: boolean;\n commentItem: RestCommentModel;\n setWorkflowStepStatus: UpdateStatus;\n nextWorkflowStep: WorkflowStepEnumType;\n setWorkflowStepLoading: boolean;\n currentWorkflowStep: WorkflowStepEnumType;\n currentWorkflowStepModel: RestWorkflowInstanceModel;\n applianceTypeList: IRadioButtonOption[];\n colorTypeList: IRadioButtonOption[];\n userList: IRadioButtonOption[];\n userListModel: RestUserModel[];\n companyRadioList: IRadioButtonOption[];\n companyNameRadioList: IRadioButtonOption[];\n companyEmailRadioList: IRadioButtonOption[];\n attachmentToEntity: UpdateTypedAttachmentToEntityModel;\n addBidAttachmentInProgress: boolean;\n addBidAttachmentStatus: UpdateStatus;\n addedAttachment: RestGenericTypedAttachment;\n addedBidAttachment: RestTypedBidAttachment;\n addedTicketAttachment: RestTypedTicketAttachment;\n turnoverTicketList: RestTicketModel[];\n turnoverTicketListLoading: boolean;\n newTurnoverTicket: RestTicketModel;\n newTurnoverTicketLoading: boolean;\n editedTicket: RestTicketModel;\n selectedTicket: RestTicketModel;\n selectedTicketLoading: boolean;\n addNewApplianceNeededLoading: boolean;\n isNewApplianceNeededAdd: boolean;\n markApplianceAsDoneLoading: boolean;\n isMarkApplianceAsDone: boolean;\n companyList: RestCompanyModel[];\n companyListLoading: boolean;\n newBidList: RestBidModel[];\n newBidListInProgress: boolean;\n bidTurnoverList: RestBidModel[];\n bidTurnoverListLoading: boolean;\n bidCompanyList: RestBidModel[];\n bidCompanyListLoading: boolean;\n bid: RestBidModel;\n editedBid: RestBidModel;\n bidLoading: boolean;\n updatedBid: RestBidModel;\n updatedBidLoading: boolean;\n updatedBidCommentLoading: boolean;\n appliance: RestApplianceModel;\n applianceLoading: boolean;\n workflowStepCommentList: RestWorkflowStepCommentModel[];\n workflowStepCommentListLoading: boolean;\n workflowStepCommentUpdateLoading: boolean;\n workflowStepAssigneeId: number;\n workflowStepAssignmentLoading: boolean;\n reloadAppliancesNeeded: boolean;\n deleteTurnoverInProgress: boolean;\n turnoverDeleteStatus: UpdateStatus;\n deleteTurnoverAttachmentInProgress: boolean;\n turnoverDeleteAttachmentStatus: UpdateStatus;\n addTurnoverAttachmentInProgress: boolean;\n addTurnoverAttachmentStatus: UpdateStatus;\n stepInfo: TurnoverStepInfo;\n allAttachments: RestTypedTurnoverAttachment[];\n allAttachmentsLoading: boolean;\n deleteBidAttachmentInProgress: boolean;\n deleteBidAttachmentStatus: UpdateStatus;\n bidAttachments: RestTypedBidAttachment[];\n bidAttachmentsLoading: boolean;\n updateTicketInProgress: boolean;\n updateTurnoverAttachmentInProgress: boolean;\n updateTurnoverAttachmentStatus: UpdateStatus;\n\n allBidList: RestBidModel[];\n allBidListLoading: boolean;\n\n ticket: RestTicketModel;\n ticketLoading: boolean;\n\n ticketAttachments: RestTypedTicketAttachment[];\n ticketAttachmentsLoading: boolean;\n\n ticketUpdateInProgress: boolean;\n ticketUpdateInProgressStatus: UpdateStatus;\n\n inspectTurnoverId: number;\n\n validationParams: ValidationParams;\n\n allPropertyIds: number[];\n activePropertyIds: number[];\n inactiveFilteredPropertyIds: number[];\n\n updateStepAssigneeInProgress: boolean;\n updateStepAssigneeStatus: UpdateStatus;\n\n defaultTurnoversAssignees: RestWorkflowStepAssignmentModel[];\n defaultTurnoversAssigneesLoading: boolean;\n\n allUserRadioList: IRadioButtonOption[];\n allUserList: RestUserModel[];\n displayedPropertyList: KanbanListItem[];\n sectionsLostRevenue: { [key: number]: number };\n rejectBidLoading: boolean;\n\n timers: TurnoverStepTimer[];\n\n turnoversSummaryStats: SummaryStatsGroup[] | null;\n turnoversSummaryDetails: TurnoversSummaryStatsDetails | null;\n turnoversSummaryLoading: boolean;\n turnoversSummaryError: any;\n}\n\nexport const initialState: State = {\n turnoverData: null,\n updatedTurnoverData: null,\n emptyTurnoverData: false,\n createTurnoverLoading: false,\n createdTurnover: null,\n turnoverDataLoading: false,\n commentItem: null,\n setWorkflowStepStatus: null,\n nextWorkflowStep: null,\n setWorkflowStepLoading: false,\n currentWorkflowStep: null,\n currentWorkflowStepModel: null,\n applianceTypeList: [],\n colorTypeList: [],\n userList: [],\n userListModel: [],\n companyRadioList: [],\n companyNameRadioList: [],\n companyEmailRadioList: [],\n attachmentToEntity: null,\n addBidAttachmentInProgress: false,\n addBidAttachmentStatus: null,\n addedAttachment: null,\n addedBidAttachment: null,\n addedTicketAttachment: null,\n turnoverTicketList: [],\n turnoverTicketListLoading: false,\n newTurnoverTicket: null,\n newTurnoverTicketLoading: false,\n editedTicket: null,\n selectedTicket: null,\n selectedTicketLoading: false,\n addNewApplianceNeededLoading: false,\n isNewApplianceNeededAdd: false,\n markApplianceAsDoneLoading: false,\n isMarkApplianceAsDone: false,\n companyList: [],\n companyListLoading: false,\n newBidList: [],\n newBidListInProgress: false,\n bidTurnoverList: [],\n bidTurnoverListLoading: false,\n bidCompanyList: [],\n bidCompanyListLoading: false,\n bid: null,\n editedBid: null,\n bidLoading: false,\n updatedBid: null,\n updatedBidLoading: false,\n updatedBidCommentLoading: false,\n appliance: null,\n applianceLoading: false,\n workflowStepCommentList: [],\n workflowStepCommentListLoading: false,\n workflowStepCommentUpdateLoading: false,\n workflowStepAssigneeId: null,\n workflowStepAssignmentLoading: false,\n reloadAppliancesNeeded: false,\n deleteTurnoverInProgress: false,\n turnoverDeleteStatus: null,\n deleteTurnoverAttachmentInProgress: false,\n turnoverDeleteAttachmentStatus: null,\n addTurnoverAttachmentInProgress: false,\n addTurnoverAttachmentStatus: null,\n stepInfo: null,\n allAttachments: [],\n allAttachmentsLoading: false,\n deleteBidAttachmentInProgress: false,\n deleteBidAttachmentStatus: null,\n bidAttachments: [],\n bidAttachmentsLoading: false,\n updateTicketInProgress: false,\n updateTurnoverAttachmentInProgress: false,\n updateTurnoverAttachmentStatus: null,\n\n allBidList: [],\n allBidListLoading: false,\n\n ticket: null,\n ticketLoading: false,\n\n ticketAttachments: [],\n ticketAttachmentsLoading: false,\n\n ticketUpdateInProgress: false,\n ticketUpdateInProgressStatus: null,\n\n inspectTurnoverId: null,\n\n validationParams: {},\n\n allPropertyIds: [],\n activePropertyIds: [],\n inactiveFilteredPropertyIds: [],\n\n updateStepAssigneeInProgress: false,\n updateStepAssigneeStatus: null,\n\n defaultTurnoversAssignees: [],\n defaultTurnoversAssigneesLoading: false,\n\n allUserRadioList: [],\n allUserList: [],\n\n displayedPropertyList: [],\n sectionsLostRevenue: {},\n rejectBidLoading: false,\n\n timers: null,\n\n turnoversSummaryStats: null,\n turnoversSummaryDetails: null,\n turnoversSummaryLoading: false,\n turnoversSummaryError: null,\n};\n\nexport const reducer = createReducer(\n initialState,\n /**\n * Create new Turnover\n */\n on(createNewTurnover, state => ({\n ...state,\n createTurnoverLoading: true,\n })),\n on(createNewTurnoverSuccess, (state, action) => ({\n ...state,\n createTurnoverLoading: false,\n createdTurnover: action.turnoverData,\n })),\n on(resetCreateNewTurnover, createNewTurnoverFailed, state => ({\n ...state,\n createTurnoverLoading: false,\n createdTurnover: null,\n })),\n\n /**\n * Get turnover data\n */\n on(clearTurnoverData, state => ({\n ...state,\n turnoverDataLoading: false,\n emptyTurnoverData: false,\n turnoverData: null,\n })),\n on(getTurnoverData, state => ({\n ...state,\n turnoverDataLoading: true,\n emptyTurnoverData: false,\n })),\n on(getTurnoverDataSuccess, (state, action) => ({\n ...state,\n turnoverData: action.turnoverData,\n turnoverDataLoading: false,\n emptyTurnoverData: false,\n })),\n on(getTurnoverDataFailed, state => ({\n ...state,\n turnoverData: null,\n turnoverDataLoading: false,\n emptyTurnoverData: true,\n })),\n /**\n * Set workflow step\n */\n on(setWorkflowStepSuccess, (state, action) => ({\n ...state,\n setWorkflowStepStatus: UpdateStatus.OK,\n nextWorkflowStep: action.nextWorkflowStep,\n setWorkflowStepLoading: false,\n })),\n on(resetWorkflowStepStatus, state => ({\n ...state,\n setWorkflowStepStatus: null,\n nextWorkflowStep: null,\n })),\n\n /**\n * set current workflow step\n */\n on(setCurrentWorkflowStep, (state, action) => ({\n ...state,\n currentWorkflowStep: action.currentWorkflowStep,\n })),\n\n on(setCurrentWorkflowStepModel, (state, action) => ({\n ...state,\n currentWorkflowStepModel: action.currentWorkflowStepModel,\n })),\n\n /**\n * set attachment to turnover\n */\n on(setAttachmentToTurnover, (state, action) => ({\n ...state,\n attachmentToEntity: action.attachmentToEntity,\n addedAttachment: null,\n addTurnoverAttachmentInProgress: true,\n addTurnoverAttachmentStatus: null,\n })),\n on(setAttachmentToTurnoverSuccess, (state, action) => ({\n ...state,\n addedAttachment: action.addedAttachment,\n addTurnoverAttachmentInProgress: false,\n addTurnoverAttachmentStatus: UpdateStatus.OK,\n })),\n on(setAttachmentToTurnoverFailed, state => ({\n ...state,\n addedAttachment: null,\n addTurnoverAttachmentInProgress: false,\n addTurnoverAttachmentStatus: UpdateStatus.ERROR,\n })),\n on(clearAddedAttachment, state => ({\n ...state,\n addedAttachment: null,\n })),\n\n /**\n * update turnover attachment\n */\n on(updateTurnoverAttachment, state => ({\n ...state,\n updateTurnoverAttachmentInProgress: true,\n updateTurnoverAttachmentStatus: UpdateStatus.UPDATE,\n })),\n on(updateTurnoverAttachmentSuccess, state => ({\n ...state,\n updateTurnoverAttachmentInProgress: false,\n updateTurnoverAttachmentStatus: UpdateStatus.OK,\n })),\n on(updateTurnoverAttachmentFailed, state => ({\n ...state,\n updateTurnoverAttachmentInProgress: false,\n updateTurnoverAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * get turnover tickets\n */\n on(getTurnoverTickets, state => ({\n ...state,\n turnoverTicketListLoading: true,\n })),\n on(getTurnoverTicketsSuccess, (state, action) => ({\n ...state,\n turnoverTicketList: action.turnoverTicketList,\n turnoverTicketListLoading: false,\n })),\n on(getTurnoverTicketsFailed, state => ({\n ...state,\n turnoverTicketList: [],\n turnoverTicketListLoading: false,\n })),\n\n /**\n * add new turnover ticket\n */\n on(addNewTurnoverTicket, state => ({\n ...state,\n newTurnoverTicket: null,\n newTurnoverTicketLoading: true,\n })),\n on(addNewTurnoverTicketSuccess, (state, action) => ({\n ...state,\n newTurnoverTicket: action.newTurnoverTicket,\n newTurnoverTicketLoading: false,\n })),\n on(addNewTurnoverTicketFailed, state => ({\n ...state,\n newTurnoverTicket: null,\n newTurnoverTicketLoading: false,\n })),\n on(resetNewTurnoverTicket, state => ({\n ...state,\n newTurnoverTicket: null,\n })),\n\n /**\n * update turnover tickets\n */\n on(updateTurnoverTicket, state => ({\n ...state,\n editedTicket: null,\n updateTicketInProgress: true,\n })),\n on(updateTurnoverTicketSuccess, (state, action) => ({\n ...state,\n editedTicket: action.editedTicket,\n updateTicketInProgress: false,\n })),\n on(updateTurnoverTicketFailed, state => ({\n ...state,\n editedTicket: null,\n updateTicketInProgress: false,\n })),\n\n /**\n * update ticket preview\n */\n on(updateTicketPreview, state => ({\n ...state,\n editedTicket: null,\n ticketUpdateInProgress: true,\n ticketUpdateInProgressStatus: UpdateStatus.UPDATE,\n })),\n on(updateTicketPreviewSuccess, (state, action) => ({\n ...state,\n editedTicket: action.editedTicket,\n ticketUpdateInProgress: false,\n ticketUpdateInProgressStatus: UpdateStatus.OK,\n })),\n on(updateTicketPreviewFailed, state => ({\n ...state,\n editedTicket: null,\n ticketUpdateInProgress: false,\n ticketUpdateInProgressStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * update turnover tickets\n */\n on(getSelectedTicket, state => ({\n ...state,\n selectedTicket: null,\n selectedTicketLoading: true,\n })),\n on(getSelectedTicketSuccess, (state, action) => ({\n ...state,\n selectedTicket: action.ticket,\n selectedTicketLoading: false,\n })),\n on(getSelectedTicketFailed, state => ({\n ...state,\n selectedTicket: null,\n selectedTicketLoading: false,\n })),\n\n /**\n * delete turnover tickets\n */\n on(deleteTurnoverTicket, state => ({\n ...state,\n turnoverTicketListLoading: true,\n })),\n on(deleteTurnoverTicketSuccess, state => ({\n ...state,\n turnoverTicketListLoading: false,\n })),\n on(deleteTurnoverTicketFailed, state => ({\n ...state,\n turnoverTicketListLoading: false,\n })),\n\n /**\n * delete bid attachment\n */\n on(deleteBidAttachment, state => ({\n ...state,\n deleteBidAttachmentInProgress: true,\n deleteBidAttachmentStatus: null,\n })),\n on(deleteBidAttachmentSuccess, state => ({\n ...state,\n deleteBidAttachmentInProgress: false,\n deleteBidAttachmentStatus: UpdateStatus.DELETED,\n })),\n on(deleteBidAttachmentFailed, state => ({\n ...state,\n deleteBidAttachmentInProgress: false,\n deleteBidAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * bid attachment list\n */\n on(getBidAttachmentList, state => ({\n ...state,\n bidAttachmentsLoading: true,\n })),\n on(getBidAttachmentListSuccess, (state, action) => ({\n ...state,\n bidAttachments: action.allAttachments,\n bidAttachmentsLoading: false,\n })),\n on(getBidAttachmentListFailed, state => ({\n ...state,\n bidAttachments: [],\n bidAttachmentsLoading: false,\n })),\n\n /**\n * set ticket attachment\n */\n on(setTicketAttachment, (state, action) => ({\n ...state,\n attachmentToEntity: action.attachmentToEntity,\n })),\n on(setTicketAttachmentSuccess, (state, action) => ({\n ...state,\n addedTicketAttachment: action.addedTicketAttachment,\n })),\n on(setTicketAttachmentFail, state => ({\n ...state,\n addedTicketAttachment: null,\n })),\n on(clearAddedTicketAttachment, state => ({\n ...state,\n addedTicketAttachment: null,\n })),\n\n /**\n * get company list\n */\n on(getCompanyList, state => ({\n ...state,\n companyListLoading: true,\n })),\n on(getCompanyListSuccess, (state, action) => ({\n ...state,\n companyListLoading: false,\n companyList: action.companyList,\n })),\n on(getCompanyListFail, state => ({\n ...state,\n companyListLoading: false,\n companyList: [],\n })),\n\n /**\n * get Bid Turnover List\n */\n on(getBidTurnoverList, state => ({\n ...state,\n bidTurnoverListLoading: true,\n })),\n on(getBidTurnoverListSuccess, (state, action) => ({\n ...state,\n bidTurnoverListLoading: false,\n bidTurnoverList: action.bidList,\n })),\n on(getBidTurnoverListFail, state => ({\n ...state,\n bidTurnoverListLoading: false,\n bidTurnoverList: [],\n })),\n\n /**\n * get bid company list\n */\n on(getBidCompanyList, state => ({\n ...state,\n bidCompanyListLoading: true,\n })),\n on(getBidCompanyListSuccess, (state, action) => ({\n ...state,\n bidCompanyListLoading: false,\n bidCompanyList: action.bidList,\n })),\n on(getBidCompanyListFail, state => ({\n ...state,\n bidCompanyListLoading: false,\n bidCompanyList: [],\n })),\n\n /**\n * bid super admin list\n */\n on(getAllBidList, state => ({\n ...state,\n allBidListLoading: true,\n })),\n on(getAllBidListSuccess, (state, action) => ({\n ...state,\n allBidListLoading: false,\n allBidList: action.bidList,\n })),\n on(getAllBidListFail, state => ({\n ...state,\n allBidListLoading: false,\n allBidList: [],\n })),\n\n /**\n * get bid\n */\n on(clearBid, state => ({\n ...state,\n bidLoading: false,\n bid: null,\n })),\n on(getBid, state => ({\n ...state,\n bidLoading: true,\n })),\n on(getBidSuccess, (state, action) => ({\n ...state,\n bidLoading: false,\n bid: action.bid,\n })),\n on(getBidFail, state => ({\n ...state,\n bidLoading: false,\n bid: null,\n })),\n\n /**\n * add new bid\n */\n on(addNewBid, state => ({\n ...state,\n newBidList: [],\n newBidListInProgress: true,\n })),\n on(addNewBidSuccess, (state, action) => ({\n ...state,\n newBidList: action.newBidList,\n })),\n on(addNewBidFail, state => ({\n ...state,\n newBidList: [],\n newBidListInProgress: false,\n })),\n on(clearNewBidList, state => ({\n ...state,\n newBidList: [],\n })),\n on(newBidInProgress, (state, action) => ({\n ...state,\n newBidListInProgress: action.newBidListInProgress,\n })),\n\n /**\n * update bid\n */\n on(updateBid, state => ({\n ...state,\n updatedBidLoading: true,\n updatedBid: null,\n })),\n on(updateBidSuccess, (state, action) => ({\n ...state,\n updatedBidLoading: false,\n bid: action.updatedBid,\n updatedBid: action.updatedBid,\n })),\n on(updateBidFail, state => ({\n ...state,\n updatedBidLoading: false,\n updatedBid: null,\n })),\n on(rejectBid, state => ({\n ...state,\n rejectBidLoading: true,\n })),\n on(rejectBidSuccess, rejectBidFail, state => ({\n ...state,\n rejectBidLoading: false,\n })),\n on(clearUpdatedBid, state => ({\n ...state,\n updatedBid: null,\n })),\n\n /**\n * update bid comment\n */\n on(updateBidComment, state => ({\n ...state,\n updatedBidCommentLoading: true,\n })),\n on(updateBidCommentSuccess, (state, action) => ({\n ...state,\n updatedBidCommentLoading: false,\n bid: action.updatedBid,\n })),\n on(updateBidCommentFail, state => ({\n ...state,\n updatedBidCommentLoading: false,\n })),\n\n /**\n * set bid attachment\n */\n on(setBidAttachment, (state, action) => ({\n ...state,\n attachmentToEntity: action.attachmentToEntity,\n addBidAttachmentInProgress: true,\n addBidAttachmentStatus: null,\n })),\n on(setBidAttachmentSuccess, (state, action) => ({\n ...state,\n addedBidAttachment: action.addedBidAttachment,\n addBidAttachmentInProgress: false,\n addBidAttachmentStatus: UpdateStatus.OK,\n })),\n on(setBidAttachmentFail, state => ({\n ...state,\n addedBidAttachment: null,\n addBidAttachmentInProgress: false,\n addBidAttachmentStatus: UpdateStatus.ERROR,\n })),\n on(clearAddedBidAttachment, state => ({\n ...state,\n addedBidAttachment: null,\n bidAttachments: [],\n })),\n\n /**\n * get appliance\n */\n on(getAppliance, state => ({\n ...state,\n applianceLoading: true,\n emptyTurnoverData: false,\n })),\n on(getApplianceSuccess, (state, action) => ({\n ...state,\n appliance: action.appliance,\n applianceLoading: false,\n emptyTurnoverData: false,\n })),\n on(getApplianceFailed, state => ({\n ...state,\n appliance: null,\n applianceLoading: false,\n emptyTurnoverData: true,\n })),\n\n /**\n * get workflow step comment list\n */\n on(getWorkflowStepCommentList, state => ({\n ...state,\n workflowStepCommentListLoading: true,\n })),\n on(clearWorkflowStepCommentList, state => ({\n ...state,\n workflowStepCommentList: null,\n workflowStepCommentListLoading: false,\n })),\n on(getWorkflowStepCommentListSuccess, (state, action) => ({\n ...state,\n workflowStepCommentList: action.workflowStepCommentList,\n workflowStepCommentListLoading: false,\n })),\n on(getWorkflowStepCommentListFailed, state => ({\n ...state,\n workflowStepCommentList: [],\n workflowStepCommentListLoading: false,\n })),\n\n /**\n * add workflow step comment\n */\n on(addWorkflowStepComment, state => ({\n ...state,\n workflowStepCommentUpdateLoading: true,\n })),\n on(addWorkflowStepCommentSuccess, (state, action) => ({\n ...state,\n workflowStepCommentList: [...state.workflowStepCommentList, action.commentItem],\n workflowStepCommentUpdateLoading: false,\n })),\n on(addWorkflowStepCommentFailed, state => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n\n on(addWorkflowStepCommentReactionSuccess, (state, action) => ({\n ...state,\n workflowStepCommentList: [\n ...state.workflowStepCommentList.filter(x => x.id !== action.commentItem.id),\n action.commentItem,\n ],\n })),\n on(removeWorkflowStepCommentReactionSuccess, (state, action) => ({\n ...state,\n workflowStepCommentList: [\n ...state.workflowStepCommentList.filter(x => x.id !== action.commentItem.id),\n action.commentItem,\n ],\n })),\n\n /**\n * update workflow step comment\n */\n on(updateWorkflowStepComment, state => ({\n ...state,\n workflowStepCommentUpdateLoading: true,\n })),\n on(updateWorkflowStepCommentSuccess, state => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n on(updateWorkflowStepCommentFailed, state => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n\n /**\n * delete turnover\n */\n on(deleteTurnover, state => ({\n ...state,\n deleteTurnoverInProgress: true,\n turnoverDeleteStatus: null,\n })),\n on(deleteTurnoverSuccess, state => ({\n ...state,\n deleteTurnoverInProgress: false,\n turnoverDeleteStatus: UpdateStatus.DELETED,\n })),\n on(deleteTurnoverFailed, state => ({\n ...state,\n deleteTurnoverInProgress: false,\n turnoverDeleteStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * delete turnover attachment\n */\n on(deleteTurnoverAttachment, state => ({\n ...state,\n deleteTurnoverAttachmentInProgress: true,\n turnoverDeleteAttachmentStatus: null,\n })),\n on(deleteTurnoverAttachmentSuccess, state => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n turnoverDeleteAttachmentStatus: UpdateStatus.DELETED,\n })),\n on(deleteTurnoverAttachmentFailed, state => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n turnoverDeleteAttachmentStatus: UpdateStatus.ERROR,\n })),\n\n /**\n * delete file from repository\n */\n on(deleteFileFromRepositorySuccess, state => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n })),\n on(deleteFileFromRepositoryFailed, state => ({\n ...state,\n deleteTurnoverAttachmentInProgress: false,\n })),\n\n /**\n * delete workflow step comment\n */\n on(deleteWorkflowStepComment, state => ({\n ...state,\n workflowStepCommentUpdateLoading: true,\n })),\n on(deleteWorkflowStepCommentSuccess, state => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n on(deleteWorkflowStepCommentFailed, state => ({\n ...state,\n workflowStepCommentUpdateLoading: false,\n })),\n\n /**\n * get turnover attachments\n */\n on(getTurnoverAttachments, state => ({\n ...state,\n allAttachmentsLoading: true,\n })),\n on(getTurnoverAttachmentsSuccess, (state, action) => ({\n ...state,\n allAttachments: action.allAttachments,\n allAttachmentsLoading: false,\n })),\n on(getTurnoverAttachmentsFailed, clearTurnoverAttachments, state => ({\n ...state,\n allAttachments: [],\n allAttachmentsLoading: false,\n })),\n /**\n * get ticket\n */\n on(getTicket, state => ({\n ...state,\n ticketLoading: true,\n })),\n on(getTicketSuccess, (state, action) => ({\n ...state,\n ticket: action.restTicketModel,\n ticketLoading: false,\n })),\n on(getTicketFailed, state => ({\n ...state,\n ticket: null,\n ticketLoading: false,\n })),\n on(getTicketFailed, state => ({\n ...state,\n ticket: null,\n ticketLoading: false,\n })),\n\n /**\n * get ticket attachments\n */\n on(getTicketAttachments, state => ({\n ...state,\n ticketAttachmentsLoading: true,\n })),\n on(getTicketAttachmentsSuccess, (state, action) => ({\n ...state,\n ticketAttachments: action.ticketAttachments,\n ticketAttachmentsLoading: false,\n })),\n on(getTicketAttachmentsFailed, state => ({\n ...state,\n ticketAttachments: [],\n ticketAttachmentsLoading: false,\n })),\n\n /**\n * clear ticket preview\n */\n on(clearTicketPreview, state => ({\n ...state,\n ticketAttachments: [],\n ticket: null,\n newTurnoverTicket: null,\n })),\n\n /**\n * RADIO BUTTON DROPDOWN LISTS\n */\n on(setCompanyRadioList, (state, action) => ({\n ...state,\n companyRadioList: action.companyRadioList,\n })),\n on(setCompanyNameRadioList, (state, action) => ({\n ...state,\n companyNameRadioList: action.companyNameRadioList,\n })),\n on(setCompanyEmailRadioList, (state, action) => ({\n ...state,\n companyEmailRadioList: action.companyEmailRadioList,\n })),\n on(setApplianceTypeList, (state, action) => ({\n ...state,\n applianceTypeList: action.applianceTypeList,\n })),\n\n on(setColorTypeList, (state, action) => ({\n ...state,\n colorTypeList: action.colorTypeList,\n })),\n\n on(setUserList, (state, action) => ({\n ...state,\n userList: action.userList,\n })),\n\n on(setUserListModel, (state, action) => ({\n ...state,\n userListModel: action.userListModel,\n })),\n\n on(setAllUserRadioList, (state, action) => ({\n ...state,\n allUserRadioList: action.allUserRadioList,\n })),\n on(setAllUserList, (state, action) => ({\n ...state,\n allUserList: action.allUserList,\n })),\n\n on(cleanTurnoverStore, state => ({\n ...state,\n ...initialState,\n })),\n on(workflowAssignmentsByPropertyAndStepIdSucceded, (state, action) => ({\n ...state,\n workflowStepAssigneeId: action.workflowStepAssigneeId,\n workflowStepAssignmentLoading: false,\n })),\n on(reloadAppliancesNeeded, state => ({\n ...state,\n reloadAppliancesNeeded: true,\n })),\n on(reloadAppliancesNeededEnd, state => ({\n ...state,\n reloadAppliancesNeeded: false,\n })),\n on(setStepInfo, (state, action) => ({\n ...state,\n stepInfo: action.stepInfo,\n })),\n on(inspectTurnover, (state, action) => ({\n ...state,\n inspectTurnoverId: action.inspectTurnoverId,\n })),\n\n on(updateValidationParams, (state, action) => ({\n ...state,\n validationParams: { ...state.validationParams, ...action.validationParams },\n })),\n on(resetKanbanCounters, state => ({\n ...state,\n allPropertyIds: [],\n })),\n on(setAllPropertyIds, (state, action) => ({\n ...state,\n allPropertyIds: action.allPropertyIds,\n })),\n on(setActiveSections, (state, action) => ({\n ...state,\n activePropertyIds: action.activePropertyIds,\n })),\n\n on(setInactiveFilteredSections, (state, action) => ({\n ...state,\n inactiveFilteredPropertyIds: action.inactiveFilteredPropertyIds,\n })),\n\n on(setStepAssignee, state => ({\n ...state,\n updateStepAssigneeInProgress: true,\n updateStepAssigneeStatus: UpdateStatus.UPDATE,\n })),\n on(setStepAssigneeSuccess, state => ({\n ...state,\n updateStepAssigneeInProgress: false,\n updateStepAssigneeStatus: UpdateStatus.OK,\n })),\n on(setStepAssigneeFailed, state => ({\n ...state,\n updateStepAssigneeInProgress: false,\n updateStepAssigneeStatus: UpdateStatus.ERROR,\n })),\n\n on(getDefaultTurnoversAssignees, state => ({\n ...state,\n defaultTurnoversAssigneesLoading: true,\n })),\n on(getDefaultTurnoversAssigneesSuccess, (state, action) => ({\n ...state,\n defaultTurnoversAssignees: action.defaultTurnoversAssignees,\n defaultTurnoversAssigneesLoading: false,\n })),\n on(getDefaultTurnoversAssigneesFailed, state => ({\n ...state,\n defaultTurnoversAssignees: [],\n defaultTurnoversAssigneesLoading: false,\n })),\n on(setDisplayedPropertyList, (state, action) => ({\n ...state,\n displayedPropertyList: action.displayedPropertyList,\n })),\n on(setSectionLostRevenue, (state, action) => ({\n ...state,\n sectionsLostRevenue: {\n ...state.sectionsLostRevenue,\n [action.propertyId]: action.lostRevenue,\n },\n })),\n on(clearTurnoverTimers, state => ({\n ...state,\n timers: [],\n })),\n on(turnoverTimersLoaded, (state, action) => ({\n ...state,\n timers: action.timers,\n })),\n on(loadTurnoverSummaryStats, state => ({ ...state, turnoversSummaryLoading: true, turnoversSummaryError: null })),\n on(loadTurnoverSummaryStatsSuccess, (state, { stats }) => ({\n ...state,\n turnoversSummaryStats: stats,\n turnoversSummaryLoading: false,\n })),\n on(loadTurnoverSummaryStatsFailed, (state, { error }) => ({\n ...state,\n turnoversSummaryLoading: false,\n turnoversSummaryError: error,\n })),\n on(loadTurnoverSummaryDetails, state => ({ ...state, turnoversSummaryLoading: true, turnoversSummaryError: null })),\n on(loadTurnoverSummaryDetailsSuccess, (state, { details }) => ({\n ...state,\n turnoversSummaryDetails: details,\n turnoversSummaryLoading: false,\n })),\n on(loadTurnoverSummaryDetailsFailed, (state, { error }) => ({\n ...state,\n turnoversSummaryLoading: false,\n turnoversSummaryError: error,\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { TurnoverBidsState, turnoverBidsFeatureKey } from '../reducers/turnover-bids.reducer';\n\nconst selectTurnoverBidsState = createFeatureSelector(turnoverBidsFeatureKey);\n\nexport const selectTurnoverBids = createSelector(selectTurnoverBidsState, state => state.bids);\n\nexport const selectTurnoverBidCategories = createSelector(selectTurnoverBidsState, state => state.bidCategories);\n\nexport const selectTurnoverBidAdding = createSelector(selectTurnoverBidsState, state => state.bidAdding);\n\nexport const selectTurnoverBidsLoading = createSelector(selectTurnoverBidsState, state => state.bidsLoading);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromTurnovers from '../reducers/turnovers.reducer';\n\nexport const selectTurnoversState = createFeatureSelector(fromTurnovers.turnoversFeatureKey);\nexport const selectCreatedTurnover = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.createdTurnover\n);\nexport const selectCreateTurnoverLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.createTurnoverLoading\n);\nexport const selectTurnoverData = createSelector(selectTurnoversState, turnoversState => turnoversState.turnoverData);\nexport const selectTurnoverUnitName = createSelector(selectTurnoverData, turnoverData => turnoverData?.unitName);\nexport const selectTurnoverDataId = createSelector(selectTurnoverData, turnoverData => turnoverData?.id);\nexport const selectUpdatedTurnoverData = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updatedTurnoverData\n);\nexport const selectTurnoverDataLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverDataLoading\n);\nexport const selectEmptyTurnoverData = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.emptyTurnoverData\n);\nexport const selectUpdatedTurnoverTicket = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.editedTicket\n);\nexport const selectSetWorkflowStepLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.setWorkflowStepLoading\n);\nexport const selectSetWorkflowStepStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.setWorkflowStepStatus\n);\nexport const selectNextWorkflowStep = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.nextWorkflowStep\n);\nexport const selectCurrentWorkflowStep = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.currentWorkflowStep\n);\nexport const selectCurrentWorkflowStepModel = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.currentWorkflowStepModel\n);\nexport const selectApplianceTypeList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.applianceTypeList\n);\nexport const selectColorTypeList = createSelector(selectTurnoversState, turnoversState => turnoversState.colorTypeList);\nexport const selectUserList = createSelector(selectTurnoversState, turnoversState => turnoversState.userList);\nexport const selectAllUserRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allUserRadioList\n);\nexport const selectAllUserList = createSelector(selectTurnoversState, turnoversState => turnoversState.allUserList);\nexport const selectListModel = createSelector(selectTurnoversState, turnoversState => turnoversState.userListModel);\nexport const selectCompanyRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyRadioList\n);\nexport const selectCompanyNameRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyNameRadioList\n);\nexport const selectCompanyEmailRadioList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyEmailRadioList\n);\nexport const selectAddBidAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addBidAttachmentInProgress\n);\nexport const selectAddBidAttachmentStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addBidAttachmentStatus\n);\nexport const selectAddedTicketAttachment = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addedTicketAttachment\n);\nexport const selectAddTurnoverAttachmentStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addTurnoverAttachmentStatus\n);\nexport const selectAddTurnoverAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.addTurnoverAttachmentInProgress\n);\nexport const selectUpdateTurnoverAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateTurnoverAttachmentInProgress\n);\nexport const selectDeleteTurnoverAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteTurnoverAttachmentInProgress\n);\nexport const selectNewBidList = createSelector(selectTurnoversState, turnoversState => turnoversState.newBidList);\nexport const selectNewBidListInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.newBidListInProgress\n);\nexport const selectTurnoverTicketList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverTicketList\n);\nexport const selectTurnoverTicketListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverTicketListLoading\n);\nexport const selectNewTurnoverTicket = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.newTurnoverTicket\n);\nexport const selectNewTurnoverTicketLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.newTurnoverTicketLoading\n);\nexport const selectCompanyList = createSelector(selectTurnoversState, turnoversState => turnoversState.companyList);\nexport const selectCompanyListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.companyListLoading\n);\nexport const selectBidTurnoverList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidTurnoverList\n);\nexport const selectBidTurnoverListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidTurnoverListLoading\n);\nexport const selectAllBidList = createSelector(selectTurnoversState, turnoversState => turnoversState.allBidList);\nexport const selectAllBidListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allBidListLoading\n);\nexport const selectBidCompanyList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidCompanyList\n);\nexport const selectBidCompanyListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidCompanyListLoading\n);\nexport const selectAllAttachments = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allAttachments\n);\nexport const selectBid = createSelector(selectTurnoversState, turnoversState => turnoversState.bid);\nexport const selectUpdatedBid = createSelector(selectTurnoversState, turnoversState => turnoversState.updatedBid);\nexport const selectUpdatedBidLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updatedBidLoading\n);\nexport const selectRejectBidLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.rejectBidLoading\n);\nexport const selectDeleteBidAttachmentInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteBidAttachmentInProgress\n);\nexport const selectBidAttachments = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.bidAttachments\n);\nexport const selectWorkflowStepCommentList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepCommentList\n);\nexport const selectWorkflowStepCommentListLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.workflowStepCommentListLoading\n);\nexport const selectDeleteTurnoverInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.deleteTurnoverInProgress\n);\nexport const selectTurnoverDeleteStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.turnoverDeleteStatus\n);\nexport const selectStepInfo = createSelector(selectTurnoversState, turnoversState => turnoversState.stepInfo);\nexport const selectTicket = createSelector(selectTurnoversState, turnoversState => turnoversState.ticket);\nexport const selectTicketAttachments = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketAttachments\n);\nexport const selectTicketUpdateInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketUpdateInProgress\n);\nexport const selectTicketUpdateInProgressStatus = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.ticketUpdateInProgressStatus\n);\nexport const selectInspectTurnoverId = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.inspectTurnoverId\n);\nexport const selectValidationParams = createSelector(selectTurnoversState, turnoversState => ({\n lockFields: turnoversState.validationParams.lockFields,\n nextStepAvailable: turnoversState.validationParams.nextStepAvailable && turnoversState.validationParams.saveAvailable,\n nextStepChecking: turnoversState.validationParams.nextStepChecking,\n saveAvailable: turnoversState.validationParams.saveAvailable,\n customMessage: turnoversState.validationParams.customMessage,\n}));\nexport const selectAllPropertyIds = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.allPropertyIds\n);\nexport const selectActivePropertyIds = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.activePropertyIds\n);\nexport const selectIsActiveSection = propertyId =>\n createSelector(selectActivePropertyIds, activePropertyIds => activePropertyIds.includes(propertyId));\nexport const selectInactiveFilteredPropertyIds = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.inactiveFilteredPropertyIds\n);\nexport const selectIsInactiveFilteredSection = propertyId =>\n createSelector(selectInactiveFilteredPropertyIds, inactiveFilteredPropertyIds =>\n inactiveFilteredPropertyIds.includes(propertyId)\n );\nexport const selectUpdateStepAssigneeInProgress = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.updateStepAssigneeInProgress\n);\nexport const selectDefaultTurnoversAssignees = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.defaultTurnoversAssignees\n);\nexport const selectDefaultTurnoversAssigneesLoading = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.defaultTurnoversAssigneesLoading\n);\nexport const selectDisplayedPropertyList = createSelector(\n selectTurnoversState,\n turnoversState => turnoversState.displayedPropertyList\n);\nexport const selectTurnoverTimers = createSelector(selectTurnoversState, turnoverState => turnoverState.timers);\n\nexport const selectTurnoversSummaryStats = createSelector(selectTurnoversState, state => state.turnoversSummaryStats);\nexport const selectTurnoversSummaryDetails = createSelector(\n selectTurnoversState,\n state => state.turnoversSummaryDetails\n);\nexport const selectTurnoversSummaryLoading = createSelector(\n selectTurnoversState,\n state => state.turnoversSummaryLoading\n);\nexport const selectTurnoversSummaryError = createSelector(selectTurnoversState, state => state.turnoversSummaryError);\n","\n \n \n \n
\n \n {{ titlePrefix + '' }}\n {{ isLowercase ? (title | lowercase) : title }}\n
\n \n
\n \n \n
\n \n {{ titlePrefix + '' }}\n {{ isLowercase ? (title | lowercase) : title }}\n
\n \n
\n
\n \n \n arrow_drop_down\n \n \n \n\n\n\n \n {{ option.label }}\n \n\n\n\n \n
\n \n {{ title }}\n
\n \n
\n\n\n \n arrow_drop_down\n \n\n","import { CommonModule, NgForOf, NgIf } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule, MenuPositionX } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nexport interface IOption {\n label?: string;\n id: T;\n disabled?: boolean;\n}\n\nexport type buttonSize = 'sm' | 'm' | 'l' | 'xl';\n\n@Component({\n selector: 'app-button-menu',\n templateUrl: './button-menu.component.html',\n styleUrls: ['./button-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatButtonModule,\n MatProgressSpinnerModule,\n MatMenuModule,\n NgIf,\n NgForOf,\n IconComponent,\n MatIconModule,\n CommonModule,\n ],\n})\nexport class ButtonMenuComponent implements OnChanges, OnInit {\n @Input() isEdit = false;\n @Input() isInProgress = false;\n @Input() title = '';\n @Input() titlePrefix = '';\n @Input() size: buttonSize = 'm';\n @Input() xPosition: MenuPositionX = 'after';\n @Input() options: IOption[] = [];\n @Input() selectedOption: { label: string; id: number };\n @Input() isDisabled = false;\n @Input() isDisabledStroke = false;\n @Input() mainButtonDisabled = false;\n @Input() arrowDropdownDisabled = false;\n @Input() mainButtonAction: string | number | null = null;\n @Input() submitOnMainButtonClick = false;\n @Input() isRaisedButton = false;\n @Input() isLowercase = false;\n @Input() btnWidth: number;\n @Input() btnReports = false;\n @Input() btnResident = false;\n\n @Output() action = new EventEmitter();\n @Output() submitAction = new EventEmitter();\n\n EColorPalette = EColorPalette;\n EIcon = EIcon;\n\n optionsToDisplay: IOption[] = [];\n\n ngOnInit(): void {\n this.optionsToDisplay = this.options;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['selectedOption'] && this.options)\n this.optionsToDisplay = this.options.filter(el => el.id !== this.selectedOption.id);\n }\n\n onAction(optionId: string | number | null, isOption = false): void {\n this.submitOnMainButtonClick && !isOption ? this.submitAction.emit(optionId) : this.action.emit(optionId);\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n inject,\n} from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nimport { debounceSafeDefault } from '../constants/debounce-time-safe-default.constant';\nimport { DestroyService } from '../services/destroy.service';\nimport { resizeObserver } from '../utils/dom/resize-observer.util';\n\n@Directive({ selector: '[appTextOverflowCheck]', standalone: true, providers: [DestroyService] })\nexport class TextOverflowCheckDirective extends PuSubscribable implements AfterViewInit, OnDestroy {\n @Input('appTextOverflowCheck') additionalClass = '';\n @Input('appTextOverflowCheckDisabled') disabled = false;\n @Output() textOverflowed = new EventEmitter();\n\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n private resizeObserver!: ResizeObserver | null;\n private resizeSubject = new Subject();\n\n destroy$ = inject(DestroyService);\n\n constructor() {\n super();\n if (this.disabled) return;\n this.resizeSubject\n .pipe(debounceTime(debounceSafeDefault), takeUntil(this.destroy$))\n .subscribe(() => {\n this.checkOverflow();\n })\n .untilDestroyed(this);\n }\n\n ngAfterViewInit() {\n if (this.disabled) return;\n this.resizeObserver = resizeObserver(this.el.nativeElement, () => {\n this.resizeSubject.next();\n });\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.disabled) return;\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n this.resizeSubject.complete();\n }\n\n private checkOverflow(): void {\n if (this.disabled) return;\n const cell = this.el.nativeElement;\n const isOverflowing = cell.scrollWidth > cell.clientWidth;\n if (isOverflowing) {\n if (this.additionalClass) {\n this.renderer.addClass(cell, this.additionalClass);\n }\n this.textOverflowed.emit(true);\n }\n }\n}\n","export function resizeObserver(element: HTMLElement, callback: () => void): ResizeObserver | null {\n if (typeof ResizeObserver === 'undefined') {\n console.warn('ResizeObserver is not supported in this browser.');\n return null;\n }\n\n const resizeObserver = new ResizeObserver(callback);\n resizeObserver.observe(element);\n\n return resizeObserver;\n}\n","\n \n \n \n
{{ text }}
\n
\n {{ text }}\n \n
\n\n \n
\n {{ text }}\n
\n
\n
\n\n\n {{ text }}\n\n","import { CommonModule, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\n\nimport { TextOverflowCheckDirective } from '../../directives/text-overflow-check.directive';\nimport { ISimpleChanges } from '../../types/simple-changes-typed.type';\n\n@Component({\n selector: 'app-fade-text',\n templateUrl: './fade-text.component.html',\n styleUrls: ['./fade-text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, TextOverflowCheckDirective, NgIf, TooltipDirectiveModule],\n})\nexport class FadeTextComponent implements OnChanges {\n @Input() text!: string;\n @Input() tooltip?: string;\n @Input() maxLines = 1;\n @Input() isEnabled = true;\n @Input() isInline = false;\n @Input() customStyles: { [key: string]: any };\n\n isOverflowed = new BehaviorSubject(false); // TODO refactor to signals then Angular version > 16\n isTooltipMode = new BehaviorSubject(false); // TODO refactor to signals then Angular version > 16\n\n ngOnChanges(changes: ISimpleChanges): void {\n if ('isEnabled' in changes) {\n const isEnabled = changes.isEnabled.currentValue;\n if (!isEnabled) {\n this.isTooltipMode.next(false);\n }\n }\n if ('tooltip' in changes) {\n const tooltipValue = changes.tooltip.currentValue;\n if (tooltipValue) {\n this.isTooltipMode.next(true);\n }\n }\n }\n\n enableTooltipMode(): void {\n this.isOverflowed.next(true);\n this.isTooltipMode.next(true);\n }\n}\n","import { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { RoutePath } from '@shared/enums/route-path.enum';\n\nexport const AppRoutes = {\n HOME: `/${RoutePath.HOME}`,\n ROLES: `/${RoutePath.ROLES}`,\n ROLES_ADMIN_HOME: `/${RoutePath.ROLES}/${RoutePath.ADMIN}`,\n ROLES_ADMIN_PERFORMANCE_METRICS: `/${RoutePath.ROLES}/${RoutePath.ADMIN}/${RoutePath.PERFORMANCE_METRICS}`,\n ROLES_ASSET_HOME: `/${RoutePath.ROLES}/${RoutePath.ASSET_DASHBOARD}`,\n ROLES_ASSET_PROPERTY: `/${RoutePath.ROLES}/${RoutePath.ASSET_DASHBOARD}/${RoutePath.PROPERTY}`,\n ROLES_CONSTRUCTION_HOME: `/${RoutePath.ROLES}/${RoutePath.CONSTRUCTION_MANAGER}`,\n ROLES_PROPERTY_HOME: `/${RoutePath.ROLES}/${RoutePath.PROPERTY_DASHBOARD}`,\n ROLES_VENDOR_HOME: `/${RoutePath.ROLES}/${RoutePath.VENDOR_DASHBOARD}`,\n\n RESIDENT: `/${RoutePath.RESIDENT}`,\n RESIDENT_SERVICE: `/${RoutePath.RESIDENT}/${RoutePath.SERVICE}`,\n RESIDENT_SERVICE_REQUEST: `/${RoutePath.RESIDENT}/${RoutePath.SERVICE}/${RoutePath.REQUEST}`,\n RESIDENT_SERVICE_UPCOMING: `/${RoutePath.RESIDENT}/${RoutePath.SERVICE}/${RoutePath.UPCOMING}`,\n RESIDENT_SERVICE_RATE: `/${RoutePath.RESIDENT}/${RoutePath.SERVICE}/${RoutePath.RATE}`,\n\n REPORTS: `/${RoutePath.REPORTS}`,\n REPORTS_RENT_ROLL: `/${RoutePath.REPORTS}/${RoutePath.RENT_ROLL}`,\n REPORTS_ROC: `/${RoutePath.REPORTS}/${RoutePath.ROC}`,\n REPORTS_BILLING: `/${RoutePath.REPORTS}/${RoutePath.BILLING}`,\n REPORTS_UNIT_MIX: `/${RoutePath.REPORTS}/${RoutePath.UNIT_MIX}`,\n REPORTS_DELINQUENCIES: `/${RoutePath.REPORTS}/${RoutePath.DELINQUENCIES}`,\n REPORTS_RENEWALS: `/${RoutePath.REPORTS}/${RoutePath.RENEWALS}`,\n\n DASHBOARD_ACTIVE_TURNOVERS: `/${RoutePath.UNIT_DASHBOARD}/${RoutePath.ACTIVE_TURNOVERS}`,\n DASHBOARD_TICKETS: `/${RoutePath.UNIT_DASHBOARD}/${RoutePath.TICKETS}`,\n DASHBOARD_PROPERTY_MGMT: `/${RoutePath.ASSET_DASHBOARD}/${RoutePath.PROPERTY}`,\n ASSET_MANAGER_HOME_DASHBOARD: `/${RoutePath.ASSET_DASHBOARD}`,\n PROPERTY_MANAGER_HOME_DASHBOARD: `/${RoutePath.PROPERTY_DASHBOARD}`,\n CONSTRUCTION_MANAGER_HOME_DASHBOARD: `/${RoutePath.CONSTRUCTION_MANAGER}`,\n ADMIN_HOME_DASHBOARD: `/${RoutePath.ADMIN_LEVEL_1}`,\n ADMIN_SUBSECTION_DASHBOARD: `/${RoutePath.ADMIN_LEVEL_2}`,\n\n INSPECTIONS: `/${RoutePath.INSPECTIONS}`,\n INSPECTIONS_USER: `/${RoutePath.INSPECTIONS}/${ManagementRoute.USER}`,\n INSPECTIONS_DYNAMIC: `/${RoutePath.INSPECTIONS}/${ManagementRoute.DYNAMIC}`,\n INSPECTIONS_REPEATING: `/${RoutePath.INSPECTIONS}/${ManagementRoute.REPEATING}`,\n INSPECTIONS_RESIDENT: `/${RoutePath.INSPECTIONS}/${ManagementRoute.RESIDENT}`,\n INSPECTIONS_IN_REVIEW: `/${RoutePath.INSPECTIONS}/${ManagementRoute.IN_REVIEW}`,\n SETTINGS_SURVEYS: `/${RoutePath.INSPECTIONS}/${ManagementRoute.SURVEYS}`,\n SETTINGS_TEMPLATE: `/${RoutePath.INSPECTIONS}/${ManagementRoute.TEMPLATES}`,\n SETTINGS_SPACE_TEMPLATE: `/${RoutePath.INSPECTIONS}/${ManagementRoute.SPACE_TEMPLATE}`,\n\n SERVICE: `/${RoutePath.SERVICE}`,\n SERVICE_CANNED_ANSWERS: `/${RoutePath.SERVICE}/${RoutePath.CANNED_ANSWERS}`,\n SPARE_PARTS: `/${RoutePath.SERVICE}/${RoutePath.SPARE_PARTS}`,\n CALENDAR: `/${RoutePath.CALENDAR}`,\n\n LOGIN: `/${RoutePath.LOGIN}`,\n EXTERNAL: `/${RoutePath.EXTERNAL}`,\n ACCEPT_TOKEN: `/${RoutePath.ACCEPT_TOKEN}`,\n\n WIDGET_BOARD_RESCHEDULE: `/${RoutePath.WIDGET_BOARD_RESCHEDULE}`,\n WIDGET_BOARD_DONE: `/${RoutePath.WIDGET_BOARD_DONE}`,\n WIDGET_BOARD_COMMENT: `/${RoutePath.WIDGET_BOARD_COMMENT}`,\n WIDGET_BOARD_TURNOVER_COMMENT: `/${RoutePath.WIDGET_BOARD_TURNOVER_COMMENT}`,\n WIDGET_BOARD_TURNOVER_DECLINE: `/${RoutePath.WIDGET_BOARD_TURNOVER_DECLINE}`,\n WIDGET_OPEN_MOBILE_APP: `/${RoutePath.OPEN_MOBILE_APP}`,\n WIDGET_DOWNLOAD_MOBILE_APP: `/${RoutePath.DOWNLOAD_MOBILE_APP}`,\n\n ROOT: `/`,\n BOARDS: `/${RoutePath.BOARDS}`,\n BUILDIUM: `/${RoutePath.BUILDIUM}`,\n TURNOVERS: `/${RoutePath.TURNOVERS}`,\n TURNOVERS_KANBAN: `/${RoutePath.TURNOVERS}/${RoutePath.KANBAN}`,\n TURNOVERS_ACTIVE: `/${RoutePath.TURNOVERS}/${RoutePath.ACTIVE_TURNOVERS}`,\n TURNOVERS_ARCHIVED: `/${RoutePath.TURNOVERS}/${RoutePath.ARCHIVED}`,\n TURNOVERS_NOTICE: `/${RoutePath.TURNOVERS}/${RoutePath.NOTICE}`,\n TURNOVERS_MOVE_OUT_CONFIRMATION: `/${RoutePath.TURNOVERS}/${RoutePath.MOVE_OUT_CONFIRMATION}`,\n TURNOVERS_SCOPE_AND_BID_APPROVAL: `/${RoutePath.TURNOVERS}/${RoutePath.BID}`,\n TURNOVERS_MAKE_READY: `/${RoutePath.TURNOVERS}/${RoutePath.MAKE_READY}`,\n TURNOVERS_RENOVATION: `/${RoutePath.TURNOVERS}/${RoutePath.RENO}`,\n TURNOVERS_PUNCH: `/${RoutePath.TURNOVERS}/${RoutePath.PUNCH}`,\n TURNOVERS_MANAGEMENT_APPROVAL: `/${RoutePath.TURNOVERS}/${RoutePath.APPROVAL}`,\n TURNOVERS_LEASE_READY: `/${RoutePath.TURNOVERS}/${RoutePath.MARKETING}`,\n TURNOVERS_LEASE_UP: `/${RoutePath.TURNOVERS}/${RoutePath.LEASE_UP}`,\n TURNOVERS_MOVE_IN: `/${RoutePath.TURNOVERS}/${RoutePath.MOVE_IN}`,\n TURNOVERS_ARCHIVE: `/${RoutePath.TURNOVERS}/${RoutePath.ARCHIVE}`,\n TURNOVERS_BULK_BIDS: `/${RoutePath.TURNOVERS}/${RoutePath.BULK_BIDS}`,\n TURNOVERS_DETAIL: `/${RoutePath.TURNOVERS}/:id`,\n JOBS_AVAILABLE_AND_BIDS_SENT: `/${RoutePath.JOBS_AVAILABLE_AND_BIDS_SENT}`,\n DELINQUENCIES: `/${RoutePath.DELINQUENCIES}`,\n DELINQUENCIES_DETAIL: `/${RoutePath.DELINQUENCIES}/:id`,\n RENEWALS: `/${RoutePath.RENEWALS}`,\n MOVE_OUT: `/${RoutePath.MOVE_OUT}`,\n MOVE_OUT_ASSET_MANAGER: `/${RoutePath.MOVE_OUT}/${RoutePath.ASSET_DASHBOARD}`,\n MOVE_OUT_PROPERTY_MANAGER: `/${RoutePath.MOVE_OUT}/${RoutePath.PROPERTY_DASHBOARD}`,\n MOVE_OUT_ASSET_MANAGER_ARCHIVED: `/${RoutePath.MOVE_OUT}/${RoutePath.ASSET_DASHBOARD}/${RoutePath.ARCHIVED}`,\n MOVE_OUT_PROPERTY_MANAGER_ARCHIVED: `/${RoutePath.MOVE_OUT}/${RoutePath.PROPERTY_DASHBOARD}/${RoutePath.ARCHIVED}`,\n RENEWALS_DETAIL: `/${RoutePath.RENEWALS}/:id`,\n SETTINGS: `/${ManagementRoute.SETTINGS}`,\n SETTINGS_USERS: `/${ManagementRoute.SETTINGS}/${ManagementRoute.USERS}/${ManagementRoute.NOT_RESIDENTS}`,\n SETTINGS_RESIDENTS: `/${ManagementRoute.SETTINGS}/${ManagementRoute.USERS}/${ManagementRoute.RESIDENTS}`,\n SETTINGS_ROLES: `/${ManagementRoute.SETTINGS}/${ManagementRoute.ROLES}`,\n SETTINGS_ROLES_NEW: `/${ManagementRoute.SETTINGS}/${ManagementRoute.ROLES}/${ManagementRoute.NEW}`,\n SETTINGS_ROLES_EDIT: `/${ManagementRoute.SETTINGS}/${ManagementRoute.ROLES}/${ManagementRoute.EDIT}`,\n SETTINGS_RENEWAL_STRATEGY: `/${ManagementRoute.SETTINGS}/${ManagementRoute.RENEWAL_STRATEGY}`,\n SETTINGS_KPI: `/${ManagementRoute.SETTINGS}/${ManagementRoute.KPI}`,\n SETTINGS_PORTFOLIO: `/${ManagementRoute.SETTINGS}/${ManagementRoute.PORTFOLIO}`,\n SETTINGS_COLLECTION: `/${ManagementRoute.SETTINGS}/${ManagementRoute.COLLECTION}`,\n SETTINGS_INSPECT: `/${ManagementRoute.SETTINGS}/${ManagementRoute.INSPECT}`,\n SETTINGS_BRANDING: `/${ManagementRoute.SETTINGS}/${ManagementRoute.BRANDING}`,\n SETTINGS_VENDOR: `/${ManagementRoute.SETTINGS}/${ManagementRoute.VENDOR}`,\n SETTINGS_SYSTEM: `/${ManagementRoute.SETTINGS}/${ManagementRoute.SYSTEM}`,\n SETTINGS_TURNOVER_CONFIGURATION: `/${ManagementRoute.SETTINGS}/${ManagementRoute.TURNOVER_CONFIGURATION}`,\n SETTINGS_SERVICE: `/${ManagementRoute.SETTINGS}/${ManagementRoute.SERVICE}`,\n SETTINGS_NOTIFICATIONS: `/${ManagementRoute.SETTINGS}/${ManagementRoute.NOTIFICATIONS}`,\n TICKETS: `/${RoutePath.TICKETS}`,\n NO_PERMISSION: `/${RoutePath.NO_PERMISSION}`,\n NO_PACKAGE: `/${RoutePath.NO_PACKAGE}`,\n};\n","import { sortBy } from 'lodash';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport enum CountryPhoneCodes {\n UK = 44,\n USA = 1,\n Algeria = 213,\n Andorra = 376,\n Angola = 244,\n Anguilla = 1264,\n AntiguaBarbuda = 1268,\n Argentina = 54,\n Armenia = 374,\n Aruba = 297,\n Australia = 61,\n Austria = 43,\n Azerbaijan = 994,\n Bahamas = 1242,\n Bahrain = 973,\n Bangladesh = 880,\n Barbados = 1246,\n Belarus = 375,\n Belgium = 32,\n Belize = 501,\n Benin = 229,\n Bermuda = 1441,\n Bhutan = 975,\n Bolivia = 591,\n BosniaHerzegovina = 387,\n Botswana = 267,\n Brazil = 55,\n Brunei = 673,\n Bulgaria = 359,\n BurkinaFaso = 226,\n Burundi = 257,\n Cambodia = 855,\n Cameroon = 237,\n Canada = 1,\n CapeVerdeIslands = 238,\n CaymanIslands = 1345,\n CentralAfricanRepublic = 236,\n Chile = 56,\n China = 86,\n Colombia = 57,\n Comoros = 269,\n Congo = 242,\n CookIslands = 682,\n CostaRica = 506,\n Croatia = 385,\n Cuba = 53,\n CyprusNorth = 90392,\n CyprusSouth = 357,\n CzechRepublic = 42,\n Denmark = 45,\n Djibouti = 253,\n Dominica = 1809,\n DominicanRepublic = 1809,\n Ecuador = 593,\n Egypt = 20,\n ElSalvador = 503,\n EquatorialGuinea = 240,\n Eritrea = 291,\n Estonia = 372,\n Ethiopia = 251,\n FalklandIslands = 500,\n FaroeIslands = 298,\n Fiji = 679,\n Finland = 358,\n France = 33,\n FrenchGuiana = 594,\n FrenchPolynesia = 689,\n Gabon = 241,\n Gambia = 220,\n Georgia = 7880,\n Germany = 49,\n Ghana = 233,\n Gibraltar = 350,\n Greece = 30,\n Greenland = 299,\n Grenada = 1473,\n Guadeloupe = 590,\n Guam = 671,\n Guatemala = 502,\n Guinea = 224,\n GuineaBissau = 245,\n Guyana = 592,\n Haiti = 509,\n Honduras = 504,\n HongKong = 852,\n Hungary = 36,\n Iceland = 354,\n India = 91,\n Indonesia = 62,\n Iran = 98,\n Iraq = 964,\n Ireland = 353,\n Israel = 972,\n Italy = 39,\n Jamaica = 1876,\n Japan = 81,\n Jordan = 962,\n Kazakhstan = 7,\n Kenya = 254,\n Kiribati = 686,\n KoreaNorth = 850,\n KoreaSouth = 82,\n Kuwait = 965,\n Kyrgyzstan = 996,\n Laos = 856,\n Latvia = 371,\n Lebanon = 961,\n Lesotho = 266,\n Liberia = 231,\n Libya = 218,\n Liechtenstein = 417,\n Lithuania = 370,\n Luxembourg = 352,\n Macao = 853,\n Macedonia = 389,\n Madagascar = 261,\n Malawi = 265,\n Malaysia = 60,\n Maldives = 960,\n Mali = 223,\n Malta = 356,\n MarshallIslands = 692,\n Martinique = 596,\n Mauritania = 222,\n Mauritius = 230,\n Mayotte = 269,\n Mexico = 52,\n Micronesia = 691,\n Moldova = 373,\n Monaco = 377,\n Mongolia = 976,\n Montserrat = 1664,\n Morocco = 212,\n Mozambique = 258,\n Myanmar = 95,\n Namibia = 264,\n Nauru = 674,\n Nepal = 977,\n Netherlands = 31,\n NewCaledonia = 687,\n NewZealand = 64,\n Nicaragua = 505,\n Niger = 227,\n Nigeria = 234,\n Niue = 683,\n NorfolkIslands = 672,\n NorthernMarianas = 670,\n Norway = 47,\n Oman = 968,\n Palau = 680,\n Panama = 507,\n PapuaNewGuinea = 675,\n Paraguay = 595,\n Peru = 51,\n Philippines = 63,\n Poland = 48,\n Portugal = 351,\n PuertoRico = 1787,\n Qatar = 974,\n Reunion = 262,\n Romania = 40,\n Russia = 7,\n Rwanda = 250,\n SanMarino = 378,\n SaoTomePrincipe = 239,\n SaudiArabia = 966,\n Senegal = 221,\n Serbia = 381,\n Seychelles = 248,\n SierraLeone = 232,\n Singapore = 65,\n SlovakRepublic = 421,\n Slovenia = 386,\n SolomonIslands = 677,\n Somalia = 252,\n SouthAfrica = 27,\n Spain = 34,\n SriLanka = 94,\n StHelena = 290,\n StKitts = 1869,\n StLucia = 1758,\n Sudan = 249,\n Suriname = 597,\n Swaziland = 268,\n Sweden = 46,\n Switzerland = 41,\n Syria = 963,\n Taiwan = 886,\n Tajikstan = 7,\n Thailand = 66,\n Togo = 228,\n Tonga = 676,\n TrinidadTobago = 1868,\n Tunisia = 216,\n Turkey = 90,\n Turkmenistan = 7,\n TurkmenistanB = 993,\n TurksCaicosIslands = 1649,\n Tuvalu = 688,\n Uganda = 256,\n Ukraine = 380,\n UnitedArabEmirates = 971,\n Uruguay = 598,\n Uzbekistan = 7,\n Vanuatu = 678,\n VaticanCity = 379,\n Venezuela = 58,\n Vietnam = 84,\n VirginIslandsBritish = 1284,\n VirginIslandsUS = 1340,\n WallisFutuna = 681,\n YemenNorth = 969,\n YemenSouth = 967,\n Zambia = 260,\n Zimbabwe = 263,\n}\n\nconst sortedKeys = Object.keys(CountryPhoneCodes)\n .filter(k => typeof CountryPhoneCodes[k as any] === 'number')\n .sort((a, b) => a.localeCompare(b));\n\nconst groupedCodes: Record = {};\n\nsortedKeys.forEach(country => {\n const code = CountryPhoneCodes[country as keyof typeof CountryPhoneCodes];\n if (!groupedCodes[code]) {\n groupedCodes[code] = [];\n }\n groupedCodes[code].push(country);\n});\n\nexport const CountryCodes: IRadioButtonOption[] = sortBy(\n Object.entries(groupedCodes),\n ([, countries]) => countries[0]\n).map(([code, countries]) => ({\n label: `+${code} (${countries\n .reverse()\n .join(', ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .trim()})`,\n value: Number(code),\n displayValue: `+${code}`,\n}));\n\nexport const LatviaValidPhoneNumberLength = 8;\nexport const FinlandValidPhoneNumberLength = 9;\nexport const ValidPhoneNumberLength_10 = 10;\n","export const debounceSafeDefault = 300;\n","export const allFileExtensions = [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/tiff',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/ogg',\n 'video/webm',\n 'video/3gpp',\n 'video/3gpp2',\n 'video/x-matroska',\n 'application/pdf',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/csv',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/html',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'text/plain',\n];\n\nexport const imageVideoFileExtensions = [\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/tiff',\n 'image/heic',\n 'image/heif',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/ogg',\n 'video/mov',\n 'video/webm',\n 'video/3gpp',\n 'video/3gpp2',\n 'video/x-matroska',\n 'video/quicktime',\n];\n\nexport const videoExtensions = [\n '.x-msvideo',\n '.mp4',\n '.mpeg',\n '.ogg',\n '.mov',\n '.webm',\n '.3gpp',\n '.3gpp2',\n '.x-matroska',\n];\n\nexport const imageMimeTypes = [\n 'image/svg+xml',\n 'image/bmp',\n 'image/gif',\n 'image/x-icon',\n 'image/jpeg',\n 'image/png',\n 'image/vnd.wap.wbmp',\n 'image/webp',\n 'image/x-etc1-pkm',\n 'image/x-pkm',\n 'image/ktx',\n 'image/astc',\n 'image/avif',\n];\n","import {\n InspectionType,\n ReviewRequiredPolicy,\n} from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { oneSecondInMilliseconds } from '@shared/functions/date-utils.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const InspectionTypeListConst: IRadioButtonOption[] = [\n {\n value: InspectionType.MoveOutVacant,\n label: 'Move-out Vacant',\n sort: 0,\n description: 'Occurs immediately after resident move out to thoroughly assess unit condition.',\n },\n {\n value: InspectionType.CustomInspection,\n label: 'Custom',\n sort: 1,\n },\n];\n\nexport const GeneratingInspectionsDuration = oneSecondInMilliseconds * 30;\n\nexport const ReviewRequiredPolicyList = [\n {\n value: ReviewRequiredPolicy.Always,\n label: 'Always',\n },\n {\n value: ReviewRequiredPolicy.NotRequired,\n label: 'Not required',\n },\n {\n value: ReviewRequiredPolicy.RequireIfNonDefaultRatingSelected,\n label: 'If non-default ratings are submitted',\n },\n];\n","export const NoValue = '—';\n","import { PriorityType } from '@shared/enums/priority-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const PriorityTypeListConst: IRadioButtonOption[] = [\n {\n label: 'low',\n value: PriorityType.Low,\n },\n {\n label: 'medium',\n value: PriorityType.Medium,\n },\n {\n label: 'high',\n value: PriorityType.High,\n },\n {\n label: 'emergency',\n value: PriorityType.Emergency,\n },\n];\n","import { floor } from 'lodash';\nimport * as moment from 'moment';\n\nimport { InspectionRecurrencePeriod } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const GetRecurrencePeriodTypeList = (dueDate: Date): IRadioButtonOption[] => {\n if (!dueDate) {\n return [];\n }\n const dayOfWeek = moment(dueDate).format('dddd');\n const weekNumber = floor(dueDate.getDate() / 7) + 1;\n let weekNumberText = 'N/A';\n\n switch (weekNumber) {\n case 1:\n weekNumberText = 'first';\n break;\n case 2:\n weekNumberText = 'second';\n break;\n case 3:\n weekNumberText = 'third';\n break;\n case 4:\n weekNumberText = 'fourth';\n break;\n default:\n weekNumberText = 'N/A';\n }\n\n const today = moment(dueDate).format('MMMM D');\n const semi1 = moment(dueDate).format('MMM D');\n const semi2 = moment(dueDate).add(7, 'month').format('MMM D');\n return [\n {\n value: InspectionRecurrencePeriod.DoNotRepeat,\n label: 'Does not repeat',\n },\n {\n value: InspectionRecurrencePeriod.Daily,\n label: 'Weekdays',\n },\n {\n value: InspectionRecurrencePeriod.Weekly,\n label: `Weekly on ${dayOfWeek}`,\n },\n {\n value: InspectionRecurrencePeriod.SemiMonthly,\n label: `Semi-monthly every other ${dayOfWeek}`,\n },\n {\n value: InspectionRecurrencePeriod.Monthly,\n label: `Monthly on the first ${dayOfWeek}`,\n },\n weekNumber == 1\n ? null\n : {\n value: InspectionRecurrencePeriod.SameWeekMonthly,\n label: `Monthly on the ${weekNumberText} ${dayOfWeek}`,\n },\n {\n value: InspectionRecurrencePeriod.SemiAnnually,\n label: `Semi-annually on ${semi1} and ${semi2}`,\n },\n {\n value: InspectionRecurrencePeriod.Quarterly,\n label: `Quarterly on the first ${dayOfWeek}`,\n },\n weekNumber == 1\n ? null\n : {\n value: InspectionRecurrencePeriod.SameWeekQuarterly,\n label: `Quarterly on the ${weekNumberText} ${dayOfWeek}`,\n },\n {\n value: InspectionRecurrencePeriod.Annually,\n label: `Annually on ${today}`,\n },\n ].filter(x => x != null);\n};\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport const WorkflowStepListConst: IRadioButtonOption[] = [\n {\n value: WorkflowStepEnumType.Notice,\n label: 'NOTICE',\n },\n {\n value: WorkflowStepEnumType.MoveOut,\n label: 'MOVE OUT',\n },\n {\n value: WorkflowStepEnumType.Bid,\n label: 'BID',\n },\n {\n value: WorkflowStepEnumType.MakeReady,\n label: 'MAKE READY',\n },\n {\n value: WorkflowStepEnumType.Reno,\n label: 'RENO',\n },\n {\n value: WorkflowStepEnumType.Punch,\n label: 'PUNCH',\n },\n {\n value: WorkflowStepEnumType.Approval,\n label: 'APPROVAL',\n },\n {\n value: WorkflowStepEnumType.Marketing,\n label: 'MARKETING',\n },\n {\n value: WorkflowStepEnumType.LeaseUp,\n label: 'AVAILABLE',\n },\n {\n value: WorkflowStepEnumType.MoveIn,\n label: 'MOVE IN',\n },\n {\n value: WorkflowStepEnumType.Archive,\n label: 'ARCHIVE',\n },\n];\n\nexport const WorkflowStepListActive: IRadioButtonOption[] = WorkflowStepListConst.filter(\n e => ![WorkflowStepEnumType.Bid, WorkflowStepEnumType.Marketing, WorkflowStepEnumType.Archive].includes(e.value)\n);\n\nexport function workflowStepCommentsWithLinks(list: RestWorkflowStepCommentModel[]): RestWorkflowStepCommentModel[] {\n return list.map(el => {\n let comment = el.commentText;\n\n if (!/\\bhttps?:\\/\\/[^\\s<]+/gi.test(comment)) {\n return el;\n }\n\n comment = comment.replace(/(https?:\\/\\/[^\\s<]+)/gi, url => {\n if (new RegExp(`]*href=[\"']?${url}[\"']?[^>]*>`, 'gi').test(comment)) {\n return url;\n }\n\n return `${url}`;\n });\n\n el.commentText = comment;\n return el;\n });\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n OnDestroy,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ContentEditableDirective),\n multi: true,\n },\n ],\n})\nexport class ContentEditableDirective implements ControlValueAccessor, AfterViewInit, OnDestroy {\n private onTouched = () => {\n // to set later\n };\n\n private onChange = (_value: string) => {\n // to set later\n };\n\n private observer: MutationObserver;\n\n constructor(\n @Inject(ElementRef) private readonly elementRef: ElementRef,\n @Inject(Renderer2) private readonly renderer: Renderer2\n ) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'contenteditable', 'true');\n }\n\n ngAfterViewInit() {\n this.observer = new MutationObserver(() => {\n this.onChange(this.elementRef.nativeElement.innerHTML);\n });\n\n this.observer.observe(this.elementRef.nativeElement, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n\n ngOnDestroy() {\n this.observer.disconnect();\n }\n\n @HostListener('input')\n onInput() {\n this.observer.disconnect();\n this.onChange(this.elementRef.nativeElement.innerHTML);\n }\n\n @HostListener('blur')\n onBlur() {\n this.onTouched();\n }\n\n writeValue(value: string) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'innerHTML', value || '');\n }\n\n registerOnChange(onChange: (value: string) => void) {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: () => void) {\n this.onTouched = onTouched;\n }\n\n setDisabledState(disabled: boolean): void {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'contenteditable', String(!disabled));\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appCurrencyFormatter]',\n})\nexport class CurrencyFormatterDirective {\n @Input() appCurrencyFormatter = true;\n\n constructor(private el: ElementRef) {}\n\n @HostListener('input', ['$event.target.value'])\n onInput(value: string): void {\n if (this.appCurrencyFormatter) {\n let sanitizedValue = value.replace(/[^0-9.]/g, '');\n\n const dotIndex = sanitizedValue.indexOf('.');\n if (dotIndex !== -1) {\n const beforeDot = sanitizedValue.substring(0, dotIndex + 1);\n let afterDot = sanitizedValue.substring(dotIndex + 1);\n\n if (afterDot.length > 2) {\n afterDot = afterDot.substring(0, 2);\n }\n\n sanitizedValue = beforeDot + afterDot;\n }\n\n const formattedValue = this.formatCurrency(sanitizedValue);\n this.el.nativeElement.value = formattedValue;\n }\n }\n\n private formatCurrency(value: string): string {\n if (!value) {\n return '';\n }\n const parts = value.split('.');\n const wholePart = parts[0];\n const fractionalPart = parts.length > 1 ? '.' + parts[1] : '';\n const withCommas = wholePart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return '$' + withCommas + fractionalPart;\n }\n}\n","
\n \n
{{ text }}
\n
\n \n
\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'app-custom-tooltip',\n templateUrl: './custom-tooltip.component.html',\n styleUrls: ['./custom-tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomTooltipComponent {\n @Input() text: string;\n @Input() contentTemplate: TemplateRef;\n}\n","import { Overlay, OverlayPositionBuilder, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, Directive, ElementRef, HostListener, Input, OnDestroy, TemplateRef } from '@angular/core';\n\nimport { CustomTooltipComponent } from '@ui-components/components/custom-tooltip/custom-tooltip.component';\n\n@Directive({\n selector: '[appCustomTooltip]',\n})\nexport class CustomTooltipDirective implements OnDestroy {\n @Input() customToolTip: string;\n @Input() contentTemplate: TemplateRef;\n\n _showToolTip = false;\n\n @Input() set showToolTip(showToolTip: boolean) {\n this._showToolTip = showToolTip;\n if (!showToolTip) {\n this.hide();\n return;\n }\n\n const positionStrategy = this.overlayPositionBuilder.flexibleConnectedTo(this.elementRef).withPositions([\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 5,\n },\n ]);\n\n this.overlayRef = this.overlay.create({ positionStrategy });\n }\n\n private overlayRef: OverlayRef;\n\n constructor(\n private overlay: Overlay,\n private overlayPositionBuilder: OverlayPositionBuilder,\n private elementRef: ElementRef\n ) {}\n\n @HostListener('mousemove')\n show() {\n if (this._showToolTip && this.overlayRef && !this.overlayRef.hasAttached()) {\n const tooltipRef: ComponentRef = this.overlayRef.attach(\n new ComponentPortal(CustomTooltipComponent)\n );\n tooltipRef.instance.text = this.customToolTip;\n tooltipRef.instance.contentTemplate = this.contentTemplate;\n }\n }\n\n @HostListener('mouseleave')\n hide() {\n this.closeToolTip();\n }\n\n ngOnDestroy() {\n this.closeToolTip();\n }\n\n private closeToolTip() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n }\n}\n","import { Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\n\nexport type SortDirection = 'asc' | 'desc' | '';\n\nexport type EmptyString = T | '';\n\nexport interface SortEvent {\n column: EmptyString;\n direction: SortDirection;\n}\n\nconst rotate: { [key: string]: SortDirection } = {\n asc: 'desc',\n desc: '',\n '': 'asc',\n};\n\n@Directive({\n selector: '[appSortable]',\n // selector: 'div[puSortable]',\n // selector: 'th[puUiSortable]',\n})\nexport class SortableDirective {\n @Input()\n column: EmptyString = '';\n\n @Input()\n direction: SortDirection = '';\n\n @HostBinding('class.asc')\n get asc() {\n return this.direction === 'asc';\n }\n\n @HostBinding('class.desc')\n get desc() {\n return this.direction === 'desc';\n }\n\n @HostBinding('style.cursor')\n cursor = 'pointer';\n\n @Output()\n sort = new EventEmitter>();\n\n @HostListener('click')\n rotate() {\n this.direction = rotate[this.direction];\n this.sort.emit({ column: this.column, direction: this.direction });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { CustomTooltipComponent } from './custom-tooltip.component';\n\n@NgModule({\n declarations: [CustomTooltipComponent],\n imports: [CommonModule],\n exports: [CustomTooltipComponent],\n})\nexport class CustomTooltipModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { ContentEditableDirective } from '@shared/directives/content-editable.directive';\nimport { DropZoneDirective } from '@shared/directives/drop-zone.directive';\nimport { HavePermissionDirective } from '@shared/directives/have-permission.directive';\nimport { ScrollElementDirective } from '@shared/directives/scroll-element.directive';\nimport { ScrollDirective } from '@shared/directives/scroll.directive';\nimport { SortableDirective } from '@shared/directives/sortable.directive';\nimport { CustomTooltipModule } from '@ui-components/components/custom-tooltip/custom-tooltip.module';\n\nimport { CurrencyFormatterDirective } from './currency-formatter.directive';\nimport { CustomTooltipDirective } from './custom-tooltip.directive';\nimport { LastElementDirective } from './last-element.directive';\nimport { ScrollToRequiredContainerDirective } from './scroll-to-required-container.directive';\nimport { ScrollToRequiredDirective } from './scroll-to-required.directive';\nimport { SortHeaderDirective } from './sort-header.directive';\nimport { VerticalResizeDividerDirective } from './vertical-resize.directive';\n\nconst DIRECTIVES = [\n HavePermissionDirective,\n SortHeaderDirective,\n LastElementDirective,\n CustomTooltipDirective,\n ContentEditableDirective,\n DropZoneDirective,\n CurrencyFormatterDirective,\n ScrollToRequiredContainerDirective,\n ScrollToRequiredDirective,\n ScrollElementDirective,\n SortableDirective,\n VerticalResizeDividerDirective,\n];\n\n@NgModule({\n imports: [CommonModule, CustomTooltipModule, ReactiveFormsModule, ScrollDirective],\n declarations: [...DIRECTIVES],\n exports: [...DIRECTIVES],\n})\nexport class DirectivesModule {}\n","import { Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\n\n@Directive({\n selector: '[appDropZone]',\n})\nexport class DropZoneDirective {\n // The directive emits a `fileDrop` event\n // with the list of files dropped on the element\n // as an JS array of `File` objects.\n @Output('appDropZone') fileDrop = new EventEmitter>();\n\n // Disable dropping on the body of the document.\n // This prevents the browser from loading the dropped files\n // using it's default behaviour if the user misses the drop zone.\n // Set this input to false if you want the browser default behaviour.\n @Input() preventBodyDrop = true;\n @Input() useCustomStyle = false;\n\n // The `drop-zone-active` class is applied to the host\n // element when a drag is currently over the target.\n @HostBinding('class.drop-zone-active')\n active = false;\n @HostBinding('class.drop-zone-active-custom') get activeResident() {\n return this.active && this.useCustomStyle;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.active = false;\n\n const { dataTransfer } = event;\n\n if (dataTransfer.items) {\n const files = [];\n for (let i = 0; i < dataTransfer.items.length; i++) {\n // If dropped items aren't files, reject them\n if (dataTransfer.items[i].kind === 'file') {\n files.push(dataTransfer.items[i].getAsFile());\n }\n }\n dataTransfer.items.clear();\n this.fileDrop.emit(files);\n } else {\n const files = dataTransfer.files;\n dataTransfer.clearData();\n this.fileDrop.emit(Array.from(files));\n }\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event: DragEvent) {\n event.stopPropagation();\n event.preventDefault();\n this.active = true;\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event: DragEvent) {\n this.active = false;\n }\n\n @HostListener('body:dragover', ['$event'])\n onBodyDragOver(event: DragEvent) {\n if (this.preventBodyDrop) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n @HostListener('body:drop', ['$event'])\n onBodyDrop(event: DragEvent) {\n if (this.preventBodyDrop) {\n event.preventDefault();\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\n@Directive({ standalone: true, selector: '[appFadeTextOnWidth]' })\nexport class FadeTextOnWidthDirective implements AfterViewInit, OnChanges {\n @Input() appFadeTextOnWidth: string | number = 250;\n @Input() titleLength: number;\n @Input() onRecalculate: any;\n @Input() checkOnResize = true;\n\n @HostListener('window:resize')\n onResize(): void {\n if (this.checkOnResize) this.checkWidthAndApplyStyles();\n }\n\n constructor(private el: ElementRef, private renderer: Renderer2, private cdr: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n this.checkWidthAndApplyStyles();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['titleLength']?.firstChange) this.checkWidthAndApplyStyles();\n\n if (changes['onRecalculate'] && !changes['onRecalculate'].firstChange) this.checkWidthAndApplyStyles();\n }\n\n private checkWidthAndApplyStyles(): void {\n const element = this.el.nativeElement;\n const parentElement = element.parentElement;\n\n const maxWidth = this.getMaxWidthInPixels(parentElement);\n const scrollWidth = element.scrollWidth;\n\n if (scrollWidth > maxWidth) {\n this.renderer.setStyle(element, 'max-width', `${maxWidth}px`);\n this.renderer.setStyle(element, 'overflow', 'hidden');\n this.renderer.setStyle(element, 'white-space', 'nowrap');\n this.renderer.setStyle(element, '-webkit-mask-image', 'linear-gradient(90deg, #000 80%, transparent)');\n this.renderer.setStyle(element, 'mask-image', 'linear-gradient(90deg, #000 80%, transparent)');\n } else if (scrollWidth <= maxWidth) {\n this.renderer.removeStyle(element, 'max-width');\n this.renderer.removeStyle(element, 'overflow');\n this.renderer.removeStyle(element, 'white-space');\n this.renderer.removeStyle(element, '-webkit-mask-image');\n this.renderer.removeStyle(element, 'mask-image');\n }\n\n if (this.onRecalculate) this.cdr.detectChanges();\n }\n\n private getMaxWidthInPixels(parentElement: HTMLElement): number {\n if (typeof this.appFadeTextOnWidth === 'number') return this.appFadeTextOnWidth;\n\n if (typeof this.appFadeTextOnWidth === 'string' && this.appFadeTextOnWidth.endsWith('%')) {\n const percent = parseFloat(this.appFadeTextOnWidth);\n if (!isNaN(percent) && parentElement) {\n const parentWidth = parentElement.offsetWidth;\n return (percent / 100) * parentWidth;\n }\n }\n return 250;\n }\n}\n","import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { selectUserPermissionLevel } from '@main-application/store/selectors/user.selectors';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\n\n@Directive({\n selector: '[appHavePermission]',\n})\n@UntilDestroy()\nexport class HavePermissionDirective extends PuSubscribable implements OnInit {\n permissionList: PermissionLevelType[] = [];\n permissionLevel: PermissionLevelType | PermissionLevelType[];\n\n constructor(\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private store: Store<{}>\n ) {\n super();\n }\n\n @Input() set appHavePermission(permissionLevel: PermissionLevelType | PermissionLevelType[]) {\n this.permissionLevel = permissionLevel;\n this.checkPermission();\n }\n\n ngOnInit(): void {\n this.store\n .select(selectUserPermissionLevel)\n .pipe(\n untilDestroyed(this),\n filter((permissionList: PermissionLevelType[]) => !!permissionList),\n tap((permissionList: PermissionLevelType[]) => {\n this.permissionList = permissionList;\n this.checkPermission();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private checkPermission() {\n const hasPermission = checkPermissionLevel(this.permissionList, this.permissionLevel);\n this.viewContainer.clear();\n if (hasPermission) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\n\nimport { LastItemParam } from '@shared/interfaces/last-item-param';\n\n@Directive({\n selector: '[appLastElement]',\n})\nexport class LastElementDirective {\n @Output() lastElementLoaded = new EventEmitter();\n\n @Input() set isLastElement(lastItemParam: LastItemParam) {\n if (lastItemParam.value && lastItemParam.itemsCount) {\n this.lastElementLoaded.emit();\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[preventKeyboardEvents]', standalone: true })\nexport class PreventKeyboardEventsDirective {\n @HostListener('keydown', ['$event'])\n @HostListener('keypress', ['$event'])\n @HostListener('keyup', ['$event'])\n onKeyboardEvent(event: KeyboardEvent): void {\n event.stopPropagation();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({ selector: '[appScrollElement]' })\nexport class ScrollElementDirective {\n @Output() scrollChanged = new EventEmitter();\n\n @HostListener('scroll', ['$event'])\n onScroll($event: Event) {\n this.scrollChanged.next($event);\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appScrollToReqContainer]',\r\n})\r\nexport class ScrollToRequiredContainerDirective {\r\n // defines the scroll container for [appScrollToReq]\r\n\r\n readonly containerEl: HTMLElement = this.el.nativeElement;\r\n\r\n constructor(private el: ElementRef) {}\r\n}\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\nimport { FormGroupDirective } from '@angular/forms';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, take } from 'rxjs/operators';\r\n\r\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\r\n\r\nimport { ScrollToRequiredContainerDirective } from './scroll-to-required-container.directive';\r\n\r\n@Directive({\r\n selector: '[appScrollToReq]',\r\n})\r\nexport class ScrollToRequiredDirective extends PuSubscribable {\r\n // requires the defined scroll container - [appScrollToReqContainer]\r\n // requires the submit button inside the form or workaround\r\n // see AddTicketModalComponent for workaround example - use of external button with OnSubmit()\r\n\r\n private get containerEl(): HTMLElement {\r\n return this.scrollContainer.containerEl;\r\n }\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private formGroup: FormGroupDirective,\r\n private scrollContainer: ScrollToRequiredContainerDirective\r\n ) {\r\n super();\r\n }\r\n\r\n @HostListener('ngSubmit') onSubmit() {\r\n if (this.formGroup.control.invalid) {\r\n this.scrollToFirstReq();\r\n }\r\n }\r\n\r\n private scrollToFirstReq() {\r\n const firstReq: HTMLElement = this.el.nativeElement.querySelector('.ng-invalid');\r\n\r\n this.containerEl.scroll({\r\n top: this.getTopOffset(firstReq),\r\n left: 0,\r\n behavior: 'smooth',\r\n });\r\n\r\n fromEvent(this.containerEl, 'scroll')\r\n .pipe(debounceTime(50), take(1))\r\n .subscribe(() => firstReq.focus())\r\n .untilDestroyed(this);\r\n }\r\n\r\n private getTopOffset(controlEl: HTMLElement): number {\r\n const controlElTop = controlEl.getBoundingClientRect().top;\r\n const containerTop = this.containerEl.getBoundingClientRect().top;\r\n const absoluteControlElTop = controlElTop + this.containerEl.scrollTop;\r\n return absoluteControlElTop - containerTop;\r\n }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, Renderer2 } from '@angular/core';\nimport { SortDirection } from '@angular/material/sort';\n\nimport { SortItem } from '@shared/interfaces/sort-item';\n\n@Directive({\n selector: '[appSortHeader]',\n})\nexport class SortHeaderDirective {\n currentDirection: SortDirection = '';\n ariaDirection = 'none';\n\n @Input() fieldName = '';\n @Output() sortEvent: EventEmitter = new EventEmitter();\n\n @HostListener('click', ['$event']) onClick() {\n this.changeDirection();\n this.sortAction();\n }\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {\n this.renderer.addClass(this.elementRef.nativeElement, 'app-sort-header');\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-sort', this.ariaDirection);\n }\n\n private changeDirection() {\n switch (this.currentDirection) {\n case '':\n {\n this.currentDirection = 'asc';\n this.ariaDirection = 'ascending';\n }\n break;\n case 'asc':\n {\n this.currentDirection = 'desc';\n this.ariaDirection = 'descending';\n }\n break;\n case 'desc':\n {\n this.currentDirection = '';\n this.ariaDirection = 'none';\n }\n break;\n }\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-sort', this.ariaDirection);\n }\n\n private sortAction() {\n if (this.fieldName) {\n this.sortEvent.emit({\n field: this.fieldName,\n direction: this.currentDirection,\n });\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({ selector: '[appStopPropagation]', standalone: true })\nexport class StopPropagationDirective {\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Directive, HostListener, Input, NgModule } from '@angular/core';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[matTooltip]',\n})\nexport class TooltipDirective {\n @Input() showTooltip = true;\n\n constructor(private matTooltip: MatTooltip) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.showTooltip) {\n this.matTooltip.show();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.matTooltip.hide();\n }\n}\n\n@NgModule({\n imports: [CommonModule, MatTooltipModule],\n declarations: [TooltipDirective],\n exports: [TooltipDirective, MatTooltipModule],\n})\nexport class TooltipDirectiveModule {}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n Renderer2,\n} from '@angular/core';\n\n@Directive({\n selector: '[appVerticalResizeDivider]',\n})\nexport class VerticalResizeDividerDirective implements AfterViewInit {\n @Input() storageKey = 'divider-sizes';\n @Output() sizeChanged = new EventEmitter<{ topHeight: number; bottomHeight: number }>();\n\n private startY: number;\n private initialTopHeight: number;\n private topElement: HTMLElement;\n private bottomElement: HTMLElement;\n private isResizing = false;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.topElement = this.el.nativeElement.previousElementSibling;\n this.bottomElement = this.el.nativeElement.nextElementSibling;\n\n if (!this.topElement || !this.bottomElement) {\n return;\n }\n\n const savedSizes = localStorage.getItem(this.storageKey);\n if (savedSizes) {\n const { topHeight, bottomHeight } = JSON.parse(savedSizes);\n const containerHeight = this.el.nativeElement.parentElement.offsetHeight;\n const dividerHeight = this.el.nativeElement.offsetHeight;\n\n if (topHeight > 72 && bottomHeight > 72 && topHeight + bottomHeight + dividerHeight <= containerHeight) {\n this.setElementSizes(topHeight, bottomHeight);\n } else {\n this.applyDefaultSizes(containerHeight, dividerHeight);\n }\n } else {\n const containerHeight = this.el.nativeElement.parentElement.offsetHeight;\n const dividerHeight = this.el.nativeElement.offsetHeight;\n this.applyDefaultSizes(containerHeight, dividerHeight);\n }\n });\n }\n\n private applyDefaultSizes(containerHeight: number, dividerHeight: number): void {\n const defaultTopHeight = Math.floor((containerHeight - dividerHeight) / 2);\n const defaultBottomHeight = containerHeight - defaultTopHeight - dividerHeight;\n this.setElementSizes(defaultTopHeight, defaultBottomHeight);\n }\n\n private setElementSizes(topHeight: number, bottomHeight: number): void {\n this.renderer.setStyle(this.topElement, 'height', `${topHeight}px`);\n this.renderer.setStyle(this.bottomElement, 'height', `${bottomHeight}px`);\n this.sizeChanged.emit({ topHeight, bottomHeight });\n }\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(event: MouseEvent): void {\n event.preventDefault();\n\n if (!this.topElement || !this.bottomElement) {\n return;\n }\n\n this.isResizing = true;\n this.startY = event.clientY;\n this.initialTopHeight = this.topElement.offsetHeight;\n\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n }\n\n private onMouseMove = (event: MouseEvent): void => {\n if (!this.isResizing) return;\n\n const deltaY = event.clientY - this.startY;\n const newTopHeight = this.initialTopHeight + deltaY;\n\n const containerHeight = this.el.nativeElement.parentElement.offsetHeight;\n const dividerHeight = this.el.nativeElement.offsetHeight;\n const newBottomHeight = containerHeight - newTopHeight - dividerHeight;\n\n if (newTopHeight > 72 && newBottomHeight > 72) {\n this.setElementSizes(newTopHeight, newBottomHeight);\n }\n };\n\n private onMouseUp = (): void => {\n this.isResizing = false;\n\n const topHeight = this.topElement.offsetHeight;\n const bottomHeight = this.bottomElement.offsetHeight;\n localStorage.setItem(this.storageKey, JSON.stringify({ topHeight, bottomHeight }));\n\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n };\n}\n","export enum Animation {\n WHITE_LOGO = 'WHITE_LOGO',\n BLACK_LOGO = 'BLACK_LOGO',\n}\n","export enum AttachmentComponentType {\n File,\n Link,\n}\n","export enum PortfolioAttachmentType {\n None = 'None',\n PrimaryPhoto = 'PrimaryPhoto',\n Photo = 'Photo',\n Avatar = 'Avatar',\n ArticlesOfIncorporation = 'ArticlesOfIncorporation',\n Prospectus = 'Prospectus',\n Brochure = 'Brochure',\n}\n\nexport enum PropertyAttachmentType {\n None = 'None',\n PrimaryPhoto = 'PrimaryPhoto',\n Photo = 'Photo',\n Avatar = 'Avatar',\n RentalApplication = 'RentalApplication',\n LeaseAgreement = 'LeaseAgreement',\n}\n\nexport enum UnitAttachmentType {\n None,\n PrimaryPhoto,\n Photo,\n CurrentLease,\n FloorPlan,\n}\n\nexport enum TurnoverAttachmentType {\n None,\n Summary,\n ScopeOfWork,\n Photo,\n Other,\n InspectionReport,\n}\n\nexport enum ApplianceAttachmentType {\n None = 'None',\n Order = 'Order',\n Warranty = 'Warranty',\n Manual = 'Manual',\n InstallationGuide = 'InstallationGuide',\n}\n\nexport enum BidAttachmentType {\n None,\n FilledScopeOfWork,\n Photo,\n}\n\nexport enum TicketAttachmentType {\n None,\n Attachment,\n}\n","export enum AuditableEntityType {\n None,\n Delinquency,\n Renewal,\n WorkflowStep,\n TurnoverData,\n}\n","export enum BidStatusType {\n None,\n SentToContractors,\n SentToTurnover,\n Accepted,\n Rejected,\n}\n","export enum BreadcrumbTheme {\n LIGHT_GRAY = 'LIGHT_GRAY',\n GRAY = 'GRAY',\n GREEN = 'GREEN',\n KANBAN_GRAY1 = 'KANBAN_GRAY1',\n KANBAN_GRAY2 = 'KANBAN_GRAY2',\n KANBAN_GRAY3 = 'KANBAN_GRAY3',\n KANBAN_GRAY4 = 'KANBAN_GRAY4',\n KANBAN_GREEN1 = 'KANBAN_GREEN1',\n KANBAN_GREEN2 = 'KANBAN_GREEN2',\n KANBAN_GREEN3 = 'KANBAN_GREEN3',\n KANBAN_GREEN4 = 'KANBAN_GREEN4',\n KANBAN_GREEN5 = 'KANBAN_GREEN5',\n KANBAN_GREEN6 = 'KANBAN_GREEN6',\n KANBAN_GREEN7 = 'KANBAN_GREEN7',\n KANBAN_GREEN8 = 'KANBAN_GREEN8',\n KANBAN_GREEN9 = 'KANBAN_GREEN9',\n KANBAN_SELECTED = 'KANBAN_SELECTED',\n}\n","export enum ButtonType {\n DEFAULT = 'DEFAULT',\n STROKED = 'STROKED',\n RAISED = 'RAISED',\n}\n","export enum EColorPalette {\n cGray = '#484848',\n cGray2 = '#DADADA',\n cGray3 = '#8A8A8A',\n cGray4 = '#212121',\n cGray5 = '#B9B8B8',\n cGray6 = '#FAFAFA',\n cGray7 = '#767575',\n cGray8 = '#EEEEEE',\n cGray11 = '#767575',\n cBlack = '#000',\n cRed = '#FF6C6C',\n cRed2 = '#E93A4F',\n cRed3 = '#D72A40',\n cGreen = '#4EB08D',\n cGreen2 = '#9EBD59',\n cGreen3 = '#108060',\n cGreen4 = '#005336',\n cGreen5 = '#0f593f',\n cGreen6 = '#0b6b50',\n cGreen7 = '#129872',\n cGreen8 = '#49a986',\n cGreen9 = '#dcefe8',\n cGreen10 = '#4EB08D',\n cGreen11 = '#C9EDE0',\n cGreen12 = '#5ACD9F',\n cGreen13 = '#42C09D',\n cYellow = '#FFC700',\n cYellow2 = '#FFCD1B',\n cYellow3 = '#FFBA69',\n cBlue = '#3058C2',\n cBlue2 = '#305D93',\n cBlue3 = '#3f7cc5',\n cViolet = '#6969EE',\n cOrange = '#FF8A00',\n cOrange2 = '#EA912A',\n cPurple = '#9055C3',\n cPink = '#FF217E',\n cPink2 = '#C2B6FF',\n cWhite = '#FFFFFF',\n}\n","export enum EmptyValues {\n DASH = '-',\n}\n","export enum CompareOperator {\n EQUAL,\n MORE,\n LESS,\n MORE_EQUAL,\n LESS_EQUAL,\n}\n","export enum DashboardViewType {\n NONE = 0,\n PROPERTY_VIEW = 1,\n PORTFOLIO_WIDE_VIEW = 2,\n PROPERTY_WITH_GROUPING_VIEW = 3,\n PROPERTY_WITHOUT_ALL = 4,\n PROPERTY_VIEW_SINGLE = 5,\n}\n","export enum DelinquencyResultType {\n None,\n DelayedPayment,\n Eviction,\n PaymentPlan,\n PaidInFull,\n Assistance,\n MovedOut,\n SmallBalance,\n PendingCredit,\n NTV,\n}\n","export enum EDropdownTab {\n PREDEFINED,\n OWN,\n}\n","export enum EnumerationItemFields {\n enumerationValue = 'enumerationValue',\n enumerationGroup = 'enumerationGroup',\n simpleText = 'simpleText',\n displayText = 'displayText',\n fullDescription = 'fullDescription',\n fullyqualifiedUrn = 'fullyqualifiedUrn',\n}\n","export enum FieldType {\n STRING,\n DATE,\n CURRENCY,\n BOOLEAN,\n NUMBER,\n ASSISTANCE_TYPE,\n DELINQUENCY_RESULT_TYPE,\n RENEWAL_RESULT_TYPE,\n MOVE_OUT_TYPE,\n UNIT_CONDITION_TYPE,\n FINISH,\n TURNOVER_PRIORITY_TYPE,\n}\n","export enum EIcon {\n ANGLE_DOWN = 'angleDown',\n ANGLE_UP = 'angleUp',\n ANGLE_LEFT = 'angleLeft',\n ANGLE_RIGHT = 'angleRight',\n WARNING = 'warning',\n WARNING2 = 'warning2',\n HOME_HEART = 'homeHeart',\n ARROW_DOWN = 'arrowDown',\n ARROW_UP = 'arrowUp',\n ARROW_LEFT = 'arrowLeft',\n WAITING = 'waiting',\n FILE_PLUS = 'filePlus',\n HOME = 'home',\n SAD = 'sad',\n EXPIRATIONS = 'expirations',\n SIGN_OUT = 'signOut',\n FORWARD = 'forward',\n GREEN_FLAG = 'greenFlag',\n RED_FLAG = 'redFlag',\n YELLOW_FLAG = 'yellowFlag',\n DEFAULT_FLAG = 'defaultFlag',\n REPEAT = 'repeat',\n REPEAT_LAPS = 'repeat-laps',\n REPEAT_ONE = 'iconRepeatOne',\n REPEAT2 = 'iconRepeat',\n DOLLAR = 'dollar',\n DOLLAR_THIN = 'dollar_thin',\n DONE = 'done',\n DONE_WB = 'doneWB',\n ERROR = 'error',\n PERMISSION_ERROR = 'permissionError',\n QUESTION = 'question',\n SEARCH = 'search',\n TIME_SCHEDULE = 'timeSchedule',\n THUNDER_CIRCLE = 'thunderCircle',\n SHIELD_USER = 'shieldUser',\n PLUS = 'plus',\n USER = 'user',\n BOARD = 'board',\n DASHBOARD = 'dashboard',\n DASHBOARD2 = 'dashboard2',\n DASHBOARD3 = 'dashboard3',\n DASHBOARD4 = 'dashboard4',\n DASHBOARD5 = 'dashboard5',\n USER_GROUP = 'userGroup',\n CHAIR = 'chair',\n LIBRARY = 'library',\n VISIBLE = 'visible',\n FILE_DONE = 'fileDone',\n TIMER = 'timer',\n TOOLS = 'tools-wrench',\n TOOLS_HAMMER_SCREWDRIVER = 'tools-hammer-screwdriver',\n Service = 'tools-hammer',\n ARCHIVE = 'archive',\n BINOCULAR = 'binocular',\n ARROW_FROM_LEFT = 'arrowFromLeft',\n ARROW_FROM_RIGHT = 'arrowFromRight',\n EDIT = 'edit',\n CLOSE = 'close',\n CLOSE_GRAY = 'close-gray',\n RADIO_SELECTED = 'radioSelected',\n RADIO_DEFAULT = 'radioDefault',\n BUILDING = 'building',\n IPHONE = 'iphone',\n MAIL = 'mail',\n MAIL2 = 'mail2',\n IMPORT = 'import',\n EXPORT = 'export',\n NOTIFICATION = 'notification',\n CHECK = 'check',\n HYPERLINK = 'hyperlink',\n ARROW_TO_BOTTOM = 'arrowToBottom',\n COMMENT = 'comment',\n COMMENT2 = 'comment2',\n COMMENT3 = 'comment3',\n COMMENT4 = 'comment4',\n COMMENT_CIRCLE = 'comment-circle',\n COMMENT_QUESTION = 'comment-question',\n CHECKBOX_SELECTED = 'checkboxSelected',\n CHECKBOX_DEFAULT = 'checkboxDefault',\n CROSS = 'cross',\n SAVE = 'save',\n TICK = 'tick',\n TICKET = 'ticket',\n TICKET2 = 'ticket2',\n MOVE_OUT = 'moveOut',\n HIDDEN = 'hidden',\n EXPAND_ARROWS = 'expandArrows',\n CHART_LINE = 'chartLine',\n NOTIFICATIONS = 'notifications',\n PENCIL = 'pencil',\n SETTINGS = 'settings',\n SETTINGS2 = 'settings2',\n TRASH = 'trash',\n EXPAND = 'expand',\n COLLAPSE = 'collapse',\n BLOCKS = 'blocks',\n MENU = 'menu',\n BULB = 'bulb',\n SUPPORT = 'support',\n BUG = 'bug',\n DOLLAR_CIRCLE = 'dollar_circle',\n LOGO = 'logo',\n EXCHANGE = 'exchange',\n SENDING = 'sending',\n SLEEP = 'sleep',\n REST = 'rest',\n HAMMER = 'hammer',\n SNEAKERS = 'sneakers',\n CLIPBOARD = 'clipboard',\n BULLET_LIST = 'bulletList',\n PIE_CHART_CIRCLE = 'pieChartCircle',\n LIST_WITH_THREE_STRIPES = 'listWithThreeStripes',\n CARDS_BOARDS = 'cardsBoards',\n NOTIFICATIONS_BIT = 'notifications_bit',\n PORTFOLIOS = 'portfolios',\n Inspect = 'settings-inspect',\n STAR = 'star',\n HALF_STAR = 'halfStar',\n STAR_HAPPY = 'star-happy',\n KEY = 'iconKey',\n TIME_SCHEDULE2 = 'iconTimeSchedule',\n ALARM_CLOCK = 'iconAlarmClock',\n ESTIMATED_OCCUPANCY = 'iconEstimatedOccupancy',\n HOME_HEART2 = 'iconHomeHeart',\n CLIPBOARD2 = 'iconClipboard',\n BID = 'iconBid',\n MAKE_READY = 'iconMakeReady',\n RENO = 'iconReno', //Brush\n DESIGN_PIN = 'designPin',\n MOVE_IN = 'iconMoveIn',\n NEW_TRASH = 'new_trash',\n FINGER = 'finger',\n WHITE_PLUS = 'white_plus',\n GREEN_PLUS = 'greenPlus',\n VACANCY_LOSS = 'vacancyLoss',\n UNIT = 'unit',\n PROPERTY = 'property',\n KEY2 = 'key',\n JOIN_MODE = 'iconJoinMode',\n SPLIT_MODE = 'iconSplitMode',\n SENTIMENT_SATISFIED = 'good',\n SENTIMENT_NEUTRAL = 'fair',\n SENTIMENT_DISSATISFIED = 'poor',\n CLIPBOARD_LIST = 'Clipboard_list',\n CHAT = 'Chat',\n FLAG = 'Flag',\n SKIPPED = 'skipped',\n CHECK_NO = 'Check_no',\n CHECK_YES = 'Check_yes',\n SHARE = 'share',\n FILTER = 'iconFilter',\n ICON_CALENDAR = 'iconCalendar',\n CALENDAR = 'calendar',\n RATE = 'rate',\n ICON_HOME = 'iconHome',\n ICON_DOLLAR = 'iconDollar',\n ICON_JOIN = 'iconJoin',\n ICON_SPLIT = 'iconSplit',\n ICON_SEARCH = 'iconSearch',\n BB_TRASH = 'bb-trash',\n EMOJI = 'emojiDefault',\n EMOJI_HOVER = 'emojiHover',\n MOVE_OUT_POINT = 'moveOutPoint',\n MOVE_IN_POINT = 'moveInPoint',\n DELAY_ICON = 'delayIcon',\n APPROVAL_BOARD = 'approvalBoard',\n MOVE_IN_BOARD = 'moveInBoard',\n MOVE_OUT_BOARD = 'moveOutBoard',\n TURBO = 'turbo',\n RESEND_EMAIL = 'resendEmail',\n ICON_UPLOAD = 'iconUpload',\n ICON_FILE_UPLOADING = 'iconFileUploading',\n ICON_FILE_UPLOADED = 'iconFileUploaded',\n UPLOAD_ICON = 'upload-icon',\n DOWNLOAD = 'download',\n DOWNLOAD_ICON = 'download-icon',\n DELETE_FOREVER = 'delete-forever',\n PHOTO_CAMERA = 'photo-camera',\n THUMB_UP = 'thumb_up',\n THUMB_DOWN = 'thumb_down',\n YES = 'yes',\n NO = 'no',\n YES_ACTIVE = 'yes-active',\n NO_ACTIVE = 'no-active',\n MOUSE_DOUBLE_CLICK = 'mouse-double-click',\n CONTENT_COPY = 'content_copy',\n VERTICAL_DOTS = 'vertical_dots',\n MOOD = 'mood',\n THUMB_UP_DOWN = 'thumbs_up_down',\n INVITE = 'invite',\n REMOVE = 'remove_circle',\n ADD = 'add_circle',\n MAIL3 = 'mail3',\n ACCOUNT_CIRCLE = 'account_circle',\n LeaseUp = 'lease-up',\n Prelease = 'lease-up',\n ExternalLink = 'external-link',\n IconSnackbarSpinner = 'spinner',\n INFO = 'info',\n UNION = 'union',\n PLUS_FULL = 'plus_full',\n HELP = 'help',\n CLOSE_SMALL = 'close_small',\n INVENTORY = 'inventory',\n ZOOM_IN = 'zoom-in',\n FILE_PREVIEW = 'filePreview',\n PIECE_CIRCLE = 'piece_circle',\n CLOCK = 'clock',\n EYE = 'eye',\n TICKET_SIMPLE = 'ticket-simple',\n PLUS_ONE = 'plus-one',\n FOLDER = 'folder',\n ARCHIVE_V2 = 'archive_v2',\n SQUARE_GRID = 'square_grid',\n THREE_COLUMNS = 'three_columns',\n TWO_ROWS = 'two_rows',\n PLUS_ROUNED = 'plus-rounded',\n MINUS_ROUNED = 'minus-rounded',\n HOLD = 'hold',\n BELL = 'bell',\n BB_EDIT = 'bb-edit',\n QUESTION_NEW = 'question-new',\n SYNC = 'sync',\n}\n","export enum KpiType {\n Inventory,\n Time = 1,\n All = 2,\n}\n","import * as moment from 'moment/moment';\n\nexport enum KpiWindowType {\n OpenTurns = 1,\n Days30 = 30,\n Days60 = 60,\n Days90 = 90,\n Months6 = 180,\n Months12 = 365,\n}\n\nexport const getTrendDaysDiff = (trendDaysValue: KpiWindowType, currentDate: Date): number[] => {\n const startOfMonth = moment(currentDate).startOf('month');\n\n const prevMonth1Middle = moment(startOfMonth).add(-15, 'days');\n const prevMonth1Start = moment(startOfMonth).add(-1, 'month');\n\n const prevMonth2Middle = moment(prevMonth1Start).add(-15, 'days');\n const prevMonth2Start = moment(prevMonth1Start).add(-1, 'month');\n\n const prevMonth3Middle = moment(prevMonth2Start).add(-15, 'days');\n const prevMonth3Start = moment(prevMonth2Start).add(-1, 'month');\n\n const trendDays = [moment(currentDate), startOfMonth, prevMonth1Middle, prevMonth1Start];\n\n if (trendDaysValue > 30) {\n trendDays.push(prevMonth2Middle, prevMonth2Start);\n }\n\n if (trendDaysValue > 60) {\n trendDays.push(prevMonth3Middle, prevMonth3Start);\n }\n\n const trendDaysDiff = trendDays.map(i => getDaysDiff(currentDate, i) * -1);\n\n if (trendDaysValue === KpiWindowType.Months6) {\n while (Math.abs(trendDaysDiff[trendDaysDiff.length - 1]) < KpiWindowType.Months6) {\n trendDaysDiff.push(trendDaysDiff[trendDaysDiff.length - 1] + -30);\n }\n\n trendDaysDiff[trendDaysDiff.length - 1] = -KpiWindowType.Months6;\n }\n\n if (trendDaysValue === KpiWindowType.Months12) {\n while (Math.abs(trendDaysDiff[trendDaysDiff.length - 1]) < KpiWindowType.Months12) {\n trendDaysDiff.push(trendDaysDiff[trendDaysDiff.length - 1] + -30);\n }\n\n trendDaysDiff[trendDaysDiff.length - 1] = -KpiWindowType.Months12;\n }\n return trendDaysDiff;\n};\n\nfunction getDaysDiff(getCurrentDate: Date, dt: moment.Moment): number {\n return moment(getCurrentDate).diff(dt, 'days');\n}\n","export enum LoaderType {\n List = 'List',\n Board = 'Board',\n PieChart = 'PieChart',\n Kanban = 'Kanban',\n Comment_List = 'Comment_List',\n Details_Single = 'Details_Single',\n Recipients_Section = 'Recipients_Section',\n System_Config = 'System_Config',\n Calendar = 'Calendar',\n}\n","export enum LocalStorageDataEnum {\n AVATAR_USER_CONFIG_LIST = 'avatar-user-config-list',\n BOARD_BUILDER = 'board-builder-configuration',\n BOARD_BUILDER_SORTING_KEY = 'board-sorting-state-',\n BOARD_SCHEDULE_CELL = 'schedule-cell',\n BOARDS_VIEW_MODE = 'boards-view-mode',\n SERVICE_VIEW_MODE = 'service-view-mode',\n TURNOVER_VIEW_MODE = 'turnover-view-mode',\n TURNOVER_TYPE_VIEW = 'turnover-type-view',\n CALENDAR = 'calendar-configuration',\n KANBAN_ACTIVE_SECTIONS = 'kanban-active-sections',\n SETTINGS_TURNOVER_ELAPSED_DAYS_TOGGLE = 'settings-turnover-elapsed-days-toggle',\n SETTINGS_TURNOVER_STEP_ASSIGNEES_TOGGLE = 'settings-turnover-step-assignees-toggle',\n SETTINGS_CUSTOM_FIELDS_TOGGLE = 'settings-custom-fields-toggle',\n SETTINGS_WORKFLOW_STEPS_TOGGLE = 'settings-workflow-steps-toggle',\n SETTINGS_COLLECTIONS = 'settings-collections',\n SETTINGS_COLLECTIONS_ACCESS = 'settings-collections-access',\n SETTINGS_COLLECTIONS_SET_PROPERTIES = 'settings-collections-set-properties',\n SETTINGS_COLLECTIONS_AVAILABLE_PROPERTIES = 'settings-collections-available-properties',\n CACHE_KEYS = 'cache-keys-{0}',\n //INSPECTION\n INSPECTION_LIST_SORT_ACTIVE = 'inspection-list-sort-active',\n INSPECTION_LIST_SORT_DIRECTION = 'inspection-list-sort-direction',\n INSPECTION_LIST_MODE = 'inspection-list-mode',\n INSPECTION_VIEW_MODE = 'inspection-view-mode',\n INSPECTION_LIST_USER_FILTER = 'inspection-list-user-filter-updated',\n INSPECTION_LIST_RESIDENT_FILTER = 'inspection-list-resident-filter-updated',\n INSPECTION_LIST_IN_REVIEW_FILTER = 'inspection-list-in-review-filter-updated',\n INSPECTION_LIST_DYNAMIC_FILTER = 'inspection-list-dynamic-filter-updated',\n INSPECTION_LIST_REPEATING_FILTER = 'inspection-list-repeating-filter-updated',\n INSPECTION_SECTION_STATES = 'inspection-section-states',\n INSPECTION_TEMPLATES_USER = 'inspection-templates-user',\n INSPECTION_TEMPLATES_AVAILABLE = 'inspection-templates-available',\n //SERVICE\n SERVICE_LIST_FILTER = 'service-list-filter',\n SERVICE_LIST_SORT_ACTIVE = 'service-list-sort-active',\n SERVICE_LIST_SORT_DIRECTION = 'service-list-sort-direction',\n SERVICE_LIST_TICKETS_TOGGLE = 'service-list-tickets-toggle',\n\n SPARE_PARTS_ITEMS_TOGGLE = 'SPARE_PARTS_ITEMS_TOGGLE',\n SPARE_PARTS_ITEM_GROUPS_TOGGLE = 'SPARE_PARTS_ITEM_GROUPS_TOGGLE',\n\n InspectionFilterOffsetKey = '[inspections]_filter_offset',\n CollectionPropertiesFilterOffsetKey = '[collection-properties]_filter_offset',\n TurnoverFilterOffsetKey = '[turnover_list]_filter_offset',\n ReportRocFilterOffsetKey = '[report_roc]_filter_offset',\n ReportRentRollFilterOffsetKey = '[report_rent-roll]_filter_offset',\n BoardBuilderOffset = '[board_builder]_filter_offset',\n BoardBuilderResize = '[board_builder]_resize;id=',\n SERVICE_CANNED_ANSWERS_TOGGLE = 'service-canned-answers-toggle',\n INSTRUCTIONS_DISMISSED = 'instructions-dismissed',\n UNSAVED_DATA = 'resident-inspection-unsaved-data',\n\n // report tables\n ReportTimeTableFilterState = '[reports]_time',\n\n //TEMPLATE MANAGER\n TEMPLATE_MANAGER_ACTIVE_TAB = 'template-manager-active-tab',\n\n SETTINGS_MAPPING_STATUSES_TOGGLE = 'SETTINGS_MAPPING_STATUSES_TOGGLE',\n SETTINGS_MAPPING_CATEGORIES_TOGGLE = 'SETTINGS_MAPPING_CATEGORIES_TOGGLE',\n SETTINGS_MAPPING_USERS_TOGGLE = 'SETTINGS_MAPPING_USERS_TOGGLE',\n SETTINGS_MAPPING_PRIORITIES_TOGGLE = 'SETTINGS_MAPPING_PRIORITIES_TOGGLE',\n SETTINGS_MAPPING_SYNC_OPTIONS_TOGGLE = 'SETTINGS_MAPPING_SYNC_OPTIONS_TOGGLE',\n SETTINGS_MAPPING_ORIGINS_TOGGLE = 'SETTINGS_MAPPING_ORIGINS_TOGGLE',\n SETTINGS_MAPPING_FAILOVER_IMPORT_TOGGLE = 'SETTINGS_MAPPING_FAILOVER_IMPORT_TOGGLE',\n SETTINGS_MAPPING_FAILOVER_EXPORT_TOGGLE = 'SETTINGS_MAPPING_FAILOVER_EXPORT_TOGGLE',\n\n // TURNOVER ARCHIVE\n TURNOVER_ARCHIVE_LIST_SORT_ACTIVE = 'turnover-archive-list-sort-active',\n TURNOVER_ARCHIVE_LIST_SORT_DIRECTION = 'turnover-archive-list-sort-direction',\n TURNOVER_LIST_SUMMARY_CLIENT_PART_FILTERS = 'turnover-list-summary-client-filters',\n TURNOVER_LIST_SUMMARY_SERVER_PART_FILTERS = 'turnover-list-summary-server-filters',\n\n BOARD_FILTER = 'board-filter',\n\n NOTIFICATION_PERSONAL_lIST_TOGGLE = 'notification-personal-list-toggle',\n NOTIFICATION_USER_lIST_TOGGLE = 'notification-user-list-toggle',\n\n //SUMMARY\n INSPECTIONS_SUMMARY_FILTERS = 'inspections-summary-filters',\n BOARDS_SUMMARY_BOARD_TYPE = 'boards-summary-board-type',\n BOARDS_SUMMARY_BOARD_ID = 'boards-summary-board-id',\n SERVICE_SUMMARY_TICKET_TYPE = 'service-summary-ticket-type',\n TURNOVER_SUMMARY_QUERY_TYPE = 'turnover-summary-query-type',\n\n //UPPD\n PREV_SWITCH_STATUS = 'prev-switch-status',\n PREV_PORTFOLIO_CONTROL_VALUE = 'prev-portfolio-control-value',\n PREV_PORTFOLIO_PROPERTIES_CONTROL_VALUE = 'prev-portfolio-properties-control-value',\n PREV_COLLECTION_CONTROL_VALUE = 'prev-collection-control-value',\n IS_ALL_COLLECTIONS_SELECTED = 'is-all-collections-selected',\n PREV_COLLECTION_PROPERTIES_CONTROL_VALUE = 'prev-collection-properties-control-value',\n}\n","export enum MainPageActions {\n ACCOUNT = 'ACCOUNT',\n PASSWORD = 'PASSWORD',\n NOTIFICATIONS = 'NOTIFICATIONS',\n LOGOUT = 'LOGOUT',\n LOGIN = 'LOGIN',\n HOME_PAGE = 'HOME_PAGE',\n NEW_TURNOVER = 'NEW_TURNOVER',\n}\n","export enum ManagementRoute {\n SETTINGS = 'settings',\n SURVEYS = 'surveys',\n USERS = 'users',\n NOT_RESIDENTS = 'list',\n RESIDENTS = 'residents',\n ROLES = 'roles-management',\n NEW = 'new',\n EDIT = 'edit',\n RENEWAL_STRATEGY = 'renewal-strategy',\n KPI = 'kpi',\n PORTFOLIO = 'portfolio',\n COLLECTION = 'collection',\n INSPECT = 'inspect',\n PMS_MAPPING = 'pms-mapping',\n VENDOR = 'vendor',\n SYSTEM = 'system',\n TURNOVER_CONFIGURATION = 'turnover-configuration',\n USER = 'user',\n DYNAMIC = 'dynamic',\n REPEATING = 'repeating',\n IN_REVIEW = 'in-review',\n RESIDENT = 'resident',\n TEMPLATES = 'templates',\n SPACE_TEMPLATE = 'space-template',\n SERVICE = 'service',\n BRANDING = 'branding',\n NOTIFICATIONS = 'notifications',\n}\n","export enum PackageType {\n Turns = 1,\n Inspections = 2,\n Service = 3,\n InspectionsPro = 4,\n Residents = 5,\n CannedAnswers = 6,\n SpareParts = 7,\n ResidentPortalPackageEnabled = 8,\n ResidentInspectionEnabled = 9,\n}\n","export enum PermissionLevelType {\n None = 'None',\n AllPermissions = 'AllPermissions',\n Inspections_SharedLibrary_List = 'Inspections_SharedLibrary_List',\n Inspections_SharedLibrary_Edit = 'Inspections_SharedLibrary_Edit',\n Inspections_List = 'Inspections_List',\n ResidentInspections_List = 'ResidentInspections_List',\n InspectionTemplates_List = 'InspectionTemplates_List',\n InspectionTemplates_Edit = 'InspectionTemplates_Edit',\n PropertyManager_Dashboard_Read = 'PropertyManager_Dashboard_Read',\n PropertyManager_PortfolioWideView = 'PropertyManager_PortfolioWideView',\n PropertyManager_UnitList_Read = 'PropertyManager_UnitList_Read',\n PropertyManager_UnitMix_Read = 'PropertyManager_UnitMix_Read',\n PropertyManager_ActiveTurnovers_Read = 'PropertyManager_ActiveTurnovers_Read',\n PropertyManager_Delinquencies_Read = 'PropertyManager_Delinquencies_Read',\n PropertyManager_Renewals_Read = 'PropertyManager_Renewals_Read',\n AssetManager_PropertyDashboard_Read = 'AssetManager_PropertyDashboard_Read',\n ConstructionManager_Dashboard_Read = 'ConstructionManager_Dashboard_Read',\n Administrator_Dashboard_Read = 'Administrator_Dashboard_Read',\n Turnovers_Kanban_Read = 'Turnovers_Kanban_Read',\n Turnovers_Archived_Read = 'Turnovers_Archived_Read',\n Delinquencies_Read = 'Delinquencies_Read',\n Renewals_Read = 'Renewals_Read',\n Management_Users = 'Management_Users',\n Management_Residents = 'Management_Residents',\n Management_Roles = 'Management_Roles',\n Management_Contractors_Read = 'Management_Contractors_Read',\n Management_PropertyManagers_Read = 'Management_PropertyManagers_Read',\n Management_ResponsibleParties_Read = 'Management_ResponsibleParties_Read',\n Management_UnitTargetRents_Read = 'Management_UnitTargetRents_Read',\n Management_Applicances_Read = 'Management_Applicances_Read',\n Management_KPI_Read = 'Management_KPI_Read',\n Management_Portfolio_Read = 'Management_Portfolio_Read',\n ManagementInspect = 'Management_Inspect',\n PropertyManager_UnitList_Edit = 'PropertyManager_UnitList_Edit',\n PropertyManager_UnitMix_Edit = 'PropertyManager_UnitMix_Edit',\n PropertyManager_ActiveTurnovers_Edit = 'PropertyManager_ActiveTurnovers_Edit',\n PropertyManager_Delinquencies_Edit = 'PropertyManager_Delinquencies_Edit',\n PropertyManager_Renewals_Edit = 'PropertyManager_Renewals_Edit',\n AssetManager_PropertyDashboard_Edit = 'AssetManager_PropertyDashboard_Edit',\n ConstructionManager_Dashboard_Edit = 'ConstructionManager_Dashboard_Edit',\n Administrator_Dashboard_Edit = 'Administrator_Dashboard_Edit',\n Turnovers_Kanban_Edit = 'Turnovers_Kanban_Edit',\n Turnovers_Archived_Edit = 'Turnovers_Archived_Edit',\n Delinquencies_Edit = 'Delinquencies_Edit',\n Renewals_Edit = 'Renewals_Edit',\n Management_Contractors_Edit = 'Management_Contractors_Edit',\n Management_PropertyManagers_Edit = 'Management_PropertyManagers_Edit',\n Management_ResponsibleParties_Edit = 'Management_ResponsibleParties_Edit',\n Management_UnitTargetRents_Edit = 'Management_UnitTargetRents_Edit',\n Management_Applicances_Edit = 'Management_Applicances_Edit',\n Management_KPI_Edit = 'Management_KPI_Edit',\n Management_Portfolio_Edit = 'Management_Portfolio_Edit',\n Companies_Read = 'Companies_Read',\n Companies_Edit = 'Companies_Edit',\n Tickets_Read = 'Tickets_Read',\n Tickets_Edit = 'Tickets_Edit',\n Turnovers_ReverseFlow = 'Turnovers_ReverseFlow',\n Turnovers_Delete = 'Turnovers_Delete',\n Tickets_EditAll = 'Tickets_EditAll',\n Management_TurnoverConfiguration_Read = 'Management_TurnoverConfiguration_Read',\n Management_TurnoverConfiguration_Edit = 'Management_TurnoverConfiguration_Edit',\n BulkScope = 'Bulk_Scope',\n Board_Use = 'Board_Use',\n Board_View = 'Board_View',\n Board_Edit = 'Board_Edit',\n ReportEdit = 'Reports_Edit',\n ReportView = 'Reports_View',\n Chat_Hooks = 'Chat_Hooks',\n Bids_View = 'Bids_View',\n Bids_Use = 'Bids_Use',\n Bids_Approval = 'Bids_Approval',\n Service_Edit = 'Service_Edit',\n Service_View = 'Service_View',\n Resident_Dashboard = 'Resident_Dashboard',\n Board_Use_Allow_Backward_Completion_Date = 'Board_Use_Allow_Backward_Completion_Date',\n ExternalPmsSettings_Edit = 'ExternalPmsSettings_Edit',\n Inspections_AsHomePage = 'Inspections_AsHomePage',\n BrandingSettings_View = 'BrandingSettings_View',\n BrandingSettings_Edit = 'BrandingSettings_Edit',\n PropertyCollections_View = 'PropertyCollections_View',\n PropertyCollections_Edit = 'PropertyCollections_Edit',\n Inspections_Delete = 'Inspections_Delete',\n DynamicInspections_Edit = 'DynamicInspections_Edit',\n RepeatingInspections_Edit = 'RepeatingInspections_Edit',\n BB2F_RequiresAcceptance = 'BB2F_RequiresAcceptance',\n}\n","export enum PriorityType {\n None,\n Low,\n Medium,\n High,\n Emergency,\n}\n","export enum PropertyType {\n None = 0,\n Portfolio = 1,\n Property = 2,\n Building = 3,\n Unit = 4,\n}\n","export enum RouteData {\n BREADCRUMB = 'breadcrumb',\n BREADCRUMB_ICON = 'breadcrumbIcon',\n BACK_TO_PARENT_BUTTON = 'backToParentButton',\n DASHBOARD_VIEW_TYPE = 'dashboardViewType',\n ALL_PORTFOLIOS = 'allPortfolios',\n SOURCE_VIEW = 'sourceView',\n DASHBOARD_SOURCE = 'dashboardSource',\n DO_NOT_STORE_PARAMS = 'doNotStoreParams',\n PORTFOLIO_ID = 'portfolioId',\n COLLECTION_IDS = 'collectionIds',\n PROPERTY_IDS = 'propertyIds',\n PREV_PROPERTY_IDS = 'prevPropertyIds',\n BULK_SECTION_ID = 'bulkSectionId',\n STATUS = 'status',\n STEP_TYPE = 'stepType',\n UNIT_TYPE = 'unitType',\n ASSIGNEE_ID = 'assigneeId',\n TICKET_ID = 'ticketId',\n COMMENT_ID = 'commentId',\n KANBAN_SECTION = 'kanban-section',\n TURNOVER_OVERVIEW_STATE = 'turnover-overview-state',\n WORKFLOW_STEP = 'workflow-step',\n INSPECTIONS_VIEW = 'inspectionsView',\n WORKFLOW_PHASE_TYPE = 'workflowPhaseType',\n LABEL = 'label',\n}\n","export enum RoutePath {\n // Widget - block\n WIDGET_BOARD_RESCHEDULE = 'bb2f/reschedule',\n WIDGET_BOARD_DONE = 'bb2f/done',\n WIDGET_BOARD_COMMENT = 'bb2f/comment',\n WIDGET_BOARD_TURNOVER_COMMENT = 'bb2f/TurnoverComment',\n WIDGET_BOARD_TURNOVER_DECLINE = 'bb2f/decline',\n WIDGET_BOARD_TURNOVER_ACCEPT = 'bb2f/accept',\n WIDGET_BOARD_TURNOVER_INPROGRESS = 'bb2f/inprogress',\n WIDGET_BID_REJECT = 'bb2f/RejectBid', //server use apper case for generated url links, so we should use same here\n WIDGET_BID_ACCEPT = 'bb2f/AcceptBid', //ToDo: make router case insensitive for using normal lowacse links\n WIDGET_BID_APPROVE = 'bb2f/ApproveBid',\n WIDGET_BID_DENY = 'bb2f/DenyBid',\n WIDGET_BID_COMMENT = 'bb2f/CommentBid',\n OPEN_MOBILE_APP = 'open-mobile-app',\n DOWNLOAD_MOBILE_APP = 'download-mobile-app',\n // Service - block (widgets with login)\n USER = 'user',\n RESIDENT = 'resident',\n SERVICE = 'service',\n CANNED_ANSWERS = 'canned-answers',\n SPARE_PARTS = 'spare-parts',\n REQUEST = 'request',\n UPCOMING = 'upcoming',\n RATE = 'rate',\n INSPECT = 'inspect',\n INSPECTION = 'inspection',\n // Service - end\n ADMIN = 'admin',\n PERFORMANCE_METRICS = 'performance-metrics',\n ADMIN_LEVEL_1 = 'administrator-first-dashboard',\n ADMIN_LEVEL_2 = 'administrator-second-dashboard',\n CONSTRUCTION_MANAGER = 'construction-manager-dashboard',\n PROPERTY_DASHBOARD = 'property-dashboard',\n PROPERTY = 'property',\n UNIT_DASHBOARD = 'unit-dashboard',\n ASSET_DASHBOARD = 'asset-dashboard',\n HOME = 'home',\n ROLES = 'roles',\n LOGIN = 'login',\n VENDOR_DASHBOARD = 'vendor-dashboard',\n ACCEPT_TOKEN = 'accept-token',\n BUILDIUM = 'buildium',\n DELINQUENCIES = 'delinquencies',\n MOVE_OUT = 'move-out',\n MOVE_OUT_PORTFOLIO = 'move-out-portfolio',\n MOVE_OUT_PROPERTY = 'move-out-property',\n // TODO temporary fix - TO BE REMOVED and use full paths instead to navigate\n RENEWALS_LIST = 'renewals-list',\n DELINQUENCY_LIST = 'delinquency-list',\n /* END TODO */\n UNIT_LIST = 'unit-list',\n NO_PERMISSION = 'no-permission',\n NO_PACKAGE = 'no-package',\n //boards - block\n BOARDS = 'boards',\n SUMMARY = 'summary',\n //Turnovers - block\n TURNOVERS = 'turnovers',\n KANBAN = 'kanban',\n ACTIVE_TURNOVERS = 'active-turnovers',\n ARCHIVED = 'archived',\n NOTICE = 'notice',\n MOVE_OUT_CONFIRMATION = 'move-out',\n BID = 'bid',\n MAKE_READY = 'make-ready',\n RENO = 'reno',\n PUNCH = 'punch',\n APPROVAL = 'approval',\n MARKETING = 'marketing',\n LEASE_UP = 'lease-up',\n MOVE_IN = 'move-in',\n ARCHIVE = 'archive',\n BULK_BIDS = 'bulk-bids',\n //Reports - block\n REPORTS = 'reports',\n Report = 'report',\n RENT_ROLL = 'rent-roll',\n ROC = 'roc',\n BILLING = 'billing',\n UNIT_MIX = 'unit-mix',\n DELINQUENCY = 'delinquency',\n RENEWALS = 'renewals',\n //Reports - end\n BID_DETAIL = 'bid-detail',\n APPLIANCE_DETAIL = 'appliance-detail',\n JOBS_AVAILABLE_AND_BIDS_SENT = 'jobs-available-and-bids-sent',\n BULK_BIDS_EDIT = 'bulk-bids-edit',\n EDIT = 'edit',\n UNIT_DETAILS = 'unitDetails',\n TICKETS = 'tickets',\n DASHBOARD_TICKETS = 'dashboardTickets',\n DETAILS = 'details',\n HISTORY = 'history',\n INSPECTIONS = 'inspections',\n CUSTOM_INSPECTIONS = 'inspections/custom',\n CALENDAR = 'calendar',\n EXTERNAL = 'external',\n}\n","export enum ESelectionDateMode {\n OWN = 'OWN',\n TODAY = 'TODAY',\n WEEK = 'WEEK',\n MONTH = 'MONTH',\n ALL = 'ALL',\n SINGLE = 'SINGLE',\n}\n","export enum ESelectionRangeMode {\n OWN = 'OWN',\n PREDEFINED = 'PREDEFINED',\n}\n","export enum ThresholdType {\n None = 0,\n\n //PropertyKPI\n GeneralOccupancy = 1,\n PendingMoveouts = 2,\n PreleasedUnits = 3,\n AnticipatedOccupancy = 4,\n DelinquentUnit = 5,\n PendingExpirations = 6,\n MoveoutsConfirmations = 7,\n\n //DelinquencyKPI\n DelayedPayment = 8,\n Eviction = 9,\n PaymentPlan = 10,\n PaidInFull = 11,\n Asstance = 12,\n MovedOut = 13,\n SmallBalance = 14,\n PendingCredit = 15,\n NTVMet = 16,\n\n //RenewalsKPI\n Negotiation = 17,\n Holdover = 18,\n MonthToMonth = 19,\n TenantNotice = 20,\n Renewal = 21,\n MgmtNotice = 22,\n Transfer = 23,\n\n //Turnovers\n TurnoverRootNode = 24,\n TurnoverSubNode = 25,\n}\n","export enum TicketStatusType {\n Todo,\n InProgress,\n Resolved,\n Canceled,\n Pending,\n Declined,\n WaitingParts,\n Reopened,\n Submitted = 8,\n NotStarted = 9,\n Closed = 10,\n}\n\nexport enum TicketStatus {\n NA = 0,\n NotReady = 1,\n InProgress = 2,\n Review = 3,\n Completed = 4,\n Canceled = 5,\n}\n\nexport enum TicketCompletedStatusType {\n IsCompleted = 1,\n IsNotCompleted = 2,\n}\n\nexport enum SyncWithPMSTypes {\n Yes = 'yes',\n No = 'no',\n Any = 'any ',\n}\n","export enum TicketType {\n Other = 0,\n Turn = 1,\n Punch = 2,\n Inspection = 3,\n Resident = 4,\n Cost = 5,\n}\n","export enum TurnoverAuditMode {\n ELAPSED_DAYS = 'ELAPSED_DAYS',\n LOST_REVENUE = 'LOST_REVENUE',\n SUMMARY = 'SUMMARY',\n}\n","export enum UpdateStatus {\n IN_PROGRESS = 'IN_PROGRESS',\n UPDATE = 'UPDATE',\n UPDATED = 'UPDATED',\n OK = 'OK',\n ERROR = 'ERROR',\n DELETED = 'DELETED',\n}\n","export enum UserType {\n None,\n Employee,\n Contractor,\n Resident,\n}\n\nexport enum VendorEmployeeType {\n VendorAndEmployee,\n Vendor,\n}\n\nexport enum UserPermissionsMap {\n BB2F_RequiresAcceptance = 107,\n}\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nimport { WorkflowPhaseType } from './workflow-phase-type';\n\nexport const WorkflowPhaseToStepConst: { [key: number]: IRadioButtonOption[] } = {\n [WorkflowPhaseType.NotReady]: [\n {\n value: WorkflowStepEnumType.Notice,\n label: 'NOTICE',\n },\n {\n value: WorkflowStepEnumType.MoveOut,\n label: 'MOVE OUT',\n },\n {\n value: WorkflowStepEnumType.MakeReady,\n label: 'MAKE READY',\n },\n {\n value: WorkflowStepEnumType.Reno,\n label: 'RENO',\n },\n {\n value: WorkflowStepEnumType.Punch,\n label: 'PUNCH',\n },\n {\n value: WorkflowStepEnumType.Approval,\n label: 'APPROVAL',\n },\n ],\n [WorkflowPhaseType.Ready]: [\n {\n value: WorkflowStepEnumType.LeaseUp,\n label: 'AVAILABLE',\n },\n {\n value: WorkflowStepEnumType.MoveIn,\n label: 'MOVE IN',\n },\n ],\n};\n","export enum WorkflowPhaseType {\n None,\n NotReady,\n Ready,\n}\n","export enum WorkflowStepEnumType {\n None = 0,\n Notice = 50,\n MoveOut = 100,\n Bid = 200,\n MakeReady = 250,\n Reno = 300,\n Punch = 350,\n Approval = 400,\n Marketing = 500,\n LeaseUp = 600,\n MoveIn = 700,\n Archive = 800,\n}\n","import { PermissionLevelType } from '@shared/enums/permission-level.enum';\n\nexport function checkPermissionLevel(\n permissionList: PermissionLevelType[],\n permissionLevel: PermissionLevelType | PermissionLevelType[],\n check: 'all' | 'any' = 'all'\n): boolean {\n if (!permissionList?.length) {\n return false;\n }\n\n if (!permissionLevel) {\n return true;\n }\n\n if (!Array.isArray(permissionLevel)) {\n permissionLevel = [permissionLevel];\n }\n\n /**\n * Check if superuser\n */\n if (permissionList.filter(value => value === PermissionLevelType.AllPermissions).length) {\n return true;\n }\n\n if (check == 'any') {\n return permissionLevel.some(v => permissionList.includes(v));\n }\n return !permissionLevel.some(v => !permissionList.includes(v));\n}\n","import * as moment from 'moment';\n\nexport const oneSecondInMilliseconds = 1000;\nexport const oneMinuteInMilliseconds = oneSecondInMilliseconds * 60; // 1000 * 60\nexport const oneHourInMilliseconds = oneMinuteInMilliseconds * 60; // 1000 * 60 * 60\nexport const oneDayInMilliseconds = oneHourInMilliseconds * 24; // 1000 * 60 * 60 * 24\n\nexport function daysDiff(firstDate: Date, secondDate: Date): number {\n return moment(firstDate).diff(moment(secondDate), 'days');\n}\n","import { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { HumanizePipe } from '@shared/pipes/humanize.pipe';\n\nexport function enumToSourceFiltered(enumName: object, enumMap?: EnumerationItem[]): IRadioButtonOption[] {\n return Object.entries(enumName)\n .filter(([key, value]) => !isNaN(+value))\n .filter(([_, value]) => !enumMap || enumMap.some(item => item.enumerationValue === +value))\n .map(([key, value]) => {\n const mappedItem = enumMap?.find(item => item.enumerationValue === +value);\n return {\n label: mappedItem?.displayText || HumanizePipe.transform(key),\n value: +value,\n } as IRadioButtonOption;\n });\n}\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { HumanizePipe } from '@shared/pipes/humanize.pipe';\n\nexport function enumToSource(enumName: object) {\n return Object.entries(enumName)\n .filter(e => !isNaN(+e[1]))\n .map(e => ({ label: HumanizePipe.transform(e[0]), value: e[1] } as IRadioButtonOption));\n}\n","import { RestAddressModel } from '@shared/interfaces/address.interface';\n\nexport function FormatAddressToStringFunction(address: RestAddressModel): string {\n if (!address) {\n return '–';\n }\n return `${address?.street1 || ''} ${address?.street2 || ''} ${address?.city || ''} ${address?.state || ''} ${\n address?.zip || ''\n }`;\n}\n","import { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestTurnoverBidCategory } from '@shared/interfaces/turnover-bids.interface';\n\nexport function getBidCategoriesRadioList(categories: RestTurnoverBidCategory[]): IRadioButtonOption[] {\n return categories.map>(item => {\n return {\n value: item.id,\n label: `${item.name}`,\n };\n });\n}\n","import { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getCompanyRadioList(companyList: RestCompanyModel[]): IRadioButtonOption[] {\n return (companyList || [])\n .filter(item => item.isActive)\n .map>(item => {\n return {\n value: item.id,\n label: `${item.displayName}`,\n };\n });\n}\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\n\nexport function getCurrentWorkflowStep(\n workflowStep: WorkflowStepEnumType,\n workflow: RestWorkflowInstanceModel[]\n): RestWorkflowInstanceModel {\n return (workflow || []).find(value => value.workflowStepEnumType === workflowStep);\n}\n\nexport function getCompletedWorkflowStep(\n workflowStep: WorkflowStepEnumType,\n workflow: RestWorkflowInstanceModel[]\n): RestWorkflowInstanceModel {\n return (workflow || []).find(value => value.workflowStepEnumType === workflowStep && value.isCompleted);\n}\n","import { getUtc } from '@shared/functions/get-utc.function';\n\nexport function getDateObjectFunction(date: Date | string): Date {\n return date ? getUtc(date) : null;\n}\n","import { EnumerationItemFields } from '@shared/enums/enumeration-item-fields';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\nexport function getEnumerationRadioListFunction(\n enumerationItems: EnumerationItem[],\n nullValueLabel = 'All',\n withNullValue = true,\n valueKey = EnumerationItemFields.enumerationValue\n): IRadioButtonOption[] {\n const list: IRadioButtonOption[] = [];\n\n if (withNullValue) {\n list.push({\n label: nullValueLabel,\n value: null,\n });\n }\n\n (enumerationItems || []).forEach(item => {\n list.push({\n value: item[valueKey] as T,\n label: item.displayText,\n });\n });\n\n return list;\n}\n","export function getNextNumberItemName(\n name: string,\n array: T[],\n f: (e: T) => string = e => (e as any).name\n) {\n const maxNumber = array\n .filter(e => new RegExp(`^${name}[0-9]*$`).test(f(e)))\n .map(e => +f(e).replace(name, ''))\n .reduce((prev, max) => (prev > max ? prev : max), 0);\n\n return `${name}${maxNumber + 1}`;\n}\n","import { allPropertiesOption } from '@main-application/application-menu/property-selector/constants';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\n\nexport function getPortfolioProperties(\n userProperties: RestPropertyModel[],\n includeAllProperties = false,\n optionsToApply?: IRadioButtonOption[]\n): IRadioButtonOption[] {\n return (\n optionsToApply\n ? (optionsToApply as IRadioButtonOption[])\n : includeAllProperties\n ? [allPropertiesOption as IRadioButtonOption]\n : []\n ).concat(\n userProperties\n .map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label))\n );\n}\n","import { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestTimerInstanceModel } from '@shared/interfaces/rest-timer-instance-model';\n\nexport function getTimeInStep(\n workflowStepEnumType: WorkflowStepEnumType,\n timerInstance: RestTimerInstanceModel,\n forAllProcess = false\n): number {\n if (!timerInstance) {\n return 0;\n }\n\n if (forAllProcess) {\n return timerInstance.total;\n } else {\n switch (workflowStepEnumType) {\n case WorkflowStepEnumType.Notice: {\n return timerInstance.notice;\n }\n case WorkflowStepEnumType.MoveOut: {\n return timerInstance.moveOut;\n }\n case WorkflowStepEnumType.Bid: {\n return timerInstance.bid;\n }\n case WorkflowStepEnumType.MakeReady: {\n return timerInstance.makeReady;\n }\n case WorkflowStepEnumType.Reno: {\n return timerInstance.reno;\n }\n case WorkflowStepEnumType.Punch: {\n return timerInstance.punch;\n }\n case WorkflowStepEnumType.Approval: {\n return timerInstance.approval;\n }\n case WorkflowStepEnumType.Marketing: {\n return timerInstance.marketing;\n }\n case WorkflowStepEnumType.LeaseUp: {\n return timerInstance.leaseUp;\n }\n case WorkflowStepEnumType.MoveIn: {\n return timerInstance.moveIn;\n }\n }\n }\n}\n","import { sortBy } from 'lodash';\n\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { UserType } from '@shared/enums/user-type';\nimport { IRadioButtonOption, IUserRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModel, RestUserModelExtended } from '@shared/interfaces/user.interface';\n\nexport function getUserList(users: RestUserModelExtended[], labelAsFullName = false): IUserRadioButtonOption[] {\n const map: any = {};\n return users\n .filter(item => !!item.id)\n .map(item => {\n let defaultLabel = `${item.firstName} ${item.lastName}`;\n if (!item.firstName && !item.lastName) {\n defaultLabel = item.email;\n }\n\n let label = '';\n if (item.firstName && item.lastName && !item?.isFullName) {\n let charAmount = 1;\n\n if (!labelAsFullName) {\n label = `${item.firstName} ${item.lastName.substring(0, charAmount).toUpperCase()}`;\n while (map[label]) {\n charAmount++;\n label = (\n item.lastName.length >= charAmount\n ? `${item.firstName} ${item.lastName.substring(0, charAmount)}`\n : `${item.firstName} ${item.lastName} ${item.lastName.length - charAmount + 1}`\n ).trim();\n }\n } else {\n label = `${item.firstName} ${item.lastName}`;\n }\n }\n if (!label) {\n label = defaultLabel;\n } else if (map[label]) {\n label = defaultLabel;\n }\n\n if (item.isDefaultAssignee) {\n const stepName = WorkflowStepListConst.find(s => s.value === item.defaultAssigneeForStep)?.label;\n label += ` (default ${stepName} assignee)`;\n }\n\n if (item.isResidentAssignee) {\n label += ` (resident assignee)`;\n }\n\n if (item.isAssignToResident) {\n label = `Resident (dynamic)`;\n }\n\n if (item.isMe) {\n label += ' (me)';\n }\n map[label] = true;\n const user = {\n value: item.id,\n label,\n tooltip: defaultLabel,\n userGroupType: item.userGroupType,\n };\n if (item.lastName) user['additionalSearchLabel'] = item.lastName;\n\n return user;\n });\n}\n\nexport function getUserDisplayName(user: Pick) {\n if (!user) {\n return '';\n }\n let defaultLabel = `${user.firstName} ${user.lastName}`;\n if (!user.firstName && !user.lastName) {\n defaultLabel = user.email;\n }\n let label = null;\n if (user.firstName && user.lastName) {\n label = `${user.firstName} ${user.lastName.substring(0, 1).toUpperCase()}`;\n }\n return label ?? defaultLabel;\n}\n\nexport function getUserLastName(user: Pick): string {\n return user?.lastName;\n}\n\nexport function getUserOrVendorList(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return item.userGroupType === UserType.Contractor\n ? {\n value: item.id,\n label: item.companyName,\n }\n : {\n value: item.id,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getUserOrVendorItems(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return item.userGroupType === UserType.Contractor\n ? {\n value: item,\n label: item.companyName,\n }\n : {\n value: item,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getUserItems(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id)\n .map>(item => {\n return {\n value: item,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function getSortedUserItems(users: RestUserModel[], userData?: UserData): IRadioButtonOption[] {\n return sortBy(\n users\n .filter(item => !!item.id)\n .map>(item => {\n return {\n value: item.id,\n label: getUserDisplayName(item),\n additionalSearchLabel: getUserLastName(item),\n };\n }),\n [item => item.label.toUpperCase()]\n );\n}\n\nexport function getInternalUserList(users: RestUserModel[]): IRadioButtonOption[] {\n return users\n .filter(item => !!item.id && item.userGroupType === UserType.Employee)\n .map>(item => {\n return {\n value: item.id,\n label: `${item.firstName} ${item.lastName}`,\n };\n });\n}\n\nexport function currentLabelMe(label: string): string {\n return `${label} (me)`;\n}\n","export function getUtc(date: Date | string): Date {\n if (typeof date === 'string') {\n date = new Date(date);\n }\n return date;\n}\n","import { isArray } from 'lodash';\n\nimport { ParamsCompareFunc, ParamsCompareItem, isParamsCompareFunc } from '@shared/interfaces/params-compare-item';\n\nexport function paramsCompare(params: (ParamsCompareItem | ParamsCompareFunc)[]): boolean {\n const someFalse = params.some(item => {\n if (isParamsCompareFunc(item)) {\n return !item.compare();\n } else {\n if (isArray(item.expectValue)) {\n if (item.expectValue.length) {\n return (item.expectValue as Array).find(i => i === item.currentValue) === undefined;\n }\n } else {\n return item.expectValue !== item.currentValue;\n }\n }\n });\n return !someFalse;\n}\n","export interface ParamsCompareItem {\n currentValue: unknown;\n expectValue: unknown;\n}\n\nexport interface ParamsCompareFunc {\n compare: () => boolean;\n}\n\nexport function isParamsCompareFunc(object: any): object is ParamsCompareFunc {\n return typeof object.compare === 'function';\n}\n","export function parseNumber(value: string): number {\n value = value?.toString().replace(/,/g, '') ?? '0';\n return parseFloat(value);\n}\n","export function replaceCommaToDotFunction(value: string | number): string {\n if (!value && value !== 0) {\n return '';\n }\n return value.toString().replace(',', '.');\n}\n","export enum FileMimeType {\n Image,\n Video,\n Other,\n}\n","export interface FileUploadModel {\n id: number;\n url: string;\n internalName: string;\n originalFileName: string;\n dateUploaded: string;\n size: number;\n cloudUri: string;\n attachmentLinks: string[];\n childRestResources: string[];\n hasChildRestResources: boolean;\n videoDurationInSeconds?: number;\n thumbnailFileUploadCloudUri?: string;\n imageOrientation: ImageOrientation;\n}\n\nexport enum ImageOrientation {\n NA,\n PortraitUp,\n LandscapeRight,\n}\n","export enum Providers {\n APPFOLIO = 'AppFolio',\n INJECTER = 'Ingester',\n RESMAN = 'ResMan',\n ENTRATA = 'Entrata',\n BUILDIUM = 'Buildium',\n FORTRESS = 'Fortress',\n YARDI = 'Yardi',\n}\n\nexport interface PmsCredentialModel {\n id: number;\n propertyIds: number[];\n type: Providers;\n isRunning?: boolean;\n dontAddNewProperties: boolean;\n configuration: PmsConfigurationModel;\n pmsSyncConfiguration?: PmsSyncConfigurationExtendedModel;\n}\n\nexport interface PmsSyncConfigurationExtendedModel extends PmsSyncConfigurationModel {\n pmsStatuses: string;\n pmsCategories: string;\n pmsPriorities: string;\n pmsResolutions: string;\n pmsUsers: string;\n}\n\nexport interface PmsSyncConfigurationModel {\n id: number;\n completedStatuses: string;\n residentTicketOrigins: string;\n pullTicketsWithSelectedOriginsOnly: string;\n doNotSendTicketCreatedForSelectedOrigins: string;\n statusesMap: string;\n pmswoOrigins: string;\n categoriesMap: string;\n usersMap: string;\n prioritiesMap: string;\n resolutionsMap: string;\n pushWOToPms: boolean;\n pullWoFromPMSPropertyIds: string;\n pushWoToPmsPropertyIds: string;\n useServiceTriggersForNullAssignee: boolean;\n importDefaultTopicId?: number | null;\n importDefaultEntranceAllowed?: boolean | null;\n importDefaultAssigneeMode?: ImportDefaultAssigneeMode;\n importDefaultPriority?: TicketPriorityType;\n exportDefaultSubCategoryId: string | null;\n exportDefaultAssigneeId: string | null;\n exportDefaultOrigin: string | null;\n uploadWOAttachments: boolean;\n excludedPMSUsers: string;\n}\n\nexport interface PmsConfigurationModel {\n base_Url?: string;\n password?: string;\n username?: string;\n lastImportDetails?: string;\n lastTimeUsed?: string;\n successfullyImported?: boolean;\n allowedSenderEmails?: string;\n reportFileFormat?: string;\n}\n\nexport enum ImportDefaultAssigneeMode {\n TurnAssigneeOrPm = 0,\n Unassigned = 1,\n}\n\nexport enum TicketPriorityType {\n Low = 0,\n Medium = 1,\n High = 2,\n Critical = 3,\n}\n","import { RestTurnStepScheduleModel } from '@main-application/boards/interfaces/board';\nimport { BoardProgressType, BoardSourceType } from '@main-application/boards/interfaces/board.enums';\nimport { TicketAttachmentType, TurnoverAttachmentType } from '@shared/enums/attachment-type';\nimport { MoveOutType } from '@shared/enums/move-out-type.enum';\nimport { PreleaseAmountPaidType } from '@shared/enums/prelease-amount-paid-type';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { TicketStatus, TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { UnitConditionType } from '@shared/enums/unit-condition.enum';\nimport { UserType } from '@shared/enums/user-type';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestBidModel } from '@shared/interfaces/bid.interface';\nimport { RestWorkflowStepCommentModel } from '@shared/interfaces/comments.interface';\nimport { RestListingPlatformModel } from '@shared/interfaces/listing-platform.interface';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/property.interface';\nimport { RestTimerInstanceModel } from '@shared/interfaces/rest-timer-instance-model';\nimport { RestUnitModel } from '@shared/interfaces/unit.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { AttachmentType } from '@shared/types/attachment-type.type';\n\nexport interface TurnoverHeaderData {\n turnoverId: number;\n propertyName: string;\n unitName: string;\n currentTurnoverStep: WorkflowStepEnumType;\n moveOutType: MoveOutType;\n}\n\nexport interface RestAddressModel {\n propertyToAddressLinkId: number;\n Id: number;\n addressType: number;\n addressTypeUrn: string;\n title: string;\n street1: string;\n street2: string;\n city: string;\n state: string;\n zip: string;\n url: string;\n}\n\nexport interface RestWorkflowInstanceModel {\n id: number;\n turnoverId?: number;\n templateId?: number;\n isActive: boolean;\n isCompleted: boolean;\n completedUserId?: number;\n dateStarted?: Date;\n dateCompleted?: string;\n parentStepId?: number;\n workflowStepTemplateType: number;\n workflowStepEnumType: WorkflowStepEnumType;\n //int AssignmentRuleId: number // 0: N/A, 1: individual, 2: role: 3: creator\n //int? AssignmentObjectId?: number\n name: string;\n fullyQualifiedUrn: string;\n sortOrder: number;\n responsiblePartyId: number;\n responsiblePartyType: UserType;\n dueDate?: string;\n priority?: PriorityType;\n}\n\nexport interface RestMailingAddressModel {\n id: number;\n mailAddress: string;\n companyId: number;\n}\n\nexport interface RestTypedTurnoverAttachment {\n id: number;\n dateCreated?: string;\n dateUpdated?: string;\n isActive?: boolean;\n fileUploadId?: number;\n internalName?: string;\n originalFileName?: string;\n size?: number;\n url?: string;\n attachmentTypeUrn?: string;\n title?: string;\n description?: string;\n turnoverAttachmentType?: TurnoverAttachmentType;\n externalUrl?: string;\n}\n\nexport interface RestTurnoverAttachmentList {\n summary: RestTypedTurnoverAttachment;\n scopeOfWork: RestTypedTurnoverAttachment;\n photo: RestTypedTurnoverAttachment;\n other: RestTypedTurnoverAttachment;\n none: RestTypedTurnoverAttachment[];\n}\n\nexport interface TurnoverStepInfo {\n isStepNotAvailable: boolean;\n isStepCompleted: boolean;\n isTurnoverDeleted: boolean;\n isTurnoverComplete: boolean;\n turnoverDateDeleted?: Date | string;\n turnoverDateCompleted?: Date | string;\n}\n\nexport function isRestTurnoverDataModel(object: any): object is RestTurnoverDataModel {\n return (\n typeof object === 'object' &&\n typeof object.id === 'number' &&\n typeof object.unitId === 'number' &&\n typeof object.unitName === 'string'\n );\n}\n\nexport interface RestTurnoverDataModel {\n id: number;\n unitId: number;\n createdById: number;\n activeWorkflowStepId: number;\n propertyManagerId: number;\n propertyManager: RestUserModel;\n bulkScopeAndBidId: number;\n turnoverPriorityType: PriorityType;\n unitName: string;\n activeWorkflowStepType: WorkflowStepEnumType;\n constructionCost?: number;\n newRent?: number;\n newRentOverride?: number;\n oldRent?: number;\n oldRentOverride?: number;\n advertisedRent?: number;\n advertisedRentOverride?: number;\n marketRent?: number;\n marketRentOverride?: number;\n additionalData?: any;\n\n dateCreated: Date | string;\n dateUpdated: Date | string;\n dateCompleted: Date | string;\n dateCanceled: Date | string;\n dateMoveOut: Date;\n pmsMoveOutDate?: Date | string;\n pmsMoveInDate?: Date | string;\n dateMoveIn: Date;\n dateShowable: Date | string;\n turnoverStartDate: Date | string;\n turnoverEndDate: Date | string;\n lastRentDate: Date | string;\n\n isCompleted: boolean;\n isCanceled: boolean;\n isMoveOutCompleted: boolean;\n isMoveInCompleted: boolean;\n isAutoCreated: boolean;\n\n isUnitDown: boolean;\n isUnitDownReason: string;\n\n isUnitOnHold: boolean;\n isUnitOnHoldReason: string;\n\n // MOVE OUT\n isOccupiedInspected?: boolean;\n isVacantInspected?: boolean;\n dateOccupiedInspected: Date | string;\n dateVacantInspected: Date | string;\n unitStatus: MoveOutType;\n unitConditionType: UnitConditionType;\n\n // MAKE READY\n // BID\n finish: number;\n newFinish: number;\n oldFinish: number;\n sendingType: number;\n mailingTemplateBody: string;\n dateOffersSentOut: Date | string;\n dateOfferExpires: Date | string;\n\n // RENO\n // PUNCH\n // APPROVAL\n\n // MARKETING\n listingDescription: string;\n arePhotosNeeded: boolean;\n rentRate: number;\n securityDeposit: number;\n dateAvailable: Date | string;\n isSecurityDepositNegotiable: boolean;\n\n // LEASE UP\n leaseExecutionDate: Date | string;\n\n // MOVE IN\n isRentPaid: boolean;\n areKeysExchanged: boolean;\n isDepositPaid: boolean;\n isDocumentationAddedToExternalSystem: boolean;\n firstMonthRent: Date | string;\n additionalRentOrFees: string;\n\n // additional fields\n propertyAddress: string;\n state: string;\n postalCode: string;\n\n preleaseTenantEmail: string;\n preleaseTenantFirstName: string;\n preleaseTenantSurname: string;\n\n createdBy: RestUserModel;\n unit: RestUnitModel;\n property: RestPropertyModel;\n portfolio: RestPortfolioModel;\n workflow: RestWorkflowInstanceModel[];\n workflowStepComments: RestWorkflowStepCommentModel[];\n tickets: RestTicketModel[];\n ticketInfos: RestTicketInfo[];\n listingPlatforms: RestListingPlatformModel[];\n bids: RestBidModel[];\n mailingList: RestMailingAddressModel[];\n attachments: RestTurnoverAttachmentList;\n allAttachments: RestGenericTypedAttachment[];\n timerInstance: RestTimerInstanceModel;\n turnStepSchedules: RestTurnStepScheduleModel[];\n\n ticketsAllCount: number;\n ticketsInProgressCount: number;\n totalTimeElapsed: string;\n\n hasMoveOutLabel: boolean;\n hasMoveInLabel: boolean;\n hasOccupiedLabel: boolean;\n hasAvailableOnLabel: boolean;\n hasEvictLabel: boolean;\n\n moveOutCountdown: number;\n moveInCountdown: number;\n occupiedCountdown: number;\n evictCountDown: number;\n availableOnCountdown: number;\n\n boardConnections: BoardConnection[];\n inspectionSummary: InspectionSummary;\n}\n\nexport interface RestAssociateTicketInfo {\n ticketId: number;\n boardLayoutId: number;\n columnId: string;\n turnoverId: number;\n}\n\nexport interface RestTicketInfo {\n assigneeId: number;\n status: TicketStatus;\n ticketStatusType: TicketStatusType;\n ticketId: number;\n title: string;\n turnStepScheduleId?: number;\n}\n\nexport enum PreleaseFilterMode {\n Not,\n Kinda,\n Strict,\n}\n\nexport interface InspectionSummary {\n id: number;\n inspectionId: number;\n lastCompletedAreaName: string;\n lastCompletedAreaAt: Date;\n completedAreas: number;\n completedAt: Date;\n deletedAt: Date;\n isCompleted: false;\n isDeleted: false;\n totalNumberOfAreas: number;\n turnoverId: number;\n}\n\nexport interface BoardConnection {\n boardDataSource: BoardSourceType;\n boardProgressType: BoardProgressType;\n boardId: number;\n boardName: string;\n completedStepSchedules: number;\n isCompleted: boolean;\n stepSchedulesTotal: number;\n lastCompletedScheduleDate: string;\n lastCompletedScheduleName: string;\n nextScheduleDate: string;\n nextScheduleName: string;\n}\n\nexport interface PostTurnoverModel {\n unitId: number;\n propertyId?: number;\n turnoverStartDate?: Date;\n turnoverEndDate?: Date;\n dateMoveOut?: Date;\n startWorkflowStepType: WorkflowStepEnumType;\n}\n\nexport interface NonPmsModelModel {\n id?: number;\n propertyId?: number;\n name: string;\n}\n\nexport enum AppointmentTypeEnum {\n NotRequired = 0,\n Call = 1,\n PermissionGiven = 2,\n PermissionNotGiven = 3,\n}\n\nexport interface RestTicketModel {\n id: number;\n workflowPhaseType?: WorkflowPhaseType;\n workflowStepEnumType?: WorkflowStepEnumType;\n status?: TicketStatusType;\n ticketStatusType?: TicketStatusType;\n ticketPriorityType?: PriorityType;\n name?: string;\n detailedInformation?: string;\n partyName?: string; // Company name if Assignee.UserType == Contractor\n dueDate?: Date | string;\n dateCreated?: Date | string;\n dateUpdated?: Date | string;\n dateCompleted?: Date | string;\n startDate?: Date | string;\n endDate?: Date | string;\n createdById?: number;\n createdBy?: RestUserModel;\n assigneeId?: number; // aka ResponsiblePartyId\n assignee?: RestUserModel; // aka ResponsibleParty\n turnoverId?: number;\n turnoverData?: RestTurnoverDataModel;\n attachments?: RestTicketAttachmentList;\n allAttachments?: RestGenericTypedAttachment[];\n unitName?: string;\n unitId?: number;\n ticketType?: TicketType;\n propertyName?: string;\n propertyId?: number;\n surveyPageId?: number;\n syncStatus?: number;\n lastSyncIssues?: unknown;\n\n permissionToEnter?: boolean;\n appointmentType: AppointmentTypeEnum;\n havePets?: boolean;\n ticketCategoryId?: number;\n ticketCategory?: RestTicketCategoryModel;\n ticketTopicId?: number;\n ticketTopic?: RestTicketSubCategoryModel;\n\n clientFeedbackRating: number;\n clientFeedbackSubmittedOn: Date;\n clientFeedbackRequestdOn: Date;\n clientFeedbackComment: string; //8142 - max\n clientFeedbackRequestReminderSent: number;\n\n inspectionId?: number;\n inspectionContentId?: number;\n displayedInColumnName?: string;\n pmsWorkOrderId?: string;\n pmsWorkOrderNumber?: string;\n\n pushToPMS: boolean;\n\n accessNotes?: string;\n problemDescription?: string;\n technicalNotes?: string;\n resolutionComment?: string;\n\n totalCost?: number;\n timeSpentLoggedManually?: number;\n\n boardLayoutsId?: number;\n boardColumnUID?: string;\n totalCostStatus?: TotalCostStatus;\n paymentStatus?: PaymentStatus;\n turnStepScheduleId?: number;\n attachFileIds?: number[];\n removeFileIds?: number[];\n\n sparePartId?: number;\n quantity?: number;\n responsibleParty?: any;\n}\n\nexport class RestTicketCategoryModel {\n id: number;\n name: string;\n isResidentPortalEnabled: boolean;\n topics: RestTicketSubCategoryModel[];\n}\n\nexport class RestTicketSubCategoryModel {\n id: number;\n name: string;\n ticketCategoryId: number;\n}\n\nexport interface TicketListItem extends RestTicketModel {\n ableToResolve?: boolean;\n}\n\nexport interface RestTicketAttachmentList {\n ticketCustomCategory: RestTypedTicketAttachment;\n Uncategorized: RestTypedTicketAttachment[];\n}\n\nexport interface RestTypedTicketAttachment {\n id: number;\n dateCreated?: string;\n dateUpdated?: string;\n isActive?: true;\n fileUploadId?: number;\n internalName?: string;\n originalFileName?: string;\n size?: number;\n url?: string;\n attachmentTypeUrn?: string;\n title?: string;\n description?: string;\n ticketAttachmentType?: TicketAttachmentType;\n}\n\nexport interface UpdateTypedAttachmentToEntityModel {\n attachmentId?: number;\n unitId?: number;\n propertyId?: number;\n portfolioId?: number;\n turnoverIds?: number[];\n applianceId?: number;\n bidId?: number;\n ticketId?: number;\n attachmentType?: AttachmentType;\n fileUploadId?: number;\n title: string;\n description: string;\n externalUrl: string;\n}\n\nexport interface RestTurnoverTaskModel {\n id?: number;\n portfolioId?: number;\n turnoverDataId?: number;\n turnoverData?: RestTurnoverDataModelNew;\n dueDate?: string;\n workflowPhaseType?: WorkflowPhaseType;\n unitName?: string;\n propertyName?: string;\n squareFootage?: number;\n buildingNumber?: number;\n lastRentCost?: number;\n unitRent?: number;\n propertyId?: number;\n assigneeId?: number;\n assigneeName?: string;\n phasePriority?: PriorityType;\n stepPriority?: PriorityType;\n vacancyLoss: number;\n moveInCalendarPosition: number;\n moveOutCalendarPosition: number;\n pmsType?: number;\n isNonPms?: boolean; //ToDo: remove it, temporary field until non-PMS is not moved to unit\n isNew?: boolean; //FE field - flag for detecting just adding turns\n unitId?: number;\n unitType?: string;\n}\n\nexport type RestTurnoverDataModelNew = Omit<\n RestTurnoverDataModel,\n 'property' | 'listingPlatforms' | 'mailingList' | 'unit'\n>;\n\nexport function isRestTurnoverTaskModel(object: any): object is RestTurnoverTaskModel {\n return typeof object === 'object' && typeof object.id === 'number' && isRestTurnoverDataModel(object.turnoverData);\n}\n\nexport interface RestWorkflowTemplate {\n id: number;\n name: string;\n fullyQualifiedUrn: string;\n sortOrder: number;\n workflowStepEnumType: WorkflowStepEnumType;\n}\n\nexport interface RestArchivedTurnover {\n id: number;\n newFinish: number;\n oldFinish?: number;\n propertyName: string;\n propertyId: number;\n turnoverEndDate: string | Date;\n turnoverStartDate: string | Date;\n unitName: string;\n unitId: number;\n unitType: string;\n workflow: RestWorkflowInstanceModel[];\n}\n\nexport interface MarkAsPreLEasedFormValue {\n responsibleParty: number;\n moveInDate: Date;\n rentAmount: number;\n securityDeposit: number;\n amountPaid: number;\n paymentMethod: PreleaseAmountPaidType;\n paymentDate: Date;\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n}\n\nexport enum TotalCostStatus {\n Estimate = 0,\n Final = 1,\n}\n\nexport enum PaymentStatus {\n Unpaid = 0,\n Paid = 1,\n}\n","import { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { selectWorkflowStepsEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\n\nexport const selectWorkflowStep = (store: Store<{}>, step: WorkflowStepEnumType) =>\n store.select(selectWorkflowStepsEnumeration).pipe(\n filterNullish$(),\n map(steps => {\n return steps.find(s => s.enumerationValue === step);\n }),\n filter(step => !!step)\n );\n\nexport const selectWorkflowStepName = (store: Store<{}>, step: WorkflowStepEnumType) =>\n selectWorkflowStep(store, step).pipe(map(step => step.displayText));\n\nexport const selectWorkflowStepsDropdown = (store: Store<{}>): Observable[]> =>\n store.select(selectWorkflowStepsEnumeration).pipe(\n filterNullish$(),\n map(steps =>\n steps.map(step => ({\n label: step.displayText,\n value: step.enumerationValue,\n }))\n )\n );\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'boardCurrency',\n})\nexport class BoardCurrencyPipe implements PipeTransform {\n constructor(private currencyPipe: CurrencyPipe) {}\n\n transform(\n value: number | string | null | undefined,\n display: 'code' | 'symbol' | 'symbol-narrow' | string | boolean = ''\n ): string | null {\n if (!value) return null;\n const valueFormat = +value % 1 === 0 ? '1.0-0' : '1.2-2';\n return this.currencyPipe.transform(value, 'USD', display, valueFormat);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BoardType } from '@main-application/boards/interfaces/board.enums';\n\n@Pipe({\n name: 'boardType',\n})\nexport class BoardTypePipe implements PipeTransform {\n transform(value: number): string {\n if (value in BoardType) {\n switch (BoardType[value]) {\n case 'MakeReady':\n return 'Make Ready';\n case 'NonPms':\n return 'Non-PMS';\n case 'MoveOut':\n return 'Move-out';\n case 'MoveIn':\n return 'Move-in';\n case 'LeaseUp':\n return 'Available';\n case 'Prelease':\n return 'Pre-lease';\n default:\n return BoardType[value];\n }\n }\n return 'Unknown';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'booleanToString',\n})\nexport class BooleanToStringPipe implements PipeTransform {\n transform(value: boolean): string {\n return value ? 'Yes' : 'No';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { compact } from 'lodash';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@Pipe({\n name: 'compact',\n})\nexport class CompactPipe implements PipeTransform {\n transform(value: any[], availableItems: IRadioButtonOption[]): any[] {\n return compact(value).filter(x => availableItems.some(a => a.value === x));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { CompareOperator } from '@shared/enums/compare-operator.enum';\n\n@Pipe({\n name: 'compareOperator',\n})\nexport class CompareOperatorPipe implements PipeTransform {\n transform(value: CompareOperator): string {\n switch (value) {\n case CompareOperator.LESS: {\n return '<';\n }\n case CompareOperator.MORE: {\n return '>';\n }\n case CompareOperator.LESS_EQUAL: {\n return '≤';\n }\n case CompareOperator.MORE_EQUAL: {\n return '≥';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\n@Pipe({\n name: 'conditionalDatePipe',\n})\nexport class ConditionalDatePipe implements PipeTransform {\n transform(value: Date | string): string {\n const date = moment(value);\n const currentYear = moment().year();\n const format = date.year() === currentYear ? 'MM/DD' : 'MM/DD/YY';\n\n return date.format(format);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { EmptyValues } from '@shared/enums/common.enum';\n\nconst CUSTOM_CURRENCY_DOTS_COMMAS_PATTERN = /\\B(?=(\\d{3})+(?!\\d))/g;\n\n@Pipe({\n name: 'customCurrencyDotsCommas',\n})\nexport class CustomCurrencyDotsCommasPipe implements PipeTransform {\n transform(value: string | number | null): string {\n if (!value || value === EmptyValues.DASH) {\n return String(value);\n }\n\n const parts = String(value).split('.');\n const wholePart = parts[0];\n const fractionalPart = parts.length > 1 ? '.' + parts[1] : '';\n const withCommas = wholePart.replace(CUSTOM_CURRENCY_DOTS_COMMAS_PATTERN, ',');\n\n return '$' + withCommas + fractionalPart;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'customCurrencyShortWithSuffix',\n})\nexport class CustomCurrencyShortWithSuffixPipe implements PipeTransform {\n transform(value: number, precision = 0): string {\n return this.abbreviateNumber(value, precision);\n }\n\n private abbreviateNumber(num, fixed) {\n // if (num === null) {\n // return null;\n // } // terminate early\n // if (num === 0) {\n // return '0';\n // } // terminate early\n if (num === null || num === 0) {\n return '$0';\n }\n fixed = !fixed || fixed < 0 ? 0 : fixed; // number of decimal places to show\n const b = num.toPrecision(2).split('e'), // get power\n k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3), // floor at 1 decimals, ceiling at trillions\n c = k < 1 ? num.toFixed(fixed) : (num / Math.pow(10, k * 3)).toFixed(fixed), // divide by power\n d = c < 0 ? c : Math.abs(c), // enforce -0 is 0\n e = d + ['', 'k', 'm', 'b', 't'][k]; // append power\n return '$' + e;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { NoValue } from '@shared/constants/none-radio-option.const';\n\n@Pipe({\n name: 'customCurrency',\n})\nexport class CustomCurrencyPipe implements PipeTransform {\n transform(value?: number, currency = '$', fractionDigits = 0): string {\n return isNaN(value) || value === null || value === undefined\n ? NoValue\n : value >= 0\n ? `${currency}${value.toFixed(fractionDigits)}`\n : `-${currency}${Math.abs(value).toFixed(fractionDigits)}`;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'todayDate',\n})\nexport class TodayDatePipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n datePipe = new DatePipe('en-US');\n\n transform(value: string | Date, format = 'MM/dd/yy', showToday = true, hideCurrentYear = false): string {\n if (!value) {\n return '';\n }\n\n const dateValue = new Date(value);\n const today = this.timezoneService.getCurrentDate();\n\n if (hideCurrentYear) {\n if (isSameYear(dateValue, today)) return this.datePipe.transform(dateValue, 'MMMM d');\n return this.datePipe.transform(dateValue, 'MMM d, y');\n }\n\n return isToday(dateValue, this.timezoneService.getCurrentDate()) && showToday\n ? `Today`\n : this.datePipe.transform(dateValue, format);\n }\n}\n\nfunction isToday(someDate, today) {\n return (\n someDate.getDate() === today.getDate() &&\n someDate.getMonth() === today.getMonth() &&\n someDate.getFullYear() === today.getFullYear()\n );\n}\n\nfunction isSameYear(someDate: Date, today: Date): boolean {\n return someDate.getFullYear() === today.getFullYear();\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'daysAgo',\n})\nexport class DaysAgoPipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n transform(value: Date | string): string {\n const date = new Date(value);\n const diffInDays = Math.abs(moment(this.timezoneService.getCurrentDate()).diff(moment(date), 'days'));\n\n return diffInDays === 1 ? `${diffInDays} day` : `${diffInDays} days`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getTimeInStep } from '@shared/functions/get-time-in-step.function';\nimport { RestTimerInstanceModel } from '@shared/interfaces/rest-timer-instance-model';\nimport { TimeInStep } from '@shared/interfaces/time-in-step.interface';\n\n@Pipe({\n name: 'dayInStep',\n})\nexport class DaysInStepPipe implements PipeTransform {\n transform(\n workflowStepEnumType: WorkflowStepEnumType,\n timerInstance: RestTimerInstanceModel,\n forAllProcess = false\n ): TimeInStep {\n const time = getTimeInStep(workflowStepEnumType, timerInstance, forAllProcess);\n\n const allHours = Math.floor(time / (60 * 60)) || 0;\n const days = Math.floor(allHours / 24) || 0;\n const hours = allHours - days * 24 || 0;\n return { days, hours };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'daysPast',\n})\nexport class DaysPastPipe implements PipeTransform {\n transform(daysInStep: { days: number; hours: number }, discardHoursPart = true): string {\n const { days, hours } = daysInStep;\n return !days && !hours ? null : `${discardHoursPart || hours <= 12 ? daysInStep.days : daysInStep.days + 1}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { DelinquencyFields } from '@main-application/dashboard-reports/delinquencies/models/delinquency-fields.enum';\nimport { DelinquencyResultType } from '@shared/enums/delinquency-result-type';\n\n@Pipe({\n name: 'delinquencyGroupInvalid',\n pure: false,\n})\nexport class DelinquencyGroupInvalidPipe implements PipeTransform {\n transform(form: UntypedFormGroup, delinquencyResultType: DelinquencyResultType): boolean {\n const notes = form.get([DelinquencyFields.NOTES]);\n const group = form.get([delinquencyResultType]);\n return notes.invalid || !delinquencyResultType || group.invalid;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { DelinquencyFields } from '@main-application/dashboard-reports/delinquencies/models/delinquency-fields.enum';\nimport { DelinquencyResultType } from '@shared/enums/delinquency-result-type';\n\n@Pipe({\n name: 'delinquencyPristineGroup',\n pure: false,\n})\nexport class DelinquencyPristineGroupPipe implements PipeTransform {\n transform(form: UntypedFormGroup, delinquencyResultType: DelinquencyResultType): boolean {\n const delinquencyResult = form.get([DelinquencyFields.DELINQUENCY_RESULT_TYPE]);\n const notes = form.get([DelinquencyFields.NOTES]);\n const group = form.get([delinquencyResultType]);\n return delinquencyResult.pristine && notes.pristine && group.pristine;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\n@Pipe({\n name: 'elapsedDate',\n})\nexport class ElapsedDatePipe implements PipeTransform {\n transform(value: string): boolean {\n if (value) {\n return moment().startOf('day').isAfter(moment(value).startOf('day'));\n }\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { isNil } from 'lodash';\n\n@Pipe({\n name: 'elapsedDaysMidRange',\n pure: false,\n})\nexport class ElapsedDaysMidRangePipe implements PipeTransform {\n transform(group: FormGroup, reversed = false): string {\n if (group.invalid) {\n return '';\n }\n\n const { low, high } = group.value;\n\n if (isNil(low) || isNil(high) || low === '' || high === '') {\n return '';\n }\n\n const lowValue = parseInt(low, 10);\n const highValue = parseInt(high, 10);\n\n const range = Math.abs(highValue - lowValue);\n\n if (range === 1) {\n return reversed ? `${lowValue - 1}` : `${lowValue + 1}`;\n }\n\n return reversed ? `${highValue} - ${lowValue}` : `${lowValue + 1} - ${highValue}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'enumerationUser',\n})\nexport class EnumerationUserPipe implements PipeTransform {\n transform(\n userId: number,\n userList: IRadioButtonOption[]\n ): IRadioButtonOption | undefined {\n return userList?.find(enumItem => enumItem.value.id === userId);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@Pipe({\n name: 'enumerationValue',\n})\nexport class EnumerationValuePipe implements PipeTransform {\n transform(\n value: T | string,\n enumList: IRadioButtonOption[],\n showEmptyValue = false,\n defaultEmptyValue = ''\n ): T | string {\n return enumList?.find(enumItem => enumItem.value === value)?.label || (showEmptyValue ? defaultEmptyValue : value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'escapeHtml',\n})\nexport class EscapeHtmlPipe implements PipeTransform {\n transform(value: string, allowAngelBrackets = false): string {\n if (!value) {\n return '';\n }\n\n if (allowAngelBrackets) return value;\n\n return value.replace(//g, '>');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first } from 'lodash';\n\nimport { FieldType } from '@shared/enums/field-type';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@Pipe({\n name: 'fieldType',\n})\nexport class FieldTypePipe implements PipeTransform {\n transform(value: string, fieldsList: IRadioButtonOption[]): FieldType {\n if (!value || !fieldsList?.length) {\n return null;\n }\n const result = first(fieldsList.filter(item => item?.label.toLowerCase() === value?.toLowerCase()))?.value;\n return isNaN(result) ? null : result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport mime from 'mime';\n\nimport { FileMimeType } from '@shared/interfaces/file-mime-types';\n\n@Pipe({\n name: 'fileMimeType',\n})\nexport class FileMimeTypePipe implements PipeTransform {\n transform(fileName: string): FileMimeType {\n const type = mime.getType(fileName);\n if (type) {\n if (type.startsWith('image')) {\n return FileMimeType.Image;\n }\n if (type.startsWith('video')) {\n return FileMimeType.Video;\n }\n }\n return FileMimeType.Other;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'fileSize',\n})\nexport class FileSizePipe implements PipeTransform {\n transform(bytesNumber: number): string {\n if (bytesNumber < 1024) return `${bytesNumber} bytes`;\n\n const kBNumber = bytesNumber / 1024;\n if (kBNumber < 1024) return `${kBNumber.toFixed(0)} KB`;\n\n const mBNumber = kBNumber / 1024;\n if (mBNumber < 1024) return `${mBNumber.toFixed(0)} MB`;\n\n const gBNumber = mBNumber / 1024;\n if (gBNumber < 1024) return `${gBNumber.toFixed(0)} GB`;\n\n const tBNumber = gBNumber / 1024;\n if (tBNumber < 1024) return `${tBNumber.toFixed(0)} TB`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'fileToObjectUrl',\n})\nexport class FileToObjectUrlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value: File): SafeUrl {\n return this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(value));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { find } from 'lodash';\n\n@Pipe({\n name: 'findById',\n})\nexport class FindByIdPipe implements PipeTransform {\n transform(id: number, list: T[]): T {\n return find(list, { id }) as T;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { find } from 'lodash';\n\n@Pipe({\n name: 'findByProp',\n})\nexport class FindByPropPipe implements PipeTransform {\n transform(propValue: any, list: T[], propName: string): T {\n return find(list, i => i[propName] === propValue) as T;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first, trim } from 'lodash';\n\n@Pipe({\n name: 'formatToAvatar',\n})\nexport class FormatToAvatarPipe implements PipeTransform {\n transform(firstName = '', lastName = '', upperCase = false): string {\n let result = (first(trim(firstName || '')) || '') + (first(trim(lastName || '')) || '');\n\n if (upperCase && result) result = result.toUpperCase();\n return result || ' ';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { getCurrentWorkflowStep } from '@shared/functions/get-current-workflow-step.function';\nimport { RestTurnoverDataModelNew, RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\n\n@Pipe({\n name: 'getCurrentWorkflowStep',\n})\nexport class GetCurrentWorkflowStepPipe implements PipeTransform {\n transform(turnoverData: RestTurnoverDataModelNew): RestWorkflowInstanceModel {\n return getCurrentWorkflowStep(turnoverData.activeWorkflowStepType, turnoverData.workflow);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Pipe({\n name: 'getFromGroup',\n})\nexport class GetFromGroupPipe implements PipeTransform {\n transform(group: FormGroup, fieldName: string): FormGroup {\n if (!group || !fieldName) {\n return null;\n }\n\n return group.get(fieldName) as FormGroup;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'getPercentageValue',\n})\nexport class GetPercentageValuePipe implements PipeTransform {\n transform(value: number, sumValue: number): string {\n if (!value || !sumValue) {\n return '0 %';\n }\n return `${((value / sumValue) * 100).toFixed(2)} %`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getCurrentWorkflowStep } from '@shared/functions/get-current-workflow-step.function';\nimport { RestTurnoverDataModel, RestWorkflowInstanceModel } from '@shared/interfaces/turnover.interface';\n\n@Pipe({\n name: 'getWorkflowStep',\n})\nexport class GetWorkflowStepPipe implements PipeTransform {\n transform(turnoverData: RestTurnoverDataModel, step: WorkflowStepEnumType): RestWorkflowInstanceModel {\n return getCurrentWorkflowStep(step, turnoverData.workflow);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'hoursPast',\n})\nexport class HoursPastPipe implements PipeTransform {\n transform(value: number, daysInStep: { days: number; hours: number }): string {\n const { days, hours } = daysInStep;\n return !days && !hours ? '' : days < 1000 ? `${value}h` : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'humanize',\n})\nexport class HumanizePipe implements PipeTransform {\n /** Humanize PascalCase string into human readable string with spaces */\n transform(value: string) {\n return HumanizePipe.transform(value);\n }\n\n static transform(value: string) {\n if (typeof value !== 'string') {\n return value;\n }\n\n return (\n value[0].toUpperCase() +\n value\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .slice(1)\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isOdd',\n})\nexport class IsOddPipe implements PipeTransform {\n transform(value: number): boolean {\n return !!(value % 2);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'isUserExisting',\n})\nexport class IsUserExistingPipe implements PipeTransform {\n transform(row: RestUserModel): boolean {\n return row.id !== 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BreadcrumbTheme } from '@shared/enums/breadcrumb-theme.enum';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\n\n@Pipe({\n name: 'kanbanHeaderWorkflowPhase',\n})\nexport class KanbanHeaderWorkflowPhasePipe implements PipeTransform {\n transform(\n currentPhase: WorkflowPhaseType,\n defaultPhase: WorkflowPhaseType,\n defaultTheme: BreadcrumbTheme\n ): BreadcrumbTheme {\n if (currentPhase > defaultPhase) {\n return defaultTheme;\n }\n\n if (currentPhase === defaultPhase) {\n return BreadcrumbTheme.KANBAN_GREEN1;\n }\n\n return BreadcrumbTheme.KANBAN_GRAY2;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BreadcrumbTheme } from '@shared/enums/breadcrumb-theme.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\n\n@Pipe({\n name: 'kanbanHeaderWorkflowStep',\n})\nexport class KanbanHeaderWorkflowStepPipe implements PipeTransform {\n transform(\n step: WorkflowStepEnumType,\n currentStep: WorkflowStepEnumType,\n currentTheme: BreadcrumbTheme\n ): BreadcrumbTheme {\n if (!step) {\n return BreadcrumbTheme.KANBAN_GRAY2;\n }\n\n if (!currentStep) {\n return currentTheme;\n }\n\n if (step < currentStep) {\n return BreadcrumbTheme.KANBAN_GREEN8;\n }\n\n if (step === currentStep) {\n return BreadcrumbTheme.KANBAN_GREEN4;\n }\n\n return BreadcrumbTheme.KANBAN_GRAY2;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { ThresholdType } from '@shared/enums/threshold-type';\n\n@Pipe({\n name: 'kpiHeader',\n})\nexport class KpiHeaderPipe implements PipeTransform {\n transform(thresholdType: ThresholdType): string {\n switch (thresholdType) {\n case ThresholdType.GeneralOccupancy: {\n return 'Occupancy (%)';\n }\n case ThresholdType.PendingMoveouts: {\n return 'move outs';\n }\n case ThresholdType.PreleasedUnits: {\n return 'pre-leased';\n }\n case ThresholdType.AnticipatedOccupancy: {\n return 'anticipated (%)';\n }\n case ThresholdType.DelinquentUnit: {\n return 'delinquent';\n }\n case ThresholdType.PendingExpirations: {\n return 'expires';\n }\n case ThresholdType.MoveoutsConfirmations: {\n return 'confirms';\n }\n case ThresholdType.DelayedPayment: {\n return 'delayed payment';\n }\n case ThresholdType.Eviction: {\n return 'eviction';\n }\n case ThresholdType.PaymentPlan: {\n return 'payment plan';\n }\n case ThresholdType.PaidInFull: {\n return 'paid in full';\n }\n case ThresholdType.Asstance: {\n return 'receiving assistance';\n }\n case ThresholdType.MovedOut: {\n return 'moving out';\n }\n case ThresholdType.SmallBalance: {\n return 'small balance';\n }\n case ThresholdType.PendingCredit: {\n return 'pending credit';\n }\n case ThresholdType.Negotiation: {\n return 'negotiating (number of units)';\n }\n case ThresholdType.Holdover: {\n return 'on holdover';\n }\n case ThresholdType.MonthToMonth: {\n return 'month to month';\n }\n case ThresholdType.TenantNotice: {\n return 'tenant notice';\n }\n case ThresholdType.Renewal: {\n return 'renewing';\n }\n case ThresholdType.MgmtNotice: {\n return 'mgmt notice';\n }\n case ThresholdType.Transfer: {\n return 'unit transfer';\n }\n case ThresholdType.TurnoverRootNode: {\n return 'Turnover Root Node';\n }\n case ThresholdType.TurnoverSubNode: {\n return 'Turnover Sub Node';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from 'lodash';\n\n@Pipe({\n name: 'kpiTaskValue',\n})\nexport class KpiTaskValuePipe implements PipeTransform {\n transform(value: number): string {\n if (isNil(value)) {\n return 'Type or choose';\n }\n return `${value} ${value === 1 ? 'day' : 'days'}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNil } from 'lodash';\n\n@Pipe({\n name: 'kpiValue',\n})\nexport class KpiValuePipe implements PipeTransform {\n transform(value: number, operator: string, unit?: string): string {\n if (isNil(value)) {\n return null;\n }\n return `${operator} ${value}${unit || ''}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'labelAvailableDayInStep',\n})\nexport class LabelAvailableDayInStepPipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n transform(dayInStep: number): string {\n const dt = moment(this.timezoneService.getCurrentDate()).add(dayInStep, 'days').format('MM/DD');\n const days = Math.abs(dayInStep);\n return `Available on ${dt}`;\n // Lyman commented this out to try a simpler approach\n // if (dayInStep === 0) {\n // return 'Available today';\n // } else if (dayInStep > 0) {\n // if (dayInStep > 1) {\n // return `Available in ${days} days (${dt})`;\n // } else {\n // return `Available in ${days} day (${dt})`;\n // }\n // } else {\n // if (dayInStep < -1) {\n // return `Available ${days} days ago (${dt})`;\n // } else {\n // return `Available ${days} day ago (${dt})`;\n // }\n // }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'labelDayInStep',\n})\nexport class LabelDayInStepPipe implements PipeTransform {\n transform(label: string, dayInStep: number): string {\n if (!dayInStep) {\n return `${label} now`;\n }\n return `${label} ${Math.abs(dayInStep)}d${dayInStep < 0 ? ' ago' : ''}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'labelDaySinceStep',\n})\nexport class LabelDaySinceStepPipe implements PipeTransform {\n transform(label: string, daySinceStep: number): string {\n if (!daySinceStep) {\n return `${label} ??`;\n }\n return `${label} ${Math.abs(daySinceStep)}d${daySinceStep < 0 ? '' : ' ago'}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimeInStep } from '@shared/interfaces/time-in-step.interface';\n\n@Pipe({\n name: 'lostRevenue',\n})\nexport class LostRevenuePipe implements PipeTransform {\n transform(dayInStep: TimeInStep, rent: number): number {\n if (!rent) return 0;\n\n const pricePerDay = rent / 30;\n const pricePerHour = pricePerDay / 24;\n return parseFloat(((dayInStep.days || 0) * pricePerDay + (dayInStep.hours || 0) * pricePerHour).toFixed(0));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNumber } from 'lodash';\n\nimport { MeasureType } from '@shared/interfaces/measure-type';\n\n@Pipe({\n name: 'measureType',\n})\nexport class MeasureTypePipe implements PipeTransform {\n transform(measureType: MeasureType, amount: number, shortFormat = false): string {\n if (isNumber(amount) && measureType) {\n if (!shortFormat) {\n switch (measureType) {\n case 'day':\n case 'ticket':\n case 'inspection':\n case 'unit': {\n return amount > 0 && amount <= 1 ? measureType : `${measureType}s`;\n }\n default: {\n return measureType;\n }\n }\n } else {\n switch (measureType) {\n case 'day': {\n return 'd';\n }\n case 'unit': {\n return '';\n }\n default: {\n return measureType;\n }\n }\n }\n }\n return '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'mentionComment',\n})\nexport class MentionCommentPipe implements PipeTransform {\n transform(value: string, users: RestUserModel[], userId: number): string {\n if (!value) {\n return value;\n }\n return value.replace(/\\[~(\\S*)\\]/gim, (m, g) => {\n const user = users?.find(u => u.email === g);\n return user\n ? `@${\n user.displayName\n }`\n : m;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isArray } from 'lodash';\n\n@Pipe({\n name: 'notEmptyPropsAmount',\n})\nexport class NotEmptyPropsAmountPipe implements PipeTransform {\n transform(value: any, showZero = false, excludedProps?: string[]): number {\n if (!value || typeof value !== 'object') {\n return !showZero ? null : 0;\n }\n\n const props = Object.keys(value).filter(key => {\n const val = value[key];\n const isValid =\n val !== null && val !== undefined && (!isArray(val) || val.some(e => e)) && (typeof val !== 'boolean' || val);\n\n return isValid && (!excludedProps?.length || !excludedProps.includes(key));\n });\n\n const amount = props.length;\n\n return !showZero && !amount ? null : amount;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { parseNumber } from '@shared/functions/parse-number';\n\n@Pipe({\n name: 'numberValidation',\n})\nexport class NumberValidationPipe implements PipeTransform {\n transform(value: string | number, min = 0, max?: number): unknown {\n const parsed = parseNumber(`${value}`);\n if (isNaN(parsed)) {\n return '';\n }\n if (parsed < min || (max !== undefined && parsed > max)) {\n return 'invalid';\n }\n return '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { NoValue } from '@shared/constants/none-radio-option.const';\n\n@Pipe({\n name: 'customNumber',\n})\nexport class NumberPipe implements PipeTransform {\n transform(value: number, precision = 0, suffix = ''): string {\n if (isNaN(value) || value === null) {\n return NoValue;\n }\n return value.toFixed(precision) + suffix;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { replaceCommaToDotFunction } from '@shared/functions/replace-comma-to-dot.function';\n\n@Pipe({\n name: 'parseFloat',\n})\nexport class ParseFloatPipe implements PipeTransform {\n transform(value: any): number {\n if (!isNaN(value)) {\n return value;\n }\n\n if (!value) {\n return null;\n }\n return parseFloat(replaceCommaToDotFunction(value));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { MaskPipe } from 'ngx-mask';\n\nimport { parsePhoneNumber } from '@ui-components/validators/phone.validator';\n\n@Pipe({\n name: 'phoneNumber',\n})\nexport class PhoneNumberPipe implements PipeTransform {\n constructor(private mask: MaskPipe) {}\n\n transform(value: string): string {\n const { phoneNumber, phoneCode } = parsePhoneNumber(value);\n return `${phoneCode ? `+${phoneCode}` : ''} ${this.mask.transform(phoneNumber, '(000) 000-0000')}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { FormatAddressToStringFunction } from '@shared/functions/format-address-to-string.function';\nimport { RestAddressModel } from '@shared/interfaces/address.interface';\n\n@Pipe({\n name: 'physicalAddress',\n})\nexport class PhysicalAddressPipe implements PipeTransform {\n transform(address: RestAddressModel): string {\n return FormatAddressToStringFunction(address);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from 'lodash';\n\n@Pipe({\n name: 'isSaveGeneralRoleDisabled',\n})\nexport class IsSaveGeneralRoleDisabledPipe implements PipeTransform {\n transform(value: string): boolean {\n return isEmpty(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isSubmitRolesAndUnitsDisabled',\n})\nexport class IsSubmitRolesAndUnitsDisabledPipe implements PipeTransform {\n transform(isGeneralRoleChanged: boolean, arePropertiesChanged: boolean): boolean {\n return !isGeneralRoleChanged && !arePropertiesChanged;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'propertiesToRadioInput',\n})\nexport class PropertiesToRadioInputPipe implements PipeTransform {\n transform(properties: any[]): any[] {\n return properties?.map(property => {\n return {\n value: property,\n label: property.name,\n };\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { find } from 'lodash';\n\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\n@Pipe({\n name: 'turnoverPhaseToStatus',\n})\nexport class TurnoverPhaseToStatusPipe implements PipeTransform {\n transform(value: number, enumerations: EnumerationItem[]): string {\n const item = find(enumerations, { enumerationValue: value });\n return item.displayText;\n }\n}\n","import { reduce } from 'lodash';\n\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\nexport enum EnumerationProperties {\n enumerationValue = 'enumerationValue',\n fullyqualifiedUrn = 'fullyqualifiedUrn',\n simpleText = 'simpleText',\n displayText = 'displayText',\n fullDescription = 'fullDescription',\n}\n\ninterface EnumerationItemMap {\n [key: string]: number | string;\n}\n\nexport function enumerationListToKeyValueMap(\n enumerationList: EnumerationItem[],\n key: EnumerationProperties,\n value: EnumerationProperties\n): EnumerationItemMap {\n return reduce(\n enumerationList,\n (result, enumerationItem) => {\n result[enumerationItem[key]] = enumerationItem[value];\n return result;\n },\n {} as EnumerationItemMap\n );\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\nimport {\n EnumerationProperties,\n enumerationListToKeyValueMap,\n} from '@shared/functions/enumeration-list-to-key-value-map';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\nconst WorkflowPhaseToProgressMap = {\n [WorkflowPhaseType.NotReady]: 0,\n [WorkflowPhaseType.Ready]: 80,\n};\n\n@Pipe({\n name: 'workflowPhaseToProgressValue',\n})\nexport class WorkflowPhaseToProgressValuePipe implements PipeTransform {\n transform(workflowPhase: WorkflowPhaseType, workflowPhases: EnumerationItem[]): number {\n const workflowPhasesEnumMap = enumerationListToKeyValueMap(\n workflowPhases,\n EnumerationProperties.simpleText,\n EnumerationProperties.enumerationValue\n );\n const workflowPhaseValue = workflowPhasesEnumMap[workflowPhase];\n return WorkflowPhaseToProgressMap[workflowPhaseValue];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { BidStatusType } from '@shared/enums/bid-status-type';\n\n@Pipe({\n name: 'bidStatusType',\n})\nexport class BidStatusTypePipe implements PipeTransform {\n transform(statusType: BidStatusType): string {\n switch (statusType) {\n case BidStatusType.SentToContractors: {\n return 'New';\n }\n case BidStatusType.SentToTurnover: {\n return 'Sent';\n }\n case BidStatusType.Accepted: {\n return 'Accepted';\n }\n case BidStatusType.Rejected: {\n return 'Rejected';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { TimeInStep } from '@shared/interfaces/time-in-step.interface';\n\n@Pipe({\n name: 'dayFromHours',\n})\nexport class DayFromHoursPipe implements PipeTransform {\n transform(allHours: number): TimeInStep {\n const days = Math.floor(allHours / 24) || 0;\n const hours = allHours - days * 24 || 0;\n return { days, hours };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first } from 'lodash';\n\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\n@Pipe({\n name: 'enumValueToDisplayText',\n})\nexport class EnumValueToDisplayTextPipe implements PipeTransform {\n transform(value: number, enumList: EnumerationItem[]): string | number {\n if (!enumList?.length) {\n return value;\n }\n\n return first(enumList.filter(enumItem => enumItem.enumerationValue === value))?.displayText || value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { first } from 'lodash';\n\n@Pipe({\n name: 'first',\n})\nexport class FirstPipe implements PipeTransform {\n transform(value: T[]): T {\n return first(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'isInclude',\n})\nexport class IsIncludePipe implements PipeTransform {\n transform(value: string, values): boolean {\n if (Array.isArray(values)) {\n return values.includes(value);\n }\n return value === values;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'replaceValue',\n})\nexport class ReplaceValuePipe implements PipeTransform {\n transform(value: string, pattern = '', replace = ''): string {\n if (!value) {\n return '';\n }\n return value.replace(pattern, replace);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'roundValue',\n})\nexport class RoundValuePipe implements PipeTransform {\n transform(value: number): number {\n if (!value) {\n return 0;\n }\n return Math.round(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'startsWith',\n})\nexport class StartsWithPipe implements PipeTransform {\n transform(value: string, pattern: string): boolean {\n if (!value) {\n return false;\n }\n return value.trim().toLowerCase().startsWith(pattern.trim().toLowerCase());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from 'lodash';\n\nimport { TableFilterItem } from '@dashboards/components/dashboard-table-filter/config/interfaces/table-filter-item.interface';\nimport { paramsCompare } from '@shared/functions/params-compare.function';\nimport { ParamsCompareItem } from '@shared/interfaces/params-compare-item';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\n\n@Pipe({\n name: 'taskTableSubsectionResultCount',\n})\nexport class TaskTableSubsectionResultCountPipe implements PipeTransform {\n transform(tickets: RestTicketModel[], filterItem: TableFilterItem): number {\n if (!tickets?.length || !filterItem) {\n return 0;\n }\n\n return (\n tickets.filter(data => {\n if (isEmpty(filterItem) || !filterItem?.assigneeId) {\n return true;\n }\n\n const compareParams: ParamsCompareItem[] = [];\n\n if (filterItem?.assigneeId) {\n compareParams.push({\n currentValue: data.assigneeId,\n expectValue: filterItem.assigneeId,\n });\n }\n\n return paramsCompare(compareParams);\n })?.length || 0\n );\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MaskPipe, NgxMaskModule } from 'ngx-mask';\n\nimport { BoardCurrencyPipe } from '@shared/pipes/board-currency.pipe';\nimport { ConditionalDatePipe } from '@shared/pipes/conditional-date.pipe';\nimport { CustomCurrencyDotsCommasPipe } from '@shared/pipes/custom-currency-dots-commas.pipe';\nimport { EnumerationUserPipe } from '@shared/pipes/enumeration-user.pipe';\nimport { FileMimeTypePipe } from '@shared/pipes/file-mime-type.pipe';\nimport { FindByPropPipe } from '@shared/pipes/find-by-prop.pipe';\nimport { FormatToAvatarPipe } from '@shared/pipes/format-to-avatar.pipe';\nimport { IsSaveGeneralRoleDisabledPipe } from '@shared/pipes/is-save-general-role-disabled.pipe';\nimport { IsSubmitRolesAndUnitsDisabledPipe } from '@shared/pipes/is-submit-roles-and-units-disabled.pipe';\nimport { IsUserExistingPipe } from '@shared/pipes/is-user-existing.pipe';\nimport { LabelAvailableDayInStepPipe } from '@shared/pipes/label-available-day-in-step.pipe';\nimport { LabelDaySinceStepPipe } from '@shared/pipes/label-day-since-step.pipe';\nimport { PhoneNumberPipe } from '@shared/pipes/phone-number.pipe';\nimport { PluralizationPipe } from '@shared/pipes/pluralization.pipe';\nimport { PriorityIconPipe } from '@shared/pipes/priority-icon.pipe';\nimport { PriorityToCssClassPipe } from '@shared/pipes/priority-to-css-class.pipe';\nimport { PropertiesToRadioInputPipe } from '@shared/pipes/properties-to-radio-input.pipe';\nimport { TurnoverPhaseToStatusPipe } from '@shared/pipes/turnover-phase-to-status.pipe';\nimport { UserDisplayNamePipe } from '@shared/pipes/user-display-name.pipe';\nimport { ValueLengthPipe } from '@shared/pipes/value-length.pipe';\nimport { WorkflowPhaseToProgressValuePipe } from '@shared/pipes/workflow-phase-to-progress-value.pipe';\nimport { WorkflowStepNamePipe } from '@shared/pipes/workflow-step-name.pipe';\n\nimport { BidStatusTypePipe } from './bid-status-type.pipe';\nimport { BoardTypePipe } from './board-type.pipe';\nimport { BooleanToStringPipe } from './boolean-to-string.pipe';\nimport { CompactPipe } from './compact.pipe';\nimport { CompareOperatorPipe } from './compare-operator.pipe';\nimport { CustomCurrencyShortWithSuffixPipe } from './custom-currency-short-with-suffix.pipe';\nimport { CustomCurrencyPipe } from './custom-currency.pipe';\nimport { TodayDatePipe } from './date.pipe';\nimport { DayFromHoursPipe } from './day-from-date.pipe';\nimport { DaysAgoPipe } from './days-ago.pipe';\nimport { DaysInStepPipe } from './days-in-step.pipe';\nimport { DaysPastPipe } from './days-past.pipe';\nimport { DelinquencyGroupInvalidPipe } from './delinquency-group-invalid.pipe';\nimport { DelinquencyPristineGroupPipe } from './delinquency-pristine-group.pipe';\nimport { ElapsedDatePipe } from './elapsed-date.pipe';\nimport { ElapsedDaysMidRangePipe } from './elapsed-days-mid-range.pipe';\nimport { EnumValueToDisplayTextPipe } from './enum-value-to-display-text.pipe';\nimport { EnumerationValuePipe } from './enumeration-value.pipe';\nimport { EscapeHtmlPipe } from './escape-html.pipe';\nimport { FieldTypePipe } from './field-type.pipe';\nimport { FileSizePipe } from './file-size.pipe';\nimport { FileToObjectUrlPipe } from './file-to-object-url.pipe';\nimport { FindByIdPipe } from './find-by-id.pipe';\nimport { FirstPipe } from './first.pipe';\nimport { GetCurrentWorkflowStepPipe } from './get-current-workflow-step.pipe';\nimport { GetFromGroupPipe } from './get-from-group.pipe';\nimport { GetPercentageValuePipe } from './get-percentage-value.pipe';\nimport { GetWorkflowStepPipe } from './get-workflow-step.pipe';\nimport { HoursPastPipe } from './hours-past.pipe';\nimport { HumanizePipe } from './humanize.pipe';\nimport { IsIncludePipe } from './is-include.pipe';\nimport { IsOddPipe } from './is-odd.pipe';\nimport { KanbanHeaderWorkflowPhasePipe } from './kanban-header-workflow-phase.pipe';\nimport { KanbanHeaderWorkflowStepPipe } from './kanban-header-workflow-step.pipe';\nimport { KpiHeaderPipe } from './kpi-header.pipe';\nimport { KpiTaskValuePipe } from './kpi-task-value.pipe';\nimport { KpiValuePipe } from './kpi-value.pipe';\nimport { LabelDayInStepPipe } from './label-day-in-step.pipe';\nimport { LostRevenuePipe } from './lost-revenue.pipe';\nimport { MeasureTypePipe } from './measure-type.pipe';\nimport { MentionCommentPipe } from './mention-comment.pipe';\nimport { NotEmptyPropsAmountPipe } from './not-empty-props-amount.pipe';\nimport { NumberValidationPipe } from './number-validation.pipe';\nimport { NumberPipe } from './number.pipe';\nimport { ParseFloatPipe } from './parse-float.pipe';\nimport { PhysicalAddressPipe } from './physical-address.pipe';\nimport { PmsTypeEnumerationPipe } from './pms-type-enumeration.pipe';\nimport { PriorityCssPipe } from './priority-css.pipe';\nimport { RecurrencePipe } from './reccurance.pipe';\nimport { ReplaceValuePipe } from './replace-value.pipe';\nimport { RoundValuePipe } from './round-value.pipe';\nimport { SectionIdPipe } from './section-id.pipe';\nimport { StartsWithPipe } from './starts-with.pipe';\nimport { TaskTableSubsectionResultCountPipe } from './task-table-subsection-result-count.pipe';\nimport { TextMaskPipe } from './text-mask.pipe';\nimport { ThresholdConfigurationPipe } from './threshold-configuration.pipe';\nimport { ThresholdPriorityCssPipe } from './threshold-priority-css.pipe';\nimport { ThresholdStepConfigurationPipe } from './threshold-step-configuration.pipe';\nimport { TimeDiffPipe } from './time-diff.pipe';\nimport { TimeFromDatePipe } from './time-from-date.pipe';\nimport { ToFixedValuePipe } from './to-fixed-value.pipe';\nimport { TruncateLengthPipe } from './truncate-lengths.pipe';\nimport { TruncateTextPipe } from './truncate-text.pipe';\nimport { TrustHtmlPipe } from './trust-html.pipe';\nimport { TurnoverAttachmentPipe } from './turnover-attachment.pipe';\nimport { UppercaseFirstLetterOfWordsPipe } from './uppercase-first-letter-of-words-pipe';\nimport { UtcDatePipe } from './utc-date.pipe';\nimport { ValueIfNonZeroPipe } from './valueIfNonZero.pipe';\nimport { ValueIfPositivePipe } from './valueIfPositive.pipe';\nimport { WorkflowPhaseDonePipe } from './workflow-phase-done.pipe';\nimport { WorkflowPhaseTypePipe } from './workflow-phase-type.pipe';\nimport { WorkflowStepDonePipe } from './workflow-step-done.pipe';\nimport { YesEmptyPipe } from './yesEmpty.pipe';\n\nconst PIPES = [\n TrustHtmlPipe,\n PluralizationPipe,\n ValueIfNonZeroPipe,\n ValueIfPositivePipe,\n YesEmptyPipe,\n TodayDatePipe,\n FormatToAvatarPipe,\n KpiHeaderPipe,\n KpiValuePipe,\n KpiTaskValuePipe,\n WorkflowPhaseTypePipe,\n KanbanHeaderWorkflowPhasePipe,\n WorkflowPhaseDonePipe,\n TextMaskPipe,\n TimeFromDatePipe,\n EnumerationValuePipe,\n IsIncludePipe,\n BidStatusTypePipe,\n TurnoverAttachmentPipe,\n DaysAgoPipe,\n CompareOperatorPipe,\n ToFixedValuePipe,\n EnumValueToDisplayTextPipe,\n ParseFloatPipe,\n GetPercentageValuePipe,\n EscapeHtmlPipe,\n FieldTypePipe,\n BooleanToStringPipe,\n UtcDatePipe,\n PhysicalAddressPipe,\n IsUserExistingPipe,\n IsSubmitRolesAndUnitsDisabledPipe,\n IsSaveGeneralRoleDisabledPipe,\n IsOddPipe,\n FileToObjectUrlPipe,\n DelinquencyGroupInvalidPipe,\n DelinquencyPristineGroupPipe,\n SectionIdPipe,\n KanbanHeaderWorkflowStepPipe,\n PriorityIconPipe,\n PriorityToCssClassPipe,\n PropertiesToRadioInputPipe,\n TurnoverPhaseToStatusPipe,\n WorkflowPhaseToProgressValuePipe,\n TaskTableSubsectionResultCountPipe,\n RoundValuePipe,\n ReplaceValuePipe,\n PriorityCssPipe,\n DaysInStepPipe,\n FileSizePipe,\n WorkflowStepDonePipe,\n LostRevenuePipe,\n ThresholdPriorityCssPipe,\n DayFromHoursPipe,\n FindByIdPipe,\n GetWorkflowStepPipe,\n StartsWithPipe,\n TimeDiffPipe,\n FirstPipe,\n GetFromGroupPipe,\n ElapsedDaysMidRangePipe,\n LabelDayInStepPipe,\n LabelDaySinceStepPipe,\n CustomCurrencyPipe,\n CustomCurrencyDotsCommasPipe,\n CustomCurrencyShortWithSuffixPipe,\n DaysPastPipe,\n HoursPastPipe,\n GetCurrentWorkflowStepPipe,\n MeasureTypePipe,\n NumberPipe,\n NumberValidationPipe,\n MentionCommentPipe,\n ThresholdConfigurationPipe,\n ThresholdStepConfigurationPipe,\n TruncateTextPipe,\n HumanizePipe,\n CompactPipe,\n PhoneNumberPipe,\n LabelAvailableDayInStepPipe,\n NotEmptyPropsAmountPipe,\n UppercaseFirstLetterOfWordsPipe,\n ElapsedDatePipe,\n EnumerationUserPipe,\n ValueLengthPipe,\n BoardCurrencyPipe,\n FileMimeTypePipe,\n UserDisplayNamePipe,\n FindByPropPipe,\n WorkflowStepNamePipe,\n TruncateLengthPipe,\n PmsTypeEnumerationPipe,\n ConditionalDatePipe,\n BoardTypePipe,\n RecurrencePipe,\n];\n\n@NgModule({\n exports: [...PIPES],\n imports: [NgxMaskModule],\n declarations: [...PIPES],\n providers: [...PIPES, CurrencyPipe, MaskPipe],\n})\nexport class PipesModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'pluralization' })\nexport class PluralizationPipe implements PipeTransform {\n transform(value: string, count: number): string {\n if (!value) return null;\n\n if (count == null) {\n return value;\n }\n\n if (count === 0 || count > 1) {\n return `${value}s`;\n }\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { selectPmsTypesEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { EnumerationConfig } from '@shared/interfaces/enumeration-config';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\n\n@Pipe({\n name: 'pmsTypeEnumeration',\n})\nexport class PmsTypeEnumerationPipe implements PipeTransform {\n constructor(private store: Store<{ enumeration: EnumerationConfig }>) {}\n\n transform(value: number): Observable {\n return this.store.select(selectPmsTypesEnumeration).pipe(\n map((pmsTypes: EnumerationItem[]) => {\n const pmsType = (pmsTypes || []).find(type => type.enumerationValue === value);\n return pmsType ? pmsType.simpleText : 'non-PMS';\n })\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PriorityType } from '@shared/enums/priority-type';\n\n@Pipe({\n name: 'priorityCss',\n})\nexport class PriorityCssPipe implements PipeTransform {\n transform(ticketPriorityType: PriorityType, fontColor = false): string {\n let result = '';\n switch (ticketPriorityType) {\n case PriorityType.High: {\n result = 'priority-high';\n break;\n }\n case PriorityType.Medium: {\n result = 'priority-medium';\n break;\n }\n case PriorityType.Low: {\n result = 'priority-low';\n break;\n }\n default: {\n result = 'priority-low';\n break;\n }\n }\n\n return fontColor ? result + '-color' : result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { PriorityType } from '@shared/enums/priority-type';\n\n@Pipe({\n name: 'priorityIcon',\n})\nexport class PriorityIconPipe implements PipeTransform {\n transform(ticketPriorityType: PriorityType): EColorPalette {\n switch (ticketPriorityType) {\n case PriorityType.High: {\n return EColorPalette.cRed2;\n }\n\n case PriorityType.Medium: {\n return EColorPalette.cOrange;\n }\n\n case PriorityType.Low: {\n return EColorPalette.cGray2;\n }\n\n default: {\n return EColorPalette.cGray2;\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PriorityType } from '@shared/enums/priority-type';\n\nconst TaskCssClasses = {\n ERROR: 'error',\n WARNING: 'warning',\n ACCENT: 'accent',\n};\n\n@Pipe({\n name: 'priorityToCssClass',\n})\nexport class PriorityToCssClassPipe implements PipeTransform {\n transform(value: PriorityType): string {\n switch (value) {\n case PriorityType.High:\n return TaskCssClasses.ERROR;\n case PriorityType.Medium:\n return TaskCssClasses.WARNING;\n default:\n return TaskCssClasses.ACCENT;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { floor } from 'lodash';\nimport * as moment from 'moment';\n\nimport { InspectionRecurrencePeriod } from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { NoValue } from '@shared/constants/empty-value.const';\n\n@Pipe({ name: 'recurrencePeriod' })\nexport class RecurrencePipe implements PipeTransform {\n transform(value: number, dueDate: Date): string {\n if (value == null || !dueDate) return NoValue;\n\n const recurrenceOptions = this.getRecurrenceOptions(dueDate);\n return (\n recurrenceOptions.find(option => option.value === value)?.label ??\n InspectionRecurrencePeriod[value]?.toLowerCase() ??\n NoValue\n );\n }\n\n private getRecurrenceOptions(dueDate: Date): { value: number; label: string }[] {\n const dayOfWeek = moment(dueDate).format('dddd');\n const weekNumber = floor(dueDate.getDate() / 7) + 1;\n let weekNumberText = 'N/A';\n\n switch (weekNumber) {\n case 1:\n weekNumberText = 'first';\n break;\n case 2:\n weekNumberText = 'second';\n break;\n case 3:\n weekNumberText = 'third';\n break;\n case 4:\n weekNumberText = 'fourth';\n break;\n }\n\n const today = moment(dueDate).format('MMMM D');\n const semi1 = moment(dueDate).format('MMM D');\n const semi2 = moment(dueDate).add(7, 'month').format('MMM D');\n\n return [\n { value: InspectionRecurrencePeriod.DoNotRepeat, label: NoValue },\n { value: InspectionRecurrencePeriod.Daily, label: 'Weekdays' },\n { value: InspectionRecurrencePeriod.Weekly, label: `Weekly on ${dayOfWeek}` },\n { value: InspectionRecurrencePeriod.SemiMonthly, label: `Semi-monthly every other ${dayOfWeek}` },\n { value: InspectionRecurrencePeriod.Monthly, label: `Monthly on the first ${dayOfWeek}` },\n ...(weekNumber > 1\n ? [\n {\n value: InspectionRecurrencePeriod.SameWeekMonthly,\n label: `Monthly on the ${weekNumberText} ${dayOfWeek}`,\n },\n ]\n : []),\n { value: InspectionRecurrencePeriod.SemiAnnually, label: `Semi-annually on ${semi1} and ${semi2}` },\n { value: InspectionRecurrencePeriod.Quarterly, label: `Quarterly on the first ${dayOfWeek}` },\n ...(weekNumber > 1\n ? [\n {\n value: InspectionRecurrencePeriod.SameWeekQuarterly,\n label: `Quarterly on the ${weekNumberText} ${dayOfWeek}`,\n },\n ]\n : []),\n { value: InspectionRecurrencePeriod.Annually, label: `Annually on ${today}` },\n ];\n }\n}\n","export const NoValue = '—';\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sectionId',\n})\nexport class SectionIdPipe implements PipeTransform {\n transform(value: number, idPrefix = 'section_id_'): string {\n return `${idPrefix}${value}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'textMask',\n})\nexport class TextMaskPipe implements PipeTransform {\n transform(value: string, limit = 3, sign = '...'): string {\n if (!value) {\n return '';\n }\n\n if (value?.length <= limit) {\n return value;\n }\n\n return `${value.slice(0, limit)}${sign}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNumber } from 'lodash';\n\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\n\n@Pipe({\n name: 'thresholdConfiguration',\n})\nexport class ThresholdConfigurationPipe implements PipeTransform {\n transform(value: number, configuration: RestThresholdsConfiguration): string {\n if (!isNumber(value) || !configuration) {\n return '';\n }\n\n const low =\n configuration.readyPhaseThreshold.lowThresholdValue + configuration.notReadyPhaseThreshold.lowThresholdValue;\n const high =\n configuration.readyPhaseThreshold.highThresholdValue + configuration.notReadyPhaseThreshold.highThresholdValue;\n\n if (value > high) {\n return 'threshold-high';\n }\n\n if (value < low) {\n return 'threshold-low';\n }\n\n return 'threshold-medium';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PriorityType } from '@shared/enums/priority-type';\n\n@Pipe({\n name: 'thresholdPriorityCss',\n})\nexport class ThresholdPriorityCssPipe implements PipeTransform {\n transform(ticketPriorityType: PriorityType): string {\n switch (ticketPriorityType) {\n case PriorityType.High: {\n return 'threshold-high';\n }\n\n case PriorityType.Medium: {\n return 'threshold-medium';\n }\n\n case PriorityType.Low: {\n return 'threshold-low';\n }\n\n default: {\n return 'threshold-low';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isNumber } from 'lodash';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestThresholdsConfiguration } from '@shared/interfaces/thresholds-configuration.interface';\n\n@Pipe({\n name: 'thresholdStepConfiguration',\n})\nexport class ThresholdStepConfigurationPipe implements PipeTransform {\n transform(value: number, stepType: WorkflowStepEnumType, configuration: RestThresholdsConfiguration): string {\n if (!isNumber(value) || !configuration || !stepType) {\n return '';\n }\n\n const step = configuration.stepThresholds.find(s => s.workflowStepEnumType === stepType);\n\n if (!step) {\n return '';\n }\n\n if (value > step.highThresholdValue) {\n return 'threshold-high';\n }\n\n if (value < step.lowThresholdValue) {\n return 'threshold-low';\n }\n\n return 'threshold-medium';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment/moment';\n\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { suffixFunction } from '@shared/functions/suffix.function';\n\n@Pipe({\n name: 'timeDiff',\n})\nexport class TimeDiffPipe implements PipeTransform {\n constructor(private timezoneService: TimezoneService) {}\n\n transform(value: Date | string): string {\n const diffLabelPrefix = 'due in';\n const diffLabelSuffix = 'ago';\n\n const date = new Date(value);\n const today = this.timezoneService.getCurrentDate();\n\n const diffInYears = moment(today).diff(moment(date), 'years');\n const diffInMonths = moment(today).diff(moment(date), 'months');\n const diffInWeeks = moment(today).diff(moment(date), 'weeks');\n const diffInDays = moment(today).diff(moment(date), 'days');\n const diffInHours = moment(today).diff(moment(date), 'hours');\n\n if (diffInYears) {\n if (diffInYears > 0) {\n return `${this.getLabel(diffInYears, 'year')} ${diffLabelSuffix}`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInYears, 'year')}`;\n }\n\n if (diffInMonths) {\n if (diffInMonths > 0) {\n return `${this.getLabel(diffInMonths, 'month')} ${diffLabelSuffix}`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInMonths, 'month')}`;\n }\n\n if (diffInWeeks) {\n if (diffInWeeks > 0) {\n return `${this.getLabel(diffInWeeks, 'week')} ${diffLabelSuffix}`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInWeeks, 'week')}`;\n }\n\n if (diffInDays) {\n if (diffInDays > 0) {\n if (diffInDays === 1) {\n return 'yesterday';\n }\n return `${this.getLabel(diffInDays, 'day')} ${diffLabelSuffix}`;\n }\n if (diffInDays === -1) {\n return `due tomorrow`;\n }\n return `${diffLabelPrefix} ${this.getLabel(diffInDays, 'day')}`;\n }\n\n if (diffInHours) {\n if (diffInHours > 0) {\n if (moment(today).isAfter(date)) {\n return 'yesterday';\n }\n return `today`;\n }\n return `due today`;\n }\n\n return `just now`;\n }\n\n getLabel(value: number, unit: string): string {\n value = Math.abs(value);\n\n return `${value} ${unit}${suffixFunction(value)}`;\n }\n}\n","export function suffixFunction(value: number): string {\n return value === 1 ? '' : 's';\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as moment from 'moment';\n\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\n\n@Pipe({\n name: 'timeFromDate',\n pure: false,\n})\nexport class TimeFromDatePipe implements PipeTransform {\n constructor(public timezoneService: TimezoneService) {}\n\n transform(date: Date | string, showFullDate = false): string {\n if (!date) {\n return '';\n }\n\n const currrentDate = this.timezoneService.getCurrentDate();\n\n const dt = moment(date);\n const diff = moment(currrentDate).diff(dt, 'days');\n\n if (showFullDate || diff > 30) {\n return moment(date).format('M/D');\n } else {\n return moment(date).from(moment(currrentDate)); // TODO - to check in the future\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isInteger } from 'lodash';\n\n@Pipe({\n name: 'toFixedValue',\n})\nexport class ToFixedValuePipe implements PipeTransform {\n transform(value: number, fractionDigits = 2): string {\n if (isNaN(value)) {\n return null;\n }\n return isInteger(value) ? `${value}` : value?.toFixed(fractionDigits);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncateLength',\n})\nexport class TruncateLengthPipe implements PipeTransform {\n transform(value: string, length = 32, completeWords = false, ellipsis = '...'): string {\n if (!value) return '';\n if (value.length <= length) return value;\n let truncatedValue = value.substring(0, length);\n if (completeWords) {\n const lastSpaceIndex = truncatedValue.lastIndexOf(' ');\n if (lastSpaceIndex > 0) {\n truncatedValue = truncatedValue.substring(0, lastSpaceIndex);\n }\n }\n return truncatedValue + ellipsis;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncateText',\n})\nexport class TruncateTextPipe implements PipeTransform {\n transform(value: string, patterns: string[]): string {\n let result = value || '';\n patterns.forEach(pattern => {\n const regex = new RegExp(`${pattern}`, 'gmi');\n result = result.replace(regex, '');\n });\n return result.trim();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n name: 'trustHtml',\n})\nexport class TrustHtmlPipe implements PipeTransform {\n constructor(private domSanitized: DomSanitizer) {}\n\n transform(value: string): SafeHtml {\n return this.domSanitized.bypassSecurityTrustHtml(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { AttachmentType } from '@shared/types/attachment-type.type';\n\n@Pipe({\n name: 'turnoverAttachment',\n})\nexport class TurnoverAttachmentPipe implements PipeTransform {\n transform(\n attachmentList: RestGenericTypedAttachment[],\n attachmentType: AttachmentType\n ): RestGenericTypedAttachment[] {\n if (!attachmentList) {\n return [];\n }\n return attachmentList.filter(value => value.targetAttachmentType === attachmentType);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'uppercaseFirstLetterOfWords',\n})\nexport class UppercaseFirstLetterOfWordsPipe implements PipeTransform {\n transform(text: string): string {\n return !!text\n ? text\n .toLowerCase()\n .split(' ')\n .map(word => word[0].toUpperCase() + word.substring(1))\n .join(' ')\n : '';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { getUserDisplayName } from '@shared/functions/get-user-list.function';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n@Pipe({\n name: 'userDisplayName',\n})\nexport class UserDisplayNamePipe implements PipeTransform {\n transform(user: RestUserModel, defaultValue = '', dateCreated = ''): string {\n if (!user) {\n return defaultValue;\n }\n return dateCreated ? getUserDisplayName(user) + ' ' + dateCreated : getUserDisplayName(user);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { getUtc } from '@shared/functions/get-utc.function';\n\n@Pipe({\n name: 'utcDate',\n})\nexport class UtcDatePipe implements PipeTransform {\n transform(date: any): Date {\n if (!date) {\n return null;\n }\n return getUtc(date);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valueLength',\n})\nexport class ValueLengthPipe implements PipeTransform {\n transform(value: string | number): number {\n return (value || '').toString().length;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valueIfNonZero',\n})\nexport class ValueIfNonZeroPipe implements PipeTransform {\n transform(value: number): number {\n if (!value) return null;\n\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'valueIfPositive' })\nexport class ValueIfPositivePipe implements PipeTransform {\n transform(value: number): number {\n if (!value) return null;\n\n if (0 > value) return null;\n\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\n\n@Pipe({\n name: 'workflowPhaseDone',\n})\nexport class WorkflowPhaseDonePipe implements PipeTransform {\n transform(currentPhase: WorkflowPhaseType, defaultPhase: WorkflowPhaseType): EIcon {\n if (!currentPhase) {\n return null;\n }\n if (defaultPhase < currentPhase) {\n return EIcon.DONE_WB;\n }\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowPhaseType } from '@shared/enums/workflow-phase-type';\n\n@Pipe({\n name: 'workflowPhaseType',\n})\nexport class WorkflowPhaseTypePipe implements PipeTransform {\n transform(workflowPhaseType: WorkflowPhaseType): string {\n switch (workflowPhaseType) {\n case WorkflowPhaseType.NotReady: {\n return 'NOT READY';\n }\n case WorkflowPhaseType.Ready: {\n return 'READY';\n }\n default: {\n return '';\n }\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\n\n@Pipe({\n name: 'workflowStepDone',\n})\nexport class WorkflowStepDonePipe implements PipeTransform {\n transform(step: WorkflowStepEnumType, currentStep: WorkflowStepEnumType): boolean {\n if (!step) {\n return false;\n }\n if (!currentStep) {\n return true;\n }\n return step <= currentStep;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { selectWorkflowStep } from '@shared/observables/select-workflow-step';\n\n@Pipe({\n name: 'workflowStepName',\n})\nexport class WorkflowStepNamePipe implements PipeTransform {\n constructor(private store: Store<{}>) {}\n\n transform(step: WorkflowStepEnumType): Observable {\n return selectWorkflowStep(this.store, step).pipe(map(step => step.displayText));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'yesEmpty' })\nexport class YesEmptyPipe implements PipeTransform {\n transform(value: boolean): string {\n return value ? 'Y' : '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { Observable } from 'rxjs';\n\nimport { OidcStorageService } from '@app/services/oidc-storage.service';\n\nexport const AUTH_CONFIG_ID = 'authConfigId';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n constructor(private oidcSecurityService: OidcSecurityService, private oidcStorageService: OidcStorageService) {}\n\n public isAuthenticated(): Observable {\n return this.oidcSecurityService.isAuthenticated(this.getConfigId());\n }\n\n public getConfigId() {\n return localStorage.getItem(AUTH_CONFIG_ID);\n }\n\n public setConfigId(configId: string) {\n localStorage.setItem(AUTH_CONFIG_ID, configId);\n }\n\n public getAccessToken(): Observable {\n return this.oidcSecurityService.getAccessToken(this.getConfigId());\n }\n\n public clearStorage() {\n this.oidcStorageService.clear();\n }\n\n public logout() {\n const currentConfigId = this.getConfigId();\n localStorage.removeItem(AUTH_CONFIG_ID);\n this.oidcSecurityService.logoff(currentConfigId);\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/**\n * You should inject it directly in place where you use it\n * Remember to add it to LOCAL providers\n *\n * !! Use it when you need to unsubscribe manually\n * !! Do not use it instead of AutoUnsubscribe\n *\n * */\n@Injectable()\nexport class DestroyService extends Subject implements OnDestroy {\n // eslint-disable-next-line custom-rules/no-super-call-for-ng-on-destroy\n ngOnDestroy(): void {\n this.next();\n this.complete();\n }\n}\n","import {\n DESKTOP_LARGE_MIN,\n DESKTOP_MEDIUM_MAX,\n DESKTOP_MEDIUM_MIN,\n DESKTOP_SMALL_MAX,\n DESKTOP_SMALL_MIN,\n DeviceType,\n TABLET_MAX,\n TABLET_MIN,\n} from './device-size.constants';\n\nexport function mapWidthToDevice(width: number): DeviceType {\n if (isWidthDesktopLarge(width)) {\n return 'desktop-large';\n }\n\n if (isWidthDesktopMedium(width)) {\n return 'desktop-medium';\n }\n\n if (isWidthDesktopSmall(width)) {\n return 'desktop-small';\n }\n\n if (isWidthTablet(width)) {\n return 'tablet';\n }\n\n return 'mobile';\n}\n\nexport function isMobile(type: string): type is 'mobile' {\n return type === 'mobile';\n}\n\nexport function isTablet(type: string): type is 'tablet' {\n return type === 'tablet';\n}\n\nexport function isDesktop(type: string): type is 'desktop' {\n return type === 'desktop';\n}\n\nexport function isSmallDesktop(type: string): type is 'desktop-small' {\n return type === 'desktop-small';\n}\n\nexport function isMediumDesktop(type: string): type is 'desktop-medium' {\n return type === 'desktop-medium';\n}\n\nexport function isDesktopSmallOrSmaller(type: string): boolean {\n return type === 'mobile' || type === 'tablet' || type === 'desktop-small';\n}\n\nexport function isWidthTablet(width: number): boolean {\n return width > TABLET_MIN && width < TABLET_MAX;\n}\n\nexport function isWidthDesktopSmall(width: number): boolean {\n return width >= DESKTOP_SMALL_MIN && width < DESKTOP_SMALL_MAX;\n}\n\nexport function isWidthDesktopMedium(width: number): boolean {\n return width >= DESKTOP_MEDIUM_MIN && width < DESKTOP_MEDIUM_MAX;\n}\n\nexport function isWidthDesktopLarge(width: number): boolean {\n return width >= DESKTOP_LARGE_MIN;\n}\n","export type DeviceType = 'mobile' | 'tablet' | 'desktop' | 'desktop-small' | 'desktop-medium' | 'desktop-large';\n\nconst SM = 576;\nconst MD = 768;\nconst LG = 992;\nconst XL = 1200;\nconst XXL = 1400;\n\nexport const WINDOW_WIDTH_OFFSET = 1;\n\nexport const TABLET_MIN = MD;\nexport const TABLET_MAX = LG - WINDOW_WIDTH_OFFSET;\n\nexport const DESKTOP_SMALL_MIN = LG;\nexport const DESKTOP_SMALL_MAX = XL;\n\nexport const DESKTOP_MEDIUM_MIN = XL;\nexport const DESKTOP_MEDIUM_MAX = XXL - WINDOW_WIDTH_OFFSET;\n\nexport const DESKTOP_LARGE_MIN = XXL;\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable, Subject, asyncScheduler } from 'rxjs';\nimport { tap, throttleTime } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nconst DEFAULT_THROTTLE_TIME = 50;\n\n@Injectable({ providedIn: 'root' })\nexport class EventThrottleService extends PuSubscribable {\n constructor(private zone: NgZone) {\n super();\n }\n\n throttleEvent(event$: Observable, throttleValue = DEFAULT_THROTTLE_TIME): Observable {\n const throttledEvent$ = new Subject();\n\n this.zone.runOutsideAngular(() => {\n event$\n .pipe(\n throttleTime(throttleValue, asyncScheduler, {\n leading: true,\n trailing: true,\n }),\n tap(event => this.zone.run(() => throttledEvent$.next(event)))\n // we don't need to unsubscribe here, the stream start one time for one event and lives while the app lives.\n )\n .subscribe()\n .untilDestroyed(this);\n });\n\n return throttledEvent$.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { EMPTY, Observable, fromEvent } from 'rxjs';\nimport { map, shareReplay, startWith } from 'rxjs/operators';\n\nimport { EventThrottleService } from './event-throttle.service';\n\nenum THROTTLES {\n SCROLL = 50,\n RESIZE = 300,\n MOUSEMOVE = 10,\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NativeEventService {\n scroll$: Observable = EMPTY;\n resize$: Observable = EMPTY;\n\n constructor(private eventThrottleService: EventThrottleService) {\n if (!document || !window) {\n console.warn('NativeEventService method was called on the server. This operation is not supported in SSR');\n return;\n }\n this.scroll$ = this.initScroll;\n this.resize$ = this.initResize;\n }\n\n private get initScroll(): Observable {\n return this.eventThrottleService.throttleEvent(this.documentScroll$, THROTTLES.SCROLL).pipe(shareReplay(1));\n }\n\n private get initResize(): Observable {\n return this.eventThrottleService.throttleEvent(this.windowResize$, THROTTLES.RESIZE).pipe(shareReplay(1));\n }\n\n private get documentScroll$(): Observable {\n return fromEvent(document, 'scroll', { passive: true }).pipe(\n map(e => e.target as Document),\n startWith(document)\n ) as Observable;\n }\n\n private get windowResize$(): Observable {\n return fromEvent(window, 'resize', { passive: true }).pipe(\n map(e => e.target as Window),\n startWith(window)\n ) as Observable;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, combineLatest, distinctUntilChanged, map, shareReplay, startWith } from 'rxjs';\n\nimport { DeviceType } from './constants/device-size.constants';\nimport { isDesktop, isDesktopSmallOrSmaller, isMobile, isTablet, mapWidthToDevice } from './constants/device-type';\nimport { NativeEventService } from '../native-event.service';\n\ninterface DeviceInfo {\n isMobileUserAgent: boolean;\n isTabletUserAgent: boolean;\n width: number;\n height: number;\n orientation: 'portrait' | 'landscape';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceService {\n private readonly userAgent = navigator.userAgent.toLowerCase();\n private readonly isIOS = /ipad|iphone|ipod/.test(this.userAgent);\n private readonly isAndroid = /android/.test(this.userAgent);\n private readonly isWindowsPhone = /windows phone/.test(this.userAgent);\n private readonly isTabletUserAgent =\n /ipad/.test(this.userAgent) || (/android/.test(this.userAgent) && !/mobile/.test(this.userAgent));\n\n windowEvent$: Observable = this.nativeEventService.resize$.pipe(startWith(window));\n\n private deviceInfo$: Observable = this.windowEvent$.pipe(\n map(w => ({\n isMobileUserAgent: this.isIOS || this.isAndroid || this.isWindowsPhone,\n isTabletUserAgent: this.isTabletUserAgent,\n width: w.innerWidth,\n height: w.innerHeight,\n orientation: w.innerHeight > w.innerWidth ? ('portrait' as const) : ('landscape' as const),\n })),\n distinctUntilChanged(\n (prev, curr) => prev.width === curr.width && prev.height === curr.height && prev.orientation === curr.orientation\n ),\n shareReplay(1)\n );\n\n currentWidth$ = this.deviceInfo$.pipe(\n map(info => info.width),\n distinctUntilChanged()\n );\n\n orientation$ = this.deviceInfo$.pipe(\n map(info => info.orientation),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n deviceType$: Observable = this.deviceInfo$.pipe(\n map(info => {\n if (info.isMobileUserAgent && !info.isTabletUserAgent) {\n return mapWidthToDevice(Math.min(info.width, info.height));\n }\n if (info.isTabletUserAgent) {\n return 'tablet' as DeviceType;\n }\n return mapWidthToDevice(info.width);\n }),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n isMobile$: Observable = this.deviceType$.pipe(map(isMobile), shareReplay(1));\n isTablet$: Observable = this.deviceType$.pipe(map(isTablet), shareReplay(1));\n isDesktop$: Observable = this.deviceType$.pipe(map(isDesktop), shareReplay(1));\n\n isDesktopSmallOrSmaller$: Observable = this.deviceType$.pipe(\n map(isDesktopSmallOrSmaller),\n distinctUntilChanged(),\n shareReplay(1)\n );\n\n isMobileOrTablet$ = combineLatest([this.isMobile$, this.isTablet$]).pipe(\n map(([isMobile, isTablet]) => isMobile || isTablet)\n );\n\n isTabletOrDesktop$ = combineLatest([this.isTablet$, this.isDesktop$]).pipe(\n map(([isTablet, isDesktop]) => isTablet || isDesktop)\n );\n\n constructor(private nativeEventService: NativeEventService) {}\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { RouteData } from '@shared/enums/route-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HelpRouterService {\n constructor(private activatedRoute: ActivatedRoute) {}\n\n public getGlobalPreservedParams() {\n const queryParams = this.activatedRoute?.snapshot?.queryParams || {};\n return {\n [RouteData.PORTFOLIO_ID]: queryParams[RouteData.PORTFOLIO_ID],\n [RouteData.PROPERTY_IDS]: queryParams[RouteData.PROPERTY_IDS],\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, takeUntil } from 'rxjs';\n\nimport { getStorageItem, setStorageItem } from '../utils/extensions';\n\n/**\n * The service helps us to share and cache data between components and reduce HTTP calls\n * Use it when: you have to do multiple low-level requests for the same urls\n *\n * !! We have to unsubscribe manually to avoid memory leaks;\n * !! Example: assignee-cell.component.ts | inspections-add-dynamic\n * !! Do not use it to cache common single requests.\n */\n\ninterface ICacheEntity {\n state: BehaviorSubject;\n associateKey?: string;\n localStorageKey?: string;\n}\n\ninterface ICacheEntityOptions {\n associateKey?: string;\n lsKey?: string;\n}\n\ninterface ICacheEntityLocalStorage extends Omit {\n state: any;\n}\n\ninterface ICacheGetEntityOptions {\n initialState?: T;\n lsKey?: string;\n}\n\nconst localStoragePrefix = '[lcs]__';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalCacheService {\n private _cache: Map = new Map();\n\n get$(key: string, unsubscriber$: Subject, options?: ICacheGetEntityOptions): Observable | null {\n const entry = this._cache.get(key);\n\n if (!entry && options?.lsKey) {\n const item = getStorageItem(options.lsKey) ?? null;\n if (item) {\n this.set(key, item.state, { associateKey: item.associateKey });\n return this._cache.get(key).state.asObservable();\n }\n }\n\n if (!entry && options?.initialState !== undefined) {\n this.set(key, options.initialState);\n return this._cache.get(key).state.asObservable();\n }\n return entry ? entry.state.asObservable().pipe(takeUntil(unsubscriber$)) : null;\n }\n\n set(key: string, value: any, options?: ICacheEntityOptions): void {\n const entry = this._cache.get(key);\n\n if (entry) {\n entry.state.next(value);\n options?.lsKey && setStorageItem(localStoragePrefix + options.lsKey, mapCacheToLocalStorage(entry));\n } else {\n const newEntry: ICacheEntity = { state: new BehaviorSubject(value), ...options };\n this._cache.set(key, newEntry);\n options?.lsKey && setStorageItem(localStoragePrefix + options.lsKey, mapCacheToLocalStorage(newEntry));\n }\n }\n\n remove(key: string): void {\n if (this._cache.has(key)) {\n this._cache.get(key)?.state.complete();\n this._cache.delete(key);\n }\n }\n\n removeByAssociateKey(associateKey: string): void {\n this._cache.forEach((entity, key) => {\n if (entity.associateKey === associateKey) {\n this.remove(key);\n }\n });\n }\n\n clear(): void {\n this._cache.forEach((value, key) => {\n value.state.complete();\n });\n this._cache.clear();\n }\n\n get(key: string): T {\n const entry = this._cache.get(key);\n return entry ? entry.state.getValue() : null;\n }\n}\n\n// create local key => const localPropertyKey = localCachePropertyUsersId + propertyId;\n// get cache => const cachedPropertyUserList$ = this.localCacheService.get(localPropertyKey, this.destroy$);\n// use it => cachedPropertyUserList$ ?? this.userService.getPropertyUserList(propertyId)\n// set key => tap(v => this.localCacheService.set(localPropertyKey, v))\n\nfunction mapCacheToLocalStorage(cache: ICacheEntity): ICacheEntityLocalStorage {\n return {\n state: cache?.state.getValue(),\n associateKey: cache?.associateKey,\n };\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PendingService {\n private _loading$: BehaviorSubject = new BehaviorSubject(false);\n\n private _loadingMap: Map = new Map();\n private _loadingMapSubject = new BehaviorSubject>(this._loadingMap);\n\n pending$: Observable = this._loading$.pipe(debounceTime(300), distinctUntilChanged());\n\n setLoading(loading: boolean, url: string): void {\n if (!url) {\n throw new Error('Url must be provided here');\n }\n\n if (url.endsWith('/api/notification')) {\n return;\n }\n\n if (loading) {\n this._loadingMap.set(url, loading);\n this._loading$.next(true);\n } else if (!loading && this._loadingMap.has(url)) {\n this._loadingMap.delete(url);\n this.updateLoadingState();\n }\n }\n\n clearPending(url: string): void {\n if (this._loadingMap.has(url)) {\n this._loadingMap.delete(url);\n this.updateLoadingState();\n }\n }\n\n private updateLoadingState(): void {\n this._loading$.next(this._loadingMap.size > 0);\n }\n\n isPendingUrls(urls: string[]): boolean {\n return urls.some(url => this._loadingMap.has(url));\n }\n\n isPendingExcludingUrls(excludedUrls: string[]): boolean {\n return Array.from(this._loadingMap.keys()).some(url => !excludedUrls.includes(url));\n }\n\n isPendingExcludingUrls$(excludedUrls: string[]) {\n return this._loadingMapSubject\n .asObservable()\n .pipe(map(loadingMap => Array.from(loadingMap.keys()).some(url => !excludedUrls.includes(url))));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subject, asapScheduler, observeOn } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SubjectsService {\n templatesFocusOutEditor$ = new BehaviorSubject(null);\n templatesFocusOutEditorWithObserveOn$ = this.templatesFocusOutEditor$.pipe(observeOn(asapScheduler));\n closeScheduleCellDialog$ = new Subject();\n}\n","export function getStorageItem(key: string, parseUndefined = false): T | undefined {\n const storageValue = localStorage.getItem(key);\n if (storageValue) {\n try {\n if (parseUndefined) {\n let parsedValue = JSON.parse(storageValue);\n parsedValue = Object.fromEntries(\n Object.entries(parsedValue).map(([key, value]) => [key, value === '_undefined_' ? undefined : value])\n );\n return parsedValue as T;\n } else {\n const parsedValue = JSON.parse(storageValue);\n return parsedValue as T;\n }\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nexport function setStorageItem(key: string, value: T, includeUndefined = false) {\n try {\n if (includeUndefined) {\n const storageValue = JSON.stringify(value, (key, val) => (val === undefined ? '_undefined_' : val));\n localStorage.setItem(key, storageValue);\n return;\n } else {\n const storageValue = JSON.stringify(value);\n localStorage.setItem(key, storageValue);\n }\n } catch (err) {\n console.error(err);\n }\n}\n\nexport function parseJSON(json: string) {\n return json != null ? (JSON.parse(json) as T) : undefined;\n}\n","export function isDeepEqual(a: T, b: T, seen = new Map()): boolean {\n if (a === b) return true;\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false;\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (seen.get(a) === b) return true;\n seen.set(a, b);\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!isDeepEqual(a[key], b[key], seen)) return false;\n }\n\n return true;\n}\n","import { MonoTypeOperatorFunction, Observable } from 'rxjs';\nimport { debounceTime, throttleTime } from 'rxjs/operators';\n\nimport { skipEqual$ } from './skip-equal.rxjs.util';\nimport { debounceSafeDefault } from '../../constants/debounce-time-safe-default.constant';\n\nexport function debounceSafe$(debounce = debounceSafeDefault): MonoTypeOperatorFunction {\n return (source: Observable) => source.pipe(debounceTime(debounce), skipEqual$());\n}\n\nexport function throttleSafe$(throttle = debounceSafeDefault): MonoTypeOperatorFunction {\n return (source: Observable) => source.pipe(throttleTime(throttle), skipEqual$());\n}\n","import { OperatorFunction, filter } from 'rxjs';\n\nexport function filterNullish$(isPure = true): OperatorFunction {\n return isPure ? filter(v => v !== null && v !== undefined) : filter(v => !!v);\n}\n","import { OperatorFunction } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { isDeepEqual } from '../is-deep-equal.util';\n\nexport function skipEqual$(): OperatorFunction {\n return distinctUntilChanged((object1, object2) => isDeepEqual(object1, object2));\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Observable, map, startWith } from 'rxjs';\n\nexport function valueChanges(control: AbstractControl): Observable {\n return control.valueChanges.pipe(\n startWith(undefined),\n map(() => control.value)\n );\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const UserExistsValidator = (emailAddressList: string[]): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (!control.value || !emailAddressList?.length) {\n return null;\n }\n\n if (emailAddressList.includes(control.value)) {\n return {\n userAlreadyExists: true,\n };\n }\n return null;\n };\n};\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const UserInactiveValidator = (emailAddressList: string[]): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (!control.value || !emailAddressList?.length) {\n return null;\n }\n\n if (emailAddressList.includes(control.value)) {\n return {\n userInactive: true,\n };\n }\n return null;\n };\n};\n","
\n \n \n
\n\n\n
\n
\n \n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n \n {{\n attachmentItem?.originalFileName ||\n attachmentItem?.title ||\n newAttachmentItem.upload?.originalFileName ||\n newAttachmentItem.upload?.internalName ||\n ''\n }}\n
\n
\n
\n
{{ attachmentItem?.size || newAttachmentItem.upload?.size | fileSize }}
\n \n
\n \n
\n\n\n
\n
\n \n \n \n \n
\n \n
\n
\n\n\n \n \n \n\n\n\n \n {{ attachmentItem?.externalUrl || newAttachmentItem?.link || '' }}\n \n\n
\n {{ attachmentItem?.externalUrl || newAttachmentItem?.link || '' }}\n
\n
\n\n\n \n \n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { copyToClipboard } from '@shared/functions/copy-to-clipboard.function';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { FileMimeType } from '@shared/interfaces/file-mime-types';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { SnackbarErrorMessage } from '../customized-snackbar/snackbar-message.enum';\n\n@UntilDestroy()\n@Component({\n selector: 'app-attachment-item',\n templateUrl: './attachment-item.component.html',\n styleUrls: ['./attachment-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AttachmentItemComponent extends ComponentAbstract {\n @Input() containerCss = '';\n @Input() attachmentItem: RestGenericTypedAttachment;\n @Input() newAttachmentItem: AttachmentItem;\n @Input() showDeleteBtn = true;\n @Input() trimLink = true;\n @Input() lockFields = false;\n @Input() lockDelete = false;\n @Input() labelCss = 'body-small';\n @Input() showFileSize = true;\n @Input() showFileName = true;\n @Input() showPreview = true;\n @Output() deleteEvent: EventEmitter = new EventEmitter();\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private snackbarService: SnackbarService,\n private fileUploadService: FileUploadsService\n ) {\n super(cdr);\n }\n\n deleteConfirmation() {\n this.deleteEvent.emit();\n }\n\n copyLink() {\n const result = copyToClipboard(this.attachmentItem?.externalUrl || this.newAttachmentItem?.link);\n result\n ? this.snackbarService.success(SnackbarErrorMessage.WebsiteAddressCopied)\n : this.snackbarService.error(SnackbarErrorMessage.CopyingWebsiteAddress);\n }\n\n download() {\n if (this.attachmentItem) {\n this.fileUploadService.download(this.attachmentItem.fileUploadId);\n } else if (this.newAttachmentItem) {\n this.fileUploadService.download(this.newAttachmentItem.upload.id);\n }\n }\n\n getLink() {\n const link = this.attachmentItem?.externalUrl || this.newAttachmentItem?.link || '';\n return link.startsWith('http') ? link : `http://${link}`;\n }\n\n protected readonly FileMimeType = FileMimeType;\n}\n","/**\n * Copies passed string to clipboard\n * @param value string to copy\n */\nexport function copyToClipboard(value: string): boolean {\n const selBox = document.createElement('textarea');\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = value;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n const result = document.execCommand('copy');\n document.body.removeChild(selBox);\n return result;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nimport { AttachmentItemComponent } from './attachment-item.component';\n\n@NgModule({\n declarations: [AttachmentItemComponent],\n imports: [\n CommonModule,\n MatButtonModule,\n IconComponent,\n TooltipDirectiveModule,\n PipesModule,\n PipesModule,\n StopPropagationDirective,\n ],\n exports: [AttachmentItemComponent],\n})\nexport class AttachmentItemModule {}\n","
\n \n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n \n \n \n\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AttachmentComponentType } from '@shared/enums/attachment-component-type.enum';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { Upload } from '@shared/interfaces/upload';\n\nenum AttachmentComponentForm {\n AttachmentType = 'attachmentType',\n File = 'file',\n Link = 'link',\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-attachment',\n templateUrl: './attachment.component.html',\n styleUrls: ['./attachment.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AttachmentComponent extends ComponentAbstract implements OnInit {\n form: UntypedFormGroup;\n _attachmentItem: AttachmentItem;\n currentLink = null;\n urlRegex = /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/;\n fileUploadLoading = false;\n\n @Input() label = '';\n @Input() lockFields = false;\n @Input() linkContentCss = 'display-flex flex-column align-items-start flex-1';\n @Input() inputFileCss = 'flex-1';\n @Input() attrLabel = 'Attachment';\n @Input() containerCss = 'grid-gap-8';\n @Input() labelRequired = false;\n @Input() isEmpty = false;\n @Input() uploadInProgress = false;\n @Input() allowLink = true;\n @Input() keepSelection = false;\n @Input() acceptedFormats: string[];\n @Input() isResident = false;\n @Input() cleanInputAttachment: EventEmitter;\n @Output() attachmentItemEvent: EventEmitter = new EventEmitter();\n\n constructor(protected cdr: ChangeDetectorRef, private formBuilder: UntypedFormBuilder) {\n super(cdr);\n }\n\n get attachmentType(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.AttachmentType) as UntypedFormControl;\n }\n\n get file(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.File) as UntypedFormControl;\n }\n\n get link(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.Link) as UntypedFormControl;\n }\n\n setIsTouched() {\n this.showValidationError = true;\n }\n\n ngOnInit(): void {\n this.cleanInputAttachment\n ?.pipe(\n untilDestroyed(this),\n tap(() => {\n this.file.reset();\n this.link.reset();\n this._attachmentItem = {};\n this.currentLink = '';\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.initForm();\n\n this.file.valueChanges\n .pipe(\n untilDestroyed(this),\n filter((uploads: Upload[]) => !!uploads?.length),\n tap((uploads: Upload[]) => {\n this.attachmentItemEvent.emit({ upload: uploads[0] });\n if (!this.keepSelection) {\n this.file.reset();\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.link.valueChanges\n .pipe(\n untilDestroyed(this),\n debounceTime(300),\n filter((link: string) => !!link && this.link.valid && link !== this.currentLink),\n tap((link: string) => {\n this.currentLink = link;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [AttachmentComponentForm.AttachmentType]: [AttachmentComponentType.File],\n [AttachmentComponentForm.Link]: [null, [Validators.pattern(this.urlRegex)]],\n [AttachmentComponentForm.File]: [null, [Validators.required]],\n });\n }\n\n submitLink() {\n if (this.link.valid) {\n this.attachmentItemEvent.emit({ link: this.link.value });\n if (!this.keepSelection) {\n this.link.reset();\n }\n }\n }\n\n clearUploadedFile() {\n this.attachmentItemEvent.emit(null);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { InputFileModule } from '@ui-components/controls/input-file/input-file.module';\nimport { RadioButtonModule } from '@ui-components/controls/radio-button/radio-button.module';\n\nimport { AttachmentComponent } from './attachment.component';\n\n@NgModule({\n declarations: [AttachmentComponent],\n exports: [AttachmentComponent],\n imports: [\n CommonModule,\n RadioButtonModule,\n ReactiveFormsModule,\n InputFileModule,\n InputModule,\n MatButtonModule,\n IconComponent,\n InputErrorModule,\n TooltipDirectiveModule,\n AttachmentItemModule,\n MatProgressSpinnerModule,\n ],\n})\nexport class AttachmentModule {}\n","
\n
\n \n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { RestTypedTurnoverAttachment } from '@shared/interfaces/turnover.interface';\n\n@Component({\n selector: 'app-attachments-list',\n templateUrl: './attachments-list.component.html',\n styleUrls: ['./attachments-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AttachmentsListComponent {\n @Input() showEmpty = false;\n @Input() attachments: RestTypedTurnoverAttachment[];\n @Input() lockFields: boolean;\n @Output() removeAttachment = new EventEmitter();\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AttachmentsListComponent } from './attachments-list.component';\nimport { AttachmentItemModule } from '../attachment-item/attachment-item.module';\n\n@NgModule({\n declarations: [AttachmentsListComponent],\n imports: [CommonModule, AttachmentItemModule],\n exports: [AttachmentsListComponent],\n})\nexport class AttachmentsListModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { ButtonComponent } from './button.component';\n\n@NgModule({\n declarations: [ButtonComponent],\n imports: [CommonModule, MatButtonModule, MatProgressSpinnerModule, MatIconModule],\n exports: [ButtonComponent],\n})\nexport class ButtonModule {}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n Optional,\n ViewEncapsulation,\n forwardRef,\n} from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\nimport { MatCalendar, MatDatepickerIntl } from '@angular/material/datepicker';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-calendar-header',\n templateUrl: './calendar-header.component.html',\n styleUrls: ['./calendar-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CalendarHeaderComponent extends ComponentAbstract implements OnInit {\n constructor(\n private _intl: MatDatepickerIntl,\n @Inject(forwardRef(() => MatCalendar)) public calendar: MatCalendar,\n @Optional() private _dateAdapter: DateAdapter,\n @Optional() @Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,\n protected cdr: ChangeDetectorRef\n ) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.calendar.stateChanges\n .pipe(\n untilDestroyed(this),\n tap(() => this.cdr.markForCheck())\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n get periodLabel() {\n return this._dateAdapter.format(this.calendar.activeDate, this._dateFormats.display.monthYearA11yLabel);\n }\n\n previousClicked() {\n this.calendar.activeDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, -1);\n }\n\n nextClicked() {\n this.calendar.activeDate = this._dateAdapter.addCalendarMonths(this.calendar.activeDate, 1);\n }\n}\n","
\n \n
{{ periodLabel }}
\n \n
\n","\n \n
\n
\n \n
\n
\n
\n
\n
{{ title }}
\n
{{ subTitle }}
\n
\n \n
\n \n
\n
\n
\n \n
\n \n\n\n\n \n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, TemplateRef } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@Component({\n selector: 'app-chart-card',\n templateUrl: './chart-card.component.html',\n styleUrls: ['./chart-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartCardComponent extends ComponentAbstract {\n @Input() chartIcon: EIcon;\n @Input() title: string;\n @Input() subTitle: string;\n @Input() subTitleColor: EColorPalette = EColorPalette.cBlack;\n @Input() isLoading: boolean;\n @Input() showChartColumn = true;\n @Input() customDescriptionTemplate: TemplateRef;\n @Input() chartContainerCss = 'display-flex justify-content-center chart-container h-100';\n @Input() chartCardPadding = '16px';\n @Input() chartCardBoxShadow = '4px 4px 6px rgb(72 72 72 / 12%)';\n @Input() chartCardBackgroundColor = EColorPalette.cWhite;\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { SkeletonLoaderComponent } from '@ui-components/components/skeleton-loader/skeleton-loader.component';\n\nimport { ChartCardComponent } from './chart-card.component';\nimport { IconComponent } from '../icon/icon.component';\n\n@NgModule({\n declarations: [ChartCardComponent],\n imports: [CommonModule, IconComponent, MatProgressSpinnerModule, SkeletonLoaderComponent],\n exports: [ChartCardComponent],\n})\nexport class ChartCardModule {}\n","\n \n \n \n\n\n\n
\n \n \n

{{ activeLegend?.label }}

\n {{ activeLegend?.value }}\n
\n \n
\n\n\n
\n \n
\n
{{ item.label }}
\n
({{ item.value }})
\n
{{ item.value | getPercentageValue: dataSum }}
\n
\n \n
\n\n\n \n\n\n\n \n \n \n \n \n\n\n\n
\n
\n
{{ emptyChartLabel }}
\n
\n
\n\n\n
\n
\n
\n
{{ emptyChartLabel }}
\n
\n
\n
\n
\n\n\n
\n
{{ emptyChartLabel }}
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n Renderer2,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport {\n ArcElement,\n BarController,\n BarElement,\n CategoryScale,\n Chart,\n Legend,\n LineController,\n LinearScale,\n PieController,\n SubTitle,\n Title,\n Tooltip,\n} from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { ChartTypes } from '@dashboards/models/chart-types.enum';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { ChartConfig, ChartDataItem } from '@shared/interfaces/chart-data-item';\nimport { ChartService } from '@ui-components/components/chart/services/chart.service';\n\nChart.register(\n ArcElement,\n BarElement,\n BarController,\n LineController,\n PieController,\n CategoryScale,\n LinearScale,\n Legend,\n Title,\n Tooltip,\n SubTitle,\n ChartDataLabels\n);\n\nChart.defaults.set('plugins.datalabels', {\n display: false,\n});\n\n@UntilDestroy()\n@Component({\n selector: 'app-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent extends ComponentAbstract implements OnInit {\n id = `chart_${new Date().getTime()}`;\n chart: Chart;\n dataListBSubject: BehaviorSubject = new BehaviorSubject([]);\n canvasBSubject: BehaviorSubject = new BehaviorSubject(null);\n _chartDataList: ChartDataItem[] = [];\n itemCount = 0;\n dataSum = 0;\n activeLegend: { label: string; value: number } | null = null;\n\n previousCanvas = null;\n\n @Input() width = 100;\n @Input() height = 100;\n @Input() chartType = ChartTypes.PIE;\n @Input() displayLegend = true;\n @Input() displayLegendBottom = false;\n @Input() displayLegendInside = false;\n @Input() emptyTemplate: TemplateRef;\n @Input() emptyChartLabel = 'No data to display';\n @Input() chartConfig: ChartConfig = {\n showTooltip: true,\n showDataLabel: true,\n cutoutLevel: 70,\n };\n @Input() displayPercentageInLegend = false;\n\n @Input() containerCss = '';\n @Input() legendCss = 'body-description';\n\n @Input() clickableLabel = false;\n @Input() labelActiveColor?: EColorPalette;\n @Input() labelBlurColor?: EColorPalette;\n\n @Input() chartMaxWidth?: string;\n\n @Input() set chartDataList(chartDataList: ChartDataItem[]) {\n this.itemCount = chartDataList?.length;\n this.dataListBSubject.next(chartDataList);\n\n this.cdr.detectChanges();\n }\n\n @ViewChild('canvas', { static: false }) set content(canvas: ElementRef) {\n this.canvasBSubject.next(canvas);\n\n this.cdr.detectChanges();\n }\n\n constructor(protected cdr: ChangeDetectorRef, private renderer: Renderer2, private chartService: ChartService) {\n super(cdr);\n }\n\n ngOnInit(): void {\n combineLatest([this.dataListBSubject, this.canvasBSubject])\n .pipe(\n untilDestroyed(this),\n filter(([chartDataList, canvas]) => !!chartDataList?.length && !!canvas),\n tap(([chartDataList, canvas]) => {\n this._chartDataList = chartDataList;\n\n if (this.displayLegendInside && !this.activeLegend && chartDataList.length > 0) {\n const largestValueItem = chartDataList.reduce((maxItem, currentItem) => {\n return currentItem.value > (maxItem?.value || 0) ? currentItem : maxItem;\n }, null);\n\n if (largestValueItem) {\n this.activeLegend = { label: largestValueItem.label, value: largestValueItem.value };\n }\n }\n\n this.chartService.getChartData(chartDataList);\n this.dataSum = this.chartService.getDataSum();\n this.chart = this.createChart(canvas);\n\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n showActiveElement(index) {\n if (this.chart) {\n this.chart.setActiveElements([{ datasetIndex: 0, index }]);\n this.chart.update();\n }\n }\n\n reset() {\n if (this.chart) {\n this.chart.setActiveElements([]);\n }\n }\n\n changeActiveSelection(item: ChartDataItem): void {\n if (this.clickableLabel && item.value > 0) {\n if (this.displayLegendInside) this.activeLegend = { label: item.label, value: item.value };\n const formattedChartData = this._chartDataList.map(a => ({\n ...a,\n backgroundColor: !a.value\n ? EColorPalette.cGray8\n : item.value && a.label === item.label\n ? this.labelActiveColor\n : this.labelBlurColor,\n }));\n\n this.dataListBSubject.next(formattedChartData);\n }\n }\n\n private createChart(canvas: ElementRef): Chart {\n this.destroyChart();\n return new Chart(\n canvas.nativeElement,\n this.chartService.getChartConfig(this.chartType, this._chartDataList, this.chartConfig)\n );\n }\n\n private destroyChart() {\n if (this.chart) {\n this.chart.clear();\n this.chart.destroy();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { ChartService } from '@ui-components/components/chart/services/chart.service';\n\nimport { ChartComponent } from './chart.component';\n\n@NgModule({\n declarations: [ChartComponent],\n exports: [ChartComponent],\n imports: [CommonModule, PipesModule, MatProgressSpinnerModule],\n providers: [ChartService],\n})\nexport class ChartModule {}\n","import { Injectable } from '@angular/core';\nimport { Chart, ChartConfiguration, ChartOptions, ChartType, DefaultDataPoint, Plugin } from 'chart.js';\nimport { Context } from 'chartjs-plugin-datalabels/types/context';\nimport { first } from 'lodash';\n\nimport { ChartTypes } from '@dashboards/models/chart-types.enum';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { ChartConfig, ChartDataItem } from '@shared/interfaces/chart-data-item';\n\n@Injectable()\nexport class ChartService {\n labels: string[] = [];\n data: number[] = [];\n backgroundColor: string[] = [];\n labelColor: string[] = [];\n chartDataList: ChartDataItem[] = [];\n\n getChartConfig(\n chartType: ChartTypes,\n chartDataList: ChartDataItem[],\n chatConfig: ChartConfig\n ): ChartConfiguration, string> {\n const config: ChartConfiguration, string> = {\n type: chartType,\n data: {\n labels: this.labels,\n datasets: [\n {\n maxBarThickness: chatConfig.maxBarThickness,\n offset: 0,\n spacing: chatConfig.spacing ?? 0,\n borderWidth: 0,\n label: '',\n data: this.data,\n backgroundColor: this.backgroundColor,\n datalabels: {\n color: this.labelColor,\n },\n hoverOffset: 10,\n borderRadius: chatConfig?.borderRadius || 0,\n },\n ],\n },\n options: this.getChartOptions(chartType, chatConfig),\n plugins: [],\n };\n\n if (chartType === ChartTypes.DOUGHNUT && chatConfig.showTextTooltip) {\n config.plugins.push(this.getDoughnutTextPlugin());\n }\n\n return config;\n }\n\n getChartOptions(chartType: ChartTypes, chartConfig: ChartConfig): ChartOptions {\n let options: ChartOptions = {\n responsive: true,\n\n layout: {\n padding: 10,\n },\n\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: chartConfig.showTooltip,\n },\n datalabels: {\n color: EColorPalette.cWhite,\n font: {\n size: 10,\n },\n display: chartConfig.showDataLabel,\n formatter: this.getDataLabelFormatter(chartConfig),\n },\n },\n };\n\n if (chartType === ChartTypes.DOUGHNUT) {\n options = {\n ...options,\n cutout: `${chartConfig.cutoutLevel}%`,\n rotation: chartConfig.rotation,\n circumference: chartConfig.circumference,\n };\n }\n\n if (chartType === ChartTypes.BAR) {\n options = {\n ...options,\n scales: {\n xAxis: {\n display: true,\n grid: {\n display: false,\n },\n },\n yAxis: {\n display: false,\n grid: {\n display: false,\n },\n },\n },\n };\n }\n\n return options;\n }\n\n getDoughnutTextPlugin(): Plugin {\n const dataList = this.chartDataList;\n\n return {\n id: 'dougnut inner text',\n beforeDraw(chart: Chart, args, options) {\n const activeElement = first(chart.getActiveElements());\n if (!activeElement) {\n return;\n }\n\n const { label, additionalValue, additionalPercentage } = dataList[activeElement?.index];\n const {\n ctx,\n chartArea: { top, right, bottom, left, width, height },\n } = chart;\n ctx.save();\n ctx.fillStyle = EColorPalette.cGray;\n ctx.font = '10px lato';\n ctx.textAlign = 'center';\n ctx.fillText(`${(activeElement.element as any).$context.raw} units`, width / 2 + 10, top - 10 + height / 2);\n ctx.fillText(label, width / 2 + 10, top + height / 2);\n ctx.fillStyle = EColorPalette.cGray5;\n ctx.textAlign = 'center';\n ctx.fillText(`$${additionalValue.toFixed(2)}`, width / 2 + 10, top + 10 + height / 2);\n const textPercentage = `${additionalPercentage.toFixed(2)}%`;\n ctx.fillText(textPercentage, width / 2 + 10, top + 20 + height / 2);\n },\n };\n }\n\n getChartData(chartDataList: ChartDataItem[]) {\n this.labels = [];\n this.data = [];\n this.backgroundColor = [];\n this.labelColor = [];\n this.chartDataList = chartDataList;\n\n chartDataList.forEach((chartDataItem: ChartDataItem) => {\n this.labels.push(chartDataItem.label);\n this.data.push(chartDataItem.value);\n this.backgroundColor.push(chartDataItem.backgroundColor);\n this.labelColor.push(chartDataItem.labelColor);\n });\n }\n\n getDataSum(): number {\n return this.data.reduce((acc, value) => acc + value);\n }\n\n getDataLabelFormatter(config: ChartConfig) {\n if (config.dataLabelAbsolute) {\n return value => value;\n } else {\n const getContextSum = (context: Context): number => {\n return (context.dataset.data.reduce((prev, curr) => (prev as number) + (curr as number)) as number) || 0;\n };\n return (value, context) => {\n return `${value ? Math.round((value / getContextSum(context)) * 100) : ''}${value ? '%' : ''}`;\n };\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\n\nimport { IconComponent } from '../icon/icon.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-collapsible-search-input',\n templateUrl: './collapsible-search-input.component.html',\n styleUrls: ['./collapsible-search-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, IconComponent, ReactiveFormsModule],\n})\nexport class CollapsibleSearchInputComponent extends ComponentAbstract implements OnInit, ControlValueAccessor {\n control = new UntypedFormControl();\n\n @Input() attrPlaceholder = '';\n @Input() iconColor = EColorPalette.cGray3;\n @Input() inputCss = 'text-color dark';\n @Input() containerCss = 'display-flex align-items-center';\n @Output() clear = new EventEmitter();\n @Output() collapsedChange = new EventEmitter();\n @ViewChild('input', { read: ElementRef, static: false }) input: ElementRef;\n @HostBinding('class.collapsed') collapsed = true;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n super(cdr);\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onGlobalClick(event): void {\n if (!this.collapsed && !this.elementRef.nativeElement.contains(event.target)) {\n this.toggle();\n }\n }\n\n ngOnInit(): void {\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n debounceTime(200),\n tap(value => {\n this.onChanged(value);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched();\n }\n\n writeValue(value: any): void {\n this.control.setValue(value);\n if (value && this.collapsed) {\n this.toggle();\n }\n }\n\n toggle() {\n if (!this.collapsed && this.control.value) {\n return;\n }\n this.collapsed = !this.collapsed;\n this.collapsedChange.emit(this.collapsed);\n if (!this.collapsed && this.input) {\n this.input.nativeElement.focus();\n }\n this.cdr.markForCheck();\n }\n\n expand(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.collapsed) {\n return;\n }\n this.toggle();\n }\n\n private onChanged = (value: any) => {\n //\n };\n\n private onTouched = () => {\n //\n };\n}\n","
\n \n\n
\n \n
\n
\n","
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostListener,\n Inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { UntilDestroy } from '@ngneat/until-destroy';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EIcon } from '@shared/enums/icon.enum';\n\nimport { SnackbarService } from '../snackbar.service';\n\nexport interface CustomizedSnackbarComponentData {\n message: string;\n icon?: EIcon;\n actions$: BehaviorSubject<{ action: string; actionParam?: any }>;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-customized-snackbar',\n templateUrl: './customized-snackbar.component.html',\n styleUrls: ['./customized-snackbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class CustomizedSnackbarComponent extends ComponentAbstract {\n loadingSpinner$: BehaviorSubject = this.snackbarService.snackbarLoadingSpinner$;\n\n constructor(\n private snackbarService: SnackbarService,\n protected cdr: ChangeDetectorRef,\n @Inject(MAT_SNACK_BAR_DATA) public data: CustomizedSnackbarComponentData\n ) {\n super(cdr);\n }\n\n @HostListener('click', ['$event']) onClick(event: MouseEvent) {\n const action = (event.target as HTMLElement).getAttribute('data-toast-action');\n const actionParam = (event.target as HTMLElement).getAttribute('data-toast-action-param');\n if (action) {\n this.data.actions$.next({ action, actionParam });\n this.dismiss();\n }\n }\n\n dismiss() {\n this.snackbarService.dismiss();\n }\n}\n","export enum SnackbarErrorMessage {\n RetrievingCompanyList = 'Error retrieving company list',\n RetrievingCompanyData = 'Error retrieving company data',\n AddingNewVendor = 'Error adding new vendor',\n UpdatingVendor = 'Error updating vendor',\n DeletingVendor = 'Error deleting vendor',\n AddingEmployee = 'Error adding employee',\n DeletingEmployee = 'Error deleting employee',\n RetrievingVendors = 'Error retrieving vendors',\n AddingAddress = 'Error adding address',\n UpdatingAddress = 'Error updating address',\n\n T01RetrievingTasks = 'Error T01 retrieving tasks',\n T02RetrievingTasks = 'Error T02 retrieving tasks',\n RetrievingMyTasks = 'Error retrieving my tasks',\n T03RetrievingTasks = 'Error T03 retrieving tasks',\n T04RetrievingTasks = 'Error T04 retrieving tasks',\n LoadingTurnoverSummary = 'Error loading turnover summary',\n LoadingTurnoverDetails = 'Error loading turnover details',\n LoadingDelinquencySummary = 'Error loading delinquency summary',\n LoadingDelinquencyDetails = 'Error loading delinquency details',\n LoadingRenewalsSummary = 'Error loading renewals summary',\n LoadingUnitDetails = 'Error loading unit details',\n LoadingUnitDetailsByProperty = 'Error loading unit details by property',\n LoadingRenewalDetails = 'Error loading renewal details',\n LoadingProperties = 'Error loading properties',\n UL01LoadingUnitList = 'Error UL01 loading unit list',\n UL02LoadingUnitList = 'Error UL02 loading unit list',\n LoadingUnit = 'Error loading unit',\n UpdatingUnit = 'Error updating unit',\n LoadingAppliances = 'Error loading appliances',\n RetrievingRenealStrategy = 'Error retrieving renewal strategy',\n\n DL01RetrievingDelinquencyList = 'Error DL01 retrieving delinquency list',\n DL02RetrievingDelinquencyList = 'Error DL02 retrieving delinquency list',\n UpdatingDelinquency = 'Error updating delinquency',\n RetrievingDelinquencyHistory = 'Error retrieving delinquency history',\n\n RetrievingTurnoverConfigurationList = 'Error retrieving turnover configuration list',\n RetrievingTurnoverConfigurationElement = 'Error retrieving turnover configuration element',\n UpdatingTurnoverFieldConfiguration = 'Error updating turnover field configuration',\n\n ExecutingUpdate = 'Error executing update',\n RetrievingRenewalStrategies = 'Error retrieving renewal strategies',\n UpdatingRenewalStrategy = 'Error updating renewal strategy',\n\n RetrievingPropertyManagersMoveOut = \"Error retrieving property manager's move out\",\n RetrievingAssetManagersMoveOut = \"Error retrieving asset manager's move out\",\n RetrievingPropertyManagersArchivedMoveOut = \"Error retrieving property manager's archived move out\",\n RetrievingAssetManagersArchivedMoveOut = \"Error retrieving asset manager's archived move out\",\n\n RetrievingNotificationList = 'Error retrieving notification list',\n MarkingAllNotificationsAsRead = 'Error marking all notifications as read',\n MarkingNotificationAsRead = 'Error marking notification as read',\n DeletingNotification = 'Error deleting notification',\n\n EstablishingSignalRConnection = `Error establishing signalr connection: `,\n\n UnsupportedFileType = 'Unsupported file type',\n UploadingFile = 'Error uploading file',\n\n LoadingPortfoliosList = \"Error loading portfolio's list\",\n LoadingPortfolio = 'Error loading portfolio',\n LoadingPropertyDetails = 'Error loading property details',\n LoadingAllUserProperties = 'Error loading all user properties',\n LoadingAllUserPropertyCollections = 'Error loading all user property collections',\n LoadingUnassignedUserProperties = 'Error loading unassigned user properties',\n UpadtingPortfolio = 'Error updating portfolio',\n WhileAddingNewPropertyToPortfolio = 'Error while adding new property to portfolio',\n WhileDeletingPropertyFromPortfolio = 'Error while deleting property from portfolio',\n WhileCreatingNewPortfolio = 'Error while creating new portfolio',\n RetrievingPropertyManagers = 'Error retrieving property managers',\n RetrievingPropertyManagersForProperty = 'Error retrieving property managers for property',\n UpdatingPropertyDetails = 'Error updating property details',\n RemovingPortfolio = 'Error removing portfolio',\n RemovingManagerFromProperty = 'Error removing manager from property',\n AssigningManagerToProperty = 'Error assigning manager to property',\n RetrievingPropertyUnits = 'Error retrieving property units',\n RetrievingUnitsAttachments = 'Error retrieving units attachments',\n\n //Template\n LoadingTemplatesList = \"An error occurred while loading template's list, please try again later\",\n RemovingTemplate = 'An error occurred while removing the template, please try again later',\n RemovingTemplateInUse = 'Template cannot be deleted because it is in use',\n LoadingUnitTypes = \"Error loading unit type's list\",\n UpdatingTemplate = 'An error occurred while updating the template, please try again later',\n WhileCreatingNewTemplate = 'Error while creating new template',\n WhileDeletingPropertyFromTemplate = 'Error while deleting space from template',\n WhileUpdatingRatingGroup = 'An error occurred while updating the Rating Group, please try again later',\n\n //SpaceTemplate\n LoadingSpaceTemplatesList = \"Error loading space template's list\",\n RemovingSpaceTemplate = 'Error removing space template',\n UpadtingSpaceTemplate = 'Error updating space template',\n LoadingCategories = \"Error loading category's list\",\n WhileCreatingNewSpaceTemplate = 'Error while creating new space template',\n\n //Inspections\n LoadingInspectionsList = \"Error loading inspection's list\",\n RemovingInspection = 'Error removing inspection',\n UpadtingInspection = 'Error updating inspection',\n WhileCreatingNewInspection = 'Error while creating new inspection',\n WhileAddingNewSharedSpace = 'Error while adding new shared space',\n InspectionMustBeCompleted = 'Inspection must be completed first',\n InspectionPdfNotFound = 'Inspection .pdf not found',\n LoadingInspectionsSummaryReport = \"Error loading inspection's summary report\",\n\n // message\n AddingAttachment = 'Error adding attachment',\n AddingPhoto = 'Error adding photo',\n AddingFloorplan = 'Error adding floorplan',\n\n // message\n DeletingAttachment = 'Error deleting attachment',\n DeletingPhoto = 'Error deleting photo',\n DeletingFloorplan = 'Error deleting floorplan',\n\n DeletingFile = 'Error deleting file',\n\n RetrievingRenewalsList = 'Error retrieving renewals list',\n RetrievingRenewalData = 'Error retrieving renewal data',\n RetrievingRenewalStrategy = 'Error retrieving renewal strategy',\n UpdatingRenewal = 'Error updating renewal',\n RetrievingRenewalChangesHistory = 'Error retrieving renewal changes history',\n\n WhileLoadingResponsibleParties = 'Error while loading responsible parties',\n WhileCreatingAssignee = 'Can’t set assignee, please try again.',\n WhileUpdatingAssignee = 'Error while updating assignee',\n\n RetrievingUserData = 'Error retrieving user data',\n RetrievingTenantData = 'Error retrieving tenant data',\n RetrievingUser = 'Error retrieving user',\n\n UnauthorizedAccess = 'Unauthorized access. Please contact administrator.',\n SessionIsOver = 'Your session is over, please log in again.',\n\n RetrievingTicketList = 'Error retrieving ticket list',\n UpdatingTicket = 'Error updating ticket',\n\n CannotAcceptBid = 'You cannot accept until a bid has been received.',\n\n DoNotForgetToUpdateInPMS = 'Don’t forget to update the date in {PMS}',\n\n RequiredFieldsCannotBeEmpty = 'Required fields cannot be empty.',\n\n CannotChangeUnitCondition = 'You cannot change unit condition after inspection has been completed. If you need to do this, please delete and recreate this turnover.',\n CompleteVacantOrOccupied = 'Complete Occupied inspection or Vacant inspection before moving to the next step.',\n CompleteOccupiedInspection = 'Complete Occupied inspection first',\n CompleteVacantInspection = 'Complete Vacant inspection first',\n\n InvalidFileExtension = `Invalid file extension. Accepted formats: `,\n\n UnitConditionForOccupiedInspection = 'Unit condition is required for Occupied inspection.',\n MoveOutTypeForOccupiedInspection = 'Move out type is required for Occupied inspection.',\n\n UnitConditionForVacantInspection = 'Unit condition is required for Vacant inspection.',\n MoveOutTypeForVacantInspection = 'Unit status is required for Vacant inspection.',\n VacantInspectionCannotOccur = 'Vacant Inspection cannot occur before Move Out Date of: ',\n\n AtLeastOnePhoto = 'At least one photo must be added before continuing.',\n\n BidMustBeAccepted = 'A bid must be accepted before Renovation can begin.',\n\n JobCannotStartUntil = `Job cannot start until tenant moves out on: `,\n\n CreatingBulkScope = 'Error creating bulk scope',\n RetrievingBulkScope = 'Error retrieving bulk scope',\n UpdatingBulkScope = 'Error updating bulk scope',\n RetrievingBulkScopeList = 'Error retrieving bulk scope list',\n\n CreatingTurnover = 'Error creating turnover',\n AssigningAssignee = 'Error assigning assignee',\n RetrievingTurnoverData = 'Error retrieving turnover data',\n UpdatingTurnoverData = 'Error updating turnover data',\n ErrorUpdatingTurnoverStepAssignee = 'Error updating assignee',\n ErrorRetrievingDefaultTurnoverAssignees = 'Error retrieving default assignees',\n ChangingTurnoverStep = 'Error changing step',\n RefreshingTimer = 'Error refreshing timer',\n AssigningAttachmentToEntity = 'Error assigning attachment to entity',\n UpdatingAttachment = 'Error updating attachment',\n RetrievingTurnoverTickets = 'Error retrieving tickets',\n CreatingTicket = 'Error creating ticket',\n TicketCreated = 'Ticket created',\n TicketUpdated = 'Ticket updated',\n UpdatingTurnoverTicket = 'Error updating ticket',\n RetrievingTurnoverTicket = 'Error retrieving ticket',\n DeletingTicket = 'Error deleting ticket',\n AssigningAttachmentToTicket = 'Error attaching to ticket',\n RetrievingTicket = 'Error retrieving ticket',\n RetrievingTicketAttachment = 'Error retrieving ticket attachments',\n ErrorInvalidTicketId = 'Ticket number {ticketId} does not exist.',\n ErrorInvalidInspectionId = 'Inspection number {inspectionId} does not exist.',\n ErrorResolvedTicketId = 'Ticket number {ticketId} is already resolved and can be rated.',\n RetrievingCompaniesList = 'Error retrieving companies',\n RetrievingBidList = 'Error retrieving bids',\n RetrievingVendorsList = 'Error retrieving vendors',\n RetrievingBid = 'Error retrieving bid',\n AddingBid = 'Error adding bid',\n UpdatingBid = 'Error updating bid',\n AssigningAttachmentToBid = 'Error attachming to bid',\n RetrievingApplianceData = 'Error retrieving appliance data',\n ReceivingTurnoverComments = 'Error receiving conversation',\n AddingComment = 'Error adding comment',\n UpdatingComment = 'Error updating comment',\n Deletingcomment = 'Error deleting comment',\n LoadingworkflowAssignment = 'Error loading workflow assignment',\n DeletingTurnover = 'Error deleting turn',\n TurnoverDeleted = 'Turn deleted for {0}',\n DeletingFileFromRepository = 'Error deleting file',\n RetrievingTurnoverAttachmentList = 'Error retrieving turn attachments',\n RetrievingBidAttachmentList = 'Error retrieving bid attachments',\n\n AllPunchTicketsMustBeDone = 'All punch tickets must be marked as done.',\n\n // TODO - it shouldn't be error message\n WebsiteAddressCopied = 'Website address copied (Ctrl + V to paste)',\n CopyingWebsiteAddress = 'Error copying website address',\n\n ErrorInvitingUser = 'Error inviting user',\n ErrorWrongEmail = 'Invalid email address',\n ErrorUserAlreadyExist = 'user {0} already exists',\n ErrorUpdatingUser = 'Error updating user',\n ErrorAssigningUserToRole = 'Error assigning user to role',\n ErrorAssigningUserToProperty = 'Error assigning user to property',\n ErrorRemovingPropertyAssignedUser = 'Error removing user',\n\n ErrorRetrievingSystemConfig = 'Error retrieving system configuration',\n ErrorRetrievingSlackChannels = 'Error retrieving slack channels',\n ErrorRetrievingTimerReport = 'Error retrieving timer report',\n ErrorWrongReportId = 'Couldn’t find Report #{reportId}',\n SlackAdded = 'Slack successfully added',\n ErrorUpdatingSlackChannel = 'Error updating slack channel',\n ErrorUpdatingSystemConfig = 'Error updating system configuration',\n ErrorRetrievingElapsedDaysThresholds = 'Error retrieving elapsed days thresholds',\n ErrorUpdatingElapsedDaysThresholds = 'Error updating elapsed days thresholds',\n\n ErrorPortfolioKpi = 'Error getting portfolio KPIs',\n ErrorAddingFinish = 'Error adding new finish',\n ErrorUpdatingFinish = 'Error updating finish',\n ErrorDeletingFinish = 'Error deleting finish',\n ErrorLoadingFinish = 'Error loading finish',\n\n ErrorSurveysTemplates = 'Error getting inspection templates',\n ErrorSavingSurveyTemplate = 'Error saving inspection template',\n SuccessSavingSurveyTemplate = 'Inspection template saved',\n\n CommentLinkCopied = 'Comment link copied',\n\n ErrorSendingInspectionReport = 'Send inspection report failed',\n InspectionReportSentSuccessfully = 'Inspection report sent successfully',\n\n BuildiumSetupCompleted = 'Buildium setup is complete',\n BuildiumSetupIncompleted = 'Builidum setup has failed, please contact support',\n BoardEditPermissionRequired = 'Permission: board_edit required',\n TemplateEditPermissionRequired = 'Permission: inspectiontemplates_edit required',\n TurnEditPermissionRequired = 'Permission: propertymanager_activeturnovers_edit required',\n CannotEditGlobalTemplate = 'Global templates cannot be edited',\n\n AllPortfoliosHasBeenUpdated = 'All portfolios updated',\n AllPropertiesHasBeenUpdated = 'All properties updated',\n\n NotificationSent = 'Notification sent to {1}',\n InspectionCreatedAndAssigneeNotified = 'Inspection created and {1} notified',\n InspectionUpdatedAndAssigneeNotified = 'Inspection updated and {1} notified',\n InspectionCreated = 'Inspection created',\n InspectionUpdated = 'Inspection updated',\n InspectionDeleted = 'Inspection deleted',\n RepeatingInspectionUpdated = 'Repeating Inspection updated',\n DynamicInspectionCreated = 'Dynamic {0} inspection created',\n\n PropertyNameUpdated = 'Property name updated',\n ErrorUpdatingPropertyName = 'Error updating property name',\n ErrorUpdatingResidentContactInfo = 'Error updating contact info',\n ResidentContactInfoUpdated = 'Contact info updated',\n\n ErrorFileDownload = 'File download error',\n\n // property collections\n ErrorLoadingPropertyCollections = 'Error loading collections',\n ErrorAddingPropertyCollections = 'Error adding collection',\n ErrorAddingPropertyToCollections = 'Error adding properties to collection',\n ErrorAddingUserToCollections = 'Error adding users to collection',\n ErrorRemovingPropertyFromCollection = 'Error removing property from collection',\n ErrorRemovingUsersFromCollection = 'Error removing user from collection',\n ErrorUpdatingPropertyCollections = 'Error updating collection',\n ErrorRemovingPropertyCollections = 'Error removing collection',\n\n PermissionRequired = 'Permission {PERMISSION} is required to {ACTION}',\n}\n","import { Injectable } from '@angular/core';\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { BehaviorSubject, Observable, of, tap } from 'rxjs';\n\nimport { SidePanelService } from '@app/services/side-panel.service';\nimport { EIcon } from '@shared/enums/icon.enum';\n\nimport { CustomizedSnackbarComponent } from './component/customized-snackbar.component';\nimport { SnackbarErrorMessage } from './snackbar-message.enum';\n\n// enum Snackbar\nenum SnackBarCss {\n Success = 'snackbar-success',\n Failure = 'snackbar-failure',\n Warning = 'snackbar-warning',\n Info = 'snackbar-info',\n}\n\nenum NotificationPositionCss {\n WithSidePanel = 'notification-with-side-panel',\n WithoutPanel = 'notification-closed-side-panel',\n NoPanel = 'notification-with-no-side-panel',\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SnackbarService {\n notificationClass = 'customized-notification';\n positionCss = NotificationPositionCss.WithSidePanel;\n snackBarRef: MatSnackBarRef;\n defaultDuration = 10000;\n defaultClosable = true;\n private _snackBarActions$ = new BehaviorSubject<{ action: string; actionParam?: any }>({ action: '' });\n snackBarActions$ = this._snackBarActions$.asObservable();\n snackbarLoadingSpinner$ = new BehaviorSubject(false);\n\n constructor(private snackBar: MatSnackBar) {}\n\n watchForSidePanel(sidePanelService: SidePanelService): Observable {\n if (!sidePanelService) {\n this.positionCss = NotificationPositionCss.NoPanel;\n return of(null);\n }\n return sidePanelService.isSidePanelExpanded$.pipe(\n tap(isExpanded => {\n this.positionCss = isExpanded ? NotificationPositionCss.WithSidePanel : NotificationPositionCss.WithoutPanel;\n })\n );\n }\n\n setDefaultSettings(duration: number, closable: boolean) {\n this.defaultDuration = duration;\n this.defaultClosable = closable;\n }\n\n success(\n message: SnackbarErrorMessage | string,\n formatOptions: any[] = [],\n duration: number = undefined,\n closable: boolean = undefined\n ) {\n this.openNotification(\n this.formatMessage(message, formatOptions),\n SnackBarCss.Success,\n typeof duration === 'undefined' ? this.defaultDuration : duration,\n typeof closable === 'undefined' ? this.defaultClosable : closable\n );\n }\n\n error(message: SnackbarErrorMessage | string, duration: number = undefined, closable: boolean = undefined) {\n this.openNotification(\n message,\n SnackBarCss.Failure,\n typeof duration === 'undefined' ? this.defaultDuration : duration,\n typeof closable === 'undefined' ? this.defaultClosable : closable\n );\n }\n\n info(message: SnackbarErrorMessage | string, duration: number = undefined, closable: boolean = undefined) {\n this.openNotification(\n message,\n SnackBarCss.Info,\n typeof duration === 'undefined' ? this.defaultDuration : duration,\n typeof closable === 'undefined' ? this.defaultClosable : closable\n );\n }\n\n warning(\n message: SnackbarErrorMessage | string,\n duration: number = undefined,\n closable: boolean = undefined,\n icon?: EIcon\n ) {\n this.openNotification(\n message,\n SnackBarCss.Warning,\n typeof duration === 'undefined' ? this.defaultDuration : duration,\n typeof closable === 'undefined' ? this.defaultClosable : closable,\n icon\n );\n }\n\n defaultPermissionWarning(): void {\n this.warning('Access denied: You do not have the required permissions.');\n }\n\n private openNotification(message: string, cssClass: SnackBarCss, duration: number, closable: boolean, icon?: EIcon) {\n this._snackBarActions$.next({ action: '' });\n this.snackBarRef = this.snackBar.openFromComponent(CustomizedSnackbarComponent, {\n data: {\n message,\n icon,\n actions$: this._snackBarActions$,\n },\n duration: duration,\n panelClass: [`customized-notification`, this.positionCss, cssClass, !closable ? 'not-closable' : 'closable'],\n horizontalPosition: 'left',\n });\n }\n\n private formatMessage(message: string, formatOptions: any[]) {\n if (formatOptions?.length) {\n const args = formatOptions;\n return message.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n } else {\n return message;\n }\n }\n\n dismiss() {\n this.snackBar.dismiss();\n }\n\n resetSnackbarActions(): void {\n this._snackBarActions$.next({ action: null, actionParam: null });\n }\n}\n","\n
\n \n {{ text }}\n \n
\n
\n\n\n \n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-divider',\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DividerComponent {\n @Input() text: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { DividerComponent } from './divider.component';\n\n@NgModule({\n declarations: [DividerComponent],\n exports: [DividerComponent],\n imports: [CommonModule, MatDividerModule],\n})\nexport class DividerModule {}\n","import { Injectable } from '@angular/core';\nimport { isNil } from 'lodash';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { ISvgCircle, ISvgPath, ISvgRectangle } from '@shared/interfaces/svg-params.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconService {\n private static uniqueSvgIconId = -1;\n uniqueId = '';\n\n getIconTemplate(icon: EIcon, width = 15, height = 15, color: EColorPalette, secondColor: EColorPalette): string {\n this.uniqueId = String(++IconService.uniqueSvgIconId);\n switch (icon) {\n case EIcon.ANGLE_DOWN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 8')}\n ${this.getPath({\n d: 'M12.2929 0.292892C12.6834 -0.0976324 13.3166 -0.0976324 13.7071 0.292892C14.0976 0.683416 14.0976 1.31658 13.7071 1.70711L7.70711 7.70711C7.32853 8.08568 6.71894 8.09893 6.32428 7.73715L0.324275 2.23715C-0.0828438 1.86396 -0.110347 1.23139 0.262846 0.824274C0.636039 0.417155 1.26861 0.389652 1.67572 0.762845L6.96992 5.61586L12.2929 0.292892Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ANGLE_UP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 8')}\n ${this.getPath({\n d: 'M1.70711 7.70711C1.31658 8.09763 0.683417 8.09763 0.292893 7.70711C-0.0976317 7.31658 -0.0976317 6.68342 0.292893 6.29289L6.29289 0.292895C6.67147 -0.0856838 7.28106 -0.0989294 7.67572 0.262848L13.6757 5.76285C14.0828 6.13604 14.1103 6.76861 13.7372 7.17573C13.364 7.58285 12.7314 7.61035 12.3243 7.23716L7.03008 2.38414L1.70711 7.70711Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ANGLE_LEFT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 9 14')}\n ${this.getPath({\n d: 'M8.20711 1.70711C8.59763 1.31658 8.59763 0.683418 8.20711 0.292893C7.81658 -0.0976311 7.18342 -0.0976311 6.79289 0.292893L0.792895 6.29289C0.414316 6.67147 0.40107 7.28106 0.762847 7.67572L6.26285 13.6757C6.63604 14.0828 7.26861 14.1103 7.67573 13.7372C8.08284 13.364 8.11035 12.7314 7.73716 12.3243L2.88414 7.03008L8.20711 1.70711Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ANGLE_RIGHT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 9 14')}\n ${this.getPath({\n d: 'M0.792892 1.70711C0.402368 1.31658 0.402368 0.683418 0.792892 0.292893C1.18342 -0.0976311 1.81658 -0.0976311 2.20711 0.292893L8.20711 6.29289C8.58568 6.67147 8.59893 7.28106 8.23715 7.67572L2.73715 13.6757C2.36396 14.0828 1.73139 14.1103 1.32427 13.7372C0.917155 13.364 0.889652 12.7314 1.26284 12.3243L6.11586 7.03008L0.792892 1.70711Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BOARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2 2.94737C2 2.42415 2.42415 2 2.94737 2V2H21.0526V2C21.5758 2 22 2.42417 22 2.9474V3C22 3.55228 21.5523 4 21 4V4V17C21 17.5523 20.5523 18 20 18H16L18 22L16 21.9975L14 18H10L8 22H6L8 18H3.99625C3.44543 18 2.99833 17.5546 2.99625 17.0038L2.94737 4V4C2.42415 4 2 3.57585 2 3.05263V2.94737ZM5 4H19V16H5V4Z',\n fill: color || EColorPalette.cGray,\n opacity: 0.3,\n })}\n ${this.getRectangle({ x: 7, y: 6, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getRectangle({ x: 7, y: 11, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getRectangle({ x: 13, y: 6, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getRectangle({ x: 13, y: 11, width: 4, height: 3, fill: color || EColorPalette.cGray })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.WARNING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getRectangle({ x: 11, y: 7, width: 2, height: 8, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getRectangle({ x: 11, y: 16, width: 2, height: 2, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.WARNING2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 25')}\n ${this.getPath({\n d: 'M13.3944 4.96361C12.995 4.30995 12.039 4.32977 11.667 4.99942L3.32536 20.0144C2.95506 20.6809 3.43703 21.5 4.19951 21.5H21.7169C22.4979 21.5 22.9774 20.6449 22.5702 19.9785L13.3944 4.96361Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getRectangle({ x: 11.5, y: 9.5, width: 2, height: 7, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getRectangle({ x: 11.5, y: 17.5, width: 2, height: 2, rx: 1, fill: color || EColorPalette.cRed })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HOME_HEART: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M6.10038 12.6225L17.6952 5.72247C17.9373 5.57852 18.2155 5.50235 18.4992 5.50235C18.7829 5.50235 19.0611 5.57852 19.3032 5.72247L30.8981 12.6225C31.3491 12.8904 31.7219 13.2665 31.9805 13.7149C32.2391 14.1633 32.375 14.6688 32.375 15.183V28.5C32.375 29.2956 32.0501 30.0587 31.4719 30.6213C30.8937 31.1839 30.1094 31.5 29.2917 31.5H7.70833C6.89058 31.5 6.10632 31.1839 5.52809 30.6213C4.94985 30.0587 4.625 29.2956 4.625 28.5V15.183C4.62487 14.669 4.76048 14.1635 5.01883 13.7152C5.27718 13.2668 5.6496 12.8905 6.10038 12.6225Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M18.5 28C22.5068 28 25.7549 24.7439 25.7549 20.7273C25.7549 16.7107 22.5068 13.4545 18.5 13.4545C14.4932 13.4545 11.2451 16.7107 11.2451 20.7273C11.2451 24.7439 14.4932 28 18.5 28Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M19.2257 17.0891C19.2257 16.6885 18.9008 16.3636 18.5002 16.3636C18.0995 16.3636 17.7747 16.6885 17.7747 17.0891V20H14.8745C14.4728 20 14.1472 20.3256 14.1472 20.7273C14.1472 21.1289 14.4728 21.4546 14.8745 21.4546H17.7747V24.3654C17.7747 24.7661 18.0995 25.0909 18.5002 25.0909C18.9008 25.0909 19.2257 24.7661 19.2257 24.3654V21.4546H22.1258C22.5275 21.4546 22.8531 21.1289 22.8531 20.7273C22.8531 20.3256 22.5275 20 22.1258 20H19.2257V17.0891Z',\n fill: color || EColorPalette.cRed,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_DOWN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 22 22')}\n ${this.getRectangle({\n x: 10.0833,\n y: 4.58334,\n width: 1.83333,\n height: 12.8333,\n rx: 0.916667,\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M6.1481 10.3518C5.79012 9.99384 5.20972 9.99384 4.85174 10.3518C4.49376 10.7098 4.49376 11.2902 4.85174 11.6482L10.3517 17.1482C10.6988 17.4952 11.2576 17.5074 11.6193 17.1757L17.1193 12.1341C17.4925 11.792 17.5177 11.2121 17.1756 10.8389C16.8336 10.4657 16.2537 10.4405 15.8805 10.7826L11.0275 15.2312L6.1481 10.3518Z',\n fill: color || EColorPalette.cRed,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_UP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 22 22')}\n ${this.getRectangle({\n x: 10.0833,\n y: 9.16666,\n width: 1.83333,\n height: 9.16667,\n rx: 0.916667,\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M6.1481 11.6482C5.79012 12.0062 5.20972 12.0062 4.85174 11.6482C4.49376 11.2902 4.49376 10.7098 4.85174 10.3518L10.3517 4.85181C10.6988 4.50478 11.2576 4.49264 11.6193 4.82427L17.1193 9.86594C17.4925 10.208 17.5177 10.7879 17.1756 11.1611C16.8336 11.5343 16.2537 11.5595 15.8805 11.2174L11.0275 6.76879L6.1481 11.6482Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_LEFT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getRectangle({\n x: 0,\n y: 0,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'matrix(0 -1 -1 0 19 13)',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M12.7071 17.2929C13.0976 17.6834 13.0976 18.3166 12.7071 18.7071C12.3166 19.0976 11.6834 19.0976 11.2929 18.7071L5.29289 12.7071C4.91432 12.3285 4.90107 11.7189 5.26285 11.3243L10.7628 5.32428C11.136 4.91716 11.7686 4.88965 12.1757 5.26285C12.5828 5.63604 12.6103 6.26861 12.2372 6.67572L7.38414 11.9699L12.7071 17.2929Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.WAITING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M16.1875 3.75C16.1875 2.92157 16.8591 2.25 17.6875 2.25H19.3125C20.1409 2.25 20.8125 2.92157 20.8125 3.75V7.5C20.8125 8.32843 20.1409 9 19.3125 9H17.6875C16.8591 9 16.1875 8.32843 16.1875 7.5V3.75ZM24.2001 9.35195C23.6063 9.92966 23.6063 10.8663 24.2001 11.444L25.3203 12.5339C25.914 13.1116 26.8767 13.1116 27.4705 12.5339L30.2258 9.85303C30.8196 9.27532 30.8196 8.33867 30.2258 7.76096L29.1056 6.67105C28.5119 6.09334 27.5492 6.09334 26.9555 6.67105L24.2001 9.35195ZM29.25 15.75C28.4216 15.75 27.75 16.4216 27.75 17.25V18.75C27.75 19.5784 28.4216 20.25 29.25 20.25H33.1875C34.0159 20.25 34.6875 19.5784 34.6875 18.75V17.25C34.6875 16.4216 34.0159 15.75 33.1875 15.75H29.25ZM24.2001 24.636C23.6063 25.2137 23.6063 26.1503 24.2001 26.728L26.9555 29.4089C27.5492 29.9866 28.5119 29.9866 29.1056 29.4089L30.2258 28.319C30.8196 27.7413 30.8196 26.8047 30.2258 26.2269L27.4705 23.546C26.8767 22.9683 25.914 22.9683 25.3203 23.546L24.2001 24.636ZM3.8125 15.75C2.98407 15.75 2.3125 16.4216 2.3125 17.25V18.75C2.3125 19.5784 2.98407 20.25 3.8125 20.25H7.75C8.57843 20.25 9.25 19.5784 9.25 18.75V17.25C9.25 16.4216 8.57843 15.75 7.75 15.75H3.8125ZM17.6875 27C16.8591 27 16.1875 27.6716 16.1875 28.5V32.25C16.1875 33.0784 16.8591 33.75 17.6875 33.75H19.3125C20.1409 33.75 20.8125 33.0784 20.8125 32.25V28.5C20.8125 27.6716 20.1409 27 19.3125 27H17.6875ZM6.85634 9.85302C6.26258 9.27531 6.26258 8.33866 6.85634 7.76096L7.97653 6.67104C8.57029 6.09333 9.53295 6.09333 10.1267 6.67104L12.8821 9.35195C13.4758 9.92965 13.4758 10.8663 12.8821 11.444L11.7619 12.5339C11.1681 13.1116 10.2055 13.1116 9.61171 12.5339L6.85634 9.85302ZM6.85634 28.319C6.26258 27.7413 6.26258 26.8047 6.85634 26.2269L9.61171 23.546C10.2055 22.9683 11.1681 22.9683 11.7619 23.546L12.8821 24.636C13.4758 25.2137 13.4758 26.1503 12.8821 26.728L10.1267 29.4089C9.53295 29.9866 8.57028 29.9866 7.97653 29.4089L6.85634 28.319Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.FILE_PLUS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M9.02984 3H21.486C21.8338 3 22.1707 3.12082 22.4392 3.34179L30.2866 9.79998C30.6328 10.0849 30.8334 10.5098 30.8334 10.9582V30.125C30.8334 32.8108 30.8019 33 27.9703 33H9.02984C6.19827 33 6.16675 32.8108 6.16675 30.125V5.875C6.16675 3.18919 6.19827 3 9.02984 3Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M16.9584 21L13.8751 21C13.0236 21 12.3334 20.3284 12.3334 19.5C12.3334 18.6716 13.0236 18 13.8751 18L16.9584 18L16.9584 15C16.9584 14.1716 17.6486 13.5 18.5001 13.5C19.3515 13.5 20.0417 14.1716 20.0417 15L20.0417 18L23.1251 18C23.9765 18 24.6667 18.6716 24.6667 19.5C24.6667 20.3284 23.9765 21 23.1251 21L20.0417 21L20.0417 24C20.0417 24.8284 19.3515 25.5 18.5001 25.5C17.6486 25.5 16.9584 24.8284 16.9584 24L16.9584 21Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HOME: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M6.10038 12.6225L17.6952 5.72247C17.9373 5.57852 18.2155 5.50235 18.4992 5.50235C18.7829 5.50235 19.0611 5.57852 19.3032 5.72247L30.8981 12.6225C31.3491 12.8904 31.7219 13.2665 31.9805 13.7149C32.2391 14.1633 32.375 14.6688 32.375 15.183V28.5C32.375 29.2956 32.0501 30.0587 31.4719 30.6213C30.8937 31.1839 30.1094 31.5 29.2917 31.5H7.70833C6.89058 31.5 6.10632 31.1839 5.52809 30.6213C4.94985 30.0587 4.625 29.2956 4.625 28.5V15.183C4.62487 14.669 4.76048 14.1635 5.01883 13.7152C5.27718 13.2668 5.6496 12.8905 6.10038 12.6225ZM15.4167 19.5C15.0078 19.5 14.6157 19.658 14.3265 19.9393C14.0374 20.2206 13.875 20.6021 13.875 21V25.5C13.875 25.8978 14.0374 26.2793 14.3265 26.5606C14.6157 26.8419 15.0078 27 15.4167 27H21.5833C21.9922 27 22.3843 26.8419 22.6735 26.5606C22.9626 26.2793 23.125 25.8978 23.125 25.5V21C23.125 20.6021 22.9626 20.2206 22.6735 19.9393C22.3843 19.658 21.9922 19.5 21.5833 19.5H15.4167Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SAD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 130 130')}\n ${this.getRectangle({\n x: 10.8335,\n y: 10.8333,\n width: 108.333,\n height: 108.333,\n rx: 54.1667,\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M33.4103 89.0781C31.7509 91.5672 32.4235 94.9303 34.9126 96.5897C37.4017 98.2491 40.7648 97.5765 42.4242 95.0874C48.6915 85.6865 56.0865 81.2494 65.0006 81.2494C73.9146 81.2494 81.3097 85.6865 87.577 95.0874C89.2364 97.5765 92.5994 98.2491 95.0885 96.5897C97.5776 94.9303 98.2503 91.5672 96.5908 89.0781C88.4137 76.8124 77.7532 70.4161 65.0006 70.4161C52.2479 70.4161 41.5875 76.8124 33.4103 89.0781Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPIRATIONS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getUrlClip()}\n ${this.getPath({\n d: 'M31.2188 15.75H5.78118C5.14307 15.75 4.625 16.1922 4.625 16.7368V28.5395C4.625 30.1717 6.18132 31.5 8.09375 31.5H28.9062C30.8187 31.5 32.375 30.1717 32.375 28.5395V16.7368C32.375 16.1922 31.8569 15.75 31.2188 15.75Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M28.9062 7.875H8.09375C6.17793 7.875 4.625 9.38596 4.625 11.25V14.6699H32.375V11.25C32.375 9.38596 30.8221 7.875 28.9062 7.875Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.5626 4.5H10.4064C9.76807 4.5 9.25 5.00407 9.25 5.62493V10.1251C9.25 10.7459 9.76807 11.25 10.4064 11.25H11.5626C12.2009 11.25 12.7188 10.7459 12.7188 10.1251V5.62493C12.7188 5.00407 12.2009 4.5 11.5626 4.5Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getPath({\n d: 'M26.5936 4.5H25.4374C24.7991 4.5 24.2812 5.00407 24.2812 5.62493V10.1251C24.2812 10.7459 24.7991 11.25 25.4374 11.25H26.5936C27.2319 11.25 27.75 10.7459 27.75 10.1251V5.62493C27.75 5.00407 27.2319 4.5 26.5936 4.5Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getEndUrlClip()}\n ${this.getSvgEndTemplate()}\n ${this.getDefsPart()}\n ${this.getClipPath()}\n ${this.getClipPathRect()}\n ${this.endClipPath()}\n ${this.endDefsPart()}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SIGN_OUT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 36')}\n ${this.getPath({\n d: 'M21.5846 10.5C21.5846 11.3284 22.2745 12 23.1255 12C23.9766 12 24.6665 11.3284 24.6665 10.5V9C24.6665 5.68629 21.9068 3 18.5026 3H9.25791C5.85363 3 3.09391 5.68629 3.09391 9V27C3.09391 30.3137 5.85363 33 9.25791 33H18.5133C21.9175 33 24.6772 30.3137 24.6772 27V25.5C24.6772 24.6716 23.9873 24 23.1362 24C22.2852 24 21.5953 24.6716 21.5953 25.5V27C21.5953 28.6569 20.2154 30 18.5133 30H9.25791C7.55577 30 6.17591 28.6569 6.17591 27V9C6.17591 7.34315 7.55577 6 9.25791 6H18.5026C20.2047 6 21.5846 7.34315 21.5846 9V10.5Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n x: 30.8335,\n y: 16.5,\n width: 3,\n height: 18.5,\n rx: 1,\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n transform: 'rotate(90 30.8335 16.5)',\n })},\n ${this.getPath({\n d: 'M26.66 14.5607C26.058 13.9749 26.058 13.0251 26.66 12.4393C27.2621 11.8536 28.2382 11.8536 28.8403 12.4393L33.4653 16.9393C34.0673 17.5251 34.0673 18.4749 33.4653 19.0607L28.8403 23.5607C28.2382 24.1464 27.2621 24.1464 26.66 23.5607C26.058 22.9749 26.058 22.0251 26.66 21.4393L30.1949 18L26.66 14.5607Z',\n fill: color || EColorPalette.cGreen,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.FORWARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M13 9.99997V5.6701C13 5.02297 13.7646 4.67961 14.2483 5.10955L21.4055 11.4715C21.728 11.7582 21.7427 12.2573 21.4375 12.5624L14.2803 19.7196C13.8078 20.1921 13 19.8575 13 19.1893V15C11.2455 14.8943 6.13692 14.9653 4.50643 14.9914C4.22674 14.9959 3.99999 14.7705 3.99999 14.4907V10.505C3.99999 10.2269 4.2243 10.0022 4.5024 10.0047C6.29384 10.021 12.2993 10.0698 13 9.99997Z',\n fill: color || EColorPalette.cGray3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.GREEN_FLAG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M2.04175 1.75H2.91675V11.375C2.91675 11.6071 2.82456 11.8296 2.66047 11.9937C2.49637 12.1578 2.27381 12.25 2.04175 12.25C1.80968 12.25 1.58712 12.1578 1.42303 11.9937C1.25894 11.8296 1.16675 11.6071 1.16675 11.375V2.625C1.16675 2.39294 1.25894 2.17038 1.42303 2.00628C1.58712 1.84219 1.80968 1.75 2.04175 1.75Z',\n fill: color || EColorPalette.cGreen2,\n })}\n ${this.getPath({\n d: 'M4.08325 1.75H11.5237C11.6365 1.7498 11.747 1.78235 11.8417 1.84368C11.9365 1.90502 12.0114 1.99251 12.0574 2.09556C12.1034 2.19861 12.1185 2.31279 12.1009 2.42426C12.0833 2.53573 12.0337 2.63971 11.9583 2.72358L10.2083 4.66667L11.9583 6.60975C12.0337 6.69363 12.0833 6.7976 12.1009 6.90907C12.1185 7.02054 12.1034 7.13472 12.0574 7.23777C12.0114 7.34082 11.9365 7.42832 11.8417 7.48965C11.747 7.55099 11.6365 7.58353 11.5237 7.58333H4.08325V1.75Z',\n fill: color || EColorPalette.cGreen2,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DESIGN_PIN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 48 48')}\n ${this.getPath({\n d: 'M23.3471 16.6617L29.9987 12.1998L28.2427 10.4438C27.4617 9.66276 27.4617 8.39643 28.2427 7.61539L31.0712 4.78696C31.8522 4.00591 33.1185 4.00591 33.8996 4.78696L45.2133 16.1007C45.9944 16.8817 45.9944 18.148 45.2133 18.9291L42.3849 21.7575C41.6038 22.5386 40.3375 22.5386 39.5564 21.7575L37.8006 20.0016L33.3386 26.6533C33.8529 28.5048 33.9971 30.4642 33.733 32.4187L32.869 38.8118C32.7211 39.9064 31.7138 40.6739 30.6192 40.5259C30.1852 40.4673 29.7825 40.2678 29.4728 39.9582L10.0421 20.5274C9.26104 19.7464 9.26104 18.4801 10.0421 17.699C10.3517 17.3893 10.7545 17.1899 11.1885 17.1312L17.5816 16.2673C19.5361 16.0032 21.4955 16.1473 23.3471 16.6617V16.6617Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M17.636 28.1211L9.55477 36.2023L8.4436 41.5561L13.7974 40.445L21.8786 32.3637L17.636 28.1211Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.YELLOW_FLAG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M2.04175 1.75H2.91675V11.375C2.91675 11.6071 2.82456 11.8296 2.66047 11.9937C2.49637 12.1578 2.27381 12.25 2.04175 12.25C1.80968 12.25 1.58712 12.1578 1.42303 11.9937C1.25894 11.8296 1.16675 11.6071 1.16675 11.375V2.625C1.16675 2.39294 1.25894 2.17038 1.42303 2.00628C1.58712 1.84219 1.80968 1.75 2.04175 1.75Z',\n fill: color || EColorPalette.cYellow,\n })}\n ${this.getPath({\n d: 'M4.08325 1.75H11.5237C11.6365 1.7498 11.747 1.78235 11.8417 1.84368C11.9365 1.90502 12.0114 1.99251 12.0574 2.09556C12.1034 2.19861 12.1185 2.31279 12.1009 2.42426C12.0833 2.53573 12.0337 2.63971 11.9583 2.72358L10.2083 4.66667L11.9583 6.60975C12.0337 6.69363 12.0833 6.7976 12.1009 6.90907C12.1185 7.02054 12.1034 7.13472 12.0574 7.23777C12.0114 7.34082 11.9365 7.42832 11.8417 7.48965C11.747 7.55099 11.6365 7.58353 11.5237 7.58333H4.08325V1.75Z',\n fill: color || EColorPalette.cYellow,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.RED_FLAG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M2.04175 1.75H2.91675V11.375C2.91675 11.6071 2.82456 11.8296 2.66047 11.9937C2.49637 12.1578 2.27381 12.25 2.04175 12.25C1.80968 12.25 1.58712 12.1578 1.42303 11.9937C1.25894 11.8296 1.16675 11.6071 1.16675 11.375V2.625C1.16675 2.39294 1.25894 2.17038 1.42303 2.00628C1.58712 1.84219 1.80968 1.75 2.04175 1.75Z',\n fill: color || EColorPalette.cRed,\n })}\n ${this.getPath({\n d: 'M4.08325 1.75H11.5237C11.6365 1.7498 11.747 1.78235 11.8417 1.84368C11.9365 1.90502 12.0114 1.99251 12.0574 2.09556C12.1034 2.19861 12.1185 2.31279 12.1009 2.42426C12.0833 2.53573 12.0337 2.63971 11.9583 2.72358L10.2083 4.66667L11.9583 6.60975C12.0337 6.69363 12.0833 6.7976 12.1009 6.90907C12.1185 7.02054 12.1034 7.13472 12.0574 7.23777C12.0114 7.34082 11.9365 7.42832 11.8417 7.48965C11.747 7.55099 11.6365 7.58353 11.5237 7.58333H4.08325V1.75Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.REPEAT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M12.8395 9.38404C12.5096 9.62892 12.0415 9.39342 12.0415 8.98255V8H8.0415C5.83236 8 4.0415 9.79086 4.0415 12V13C4.0415 14.6569 5.38465 16 7.0415 16V18C4.28008 18 2.0415 15.7614 2.0415 13V12C2.0415 8.68629 4.7278 6 8.0415 6H12.0415V4.728C12.0415 4.31643 12.511 4.08112 12.8407 4.3274L15.6977 6.46137C15.966 6.66171 15.9654 7.06392 15.6965 7.26345L12.8395 9.38404Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M17.0414 6V8C18.6982 8 20.0414 9.34315 20.0414 11V12C20.0414 14.2091 18.2505 16 16.0414 16H12.0997V14.728C12.0997 14.3164 11.6302 14.0811 11.3005 14.3274L8.44347 16.4614C8.17524 16.6617 8.17585 17.0639 8.44468 17.2635L11.3017 19.384C11.6316 19.6289 12.0997 19.3934 12.0997 18.9825V18H16.0414C19.3551 18 22.0414 15.3137 22.0414 12V11C22.0414 8.23858 19.8028 6 17.0414 6Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOLLAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 25')}\n ${this.getRectangle({\n x: 11.5,\n y: 2.44792,\n width: 2,\n height: 4,\n rx: 1,\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })},\n ${this.getRectangle({\n x: 11.5,\n y: 16.4479,\n width: 2,\n height: 4,\n rx: 1,\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })},\n ${this.getPath({\n d: 'M15.4929 8.49192C15.2142 8.13725 14.8501 7.85542 14.4004 7.64642C13.9507 7.43741 13.5169 7.33292 13.0989 7.33292C12.8836 7.33292 12.6651 7.35192 12.4434 7.38992C12.2217 7.42792 12.0222 7.50075 11.8449 7.60842C11.6676 7.71608 11.5187 7.85541 11.3984 8.02642C11.2781 8.19742 11.2179 8.41591 11.2179 8.68192C11.2179 8.90992 11.2654 9.09991 11.3604 9.25192C11.4554 9.40392 11.5947 9.53691 11.7784 9.65092C11.9621 9.76492 12.1806 9.86942 12.4339 9.96442C12.6872 10.0594 12.9722 10.1576 13.2889 10.2589C13.7449 10.4109 14.2199 10.5787 14.7139 10.7624C15.2079 10.9461 15.6576 11.1899 16.0629 11.4939C16.4682 11.7979 16.8039 12.1747 17.0699 12.6244C17.3359 13.0741 17.4689 13.6346 17.4689 14.3059C17.4689 15.0786 17.3264 15.7467 17.0414 16.3104C16.7564 16.8741 16.3732 17.3396 15.8919 17.7069C15.4106 18.0743 14.8596 18.3466 14.2389 18.5239C13.6182 18.7012 12.9786 18.7899 12.3199 18.7899C11.3572 18.7899 10.4262 18.6221 9.52691 18.2864C8.62757 17.9507 7.88025 17.4726 7.28491 16.8519L9.41291 14.6859C9.74225 15.0913 10.1761 15.4301 10.7144 15.7024C11.2527 15.9748 11.7879 16.1109 12.3199 16.1109C12.5606 16.1109 12.7949 16.0856 13.0229 16.0349C13.2509 15.9842 13.4504 15.9019 13.6214 15.7879C13.7924 15.6739 13.9286 15.5219 14.0299 15.3319C14.1312 15.1419 14.1819 14.9139 14.1819 14.6479C14.1819 14.3946 14.1186 14.1792 13.9919 14.0019C13.8652 13.8246 13.6847 13.6631 13.4504 13.5174C13.2161 13.3717 12.9247 13.2387 12.5764 13.1184C12.2281 12.9981 11.8322 12.8682 11.3889 12.7289C10.9582 12.5896 10.5371 12.4249 10.1254 12.2349C9.71374 12.0449 9.34641 11.8011 9.02341 11.5034C8.70041 11.2057 8.44075 10.8448 8.24441 10.4204C8.04808 9.99608 7.94991 9.47992 7.94991 8.87192C7.94991 8.12458 8.10191 7.48492 8.40591 6.95292C8.70991 6.42091 9.10891 5.98392 9.60291 5.64192C10.0969 5.29991 10.6542 5.04975 11.2749 4.89142C11.8956 4.73308 12.5226 4.65392 13.1559 4.65392C13.9159 4.65392 14.6917 4.79325 15.4834 5.07192C16.2751 5.35058 16.9686 5.76225 17.5639 6.30692L15.4929 8.49192Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.DONE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cGreen2,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M16.769 7.81769C17.1458 7.41393 17.7786 7.39211 18.1823 7.76895C18.5861 8.14578 18.6079 8.77857 18.2311 9.18232L11.2311 16.6823C10.8655 17.074 10.2561 17.108 9.84923 16.7593L6.34923 13.7593C5.9299 13.3998 5.88134 12.7685 6.24076 12.3492C6.60018 11.9299 7.23148 11.8813 7.65081 12.2407L10.423 14.6169L16.769 7.81769Z',\n fill: color || EColorPalette.cGreen2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DONE_WB: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M16.769 7.81769C17.1458 7.41393 17.7786 7.39211 18.1823 7.76895C18.5861 8.14578 18.6079 8.77857 18.2311 9.18232L11.2311 16.6823C10.8655 17.074 10.2561 17.108 9.84923 16.7593L6.34923 13.7593C5.9299 13.3998 5.88134 12.7685 6.24076 12.3492C6.60018 11.9299 7.23148 11.8813 7.65081 12.2407L10.423 14.6169L16.769 7.81769Z',\n fill: color || EColorPalette.cGreen2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.QUESTION: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cYellow,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M10.5909 13.209V14.868H11.8509C14.3919 14.868 16.3869 12.915 16.3869 10.395C16.3869 7.875 14.3919 5.922 11.8509 5.922C9.30994 5.922 7.33594 7.875 7.33594 10.395H9.12094C9.12094 8.799 10.2339 7.581 11.8509 7.581C13.4469 7.581 14.6019 8.799 14.6019 10.395C14.6019 11.991 13.4469 13.209 11.8509 13.209H10.5909ZM11.9999 16C11.4477 16 10.9999 16.4477 10.9999 17C10.9999 17.5523 11.4477 18 11.9999 18C12.5522 18 12.9999 17.5523 12.9999 17C12.9999 16.4477 12.5522 16 11.9999 16Z',\n fill: color || EColorPalette.cYellow,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ERROR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cRed,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M16.2782 7.79289C15.8877 7.40237 15.2545 7.40237 14.864 7.79289L12.0355 10.6213L9.20711 7.79289C8.81658 7.40237 8.18342 7.40237 7.79289 7.79289C7.40237 8.18342 7.40237 8.81658 7.79289 9.20711L10.6213 12.0355L7.79289 14.864C7.40237 15.2545 7.40237 15.8877 7.79289 16.2782C8.18342 16.6687 8.81658 16.6687 9.20711 16.2782L12.0355 13.4497L14.864 16.2782C15.2545 16.6687 15.8877 16.6687 16.2782 16.2782C16.6687 15.8877 16.6687 15.2545 16.2782 14.864L13.4497 12.0355L16.2782 9.20711C16.6687 8.81658 16.6687 8.18342 16.2782 7.79289Z',\n fill: color || EColorPalette.cRed,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.PERMISSION_ERROR: {\n return `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n }\n\n case EIcon.SEARCH: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M14.2929 16.7071C13.9024 16.3166 13.9024 15.6834 14.2929 15.2929C14.6834 14.9024 15.3166 14.9024 15.7071 15.2929L19.7071 19.2929C20.0976 19.6834 20.0976 20.3166 19.7071 20.7071C19.3166 21.0976 18.6834 21.0976 18.2929 20.7071L14.2929 16.7071Z',\n fill: color || EColorPalette.cGray,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M4 11C4 14.866 7.13401 18 11 18C14.866 18 18 14.866 18 11C18 7.13401 14.866 4 11 4C7.13401 4 4 7.13401 4 11ZM16 11C16 13.7614 13.7614 16 11 16C8.23858 16 6 13.7614 6 11C6 8.23858 8.23858 6 11 6C13.7614 6 16 8.23858 16 11Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TICK: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 11 8')}\n ${this.getPath({\n d: 'M10.1424 0.306021C10.5504 0.71405 10.5504 1.37559 10.1424 1.78362L4.23202 7.69398C3.82399 8.10201 3.16245 8.10201 2.75442 7.69398L2.01562 6.95518L8.6648 0.306021C9.07283 -0.102007 9.73437 -0.102007 10.1424 0.306021Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M0.306024 3.76769C0.714052 3.35966 1.37559 3.35966 1.78362 3.76769L4.97077 6.95484L4.23197 7.69364C3.82395 8.10167 3.16241 8.10167 2.75438 7.69364L0.306003 5.24527C-0.102005 4.83726 -0.102005 4.17572 0.306024 3.76769Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}`;\n }\n\n case EIcon.TIME_SCHEDULE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M10.4646 7.96165C10.4846 7.70115 10.7018 7.5 10.9631 7.5H11.0476C11.3044 7.5 11.5195 7.69465 11.5451 7.95025L12.0001 12.5L15.2481 14.356C15.4039 14.4451 15.5001 14.6107 15.5001 14.7902V14.8454C15.5001 15.1751 15.1866 15.4145 14.8685 15.3278L10.3987 14.1087C10.1673 14.0456 10.0134 13.8271 10.0318 13.588L10.4646 7.96165Z',\n fill: color || EColorPalette.cGray4,\n opacity: 1,\n })}\n ${this.getPath({\n d: 'M6.20102 1.41818C5.93691 1.10343 5.42697 1.2239 5.33164 1.62357L4.20314 6.3547C4.12546 6.68035 4.38353 6.98885 4.71778 6.96991L9.58475 6.6941C9.99566 6.67082 10.204 6.18879 9.93948 5.87351L8.74872 4.45442C9.62236 4.15588 10.5488 3.99995 11.5 3.99995C16.1944 3.99995 20 7.80553 20 12.5C20 17.1944 16.1944 21 11.5 21C6.80558 21 3 17.1944 3 12.5C3 11.7119 3.10672 10.94 3.31481 10.1982L1.38913 9.65801C1.13559 10.5619 1 11.5151 1 12.5C1 18.2989 5.70101 23 11.5 23C17.299 23 22 18.2989 22 12.5C22 6.70096 17.299 1.99995 11.5 1.99995C10.0413 1.99995 8.65217 2.29739 7.3898 2.83491L6.20102 1.41818Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.THUNDER_CIRCLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11 16.8229C11 17.6144 12.0669 17.8662 12.4208 17.1584L15.4573 11.0854C15.7066 10.5867 15.344 10 14.7865 10H12V7.17705C12 6.38563 10.9331 6.13377 10.5792 6.84164L7.54271 12.9146C7.29337 13.4133 7.65599 14 8.21353 14H11V16.8229Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SHIELD_USER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M4 4.00006L11.6314 2.56917C11.875 2.52349 12.125 2.52349 12.3686 2.56917L20 4.00006V11.9033C20 15.696 18.0462 19.2212 14.83 21.2313L12.53 22.6688C12.2057 22.8715 11.7943 22.8715 11.47 22.6688L9.17001 21.2313C5.95382 19.2212 4 15.696 4 11.9033L4 4.00006Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 11C10.8954 11 10 10.1046 10 9C10 7.89543 10.8954 7 12 7C13.1046 7 14 7.89543 14 9C14 10.1046 13.1046 11 12 11Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M7.00036 16.4995C7.2157 13.5166 9.36773 12 11.9907 12C14.6507 12 16.836 13.4332 16.9988 16.5C17.0053 16.6222 16.9988 17 16.5815 17C14.5228 17 11.4637 17 7.40417 17C7.26484 17 6.98863 16.662 7.00036 16.4995Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.PORTFOLIOS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2 19.5C2 20.3284 2.67157 21 3.5 21H20.5C21.3284 21 22 20.3284 22 19.5V8.5C22 7.67157 21.3284 7 20.5 7H10L7.43934 4.43934C7.15804 4.15804 6.7765 4 6.37868 4H3.5C2.67157 4 2 4.67157 2 5.5V19.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 6.76172,\n y: 14.127,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 6.76172 14.127)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 13.0479,\n y: 14.127,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 13.0479 14.127)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 9.9043,\n y: 17.2695,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 9.9043 17.2695)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 9.9043,\n y: 10.9844,\n width: 3.14286,\n height: 3.14286,\n rx: 0.75,\n transform: 'rotate(-45 9.9043 10.9844)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.STAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 16 16')}\n ${this.getPath({\n d: 'M8 12.5003L5.27726 13.9318C4.95137 14.1031 4.54828 13.9779 4.37695 13.652C4.30872 13.5222 4.28518 13.3735 4.30996 13.229L4.83 10.197L2.62711 8.04973C2.36345 7.79273 2.35806 7.37065 2.61506 7.107C2.7174 7.00201 2.85149 6.93368 2.99658 6.9126L6.0409 6.47023L7.40236 3.71162C7.56531 3.38145 7.96506 3.24589 8.29523 3.40884C8.4267 3.47372 8.53312 3.58014 8.59801 3.71162L9.95947 6.47023L13.0038 6.9126C13.3681 6.96555 13.6206 7.30384 13.5677 7.6682C13.5466 7.8133 13.4783 7.94739 13.3733 8.04973L11.1704 10.197L11.6904 13.229C11.7526 13.5919 11.5089 13.9366 11.146 13.9988C11.0015 14.0236 10.8529 14 10.7231 13.9318L8 12.5003Z',\n fill: color || EColorPalette.cGray5,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HALF_STAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M12 17.9999L16.0844 20.1472C16.279 20.2496 16.502 20.2849 16.7188 20.2477C17.2631 20.1544 17.6287 19.6374 17.5353 19.0931L16.7553 14.545L20.0596 11.3241C20.2171 11.1706 20.3196 10.9695 20.3512 10.7518C20.4306 10.2053 20.0519 9.69783 19.5054 9.61841L14.9389 8.95486L12.8967 4.81693C12.7994 4.61972 12.6398 4.46009 12.4426 4.36276C12.3 4.29242 12.1489 4.25916 12 4.25928V17.9999Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 4.25928C11.6316 4.25956 11.2774 4.46421 11.1033 4.81693L9.06111 8.95486L4.49463 9.61841C4.27699 9.65004 4.07585 9.75252 3.92234 9.91001C3.53684 10.3055 3.54493 10.9386 3.94042 11.3241L7.24475 14.545L6.4647 19.0931C6.42753 19.3098 6.46284 19.5328 6.56518 19.7274C6.82218 20.2163 7.42681 20.4042 7.91565 20.1472L12 17.9999V4.25928Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.PLUS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 4.5,\n y: 11,\n width: 16,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 13.5,\n y: 4,\n width: 16,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n transform: 'rotate(90 13.5 4)',\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.USER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7C16 9.20914 14.2091 11 12 11Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M3.00065 20.1992C3.38826 15.4265 7.26191 13 11.9833 13C16.7712 13 20.7049 15.2932 20.9979 20.2C21.0096 20.3955 20.9979 21 20.2467 21C16.5411 21 11.0347 21 3.7275 21C3.47671 21 2.97954 20.4592 3.00065 20.1992Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.USER_GROUP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 7C5 9.20914 6.79086 11 9 11C11.2091 11 13 9.20914 13 7C13 4.79086 11.2091 3 9 3C6.79086 3 5 4.79086 5 7ZM15 11C15 12.6569 16.3431 14 18 14C19.6569 14 21 12.6569 21 11C21 9.34315 19.6569 8 18 8C16.3431 8 15 9.34315 15 11Z',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8.98334 13C4.26191 13 0.388259 15.4265 0.000651684 20.1992C-0.0204618 20.4592 0.476712 21 0.727502 21H17.2467C17.9979 21 18.0096 20.3955 17.9979 20.2C17.7049 15.2932 13.7712 13 8.98334 13ZM23.4559 21H19.6C19.6 18.7491 18.8563 16.6718 17.6012 15.0006C21.0077 15.0379 23.7892 16.7601 23.9985 20.4C24.0069 20.5466 23.9985 21 23.4559 21Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DASHBOARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M3 4C2.44772 4 2 4.44772 2 5V7C2 7.55228 2.44771 8 3 8H20C20.5523 8 21 7.55228 21 7V5C21 4.44772 20.5523 4 20 4H3ZM10 10C9.44772 10 9 10.4477 9 11V19C9 19.5523 9.44771 20 10 20H20C20.5523 20 21 19.5523 21 19V11C21 10.4477 20.5523 10 20 10H10Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 2,\n y: 10,\n width: 5,\n height: 10,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DASHBOARD2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M9 5C9 4.44772 9.44772 4 10 4H21C21.5523 4 22 4.44772 22 5V7C22 7.55228 21.5523 8 21 8H10C9.44772 8 9 7.55228 9 7V5ZM9 11C9 10.4477 9.44772 10 10 10H21C21.5523 10 22 10.4477 22 11V13C22 13.5523 21.5523 14 21 14H10C9.44772 14 9 13.5523 9 13V11ZM10 16C9.44772 16 9 16.4477 9 17V19C9 19.5523 9.44772 20 10 20H21C21.5523 20 22 19.5523 22 19V17C22 16.4477 21.5523 16 21 16H10Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 2,\n y: 4,\n width: 5,\n height: 16,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.DASHBOARD3: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M3.5 4C2.94772 4 2.5 4.44772 2.5 5V7C2.5 7.55228 2.94771 8 3.5 8H20.5C21.0523 8 21.5 7.55228 21.5 7V5C21.5 4.44772 21.0523 4 20.5 4H3.5ZM3.5 10C2.94772 10 2.5 10.4477 2.5 11V19C2.5 19.5523 2.94772 20 3.5 20H13.5C14.0523 20 14.5 19.5523 14.5 19V11C14.5 10.4477 14.0523 10 13.5 10H3.5Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 16.5,\n y: 10,\n width: 5,\n height: 10,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.DASHBOARD4: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2.5 5C2.5 4.44772 2.94772 4 3.5 4H20.5C21.0523 4 21.5 4.44772 21.5 5V7C21.5 7.55228 21.0523 8 20.5 8H3.5C2.94771 8 2.5 7.55228 2.5 7V5ZM2.5 11C2.5 10.4477 2.94772 10 3.5 10H13.5C14.0523 10 14.5 10.4477 14.5 11V13C14.5 13.5523 14.0523 14 13.5 14H3.5C2.94772 14 2.5 13.5523 2.5 13V11ZM3.5 16C2.94772 16 2.5 16.4477 2.5 17V19C2.5 19.5523 2.94772 20 3.5 20H13.5C14.0523 20 14.5 19.5523 14.5 19V17C14.5 16.4477 14.0523 16 13.5 16H3.5Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n x: 16.5,\n y: 10,\n width: 5,\n height: 10,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHAIR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6.54213 21.5015C6.39919 22.035 6.71578 22.5833 7.24924 22.7262C7.78271 22.8692 8.33104 22.5526 8.47399 22.0191L10.0721 16.0547C10.2151 15.5213 9.8985 14.9729 9.36504 14.83C8.83157 14.687 8.28323 15.0036 8.14029 15.5371L6.54213 21.5015ZM17.4493 21.4711C17.5922 22.0046 17.2756 22.5529 16.7422 22.6959C16.2087 22.8388 15.6604 22.5222 15.5174 21.9888L14.2145 17.1263C14.0716 16.5929 14.3882 16.0445 14.9216 15.9016C15.4551 15.7586 16.0034 16.0752 16.1464 16.6087L17.4493 21.4711Z',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8 1C6.89543 1 6 1.89543 6 3V12.5C6 12.7761 6.22386 13 6.5 13H17.5C17.7761 13 18 12.7761 18 12.5V3C18 1.89543 17.1046 1 16 1H8ZM5.5 14C4.67157 14 4 14.6716 4 15.5C4 16.3284 4.67157 17 5.5 17H18.5C19.3284 17 20 16.3284 20 15.5C20 14.6716 19.3284 14 18.5 14H5.5Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.LIBRARY: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 3C4.44772 3 4 3.44772 4 4V20C4 20.5523 4.44772 21 5 21H6C6.55228 21 7 20.5523 7 20V4C7 3.44772 6.55228 3 6 3H5ZM10 3C9.44772 3 9 3.44772 9 4V20C9 20.5523 9.44772 21 10 21H11C11.5523 21 12 20.5523 12 20V4C12 3.44772 11.5523 3 11 3H10Z',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n x: 13.4775,\n y: 3.92419,\n width: 3,\n height: 18,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.VISIBLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M3 12C3 12 5.45455 6 12 6C16.9091 6 21 12 21 12C21 12 16.9091 18 12 18C5.45455 18 3 12 3 12Z',\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 15C10.3431 15 9 13.6569 9 12C9 10.3431 10.3431 9 12 9C13.6569 9 15 10.3431 15 12C15 13.6569 13.6569 15 12 15Z',\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.FILE_DONE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M14.2364 2H6.35714C4.52045 2 4.5 2.12612 4.5 3.91667V20.0833C4.5 21.8739 4.52045 22 6.35714 22H18.6429C20.4796 22 20.5 21.8739 20.5 20.0833V7.5292C20.5 7.08788 20.3057 6.66895 19.9687 6.38394L15.2051 2.35474C14.9343 2.12568 14.5911 2 14.2364 2ZM10.7042 15.4625C10.8958 15.6542 11.1354 15.75 11.375 15.75C11.6146 15.75 11.8542 15.6542 12.0458 15.4625L15.8792 11.6292C16.2625 11.2458 16.2625 10.6708 15.8792 10.2875C15.4958 9.90417 14.9208 9.90417 14.5375 10.2875L11.375 13.45L10.1292 12.2042C9.79375 11.8208 9.17083 11.8208 8.7875 12.2042C8.40417 12.5875 8.40417 13.1625 8.7875 13.5458L10.7042 15.4625Z',\n fill: color || EColorPalette.cGray2,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.375 15.75C11.1354 15.75 10.8958 15.6542 10.7042 15.4625L8.7875 13.5458C8.40417 13.1625 8.40417 12.5875 8.7875 12.2042C9.17083 11.8208 9.79375 11.8208 10.1292 12.2042L11.375 13.45L14.5375 10.2875C14.9208 9.90417 15.4958 9.90417 15.8792 10.2875C16.2625 10.6708 16.2625 11.2458 15.8792 11.6292L12.0458 15.4625C11.8542 15.6542 11.6146 15.75 11.375 15.75Z',\n fill: secondColor || EColorPalette.cWhite,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TIMER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12.5 21.5C8.08172 21.5 4.5 17.9183 4.5 13.5C4.5 9.08172 8.08172 5.5 12.5 5.5C16.9183 5.5 20.5 9.08172 20.5 13.5C20.5 17.9183 16.9183 21.5 12.5 21.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M13.5 5.56189V4.5H14.5C15.0523 4.5 15.5 4.05228 15.5 3.5C15.5 2.94772 15.0523 2.5 14.5 2.5H10.5C9.94772 2.5 9.5 2.94772 9.5 3.5C9.5 4.05228 9.94772 4.5 10.5 4.5H11.5V5.56189C11.8276 5.52104 12.1613 5.5 12.5 5.5C12.8387 5.5 13.1724 5.52104 13.5 5.56189Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M18.6672 8.40402L19.4498 7.62141C19.8403 7.23089 19.8403 6.59772 19.4498 6.2072C19.0593 5.81668 18.4261 5.81668 18.0356 6.2072L17.21 7.03282C17.7511 7.4276 18.2408 7.88864 18.6672 8.40402Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M11.9646 8.46165C11.9846 8.20115 12.2018 8 12.4631 8H12.5371C12.7984 8 13.0156 8.20115 13.0356 8.46165L13.4587 13.9617C13.481 14.252 13.2514 14.5 12.9602 14.5H12.04C11.7488 14.5 11.5192 14.252 11.5415 13.9617L11.9646 8.46165Z',\n fill: color || EColorPalette.cGray4,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TOOLS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M15.9504 3.80746L13.0252 6.7326C12.2442 7.51365 12.2442 8.77998 13.0252 9.56103L14.4394 10.9752C15.2205 11.7563 16.4868 11.7563 17.2679 10.9752L20.193 8.0501C20.7347 10.0446 20.2302 12.2555 18.6752 13.8106C16.8459 15.6398 14.1092 16.0154 11.8846 14.9443L6.75796 20.0709C5.97692 20.852 4.71059 20.852 3.92954 20.0709C3.14849 19.2899 3.14849 18.0235 3.92954 17.2425L9.05617 12.1159C7.98507 9.89129 8.36066 7.15452 10.1899 5.32529C11.7449 3.77026 13.9558 3.26574 15.9504 3.80746Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getPath({\n d: 'M16.6571 5.92912L18.0713 7.34334C18.4618 7.73386 18.4618 8.36703 18.0713 8.75755L16.6916 10.1372C16.3011 10.5278 15.6679 10.5278 15.2774 10.1372L13.8632 8.72301C13.4727 8.33249 13.4727 7.69932 13.8632 7.3088L15.2429 5.92912C15.6334 5.5386 16.2666 5.5386 16.6571 5.92912Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARCHIVE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M5 3C4.17157 3 3.5 3.67157 3.5 4.5V19.5C3.5 20.3284 4.17157 21 5 21H20C20.8284 21 21.5 20.3284 21.5 19.5V4.5C21.5 3.67157 20.8284 3 20 3H5ZM8.5 5C7.94772 5 7.5 5.44772 7.5 6C7.5 6.55228 7.94772 7 8.5 7H16.5C17.0523 7 17.5 6.55228 17.5 6C17.5 5.44772 17.0523 5 16.5 5H8.5Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BINOCULAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M12.8433 16H11.1563L10.985 16.6393C10.3351 19.0649 7.84182 20.5044 5.41617 19.8545C2.99052 19.2045 1.55103 16.7112 2.20098 14.2856L3.92068 7.86759C4.57064 5.44194 7.0639 4.00245 9.48955 4.6524C10.542 4.9344 11.4088 5.56341 11.9998 6.38334C12.5909 5.56341 13.4576 4.9344 14.5101 4.6524C16.9357 4.00245 19.429 5.44194 20.079 7.86759L21.7987 14.2856C22.4486 16.7112 21.0091 19.2045 18.5835 19.8545C16.1578 20.5044 13.6646 19.0649 13.0146 16.6393L12.8433 16ZM17.4562 18.1051C18.9629 18.1051 20.1843 16.8378 20.1843 15.2744C20.1843 13.7109 18.9629 12.4436 17.4562 12.4436C15.9494 12.4436 14.728 13.7109 14.728 15.2744C14.728 16.8378 15.9494 18.1051 17.4562 18.1051ZM6.54347 18.1051C8.0502 18.1051 9.27164 16.8378 9.27164 15.2744C9.27164 13.7109 8.0502 12.4436 6.54347 12.4436C5.03674 12.4436 3.81529 13.7109 3.81529 15.2744C3.81529 16.8378 5.03674 18.1051 6.54347 18.1051Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_FROM_LEFT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 7.5,\n y: 13,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'rotate(-90 7.5 13)',\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n x: 3.5,\n y: 3,\n width: 2,\n height: 18,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M13.7929 17.2929C13.4024 17.6834 13.4024 18.3166 13.7929 18.7071C14.1834 19.0976 14.8166 19.0976 15.2071 18.7071L21.2071 12.7071C21.5857 12.3285 21.5989 11.7189 21.2372 11.3243L15.7372 5.32428C15.364 4.91716 14.7314 4.88965 14.3243 5.26285C13.9172 5.63604 13.8897 6.26861 14.2628 6.67572L19.1159 11.9699L13.7929 17.2929Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_FROM_RIGHT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n opacity: 0.3,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'matrix(0 -1 -1 0 17.5 13)',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 19.5,\n y: 3,\n width: 2,\n height: 18,\n rx: 1,\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getPath({\n d: 'M11.2071 17.2929C11.5976 17.6834 11.5976 18.3166 11.2071 18.7071C10.8166 19.0976 10.1834 19.0976 9.79289 18.7071L3.79289 12.7071C3.41432 12.3285 3.40107 11.7189 3.76285 11.3243L9.26285 5.32428C9.63604 4.91716 10.2686 4.88965 10.6757 5.26285C11.0828 5.63604 11.1103 6.26861 10.7372 6.67572L5.88414 11.9699L11.2071 17.2929Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.PENCIL: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M20.4745 8.33237C21.0488 8.90667 21.0617 9.83374 20.5036 10.4238L10.9438 20.5307C10.6605 20.8303 10.2664 21 9.85405 21L5.49995 21C4.67153 21 3.99995 20.3284 3.99995 19.5L3.99995 15.1074C3.99995 14.7178 4.15155 14.3435 4.42266 14.0637L14.0817 4.09442C14.6646 3.49279 15.6273 3.48519 16.2196 4.07753L20.4745 8.33237Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CLOSE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n\n ${this.getRectangle({\n x: 6.13599,\n y: 16.9498,\n width: 16,\n height: 2,\n rx: 1,\n transform: 'rotate(-45 6.13599 16.9498)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n x: 7.55029,\n y: 5.63605,\n width: 16,\n height: 2,\n rx: 1,\n transform: 'rotate(45 7.55029 5.63605)',\n fill: color || EColorPalette.cGray4,\n opacity: 1,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.RADIO_DEFAULT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 17 17')}\n ${this.getCircle({\n cx: 8.1189,\n cy: 8.10181,\n r: 7,\n stroke: EColorPalette.cGray2,\n strokeWidth: 2,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.RADIO_SELECTED: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 17 17')}\n ${this.getCircle({\n cx: 8.1189,\n cy: 8.10181,\n r: 7,\n stroke: EColorPalette.cGreen,\n strokeWidth: 2,\n })}\n ${this.getCircle({\n cx: 8,\n cy: 8,\n r: 4,\n fill: EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BUILDING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 37 26')}\n ${this.getPath({\n d: 'M5 4C5 2.89543 5.89543 2 7 2H17C18.1046 2 19 2.89543 19 4V21H13.5V18C13.5 17.4477 13.0523 17 12.5 17H11.5C10.9477 17 10.5 17.4477 10.5 18V21H5V4ZM8 5C8 4.44772 8.44772 4 9 4H10C10.5523 4 11 4.44772 11 5V6C11 6.55228 10.5523 7 10 7H9C8.44772 7 8 6.55228 8 6V5ZM14 4C13.4477 4 13 4.44772 13 5V6C13 6.55228 13.4477 7 14 7H15C15.5523 7 16 6.55228 16 6V5C16 4.44772 15.5523 4 15 4H14ZM8 9C8 8.44772 8.44772 8 9 8H10C10.5523 8 11 8.44772 11 9V10C11 10.5523 10.5523 11 10 11H9C8.44772 11 8 10.5523 8 10V9ZM9 12C8.44772 12 8 12.4477 8 13V14C8 14.5523 8.44772 15 9 15H10C10.5523 15 11 14.5523 11 14V13C11 12.4477 10.5523 12 10 12H9ZM13 13C13 12.4477 13.4477 12 14 12H15C15.5523 12 16 12.4477 16 13V14C16 14.5523 15.5523 15 15 15H14C13.4477 15 13 14.5523 13 14V13Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getRectangle({\n x: 13,\n y: 8,\n width: 3,\n height: 3,\n rx: 1,\n fill: EColorPalette.cGray6,\n })}\n ${this.getPath({\n d: 'M3 22.9881C3 21.8901 3.89009 21 4.98807 21H19.0119C20.1099 21 21 21.8901 21 22.9881C21 22.9947 20.9947 23 20.9881 23H3.01193C3.00534 23 3 22.9947 3 22.9881Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MAIL: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.5746 21.1998C6.17461 21.1998 2.84961 17.3998 2.84961 12.5748C2.84961 6.8748 7.37461 3.0498 12.5246 3.0498C17.4496 3.0498 21.1246 6.0748 21.1246 10.8498C21.1246 15.1998 18.8246 16.9248 16.5246 16.9248C15.3996 16.9248 14.4746 16.3998 14.0746 15.6498C13.2996 16.3998 12.1246 16.8748 10.9996 16.8748C8.24961 16.8748 6.84961 14.9248 6.84961 12.5748C6.84961 9.5498 9.04961 7.0998 12.2746 7.0998C13.1996 7.0998 13.9496 7.3498 14.5246 7.7748L14.6246 7.3498H16.9996L15.8246 12.8498C15.5996 13.9498 15.8496 14.8248 16.9246 14.8248C18.2496 14.8248 19.0246 13.7248 19.0246 10.7998C19.0246 6.8998 15.9496 5.0748 12.4996 5.0748C8.62461 5.0748 5.04961 7.7498 5.04961 12.5748C5.04961 16.5248 7.57461 19.0998 11.5746 19.0998C13.0746 19.0998 14.6246 18.7748 15.9746 18.0748L16.7996 20.0998C15.2496 20.7998 13.1996 21.1998 11.5746 21.1998ZM11.3996 14.5248C12.0496 14.5248 12.6996 14.3498 13.2246 13.8248L14.0246 10.1248C13.5746 9.6498 12.9246 9.4248 12.2996 9.4248C10.6496 9.4248 9.44961 10.6998 9.44961 12.3748C9.44961 13.6748 10.0746 14.5248 11.3996 14.5248Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MAIL2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 6C3.89543 6 3 6.89543 3 8V17C3 18.1046 3.89543 19 5 19H19C20.1046 19 21 18.1046 21 17V8C21 6.89543 20.1046 6 19 6H5ZM19.1604 8.14443C18.964 7.77972 18.5091 7.64327 18.1444 7.83965L12 11.1482L5.85557 7.83965C5.49087 7.64327 5.03603 7.77972 4.83965 8.14443C4.64327 8.50913 4.77972 8.96397 5.14443 9.16035L11.6444 12.6604C11.8664 12.7799 12.1336 12.7799 12.3556 12.6604L18.8556 9.16035C19.2203 8.96397 19.3567 8.50913 19.1604 8.14443Z',\n fill: color || EColorPalette.cBlue2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.IPHONE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M16.1667 1H7.83333C6.42705 1 5.75 1.98122 5.75 3.5V20.5C5.75 22.0188 6.42705 23 7.83333 23H16.1667C17.5729 23 18.25 22.0188 18.25 20.5V3.5C18.25 1.98122 17.5729 1 16.1667 1ZM7.13889 19V4H16.8611V19H7.13889Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M7 4V19H17V4H7Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 22C12.5523 22 13 21.5523 13 21C13 20.4477 12.5523 20 12 20C11.4477 20 11 20.4477 11 21C11 21.5523 11.4477 22 12 22Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.IMPORT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n opacity: 0.3,\n x: 13.5,\n y: 13,\n width: 2,\n height: 12,\n rx: 1,\n transform: 'rotate(-180 13.5 13)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M17.5 7.99998C16.9477 7.99998 16.5 7.55227 16.5 6.99999C16.5 6.4477 16.9477 5.99999 17.5 5.99999H18.5C20.7091 5.99999 22.5 7.79085 22.5 9.99999V18C22.5 20.2091 20.7091 22 18.5 22H6.5C4.29086 22 2.5 20.2091 2.5 18L2.5 9.99304C2.5 7.7839 4.29086 5.99304 6.5 5.99304H7.5C8.05229 5.99304 8.5 6.44076 8.5 6.99304C8.5 7.54533 8.05229 7.99304 7.5 7.99304H6.5C5.39543 7.99304 4.5 8.88847 4.5 9.99304V18C4.5 19.1046 5.39543 20 6.5 20H18.5C19.6046 20 20.5 19.1046 20.5 18V9.99999C20.5 8.89542 19.6046 7.99998 18.5 7.99998H17.5Z',\n opacity: 0.3,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M14.7929 10.2929C15.1834 9.90237 15.8166 9.90237 16.2071 10.2929C16.5976 10.6834 16.5976 11.3166 16.2071 11.7071L13.2071 14.7071C12.8166 15.0976 12.1834 15.0976 11.7929 14.7071L8.79289 11.7071C8.40237 11.3166 8.40237 10.6834 8.79289 10.2929C9.18342 9.90237 9.81658 9.90237 10.2071 10.2929L12.5 12.5858L14.7929 10.2929Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPORT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M17.5 7.99998C16.9477 7.99998 16.5 7.55227 16.5 6.99999C16.5 6.4477 16.9477 5.99999 17.5 5.99999H18.5C20.7091 5.99999 22.5 7.79085 22.5 9.99999V18C22.5 20.2091 20.7091 22 18.5 22H6.5C4.29086 22 2.5 20.2091 2.5 18L2.5 9.99304C2.5 7.7839 4.29086 5.99304 6.5 5.99304H7.5C8.05229 5.99304 8.5 6.44076 8.5 6.99304C8.5 7.54533 8.05229 7.99304 7.5 7.99304H6.5C5.39543 7.99304 4.5 8.88847 4.5 9.99304V18C4.5 19.1046 5.39543 20 6.5 20H18.5C19.6046 20 20.5 19.1046 20.5 18V9.99999C20.5 8.89542 19.6046 7.99998 18.5 7.99998H17.5Z',\n opacity: 0.3,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n width: 2,\n height: 12,\n rx: 1,\n transform: 'matrix(-1 0 0 1 13.5 2)',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M12.5 2.41421L14.7929 4.70711C15.1834 5.09763 15.8166 5.09763 16.2071 4.70711C16.5976 4.31658 16.5976 3.68342 16.2071 3.29289L13.2071 0.292893C12.8166 -0.097631 12.1834 -0.097631 11.7929 0.292893L8.79289 3.29289C8.40237 3.68342 8.40237 4.31658 8.79289 4.70711C9.18342 5.09763 9.81658 5.09763 10.2071 4.70711L12.5 2.41421Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.NOTIFICATION: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.5 3C9.01472 3 7 5.01472 7 7.5V12H5.5C4.67157 12 4 12.6716 4 13.5C4 14.3284 4.67157 15 5.5 15H18.5C19.3284 15 20 14.3284 20 13.5C20 12.6716 19.3284 12 18.5 12H17V7.5C17 5.01472 14.9853 3 12.5 3H11.5Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getRectangle({\n x: 10,\n y: 16,\n width: 4,\n height: 4,\n rx: 2,\n opacity: 0.3,\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHECK: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 14 14')}\n ${this.getPath({\n d: 'M10.3472 3.70553C10.5558 3.46006 10.924 3.43021 11.1694 3.63886C11.4149 3.84751 11.4448 4.21565 11.2361 4.46112L6.27779 10.2945C6.06586 10.5438 5.69035 10.57 5.44578 10.3526L2.82078 8.01931C2.57999 7.80528 2.5583 7.43657 2.77233 7.19578C2.98637 6.95499 3.35508 6.9333 3.59587 7.14734L5.77511 9.08444L10.3472 3.70553Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HYPERLINK: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M4.22085 14.1209C3.43981 14.902 3.43981 16.1683 4.22085 16.9494L7.04928 19.7778C7.83033 20.5588 9.09666 20.5588 9.87771 19.7778L12.7061 16.9494C13.4872 16.1683 13.4872 14.902 12.7061 14.1209L11.999 13.4138L9.87771 15.5352C9.48718 15.9257 8.85402 15.9257 8.46349 15.5352C8.07297 15.1446 8.07297 14.5115 8.46349 14.1209L10.5848 11.9996L9.87771 11.2925C9.09666 10.5115 7.83033 10.5115 7.04928 11.2925L4.22085 14.1209Z',\n fill: color || EColorPalette.cGreen,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.2931 7.05063C10.5121 7.83168 10.5121 9.09801 11.2931 9.87906L12.0002 10.5862L14.1215 8.46484C14.5121 8.07432 15.1452 8.07432 15.5358 8.46484C15.9263 8.85537 15.9263 9.48853 15.5358 9.87906L13.4144 12.0004L14.1215 12.7075C14.9026 13.4885 16.1689 13.4885 16.95 12.7075L19.7784 9.87906C20.5594 9.09801 20.5594 7.83168 19.7784 7.05063L16.95 4.2222C16.1689 3.44115 14.9026 3.44115 14.1215 4.2222L11.2931 7.05063Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.ARROW_TO_BOTTOM: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getRectangle({\n x: 11,\n y: 3,\n width: 2,\n height: 14,\n rx: 1,\n opacity: 0.3,\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getPath({\n d: 'M6.70711 9.29289C6.31658 8.90237 5.68342 8.90237 5.29289 9.29289C4.90237 9.68342 4.90237 10.3166 5.29289 10.7071L11.2929 16.7071C11.6715 17.0857 12.2811 17.0989 12.6757 16.7372L18.6757 11.2372C19.0828 10.864 19.1103 10.2314 18.7372 9.82427C18.364 9.41716 17.7314 9.38965 17.3243 9.76284L12.0301 14.6159L6.70711 9.29289Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getRectangle({\n x: 3,\n y: 19,\n width: 18,\n height: 2,\n rx: 1,\n opacity: 0.3,\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.COMMENT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 3C3.34315 3 2 4.34315 2 6V15C2 16.6569 3.34315 18 5 18H18.0249L20.3178 20.2929C20.9478 20.9229 22.0249 20.4767 22.0249 19.5858V15L22 15.0098C22 15.0065 22 15.0033 22 15V6C22 4.34315 20.6569 3 19 3H5Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.COMMENT2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M6.5 3C4.84315 3 3.5 4.34315 3.5 6V15C3.5 16.6569 4.84315 18 6.5 18H18.5249L20.8178 20.2929C21.4478 20.9229 22.5249 20.4767 22.5249 19.5858V15L22.5 15.0098C22.5 15.0065 22.5 15.0033 22.5 15V6C22.5 4.34315 21.1569 3 19.5 3H6.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8 12C7.17157 12 6.5 11.3284 6.5 10.5C6.5 9.67157 7.17157 9 8 9C8.82843 9 9.5 9.67157 9.5 10.5C9.5 11.3284 8.82843 12 8 12ZM13 12C12.1716 12 11.5 11.3284 11.5 10.5C11.5 9.67157 12.1716 9 13 9C13.8284 9 14.5 9.67157 14.5 10.5C14.5 11.3284 13.8284 12 13 12ZM18 12C17.1716 12 16.5 11.3284 16.5 10.5C16.5 9.67157 17.1716 9 18 9C18.8284 9 19.5 9.67157 19.5 10.5C19.5 11.3284 18.8284 12 18 12Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHECKBOX_SELECTED: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 16 16')}\n ${this.getRectangle({\n width: 16,\n height: 16,\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getPath({\n d: 'M0 2C0 0.895431 0.895431 0 2 0H14C15.1046 0 16 0.895431 16 2V14C16 15.1046 15.1046 16 14 16H2C0.895431 16 0 15.1046 0 14V2Z',\n fill: color || EColorPalette.cGreen,\n })}\n ${this.getPath({\n d: 'M11.8254 4.23489C12.0638 3.95435 12.4845 3.92024 12.7651 4.1587C13.0456 4.39715 13.0797 4.81788 12.8413 5.09842L7.17461 11.7651C6.93241 12.05 6.50325 12.08 6.22374 11.8316L3.22374 9.16493C2.94856 8.92032 2.92377 8.49894 3.16838 8.22375C3.41299 7.94856 3.83437 7.92377 4.10956 8.16838L6.60013 10.3822L11.8254 4.23489Z',\n fill: color || EColorPalette.cWhite,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHECKBOX_DEFAULT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 16 16')}\n ${this.getRectangle({\n width: 16,\n height: 16,\n fill: EColorPalette.cWhite,\n })}\n ${this.getPath({\n d: 'M1 2C1 1.44772 1.44772 1 2 1H14C14.5523 1 15 1.44772 15 2V14C15 14.5523 14.5523 15 14 15H2C1.44772 15 1 14.5523 1 14V2Z',\n fill: EColorPalette.cWhite,\n stroke: color || EColorPalette.cGray7,\n strokeWidth: 2,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SAVE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6 4H7V11H17V4L19.8536 6.85355C19.9473 6.94732 20 7.0745 20 7.20711V18C20 19.3 19.2 20 18 20H6C4.79111 20 4 19.3 4 18V6C4 4.7 4.79111 4 6 4Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 12,\n y: 4,\n width: 3,\n height: 5,\n rx: 0.5,\n fill: color || EColorPalette.cGreen3,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TICKET: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6.63595 11.0857L3.10042 14.6213C2.70989 15.0118 2.70989 15.645 3.10042 16.0355L4.54999 17.4851C5.52068 16.8419 6.84138 16.948 7.69661 17.8032C8.55184 18.6585 8.65791 19.9792 8.0148 20.9499L9.46438 22.3994C9.8549 22.79 10.4881 22.79 10.8786 22.3994L14.4141 18.8639L12.9999 17.4497C12.6094 17.0592 12.6094 16.426 12.9999 16.0355C13.3904 15.645 14.0236 15.645 14.4141 16.0355L15.8283 17.4497L22.8994 10.3786C23.2899 9.9881 23.2899 9.35493 22.8994 8.96441L21.4498 7.51483C20.4791 8.15794 19.1584 8.05187 18.3032 7.19664C17.448 6.34141 17.3419 5.02071 17.985 4.05002L16.5354 2.60045C16.1449 2.20992 15.5118 2.20992 15.1212 2.60045L8.05016 9.67151L9.46438 11.0857C9.8549 11.4763 9.8549 12.1094 9.46438 12.4999C9.07385 12.8905 8.44069 12.8905 8.05016 12.4999L6.63595 11.0857ZM10.1715 14.6213C9.78096 14.2307 9.78096 13.5976 10.1715 13.207C10.562 12.8165 11.1952 12.8165 11.5857 13.207L12.2928 13.9142C12.6833 14.3047 12.6833 14.9378 12.2928 15.3284C11.9023 15.7189 11.2691 15.7189 10.8786 15.3284L10.1715 14.6213Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TICKET2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M6.63595 11.0857L3.10042 14.6213C2.70989 15.0118 2.70989 15.645 3.10042 16.0355L4.54999 17.4851C5.52068 16.8419 6.84138 16.948 7.69661 17.8032C8.55184 18.6585 8.65791 19.9792 8.0148 20.9499L9.46438 22.3994C9.8549 22.79 10.4881 22.79 10.8786 22.3994L14.4141 18.8639L12.9999 17.4497C12.6094 17.0592 12.6094 16.426 12.9999 16.0355C13.3904 15.645 14.0236 15.645 14.4141 16.0355L15.8283 17.4497L22.8994 10.3786C23.2899 9.9881 23.2899 9.35493 22.8994 8.96441L21.4498 7.51483C20.4791 8.15794 19.1584 8.05187 18.3032 7.19664C17.448 6.34141 17.3419 5.02071 17.985 4.05002L16.5354 2.60045C16.1449 2.20992 15.5118 2.20992 15.1212 2.60045L8.05016 9.67151L9.46438 11.0857C9.8549 11.4763 9.8549 12.1094 9.46438 12.4999C9.07385 12.8905 8.44069 12.8905 8.05016 12.4999L6.63595 11.0857ZM10.1715 14.6213C9.78096 14.2307 9.78096 13.5976 10.1715 13.207C10.562 12.8165 11.1952 12.8165 11.5857 13.207L12.2928 13.9142C12.6833 14.3047 12.6833 14.9378 12.2928 15.3284C11.9023 15.7189 11.2691 15.7189 10.8786 15.3284L10.1715 14.6213Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MOVE_OUT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2.56068 10.682C1.97489 11.2678 1.97489 12.2175 2.56068 12.8033L4.682 14.9246C5.26778 15.5104 6.21753 15.5104 6.80332 14.9246L8.92464 12.8033C9.51043 12.2175 9.51043 11.2678 8.92464 10.682L6.80332 8.56065C6.21753 7.97486 5.26778 7.97486 4.682 8.56065L2.56068 10.682ZM14.5607 10.682C13.9749 11.2678 13.9749 12.2175 14.5607 12.8033L16.682 14.9246C17.2678 15.5104 18.2175 15.5104 18.8033 14.9246L20.9246 12.8033C21.5104 12.2175 21.5104 11.2678 20.9246 10.682L18.8033 8.56065C18.2175 7.97486 17.2678 7.97486 16.682 8.56065L14.5607 10.682Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8.56068 4.68197C7.97489 5.26775 7.97489 6.2175 8.56068 6.80329L10.682 8.92461C11.2678 9.51039 12.2175 9.51039 12.8033 8.92461L14.9246 6.80329C15.5104 6.2175 15.5104 5.26775 14.9246 4.68197L12.8033 2.56065C12.2175 1.97486 11.2678 1.97486 10.682 2.56065L8.56068 4.68197ZM8.56068 16.682C7.97489 17.2678 7.97489 18.2175 8.56068 18.8033L10.682 20.9246C11.2678 21.5104 12.2175 21.5104 12.8033 20.9246L14.9246 18.8033C15.5104 18.2175 15.5104 17.2678 14.9246 16.682L12.8033 14.5606C12.2175 13.9749 11.2678 13.9749 10.682 14.5606L8.56068 16.682Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HIDDEN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.0955 17.9608C11.3879 17.9865 11.6893 18 12 18C16.909 18 21 12 21 12C21 12 20.3303 11.0179 19.2078 9.84839L11.0955 17.9608Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M14.5051 6.49485C13.7076 6.18695 12.8665 6 12 6C5.45455 6 3 12 3 12C3 12 3.75006 13.8335 5.52661 15.4734L9 12C9 10.3431 10.3431 9 12 9L14.5051 6.49485Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 5.1001,\n y: 18.4351,\n width: 19,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n transform: 'rotate(-45 5.1001 18.4351)',\n })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPAND_ARROWS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5.46452 17.1214C5.074 17.5119 5.074 18.1451 5.46452 18.5356C5.85505 18.9261 6.48821 18.9261 6.87874 18.5356L12.0001 13.4143L18.1924 19.6067C18.583 19.9972 19.2161 19.9972 19.6067 19.6067C19.9972 19.2162 19.9972 18.583 19.6067 18.1925L13.4143 12.0001L19.6067 5.80769C19.9972 5.41717 19.9972 4.784 19.6067 4.39348C19.2161 4.00295 18.583 4.00295 18.1924 4.39348L12.0001 10.5859L6.87874 5.46455C6.48821 5.07402 5.85505 5.07402 5.46452 5.46455C5.074 5.85507 5.074 6.48824 5.46452 6.87876L10.5858 12.0001L5.46452 17.1214Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M18 6H15C15 6 14 5.82843 14 5C14 4.17157 15 4 15 4H20V9C20 9 20 10 19 10C18 10 18 9 18 9V6ZM9 18H6V15C6 15 6 14 5 14C4 14 4 15 4 15V20H9C9 20 10 19.8284 10 19C10 18.1716 9 18 9 18ZM18 15V18H15C15 18 14 18 14 19C14 20 15 20 15 20H20V15C20 15 19.8284 14 19 14C18.1716 14 18 15 18 15ZM6 9V6H9C9 6 10 6 10 5C10 4 9 4 9 4H4V9C4 9 4.17157 10 5 10C5.82843 10 6 9 6 9Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.TRASH: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M7.39346 20.115L6.5 8.5H18.5L17.6065 20.115C17.5464 20.8965 16.8948 21.5 16.111 21.5H8.88905C8.10524 21.5 7.45358 20.8965 7.39346 20.115ZM8.95438 14.5894L8.5 10.5H16.5L16.0518 14.5339L8.95438 14.5894Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M14.5 5V4C14.5 3.72386 14.2761 3.5 14 3.5H11C10.7239 3.5 10.5 3.72386 10.5 4V5H6C5.72386 5 5.5 5.22386 5.5 5.5V6C5.5 6.27614 5.72386 6.5 6 6.5H19C19.2761 6.5 19.5 6.27614 19.5 6V5.5C19.5 5.22386 19.2761 5 19 5H14.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CHART_LINE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5.5 19H20.5C21.0523 19 21.5 19.4477 21.5 20C21.5 20.5523 21.0523 21 20.5 21H4.5C3.94772 21 3.5 20.5523 3.5 20V4C3.5 3.44772 3.94772 3 4.5 3C5.05228 3 5.5 3.44772 5.5 4V19Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M9.22954 14.684C8.85181 15.0869 8.21897 15.1073 7.81606 14.7296C7.41315 14.3518 7.39274 13.719 7.77047 13.3161L11.5205 9.3161C11.8858 8.92644 12.4928 8.89264 12.8991 9.23935L15.8589 11.765L19.7151 6.8804C20.0573 6.44692 20.6862 6.37294 21.1196 6.71516C21.5531 7.05738 21.6271 7.68621 21.2849 8.11969L16.7849 13.8197C16.4334 14.2649 15.7824 14.3289 15.3509 13.9607L12.3268 11.3802L9.22954 14.684Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.NOTIFICATIONS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11.5 3C9.01472 3 7 5.01472 7 7.5V12H5.5C4.67157 12 4 12.6716 4 13.5C4 14.3284 4.67157 15 5.5 15H18.5C19.3284 15 20 14.3284 20 13.5C20 12.6716 19.3284 12 18.5 12H17V7.5C17 5.01472 14.9853 3 12.5 3H11.5Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 10,\n y: 16,\n width: 4,\n height: 4,\n rx: 2,\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SETTINGS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M18.6225 9.75H18.75C19.9926 9.75 21 10.7574 21 12C21 13.2426 19.9926 14.25 18.75 14.25L18.6855 14.25C18.4912 14.2508 18.3159 14.3669 18.2394 14.5454C18.1557 14.7351 18.1943 14.9481 18.3278 15.0847L18.3725 15.1294C18.795 15.5514 19.0324 16.1241 19.0324 16.7212C19.0324 17.3184 18.795 17.8911 18.3731 18.3125C17.9511 18.735 17.3784 18.9724 16.7812 18.9724C16.1841 18.9724 15.6114 18.735 15.1897 18.3128L15.1506 18.2736C15.0081 18.1343 14.7951 18.0957 14.6054 18.1794C14.4269 18.2559 14.3108 18.4312 14.31 18.6225V18.75C14.31 19.9926 13.3026 21 12.06 21C10.8174 21 9.81 19.9926 9.81 18.75C9.80552 18.4999 9.67899 18.323 9.44718 18.2361C9.26485 18.1557 9.05191 18.1943 8.91533 18.3278L8.87063 18.3725C8.4486 18.795 7.87592 19.0324 7.27875 19.0324C6.68158 19.0324 6.1089 18.795 5.68746 18.3731C5.26497 17.9511 5.02757 17.3784 5.02757 16.7812C5.02757 16.1841 5.26497 15.6114 5.68717 15.1897L5.72635 15.1506C5.86571 15.0081 5.90432 14.7951 5.82065 14.6054C5.7441 14.4269 5.56881 14.3108 5.3775 14.31H5.25C4.00736 14.31 3 13.3026 3 12.06C3 10.8174 4.00736 9.81 5.25 9.81C5.50008 9.80552 5.677 9.67899 5.76385 9.44718C5.84432 9.26485 5.80571 9.05191 5.67217 8.91533L5.62747 8.87063C5.20497 8.4486 4.96757 7.87592 4.96757 7.27875C4.96757 6.68158 5.20497 6.1089 5.62687 5.68746C6.0489 5.26497 6.62158 5.02757 7.21875 5.02757C7.81592 5.02757 8.3886 5.26497 8.81033 5.68717L8.84945 5.72635C8.99191 5.86571 9.20485 5.90432 9.38718 5.82385L9.49485 5.80115C9.65041 5.71689 9.74929 5.55401 9.75 5.3775V5.25C9.75 4.00736 10.7574 3 12 3C13.2426 3 14.25 4.00736 14.25 5.25L14.25 5.31451C14.2508 5.50881 14.3669 5.6841 14.5528 5.76385C14.7351 5.84432 14.9481 5.80571 15.0847 5.67217L15.1294 5.62747C15.5514 5.20497 16.1241 4.96757 16.7212 4.96757C17.3184 4.96757 17.8911 5.20497 18.3125 5.62687C18.735 6.0489 18.9724 6.62158 18.9724 7.21875C18.9724 7.81592 18.735 8.3886 18.3128 8.81033L18.2736 8.84945C18.1343 8.99191 18.0957 9.20485 18.1761 9.38718L18.1989 9.49485C18.2831 9.65041 18.446 9.74929 18.6225 9.75Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SETTINGS2: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M1.68628 12.0001L4.99999 8.68637V5.00008H8.68628L11.5858 2.10059L14.4853 5.00008H19V9.5148L21.4853 12.0001L19 14.4854V19.0001H14.4853L11.5858 21.8996L8.68628 19.0001H4.99999V15.3138L1.68628 12.0001ZM15 12.0001C15 13.6569 13.6568 15.0001 12 15.0001C10.3431 15.0001 8.99999 13.6569 8.99999 12.0001C8.99999 10.3432 10.3431 9.00008 12 9.00008C13.6568 9.00008 15 10.3432 15 12.0001Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXPAND: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M11 6H18V13C18 13 18 14 19 14C20 14 20 13 20 13V4H11C11 4 10 4.17157 10 5C10 5.82843 11 6 11 6ZM13 18H6V11C6 11 6 10 5 10C4 10 4 11 4 11V20H13C13 20 14 19.8284 14 19C14 18.1716 13 18 13 18Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 7.75732,\n y: 14.8284,\n width: 10,\n height: 2,\n rx: 1,\n transform: 'rotate(-45 7.75732 14.8284)',\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.COLLAPSE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M20 9H15V4C15 4 15 3 14 3C13 3 13 4 13 4V11H20C20 11 21 10.8284 21 10C21 9.17157 20 9 20 9ZM5 14H10V19C10 19 10 20 11 20C12 20 12 19 12 19V12H5C5 12 4 12.1716 4 13C4 13.8284 5 14 5 14Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M16.8786 5.70701C16.4881 6.09754 16.4881 6.7307 16.8786 7.12123C17.2691 7.51175 17.9023 7.51175 18.2928 7.12123L21.1212 4.2928C21.5118 3.90228 21.5118 3.26911 21.1212 2.87859C20.7307 2.48806 20.0975 2.48806 19.707 2.87859L16.8786 5.70701ZM3.87859 18.707C3.48806 19.0975 3.48806 19.7307 3.87859 20.1212C4.26911 20.5118 4.90228 20.5118 5.2928 20.1212L8.12123 17.2928C8.51175 16.9023 8.51175 16.2691 8.12123 15.8786C7.7307 15.4881 7.09754 15.4881 6.70701 15.8786L3.87859 18.707Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BLOCKS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 4.5,\n y: 4,\n width: 7,\n height: 7,\n rx: 1.5,\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M13.5 5.5C13.5 4.67157 14.1716 4 15 4H19C19.8284 4 20.5 4.67157 20.5 5.5V9.5C20.5 10.3284 19.8284 11 19 11H15C14.1716 11 13.5 10.3284 13.5 9.5V5.5ZM4.5 14.5C4.5 13.6716 5.17157 13 6 13H10C10.8284 13 11.5 13.6716 11.5 14.5V18.5C11.5 19.3284 10.8284 20 10 20H6C5.17157 20 4.5 19.3284 4.5 18.5V14.5ZM15 13C14.1716 13 13.5 13.6716 13.5 14.5V18.5C13.5 19.3284 14.1716 20 15 20H19C19.8284 20 20.5 19.3284 20.5 18.5V14.5C20.5 13.6716 19.8284 13 19 13H15Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.MENU: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getRectangle({\n x: 4.5,\n y: 5,\n width: 16,\n height: 3,\n rx: 1.5,\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M6 10C5.17157 10 4.5 10.6716 4.5 11.5C4.5 12.3284 5.17157 13 6 13H19C19.8284 13 20.5 12.3284 20.5 11.5C20.5 10.6716 19.8284 10 19 10H6ZM6 15C5.17157 15 4.5 15.6716 4.5 16.5C4.5 17.3284 5.17157 18 6 18H19C19.8284 18 20.5 17.3284 20.5 16.5C20.5 15.6716 19.8284 15 19 15H6Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BULB: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M12 17C16.4183 17 20 13.4183 20 9C20 4.58172 16.4183 1 12 1C7.58172 1 4 4.58172 4 9C4 13.4183 7.58172 17 12 17Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M6.53809 9L10.5679 19.3624L11.9759 18.8149L13.3744 19.3674L17.4702 9H6.53809ZM9.46178 11H14.5297L11.9758 17.4645L9.46178 11Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M10 22H14C14 23.1046 13.1046 24 12 24C10.8954 24 10 23.1046 10 22Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M8 17C8 16.4477 8.44772 16 9 16H15C15.5523 16 16 16.4477 16 17C16 17.5523 15.5523 18 15 18C15.5523 18 16 18.4477 16 19C16 19.5523 15.5523 20 15 20C15.5523 20 16 20.4477 16 21C16 21.5523 15.5523 22 15 22H9C8.44772 22 8 21.5523 8 21C8 20.4477 8.44772 20 9 20C8.44772 20 8 19.5523 8 19C8 18.4477 8.44772 18 9 18C8.44772 18 8 17.5523 8 17Z',\n fill: EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BUG: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M1 15.8285C0.447715 15.8285 -1.10011e-07 15.3808 -1.22081e-07 14.8285C-1.34152e-07 14.2762 0.447715 13.8285 1 13.8285L3 13.8285C3.55228 13.8285 4 14.2762 4 14.8285C4 15.3808 3.55228 15.8285 3 15.8285L1 15.8285ZM1.70711 10.7072C1.31658 10.3167 1.31658 9.68351 1.70711 9.29299C2.09763 8.90246 2.7308 8.90246 3.12132 9.29299L4.53553 10.7072C4.92606 11.0977 4.92606 11.7309 4.53553 12.1214C4.14501 12.5119 3.51184 12.5119 3.12132 12.1214L1.70711 10.7072ZM1.70711 20.1214C1.31658 19.7309 1.31658 19.0977 1.70711 18.7072L3.12132 17.293C3.51184 16.9025 4.14501 16.9025 4.53553 17.293C4.92606 17.6835 4.92606 18.3167 4.53553 18.7072L3.12132 20.1214C2.7308 20.5119 2.09763 20.5119 1.70711 20.1214Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n width: 2,\n height: 4,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n transform: 'matrix(0.917288 -0.398225 -0.398225 -0.917288 8.59302 5.46558)',\n opacity: 0.3,\n })},\n ${this.getRectangle({\n opacity: 0.3,\n x: 14.8345,\n y: 5.46558,\n width: 2,\n height: 4,\n rx: 1,\n transform: 'rotate(-156.533 14.8345 5.46558)',\n fill: color || EColorPalette.cGray4,\n })},\n\n ${this.getPath({\n d: 'M22.1213 10.7071C22.5118 10.3166 22.5118 9.68342 22.1213 9.29289C21.7308 8.90237 21.0976 8.90237 20.7071 9.29289L19.2929 10.7071C18.9024 11.0976 18.9024 11.7308 19.2929 12.1213C19.6834 12.5118 20.3166 12.5118 20.7071 12.1213L22.1213 10.7071ZM22.8284 15.8286C23.3807 15.8286 23.8284 15.3809 23.8284 14.8286C23.8284 14.2763 23.3807 13.8286 22.8284 13.8286H20.8284C20.2761 13.8286 19.8284 14.2763 19.8284 14.8286C19.8284 15.3809 20.2761 15.8286 20.8284 15.8286H22.8284ZM22.1213 20.1214C22.5118 19.7309 22.5118 19.0977 22.1213 18.7072L20.7071 17.293C20.3166 16.9025 19.6834 16.9025 19.2929 17.293C18.9024 17.6835 18.9024 18.3167 19.2929 18.7072L20.7071 20.1214C21.0976 20.5119 21.7308 20.5119 22.1213 20.1214Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M6 12H18V17C18 20.3137 15.3137 23 12 23C8.68629 23 6 20.3137 6 17V12Z',\n fill: EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M6 10C6 6.68629 8.68629 4 12 4C15.3137 4 18 6.68629 18 10V11H6V10Z',\n fill: EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOLLAR_CIRCLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 706 548')}\n \n \n ${this.getEndUrlClip()}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.LOGO: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 1004 788')}\n ${this.getPath({\n d: 'M226.508 517.964C245.214 517.964 255.95 526.977 255.95 542.726C255.95 559.095 245.214 568.625 226.508 568.625H209.398V590.482H196.853V517.964H226.508ZM209.398 557.642H225.976C237.455 557.642 243.938 552.876 243.938 543.034C243.938 533.503 237.457 528.948 225.976 528.948H209.395L209.398 557.642Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M334.812 568.519C333.749 568.622 332.581 568.622 331.411 568.622H313.768V590.482H301.226V517.964H331.411C350.437 517.964 361.384 526.977 361.384 542.726C361.384 554.33 355.858 562.514 345.973 566.243L362.66 590.482H348.417L334.812 568.519ZM331.411 557.642C342.89 557.642 349.481 552.875 349.481 543.034C349.481 533.503 342.89 528.947 331.411 528.947H313.768V557.644L331.411 557.642Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M483.614 554.223C483.614 574.942 466.395 591 444.18 591C421.966 591 404.748 574.942 404.748 554.223C404.748 533.399 421.967 517.652 444.18 517.652C466.393 517.652 483.614 533.503 483.614 554.223ZM417.502 554.223C417.502 568.622 429.725 580.019 444.286 580.019C451.265 580.027 457.961 577.338 462.909 572.542C467.856 567.745 470.65 561.232 470.679 554.43C470.707 547.629 467.967 541.094 463.06 536.258C458.153 531.422 451.479 528.68 444.501 528.633H444.286C429.619 528.633 417.502 539.82 417.502 554.223Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M559.501 517.964C578.208 517.964 588.943 526.977 588.943 542.726C588.943 559.095 578.208 568.625 559.501 568.625H542.392V590.482H529.847V517.964H559.501ZM542.392 557.642H558.972C570.451 557.642 576.935 552.876 576.935 543.034C576.935 533.503 570.454 528.948 558.972 528.948H542.389L542.392 557.642Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M696.504 560.645C696.504 579.501 684.812 590.896 665.361 590.896C645.805 590.896 634.006 579.501 634.006 560.645V517.964H642.51V560.646C642.51 574.733 651.225 582.92 665.361 582.92C679.497 582.92 688.001 574.736 688.001 560.646V517.964H696.504V560.645Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M778.13 517.964C796.518 517.964 807.147 526.871 807.147 542.309C807.147 558.367 796.518 567.588 778.13 567.588H758.682V590.482H750.179V517.964H778.13ZM758.682 559.609H777.814C791.206 559.609 798.965 553.808 798.965 542.516C798.965 531.534 791.206 525.94 777.814 525.94H758.682V559.609Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M604.941 309.075V328.658H635.576L579.802 374.02V197H431.221V297.938L383.159 311.987V424.991L365.875 439.135C360.602 436.458 354.542 435.642 348.721 436.823C342.901 438.004 337.679 441.11 333.94 445.615C330.2 450.12 328.174 455.746 328.204 461.541C328.234 467.335 330.319 472.941 334.105 477.409C337.891 481.877 343.145 484.931 348.977 486.055C354.809 487.179 360.861 486.302 366.106 483.574C371.351 480.846 375.467 476.435 377.756 471.087C380.046 465.739 380.368 459.785 378.668 454.232L441.273 403.008L508.26 457.719L649.926 342.485V372.579H670.017V309.075H604.941ZM353.936 472.684C351.653 472.683 349.421 472.022 347.523 470.786C345.625 469.549 344.146 467.791 343.273 465.735C342.399 463.679 342.171 461.416 342.617 459.234C343.062 457.051 344.162 455.046 345.776 453.472C347.391 451.899 349.448 450.827 351.687 450.393C353.927 449.959 356.248 450.181 358.357 451.033C360.467 451.884 362.27 453.326 363.539 455.176C364.808 457.026 365.485 459.202 365.486 461.427C365.486 462.905 365.188 464.369 364.608 465.735C364.027 467.101 363.177 468.342 362.104 469.388C361.031 470.433 359.758 471.262 358.357 471.828C356.955 472.393 355.453 472.684 353.936 472.684ZM498.311 424.043L441.26 377.45L403.249 408.548V326.554L498.311 298.766V424.043ZM559.711 390.361L518.402 423.961V272.45L451.312 292.064V216.583H559.711V390.361Z',\n fill: color || EColorPalette.cBlack,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.EXCHANGE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 17 16')}\n ${this.getRectangle({\n x: 5.04688,\n y: 4.66663,\n width: 1.33333,\n height: 8,\n rx: 0.666667,\n transform: 'rotate(-90 5.04688 4.66663)',\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M6.85161 5.52864C7.11196 5.78899 7.11196 6.2111 6.85161 6.47144C6.59126 6.73179 6.16915 6.73179 5.9088 6.47144L3.9088 4.47144C3.64845 4.2111 3.64845 3.78899 3.9088 3.52864L5.9088 1.52864C6.16915 1.26829 6.59126 1.26829 6.85161 1.52864C7.11196 1.78899 7.11196 2.2111 6.85161 2.47145L5.32302 4.00004L6.85161 5.52864Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getRectangle({\n width: 1.33333,\n height: 8,\n rx: 0.666667,\n transform: 'matrix(0 -1 -1 0 11.7129 12.6666)',\n fill: color || EColorPalette.cGray4,\n })},\n ${this.getPath({\n d: 'M9.90815 13.5286C9.6478 13.789 9.6478 14.2111 9.90815 14.4714C10.1685 14.7318 10.5906 14.7318 10.851 14.4714L12.851 12.4714C13.1113 12.2111 13.1113 11.789 12.851 11.5286L10.851 9.52864C10.5906 9.26829 10.1685 9.26829 9.90815 9.52864C9.6478 9.78899 9.6478 10.2111 9.90815 10.4714L11.4367 12L9.90815 13.5286Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.SENDING: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M8.5 5.77181C8.5 5.40898 8.87431 5.16696 9.20518 5.31585L23.0456 11.544C23.4386 11.7209 23.4386 12.279 23.0456 12.4559L9.20518 18.6841C8.87431 18.833 8.5 18.591 8.5 18.2281V13.1669L20.947 12L8.5 10.8331V5.77181Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M4.5 6C3.94772 6 3.5 6.44772 3.5 7C3.5 7.55228 3.94772 8 4.5 8H5.5C6.05228 8 6.5 7.55228 6.5 7C6.5 6.44772 6.05228 6 5.5 6H4.5ZM0.5 12C0.5 11.4477 0.947715 11 1.5 11H5.5C6.05228 11 6.5 11.4477 6.5 12C6.5 12.5523 6.05228 13 5.5 13H1.5C0.947715 13 0.5 12.5523 0.5 12ZM3.5 17C3.5 16.4477 3.94772 16 4.5 16H5.5C6.05228 16 6.5 16.4477 6.5 17C6.5 17.5523 6.05228 18 5.5 18H4.5C3.94772 18 3.5 17.5523 3.5 17Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.REST: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M19.9607 2.91959C19.6133 2.8466 19.2593 2.81021 18.9044 2.81097V2.79359C18.3317 2.7931 17.7631 2.8901 17.223 3.08035C15.3893 0.963928 12.187 0.734737 10.0706 2.56842C9.65627 2.92741 9.30293 3.3512 9.02426 3.82332C6.24547 3.42262 3.668 5.35036 3.2673 8.12916C2.8666 10.908 4.79435 13.4854 7.57314 13.8861C7.82351 13.9222 8.07616 13.9396 8.32909 13.9381H8.51591C9.85092 16.4024 12.9309 17.3179 15.3953 15.9829C16.6096 15.3251 17.5034 14.2007 17.8703 12.8693C20.6179 13.4465 23.3131 11.6871 23.8904 8.93958C24.4676 6.19212 22.7083 3.49686 19.9607 2.91959ZM11.0098 10.1929C10.9179 10.2629 10.8036 10.2969 10.6883 10.2885H8.29867C8.16176 10.299 8.02582 10.2588 7.91654 10.1757C7.8341 10.0983 7.78935 9.98886 7.79467 9.87573C7.79712 9.79144 7.82775 9.71035 7.88157 9.64545C7.93952 9.56724 8.06117 9.4224 8.24653 9.21097L8.78095 8.62007L9.21543 8.12476L9.55867 7.73372C9.64992 7.6251 9.72378 7.53386 9.77592 7.46H8.45943C8.31296 7.4682 8.16615 7.45207 8.02495 7.41221C7.93224 7.38033 7.88591 7.2949 7.88591 7.15586C7.88206 7.06098 7.92214 6.96963 7.99453 6.90821C8.08078 6.84053 8.1894 6.80789 8.29867 6.81696H10.3538C10.5031 6.80898 10.6522 6.83728 10.7883 6.89952C10.8929 6.96143 10.9522 7.07831 10.9403 7.19931C10.9389 7.24993 10.9286 7.29995 10.9099 7.34703C10.894 7.39179 10.8721 7.43415 10.8447 7.47303L10.7448 7.59469L10.5927 7.76414L8.9504 9.58897H10.6883C10.8043 9.58006 10.9193 9.6158 11.0098 9.6889C11.0816 9.75451 11.1212 9.84808 11.1185 9.94524C11.1217 10.04 11.0817 10.131 11.0098 10.1929ZM14.7116 12.1741C14.638 12.2291 14.5469 12.2553 14.4553 12.248H12.5219C12.4157 12.2632 12.3077 12.2386 12.2185 12.1789C12.0963 12.0656 12.0839 11.8762 12.1916 11.7483C12.238 11.6875 12.335 11.573 12.4827 11.4051L12.9172 10.9315L13.2735 10.5361L13.5472 10.2233C13.6211 10.1364 13.6776 10.0625 13.721 10.0017H12.6479C12.5364 10.0058 12.425 9.9926 12.3176 9.96257C12.2438 9.9365 12.2047 9.86698 12.2047 9.75402C12.2019 9.67891 12.234 9.60678 12.2916 9.5585C12.361 9.50517 12.4475 9.47888 12.5349 9.48464H14.1642C14.2836 9.4779 14.4029 9.50028 14.5118 9.54981C14.5957 9.59874 14.6433 9.69216 14.6334 9.78878C14.6334 9.82886 14.626 9.86861 14.6117 9.90609C14.5987 9.9415 14.5812 9.97512 14.5596 10.006L14.4814 10.1016L14.3597 10.2363L13.0563 11.6962H14.4553C14.5476 11.6888 14.6392 11.7167 14.7116 11.7744C14.7686 11.8268 14.8003 11.9012 14.7985 11.9786C14.8001 12.0535 14.7682 12.1251 14.7116 12.1741ZM19.0608 9.96257C18.9689 10.0326 18.8546 10.0666 18.7393 10.0582H16.3105C16.1736 10.0686 16.0375 10.0284 15.9282 9.94519C15.843 9.86763 15.7968 9.75614 15.8022 9.64105C15.8046 9.54916 15.8402 9.46123 15.9021 9.3934C15.9601 9.31519 16.0817 9.17034 16.2671 8.95891L16.8015 8.36367L17.236 7.86836L17.5792 7.47732C17.669 7.37017 17.7415 7.27893 17.7965 7.2036H16.4713C16.3248 7.21158 16.178 7.19545 16.0368 7.15581C15.9412 7.12105 15.8978 7.0385 15.8978 6.89512C15.8939 6.80024 15.934 6.70889 16.0064 6.64746C16.0927 6.57979 16.2013 6.54715 16.3105 6.55622H18.3787C18.5281 6.54802 18.6772 6.57637 18.8132 6.63877C18.9178 6.70068 18.9771 6.81756 18.9652 6.93856C18.9638 6.98918 18.9535 7.0392 18.9348 7.08629C18.9188 7.13099 18.8969 7.17335 18.8697 7.21229L18.7697 7.3296L18.6177 7.49905L16.9797 9.32822H18.7176C18.8336 9.31932 18.9486 9.35505 19.0391 9.42815C19.1108 9.49376 19.1505 9.58734 19.1477 9.6845C19.1648 9.78443 19.1325 9.88648 19.0608 9.95822V9.96257Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M6.26093 19.8285C7.6191 19.8285 8.72011 18.7275 8.72011 17.3693C8.72011 16.0112 7.6191 14.9102 6.26093 14.9102C4.90277 14.9102 3.80176 16.0112 3.80176 17.3693C3.80176 18.7275 4.90277 19.8285 6.26093 19.8285Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M1.85524 22.6714C2.87987 22.6714 3.71049 21.8408 3.71049 20.8162C3.71049 19.7916 2.87987 18.9609 1.85524 18.9609C0.830621 18.9609 0 19.7916 0 20.8162C0 21.8408 0.830621 22.6714 1.85524 22.6714Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HAMMER: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M18.9246 12.6464L21.7531 9.81798C21.9483 9.62272 22.2649 9.62272 22.4602 9.81798L23.1673 10.5251C23.3625 10.7204 23.3625 11.0369 23.1673 11.2322L20.3389 14.0606C20.1436 14.2559 19.827 14.2559 19.6318 14.0606L18.9246 13.3535C18.7294 13.1583 18.7294 12.8417 18.9246 12.6464ZM3.72185 17.9497L13.6213 8.05022C14.0119 7.65969 14.645 7.65969 15.0356 8.05022L16.4498 9.46443C16.8403 9.85496 16.8403 10.4881 16.4498 10.8786L6.55028 20.7781C6.15975 21.1687 5.52659 21.1687 5.13606 20.7781L3.72185 19.3639C3.33132 18.9734 3.33132 18.3402 3.72185 17.9497Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M10.0857 4.51477C12.0383 2.56215 15.2041 2.56215 17.1568 4.51477L20.6603 8.01831C20.678 8.03598 20.678 8.06463 20.6603 8.0823L17.5103 11.2323C17.3151 11.4275 16.9985 11.4275 16.8032 11.2323L10.0857 4.51477Z',\n fill: color || EColorPalette.cGray4,\n })}\n\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SLEEP: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M19.4251 19.4253C18.3065 20.5438 16.9497 21.3951 15.4559 21.9156C13.9622 22.4362 12.3701 22.6125 10.7986 22.4314C9.22717 22.2503 7.71694 21.7164 6.38074 20.8698C5.04454 20.0231 3.91691 18.8855 3.08207 17.5418C2.24724 16.1982 1.72677 14.6833 1.55956 13.1103C1.39235 11.5373 1.58271 9.94688 2.11642 8.45777C2.65013 6.96867 3.5134 5.6194 4.64174 4.51074C5.77009 3.40208 7.13435 2.56269 8.63261 2.05528C8.79219 2.00724 8.96321 2.01371 9.11869 2.07368C9.27418 2.13364 9.40526 2.24368 9.49125 2.38643C9.57724 2.52917 9.61324 2.69649 9.59357 2.86197C9.5739 3.02745 9.49967 3.18167 9.38261 3.30027C8.12509 4.55937 7.26904 6.16299 6.92267 7.90848C6.5763 9.65396 6.75514 11.463 7.43661 13.1068C8.11808 14.7507 9.27157 16.1556 10.7513 17.1441C12.231 18.1326 13.9706 18.6602 15.7501 18.6603C16.7328 18.6638 17.709 18.5015 18.6376 18.1803C18.798 18.1261 18.9719 18.1277 19.1313 18.1849C19.2906 18.242 19.4259 18.3514 19.5151 18.4953C19.6075 18.6376 19.649 18.8071 19.6326 18.976C19.6163 19.1449 19.5431 19.3033 19.4251 19.4253Z',\n fill: color || EColorPalette.cBlack,\n })}\n ${this.getPath({\n d: 'M17.0303 15.2197C17.171 15.3603 17.25 15.5511 17.25 15.75C17.25 15.9489 17.171 16.1397 17.0303 16.2803C16.8897 16.421 16.6989 16.5 16.5 16.5H13.5C13.3578 16.4989 13.2189 16.4575 13.0994 16.3804C12.9799 16.3034 12.8847 16.194 12.825 16.065C12.7649 15.9345 12.7436 15.7895 12.7635 15.6472C12.7835 15.505 12.8439 15.3714 12.9375 15.2625L14.4375 13.5H13.5C13.3011 13.5 13.1103 13.421 12.9697 13.2803C12.829 13.1397 12.75 12.9489 12.75 12.75C12.75 12.5511 12.829 12.3603 12.9697 12.2197C13.1103 12.079 13.3011 12 13.5 12H16.0725C16.2146 12.0028 16.353 12.0459 16.4715 12.1244C16.59 12.2028 16.6838 12.3133 16.742 12.4429C16.8002 12.5726 16.8203 12.7162 16.8 12.8568C16.7797 12.9975 16.7199 13.1295 16.6275 13.2375L15.1275 15H16.5C16.6989 15 16.8897 15.079 17.0303 15.2197Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.6,\n })}\n ${this.getPath({\n d: 'M22.2803 10.7197C22.421 10.8603 22.5 11.0511 22.5 11.25C22.5 11.4489 22.421 11.6397 22.2803 11.7803C22.1397 11.921 21.9489 12 21.75 12H18.75C18.6078 11.9989 18.4689 11.9575 18.3494 11.8804C18.2299 11.8034 18.1347 11.694 18.075 11.565C18.0149 11.4345 17.9936 11.2895 18.0135 11.1472C18.0335 11.005 18.0939 10.8714 18.1875 10.7625L19.6875 9H18.75C18.5511 9 18.3603 8.92098 18.2197 8.78033C18.079 8.63968 18 8.44891 18 8.25C18 8.05109 18.079 7.86032 18.2197 7.71967C18.3603 7.57902 18.5511 7.5 18.75 7.5H21.3225C21.4646 7.50281 21.603 7.54594 21.7215 7.62436C21.84 7.70278 21.9338 7.81326 21.992 7.94294C22.0502 8.07262 22.0703 8.21616 22.05 8.35683C22.0297 8.4975 21.9699 8.62952 21.8775 8.7375L20.3775 10.5H21.75C21.9489 10.5 22.1397 10.579 22.2803 10.7197Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.8,\n })}\n ${this.getPath({\n d: 'M16.7816 6.71967C16.9222 6.86032 17.0012 7.05109 17.0012 7.25C17.0012 7.44891 16.9222 7.63968 16.7816 7.78033C16.6409 7.92098 16.4501 8 16.2512 8H11.7512C11.6078 8.00035 11.4672 7.95956 11.3463 7.88246C11.2253 7.80536 11.129 7.69518 11.0687 7.565C11.0087 7.43451 10.9873 7.28951 11.0073 7.14725C11.0272 7.00499 11.0876 6.87144 11.1812 6.7625L14.0012 3.5H11.7512C11.5523 3.5 11.3615 3.42098 11.2209 3.28033C11.0802 3.13968 11.0012 2.94891 11.0012 2.75C11.0012 2.55109 11.0802 2.36032 11.2209 2.21967C11.3615 2.07902 11.5523 2 11.7512 2H15.6062C15.7496 1.99999 15.89 2.04108 16.0107 2.11839C16.1315 2.1957 16.2275 2.30601 16.2875 2.43623C16.3475 2.56645 16.3689 2.71114 16.3491 2.85315C16.3294 2.99516 16.2694 3.12855 16.1762 3.2375L13.3787 6.5H16.2512C16.4501 6.5 16.6409 6.57902 16.7816 6.71967Z',\n fill: color || EColorPalette.cBlack,\n opacity: 0.4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CLIPBOARD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M8.72732 4.63647H7.45459C6.35002 4.63647 5.45459 5.5319 5.45459 6.63647V19.0001C5.45459 20.1047 6.35002 21.0001 7.45459 21.0001H16.5455C17.6501 21.0001 18.5455 20.1047 18.5455 19.0001V6.63647C18.5455 5.53191 17.6501 4.63647 16.5455 4.63647H15.2728V5.04557C15.2728 5.72337 14.7233 6.27284 14.0455 6.27284H9.95459C9.27679 6.27284 8.72732 5.72337 8.72732 5.04557V4.63647Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getPath({\n d: 'M11.1818 3.81818H10.0454C9.76927 3.81818 9.54541 4.04204 9.54541 4.31818V4.95455C9.54541 5.23069 9.76927 5.45455 10.0454 5.45455H13.9545C14.2306 5.45455 14.4545 5.23069 14.4545 4.95455V4.31818C14.4545 4.04204 14.2306 3.81818 13.9545 3.81818H12.8181C12.8181 3.36631 12.4518 3 12 3C11.5481 3 11.1818 3.36631 11.1818 3.81818Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 8,\n y: 10,\n width: 4,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 8,\n y: 14,\n width: 8,\n height: 2,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BULLET_LIST: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 24')}\n ${this.getPath({\n d: 'M9.5 6.5C9.5 5.67157 10.1716 5 11 5H20C20.8284 5 21.5 5.67157 21.5 6.5C21.5 7.32843 20.8284 8 20 8H11C10.1716 8 9.5 7.32843 9.5 6.5ZM9.5 11.5C9.5 10.6716 10.1716 10 11 10H20C20.8284 10 21.5 10.6716 21.5 11.5C21.5 12.3284 20.8284 13 20 13H11C10.1716 13 9.5 12.3284 9.5 11.5ZM11 15C10.1716 15 9.5 15.6716 9.5 16.5C9.5 17.3284 10.1716 18 11 18H20C20.8284 18 21.5 17.3284 21.5 16.5C21.5 15.6716 20.8284 15 20 15H11Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M6 8C6.82843 8 7.5 7.32843 7.5 6.5C7.5 5.67157 6.82843 5 6 5C5.17157 5 4.5 5.67157 4.5 6.5C4.5 7.32843 5.17157 8 6 8ZM6 13C6.82843 13 7.5 12.3284 7.5 11.5C7.5 10.6716 6.82843 10 6 10C5.17157 10 4.5 10.6716 4.5 11.5C4.5 12.3284 5.17157 13 6 13ZM7.5 16.5C7.5 17.3284 6.82843 18 6 18C5.17157 18 4.5 17.3284 4.5 16.5C4.5 15.6716 5.17157 15 6 15C6.82843 15 7.5 15.6716 7.5 16.5Z',\n fill: color || EColorPalette.cGray4,\n opacity: 0.3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.PIE_CHART_CIRCLE: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 18 18', 'none')}\n \n ${this.getPath({\n d: 'M7.875 0.0703125V10.1257H17.9304C17.3767 14.5653 13.5896 18.0007 9 18.0007C4.02943 18.0007 0 13.9713 0 9.00069C0 4.41111 3.4354 0.623923 7.875 0.0703125Z',\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d: 'M10.125 0.0703125V7.87569H17.9304C17.4228 3.80463 14.196 0.577966 10.125 0.0703125Z',\n fill: color || EColorPalette.cGray4,\n })}\n \n ${this.getDefsPart()}\n ${this.getClipPath()}\n \n ${this.endClipPath()}\n ${this.endDefsPart()}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.LIST_WITH_THREE_STRIPES: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 18 14', 'none')}\n ${this.getPath({\n d: 'M0.541992 13.1667V10.3333H17.4587V13.1667H0.541992ZM0.541992 8.41667V5.58333H17.4587V8.41667H0.541992ZM0.541992 3.64583V0.8125H17.4587V3.64583H0.541992Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CARDS_BOARDS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 16 16', 'none')}\n ${this.getPath({\n d: 'M2.16667 6.75C1.70833 6.75 1.31597 6.58681 0.989583 6.26042C0.663194 5.93403 0.5 5.54167 0.5 5.08333V2.16667C0.5 1.70833 0.663194 1.31597 0.989583 0.989583C1.31597 0.663194 1.70833 0.5 2.16667 0.5H5.08333C5.54167 0.5 5.93403 0.663194 6.26042 0.989583C6.58681 1.31597 6.75 1.70833 6.75 2.16667V5.08333C6.75 5.54167 6.58681 5.93403 6.26042 6.26042C5.93403 6.58681 5.54167 6.75 5.08333 6.75H2.16667ZM2.16667 15.5C1.70833 15.5 1.31597 15.3368 0.989583 15.0104C0.663194 14.684 0.5 14.2917 0.5 13.8333V10.9167C0.5 10.4583 0.663194 10.066 0.989583 9.73958C1.31597 9.41319 1.70833 9.25 2.16667 9.25H5.08333C5.54167 9.25 5.93403 9.41319 6.26042 9.73958C6.58681 10.066 6.75 10.4583 6.75 10.9167V13.8333C6.75 14.2917 6.58681 14.684 6.26042 15.0104C5.93403 15.3368 5.54167 15.5 5.08333 15.5H2.16667ZM10.9167 6.75C10.4583 6.75 10.066 6.58681 9.73958 6.26042C9.41319 5.93403 9.25 5.54167 9.25 5.08333V2.16667C9.25 1.70833 9.41319 1.31597 9.73958 0.989583C10.066 0.663194 10.4583 0.5 10.9167 0.5H13.8333C14.2917 0.5 14.684 0.663194 15.0104 0.989583C15.3368 1.31597 15.5 1.70833 15.5 2.16667V5.08333C15.5 5.54167 15.3368 5.93403 15.0104 6.26042C14.684 6.58681 14.2917 6.75 13.8333 6.75H10.9167ZM10.9167 15.5C10.4583 15.5 10.066 15.3368 9.73958 15.0104C9.41319 14.684 9.25 14.2917 9.25 13.8333V10.9167C9.25 10.4583 9.41319 10.066 9.73958 9.73958C10.066 9.41319 10.4583 9.25 10.9167 9.25H13.8333C14.2917 9.25 14.684 9.41319 15.0104 9.73958C15.3368 10.066 15.5 10.4583 15.5 10.9167V13.8333C15.5 14.2917 15.3368 14.684 15.0104 15.0104C14.684 15.3368 14.2917 15.5 13.8333 15.5H10.9167Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.BELL: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 12 16', 'none')}\n ${this.getPath({\n d: 'M0 13.25V11.75H1.5V6.5C1.5 5.4625 1.8125 4.54063 2.4375 3.73438C3.0625 2.92813 3.875 2.4 4.875 2.15V1.625C4.875 1.3125 4.98438 1.04688 5.20312 0.828125C5.42188 0.609375 5.6875 0.5 6 0.5C6.3125 0.5 6.57813 0.609375 6.79688 0.828125C7.01563 1.04688 7.125 1.3125 7.125 1.625V2.15C8.125 2.4 8.9375 2.92813 9.5625 3.73438C10.1875 4.54063 10.5 5.4625 10.5 6.5V11.75H12V13.25H0ZM6 15.5C5.5875 15.5 5.23438 15.3531 4.94063 15.0594C4.64688 14.7656 4.5 14.4125 4.5 14H7.5C7.5 14.4125 7.35313 14.7656 7.05938 15.0594C6.76563 15.3531 6.4125 15.5 6 15.5Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.NOTIFICATIONS_BIT: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M14.1618 5.87061C14.0566 6.22877 14.0001 6.60779 14.0001 7C14.0001 8.74164 15.1132 10.2233 16.6668 10.7724V11.8587C16.6668 13.178 17.2448 14.4233 18.2528 15.2753C18.5182 15.5027 18.6668 15.8253 18.6668 16.1667C18.6668 16.81 18.1435 17.3333 17.5002 17.3333H6.50016C5.85683 17.3333 5.3335 16.81 5.3335 16.1667C5.3335 15.8253 5.48216 15.5027 5.7415 15.2807C6.7555 14.4233 7.3335 13.178 7.3335 11.8587V10C7.3335 7.654 9.0755 5.712 11.3335 5.38667V4.66667C11.3335 4.298 11.6322 4 12.0002 4C12.3682 4 12.6668 4.298 12.6668 4.66667V5.38667C13.1991 5.46338 13.7028 5.63 14.1618 5.87061Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getOpenUrlClip(0.3)}\n ${this.getPath({\n d: 'M12.0001 20C13.2074 20 14.2174 19.1393 14.4494 18H9.55078C9.78278 19.1393 10.7928 20 12.0001 20Z',\n fill: color || EColorPalette.cGray,\n })}\n ${this.getEndUrlClip()}\n ${this.getSvgEndTemplate()}\n `;\n }\n case EIcon.SNEAKERS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getRectangle({\n opacity: 0.3,\n x: 2.29688,\n y: 4.05859,\n width: 6.73002,\n height: 13.46,\n rx: 1,\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getPath({\n d:\n 'M 1.33545 13.325 ' +\n 'C 1.33545 13.016 ' +\n '1.57177 12.7596 ' +\n '1.87853 12.7222' +\n 'C6.35443 12.1768 ' +\n '8.53329 10.46623 ' +\n '9.42237 9.51687 ' +\n 'C 9.70192 9.21836 ' +\n '10.2192 9.1756 ' +\n '10.5009 9.47202 ' +\n 'C 10.7876 9.7736 ' +\n '11.1616 10.15966 ' +\n '11.5713 10.56384' +\n 'C 11.5436 10.59924 ' +\n '11.518 10.63702 ' +\n '11.4949 10.67709 ' +\n 'L 10.0527 13.175 ' +\n 'C 9.78724 13.6348 ' +\n '9.9448 14.2228 ' +\n '10.4046 14.4883 ' +\n 'C 10.8645 14.7538 ' +\n '11.4525 14.5962 ' +\n '11.718 14.1364 ' +\n 'L 13.0109 11.897 ' +\n 'C 13.4644 12.2825 ' +\n '13.8931 12.604 ' +\n '14.2347 12.7814 ' +\n 'C 14.3514 12.8421 ' +\n '14.4664 12.9005 ' +\n '14.5796 12.9566 ' +\n 'L 13.8985 14.1364 ' +\n 'C 13.633 14.5962 ' +\n '13.7905 15.1842 ' +\n '14.2504 15.4497 ' +\n 'C 14.7102 15.7152 ' +\n '15.2982 15.5577 ' +\n '15.5637 15.0978 ' +\n 'L 16.3565 13.7247 ' +\n 'C 17.8284 13.2618 ' +\n '18.9067 14.3968 ' +\n '19.6913 14.4951 ' +\n 'C 20.0361 14.5383 ' +\n '20.3242 14.5744 ' +\n '20.5641 14.6344 ' +\n 'C 21.4747 14.862 ' +\n '22.1696 15.6293 ' +\n '22.649 16.3741 ' +\n 'C 23.2069 17.2409 ' +\n '22.717 18.2995 ' +\n '21.7186 18.5561 ' +\n 'C 20.5812 18.8485 ' +\n '18.8943 19.1738 ' +\n '16.6916 19.3075 ' +\n 'C 12.887 19.5385 ' +\n '4.23132 19.3713 ' +\n '1.91473 19.3207 ' +\n 'C 1.58916 19.3136 ' +\n '1.33545 19.048 ' +\n '1.33545 18.7223 ' +\n 'L 1.33545 13.325Z',\n\n fill: color || EColorPalette.cGray4,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOWNLOAD: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M2 13C2 12.5 2.5 12 3 12C3.5 12 4 12.5 4 13C4 13.5 4 18 4 18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V13C20 12.4477 20.4477 12 21 12C21.5523 12 22 12.4477 22 13V18C22 20.2091 20.2091 22 18 22H6C3.79086 22 2 20.2091 2 18C2 18 2 13.5 2 13Z',\n fill: color || EColorPalette.cGreen3,\n opacity: 0.3,\n })}\n ${this.getRectangle({\n opacity: 0.3,\n x: 13,\n y: 15,\n width: 2,\n height: 14,\n rx: 1,\n transform: 'rotate(-180 13 15)',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M16.2929 9.29289C16.6834 8.90237 17.3166 8.90237 17.7071 9.29289C18.0976 9.68342 18.0976 10.3166 17.7071 10.7071L12.7071 15.7071C12.331 16.0832 11.7264 16.0991 11.331 15.7433L6.33104 11.2433C5.92053 10.8738 5.88725 10.2415 6.25671 9.83103C6.62617 9.42052 7.25845 9.38724 7.66896 9.7567L11.9638 13.622L16.2929 9.29289Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.HELP: {\n return `\n \n \n \n `;\n }\n\n case EIcon.CLOSE_SMALL: {\n return `\n \n \n \n `;\n }\n\n case EIcon.THREE_COLUMNS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, 12, 12, '0 0 12 12')}\n ${this.getPath({\n d: 'M5.37143 12C5.11238 12 4.89524 11.9179 4.72 11.7536C4.54476 11.5893 4.45714 11.3857 4.45714 11.1429V0.857143C4.45714 0.614286 4.54476 0.410714 4.72 0.246429C4.89524 0.0821429 5.11238 0 5.37143 0H6.62857C6.88762 0 7.10476 0.0821429 7.28 0.246429C7.45524 0.410714 7.54286 0.614286 7.54286 0.857143V11.1429C7.54286 11.3857 7.45524 11.5893 7.28 11.7536C7.10476 11.9179 6.88762 12 6.62857 12H5.37143ZM0.914286 12C0.655238 12 0.438095 11.9179 0.262857 11.7536C0.087619 11.5893 0 11.3857 0 11.1429V0.857143C0 0.614286 0.087619 0.410714 0.262857 0.246429C0.438095 0.0821429 0.655238 0 0.914286 0H2.17143C2.43048 0 2.64762 0.0821429 2.82286 0.246429C2.9981 0.410714 3.08571 0.614286 3.08571 0.857143V11.1429C3.08571 11.3857 2.9981 11.5893 2.82286 11.7536C2.64762 11.9179 2.43048 12 2.17143 12H0.914286ZM9.82857 12C9.56952 12 9.35238 11.9179 9.17714 11.7536C9.0019 11.5893 8.91429 11.3857 8.91429 11.1429V0.857143C8.91429 0.614286 9.0019 0.410714 9.17714 0.246429C9.35238 0.0821429 9.56952 0 9.82857 0H11.0857C11.3448 0 11.5619 0.0821429 11.7371 0.246429C11.9124 0.410714 12 0.614286 12 0.857143V11.1429C12 11.3857 11.9124 11.5893 11.7371 11.7536C11.5619 11.9179 11.3448 12 11.0857 12H9.82857Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.TWO_ROWS: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, 12, 12, '0 0 12 12')}\n ${this.getPath({\n d: 'M12 4C12 4.36667 11.8694 4.68056 11.6083 4.94167C11.3472 5.20278 11.0333 5.33333 10.6667 5.33333L1.33333 5.33333C0.966667 5.33333 0.652778 5.20278 0.391667 4.94167C0.130556 4.68056 0 4.36667 0 4L0 1.33333C0 0.966666 0.130556 0.652777 0.391667 0.391666C0.652778 0.130555 0.966667 -9.53674e-07 1.33333 -9.53674e-07H10.6667C11.0333 -9.53674e-07 11.3472 0.130555 11.6083 0.391666C11.8694 0.652777 12 0.966666 12 1.33333V4ZM12 10.6667C12 11.0333 11.8694 11.3472 11.6083 11.6083C11.3472 11.8694 11.0333 12 10.6667 12H1.33333C0.966667 12 0.652778 11.8694 0.391667 11.6083C0.130556 11.3472 0 11.0333 0 10.6667L0 8C0 7.63333 0.130556 7.31944 0.391667 7.05833C0.652778 6.79722 0.966667 6.66667 1.33333 6.66667L10.6667 6.66667C11.0333 6.66667 11.3472 6.79722 11.6083 7.05833C11.8694 7.31944 12 7.63333 12 8V10.6667Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SQUARE_GRID: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, 18, 18, '0 0 18 18')}\n ${this.getPath({\n d: 'M3 3H6V6H3V3Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgBeginTemplate(this.uniqueId, 18, 18, '0 0 18 18')}\n ${this.getPath({\n d: 'M8.5 3C7.94772 3 7.5 3.44772 7.5 4V5C7.5 5.55228 7.94772 6 8.5 6H9.5C10.0523 6 10.5 5.55228 10.5 5V4C10.5 3.44772 10.0523 3 9.5 3H8.5ZM4 7.5C3.44772 7.5 3 7.94772 3 8.5V9.5C3 10.0523 3.44772 10.5 4 10.5H5C5.55228 10.5 6 10.0523 6 9.5V8.5C6 7.94772 5.55228 7.5 5 7.5H4ZM7.5 8.5C7.5 7.94772 7.94772 7.5 8.5 7.5H9.5C10.0523 7.5 10.5 7.94772 10.5 8.5V9.5C10.5 10.0523 10.0523 10.5 9.5 10.5H8.5C7.94772 10.5 7.5 10.0523 7.5 9.5V8.5ZM13 3C12.4477 3 12 3.44772 12 4V5C12 5.55228 12.4477 6 13 6H14C14.5523 6 15 5.55228 15 5V4C15 3.44772 14.5523 3 14 3H13ZM12 8.5C12 7.94772 12.4477 7.5 13 7.5H14C14.5523 7.5 15 7.94772 15 8.5V9.5C15 10.0523 14.5523 10.5 14 10.5H13C12.4477 10.5 12 10.0523 12 9.5V8.5ZM4 12C3.44772 12 3 12.4477 3 13V14C3 14.5523 3.44772 15 4 15H5C5.55228 15 6 14.5523 6 14V13C6 12.4477 5.55228 12 5 12H4ZM7.5 13C7.5 12.4477 7.94772 12 8.5 12H9.5C10.0523 12 10.5 12.4477 10.5 13V14C10.5 14.5523 10.0523 15 9.5 15H8.5C7.94772 15 7.5 14.5523 7.5 14V13ZM13 12C12.4477 12 12 12.4477 12 13V14C12 14.5523 12.4477 15 13 15H14C14.5523 15 15 14.5523 15 14V13C15 12.4477 14.5523 12 14 12H13Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.CALENDAR: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 24 24')}\n ${this.getPath({\n d: 'M5 22C4.45 22 3.97917 21.8042 3.5875 21.4125C3.19583 21.0208 3 20.55 3 20V6C3 5.45 3.19583 4.97917 3.5875 4.5875C3.97917 4.19583 4.45 4 5 4H6V3C6 2.71667 6.09583 2.47917 6.2875 2.2875C6.47917 2.09583 6.71667 2 7 2C7.28333 2 7.52083 2.09583 7.7125 2.2875C7.90417 2.47917 8 2.71667 8 3V4H16V3C16 2.71667 16.0958 2.47917 16.2875 2.2875C16.4792 2.09583 16.7167 2 17 2C17.2833 2 17.5208 2.09583 17.7125 2.2875C17.9042 2.47917 18 2.71667 18 3V4H19C19.55 4 20.0208 4.19583 20.4125 4.5875C20.8042 4.97917 21 5.45 21 6V20C21 20.55 20.8042 21.0208 20.4125 21.4125C20.0208 21.8042 19.55 22 19 22H5ZM5 20H19V10H5V20ZM5 8H19V6H5V8Z',\n opacity: 0.3,\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M11.2875 13.7125C11.4792 13.9042 11.7167 14 12 14C12.2833 14 12.5208 13.9042 12.7125 13.7125C12.9042 13.5208 13 13.2833 13 13C13 12.7167 12.9042 12.4792 12.7125 12.2875C12.5208 12.0958 12.2833 12 12 12C11.7167 12 11.4792 12.0958 11.2875 12.2875C11.0958 12.4792 11 12.7167 11 13C11 13.2833 11.0958 13.5208 11.2875 13.7125Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M7.2875 13.7125C7.47917 13.9042 7.71667 14 8 14C8.28333 14 8.52083 13.9042 8.7125 13.7125C8.90417 13.5208 9 13.2833 9 13C9 12.7167 8.90417 12.4792 8.7125 12.2875C8.52083 12.0958 8.28333 12 8 12C7.71667 12 7.47917 12.0958 7.2875 12.2875C7.09583 12.4792 7 12.7167 7 13C7 13.2833 7.09583 13.5208 7.2875 13.7125Z',\n fill: color || EColorPalette.cGreen3,\n })}\n ${this.getPath({\n d: 'M15.2875 13.7125C15.4792 13.9042 15.7167 14 16 14C16.2833 14 16.5208 13.9042 16.7125 13.7125C16.9042 13.5208 17 13.2833 17 13C17 12.7167 16.9042 12.4792 16.7125 12.2875C16.5208 12.0958 16.2833 12 16 12C15.7167 12 15.4792 12.0958 15.2875 12.2875C15.0958 12.4792 15 12.7167 15 13C15 13.2833 15.0958 13.5208 15.2875 13.7125Z',\n fill: color || EColorPalette.cGreen3,\n })} \n ${this.getPath({\n d: 'M11.2875 17.7125C11.4792 17.9042 11.7167 18 12 18C12.2833 18 12.5208 17.9042 12.7125 17.7125C12.9042 17.5208 13 17.2833 13 17C13 16.7167 12.9042 16.4792 12.7125 16.2875C12.5208 16.0958 12.2833 16 12 16C11.7167 16 11.4792 16.0958 11.2875 16.2875C11.0958 16.4792 11 16.7167 11 17C11 17.2833 11.0958 17.5208 11.2875 17.7125Z',\n fill: color || EColorPalette.cGreen3,\n })} \n ${this.getPath({\n d: 'M7.2875 17.7125C7.47917 17.9042 7.71667 18 8 18C8.28333 18 8.52083 17.9042 8.7125 17.7125C8.90417 17.5208 9 17.2833 9 17C9 16.7167 8.90417 16.4792 8.7125 16.2875C8.52083 16.0958 8.28333 16 8 16C7.71667 16 7.47917 16.0958 7.2875 16.2875C7.09583 16.4792 7 16.7167 7 17C7 17.2833 7.09583 17.5208 7.2875 17.7125Z',\n fill: color || EColorPalette.cGreen3,\n })} \n ${this.getPath({\n d: 'M15.2875 17.7125C15.4792 17.9042 15.7167 18 16 18C16.2833 18 16.5208 17.9042 16.7125 17.7125C16.9042 17.5208 17 17.2833 17 17C17 16.7167 16.9042 16.4792 16.7125 16.2875C16.5208 16.0958 16.2833 16 16 16C15.7167 16 15.4792 16.0958 15.2875 16.2875C15.0958 16.4792 15 16.7167 15 17C15 17.2833 15.0958 17.5208 15.2875 17.7125Z',\n fill: color || EColorPalette.cGreen3,\n })} \n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.DOLLAR_THIN: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 25 25')} \n ${this.getPath({\n d: 'M16.4598 9.46875L14.4598 9.46875C14.4598 8.38875 13.0898 7.46875 11.4598 7.46875C9.82984 7.46875 8.45984 8.38875 8.45984 9.46875C8.45984 10.5687 9.49984 10.9687 11.6998 11.4987C13.8198 12.0287 16.4598 12.6888 16.4598 15.4687C16.4598 17.2587 14.9598 18.9687 12.4598 19.2887L12.4598 21.4687L10.4598 21.4687L10.4598 19.2887C7.96997 19.2887 6.45984 17.2587 6.45984 15.4687L8.45984 15.4687C8.45984 16.5487 9.82984 17.4687 11.4598 17.4687C13.0898 17.4687 14.4598 16.5487 14.4598 15.4687C14.4598 14.3687 13.4198 13.9687 11.2198 13.4387C9.09984 12.9087 6.45984 12.2487 6.45984 9.46875C6.45984 7.67875 8.68011 5.64875 10.4598 5.64875L10.4598 3.46875L12.4598 3.46875L12.4598 5.64875C14.8848 5.96875 16.4598 7.67875 16.4598 9.46875Z',\n fill: color || EColorPalette.cGreen3,\n })} \n ${this.getSvgEndTemplate()}\n `;\n }\n\n case EIcon.SYNC: {\n return `\n ${this.getSvgBeginTemplate(this.uniqueId, width, height, '0 0 20 20')} \n ${this.getPath({\n d: 'M3.3335 16.6693V15.0026H5.62516L5.29183 14.7109C4.56961 14.072 4.06266 13.3429 3.771 12.5234C3.47933 11.704 3.3335 10.8776 3.3335 10.0443C3.3335 8.5026 3.7953 7.13108 4.71891 5.92969C5.64252 4.7283 6.84738 3.93316 8.3335 3.54427V5.29427C7.3335 5.65538 6.52794 6.26997 5.91683 7.13802C5.30572 8.00608 5.00016 8.97483 5.00016 10.0443C5.00016 10.6693 5.11822 11.2769 5.35433 11.8672C5.59044 12.4575 5.9585 13.0026 6.4585 13.5026L6.66683 13.7109V11.6693H8.3335V16.6693H3.3335ZM11.6668 16.4609V14.7109C12.6668 14.3498 13.4724 13.7352 14.0835 12.8672C14.6946 11.9991 15.0002 11.0304 15.0002 9.96094C15.0002 9.33594 14.8821 8.7283 14.646 8.13802C14.4099 7.54774 14.0418 7.0026 13.5418 6.5026L13.3335 6.29427V8.33594H11.6668V3.33594H16.6668V5.0026H14.3752L14.7085 5.29427C15.3891 5.97483 15.8856 6.71441 16.1981 7.51302C16.5106 8.31163 16.6668 9.1276 16.6668 9.96094C16.6668 11.5026 16.205 12.8741 15.2814 14.0755C14.3578 15.2769 13.1529 16.072 11.6668 16.4609Z',\n fill: color || EColorPalette.cGray5,\n })} \n ${this.getSvgEndTemplate()}\n `;\n }\n }\n return undefined;\n }\n\n private getSvgBeginTemplate(\n uniqueId: string,\n width: number,\n height: number,\n viewBox: string,\n color = 'none'\n ): string {\n return ``;\n }\n\n private getSvgEndTemplate(): string {\n return ``;\n }\n\n private getPath(params: ISvgPath): string {\n return ``;\n }\n\n private getRectangle(params: ISvgRectangle): string {\n return ``;\n }\n\n private getCircle(params: ISvgCircle): string {\n return ``;\n }\n\n private getX(x: number): string {\n return isNil(x) ? '' : `x=\"${x}\"`;\n }\n\n private getY(y: number): string {\n return isNil(y) ? '' : `y=\"${y}\"`;\n }\n\n private getColorFill(color: string): string {\n return color ? `fill=\"${color}\"` : '';\n }\n\n private getColorStroke(color: string): string {\n return color ? `stroke=\"${color}\"` : '';\n }\n\n private getStrokeWidth(value: number): string {\n return value ? `stroke-width=\"${value}\"` : '';\n }\n\n private getUrlClip() {\n return ``;\n }\n\n private getOpenUrlClip(opacity) {\n return ``;\n }\n\n private getEndUrlClip() {\n return ``;\n }\n\n private getDefsPart() {\n return ``;\n }\n\n private endDefsPart() {\n return ``;\n }\n\n private getClipPath() {\n return ``;\n }\n\n private endClipPath() {\n return ``;\n }\n\n private getClipPathRect() {\n return ``;\n }\n}\n","\n
\n
\n\n\n \n\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { IconService } from './services/icon.service';\n\n@Component({\n selector: 'app-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule, PipesModule, MatIconModule],\n})\nexport class IconComponent extends ComponentAbstract implements OnInit {\n iconTemplate = '';\n @Input() cssIcon = 'icon-container';\n\n constructor(protected cdr: ChangeDetectorRef, private iconService: IconService) {\n super(cdr);\n }\n\n @Input() set svg(icon: EIcon) {\n this.icon = icon;\n this.getIconTemplate();\n }\n\n @Input() set iconHeight(height: number) {\n this.height = height;\n this.getIconTemplate();\n }\n\n @Input() set iconWidth(width: number) {\n this.width = width;\n this.getIconTemplate();\n }\n\n @Input() set iconColor(color: EColorPalette) {\n this.color = color;\n this.getIconTemplate();\n\n this.baseColor = color;\n }\n\n @Input() set iconSecondColor(color: EColorPalette) {\n this.secondColor = color;\n this.getIconTemplate();\n }\n\n @Input() hoverColor: EColorPalette;\n\n icon: EIcon;\n width: number;\n height: number;\n color: EColorPalette;\n secondColor: EColorPalette;\n\n baseColor: EColorPalette;\n\n ngOnInit(): void {\n this.getIconTemplate();\n }\n\n private getIconTemplate() {\n if (this.icon) {\n this.iconTemplate = this.iconService.getIconTemplate(\n this.icon,\n this.width,\n this.height,\n this.color,\n this.secondColor\n );\n this.cdr.markForCheck();\n }\n }\n\n mouseEnter() {\n if (this.hoverColor) {\n this.color = this.hoverColor;\n }\n }\n\n mouseLeave() {\n if (this.hoverColor) {\n this.color = this.baseColor;\n }\n }\n}\n","
\n \n
\n\n\n
\n {{ itemMessage }}\n
\n
\n\n\n
\n {{ message }}\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\n\nimport { InputErrorService } from '@app/modules/ui-components/components/input-error/services/input-error.service';\n\n@Component({\n selector: 'app-input-error',\n templateUrl: './input-error.component.html',\n styleUrls: ['./input-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputErrorComponent {\n @Input() errors: ValidationErrors;\n @Input() visible = false;\n @Input() message = '';\n @Input() containerCss = '';\n\n constructor(private inputErrorService: InputErrorService) {}\n\n get validationMessages(): string[] {\n return this.visible && this.errors\n ? (Object.entries(this.errors) || [])\n .filter(([key, errorParams]) => !!errorParams)\n .map(([key, errorParams]) => {\n return this.inputErrorService.getValidationMessage(key, errorParams);\n })\n : [];\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { InputErrorService } from '@app/modules/ui-components/components/input-error/services/input-error.service';\n\nimport { InputErrorComponent } from './input-error.component';\n\n@NgModule({\n declarations: [InputErrorComponent],\n providers: [InputErrorService],\n exports: [InputErrorComponent],\n imports: [CommonModule],\n})\nexport class InputErrorModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class InputErrorService {\n getValidationMessage(validator: string, errorParams: unknown): string {\n switch (validator) {\n case 'dateRangeError': {\n return 'Wrong date range';\n }\n case 'numberRangeError': {\n return 'Wrong number range';\n }\n case 'regexpError': {\n return 'Wrong format';\n }\n case 'max': {\n return 'Value too large';\n }\n case 'phoneNumber': {\n return 'Phone number is invalid';\n }\n case 'requiredOneOf': {\n const error = errorParams as { fields: string[] };\n return `One of these fields is required: ${error.fields.join(', ')}`;\n }\n case 'min': {\n return 'Value too small';\n }\n case 'digitsPositive': {\n return 'Only positive digits are allowed';\n }\n case 'digits': {\n return 'Only digits are allowed';\n }\n case 'required': {\n return '* required field';\n }\n case 'atLeastOnePhotoRequired': {\n return 'At least one photo is required';\n }\n case 'maxlength': {\n const error = errorParams as { actualLength: number; requiredLength: number };\n return `Max text length is ${error.requiredLength}`;\n }\n case 'minlength': {\n const error = errorParams as { actualLength: number; requiredLength: number };\n return `Minimum text length is ${error.requiredLength}`;\n }\n case 'kpiTaskRange': {\n return 'Wrong data range';\n }\n case 'laterThanToday': {\n return 'Due date must be later than today date ';\n }\n case 'urlGoogleDrive': {\n return 'Incorrect Google Drive URL';\n }\n case 'email': {\n return 'Incorrect email address';\n }\n case 'atLeastOneItemRequired': {\n return 'At least one item is required';\n }\n case 'url': {\n return 'Incorrect URL address';\n }\n\n case 'stepBeforeEnd': {\n return '\"Due date\" must be earlier than turnover end date';\n }\n\n case 'stepAfterStart': {\n return '\"Due date\" must be later than turnover start date';\n }\n\n case 'duplicatedRole': {\n return 'A role with the given name already exists';\n }\n\n case 'duplicatedFinish': {\n return 'A finish with the given name already exists';\n }\n\n case 'userAlreadyExists': {\n return 'User already exists';\n }\n case 'userInactive': {\n return \"User with provided email was recently removed and can't be used again\";\n }\n\n case 'elapsedDaysRangeEmpty': {\n return 'Empty range';\n }\n\n case 'elapsedDaysRangeEmptyLow': {\n return 'Empty low priority value';\n }\n\n case 'elapsedDaysRangeEmptyHigh': {\n return 'Empty high priority value';\n }\n\n case 'elapsedDaysRangeHigh': {\n return \"Value in 'high priority' field must be lover, than 'low priority' field\";\n }\n\n case 'elapsedDaysRangeLow': {\n return \"Value in 'low priority' field must be lover, than 'high priority' field\";\n }\n\n case 'phoneNumberAsIdentity': {\n return 'Enter phone number as identity';\n }\n case 'emailAddedAsIdentity': {\n return 'Enter email as identity';\n }\n\n case 'customError': {\n if (typeof errorParams === 'string') {\n return errorParams;\n }\n return '';\n }\n\n default: {\n return '';\n }\n }\n }\n}\n","\n \n \n \n\n\n\n
\n \n
\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n\n\n\n
\n
\n
{{ emptyChartLabel }}
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport {\n ArcElement,\n BarController,\n BarElement,\n CategoryScale,\n Chart,\n ChartConfiguration,\n ChartDataset,\n ChartOptions,\n DefaultDataPoint,\n Filler,\n Legend,\n LineController,\n LineElement,\n LinearScale,\n PieController,\n PointElement,\n SubTitle,\n Title,\n Tooltip,\n} from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport ChartTrendline from 'chartjs-plugin-trendline';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { ChartTypes } from '@dashboards/models/chart-types.enum';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\n\nChart.register(\n ArcElement,\n BarElement,\n BarController,\n LineController,\n PieController,\n CategoryScale,\n LinearScale,\n Legend,\n Title,\n Tooltip,\n SubTitle,\n ChartDataLabels,\n PointElement,\n LineElement,\n ChartTrendline,\n Filler\n);\n\nChart.defaults.set('plugins.datalabels', {\n display: false,\n});\n\ninterface TrendlineLinearOptions {\n colorMin: string;\n colorMax: string;\n lineStyle: 'dotted' | 'solid';\n width: number;\n}\n\nexport type LineChartDatasetOptions = ChartDataset<'line', DefaultDataPoint<'line'>> & {\n trendlineLinear?: TrendlineLinearOptions;\n};\n\nexport interface LineChartDateset {\n labels: string[];\n datasets: LineChartDatasetOptions[];\n}\n\nexport type LineChartOptions = ChartOptions<'line'>;\n\n@UntilDestroy()\n@Component({\n selector: 'app-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LineChartComponent extends ComponentAbstract implements OnInit, OnDestroy {\n @Input() displayLegend = true;\n @Input() options: LineChartOptions = {};\n @Input() emptyTemplate: TemplateRef;\n @Input() emptyChartLabel = 'No data to display';\n @Input() containerCss = '';\n @Input() legendCss = 'body-description';\n\n @Input() set dataset(datasets: LineChartDateset) {\n this.dataListBSubject.next(datasets);\n this.cdr.detectChanges();\n }\n\n @ViewChild('canvas', { static: false }) set content(canvas: ElementRef) {\n this.canvasBSubject.next(canvas);\n this.cdr.detectChanges();\n }\n\n id = `line-chart_${new Date().getTime()}`;\n chart: Chart;\n dataListBSubject = new BehaviorSubject(null);\n canvasBSubject: BehaviorSubject = new BehaviorSubject(null);\n hasData = true;\n\n defaultConfiguration: ChartConfiguration<'line', DefaultDataPoint<'line'>> = {\n type: ChartTypes.LINE,\n data: {\n labels: [],\n datasets: [],\n },\n };\n\n defaultChartOptions: LineChartOptions = {\n responsive: true,\n layout: {\n padding: 10,\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n enabled: true,\n },\n datalabels: {\n color: EColorPalette.cWhite,\n font: {\n size: 10,\n },\n display: false,\n formatter: v => v,\n },\n },\n };\n\n defaultDatasetConfiguration: LineChartDatasetOptions = {\n data: [],\n label: '',\n borderWidth: 2,\n borderColor: EColorPalette.cGreen3,\n backgroundColor: EColorPalette.cGreen3,\n };\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n\n ngOnInit(): void {\n combineLatest([this.dataListBSubject, this.canvasBSubject])\n .pipe(\n untilDestroyed(this),\n filter(([dataset, canvas]) => !!dataset?.datasets?.length && !!canvas),\n tap(([dataset, canvas]) => {\n this.chart = this.createChart(canvas, dataset);\n this.hasData = dataset.datasets.length > 0;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n showActiveElement(index) {\n if (this.chart) {\n this.chart.setActiveElements([{ datasetIndex: 0, index }]);\n this.chart.update();\n }\n }\n\n reset() {\n if (this.chart) {\n this.chart.setActiveElements([]);\n }\n }\n\n private createChart(canvas: ElementRef, dataset: LineChartDateset): Chart {\n this.destroyChart();\n const config = {\n ...this.defaultConfiguration,\n options: { ...this.defaultChartOptions, ...this.options },\n };\n if (dataset.datasets.length) {\n config.data.labels = dataset.labels;\n config.data.datasets = dataset.datasets.map(d => ({\n ...this.defaultDatasetConfiguration,\n ...d,\n }));\n }\n return new Chart(canvas.nativeElement, config);\n }\n\n private destroyChart() {\n if (this.chart) {\n this.chart.destroy();\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroyChart();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { LineChartComponent } from './line-chart.component';\n\n@NgModule({\n declarations: [LineChartComponent],\n exports: [LineChartComponent],\n imports: [CommonModule, PipesModule, MatProgressSpinnerModule],\n})\nexport class LineChartModule {}\n","
\n \n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n \n \n \n\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, filter, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { AttachmentComponentType } from '@shared/enums/attachment-component-type.enum';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { Upload } from '@shared/interfaces/upload';\n\nenum AttachmentComponentForm {\n AttachmentType = 'attachmentType',\n File = 'file',\n Link = 'link',\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-multiple-attachments',\n templateUrl: './multiple-attachments.component.html',\n styleUrls: ['./multiple-attachments.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultipleAttachmentsComponent extends ComponentAbstract implements OnInit {\n form: UntypedFormGroup;\n _attachmentItem: AttachmentItem;\n currentLink = null;\n urlRegex = /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/;\n fileUploadLoading = false;\n\n @Input() label = '';\n @Input() lockFields = false;\n @Input() linkContentCss = 'display-flex flex-column align-items-start flex-1';\n @Input() inputFileCss = 'flex-1';\n @Input() attrLabel = 'Attachment';\n @Input() containerCss = 'grid-gap-8';\n @Input() labelRequired = false;\n @Input() isEmpty = false;\n @Input() uploadInProgress = false;\n @Input() allowLink = true;\n @Input() keepSelection = false;\n @Input() isResident = false;\n @Input() acceptedFormats: string[];\n @Input() cleanInputAttachment: EventEmitter;\n @Output() attachmentItemEvent: EventEmitter = new EventEmitter();\n @Output() isUploading = new EventEmitter();\n\n constructor(protected cdr: ChangeDetectorRef, private formBuilder: UntypedFormBuilder) {\n super(cdr);\n }\n\n get attachmentType(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.AttachmentType) as UntypedFormControl;\n }\n\n get file(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.File) as UntypedFormControl;\n }\n\n get link(): UntypedFormControl {\n return this.form.get(AttachmentComponentForm.Link) as UntypedFormControl;\n }\n\n setIsTouched() {\n this.showValidationError = true;\n }\n\n ngOnInit(): void {\n this.cleanInputAttachment\n ?.pipe(\n untilDestroyed(this),\n tap(() => {\n this.file.reset();\n this.link.reset();\n this._attachmentItem = {};\n this.currentLink = '';\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.initForm();\n\n this.file.valueChanges\n .pipe(\n untilDestroyed(this),\n filter((uploads: Upload[]) => !!uploads?.length),\n tap((uploads: Upload[]) => {\n this.attachmentItemEvent.emit(uploads.map(upload => ({ upload })));\n if (!this.keepSelection) {\n this.file.reset();\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.link.valueChanges\n .pipe(\n untilDestroyed(this),\n debounceTime(300),\n filter((link: string) => !!link && this.link.valid && link !== this.currentLink),\n tap((link: string) => {\n this.currentLink = link;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [AttachmentComponentForm.AttachmentType]: [AttachmentComponentType.File],\n [AttachmentComponentForm.Link]: [null, [Validators.pattern(this.urlRegex)]],\n [AttachmentComponentForm.File]: [null, [Validators.required]],\n });\n }\n\n submitLink() {\n if (this.link.valid) {\n this.attachmentItemEvent.emit([{ link: this.link.value }]);\n if (!this.keepSelection) {\n this.link.reset();\n }\n }\n }\n\n clearUploadedFile() {\n this.attachmentItemEvent.emit(null);\n }\n\n onUploadInProgress(inProgress: boolean) {\n this.isUploading.emit(inProgress);\n this.cdr.detectChanges();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { InputFileModule } from '@ui-components/controls/input-file/input-file.module';\nimport { RadioButtonModule } from '@ui-components/controls/radio-button/radio-button.module';\n\nimport { MultipleAttachmentsComponent } from './multiple-attachments.component';\n\n@NgModule({\n declarations: [MultipleAttachmentsComponent],\n exports: [MultipleAttachmentsComponent],\n imports: [\n CommonModule,\n RadioButtonModule,\n ReactiveFormsModule,\n InputFileModule,\n InputModule,\n MatButtonModule,\n IconComponent,\n InputErrorModule,\n TooltipDirectiveModule,\n AttachmentItemModule,\n MatProgressSpinnerModule,\n ],\n})\nexport class MultipleAttachmentsModule {}\n","\n
\n \n
\n\n
\n
\n
\n
\n
\n
\n\n
\n \n
\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@Component({\n selector: 'app-notification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationComponent {\n @Input() type: 'warning' | 'info' | 'error' = 'warning';\n @Input() icon?: EIcon;\n @Input() iconColor?: EColorPalette;\n\n EIcon = EIcon;\n EColorPalette = EColorPalette;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { NotificationComponent } from './notification.component';\nimport { IconComponent } from '../icon/icon.component';\n\n@NgModule({\n declarations: [NotificationComponent],\n imports: [CommonModule, IconComponent],\n exports: [NotificationComponent],\n})\nexport class NotificationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { InputAreaModule } from '@ui-components/controls/input-area/input-area.module';\n\nimport { PictureComponent } from './picture.component';\n\n@NgModule({\n declarations: [PictureComponent],\n imports: [\n CommonModule,\n MatButtonModule,\n TooltipDirectiveModule,\n IconComponent,\n PipesModule,\n InputAreaModule,\n ReactiveFormsModule,\n MatIconModule,\n ],\n exports: [PictureComponent],\n})\nexport class PictureModule {}\n","\n \n {{ option.label }}\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, UntypedFormControl } from '@angular/forms';\nimport { MatChipList } from '@angular/material/chips';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { tap } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { PillOptions } from '@shared/enums/pill-options.enum';\nimport { ITooltipRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\n@UntilDestroy()\n@Component({\n selector: 'app-pill-list',\n templateUrl: './pill-list.component.html',\n styleUrls: ['./pill-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PillListComponent extends PuSubscribable implements OnInit, ControlValueAccessor {\n availableOptionsValue: ITooltipRadioButtonOption[] = [];\n\n @Input() set availableOptions(value: (PillOptions | string | ITooltipRadioButtonOption)[]) {\n if (value.length && typeof value[0] != 'object') {\n this.availableOptionsValue = value.map(e => ({\n label: e as string,\n value: e as T,\n tooltip: '',\n }));\n } else {\n this.availableOptionsValue = value as ITooltipRadioButtonOption[];\n }\n }\n\n @Input() selectable = true;\n @Input() pillCss = '';\n @Input() pillListCss: string;\n @Input() disabled = false;\n\n @ViewChild(MatChipList) chipList!: MatChipList;\n\n control = new UntypedFormControl();\n\n constructor(@Self() @Optional() protected ngControl: NgControl, private cdr: ChangeDetectorRef) {\n super();\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(value: string): void {\n this.control.setValue(value);\n this.cdr.detectChanges();\n }\n\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched();\n }\n\n setDisabledState?(isDisabled: boolean): void {\n isDisabled ? this.control.disable() : this.control.enable();\n }\n\n ngOnInit(): void {\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.onChanged(value);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n selectOption(option: T) {\n if (this.selectable) {\n this.control.setValue(option);\n }\n }\n\n private onChanged = (value: string) => {\n // to set later\n };\n\n private onTouched = () => {\n // to set later\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatChipsModule } from '@angular/material/chips';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\n\nimport { PillListComponent } from './pill-list.component';\n\n@NgModule({\n declarations: [PillListComponent],\n imports: [CommonModule, MatChipsModule, TooltipDirectiveModule],\n exports: [PillListComponent],\n})\nexport class PillListModule {}\n","
\n \n
\n \n
\n
\n\n\n
\n {{ value || emptyValue }}\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, TemplateRef } from '@angular/core';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\n@Component({\n selector: 'app-read-only-field',\n templateUrl: './read-only-field.component.html',\n styleUrls: ['./read-only-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ReadOnlyFieldComponent extends ComponentAbstract {\n @Input() containerCss = 'display-flex flex-column';\n @Input() label = '';\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() value: unknown;\n @Input() emptyValue = '–';\n @Input() valueContainerCss = 'value-container h-40';\n @Input() valueCss = 'ellipsis body-small text-color dark';\n @Input() customValue: TemplateRef;\n\n constructor(protected cdr: ChangeDetectorRef) {\n super(cdr);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ReadOnlyFieldComponent } from './read-only-field.component';\n\n@NgModule({\n declarations: [ReadOnlyFieldComponent],\n imports: [CommonModule],\n exports: [ReadOnlyFieldComponent],\n})\nexport class ReadOnlyFieldModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { TreeModule } from '@circlon/angular-tree-component';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { SelectTreeComponent } from '@app/modules/ui-components/components/select-tree/select-tree.component';\n\nimport { IconComponent } from '../icon/icon.component';\n\n@NgModule({\n declarations: [SelectTreeComponent],\n imports: [CommonModule, TreeModule, InputErrorModule, MatMenuModule, MatInputModule, IconComponent],\n exports: [SelectTreeComponent],\n})\nexport class SelectTreeModule {}\n","import { createSelector } from '@ngrx/store';\n\nimport { selectCoreModule } from '@main-application/store/selectors/core.selector';\n\nimport { windowResizeFeatureKey } from '../reducers/window-resize.reducer';\n\nexport const selectWindowResizeState = createSelector(selectCoreModule, coreState => coreState[windowResizeFeatureKey]);\nexport const selectWindowWidth = createSelector(\n selectWindowResizeState,\n windowResizeState => windowResizeState.windowWidth\n);\n","export class SkeletonLoaderCounter {\n private static uniqueSkeletonId = -1;\n\n static getLoaderId(): string {\n return `${++SkeletonLoaderCounter.uniqueSkeletonId}`;\n }\n}\n","
\n \n Loading...\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { debounceTime, tap } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { selectWindowWidth } from '@main-application/store/selectors/window-resize.selectors';\nimport { LoaderType } from '@shared/enums/loader-type';\nimport { SkeletonLoaderCounter } from '@ui-components/components/skeleton-loader/services/skeleton-loader.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-skeleton-loader',\n templateUrl: './skeleton-loader.component.html',\n styleUrls: ['./skeleton-loader.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule],\n})\nexport class SkeletonLoaderComponent extends ComponentAbstract implements OnInit, AfterViewInit {\n readonly containerPadding = 10;\n readonly listTemplateItemOffset = 50;\n readonly listSections = Array(40).fill(0);\n readonly boardSections = Array(9).fill(0);\n readonly kanbanSections = Array(8).fill(0);\n readonly kanbanRowSections = Array(30).fill(0);\n readonly commentItems = Array(3).fill(0);\n readonly recSectionAttachmentsItems = Array(3).fill(0);\n readonly listOffset = 6;\n readonly listItemOffset = 50;\n readonly tileOffset = 4;\n readonly calendarItemOffset = 4;\n readonly kanbanTitleYPos = 5;\n readonly kanbanTitleYPosOffset = 25;\n\n readonly boardItemOffset = 55;\n readonly boardOffset = 15;\n\n readonly systemConfigSections = Array(4).fill(0);\n readonly systemConfigLabelOffset = 6;\n readonly systemConfigControlOffset = 20;\n readonly systemConfigSectionOffset = 50;\n\n readonly calendarRowSections = Array(9).fill(0);\n readonly calendarSections = Array(7).fill(0);\n\n loaderId = '';\n clipPathUrl = '#';\n clipPath = '';\n fill = '';\n\n viewBox = '0 0 300 200';\n\n svgViewportWidth = 300;\n svgViewportHeight = 200;\n\n listTemplateWidth = 0;\n\n pieChartTitleWidth = 200;\n pieChartTitleX = 100;\n pieChartLegendDotX = 230;\n pieChartLegendItemX = 250;\n cXPosition = 140;\n cYPosition = 140;\n cRadius = 70;\n\n kanbanTitleSectionWidth = 40;\n kanbanTileHeight = 50;\n kanbanTileWidth = 100;\n kanbanTileXOffset = 104;\n kanbanTileYOffset = 54;\n\n calendarItemHeight = 56;\n calendarItemWidth = 100;\n calendarItemXOffset = 104;\n calendarItemYOffset = 60;\n\n detailsSingleHeight = 100;\n detailsSingleWidth = 100;\n\n commentListCYOffset = 20;\n commentListAuthorOffset = 6;\n commentListDateOffset = 5;\n commentListCommentOffset = 24;\n commentListItemsOffset = 70;\n commentListCommentWidth = 100;\n\n recSectionVendorWidth = 100;\n recSectionAttachmentsWidth = 100;\n recSectionAttachmentsBtnWidth = 100;\n recSectionAttachmentsBtnOffset = 100;\n recSectionExpWidth = 100;\n recSectionNoteWidth = 100;\n recSectionVendorsItemsXOffset = 100;\n recSectionVendorsItemsYOffset = 25;\n recSectionVendorsItemsWidth = 100;\n\n _loader: LoaderType = LoaderType.List;\n\n @Input() containerCss = 'align-items-center justify-content-center display-flex h-100 w-100';\n\n @Input() set loaderType(loaderType: LoaderType) {\n this._loader = loaderType;\n this.cdr.detectChanges();\n }\n\n @ViewChild('container', { read: ElementRef }) container: ElementRef;\n\n constructor(protected cdr: ChangeDetectorRef, private store: Store<{}>) {\n super(cdr);\n }\n\n ngOnInit(): void {\n this.loaderId = SkeletonLoaderCounter.getLoaderId();\n this.clipPathUrl = `url(#clip-path${this.loaderId})`;\n this.clipPath = `clip-path${this.loaderId}`;\n this.fill = `fill${this.loaderId}`;\n this.updateWidthParams();\n\n this.store\n .select(selectWindowWidth)\n .pipe(\n untilDestroyed(this),\n debounceTime(50),\n tap(() => {\n this.updateWidthParams();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.updateWidthParams();\n }, 1);\n }\n\n private updateWidthParams() {\n if (this.container) {\n const containerWidth = this.container?.nativeElement.clientWidth;\n const containerHeight = this.container?.nativeElement.clientHeight;\n\n this.svgViewportWidth = Math.max(0, containerWidth - 2 * this.containerPadding);\n this.svgViewportHeight = Math.max(0, containerHeight - 2 * this.containerPadding);\n\n if (this.svgViewportWidth < 0 || this.svgViewportHeight < 0) {\n return;\n }\n\n this.viewBox = `0 0 ${this.svgViewportWidth} ${this.svgViewportHeight}`;\n\n switch (this._loader) {\n case LoaderType.List:\n {\n this.listTemplateWidth = Math.max(0, this.svgViewportWidth - this.listTemplateItemOffset);\n }\n break;\n case LoaderType.PieChart:\n {\n this.pieChartTitleWidth = this.svgViewportWidth / 4;\n this.pieChartTitleX = this.svgViewportWidth / 2.67;\n\n this.cYPosition = this.svgViewportHeight * 0.5;\n this.cXPosition = this.svgViewportWidth * 0.4;\n this.cRadius = this.svgViewportHeight * 0.3;\n\n this.pieChartLegendDotX = this.cXPosition + this.cRadius + 20;\n this.pieChartLegendItemX = this.pieChartLegendDotX + 20;\n }\n break;\n case LoaderType.Kanban:\n {\n this.kanbanTitleSectionWidth = this.svgViewportWidth / (this.kanbanSections.length - 1);\n this.kanbanTileWidth = Math.max(\n 0,\n (this.svgViewportWidth - (this.kanbanSections.length - 1) * this.tileOffset) / this.kanbanSections.length\n );\n this.kanbanTileXOffset = this.kanbanTileWidth + this.tileOffset;\n }\n break;\n case LoaderType.Details_Single:\n {\n this.detailsSingleHeight = this.svgViewportHeight;\n this.detailsSingleWidth = this.svgViewportWidth;\n }\n break;\n case LoaderType.Comment_List:\n {\n this.commentListCommentWidth = this.svgViewportWidth * 0.8;\n }\n break;\n case LoaderType.Recipients_Section:\n {\n this.recSectionVendorWidth = this.svgViewportWidth * 0.2;\n this.recSectionAttachmentsWidth = this.svgViewportWidth * 0.2;\n this.recSectionAttachmentsBtnWidth = this.svgViewportWidth * 0.05;\n this.recSectionAttachmentsBtnOffset = this.svgViewportWidth * 0.1 + 80;\n this.recSectionExpWidth = this.svgViewportWidth * 0.1;\n this.recSectionNoteWidth = this.svgViewportWidth * 0.48;\n this.recSectionVendorsItemsXOffset = this.svgViewportWidth * 0.85;\n this.recSectionVendorsItemsWidth = this.svgViewportWidth * 0.1;\n }\n break;\n case LoaderType.Calendar:\n {\n this.calendarItemWidth = Math.max(\n 0,\n (this.svgViewportWidth - (this.calendarSections.length - 1) * this.calendarItemOffset) /\n this.calendarSections.length\n );\n this.calendarItemXOffset = this.calendarItemWidth + this.calendarItemOffset;\n }\n break;\n }\n\n this.cdr.detectChanges();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nimport { TableStatusToggleComponent } from './table-status-toggle.component';\n\n@NgModule({\n declarations: [TableStatusToggleComponent],\n exports: [TableStatusToggleComponent],\n imports: [CommonModule, IconComponent, MatButtonModule, MatCheckboxModule, ReactiveFormsModule],\n})\nexport class TableStatusToggleModule {}\n","import { ChangeDetectorRef, Directive, Optional } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormControlStatus,\n FormGroupDirective,\n NgControl,\n UntypedFormControl,\n Validators,\n} from '@angular/forms';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { Observable } from 'rxjs';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\n\n@Directive()\nexport abstract class CustomControlAbstract extends ComponentAbstract implements ControlValueAccessor {\n control = new FormControl(null);\n labelRequired: boolean;\n\n protected constructor(\n protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() private formDirective: FormGroupDirective\n ) {\n super(cdr);\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n get showValidationErrorOrSubmitted() {\n return this.formDirective?.submitted || this.showValidationError;\n }\n\n abstract writeValue(obj: any): void;\n\n registerOnChange(fn: any): void {\n this.onChanged = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n protected onChanged: (value: any) => void = () => {\n // to set later\n };\n onTouched: () => void = () => {\n // to set later\n };\n\n protected initControlBase() {\n if (this.ngControl?.control) {\n this.control = this.ngControl?.control as UntypedFormControl;\n\n if (typeof this.labelRequired === 'undefined') {\n this.labelRequired = this.control.hasValidator(Validators.required);\n }\n }\n\n this.control.statusChanges\n .pipe(untilDestroyed(this))\n .subscribe(status => this.checkControlStatus(status))\n .untilDestroyed(this);\n\n this.listenControlTouched(this.control)\n .pipe(untilDestroyed(this))\n .subscribe(() => this.cdr.markForCheck())\n .untilDestroyed(this);\n\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n this.checkStatus();\n }\n }\n\n protected checkStatus() {\n if (this.ngControl?.control) {\n this.invalid = this.ngControl.control.invalid;\n\n if (this.control != this.ngControl.control) {\n //Remove this part than all controls will be done normal way\n if (this.ngControl.control.touched) {\n this.control.markAsTouched();\n } else {\n this.control.markAsUntouched();\n }\n if (this.ngControl.control.pristine) {\n this.control.markAsPristine();\n } else {\n this.control.markAsDirty();\n }\n }\n }\n }\n\n protected listenControlTouched(control: AbstractControl): Observable {\n return new Observable(observer => {\n const originalMarkAsTouched = control.markAsTouched;\n const originalReset = control.reset;\n\n control.reset = (...args) => {\n observer.next(false);\n originalReset.call(control, ...args);\n };\n\n control.markAsTouched = (...args) => {\n observer.next(true);\n originalMarkAsTouched.call(control, ...args);\n };\n\n observer.next(control.touched);\n\n return () => {\n control.markAsTouched = originalMarkAsTouched;\n control.reset = originalReset;\n };\n });\n }\n\n protected checkControlStatus(status: FormControlStatus) {\n this.checkStatus();\n if (status === 'VALID' || status === 'DISABLED') {\n this.errors = null;\n this.cdr.markForCheck();\n } else if (status === 'INVALID') {\n this.errors = { ...this.ngControl?.control.errors };\n this.cdr.markForCheck();\n } else {\n this.errors = null;\n }\n }\n}\n","\n \n \n \n \n \n\n \n\n \n \n \n \n\n \n {{ isExpanded ? 'arrow_drop_up' : 'arrow_drop_down' }}\n \n \n \n \n \n
\n
\n\n \n
\n \n \n
\n \n
\n\n \n
\n \n
\n Clear\n
\n
\n
\n\n \n\n\n\n \n
\n {{ control?.value || '' | date: displayMask }}\n
\n
\n
\n\n\n \n
{{ attrPlaceholder }}
\n
\n
\n\n\n
\n \n
\n
\n\n\n \n
\n \n {{ label }}\n \n
\n
\n \n
\n
\n
\n","import { DatePipe } from '@angular/common';\nimport {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n LOCALE_ID,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroupDirective,\n NgControl,\n UntypedFormControl,\n ValidationErrors,\n} from '@angular/forms';\nimport {\n DateRange,\n DefaultMatCalendarRangeStrategy,\n MAT_DATE_RANGE_SELECTION_STRATEGY,\n MatCalendar,\n MatCalendarCellCssClasses,\n} from '@angular/material/datepicker';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport * as moment from 'moment';\nimport { BehaviorSubject, Observable, combineLatest, of, startWith } from 'rxjs';\nimport { distinctUntilChanged, map, tap } from 'rxjs/operators';\n\nimport { CalendarHeaderComponent } from '@app/modules/ui-components/components/calendar-header/calendar-header.component';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { DestroyService } from '@shared/services/destroy.service';\nimport { LocalCacheService } from '@shared/services/local-cache.service';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\nimport { skipEqual$ } from '@shared/utils/rxjs/skip-equal.rxjs.util';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\nimport { SnackbarService } from '../../components/customized-snackbar/snackbar.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-date-dropdown',\n templateUrl: './date-dropdown.component.html',\n styleUrls: ['./date-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n DestroyService,\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: DefaultMatCalendarRangeStrategy,\n },\n ],\n})\nexport class DateDropdownComponent\n extends CustomControlAbstract\n implements OnInit, AfterContentChecked, ControlValueAccessor, AfterViewInit\n{\n maskControl = new UntypedFormControl('');\n invalid = false;\n isDisabled = false;\n errors: ValidationErrors;\n dateRangeConfig: DateRange;\n header = CalendarHeaderComponent;\n isOpened = false;\n\n @ViewChild(MatCalendar) calendar: MatCalendar;\n\n @Input() label = '';\n @Input() labelTooltip: string;\n @Input() labelRequired: boolean;\n @Input() labelInside = false;\n private readonly labelInsideDefaultCss = 'nowrap pre-title';\n private readonly labelOutsideDefaultCss = 'nowrap body-small-bold';\n _labelCss = '';\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n return this.labelInside ? this.labelInsideDefaultCss : this.labelOutsideDefaultCss;\n }\n\n @Input() attrPlaceholder = '';\n @Input() buttonCss = 'date-dropdown-button';\n @Input() containerCss = 'display-flex align-items-center';\n @Input() valueCss = 'body-small text-color dark';\n @Input() placeholderCss = 'placeholder';\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() displayMask = 'MM/dd/yy';\n @Input() attrClickableDisable = false;\n @Input() filterGroupKey?: string;\n @Input() max: Date;\n @Input() min: Date;\n @Input() clearable = false;\n @Input() bottomContent = false;\n @Input() editable = false;\n @Input() isFullWidth = false;\n @Input() errorDisabledText: string;\n @Input() displaySkeleton = false;\n @Input() isSmallFont = false;\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable({ emitEvent: false });\n } else {\n this.control.enable({ emitEvent: false });\n }\n this.isDisabled = attrDisable;\n this.cdr.markForCheck();\n }\n\n @Output() disabledClickEvent = new EventEmitter();\n @Output() selectedRangeEvent: EventEmitter = new EventEmitter();\n @Output() clearDate = new EventEmitter();\n\n _labelElement: ElementRef;\n _labelWidth$ = new BehaviorSubject(null);\n labelWidth$ = this._labelWidth$.asObservable();\n labelWidthN: number;\n labelGroupWidth$: Observable;\n hideBottomContent = false;\n\n @ViewChild('dateMenuTrigger') dateMenuTrigger: MatMenuTrigger;\n\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n this._labelElement = value;\n\n const labelWidth = value?.nativeElement?.clientWidth;\n labelWidth && this._labelWidth$.next(labelWidth);\n\n this.cdr.detectChanges();\n }\n\n private readonly today = this.timezoneService.getCurrentDateOnly();\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective,\n private timezoneService: TimezoneService,\n private snackbarService: SnackbarService,\n private cache: LocalCacheService,\n private destroy$: DestroyService,\n @Inject(LOCALE_ID) private locale: string\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControlBase();\n }\n\n ngAfterViewInit() {\n if (this.control.value) {\n this.calendar.activeDate = this.control.value;\n this.dateRangeConfig = new DateRange(this.control.value, this.control.value);\n this.cdr.markForCheck();\n }\n this.control.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => {\n if (this.attrClickableDisable && this.isOpened) {\n this.disabledClickEvent.emit();\n this.dateMenuTrigger.closeMenu();\n } else {\n this.dateMenuTrigger?.closeMenu();\n this.onTouched();\n }\n this.cdr.markForCheck();\n })\n .untilDestroyed(this);\n\n this.initLabelWidth();\n }\n\n ngAfterContentChecked() {\n if (!this.labelInside || !this._labelElement) return;\n\n const labelWidth = this._labelElement?.nativeElement?.clientWidth;\n labelWidth && this._labelWidth$.next(labelWidth);\n this.cdr.detectChanges();\n }\n\n valueTyped(value: string) {\n if (value) {\n const split = value.split('/');\n if (split[2] && split[2].length === 2) {\n split[2] = '20' + split[2];\n }\n const preparedValue = split.join('/');\n const dt = moment(preparedValue, 'MM/DD/YYYY');\n if (dt.isValid()) {\n this.setValue(dt.toDate());\n } else {\n this.setValue(null);\n this.snackbarService.error(`Invalid date: ${value}`);\n }\n } else {\n this.setValue(null);\n }\n }\n\n updateCursor(input: HTMLInputElement) {\n setTimeout(() => {\n input.selectionStart = input.value.length ?? 0;\n });\n }\n\n clickEvent($event: MouseEvent) {\n if (!this.isDisabled) return;\n\n this.disabledClickEvent.emit($event);\n }\n\n dateClass() {\n return (date: Date): MatCalendarCellCssClasses => {\n if (date.getTime() === this.today.getTime()) {\n return 'special-date-today';\n }\n return;\n };\n }\n\n onSelect(date: Date) {\n if (this.dateRangeConfig?.start && date > this.dateRangeConfig.start && !this.dateRangeConfig.end) {\n this.dateRangeConfig = new DateRange(this.dateRangeConfig.start, date);\n } else {\n this.dateRangeConfig = new DateRange(date, null);\n }\n }\n\n onSelectSingleDate(date: Date) {\n this.hideBottomContent = true;\n\n this.dateRangeConfig = new DateRange(date, date);\n this.setValue(date);\n setTimeout(() => {\n this.hideBottomContent = false;\n });\n }\n\n selectRange() {\n if (this.control.value) {\n this.selectedRangeEvent.emit(this.control.value);\n }\n this.cdr.detectChanges();\n }\n\n writeValue(value: Date): void {\n this.maskControl.setValue(value ? new DatePipe(this.locale).transform(value, this.displayMask) : '');\n if (value) {\n this.dateRangeConfig = new DateRange(value, value);\n if (this.calendar) {\n this.calendar.activeDate = value;\n }\n }\n }\n\n setValue(date: Date) {\n if (this.ngControl.control.disabled) {\n return;\n }\n this.writeValue(date);\n if (this.control.value?.getTime() !== date?.getTime()) {\n this.onChanged(date);\n this.onTouched();\n }\n }\n\n dateToggleMenu(menuExpanded: boolean) {\n if (menuExpanded) {\n this.isOpened = true;\n }\n super.toggleMenu(menuExpanded);\n }\n\n openDateMenu(event: MouseEvent) {\n event.preventDefault();\n if (this.errorDisabledText) {\n this.snackbarService.error(this.errorDisabledText);\n return;\n }\n setTimeout(() => {\n this.dateMenuTrigger.openMenu();\n }, 1);\n }\n\n clear(event) {\n event.stopPropagation();\n this.onSelectSingleDate(null);\n this.cdr.markForCheck();\n }\n\n private initLabelWidth(): void {\n const labelWidth$ = this.labelWidth$.pipe(\n filterNullish$(false),\n skipEqual$(),\n startWith(0),\n tap(currentLabelWidth => {\n if (this.filterGroupKey) {\n const groupOffset = this.cache.get(this.filterGroupKey);\n if (groupOffset < currentLabelWidth) {\n this.cache.set(this.filterGroupKey, currentLabelWidth, {\n lsKey: this.filterGroupKey,\n });\n }\n }\n })\n );\n\n const labelGroupWidth$ = this.filterGroupKey\n ? this.cache\n .get$(this.filterGroupKey, this.destroy$, {\n initialState: 0,\n lsKey: this.filterGroupKey,\n })\n .pipe(skipEqual$())\n : of(null);\n\n this.labelGroupWidth$ = combineLatest([labelWidth$, labelGroupWidth$]).pipe(\n map(([labelWidth, groupWidth]) => Math.max(labelWidth, groupWidth)),\n filterNullish$(false),\n map(width => (width ? width + 'px' : 'initial')),\n skipEqual$()\n );\n }\n\n onClearDate(): void {\n this.clearDate.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nimport { DateDropdownComponent } from './date-dropdown.component';\n\n@NgModule({\n declarations: [DateDropdownComponent],\n imports: [\n CommonModule,\n InputErrorModule,\n IconComponent,\n MatMenuModule,\n MatDatepickerModule,\n MatButtonModule,\n NgxMaskModule,\n ReactiveFormsModule,\n TooltipDirectiveModule,\n MatIconModule,\n ],\n exports: [DateDropdownComponent],\n})\nexport class DateDropdownModule {}\n","import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\n@Directive({\n selector: '[appAutoresize]',\n})\nexport class AutoresizeDirective extends PuSubscribable implements AfterViewInit {\n @Input() maxHeight: number;\n @Input() appAutoresize: boolean;\n @Input() formControl: UntypedFormControl;\n\n constructor(private elementRef: ElementRef) {\n super();\n }\n\n ngAfterViewInit(): void {\n this.resize();\n\n this.formControl.valueChanges\n .subscribe(() => {\n this.resize();\n })\n .untilDestroyed(this);\n }\n\n resize() {\n if (!this.appAutoresize) return;\n\n const textArea = this.elementRef.nativeElement;\n let newHeight;\n\n textArea.style.height = 'auto';\n if (this.maxHeight) {\n newHeight = Math.min(textArea.scrollHeight, this.maxHeight);\n } else {\n newHeight = textArea.scrollHeight;\n }\n textArea.style.height = newHeight + 4 + 'px';\n }\n}\n","
\n \n
\n\n
\n\n
\n maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value ? 'filled' : '',\n disabled ? 'disabled' : '',\n isSmallFont ? 'small-font' : 'standard-font'\n ]\"\n [formControl]=\"control\"\n [placeholder]=\"attrPlaceholder\"\n [name]=\"attrName\"\n [attr.aria-invalid]=\"invalid && showValidationErrorOrSubmitted\"\n [disabled]=\"disabled ? true : null\"\n (blur)=\"onBlur()\">\n
\n maxCounter,\n 'counter-small-font': isSmallFont\n }\">\n [{{ control?.value?.length || 0 }}/{{ maxCounter }}]\n
\n
\n \n \n\n\n\n
\n
ctr/cmd + enter: new line
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, ValidationErrors } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-input-area',\n templateUrl: './input-area.component.html',\n styleUrls: ['./input-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class InputAreaComponent extends CustomControlAbstract implements OnInit, ControlValueAccessor {\n errors: ValidationErrors;\n invalid = false;\n disabled = false;\n\n @Input() autoresize = false;\n @Input() maxHeight: number;\n @Input() displayNewLineHint = false;\n @Input() attrPlaceholder = '';\n @Input() attrName: string;\n @Input() label: string;\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() containerCss = '';\n @Input() inputCss = '';\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() displayCounter = false;\n @Input() maxCounter: number;\n @Input() inputDisabled = false;\n @Input() scrollEnabled = false;\n @Input() displaySkeleton = false;\n @Input() isSmallFont = false;\n @Output() keydownEnterEvent = new EventEmitter();\n @Output() blurEvent = new EventEmitter();\n @Output() focusEvent = new EventEmitter();\n\n focusIn = false;\n\n @ViewChild('textArea') textArea!: ElementRef;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable();\n } else {\n this.control.enable();\n }\n this.disabled = attrDisable;\n this.cdr.detectChanges();\n }\n\n @Input() set value(value: string) {\n this.control.setValue(value);\n }\n\n ngOnInit(): void {\n this.initControlBase();\n\n this.control.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => {\n this.onChanged(value);\n this.onTouched();\n })\n .untilDestroyed(this);\n }\n\n writeValue(value: string): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n\n enter($event) {\n if (this.keydownEnterEvent.observed) {\n this.keydownEnterEvent.emit();\n $event.preventDefault();\n }\n }\n\n insertNewline($event) {\n const newValue = `${this.control?.value || ''}\\n`;\n this.control.setValue(newValue);\n }\n\n onFocusIn(): void {\n this.focusIn = true;\n this.focusEvent.emit(true);\n if (this.scrollEnabled) this.scrollToBottomIfScrollable();\n }\n\n onFocusOut(): void {\n this.focusIn = false;\n this.focusEvent.emit(false);\n if (this.scrollEnabled) this.scrollToTopIfScrollable();\n }\n\n scrollToBottomIfScrollable(): void {\n const textareaEl = this.textArea.nativeElement;\n const isScrollable = textareaEl.scrollHeight > textareaEl.clientHeight;\n\n if (isScrollable) {\n textareaEl.scrollTo({\n top: textareaEl.scrollHeight,\n behavior: 'smooth',\n });\n }\n setTimeout(() => {\n textareaEl.setSelectionRange(textareaEl.value.length, textareaEl.value.length);\n textareaEl.focus();\n });\n }\n\n scrollToTopIfScrollable(): void {\n const textareaEl = this.textArea.nativeElement;\n\n const isScrollable = textareaEl.scrollHeight > textareaEl.clientHeight;\n\n if (isScrollable) {\n textareaEl.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { AutoresizeModule } from '@ui-components/directives/autoresize/autoresize.module';\n\nimport { InputAreaComponent } from './input-area.component';\n\n@NgModule({\n declarations: [InputAreaComponent],\n imports: [CommonModule, InputErrorModule, ReactiveFormsModule, AutoresizeModule, DirectivesModule, MatInputModule],\n exports: [InputAreaComponent],\n})\nexport class InputAreaModule {}\n","export function checkSupportedFormatFunction(file: any, acceptedFormatList: string[]): boolean {\n let type = file.type;\n if (type === '') type = getFileType(file.name);\n\n return acceptedFormatList?.length === 0\n ? true\n : type === '' || type === null || type === undefined\n ? false\n : acceptedFormatList?.length\n ? acceptedFormatList?.includes(type)\n : true;\n}\n\nconst getFileType = (fileName: string): string => {\n const extension = fileName.split('.').pop()?.toLowerCase();\n switch (extension) {\n case 'bmp':\n return 'image/bmp';\n case 'gif':\n return 'image/gif';\n case 'ico':\n return 'image/x-icon';\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'wbmp':\n return 'image/vnd.wap.wbmp';\n case 'webp':\n return 'image/webp';\n\n case 'pkm':\n return 'image/x-etc1-pkm';\n case 'ktx':\n return 'image/ktx';\n case 'astc':\n return 'image/astc';\n case 'dng':\n return 'image/x-adobe-dng';\n case 'heic':\n return 'image/heic';\n case 'heif':\n return 'image/heif';\n case 'avif':\n return 'image/avif';\n\n case 'svg':\n return 'image/svg+xml';\n default:\n return '';\n }\n};\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GenerateThumbnailService extends PuSubscribable {\n generateThumbnail(file: File): Observable<{ thumbnail: Blob; duration?: number }> {\n const isVideo = file.type.startsWith('video/');\n return isVideo ? this.generateVideoThumbnail(file) : this.compressImage(file);\n }\n\n private generateVideoThumbnail(file: File, captureTime = 1): Observable<{ thumbnail: Blob; duration: number }> {\n return new Observable(observer => {\n const video = document.createElement('video');\n const canvas = document.createElement('canvas');\n const url = URL.createObjectURL(file);\n\n video.src = url;\n video.crossOrigin = 'anonymous';\n video.muted = true;\n video.playsInline = true;\n video.autoplay = false;\n\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n let seeked = false;\n\n const failTimeout = setTimeout(() => {\n URL.revokeObjectURL(url);\n observer.error(new Error('Thumbnail generation timed out'));\n }, 7000);\n\n video.onloadedmetadata = async () => {\n if (isSafari) {\n try {\n await video.play();\n video.pause();\n } catch (err) {\n console.warn('Safari autoplay issue:', err);\n }\n }\n video.currentTime = captureTime;\n };\n\n video[isSafari ? 'ontimeupdate' : 'onseeked'] = () => {\n if (seeked) return;\n seeked = true;\n\n clearTimeout(failTimeout);\n video.pause();\n\n setTimeout(() => {\n canvas.width = video.videoWidth || 1280;\n canvas.height = video.videoHeight || 720;\n const ctx = canvas.getContext('2d');\n ctx?.drawImage(video, 0, 0, canvas.width, canvas.height);\n\n canvas.toBlob(\n blob => {\n URL.revokeObjectURL(url);\n if (blob) {\n observer.next({ thumbnail: blob, duration: video.duration });\n observer.complete();\n } else {\n observer.error(new Error('Failed to generate thumbnail'));\n }\n },\n 'image/jpeg',\n 0.5\n );\n }, 100);\n };\n\n video.onerror = () => {\n clearTimeout(failTimeout);\n URL.revokeObjectURL(url);\n observer.error(new Error('Error loading video'));\n };\n });\n }\n\n private compressImage(file: File): Observable<{ thumbnail: Blob }> {\n const img = new Image();\n const canvas = document.createElement('canvas');\n const reader = new FileReader();\n\n return new Observable<{ thumbnail: Blob }>(observer => {\n reader.onload = e => {\n img.src = e.target?.result as string;\n };\n\n reader.onerror = () => {\n observer.error('Error reading image file');\n };\n\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d');\n ctx?.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n this.compressCanvasToBlob(canvas, 0.5)\n .subscribe({\n next: blob => observer.next({ thumbnail: blob }),\n error: err => observer.error(err),\n complete: () => observer.complete(),\n })\n .untilDestroyed(this);\n };\n\n reader.readAsDataURL(file);\n });\n }\n\n private compressCanvasToBlob(canvas: HTMLCanvasElement, quality: number): Observable {\n return new Observable(observer => {\n canvas.toBlob(\n blob => {\n if (blob) {\n observer.next(blob);\n observer.complete();\n } else {\n observer.error('Failed to compress canvas');\n }\n },\n 'image/jpeg',\n quality\n );\n });\n }\n}\n","
\n
\n \n {{ label }}\n \n \n \n
\n \n \n
\n \n
\n
\n\n\n\n \n\n\n\n
\n
\n
\n \n
Uploading file...
\n
{{ (uploadingFile$ | async).name }}
\n
\n
\n
\n\n\n
\n
\n \n
\n
\n\n \n \n \n\n \n
\n \n
Drag & Drop
\n
\n
or
\n \n \n
\n\n\n
\n
\n
\n \n
File uploaded
\n
{{ control.value.originalFileName }}
\n
\n
\n
\n","import { HttpEventType, HttpResponse } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, ValidationErrors } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { BehaviorSubject, Observable, catchError, from } from 'rxjs';\nimport { filter, map, mergeMap, reduce, tap } from 'rxjs/operators';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { GenerateThumbnailService } from '@app/services/generate-thumbnail.service';\nimport { checkSupportedFormatFunction } from '@shared/functions/check-supported-format.function';\nimport { Upload } from '@shared/interfaces/upload';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-input-file',\n templateUrl: './input-file.component.html',\n styleUrls: ['./input-file.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputFileComponent extends CustomControlAbstract implements OnInit, ControlValueAccessor {\n errors: ValidationErrors;\n invalid = false;\n disabled = false;\n\n @Input() label = '';\n @Input() labelRequired = false;\n @Input() labelCss = 'nowrap body-small-bold';\n @Input() contentCss = 'display-flex align-items-start';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = '';\n @Input() multiselect = false;\n @Input() acceptedFormats = ['application/pdf'];\n @Input() attrPlaceholder = 'Upload a file';\n @Input() uploadSelection = false;\n @Input() attrDisable = false;\n @Input() isFileLoaded: boolean | null = null;\n @Input() labelTooltipText: string = null;\n @Input() isResident = false;\n @Input() useSlotContent = false;\n @Input() useTwoStepUpload = false;\n\n @Input() set value(value: string) {\n this.control.setValue(value);\n }\n\n @Output() clearEvent: EventEmitter = new EventEmitter();\n @Output() selectFilesEvent: EventEmitter = new EventEmitter();\n @Output() uploadInProgress = new EventEmitter();\n\n @ViewChild('fileUpload', { static: true }) input: ElementRef;\n\n uploadingFile$ = new BehaviorSubject(null);\n uploadingProgress$ = new BehaviorSubject(0);\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n @Optional() formDirective: FormGroupDirective,\n protected cdr: ChangeDetectorRef,\n private fileUploadsService: FileUploadsService,\n private snackbarService: SnackbarService,\n private generateThumbnailService: GenerateThumbnailService\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControlChanges();\n this.initCheckControl();\n }\n\n writeValue(value: any): void {\n this.control.setValue(value);\n }\n\n browseFile() {\n this.input.nativeElement.value = '';\n this.input.nativeElement.click();\n }\n\n clear() {\n this.control.reset();\n this.clearEvent.emit();\n this.cdr.detectChanges();\n }\n\n filesDropped(files: File[]) {\n this.uploadSelection ? this.uploadFile(files) : this.emitEvents(files);\n }\n\n inputFileChanged($event: Event) {\n const files: FileList = ($event.target as HTMLInputElement).files;\n const filesList = Object.entries(files).map(([key, file]) => file);\n this.uploadSelection ? this.uploadFile(filesList) : this.emitEvents(filesList);\n }\n\n private emitEvents(files: File[]) {\n if (!files.length) return;\n const filesToUpload = files.filter(file => checkSupportedFormatFunction(file, this.acceptedFormats));\n\n if (filesToUpload.length > 0) {\n this.selectFilesEvent.emit(files);\n this.control.setValue(files);\n this.cdr.detectChanges();\n } else {\n this.snackbarService.error(SnackbarErrorMessage.UnsupportedFileType);\n }\n }\n\n private uploadFile(files: File[]) {\n const filesToUpload = files.filter(file => checkSupportedFormatFunction(file, this.acceptedFormats));\n if (filesToUpload.length > 0) {\n this.uploadingFile$.next(filesToUpload[0]);\n this.uploadingProgress$.next(0);\n this.uploadInProgress.emit(true);\n this.cdr.detectChanges();\n\n if (this.useTwoStepUpload) {\n this.uploadQueue(filesToUpload, this.doTwoStepUpload.bind(this));\n } else {\n this.uploadQueue(filesToUpload, this.doUpload.bind(this));\n }\n } else {\n this.snackbarService.error(SnackbarErrorMessage.UnsupportedFileType);\n }\n }\n\n private uploadQueue(files: File[], uploadMethod: (file: File) => any) {\n from(files)\n .pipe(\n mergeMap((file: File) => uploadMethod(file), 1),\n reduce((acc, value) => {\n acc.push(value);\n return acc;\n }, [])\n )\n .subscribe({\n next: result => {\n this.control.setValue(result);\n this.uploadingProgress$.next(100);\n this.cdr.detectChanges();\n },\n complete: () => {\n this.uploadInProgress.emit(false);\n this.cdr.detectChanges();\n },\n })\n .untilDestroyed(this);\n }\n\n getMimeType(file: File): string {\n if (file.type) {\n return file.type;\n }\n\n const extension = file.name.split('.').pop()?.toLowerCase();\n switch (extension) {\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'mp4':\n return 'video/mp4';\n case 'gif':\n return 'image/gif';\n default:\n return 'application/octet-stream';\n }\n }\n\n private isVideoFileByExtension(fileName: string): boolean {\n const videoExtensions = ['.mp4', '.mov', '.avi', '.wmv', '.mkv'];\n const fileExtension = fileName.slice(fileName.lastIndexOf('.')).toLowerCase();\n return videoExtensions.includes(fileExtension);\n }\n\n private doTwoStepUpload(file: File): Observable {\n return new Observable(observer => {\n const isVideo =\n file.type && file.type !== '' ? file.type.startsWith('video/') : this.isVideoFileByExtension(file.name);\n\n if (isVideo) {\n this.generateThumbnailService\n .generateThumbnail(file)\n .subscribe({\n next: ({ thumbnail, duration }) => {\n this.uploadThumbnail(thumbnail as File)\n .pipe(\n mergeMap(thumbnailUploadResponse =>\n this.uploadMainFile(file, thumbnailUploadResponse.id, duration, thumbnailUploadResponse.cloudUri)\n )\n )\n .subscribe({\n next: response => {\n observer.next(response);\n observer.complete();\n },\n error: error => this.handleUploadError(observer, 'Complete file upload error', error),\n })\n .untilDestroyed(this);\n },\n error: error => this.handleUploadError(observer, 'Generating thumbnail error', error),\n })\n .untilDestroyed(this);\n } else {\n this.uploadMainFile(file, null, null, null)\n .subscribe({\n next: response => {\n observer.next(response);\n observer.complete();\n },\n error: error => this.handleUploadError(observer, 'File upload error', error),\n })\n .untilDestroyed(this);\n }\n });\n }\n\n private uploadThumbnail(thumbnail: File): Observable {\n return this.fileUploadsService.uploadFile(thumbnail);\n }\n\n private uploadMainFile(file: File, thumbnailId: number, duration: number, thumbnailUri: string): Observable {\n return new Observable(observer => {\n this.fileUploadsService\n .generateUploadLink(encodeURIComponent(file.name))\n .subscribe({\n next: response => {\n this.uploadFileToServer(file, response.urlToUpload, thumbnailId, duration, thumbnailUri, observer);\n },\n error: error => this.handleUploadError(observer, 'Upload link error', error),\n })\n .untilDestroyed(this);\n });\n }\n\n private uploadFileToServer(\n file: File,\n uploadUrl: string,\n thumbnailId: number,\n duration: number,\n thumbnailUri: string,\n observer: any\n ) {\n const xhr = new XMLHttpRequest();\n xhr.upload.onprogress = this.trackProgress.bind(this);\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n this.completeFileUpload(xhr.responseURL, thumbnailId, duration, thumbnailUri, observer);\n } else {\n this.handleUploadError(observer, `Upload error: ${xhr.statusText}`, new Error(xhr.statusText));\n }\n };\n\n xhr.onerror = () => this.handleUploadError(observer, `Upload error: ${xhr.statusText}`, new Error(xhr.statusText));\n\n xhr.open('PUT', uploadUrl, true);\n this.setXhrHeaders(xhr, file);\n xhr.send(file);\n }\n\n private completeFileUpload(\n responseURL: string,\n thumbnailId: number,\n duration: number,\n thumbnailUri: string,\n observer: any\n ) {\n this.fileUploadsService\n .completeFileUpload(responseURL, thumbnailId, Math.round(duration) || null)\n .subscribe({\n next: completeResponse => {\n observer.next({ ...completeResponse, thumbnailUri });\n observer.complete();\n },\n error: error => this.handleUploadError(observer, 'Complete file upload error', error),\n })\n .untilDestroyed(this);\n }\n\n private setXhrHeaders(xhr: XMLHttpRequest, file: File) {\n xhr.setRequestHeader('x-ms-date', new Date().toUTCString());\n xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');\n xhr.setRequestHeader('x-ms-meta-filename', encodeURIComponent(file.name));\n xhr.setRequestHeader('Content-Type', this.getMimeType(file));\n }\n\n private trackProgress(event: ProgressEvent) {\n if (event.lengthComputable) {\n const progress = Math.round((100 * event.loaded) / event.total);\n this.uploadingProgress$.next(progress);\n this.cdr.detectChanges();\n }\n }\n\n private handleUploadError(observer: any, message: string, error: any): void {\n console.error(message, error);\n this.uploadingProgress$.next(0);\n observer.error(error);\n }\n\n private doUpload(file: File) {\n return this.fileUploadsService\n .uploadFileProgress(file)\n .pipe(\n catchError((err: unknown) => {\n this.snackbarService.error(SnackbarErrorMessage.UploadingFile);\n this.uploadingProgress$.next(0);\n throw err;\n })\n )\n .pipe(\n tap((event: any) => {\n if (event.type === HttpEventType.UploadProgress) {\n const progress = Math.round((100 * event.loaded) / event.total);\n this.uploadingProgress$.next(progress);\n this.cdr.detectChanges();\n }\n }),\n filter((event: any) => {\n return event instanceof HttpResponse;\n }),\n map((event: any) => {\n this.uploadingProgress$.next(0);\n this.cdr.detectChanges();\n const upload = event.body as Upload;\n return upload;\n })\n );\n }\n\n private initCheckControl(): void {\n if (this.ngControl?.control) {\n if (this.ngControl.control.errors) {\n this.errors = { ...this.ngControl.control.errors };\n }\n if (this.ngControl.control.touched) {\n this.control.markAsTouched();\n }\n this.invalid = this.ngControl.control.invalid;\n this.ngControl.control.statusChanges\n .pipe(untilDestroyed(this))\n .subscribe(status => this.checkControlStatus(status))\n .untilDestroyed(this);\n }\n }\n\n private initControlChanges(): void {\n this.control.valueChanges\n .pipe(\n tap(value => {\n this.onChanged(value);\n this.onTouched();\n if (!value) {\n this.uploadingFile$.next(null);\n }\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\n\nexport type TooltipHelpMarginLeft = 'm' | 'xs' | 's' | 'none';\nexport type TooltipHelpPosition = 'after' | 'before' | 'above' | 'below' | 'left' | 'right';\n\n@Component({\n selector: 'app-tooltip-help',\n templateUrl: './tooltip-help.component.html',\n styleUrls: ['./tooltip-help.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [TooltipDirectiveModule],\n})\nexport class TooltipHelpComponent {\n @Input() text!: string;\n @Input() position: TooltipHelpPosition = 'above';\n @Input() marginLeftType: TooltipHelpMarginLeft = 'none';\n @Input() label?: string;\n}\n","\n ?\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { TooltipHelpComponent } from '@shared/components/tooltip-help/tooltip-help.component';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nimport { InputFileComponent } from './input-file.component';\n\n@NgModule({\n declarations: [InputFileComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n NgxMaskModule,\n IconComponent,\n InputErrorModule,\n MatButtonModule,\n PipesModule,\n TooltipDirectiveModule,\n DirectivesModule,\n TooltipHelpComponent,\n ],\n exports: [InputFileComponent],\n})\nexport class InputFileModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { InputErrorModule } from '@app/modules/ui-components/components/input-error/input-error.module';\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nimport { InputTypeFileComponent } from './input-type-file.component';\n\n@NgModule({\n declarations: [InputTypeFileComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatInputModule,\n NgxMaskModule,\n IconComponent,\n InputErrorModule,\n MatButtonModule,\n PipesModule,\n TooltipDirectiveModule,\n StopPropagationDirective,\n ],\n exports: [InputTypeFileComponent],\n})\nexport class InputTypeFileModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n standalone: true,\n name: 'appInputTextPlaceholder',\n})\nexport class PlaceholderPipe implements PipeTransform {\n transform(controlValue: string, placeholder = ''): string {\n return controlValue ? '' : placeholder;\n }\n}\n","
\n
\n \n \n {{ attrLabel }}\n \n info_outlined\n \n \n \n \n
\n
\n
\n
\n
\n \n maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value || control.value === 0 ? 'filled' : '',\n disabled ? 'disabled' : ''\n ]\"\n [attr.aria-invalid]=\"errors && showValidationErrorOrSubmitted\">\n maxCounter)\n ? 'invalid'\n : '',\n errors ? 'error-section' : '',\n control.value || control.value === 0 ? 'filled' : '',\n disabled ? 'disabled' : ''\n ]\"\n matInput\n [type]=\"attrType\"\n [formControl]=\"control\"\n [placeholder]=\"control.value | appInputTextPlaceholder: attrPlaceholder\"\n [autocomplete]=\"attrAutocomplete ? 'on' : 'off'\"\n [mask]=\"attrMask\"\n [readonly]=\"readonly\"\n [thousandSeparator]=\"attrThousandSeparator\"\n [dropSpecialCharacters]=\"attrDropSpecialCharacters\"\n [validation]=\"attrValidation\"\n [appCurrencyFormatter]=\"useCurrencyFormatter\"\n [attr.aria-invalid]=\"(errors && showValidationErrorOrSubmitted) || markAsInvalid\"\n (blur)=\"onBlur($event)\"\n (change)=\"onChanged(inputControl.value)\"\n (keydown.enter)=\"keydownEnter($event)\"\n [maxlength]=\"maxLength\" />\n {{ prefix }}\n \n \n \n
\n
\n
\n maxCounter ? 'red3' : ''\">\n [{{ control?.value?.length || 0 }}/{{ maxCounter }}]\n
\n \n
\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl } from '@angular/forms';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class InputComponent extends CustomControlAbstract implements OnInit, AfterViewInit, ControlValueAccessor {\n disabled = false;\n\n @Input() prefix: string;\n @Input() attrPlaceholder: string;\n @Input() attrLabel: string;\n @Input() infoTooltip: string;\n @Input() attrType = 'text';\n @Input() labelCss = 'label-input body-small-bold';\n @Input() contentCss = 'display-flex align-items-start flex-column';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = 'display-flex align-items-center';\n @Input() matFormCss = '';\n @Input() attrAutocomplete = false;\n @Input() attrValidation = true;\n @Input() attrMask = '';\n @Input() attrThousandSeparator = '';\n @Input() attrDropSpecialCharacters = null;\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() labelRequired: boolean;\n @Input() displayCounter = false;\n @Input() isFocused = false;\n @Input() maxCounter = 100;\n @Input() maxLength: number;\n @Input() readonly = false;\n @Input() useCurrencyFormatter = false;\n @Input() displaySkeleton = false;\n\n @Output() blurEvent = new EventEmitter();\n @Output() keydownEnterEvent = new EventEmitter();\n @ViewChild('inputControl', { read: ElementRef }) inputControl: ElementRef;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.control.disable();\n } else {\n this.control.enable();\n }\n this.control.markAsUntouched();\n this.control.markAsPristine();\n this.disabled = attrDisable;\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.initControlBase();\n // The logic was provided to hide placeholders via re rendering view. ; otherwise, both placeholders and values are binged displayed together.\n // the problem was related to mask\n // find better solution using placeholder.pipe.ts\n // This part can be removed after becoming familiar.\n // setTimeout(() => this.cdr.detectChanges()); //has no idea what for, check if it can be deleted\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n onBlur($event: FocusEvent) {\n this.blurEvent.emit($event);\n this.onTouched();\n }\n\n focus() {\n this.inputControl?.nativeElement.focus();\n }\n\n keydownEnter($event: Event) {\n if (this.control.value) {\n $event.stopPropagation();\n $event.preventDefault();\n this.keydownEnterEvent.emit($event);\n }\n }\n\n removeFocus() {\n this.inputControl.nativeElement.blur();\n }\n\n ngAfterViewInit() {\n if (this.inputControl && this.isFocused) {\n setTimeout(() => {\n this.inputControl.nativeElement.focus();\n }, 300);\n }\n if (this.useCurrencyFormatter) {\n const initialValue = this.control.value;\n this.control.setValue(initialValue);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PlaceholderPipe } from '@shared/pipes/placeholder.pipe';\n\nimport { InputComponent } from './input.component';\nimport { IconComponent } from '../../components/icon/icon.component';\nimport { InputErrorModule } from '../../components/input-error/input-error.module';\n\n@NgModule({\n declarations: [InputComponent],\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n NgxMaskModule.forRoot(),\n IconComponent,\n InputErrorModule,\n MatIconModule,\n TooltipDirectiveModule,\n PlaceholderPipe,\n DirectivesModule,\n ],\n exports: [InputComponent, ReactiveFormsModule],\n})\nexport class InputModule {}\n","
\n \n
\n
\n \n \n
\n
{{ prefix }}
\n
\n {{ inputControl.value }}\n \n
\n
{{ postfix }}
\n
\n \n \n \n \n
\n\n \n
\n
\n\n\n
\n \n {{ label }}\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs';\n\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { parseNumber } from '@shared/functions/parse-number';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-number-input',\n templateUrl: './number-input.component.html',\n styleUrls: ['./number-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberInputComponent extends CustomControlAbstract implements OnInit, ControlValueAccessor {\n //ToDo: make this control to return to outside value without mask & separator as clear number\n @Input() prefix: string;\n @Input() postfix: string;\n @Input() attrPlaceholder: string;\n @Input() attrMask = 'separator.2';\n @Input() attrThousandSeparator = ',';\n @Input() min = 0;\n @Input() max: number = null;\n @Input() nullAllowed = false;\n @Input() isSmallFont = false;\n\n @Input() contentCss = 'display-flex align-items-start flex-column';\n @Input() containerCss = 'display-flex flex-column';\n @Input() inputCss = 'display-flex align-items-center';\n @Input() classList = '';\n\n @Input() markAsInvalid = false;\n @Input() errorSection = true;\n @Input() icon: EIcon;\n @Input() iconTooltip = '';\n @Input() showClearButton = false;\n\n @Input() label: string;\n @Input() labelCss = 'label-input body-small-bold';\n @Input() labelRequired = false;\n @Input() labelInside = false;\n @Input() labelTooltip = '';\n\n @Input() autoUpdate = true;\n\n @Output() blurEvent = new EventEmitter();\n @Output() keydownEnterEvent = new EventEmitter();\n @ViewChild('inputControl', { read: ElementRef }) inputControl: ElementRef;\n\n innerControl = new FormControl(null);\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControlBase();\n this.innerControl.setValue(this.control.value?.toString() ?? '0');\n\n if (this.autoUpdate) {\n this.innerControl.valueChanges\n .pipe(\n untilDestroyed(this),\n map(v => parseNumber(v.toString())),\n distinctUntilChanged(),\n filter(v => !isNaN(v) && v != this.control.value),\n tap(v => this.onChanged(v))\n )\n .subscribe(v => this.control.setValue(v))\n .untilDestroyed(this);\n\n this.control.valueChanges\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(v => v != null && !isNaN(v) && v != parseNumber(this.control.value?.toString()))\n )\n .subscribe(v => this.innerControl.setValue(v.toString()))\n .untilDestroyed(this);\n }\n\n setTimeout(() => this.cdr.detectChanges());\n }\n\n writeValue(value: any): void {\n if (value != this.control.value && !isNaN(value)) {\n this.control.setValue(value);\n }\n }\n\n onBlur($event: FocusEvent) {\n const value = this.innerControl.value;\n\n if (!this.autoUpdate) {\n this.updateControlValueManually();\n } else {\n if (value !== '0' && !value) {\n this.innerControl.setValue('0');\n } else {\n if (typeof value === 'string' && value.includes('.')) {\n const decimalPart = value.split('.')[1];\n\n if (decimalPart.length > 2) {\n this.innerControl.setValue(value.split('.')[0] + '.' + decimalPart.substring(0, 2));\n }\n }\n }\n this.blurEvent.emit($event);\n this.onTouched();\n }\n }\n\n focus() {\n this.inputControl?.nativeElement.focus();\n }\n\n keydownEnter($event: Event) {\n if (this.innerControl.value) {\n if (!this.autoUpdate) {\n this.updateControlValueManually();\n } else {\n $event.stopPropagation();\n $event.preventDefault();\n this.keydownEnterEvent.emit($event);\n }\n }\n }\n\n clear() {\n this.innerControl.setValue('0');\n }\n\n keyUp($event: KeyboardEvent, input: HTMLInputElement) {\n if (input.value === '' && $event.key === '.') {\n input.value = '0.';\n }\n if (input.value == '0' && ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes($event.key)) {\n input.value = $event.key;\n this.updateControlValueManually(input.value);\n }\n }\n\n private updateControlValueManually(simpleNumber?: string): void {\n let value = 0;\n if (simpleNumber) {\n value = +simpleNumber;\n } else {\n value = this.innerControl.value ? parseNumber(this.innerControl.value.toString()) : 0;\n }\n if (!isNaN(value)) {\n this.control.setValue(value);\n this.onChanged(value);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\n\nimport { NumberInputComponent } from './number-input.component';\nimport { IconComponent } from '../../components/icon/icon.component';\nimport { InputErrorModule } from '../../components/input-error/input-error.module';\n\n@NgModule({\n declarations: [NumberInputComponent],\n imports: [\n CommonModule,\n IconComponent,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n NgxMaskModule.forRoot(),\n IconComponent,\n InputErrorModule,\n MatIconModule,\n TooltipDirectiveModule,\n PipesModule,\n ],\n exports: [NumberInputComponent],\n})\nexport class NumberInputModule {}\n","
\n
\n
\n {{ data.label | uppercase }}\n
\n\n
\n \n \n
\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n \n \n 0\">\n \n \n {{ item.label }}\n \n \n \n \n \n\n \n \n \n {{ item.label }}\n \n \n \n\n \n \n \n \n {{ item.label }}\n \n \n \n \n
\n
No items found
\n
\n
\n
\n
\n
\n","import { Component, Inject } from '@angular/core';\nimport { MAT_BOTTOM_SHEET_DATA, MatBottomSheetRef } from '@angular/material/bottom-sheet';\nimport { MatSelectionListChange } from '@angular/material/list';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\n\ninterface IBottomSheetData {\n sections: IRadioButtonOption[][];\n items: IRadioButtonOption[];\n selectedValue: T | T[];\n label: string;\n allowSearch: boolean;\n multiSelect: boolean;\n allowAddNew: boolean;\n addNewLabel: string;\n onSearch: (term: string) => IRadioButtonOption[];\n}\n\n@Component({\n selector: 'app-radio-button-bottom-sheet',\n templateUrl: './radio-button-bottom-sheet.component.html',\n styleUrls: ['./radio-button-bottom-sheet.component.scss'],\n})\nexport class RadioButtonBottomSheetComponent {\n public searchTerm = '';\n public filteredItems: IRadioButtonOption[] = [];\n public searchIconColor = EColorPalette.cBlack;\n public searchInputCollapsed = true;\n\n constructor(\n @Inject(MAT_BOTTOM_SHEET_DATA)\n public data: IBottomSheetData,\n private bottomSheetRef: MatBottomSheetRef>\n ) {\n this.updateFilteredItems();\n }\n\n private updateFilteredItems(): void {\n const items = [...this.data.items];\n this.filteredItems = this.sortItemsBySelection(items);\n }\n\n private sortItemsBySelection(items: IRadioButtonOption[]): IRadioButtonOption[] {\n return items.sort((a, b) => {\n const aSelected = this.isSelected(a.value);\n const bSelected = this.isSelected(b.value);\n if (aSelected && !bSelected) return -1;\n if (!aSelected && bSelected) return 1;\n return 0;\n });\n }\n\n onSearch(term: string): void {\n const searchResults = this.data.onSearch(term);\n this.filteredItems = this.sortItemsBySelection(searchResults);\n }\n\n isSelected(value: T): boolean {\n return Array.isArray(this.data.selectedValue)\n ? this.data.selectedValue.includes(value)\n : this.data.selectedValue === value;\n }\n\n onSelectionChange(event: MatSelectionListChange): void {\n if (this.data.multiSelect) {\n const selectedValues = Array.isArray(this.data.selectedValue) ? [...this.data.selectedValue] : [];\n\n event.options.forEach(option => {\n const index = selectedValues.indexOf(option.value);\n if (option.selected && index === -1) {\n selectedValues.push(option.value);\n } else if (!option.selected && index > -1) {\n selectedValues.splice(index, 1);\n }\n });\n\n this.data.selectedValue = selectedValues;\n } else {\n this.close(event.options[0].value);\n }\n }\n\n onAddNew(): void {\n this.close('add_new');\n }\n\n close(result?: any): void {\n if (this.data.multiSelect) {\n this.bottomSheetRef.dismiss(this.data.selectedValue);\n } else {\n this.bottomSheetRef.dismiss(result);\n }\n }\n\n selectAll(): void {\n if (!this.data.multiSelect) return;\n\n const allValues = this.data.sections\n ? this.data.sections.flat().map(item => item.value)\n : this.data.items.map(item => item.value);\n\n this.data.selectedValue = allValues;\n this.updateFilteredItems();\n }\n\n clearAll(): void {\n if (!this.data.multiSelect) return;\n\n this.data.selectedValue = [];\n this.updateFilteredItems();\n }\n\n isAllSelected(): boolean {\n if (!this.data.multiSelect) return false;\n\n const allValues = this.data.sections\n ? this.data.sections.flat().map(item => item.value)\n : this.data.items.map(item => item.value);\n\n return (\n Array.isArray(this.data.selectedValue) &&\n allValues.length > 0 &&\n allValues.every(value => (this.data.selectedValue as T[]).includes(value))\n );\n }\n\n toggleSelectAll(): void {\n if (this.isAllSelected()) {\n this.clearAll();\n } else {\n this.selectAll();\n }\n }\n\n hasMultipleItems(): boolean {\n return this.data.sections ? this.data.sections.flat().length > 1 : this.data.items.length > 1;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n
\n Select All\n   \n Clear All\n
\n
\n
\n\n \n
No items found
\n
\n\n \n \n \n \n \n\n \n
\n \n\n \n \n {{ displayValue }}\n \n \n\n \n\n \n \n {{ itemList[0]?.groupLabel }}\n \n \n \n
\n
\n \n
\n \n \n \n \n
\n\n \n \n \n
\n\n \n \n \n \n \n \n \n \n \n \n
\n
\n\n\n\n
\n \n \n \n \n \n \n \n \n
\n
\n\n\n \n
\n \n {{ label }}\n \n \n
\n
\n \n
\n
\n
\n\n\n \n \n\n\n\n \n {{ displayValue | escapeHtml: allowAngelBrackets }}\n \n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl } from '@angular/forms';\nimport { MatBottomSheet } from '@angular/material/bottom-sheet';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { find, isEmpty, isNil, isNumber, isUndefined } from 'lodash';\nimport { BehaviorSubject, Observable, combineLatest, of } from 'rxjs';\nimport { distinctUntilChanged, map, tap } from 'rxjs/operators';\n\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { ValueLabelPair } from '@shared/interfaces/value-label-pair.interface';\nimport { DestroyService } from '@shared/services/destroy.service';\nimport { DeviceService } from '@shared/services/device/device.service';\nimport { LocalCacheService } from '@shared/services/local-cache.service';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\nimport { skipEqual$ } from '@shared/utils/rxjs/skip-equal.rxjs.util';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\nimport { RadioButtonBottomSheetComponent } from './radio-button-bottom-sheet/radio-button-bottom-sheet.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-radio-button-dropdown',\n templateUrl: './radio-button-dropdown.component.html',\n styleUrls: ['./radio-button-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [DestroyService],\n})\nexport class RadioButtonDropdownComponent\n extends CustomControlAbstract\n implements OnInit, AfterViewInit, ControlValueAccessor, OnDestroy\n{\n @Input() set formControl(control: FormControl) {\n if (this.control !== control) {\n this.control = control;\n this.initControl();\n }\n }\n @Input() valueCss = '';\n @Input() optionCss = '';\n @Input() labelCss = '';\n @Input() containerWidthCss = '';\n @Input() containerCss = '';\n @Input() ngSelectCss = '';\n @Input() placeholderCss = '';\n @Input() label = '';\n @Input() labelTooltip = '';\n @Input() itemPlaceholder = 'item';\n @Input() tooltipShowDelay: number = null;\n @Input() icon: EIcon;\n @Input() iconTooltip = '';\n @Input() attrPlaceholder = '';\n @Input() filterGroupKey?: string;\n @Input() hasFade = true;\n @Input() onSelectValueContent: ValueLabelPair;\n // temporary for deprecated values (see MoveOutType)\n @Input() unsupportedValueLabel = 'select value';\n /*\n * issue available https://github.com/ng-select/ng-select/issues/2055\n * known workaround - https://github.com/Kyotu-Technology/noetic-frontend/pull/455\n */\n @Input() highlightWhenActive = false;\n @Input() attrAppendTo = '';\n @Input() allowSelectAll = false;\n @Input() isSmallFont = false;\n @Input() isSmallPadding = false;\n @Input() multiSelect = false;\n @Input() attrDisable = false;\n @Input() isLabelInside = false;\n @Input() markAsInvalid = false;\n @Input() allowClear = true;\n @Input() allowSearch = true;\n @Input() displayLabelAsValue = false;\n @Input() labelRequired: boolean;\n @Input() showEmptyValue = false;\n @Input() showValueTooltip = false;\n @Input() activeOnFocus = false;\n @Input() errorSection = true;\n // TODO: move autoSortList to setter\n // otherwise parameters order matters\n @Input() autoSortList = true;\n @Input() dividerPosition!: number;\n @Input() allPropertiesLabel = false;\n @Input() displaySkeleton = false;\n @Input() scrollableElementId: string;\n @Input() scrollableElementIds: string[];\n @Input() allowAngelBrackets = false;\n @Input() allPropertiesPlaceholder!: string;\n @Input() portfolioPropertiesPlaceholder!: string;\n @Input() showSwitch = false;\n @Input() switchStatus = false;\n\n @Input() set items(items: IRadioButtonOption[] | IRadioButtonOption[][]) {\n this._items = items;\n this.controlSectionItems = [];\n this.controlItems = [];\n this.transformValueList = [];\n\n if (Array.isArray(items?.[0])) {\n this.controlSectionItems = (items as IRadioButtonOption[][]).map(section => this.sortSection(section));\n this.transformValueList = this.controlSectionItems.flat();\n } else {\n this.controlItems = this.sortSection(items as IRadioButtonOption[]);\n this.transformValueList = [...this.controlItems];\n }\n this.transformValue();\n }\n\n @Input() set listLoading(listLoading: boolean) {\n this._listLoading = listLoading;\n this.cdr.markForCheck();\n }\n\n @Input() set onOpenSelector(openSelector: boolean) {\n setTimeout(() => {\n if (openSelector && this.ngSelect) this.ngSelect.open();\n });\n }\n\n @Input() customValueTemplate: TemplateRef;\n @Input() customListItemTemplate?: TemplateRef;\n @Input() allowAddNew = false;\n @Input() addNewLabel = '+ Add new item';\n @Output() addNewClicked = new EventEmitter();\n @Output() switchToggled = new EventEmitter();\n\n EColorPalette = EColorPalette;\n displayValue = '';\n controlItems: IRadioButtonOption[] = [];\n controlSectionItems: IRadioButtonOption[][] = [];\n transformValueList: IRadioButtonOption[] = [];\n hasValue = false;\n _labelWidth$ = new BehaviorSubject(null);\n labelWidth$ = this._labelWidth$.asObservable();\n paddingLeft$!: Observable;\n private _items: IRadioButtonOption[] | IRadioButtonOption[][] = [];\n _listLoading = false;\n labelWidthN: number;\n _labelElement: ElementRef;\n _focused = false;\n isOpen = false;\n\n @ViewChild(NgSelectComponent) ngSelect: NgSelectComponent;\n\n private _resizeObserver: ResizeObserver;\n\n public isMobileDevice = false;\n\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n\n this._labelElement = value;\n\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n\n this._resizeObserver = new ResizeObserver(entries => {\n const labelWidth = entries[0]?.contentRect?.width;\n if (labelWidth) {\n this.labelWidthN = labelWidth;\n this._labelWidth$.next(labelWidth);\n this.cdr.markForCheck();\n }\n });\n\n this._resizeObserver.observe(value.nativeElement);\n }\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective,\n private cache: LocalCacheService,\n private destroy$: DestroyService,\n private bottomSheet: MatBottomSheet,\n private deviceService: DeviceService,\n private viewContainerRef: ViewContainerRef\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControl();\n this.initPaddingLeft();\n\n this.deviceService.isMobile$\n .pipe(untilDestroyed(this))\n .subscribe(isMobile => {\n this.isMobileDevice = isMobile;\n if (isMobile && this.ngSelect) {\n this.ngSelect.close();\n }\n })\n .untilDestroyed(this);\n }\n\n ngAfterViewInit() {\n this.initPaddingLeft();\n }\n\n get isShowDisplayValue() {\n if (!this.allowSearch) return true;\n return !this._focused;\n }\n\n searchFunction(term: string, value: T): boolean {\n term = term.toLowerCase();\n const item = find(this.transformValueList, { value }) as IRadioButtonOption;\n\n return (\n item?.label?.toLowerCase()?.indexOf(term) > -1 ||\n (item?.additionalSearchLabel && item.additionalSearchLabel.toLowerCase()?.indexOf(term) > -1)\n );\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n this.transformValue();\n }\n\n onSelectAll() {\n this.control.patchValue(this.transformValueList.map(t => t.value));\n this.cdr.markForCheck();\n }\n\n onClearAll() {\n this.control.patchValue([]);\n this.cdr.markForCheck();\n }\n\n onAddNew() {\n this.addNewClicked.emit();\n this.ngSelect.close();\n this.cdr.markForCheck();\n }\n\n onToggleSwitch(collectionsSelected: boolean) {\n this.switchToggled.emit(collectionsSelected);\n this.ngSelect.close();\n this.cdr.markForCheck();\n }\n\n onClear() {\n this.transformValue();\n }\n\n onOpen() {\n if (this.multiSelect) {\n if (this.controlSectionItems?.length) {\n this.items = this.controlSectionItems;\n } else if (this.controlItems?.length) {\n this.items = this.controlItems;\n }\n }\n\n if (this.scrollableElementIds?.length) this.toggleScrollableElementScroll('hidden', '5.4px');\n }\n\n onClose(): void {\n if (this.scrollableElementIds?.length) this.toggleScrollableElementScroll('auto', '0px');\n }\n\n handleDropdownClick($event: MouseEvent): void {\n if (this.isMobileDevice) {\n $event.preventDefault();\n $event.stopPropagation();\n if (this.ngSelect) {\n this.ngSelect.close();\n }\n\n const sections = Array.isArray(this._items?.[0]) ? (this._items as IRadioButtonOption[][]) : [];\n\n const items = !Array.isArray(this._items?.[0]) ? (this._items as IRadioButtonOption[]) : [];\n\n const bottomSheetRef = this.bottomSheet.open(RadioButtonBottomSheetComponent, {\n data: {\n sections: sections.map(section => this.sortSection(section)),\n items: this.sortSection(items),\n selectedValue: this.control.value,\n label: this.attrPlaceholder,\n allowSearch: this.allowSearch,\n multiSelect: this.multiSelect,\n allowAddNew: this.allowAddNew,\n addNewLabel: this.addNewLabel,\n autoFocus: false,\n onSearch: (term: string) => this.handleBottomSheetSearch(term, sections, items),\n },\n hasBackdrop: true,\n backdropClass: 'bottom-sheet-above-modal-backdrop',\n viewContainerRef: this.viewContainerRef,\n panelClass: 'bottom-sheet-above-modal',\n });\n\n bottomSheetRef\n .afterDismissed()\n .pipe(untilDestroyed(this))\n .subscribe(result => {\n if (result === 'add_new') {\n this.addNewClicked.emit();\n } else if (result !== undefined && result !== null) {\n this.control.setValue(result);\n this.cdr.markForCheck();\n }\n if (this.ngSelect) {\n this.ngSelect.blur();\n }\n })\n .untilDestroyed(this);\n } else {\n const target = $event.target as HTMLElement;\n if (target.tagName === 'NG-SELECT') {\n this.ngSelect.toggle();\n }\n }\n }\n\n private handleBottomSheetSearch(\n term: string,\n sections: IRadioButtonOption[][],\n items: IRadioButtonOption[]\n ): IRadioButtonOption[] {\n const searchTerm = term.toLowerCase();\n if (sections.length) {\n return sections\n .flat()\n .filter(\n item =>\n item.label.toLowerCase().includes(searchTerm) ||\n (item.additionalSearchLabel && item.additionalSearchLabel.toLowerCase().includes(searchTerm))\n );\n } else {\n return items.filter(\n item =>\n item.label.toLowerCase().includes(searchTerm) ||\n (item.additionalSearchLabel && item.additionalSearchLabel.toLowerCase().includes(searchTerm))\n );\n }\n }\n\n compareFn(item: unknown, selected: unknown): boolean {\n if (Array.isArray(selected)) {\n return selected.includes(item);\n } else {\n return selected === item;\n }\n }\n\n private sortSection(items: IRadioButtonOption[]) {\n return items?.length && this.autoSortList\n ? [...items].sort((a, b) => {\n if (this.multiSelect) {\n const aSelected = this.control.value?.includes(a.value);\n const bSelected = this.control.value?.includes(b.value);\n if (aSelected != bSelected) {\n return aSelected < bSelected ? 1 : -1;\n }\n }\n\n if (isNumber(a.value) && isNumber(b.value)) {\n if (a.value < 0 || b.value < 0) {\n if (a.value < 0 && b.value >= 0) return -1;\n if (b.value < 0 && a.value >= 0) return 1;\n }\n }\n\n if (a.sort != b.sort) {\n if (typeof b.sort === 'undefined') return -1;\n if (typeof a.sort === 'undefined') return 1;\n return a.sort > b.sort ? 1 : -1;\n }\n return a.label.localeCompare(b.label, undefined, { sensitivity: 'accent' });\n })\n : items || [];\n }\n\n private initControl() {\n this.initControlBase();\n\n this.transformValue();\n this.control.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => this.transformValue())\n .untilDestroyed(this);\n }\n\n private initLabelWidth() {\n if (!this.isLabelInside || !this._labelElement) return;\n\n this.labelWidthN = this._labelElement?.nativeElement?.clientWidth;\n const width = this._labelElement?.nativeElement?.clientWidth;\n width && this._labelWidth$.next(width);\n\n this.cdr.markForCheck();\n }\n\n private transformValue() {\n const value = this.control?.value;\n const hasValue = Array.isArray(value) ? !isEmpty(value) : !isNil(value);\n if (hasValue || this.showEmptyValue) {\n this.hasValue = true;\n if (Array.isArray(value)) {\n if (this.displayLabelAsValue) {\n this.displayValue = this.transformValueList\n .filter(x => value.includes(x.value))\n .map(x => x.label)\n ?.join(', ');\n } else {\n if (this.allPropertiesLabel && value.length === this.controlItems?.length) {\n this.displayValue = this.allPropertiesPlaceholder\n ? this.allPropertiesPlaceholder\n : this.switchStatus\n ? 'All Collections'\n : 'All Properties';\n } else if (value.length > 1) {\n this.displayValue = this.onSelectValueContent\n ? this.getCustomTransformValue(value.length)\n : `${value.length} ${this.pluralizeWord(this.itemPlaceholder, value.length)}`;\n } else {\n const displayValue = this.transformValueList?.find(item => item.value === value[0])?.label;\n this.displayValue = isUndefined(displayValue) ? this.unsupportedValueLabel : displayValue;\n }\n }\n } else {\n const valueStr = JSON.stringify(value);\n const item = this.transformValueList?.find(\n item => item.value === value || JSON.stringify(item.value) === valueStr\n );\n let displayValue = item?.displayValue || item?.label;\n\n if (this.allPropertiesPlaceholder && valueStr === '-1') displayValue = this.allPropertiesPlaceholder;\n\n if (this.portfolioPropertiesPlaceholder && valueStr === '-2')\n displayValue = this.portfolioPropertiesPlaceholder;\n\n this.displayValue = isUndefined(displayValue) ? this.unsupportedValueLabel : displayValue;\n }\n } else {\n this.hasValue = false;\n }\n\n this.cdr.detectChanges();\n }\n\n private pluralizeWord(word: string, count: number): string {\n if (count > 1) {\n if (word.endsWith('y')) {\n return word.slice(0, -1) + 'ies';\n } else if (\n word.endsWith('s') ||\n word.endsWith('x') ||\n word.endsWith('z') ||\n word.endsWith('ch') ||\n word.endsWith('sh')\n ) {\n return word + 'es';\n } else if (word.endsWith('f')) {\n return word.slice(0, -1) + 'ves';\n } else if (word.endsWith('fe')) {\n return word.slice(0, -2) + 'ves';\n } else if (word.endsWith('o') && !/(photo|piano|halo)$/.test(word)) {\n return word + 'es';\n } else if (word.endsWith('us')) {\n return word.slice(0, -2) + 'i';\n } else {\n return word + 's';\n }\n }\n return word;\n }\n\n private getCustomTransformValue(count: number): string {\n if (!count) {\n return '';\n }\n\n return (count > 1 ? this.onSelectValueContent.multiple : this.onSelectValueContent.single).replace(\n this.onSelectValueContent.mask,\n `${count}`\n );\n }\n\n private initPaddingLeft(): void {\n const labelWidth$ = this.labelWidth$.pipe(\n untilDestroyed(this),\n filterNullish$(false),\n skipEqual$(),\n tap(currentLabelWidth => {\n if (this.filterGroupKey) {\n const groupOffset = this.cache.get(this.filterGroupKey);\n if ((groupOffset as number) < currentLabelWidth) {\n this.cache.set(this.filterGroupKey, currentLabelWidth, {\n lsKey: this.filterGroupKey,\n });\n }\n }\n })\n );\n\n const labelGroupWidth$ = this.filterGroupKey\n ? this.cache\n .get$(this.filterGroupKey, this.destroy$, {\n initialState: 0,\n lsKey: this.filterGroupKey,\n })\n .pipe(untilDestroyed(this), skipEqual$())\n : of(null);\n\n this.paddingLeft$ = combineLatest([labelWidth$, labelGroupWidth$]).pipe(\n untilDestroyed(this),\n map(([labelWidth, groupWidth]) => Math.max(labelWidth, groupWidth)),\n filterNullish$(false),\n map(width => (this.isLabelInside && width ? width + 'px' : 'initial')),\n skipEqual$()\n );\n }\n\n private toggleScrollableElementScroll(overflowY: string, marginRight: string): void {\n this.scrollableElementIds.forEach(id => {\n const viewport = document.getElementById(id) as HTMLElement;\n if (viewport && (overflowY === 'auto' || viewport.scrollHeight > viewport.clientHeight)) {\n viewport.style.overflowY = overflowY;\n viewport.style.marginRight = marginRight;\n }\n });\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\n\nimport { CollapsibleSearchInputComponent } from '@ui-components/components/collapsible-search-input/collapsible-search-input.component';\n\nimport { RadioButtonBottomSheetComponent } from './radio-button-bottom-sheet.component';\n\n@NgModule({\n declarations: [RadioButtonBottomSheetComponent],\n imports: [\n CommonModule,\n FormsModule,\n MatListModule,\n MatIconModule,\n MatButtonModule,\n MatInputModule,\n MatFormFieldModule,\n CollapsibleSearchInputComponent,\n ],\n exports: [RadioButtonBottomSheetComponent],\n})\nexport class RadioButtonBottomSheetModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { ClickOutsideDirective } from '@shared/directives/click-outside.directive';\nimport { StopPropagationDirective } from '@shared/directives/stop-propagation.directive';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\n\nimport { RadioButtonBottomSheetModule } from './radio-button-bottom-sheet/radio-button-bottom-sheet.module';\nimport { RadioButtonDropdownComponent } from './radio-button-dropdown.component';\nimport { IconComponent } from '../../components/icon/icon.component';\nimport { RadioButtonModule } from '../radio-button/radio-button.module';\n\n@NgModule({\n declarations: [RadioButtonDropdownComponent],\n imports: [\n CommonModule,\n MatMenuModule,\n RadioButtonModule,\n ReactiveFormsModule,\n IconComponent,\n MatButtonModule,\n InputModule,\n NgSelectModule,\n PipesModule,\n InputErrorModule,\n TooltipDirectiveModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n StopPropagationDirective,\n ClickOutsideDirective,\n MatButtonToggleModule,\n MatIconModule,\n RadioButtonBottomSheetModule,\n ],\n exports: [RadioButtonDropdownComponent],\n})\nexport class RadioButtonDropdownModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatRadioModule } from '@angular/material/radio';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\n\nimport { RadioButtonComponent } from './radio-button.component';\n\n@NgModule({\n declarations: [RadioButtonComponent],\n imports: [CommonModule, MatRadioModule, ReactiveFormsModule, PipesModule, InputErrorModule],\n exports: [RadioButtonComponent],\n})\nexport class RadioButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n Optional,\n Self,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgModel, ReactiveFormsModule } from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-slide-toggle',\n templateUrl: './slide-toggle.component.html',\n styleUrls: ['./slide-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [CommonModule, MatSlideToggleModule, ReactiveFormsModule, TooltipDirectiveModule],\n})\nexport class SlideToggleComponent extends CustomControlAbstract implements OnInit, ControlValueAccessor {\n @Input() attrRightLabel: string;\n @Input() attrLeftLabel: string;\n @Input() labelCss = 'body-small';\n @Input() containerCss = 'display-flex grid-gap-8 align-items-center';\n @Input() activeBold = false;\n @Input() tooltip: string;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngOnInit(): void {\n this.initControlBase();\n\n if (this.ngControl instanceof NgModel) {\n this.control.valueChanges\n .pipe(untilDestroyed(this))\n .subscribe(value => {\n if ((this.ngControl.control as unknown as { _pendingChange: boolean })._pendingChange) {\n this.ngControl.viewToModelUpdate(value);\n }\n })\n .untilDestroyed(this);\n }\n }\n\n writeValue(value: boolean): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n valueChange(value: boolean) {\n this.onChanged(value);\n }\n\n setValue(value: boolean) {\n if (this.ngControl?.control?.disabled) {\n return;\n }\n this.onChanged(value);\n this.onTouched();\n }\n}\n","
\n \n \n \n \n
\n","import {\n Directive,\n Input,\n IterableDiffer,\n IterableDiffers,\n TemplateRef,\n ViewContainerRef,\n inject,\n} from '@angular/core';\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ngForTrackByKey]', standalone: true })\nexport class NgForTrackByKeyDirective {\n private items: T[] = [];\n private differ: IterableDiffer | undefined;\n private trackByKey: keyof T | 'index' | null = null;\n\n private templateRef = inject(TemplateRef);\n private viewContainer = inject(ViewContainerRef);\n private iterableDiffers = inject(IterableDiffers);\n\n @Input()\n set ngForTrackByKey(key: keyof T) {\n this.trackByKey = key;\n if (this.items) {\n this.items = [...this.items]; // Trigger re-render\n }\n }\n\n @Input()\n set ngForOf(items: T[]) {\n this.items = items;\n if (this.differ) {\n this.differ = this.iterableDiffers.find(items).create(this.trackByFn);\n }\n this.updateView();\n }\n\n private trackByFn = (index: number, item: T) => {\n if (this.trackByKey === 'index') {\n return index;\n }\n return this.trackByKey ? item[this.trackByKey] : item;\n };\n\n private updateView() {\n if (this.differ) {\n const changes = this.differ.diff(this.items);\n if (changes) {\n changes.forEachAddedItem(record => {\n this.viewContainer.createEmbeddedView(this.templateRef, { $implicit: record.item });\n });\n\n changes.forEachRemovedItem(record => {\n const view = this.viewContainer.get(record.currentIndex!);\n if (view) {\n this.viewContainer.remove(this.viewContainer.indexOf(view));\n }\n });\n }\n }\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n {{ displayValue | escapeHtml }}\n \n \n \n \n \n \n
\n
\n \n\n \n \n
\n \n {{ label }}\n \n
\n
\n \n
\n
\n
\n\n \n
\n
\n \n
\n\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl } from '@angular/forms';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { find } from 'lodash';\nimport { BehaviorSubject, Observable, combineLatest, distinctUntilChanged, map } from 'rxjs';\nimport { debounceTime, filter } from 'rxjs/operators';\n\nimport { UserType } from '@shared/enums/user-type';\nimport { getUserList } from '@shared/functions/get-user-list.function';\nimport { IRadioButtonOption, IUserRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { RestUserModelExtended } from '@shared/interfaces/user.interface';\nimport { EnumerationValuePipe } from '@shared/pipes/enumeration-value.pipe';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\nimport { skipEqual$ } from '@shared/utils/rxjs/skip-equal.rxjs.util';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\n\n@UntilDestroy()\n@Component({\n selector: 'app-user-select-dropdown',\n templateUrl: './user-select-dropdown.component.html',\n styleUrls: ['./user-select-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class UserSelectDropdownComponent\n extends CustomControlAbstract\n implements OnInit, OnChanges, ControlValueAccessor, AfterContentChecked\n{\n displayValue = '';\n residentList$ = new BehaviorSubject[]>([]);\n userList$ = new BehaviorSubject[]>([]);\n vendorList$ = new BehaviorSubject[]>([]);\n hasValue = false;\n userTooltipInfo$ = this.initTooltipInfo();\n readonly labelInsideDefaultCss = 'nowrap pre-title';\n readonly labelOutsideDefaultCss = 'nowrap body-small-bold';\n defaultOptionItems: IRadioButtonOption[] = [];\n\n @ViewChild(NgSelectComponent) ngSelect: NgSelectComponent;\n\n @Input() selectCss = 'body-small text-color dark';\n @Input() isSmallFont = false;\n @Input() isCustomWidth = false;\n @Input() hasBorders = true;\n @Input() isTransparent = false;\n @Input() containerWidthCss = '';\n @Input() showChevron = true;\n @Input() displaySkeleton = false;\n @Input() scrollableElementIds: string[];\n @Input() labelAsFullName = false;\n\n _labelCss = '';\n @Input() set labelCss(value: string) {\n this._labelCss = value;\n }\n\n get labelCss(): string {\n if (this._labelCss) return this._labelCss;\n\n return this.labelInside ? this.labelInsideDefaultCss : this.labelOutsideDefaultCss;\n }\n\n @Input() set onOpenSelector(openSelector: boolean) {\n setTimeout(() => {\n if (openSelector && this.ngSelect) this.ngSelect.open();\n });\n }\n\n @Input() containerCss = 'display-flex align-items-center';\n @Input() label = '';\n @Input() attrPlaceholder = '';\n @Input() allowClear = true;\n @Input() allowSearch = true;\n @Input() highlightWhenActive = false;\n @Input() attrDisable = false;\n @Input() labelInside = false;\n @Input() labelRequired: boolean;\n @Input() errorSection = true;\n @Input() markAsInvalid = false;\n @Input() userData: UserData = {};\n @Input() showMyOption = false;\n @Input() showAllOption = false;\n @Input() showAssignToResident = false;\n @Input() defaultOptions: number[] = [];\n @Input() myLabel = 'My Tasks';\n @Input() allLabel = 'All Tasks';\n /*\n * issue available https://github.com/ng-select/ng-select/issues/2055\n * known workaround - https://github.com/Kyotu-Technology/noetic-frontend/pull/455\n */\n @Input() attrAppendTo = '';\n\n @Input()\n public set isResident(isResident: boolean) {\n this._isResident$.next(isResident ?? false);\n }\n\n private _isResident$ = new BehaviorSubject(false);\n public isResident$ = this._isResident$.pipe();\n\n @Input()\n public set users(users: RestUserModelExtended[]) {\n this._users$.next(users ?? []);\n }\n\n private _users$ = new BehaviorSubject([]);\n public users$ = this._users$.pipe();\n\n private _valueCss: string;\n @Input() set valueCss(value) {\n this._valueCss = value;\n }\n\n get valueCss() {\n if (this._valueCss) {\n return this._valueCss;\n }\n return 'ellipsis text-color dark ' + (this.labelInside ? '' : 'body-small');\n }\n\n private _optionCss: string;\n @Input() set optionCss(value) {\n this._optionCss = value;\n }\n\n get optionCss() {\n if (this._optionCss) {\n return this._optionCss;\n }\n return 'text-color dark ' + (this.labelInside ? 'pre-option' : 'body-small');\n }\n\n _listLoading = false;\n @Input() set listLoading(listLoading: boolean) {\n this._listLoading = listLoading;\n this.cdr.detectChanges();\n }\n\n get myOptionItem(): IRadioButtonOption | null {\n if (!this.showMyOption || !this.userData || this.userData.id === this.control.value) {\n return null;\n }\n\n return {\n value: this.userData?.id,\n label: this.myLabel,\n };\n }\n\n get allOptionItem(): IRadioButtonOption | null {\n if (this.showAllOption) {\n return {\n value: -1,\n label: this.allLabel,\n };\n }\n\n return null;\n }\n\n get residentOptionItem(): IRadioButtonOption | null {\n if (this.showAssignToResident) {\n return {\n value: -2,\n label: 'Resident (dynamic)',\n };\n }\n\n return null;\n }\n\n labelWidth = '';\n _labelElement: ElementRef;\n\n @ViewChild('labelElement', { static: false }) set content(value: ElementRef) {\n if (!value) return;\n\n this._labelElement = value;\n this.labelWidth = `${value?.nativeElement?.clientWidth}px`;\n this.cdr.detectChanges();\n }\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n private enumerationValuePipe: EnumerationValuePipe,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n ngAfterContentChecked(): void {\n if (!this.labelInside || !this._labelElement) return;\n\n this.labelWidth = `${this._labelElement?.nativeElement?.clientWidth}px`;\n this.cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.initControlBase();\n\n combineLatest([this.isResident$, this.users$.pipe(filter(Boolean))])\n .pipe(\n untilDestroyed(this),\n map(([isResident, users]) => ({ isResident, users })),\n map(({ isResident, users }) => {\n const getUsers = users.map(user => {\n return {\n ...user,\n isFullName: isResident,\n };\n });\n return {\n users: getUsers,\n isResident,\n };\n })\n )\n .subscribe(({ users, isResident }) => this.prepareUsersList(users, isResident))\n .untilDestroyed(this);\n\n this.transformValue(this.control?.value);\n this.control.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => this.transformValue(value))\n .untilDestroyed(this);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.defaultOptions || changes.users) {\n this.defaultOptionItems = this.prepareDefaultOptionItems();\n }\n }\n\n searchFunction(term: string, value: number): boolean {\n term = term.toLowerCase();\n const bothLists = this.userList$.value.concat(this.vendorList$.value);\n const item = find(bothLists, { value });\n return (\n item?.label?.toLowerCase()?.indexOf(term) > -1 ||\n (item?.additionalSearchLabel && item.additionalSearchLabel.toLowerCase()?.indexOf(term) > -1)\n );\n }\n\n onOpen() {\n if (this.scrollableElementIds?.length) this.toggleScrollableElementScroll('hidden', '5.4px');\n }\n\n onClose(): void {\n if (this.scrollableElementIds?.length) this.toggleScrollableElementScroll('auto', '0px');\n }\n\n writeValue(value: number): void {\n if (!this.control) {\n return;\n }\n\n this.transformValue(value);\n if (value != this.control?.value) {\n this.control.setValue(value);\n }\n }\n\n private prepareDefaultOptionItems(): IRadioButtonOption[] {\n if (this.defaultOptions?.length && (this.userList$.value.length || this.vendorList$.value.length)) {\n return this.userList$.value\n .filter(u => this.defaultOptions.includes(u.value))\n .map(assignee => ({\n value: assignee?.value,\n label: assignee?.label,\n }));\n }\n return [];\n }\n\n private prepareUsersList(users: RestUserModelExtended[], isResident: boolean) {\n this.residentList$.next([]);\n this.userList$.next([]);\n this.vendorList$.next([]);\n\n const preparedUsers = getUserList(users, this.labelAsFullName);\n const residentListRaw = [];\n const userListRaw = [];\n const vendorListRaw = [];\n\n preparedUsers.forEach(user => {\n switch (user.userGroupType) {\n case UserType.Resident:\n if (isResident) residentListRaw.push(user);\n break;\n case UserType.Employee:\n userListRaw.push(user);\n break;\n case UserType.Contractor:\n vendorListRaw.push(user);\n break;\n }\n });\n let combinedList = [...userListRaw, ...vendorListRaw];\n\n if (isResident) {\n this.residentList$.next(residentListRaw.sort((a, b) => a.label.localeCompare(b.label)));\n combinedList = [...this.residentList$.value, ...combinedList];\n }\n\n this.userList$.next(combinedList);\n this.transformValue(this.control?.value);\n }\n\n private transformValue(value: number) {\n if (value < 0) {\n if (value === -1) this.displayValue = this.allLabel;\n if (value === -2) this.displayValue = this.residentOptionItem?.label;\n } else if (this.userData?.id === value && this.showMyOption) {\n this.displayValue = this.myLabel;\n } else {\n this.hasValue = !!value;\n if (this.userList$.value.length || this.vendorList$.value.length) {\n const userName = `${this.enumerationValuePipe.transform(value, this.userList$.value, true)}`;\n const vendorName = `${this.enumerationValuePipe.transform(value, this.vendorList$.value, true)}`;\n this.displayValue = userName || vendorName || '';\n }\n }\n this.cdr.detectChanges();\n }\n\n private initTooltipInfo(): Observable {\n return combineLatest([\n this.control.valueChanges.pipe(filterNullish$()),\n this.userList$.asObservable(),\n this.vendorList$.asObservable(),\n ]).pipe(\n untilDestroyed(this),\n debounceTime(300),\n skipEqual$(),\n map(([id, users, vendors]) => [...users, ...vendors].find(item => item.value === id)?.tooltip)\n );\n }\n\n private toggleScrollableElementScroll(overflowY: string, marginRight: string): void {\n this.scrollableElementIds.forEach(id => {\n const viewport = document.getElementById(id) as HTMLElement;\n if (viewport && (overflowY === 'auto' || viewport.scrollHeight > viewport.clientHeight)) {\n viewport.style.overflowY = overflowY;\n viewport.style.marginRight = marginRight;\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { FadeTextComponent } from '@shared/components/ellipsis-one-row/fade-text.component';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { NgForTrackByKeyDirective } from '@shared/directives/track-by-key.directive';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { DividerModule } from '@ui-components/components/divider/divider.module';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\n\nimport { UserSelectDropdownComponent } from './user-select-dropdown.component';\n\n@NgModule({\n declarations: [UserSelectDropdownComponent],\n exports: [UserSelectDropdownComponent],\n imports: [\n CommonModule,\n NgSelectModule,\n ReactiveFormsModule,\n IconComponent,\n PipesModule,\n InputErrorModule,\n MatProgressSpinnerModule,\n TooltipDirectiveModule,\n FadeTextComponent,\n NgForTrackByKeyDirective,\n DividerModule,\n ],\n})\nexport class UserSelectDropdownModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AutoresizeDirective } from './autoresize.directive';\n\n@NgModule({\n declarations: [AutoresizeDirective],\n imports: [CommonModule],\n exports: [AutoresizeDirective],\n})\nexport class AutoresizeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DragCursorDirective } from '@ui-components/directives/drag-drop/drag-n-drop-cursor.directive';\n\n@NgModule({\n declarations: [DragCursorDirective],\n imports: [CommonModule],\n exports: [DragCursorDirective],\n})\nexport class DragNDropCursorDirectiveModule {}\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\nimport { Directive, Inject, Input, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\n@UntilDestroy()\n@Directive({\n selector: '[appDragCursor]',\n})\nexport class DragCursorDirective extends PuSubscribable implements OnInit {\n @Input() cursor = 'grabbing';\n\n constructor(@Inject(DOCUMENT) private document: Document, private cdkDrag: CdkDrag) {\n super();\n }\n\n public ngOnInit(): void {\n this.cdkDrag.started\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.document.body.style.cursor = this.cursor;\n })\n .untilDestroyed(this);\n\n this.cdkDrag.ended\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.document.body.style.cursor = 'auto';\n })\n .untilDestroyed(this);\n }\n}\n","
\n
Add bid
\n
\n\n
\n \n\n
\n \n \n
\n
\n \n \n
\n \n
\n\n
\n \n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormGroup, UntypedFormControl, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable, filter, first, take } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport {\n addTurnoverBidCategory,\n addTurnoverBidCategorySuccess,\n createTurnoverBid,\n createTurnoverBidSuccess,\n} from '@main-application/turnovers/store/actions/turnover-bids.actions';\nimport { getCompanyList } from '@main-application/turnovers/store/actions/turnovers.actions';\nimport {\n selectTurnoverBidAdding,\n selectTurnoverBidCategories,\n} from '@main-application/turnovers/store/selectors/turnover-bids.selectors';\nimport { selectCompanyList } from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { getBidCategoriesRadioList } from '@shared/functions/get-bid-categories-radio-list.function';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { Upload } from '@shared/interfaces';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { AddUpdateTurnoverBid } from '@shared/interfaces/turnover-bids.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nexport interface AddBidModalResult {\n bid: AddUpdateTurnoverBid;\n}\n\nexport interface AddBidModalData {\n turnoverId: number;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-bid-modal',\n templateUrl: './add-bid-modal.component.html',\n styleUrls: ['./add-bid-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddBidModalComponent extends PuSubscribable implements OnInit {\n inProgress$: Observable;\n formSubmitted = false;\n vendorList: IRadioButtonOption[] = [];\n categoryList: IRadioButtonOption[] = [];\n today = new Date();\n form = new FormGroup({\n file: new UntypedFormControl(null as Upload, [Validators.required]),\n bidAmount: new UntypedFormControl(null, [Validators.required]),\n vendorId: new UntypedFormControl(null, [Validators.required]),\n categoryId: new UntypedFormControl(null, [Validators.required]),\n bidDate: new UntypedFormControl(this.today, [Validators.required]),\n });\n\n constructor(\n private cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: AddBidModalData,\n private store: Store<{}>,\n private modalsService: ModalsService,\n private actions$: Actions,\n private snackbarService: SnackbarService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.inProgress$ = this.store.select(selectTurnoverBidAdding);\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.vendorList = getCompanyRadioList(companyList);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectTurnoverBidCategories)\n .pipe(\n untilDestroyed(this),\n tap(categories => {\n this.categoryList = getBidCategoriesRadioList(categories);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n fileUploaded(item: AttachmentItem) {\n this.form.controls.file.setValue(item?.upload);\n this.cdr.detectChanges();\n }\n\n save() {\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAsTouched();\n this.cdr.detectChanges();\n return;\n }\n const { file, bidAmount, bidDate, vendorId, categoryId } = this.form.value;\n const result = {\n bid: {\n bidAmount,\n bidDate,\n vendorId,\n turnoverId: this.data.turnoverId,\n status: 0,\n draftInvoiceFileUploadId: file.id,\n expenseCategoryId: categoryId,\n },\n };\n\n this.store.dispatch(createTurnoverBid(result));\n\n this.actions$\n .pipe(\n untilDestroyed(this),\n ofType(createTurnoverBidSuccess),\n take(1),\n tap(action => {\n this.dialogRef.close(result);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n close() {\n this.dialogRef.close();\n }\n\n addNewVendor() {\n this.modalsService\n .openNewVendorModal({})\n .afterClosed()\n .pipe(\n tap(company => {\n if (company) {\n this.form.controls.vendorId.setValue(company.id);\n this.store.dispatch(getCompanyList());\n this.cdr.detectChanges();\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n addNewCategory() {\n this.modalsService\n .openPrompt({\n title: 'Add new category',\n fieldName: 'Name',\n })\n .afterClosed()\n .pipe(\n filter(Boolean),\n tap(result => {\n if (result.value) {\n this.actions$\n .pipe(\n untilDestroyed(this),\n ofType(addTurnoverBidCategorySuccess),\n first(),\n tap(({ categoryId }) => {\n this.form.controls.categoryId.setValue(categoryId);\n this.snackbarService.success(`Category ${result.value} added`);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n this.store.dispatch(addTurnoverBidCategory({ name: result.value }));\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy } from '@ngneat/until-destroy';\n\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { InputModule } from '@ui-components/controls/input/input.module';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'app-create-board-column-modal',\n templateUrl: './create-board-column-modal.component.html',\n styleUrls: ['./create-board-column-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, ReactiveFormsModule, MatDialogModule, InputModule, MatButtonModule],\n})\nexport class CreateBoardColumnModalComponent {\n form = this.formBuilder.group({\n columnName: [null, [Validators.required]],\n });\n\n formSubmitted = false;\n\n constructor(\n private formBuilder: FormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: { boardName: string; ticketType: TicketType },\n public dialogRef: MatDialogRef\n ) {}\n\n ok() {\n this.formSubmitted = true;\n this.form.markAllAsTouched();\n if (this.form.invalid) return;\n\n this.dialogRef.close(this.form.value);\n }\n\n close() {\n this.dialogRef.close();\n }\n}\n","
\n
\n
Add new column to the board {{ data.boardName }}
\n
\n\n \n
\n \n
\n
\n Note:\n  \n you can edit or delete this column anytime from the Board\n
\n
\n \n
\n \n \n
\n
\n
\n","
\n
\n
\n
\n \n \n {{ ticketStatusLabel }}\n \n\n
\n \n
\n
\n
\n
\n\n \n \n \n Error: {{ ticket.lastSyncIssues }}\n \n \n Data synchronization in progress\n \n \n\n
\n
\n \n
\n
\n \n \n \n
\n \n\n \n 7\"\n [dividerPosition]=\"boardColumns?.length - 3\"\n [label]=\"'Custom Costs & Schedules'\"\n [containerWidthCss]=\"'w-123'\"\n [formControl]=\"boardColumnUId\"\n [allowClear]=\"false\"\n [attrPlaceholder]=\"'Select Cost or Schedule'\"\n [labelRequired]=\"true\"\n [listLoading]=\"newColumnLoading$ | async\">\n \n\n \n \n
\n \n Sync with {{ this.pmsType | pmsTypeEnumeration | async }}\n \n
\n \n
\n 7\"\n [attrPlaceholder]=\"'Topic Category'\"\n [labelRequired]=\"true\"\n [showValidationError]=\"formSubmitted\">\n 7\"\n [attrPlaceholder]=\"'Topic'\"\n [labelRequired]=\"true\"\n [attrDisable]=\"!topics.length || !servicePackageEnabled\"\n [showValidationError]=\"formSubmitted\">\n
\n
\n
\n \n
\n \n
\n
\n 7\"\n [attrDisable]=\"!!ticket?.sparePartId && !!ticket?.id ? true : false\"\n [attrPlaceholder]=\"'select replacement'\"\n [label]=\"'Replacement part'\"\n attrAppendTo=\"body\">\n
\n \n \n
\n
\n
\n \n \n
\n \n \n \n
\n \n
\n \n
\n \n
\n Paid\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n\n \n \n Cancel\n \n
\n \n \n \n \n \n \n
\n {{ data.isNew ? 'Create' : 'Save changes' }}\n \n
\n \n
\n
\n
\n\n\n 45 - (this.data.ticketType !== 5 ? ticketStatusLabel?.length : 1)\n }\"\n [matTooltip]=\"\n this.getHeader().length > 45 - (this.data.ticketType !== 5 ? ticketStatusLabel?.length : 1)\n ? this.getHeader()\n : ''\n \">\n {{ this.getHeader() }}\n \n\n\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n FormGroupDirective,\n UntypedFormBuilder,\n UntypedFormControl,\n UntypedFormGroup,\n Validators,\n} from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { sortBy } from 'lodash';\nimport { BehaviorSubject, Observable, combineLatest, of, shareReplay } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, take, tap } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { PackageService } from '@app/services/package.service';\nimport { PmsService } from '@app/services/pms.service';\nimport { SparePartsService } from '@app/services/spare-parts.service';\nimport { TenantService } from '@app/services/tenant.service';\nimport { TicketsService } from '@app/services/tickets.service';\nimport { TurnoversService } from '@app/services/turnovers.service';\nimport { loadUnit } from '@dashboards/store/actions/dashboard.actions';\nimport { selectUnit } from '@dashboards/store/selectors/dashboards.selectors';\nimport { loadPropertyUsers } from '@main-application/administration/store/actions/administration.actions';\nimport {\n selectPropertyUsers,\n selectPropertyUsersLoading,\n} from '@main-application/administration/store/selectors/administration.selectors';\nimport { Board, BoardColumn, ColumnOptions, RestBoardModel } from '@main-application/boards/interfaces/board';\nimport { BoardService } from '@main-application/boards/services/board.service';\nimport { TurnStepScheduleService } from '@main-application/boards/services/turn-step-schedule.service';\nimport {\n addInspectionTicket,\n addInspectionTicketFailed,\n addInspectionTicketSuccess,\n updateInspectionTicketFailed,\n updateInspectionTicketSuccess,\n} from '@main-application/inspections/store/inspections.actions';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { selectTicketStatusTypeEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { TurnoverForm } from '@main-application/turnovers/config/enums/turnover-form';\nimport {\n addNewTurnoverTicket,\n addNewTurnoverTicketFailed,\n addNewTurnoverTicketSuccess,\n clearAddedTicketAttachment,\n clearTicketPreview,\n getTicket,\n getTicketAttachments,\n updateTicketPreview,\n updateTicketPreviewFailed,\n updateTicketPreviewSuccess,\n} from '@main-application/turnovers/store/actions/turnovers.actions';\nimport {\n selectAddedTicketAttachment,\n selectTicket,\n selectTurnoverData,\n} from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { IOption } from '@shared/components/button/button-menu/button-menu.component';\nimport { PackageType } from '@shared/enums/package-type';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { enumToSourceFiltered } from '@shared/functions/enum-to-source-filtered.function';\nimport { getDateObjectFunction } from '@shared/functions/get-date-object.function';\nimport { FileUploadModel } from '@shared/interfaces';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { EnumerationItem } from '@shared/interfaces/enumeration-item';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { RestAddInspectionTicket, RestUpdateInspectionTicket } from '@shared/interfaces/ticket.interface';\nimport { TicketPreviewForm } from '@shared/interfaces/turnover-form.interface';\nimport {\n AppointmentTypeEnum,\n PaymentStatus,\n RestTicketModel,\n RestTurnoverDataModel,\n RestTypedTicketAttachment,\n TotalCostStatus,\n} from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { skipEqual$ } from '@shared/utils/rxjs/skip-equal.rxjs.util';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { CreateBoardColumnModalComponent } from '@ui-components/modals/create-board-column-modal/create-board-column-modal.component';\n\nimport { BoardColumnType } from './../../../main-application/boards/interfaces/board.enums';\nimport { DialogResult } from '../config/dialog-result.enum';\n\nexport interface TicketData {\n ticketId: number;\n isNew?: boolean;\n turnoverId?: number;\n assigneeId?: number;\n propertyName: string;\n propertyId: number;\n unitId: number;\n unitName: string;\n description?: string;\n title?: string;\n attachments?: FileUploadModel[];\n inspectionId?: number;\n inspectionContentId?: number;\n surveyPageId?: number;\n}\n\ninterface TopicOption {\n value: number;\n label: string;\n}\n\ninterface CategoryOption {\n value: number;\n label: string;\n topics: TopicOption[];\n}\n\nexport enum ResponsiblePartyType {\n Landlord = 0,\n Resident = 1,\n Unknown = 2,\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-ticket-modal',\n templateUrl: './add-ticket-modal.component.html',\n styleUrls: ['./add-ticket-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AddTicketModalComponent extends ComponentAbstract implements OnInit, OnDestroy {\n customBoardOption = {\n value: -1,\n label: 'Not connected',\n };\n form: UntypedFormGroup = this.formBuilder.group({\n [TurnoverForm.ID]: [0],\n [TurnoverForm.NAME]: [null, [Validators.required, Validators.maxLength(255)]],\n [TurnoverForm.DETAILED_INFORMATION]: [null, [Validators.maxLength(1000)]],\n [TurnoverForm.ASSIGNEE_ID]: [null],\n [TurnoverForm.END]: [null, [Validators.required]],\n [TurnoverForm.TICKET_PRIORITY_TYPE]: [null, [Validators.required]],\n [TurnoverForm.TICKET_STATUS_TYPE]: [TicketStatusType.Todo],\n [TurnoverForm.ABLE_TO_RESOLVE]: [false],\n [TurnoverForm.BOARD_LAYOUTS_ID]: [this.customBoardOption.value],\n [TurnoverForm.BOARD_COLUMN_UID]: [null, [Validators.required]],\n pushToPMS: false,\n ticketCategoryId: null,\n ticketTopicId: null,\n appointmentType: 'null',\n havePets: [false],\n accessNotes: [null, [Validators.maxLength(1000)]],\n problemDescription: [null, [Validators.maxLength(1000)]],\n technicalNotes: [null, [Validators.maxLength(1000)]],\n resolutionComment: [null, [Validators.maxLength(1000)]],\n timeSpentLoggedManuallyInput: null,\n totalCostFormatted: [''],\n totalCostStatus: [TotalCostStatus.Final],\n paymentStatusBool: [false],\n responsibleParty: [null],\n sparePartId: [null],\n sparePartTitle: [null],\n quantity: [null],\n });\n\n appointmentTypeOptions: IRadioButtonOption[] = [\n { value: 'null', label: 'Unknown' },\n { value: AppointmentTypeEnum.NotRequired, label: 'Not Required' },\n { value: AppointmentTypeEnum.Call, label: 'Call' },\n { value: AppointmentTypeEnum.PermissionGiven, label: 'Permission Given' },\n { value: AppointmentTypeEnum.PermissionNotGiven, label: 'Permission Not Given' },\n ];\n petsOptions: IRadioButtonOption[] = [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n { value: 'null', label: 'Unknown' },\n ];\n isPunchTicket = false;\n isInspectionTicket = false;\n isCostTicket = false;\n costStatus = [\n { value: TotalCostStatus.Estimate, label: 'Estimate' },\n { value: TotalCostStatus.Final, label: 'Final' },\n ];\n responsiblePartyType = [\n { value: ResponsiblePartyType.Landlord, label: 'Landlord' },\n { value: ResponsiblePartyType.Resident, label: 'Resident' },\n { value: ResponsiblePartyType.Unknown, label: 'Unknown' },\n ];\n updateInProgress$ = new BehaviorSubject(false);\n propertyUserListLoading$: Observable;\n users: RestUserModel[] = [];\n attachmentItems: RestGenericTypedAttachment[] = [];\n cleanInputAttachment: EventEmitter = new EventEmitter();\n ticket: RestTicketModel = null;\n newAttachmentItem: AttachmentItem = null;\n formSubmitted = false;\n pmsType = 0;\n categories: CategoryOption[] = [];\n topics: TopicOption[] = [];\n isPushToPMSDisabled = false;\n isLoading = true;\n ticketStatusTypeValues = TicketStatusType;\n ticketStatusOptions$ = new BehaviorSubject[]>(null);\n ticketStatusLabel!: string;\n statusType!: TicketStatusType;\n selectedStatus = {\n label: 'done',\n id: TicketStatusType.Resolved,\n };\n\n turnoverData!: RestTurnoverDataModel;\n board: Board;\n boardList: RestBoardModel[] = [];\n boardList$ = new BehaviorSubject[] | null>(null);\n boardColumns$ = new BehaviorSubject[] | null>(null);\n newColumnLoading$ = new BehaviorSubject(false);\n formInitialized = false;\n isAssociated = false;\n isEarlyAssociation = false;\n servicePackageEnabled = true;\n spareItems$: Observable[]> = this.sparePartsService.getItemList().pipe(\n map(items => {\n return sortBy(\n Array.from(items.filter(i => i.title && i.title.trim() !== '-').values()).map(i => ({\n value: i.id,\n label: `${i.title} (${i.cost}$)`,\n })),\n i => i.label\n );\n })\n );\n\n public tenantData$: Observable;\n\n @ViewChild(FormGroupDirective) formGroupDirective: FormGroupDirective;\n @ViewChild('attachments', { read: ElementRef, static: false }) attachments: ElementRef;\n ticketStatusTypeEnumeration: EnumerationItem[];\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA)\n public data: TicketData & { ticketType: TicketType; inspectionPmsType: number; fromServicePage?: boolean },\n private formBuilder: UntypedFormBuilder,\n private store: Store<{}>,\n private timezoneService: TimezoneService,\n private actions$: Actions,\n private ticketService: TicketsService,\n private boardService: BoardService,\n private turnoversService: TurnoversService,\n private dialog: MatDialog,\n private pmsService: PmsService,\n private turnStepScheduleService: TurnStepScheduleService,\n private sparePartsService: SparePartsService,\n private tenantService: TenantService,\n private packageService: PackageService,\n protected snackbarService: SnackbarService\n ) {\n super(cdr);\n }\n\n get name(): UntypedFormControl {\n return this.form.get(TurnoverForm.NAME) as UntypedFormControl;\n }\n\n get detailedInformation(): UntypedFormControl {\n return this.form.get(TurnoverForm.DETAILED_INFORMATION) as UntypedFormControl;\n }\n\n get assigneeId(): UntypedFormControl {\n return this.form.get(TurnoverForm.ASSIGNEE_ID) as UntypedFormControl;\n }\n\n get end(): UntypedFormControl {\n return this.form.get(TurnoverForm.END) as UntypedFormControl;\n }\n\n get ticketPriorityType(): UntypedFormControl {\n return this.form.get(TurnoverForm.TICKET_PRIORITY_TYPE) as UntypedFormControl;\n }\n\n get ticketStatusType(): UntypedFormControl {\n return this.form.get(TurnoverForm.TICKET_STATUS_TYPE) as UntypedFormControl;\n }\n\n get ableToResolve(): UntypedFormControl {\n return this.form?.get(TurnoverForm.ABLE_TO_RESOLVE) as UntypedFormControl;\n }\n\n get ticketCategoryId(): UntypedFormControl {\n return this.form.get('ticketCategoryId') as UntypedFormControl;\n }\n\n get ticketTopicId(): UntypedFormControl {\n return this.form.get('ticketTopicId') as UntypedFormControl;\n }\n\n get appointmentType(): UntypedFormControl {\n return this.form.get('appointmentType') as UntypedFormControl;\n }\n\n get havePets(): UntypedFormControl {\n return this.form.get('havePets') as UntypedFormControl;\n }\n\n get accessNotes(): UntypedFormControl {\n return this.form.get('accessNotes') as UntypedFormControl;\n }\n\n get problemDescription(): UntypedFormControl {\n return this.form.get('problemDescription') as UntypedFormControl;\n }\n\n get technicalNotes(): UntypedFormControl {\n return this.form.get('technicalNotes') as UntypedFormControl;\n }\n\n get resolutionComment(): UntypedFormControl {\n return this.form.get('resolutionComment') as UntypedFormControl;\n }\n\n get boardLayoutsId(): UntypedFormControl {\n return this.form.get(TurnoverForm.BOARD_LAYOUTS_ID) as UntypedFormControl;\n }\n\n get boardColumnUId(): UntypedFormControl {\n return this.form.get(TurnoverForm.BOARD_COLUMN_UID) as UntypedFormControl;\n }\n\n get timeSpentLoggedManuallyInput(): UntypedFormControl {\n return this.form.get('timeSpentLoggedManuallyInput') as UntypedFormControl;\n }\n\n get totalCostFormatted(): UntypedFormControl {\n return this.form.get('totalCostFormatted') as UntypedFormControl;\n }\n\n get totalCostStatus(): UntypedFormControl {\n return this.form.get('totalCostStatus') as UntypedFormControl;\n }\n\n get paymentStatusBool(): UntypedFormControl {\n return this.form.get('paymentStatusBool') as UntypedFormControl;\n }\n\n get sparePartId(): UntypedFormControl {\n return this.form.get('sparePartId') as UntypedFormControl;\n }\n\n get quantity(): UntypedFormControl {\n return this.form.get('quantity') as UntypedFormControl;\n }\n\n get responsibleParty(): UntypedFormControl {\n return this.form.get('responsibleParty') as UntypedFormControl;\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.store.dispatch(clearTicketPreview());\n }\n\n ngOnInit(): void {\n this.isPunchTicket = this.data.ticketType === TicketType.Punch;\n this.isCostTicket = this.data.ticketType === TicketType.Cost;\n this.isInspectionTicket = this.data.ticketType === TicketType.Inspection;\n\n this.store\n .select(selectTicketStatusTypeEnumeration)\n .pipe(\n filter(x => !!x),\n map(ticketStatusTypeEnumeration => {\n this.ticketStatusTypeEnumeration = ticketStatusTypeEnumeration;\n\n this.selectedStatus = enumToSourceFiltered(TicketStatusType, ticketStatusTypeEnumeration)\n .map(item => ({ ...item, id: item.value }))\n .find(el => el.id === TicketStatusType.Resolved);\n }),\n take(1)\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.initTenantData();\n\n if (this.data.ticketId) {\n this.store.dispatch(getTicket({ ticketId: this.data?.ticketId }));\n }\n\n this.store.dispatch(loadPropertyUsers({ propertyId: this.data?.propertyId }));\n this.propertyUserListLoading$ = this.store.select(selectPropertyUsersLoading);\n\n this.store\n .select(selectPropertyUsers)\n .pipe(\n untilDestroyed(this),\n filter(users => !!users),\n tap(users => {\n this.users = users;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n combineLatest([\n this.store.select(selectUserData),\n this.store.select(selectTicket),\n this.data?.turnoverId ? this.turnoversService.getTurnover(this.data.turnoverId) : of(null),\n ])\n .pipe(\n untilDestroyed(this),\n filter(([userData, ticket]) => !!userData && (this.data.isNew || !!ticket)),\n tap(([userData, ticket, turnoverData]) => {\n if (ticket?.ticketType) {\n this.isPunchTicket = ticket.ticketType === TicketType.Punch;\n this.isCostTicket = ticket.ticketType === TicketType.Cost;\n this.data.ticketType = ticket.ticketType;\n this.cdr.detectChanges();\n }\n\n this.userData = userData;\n this.ticket = ticket;\n this.isAssociated = !!this.ticket?.boardLayoutsId;\n this.turnoverData = turnoverData;\n this.onGetFilteredBoardList(this.ticket?.boardLayoutsId);\n if (this.data.ticketId) this.setStatusTypes();\n }),\n switchMap(([_, ticket]) => {\n if (ticket?.unitId || this.data?.unitId) {\n const unitId = ticket?.unitId || this.data?.unitId;\n this.store.dispatch(loadUnit({ unitId }));\n return combineLatest([this.store.select(selectUnit)]).pipe(\n skipEqual$(),\n filter(([unit]) => !!unit),\n tap(([unit]) => {\n this.pmsType = unit.pmsType;\n // in some cases works multiple times, need to be fixed later, this may cause error\n this.initForm();\n this.cdr.detectChanges();\n })\n );\n } else {\n this.initForm();\n this.cdr.detectChanges();\n return [];\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n if (this.data.ticketType === TicketType.Inspection) {\n this.pmsType = this.data.inspectionPmsType;\n }\n\n if (this.data.ticketType !== TicketType.Inspection) {\n combineLatest([this.store.select(selectTurnoverData)])\n .pipe(\n filter(([turnoverData]) => !!turnoverData),\n untilDestroyed(this),\n tap(([turnoverData]) => {\n this.pmsType = turnoverData.unit.pmsType;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n this.store\n .select(selectAddedTicketAttachment)\n .pipe(\n untilDestroyed(this),\n filter((addedTicketAttachment: RestTypedTicketAttachment) => !!addedTicketAttachment),\n tap((addedTicketAttachment: RestTypedTicketAttachment) => {\n this.cleanInputAttachment.emit();\n this.store.dispatch(clearAddedTicketAttachment());\n if (this.ticket?.id) {\n this.store.dispatch(getTicketAttachments({ ticketId: this.ticket.id }));\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.actions$\n .pipe(\n ofType(\n addNewTurnoverTicketSuccess,\n addInspectionTicketSuccess,\n updateInspectionTicketSuccess,\n updateTicketPreviewSuccess\n ),\n untilDestroyed(this),\n tap(data => {\n if (\n this.isEarlyAssociation &&\n this.data?.ticketId &&\n !this.ticket?.turnStepScheduleId &&\n this.form.get(TurnoverForm.BOARD_LAYOUTS_ID)?.value &&\n this.form.get(TurnoverForm.BOARD_COLUMN_UID)?.value &&\n this.turnoverData?.id\n ) {\n this.onAttachTicket(\n this.data.ticketId,\n this.form.get(TurnoverForm.BOARD_LAYOUTS_ID).value,\n this.form.get(TurnoverForm.BOARD_COLUMN_UID).value,\n this.turnoverData.id\n );\n }\n this.updateInProgress$.next(false);\n this.dialogRef.close();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.actions$\n .pipe(\n ofType(\n addNewTurnoverTicketFailed,\n addInspectionTicketFailed,\n updateInspectionTicketFailed,\n updateTicketPreviewFailed\n ),\n untilDestroyed(this),\n tap(data => this.updateInProgress$.next(false))\n )\n .subscribe()\n .untilDestroyed(this);\n\n if (this.data.ticketType !== TicketType.Inspection) {\n this.actions$\n .pipe(untilDestroyed(this), ofType(addNewTurnoverTicketSuccess), take(1))\n .subscribe(() => {\n this.dialogRef.close(DialogResult.Success);\n })\n .untilDestroyed(this);\n }\n\n if (this.data.isNew && !this.isInspectionTicket) {\n this.boardList$\n .pipe(\n filter(boardList => boardList !== null && boardList.length > 0),\n take(2),\n tap(boardList => {\n if (boardList?.[1]?.value) this.form.get(TurnoverForm.BOARD_LAYOUTS_ID).setValue(boardList[1].value);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n this.boardColumnUId.valueChanges\n .pipe(\n untilDestroyed(this),\n tap((selectedColumnId: string) => {\n const selectedColumn = this.board?.columns?.find(column => column.id === selectedColumnId);\n\n if (selectedColumn) {\n this.isCostTicket = selectedColumn.type === BoardColumnType.CustomAmount;\n } else {\n this.isCostTicket = false;\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.checkForServicePackageEnable();\n }\n\n deleteTicketAttachment(attachment: RestGenericTypedAttachment) {\n this.attachmentItems.splice(this.attachmentItems.indexOf(attachment), 1);\n this.cdr.detectChanges();\n }\n\n isSyncWithPmsEnabled = (pmsType: number) => this.pmsService.isSyncWithPmsEnabled(pmsType).pipe(untilDestroyed(this));\n\n addTicketAttachment(attachmentItem: AttachmentItem) {\n if (this.attachments) {\n setTimeout(() => {\n this.attachments.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }, 250);\n }\n if (attachmentItem.upload) {\n const { id, originalFileName, size, cloudUri } = attachmentItem.upload;\n this.attachmentItems = [\n ...this.attachmentItems,\n {\n id: -1,\n fileUploadId: id,\n size,\n originalFileName,\n url: cloudUri,\n },\n ];\n }\n\n this.cdr.detectChanges();\n }\n\n private fetchCategories(): Observable {\n return this.ticketService.getCashedCategories().pipe(\n untilDestroyed(this),\n tap(data => {\n this.categories = data.map((category: any) => ({\n value: category.id,\n label: category.name,\n topics: category.topics.map((topic: any) => ({\n value: topic.id,\n label: topic.name,\n })),\n }));\n }),\n map(() => void 0)\n );\n }\n\n private getCategoryByTopicId(topicId: number): number | null {\n for (const category of this.categories) {\n for (const topic of category.topics) {\n if (topic.value === topicId) {\n return category.value;\n }\n }\n }\n return null;\n }\n\n private clearNewTicketAttachment() {\n this.cleanInputAttachment.emit();\n this.newAttachmentItem = null;\n this.cdr.detectChanges();\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n onSubmit() {\n if (this.formGroupDirective) {\n this.formGroupDirective.onSubmit(new Event('submit'));\n }\n }\n\n onSave(statusType: TicketStatusType): void {\n this.statusType = statusType;\n this.onSubmit();\n }\n\n save(): void {\n if (!this.ticketService.checkPermissionToEdit(this.userData, this.ticket, true)) {\n return;\n }\n\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n this.updateInProgress$.next(true);\n const formValue: TicketPreviewForm = this.form.value;\n if (typeof formValue.appointmentType !== 'number') formValue.appointmentType = undefined;\n\n const turnoverTicket: RestTicketModel = {\n ...this.ticket,\n id: this.data.isNew ? null : this.ticket.id,\n unitId: this.data.isNew ? this.data.unitId : this.ticket.unitId,\n endDate: formValue[TurnoverForm.END],\n detailedInformation: formValue[TurnoverForm.DETAILED_INFORMATION],\n assigneeId: formValue[TurnoverForm.ASSIGNEE_ID],\n ticketPriorityType: formValue[TurnoverForm.TICKET_PRIORITY_TYPE],\n turnoverId: this.data.isNew ? this.data.turnoverId : this.ticket.turnoverId,\n pushToPMS: formValue.pushToPMS,\n ticketTopicId: formValue.ticketTopicId,\n accessNotes: formValue.accessNotes,\n problemDescription: formValue.problemDescription,\n technicalNotes: formValue.technicalNotes,\n resolutionComment: formValue.resolutionComment,\n appointmentType: formValue.appointmentType,\n timeSpentLoggedManually: formValue.timeSpentLoggedManuallyInput\n ? this.ticketService.convertToSeconds(formValue.timeSpentLoggedManuallyInput)\n : null,\n totalCost: this.ticketService.parseCurrency(formValue.totalCostFormatted),\n totalCostStatus: formValue.totalCostStatus,\n paymentStatus: formValue.paymentStatusBool === true ? PaymentStatus.Paid : PaymentStatus.Unpaid,\n attachFileIds: this.attachmentItems.filter(a => this.needToAddAttachment(a)).map(a => a.fileUploadId),\n removeFileIds: this.ticket?.allAttachments.filter(a => this.needToRemoveAttachment(a)).map(a => a.fileUploadId),\n sparePartId: formValue?.sparePartId,\n quantity: Number(formValue.quantity),\n responsibleParty: formValue.responsibleParty,\n };\n\n if (this.isCostTicket) {\n turnoverTicket.ticketType = TicketType.Cost;\n }\n\n if (\n formValue[TurnoverForm.BOARD_LAYOUTS_ID] === this.customBoardOption.value ||\n !formValue[TurnoverForm.BOARD_LAYOUTS_ID]\n ) {\n turnoverTicket.name = formValue[TurnoverForm.NAME];\n } else {\n turnoverTicket.boardLayoutsId = this.form.get(TurnoverForm.BOARD_LAYOUTS_ID).value;\n turnoverTicket.boardColumnUID = this.form.get(TurnoverForm.BOARD_COLUMN_UID).value;\n }\n\n if (this.data.ticketType !== TicketType.Other) {\n turnoverTicket.ticketType = this.data.ticketType;\n }\n\n if (this.statusType !== undefined && this.statusType !== turnoverTicket.ticketStatusType) {\n turnoverTicket.ticketStatusType = this.onGetTicketStatusType(this.statusType);\n\n if (this.statusType === this.ticketStatusTypeValues.Resolved)\n turnoverTicket.dateCompleted = this.timezoneService.getCurrentDate();\n\n this.ticketStatusChange.emit(this.statusType);\n }\n\n if (formValue.pushToPMS) {\n turnoverTicket.ticketCategoryId = formValue.ticketCategoryId;\n turnoverTicket.ticketTopicId = formValue.ticketTopicId;\n }\n\n if (typeof formValue.appointmentType !== 'number') turnoverTicket.permissionToEnter = null;\n\n if (this.data.isNew) {\n const ticket: RestAddInspectionTicket = {\n unitId: this.data.isNew ? this.data.unitId : this.ticket.unitId,\n dueDate: formValue[TurnoverForm.END],\n description: formValue[TurnoverForm.DETAILED_INFORMATION],\n assignee: formValue[TurnoverForm.ASSIGNEE_ID],\n ticketPriorityType: formValue[TurnoverForm.TICKET_PRIORITY_TYPE],\n turnoverId: this.data.isNew ? this.data.turnoverId : this.ticket.turnoverId,\n inspectionContentId: this.data.isNew ? this.data.inspectionContentId : this.ticket.inspectionContentId,\n inspectionId: this.data.isNew ? this.data.inspectionId : this.ticket.inspectionId,\n copyFileIds: this.attachmentItems.filter(a => this.needToCopyAttachment(a)).map(a => a.fileUploadId),\n attachFileIds: this.attachmentItems.filter(a => !this.needToCopyAttachment(a)).map(a => a.fileUploadId),\n surveyPageId: this.data.surveyPageId,\n pushToPMS: formValue.pushToPMS,\n ticketTopicId: formValue.pushToPMS ? formValue.ticketTopicId : null,\n accessNotes: formValue.accessNotes,\n problemDescription: formValue.problemDescription,\n technicalNotes: formValue.technicalNotes,\n resolutionComment: formValue.resolutionComment,\n appointmentType: formValue.appointmentType,\n havePets: typeof formValue.havePets !== 'string' ? formValue.havePets : null,\n timeSpentLoggedManually: formValue.timeSpentLoggedManuallyInput\n ? this.ticketService.convertToSeconds(formValue.timeSpentLoggedManuallyInput)\n : null,\n totalCost: this.ticketService.parseCurrency(formValue.totalCostFormatted),\n totalCostStatus: formValue.totalCostStatus,\n paymentStatus: formValue.paymentStatusBool === true ? PaymentStatus.Paid : PaymentStatus.Unpaid,\n sparePartId: formValue?.sparePartId,\n quantity: Number(formValue.quantity),\n responsibleParty: formValue.responsibleParty,\n };\n if (\n formValue[TurnoverForm.BOARD_LAYOUTS_ID] === this.customBoardOption.value ||\n !formValue[TurnoverForm.BOARD_LAYOUTS_ID]\n ) {\n ticket.title = formValue[TurnoverForm.NAME];\n } else {\n ticket.boardLayoutsId = this.form.get(TurnoverForm.BOARD_LAYOUTS_ID).value;\n ticket.boardColumnUID = this.form.get(TurnoverForm.BOARD_COLUMN_UID).value;\n }\n\n if (this.data.ticketType === TicketType.Inspection) {\n this.store.dispatch(addInspectionTicket({ ticket }));\n } else {\n this.store.dispatch(addNewTurnoverTicket({ turnoverTicket }));\n }\n } else {\n const ticket: RestUpdateInspectionTicket = {\n id: formValue[TurnoverForm.ID],\n dueDate: formValue[TurnoverForm.END],\n description: formValue[TurnoverForm.DETAILED_INFORMATION],\n assignee: formValue[TurnoverForm.ASSIGNEE_ID],\n ticketPriorityType: formValue[TurnoverForm.TICKET_PRIORITY_TYPE],\n attachFileIds: this.attachmentItems.filter(a => this.needToAddAttachment(a)).map(a => a.fileUploadId),\n removeFileIds: this.ticket?.allAttachments.filter(a => this.needToRemoveAttachment(a)).map(a => a.fileUploadId),\n pushToPMS: formValue.pushToPMS,\n ticketTopicId: formValue.ticketTopicId,\n accessNotes: formValue.accessNotes,\n problemDescription: formValue.problemDescription,\n technicalNotes: formValue.technicalNotes,\n resolutionComment: formValue.resolutionComment,\n appointmentType: formValue.appointmentType,\n havePets: typeof formValue.havePets !== 'string' ? formValue.havePets : null,\n timeSpentLoggedManually: formValue.timeSpentLoggedManuallyInput\n ? this.ticketService.convertToSeconds(formValue.timeSpentLoggedManuallyInput)\n : null,\n totalCost: this.ticketService.parseCurrency(formValue.totalCostFormatted),\n totalCostStatus: formValue.totalCostStatus,\n paymentStatus: formValue.paymentStatusBool === true ? PaymentStatus.Paid : PaymentStatus.Unpaid,\n sparePartId: formValue?.sparePartId,\n quantity: Number(formValue.quantity),\n responsibleParty: formValue.responsibleParty,\n };\n if (this.ticket?.pmsWorkOrderId) ticket.pmsWorkOrderId = this.ticket?.pmsWorkOrderId;\n if (this.ticket?.pmsWorkOrderNumber) ticket.pmsWorkOrderNumber = this.ticket?.pmsWorkOrderNumber;\n\n if (formValue[TurnoverForm.BOARD_LAYOUTS_ID] === this.customBoardOption.value) {\n ticket.title = formValue[TurnoverForm.NAME];\n } else {\n ticket.boardLayoutsId = this.form.get(TurnoverForm.BOARD_LAYOUTS_ID).value;\n ticket.boardColumnUID = this.form.get(TurnoverForm.BOARD_COLUMN_UID).value;\n }\n\n if (this.isCostTicket) {\n turnoverTicket.ticketType = TicketType.Cost;\n if (!turnoverTicket.totalCost) {\n turnoverTicket.totalCost = 0;\n }\n }\n\n if (this.data.fromServicePage) {\n this.store.dispatch(updateTicketPreview({ turnoverTicket }));\n return;\n }\n\n const selectedColumnId = this.form.get(TurnoverForm.BOARD_COLUMN_UID).value;\n if (selectedColumnId) {\n const selectedColumn = this.board.columns.find(column => column.id === selectedColumnId);\n if (!this.data.isNew && !this.isAssociated && selectedColumn.type === BoardColumnType.Simple) {\n this.turnStepScheduleService\n .associateTicket({\n boardLayoutId: (ticket.boardLayoutsId = this.form.get(TurnoverForm.BOARD_LAYOUTS_ID).value),\n columnId: (ticket.boardColumnUID = this.form.get(TurnoverForm.BOARD_COLUMN_UID).value),\n ticketId: this.ticket.id,\n turnoverId: this.ticket.turnoverId,\n })\n .subscribe({\n next: () => {\n this.isEarlyAssociation = true;\n this.store.dispatch(updateTicketPreview({ turnoverTicket }));\n },\n })\n .untilDestroyed(this);\n } else {\n this.store.dispatch(updateTicketPreview({ turnoverTicket }));\n }\n } else {\n this.store.dispatch(updateTicketPreview({ turnoverTicket }));\n }\n }\n }\n\n markAs(statusType: TicketStatusType): void {\n this.selectedStatus = enumToSourceFiltered(TicketStatusType, this.ticketStatusTypeEnumeration)\n .map(item => ({ ...item, id: item.value }))\n .find(el => el.id === statusType);\n\n this.statusType = statusType;\n }\n\n private initForm() {\n if (this.formInitialized) return;\n this.formInitialized = true;\n\n this.fetchCategories()\n .subscribe(() => {\n const categoryId = this.getCategoryByTopicId(this.ticket?.ticketTopicId);\n this.isPushToPMSDisabled = this.ticket?.pushToPMS || false;\n this.form.patchValue({\n [TurnoverForm.ID]: this.ticket?.id || 0,\n [TurnoverForm.NAME]: this.ticket?.name || this.data.title || null,\n [TurnoverForm.DETAILED_INFORMATION]: this.ticket?.detailedInformation || this.data.description || null,\n [TurnoverForm.ASSIGNEE_ID]: this.ticket?.assigneeId || this.data.assigneeId,\n [TurnoverForm.END]: getDateObjectFunction(this.ticket?.endDate || new Date()),\n [TurnoverForm.TICKET_PRIORITY_TYPE]: this.ticket?.ticketPriorityType || PriorityType.Medium,\n [TurnoverForm.TICKET_STATUS_TYPE]: this.ticket?.ticketStatusType || TicketStatusType.InProgress,\n [TurnoverForm.ABLE_TO_RESOLVE]: this.ticketService.checkPermissionToEdit(this.userData, this.ticket),\n [TurnoverForm.BOARD_LAYOUTS_ID]: this.ticket?.boardLayoutsId || this.customBoardOption.value,\n [TurnoverForm.BOARD_COLUMN_UID]: this.ticket?.boardColumnUID || null,\n pushToPMS: this.ticket?.pushToPMS || false,\n ticketCategoryId: categoryId,\n ticketTopicId: this.ticket?.ticketTopicId ? this.ticket?.ticketTopicId : null,\n appointmentType: this.ticket?.appointmentType || 'null',\n havePets:\n this.ticket?.havePets !== undefined && this.ticket?.havePets !== null ? this.ticket?.havePets : 'null',\n accessNotes: this.ticket?.accessNotes || '',\n problemDescription: this.ticket?.problemDescription || '',\n technicalNotes: this.ticket?.technicalNotes || '',\n resolutionComment: this.ticket?.resolutionComment || '',\n timeSpentLoggedManuallyInput: this.ticket?.timeSpentLoggedManually\n ? this.ticketService.convertToTimeSpent(this.ticket.timeSpentLoggedManually)\n : null,\n totalCostFormatted: this.ticket?.totalCost ? this.ticketService.formatCurrency(this.ticket.totalCost) : '',\n totalCostStatus: this.ticket?.totalCostStatus ?? TotalCostStatus.Final,\n paymentStatusBool: this.ticket?.paymentStatus === PaymentStatus.Paid ? true : false,\n responsibleParty: this.ticket?.responsibleParty,\n sparePartId: this.ticket?.sparePartId,\n quantity: this.ticket?.quantity,\n });\n\n this.handleBoardControls();\n this.onBoardLayoutChange();\n this.onBoardScheduleTypeChange();\n\n this.form\n .get('pushToPMS')\n .valueChanges.pipe(untilDestroyed(this))\n .subscribe(isPushToPMS => {\n const categoryControl = this.form.get('ticketCategoryId');\n const topicControl = this.form.get('ticketTopicId');\n\n if (isPushToPMS) {\n categoryControl.setValidators([Validators.required]);\n topicControl.setValidators([Validators.required]);\n } else {\n categoryControl.clearValidators();\n topicControl.clearValidators();\n }\n\n categoryControl.updateValueAndValidity();\n topicControl.updateValueAndValidity();\n })\n .untilDestroyed(this);\n\n this.attachmentItems = [];\n if (this.data.isNew && this.data.attachments?.length) {\n this.attachmentItems.push(\n ...this.data.attachments.map(a => ({\n id: -1,\n fileUploadId: a.id,\n originalFileName: a.originalFileName,\n size: a.size,\n url: a.cloudUri,\n }))\n );\n }\n if (!this.data.isNew && this.ticket?.allAttachments?.length) {\n this.attachmentItems.push(\n ...this.ticket.allAttachments.map(a => ({\n id: a.id,\n fileUploadId: a.fileUploadId,\n originalFileName: a.originalFileName,\n size: a.size,\n url: a.url,\n }))\n );\n }\n\n this.form.controls['ticketCategoryId'].valueChanges\n .pipe(untilDestroyed(this))\n .subscribe(categoryId => {\n const selectedCategory = this.categories.find(category => category.value === categoryId);\n this.topics = selectedCategory ? selectedCategory.topics : [];\n if (this.topics.length > 0) {\n this.form.controls['ticketTopicId'].enable();\n } else {\n this.form.controls['ticketTopicId'].disable();\n this.form.controls['ticketTopicId'].reset();\n }\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n\n if (categoryId) {\n const selectedCategory = this.categories.find(category => category.value === categoryId);\n this.topics = selectedCategory ? selectedCategory.topics : [];\n if (this.topics.length > 0) {\n this.form.controls['ticketTopicId'].enable();\n } else {\n this.form.controls['ticketTopicId'].disable();\n this.form.controls['ticketTopicId'].reset();\n }\n }\n\n this.isLoading = false;\n this.cdr.markForCheck();\n })\n .untilDestroyed(this);\n }\n\n private needToCopyAttachment(attachment: RestGenericTypedAttachment) {\n return this.data?.attachments?.some(a => a.id === attachment.id);\n }\n\n private needToAddAttachment(attachment: RestGenericTypedAttachment) {\n return !this.ticket || !this.ticket.allAttachments?.find(a => a.id === attachment.id);\n }\n\n private needToRemoveAttachment(attachment: RestGenericTypedAttachment) {\n return !this.attachmentItems.find(a => a.id === attachment.id);\n }\n\n private setStatusTypes(): void {\n this.store\n .select(selectTicketStatusTypeEnumeration)\n .pipe(\n map(ticketStatusTypeEnumeration => {\n const statusTypes = enumToSourceFiltered(TicketStatusType, ticketStatusTypeEnumeration).map(item => ({\n label: item.label,\n id: item.value,\n disabled: item.value === this.ticket?.ticketStatusType,\n }));\n\n this.ticketStatusLabel = statusTypes.find(el => el.id === this.ticket?.ticketStatusType)?.label;\n\n this.ticketStatusOptions$.next(statusTypes);\n }),\n take(1)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n @Output() ticketStatusChange = new EventEmitter();\n\n private onGetTicketStatusType(type: TicketStatusType): TicketStatusType {\n if (type === this.ticketStatusTypeValues.Todo) return TicketStatusType.Todo;\n if (type === this.ticketStatusTypeValues.InProgress) return TicketStatusType.InProgress;\n if (type === this.ticketStatusTypeValues.Resolved) return TicketStatusType.Resolved;\n if (type === this.ticketStatusTypeValues.Canceled) {\n this.ticketStatusChange.emit(TicketStatusType.Canceled);\n return TicketStatusType.Canceled;\n }\n if (type === this.ticketStatusTypeValues.Pending) return TicketStatusType.Pending;\n if (type === this.ticketStatusTypeValues.Declined) return TicketStatusType.Declined;\n if (type === this.ticketStatusTypeValues.WaitingParts) return TicketStatusType.WaitingParts;\n\n return TicketStatusType.Reopened;\n }\n\n private handleBoardControls(): void {\n this.form.get([TurnoverForm.BOARD_LAYOUTS_ID]).value === this.customBoardOption.value\n ? this.form.get([TurnoverForm.BOARD_COLUMN_UID]).disable()\n : this.form.get([TurnoverForm.NAME]).disable();\n\n if (this.data.ticketId && this.ticket?.boardColumnUID) {\n this.form.get([TurnoverForm.BOARD_LAYOUTS_ID]).disable();\n this.form.get([TurnoverForm.BOARD_COLUMN_UID]).disable();\n }\n\n this.form.updateValueAndValidity();\n }\n\n private onBoardLayoutChange(): void {\n this.form\n ?.get(TurnoverForm.BOARD_LAYOUTS_ID)\n ?.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe(boardId => {\n if (boardId === this.customBoardOption.value) {\n this.form.get([TurnoverForm.NAME]).enable();\n this.form.get([TurnoverForm.BOARD_COLUMN_UID]).disable();\n } else {\n this.form.get([TurnoverForm.NAME]).disable();\n this.form.get([TurnoverForm.BOARD_COLUMN_UID]).enable();\n this.form.get([TurnoverForm.BOARD_COLUMN_UID]).setValue(null);\n this.onGetFilteredBoardList(boardId);\n }\n this.form.updateValueAndValidity();\n })\n .untilDestroyed(this);\n }\n\n private onBoardScheduleTypeChange(): void {\n this.form\n ?.get(TurnoverForm.BOARD_COLUMN_UID)\n ?.valueChanges.pipe(\n distinctUntilChanged(),\n untilDestroyed(this),\n filter(el => !!el)\n )\n .subscribe(columnId => {\n if (columnId === 'customSchedule') {\n this.form.get(TurnoverForm.BOARD_COLUMN_UID).setValue(null, { emitEvent: false });\n this.onAddNewColumnDialog(\n this.isPunchTicket ? TicketType.Punch : this.isInspectionTicket ? TicketType.Inspection : TicketType.Turn\n );\n return;\n }\n if (columnId === 'customCost') {\n this.form.get(TurnoverForm.BOARD_COLUMN_UID).setValue(null, { emitEvent: false });\n this.onAddNewColumnDialog(TicketType.Cost);\n return;\n }\n this.form.updateValueAndValidity();\n })\n .untilDestroyed(this);\n }\n\n private onGetFilteredBoardList(boardId?: number): void {\n this.boardService\n .getListInternal()\n .pipe(\n filter(list => !!list),\n map(list => {\n this.boardList = list;\n const filteredConnectedBoard =\n this.turnoverData?.boardConnections && this.turnoverData.boardConnections.map(el => el.boardId);\n const connectedBoardIdsSet = new Set(filteredConnectedBoard);\n return list.filter(el => connectedBoardIdsSet.has(el.id));\n }),\n map(list => list.map(el => ({ value: el.id, label: el.name }))),\n map(list => list.sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: 'base' }))),\n map(list => [this.customBoardOption, ...list]),\n tap(list => {\n this.boardList$.next(list);\n if (boardId) this.createColumnsSelector(boardId);\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private createColumnsSelector(boardId: number): void {\n const boardItem = this.boardList.find(el => el.id === boardId);\n if (!boardItem) return;\n\n this.board = new Board(boardItem);\n const turnStepSchedulesBoardIds = this.turnoverData?.turnStepSchedules?.map(el => el.boardColumnUID) || [];\n const costTicketsBoardColumnIds = this.turnoverData?.tickets?.map(el => el.boardColumnUID) || [];\n const turnStepSchedulesBoardIdsSet = new Set(turnStepSchedulesBoardIds);\n const costTicketsBoardColumnIdsSet = new Set(costTicketsBoardColumnIds);\n const boardColumns = this.board?.columns || null;\n const unfrozenColumns = boardColumns?.filter(\n el =>\n (!el.frozen && el.type === BoardColumnType.CustomAmount) || (!el.frozen && el.type === BoardColumnType.Simple)\n );\n const skipStepScheduleCheck = this.ticket?.boardLayoutsId && this.ticket?.boardColumnUID;\n if (!unfrozenColumns) {\n this.boardColumns$.next(null);\n return;\n }\n const mappedBoardColumn = unfrozenColumns\n .map(el => ({\n value: el.id,\n label: el.name,\n }))\n .filter(\n el =>\n skipStepScheduleCheck ||\n (!turnStepSchedulesBoardIdsSet.has(el.value) && !costTicketsBoardColumnIdsSet.has(el.value))\n )\n .sort((a, b) => a.label.localeCompare(b.label, undefined, { sensitivity: 'base' }));\n\n mappedBoardColumn.push(\n {\n value: 'customSchedule',\n label: `Add schedule for ${boardItem.name}`,\n },\n {\n value: 'customCost',\n label: `Add custom cost for ${boardItem.name}`,\n }\n );\n\n this.boardColumns$.next(mappedBoardColumn);\n }\n\n private onAddNewColumnDialog(ticketType: TicketType): void {\n const boardName = this.boardList.find(el => el.id === this.boardLayoutsId.value)?.name;\n this.dialog\n .open(CreateBoardColumnModalComponent, {\n data: { boardName, ticketType },\n maxWidth: '400px',\n })\n .afterClosed()\n .subscribe(formData => {\n if (formData?.columnName) this.addNewColumnToBoard(formData.columnName, ticketType);\n this.isCostTicket = ticketType === TicketType.Cost;\n })\n .untilDestroyed(this);\n }\n\n private addNewColumnToBoard(columnName: string, ticketType: TicketType): void {\n this.newColumnLoading$.next(true);\n const newColumn = this.setColumn(\n ticketType === TicketType.Cost ? BoardColumnType.CustomAmount : BoardColumnType.Simple,\n columnName,\n { name: columnName }\n );\n this.board.columns.push(newColumn);\n this.boardService\n .update(new RestBoardModel(this.board))\n .subscribe(() => this.updateFormColumnField(newColumn.id))\n .untilDestroyed(this);\n }\n\n private setColumn(type: BoardColumnType, columnName: string, columnOptions?: ColumnOptions): BoardColumn {\n return {\n name: columnName,\n type: type,\n editable: columnOptions?.editable ?? true,\n frozen: false,\n visible: true,\n id: uuidv4(),\n };\n }\n\n private initTenantData(): void {\n this.tenantData$ = this.tenantService.getCachedTenant().pipe(shareReplay());\n\n this.tenantData$\n .pipe(\n tap(data => {\n this.appointmentTypeOptions = this.appointmentTypeOptions.filter(\n a => a.value === 'null' || !data.appointmentTypesNotSupported.includes(a.value as AppointmentTypeEnum)\n );\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private updateFormColumnField(newColumnId: string): void {\n this.createColumnsSelector(this.boardLayoutsId?.value);\n this.form.get(TurnoverForm.BOARD_COLUMN_UID).setValue(newColumnId);\n this.newColumnLoading$.next(false);\n }\n\n private onAttachTicket(ticketId: number, boardLayoutId: number, columnId: string, turnoverId: number): void {\n if (this.isCostTicket) {\n return;\n }\n\n if (this.data.isNew) {\n this.turnStepScheduleService\n .associateTicket({\n boardLayoutId,\n columnId,\n ticketId,\n turnoverId,\n })\n .subscribe()\n .untilDestroyed(this);\n }\n }\n\n getHeader(): string {\n return (\n (this.data?.isNew\n ? this.isPunchTicket\n ? 'New punch: '\n : this.isCostTicket\n ? 'New cost: '\n : 'New ticket: '\n : '') +\n (this.isPunchTicket && !this.data.isNew\n ? 'Punch: '\n : this.data.ticketType === 5 && !this.data.isNew\n ? 'Cost: '\n : '') +\n (this.data?.propertyName || '') +\n ' - ' +\n (this.data?.unitName || '')\n );\n }\n\n hasPermissionToChangePms(e: any): void {\n if (!this.servicePackageEnabled) {\n if (!this.isPushToPMSDisabled) this.snackbarService.error('Contact your account manager to enable this feature!');\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n private checkForServicePackageEnable(): void {\n this.packageService\n .checkPackageAvailable(PackageType.Service)\n .subscribe(enabled => {\n this.servicePackageEnabled = enabled;\n })\n .untilDestroyed(this);\n }\n}\n","
\n
\n

\n \n Add vendor and employee\n \n Add vendor\n

\n \n
\n \n \n
\n \n
\n
\n
\n \n \n \n
\n \n
\n \n \n
\n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n\n \n
\n
\n
\n
\n \n Register email as user login\n \n \n
\n
\n
\n
\n \n Register phone number as user login\n \n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n \n\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, filter, map, take, tap } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, takeWhile } from 'rxjs/operators';\n\nimport {\n addCompany,\n addCompanySuccess,\n addCompanyWithOwner,\n addCompanyWithOwnerFailureUserExist,\n addCompanyWithOwnerSuccess,\n} from '@companies/store/companies.actions';\nimport { selectAddCompanyWithOwnerLoading } from '@companies/store/companies.selectors';\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport { VENDOR_ROLE_NAME } from '@main-application/administration/constants/vendor-role-name.constant';\nimport { formatPropertyStructureToTree } from '@main-application/administration/functions/propertyStructureToTree';\nimport {\n inviteNewUser,\n loadAllGeneralRoles,\n} from '@main-application/administration/store/actions/administration.actions';\nimport {\n selectActiveUsers,\n selectAllGeneralRoles,\n selectAllPropertiesStructure,\n} from '@main-application/administration/store/selectors/administration.selectors';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { UserType, VendorEmployeeType } from '@shared/enums/user-type';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { InviteRestUserModel, RestUserModel } from '@shared/interfaces/user.interface';\nimport { PendingService } from '@shared/services/pending.service';\nimport { filterNullish$ } from '@shared/utils/rxjs/filter-nullish.rxjs.util';\nimport { UserExistsValidator } from '@shared/validators/user-exists.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { EmailPatternValidator, correctEmailInput } from '@ui-components/validators/email.validator';\nimport { PhoneNumberValidator } from '@ui-components/validators/phone.validator';\nimport { RequiredOneOfValidator } from '@ui-components/validators/required-one-of.validator';\n\nenum NewVendorFields {\n FirstName = 'firstName',\n LastName = 'lastName',\n Email = 'email',\n Company = 'company',\n PhoneNumber = 'phoneNumber',\n RoleId = 'roleId',\n UserGroupType = 'userGroupType',\n PhoneNumberAddedAsIdentity = 'phoneNumberAddedAsIdentity',\n EmailAddedAsIdentity = 'emailAddedAsIdentity',\n}\n\ninterface NewVendor {\n [NewVendorFields.FirstName]: string;\n [NewVendorFields.LastName]: string;\n [NewVendorFields.Email]: string;\n [NewVendorFields.Company]: string;\n [NewVendorFields.PhoneNumber]: string;\n [NewVendorFields.RoleId]: number;\n}\n\nexport interface AddVendorModalData {\n addOnlyVendor?: boolean;\n onlyAddBtn?: boolean;\n withPortfolioPropertiesSelector?: boolean;\n tenantData?: TenantData;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-vendor-modal',\n templateUrl: './add-vendor-modal.component.html',\n styleUrls: ['./add-vendor-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AddVendorModalComponent extends AdministrationAbstract implements OnInit {\n form: FormGroup = this.initFormGroup();\n vendorRoleId: number;\n inProgress$ = this.store.select(selectAddCompanyWithOwnerLoading);\n formSubmitted = false;\n warningMessage = '';\n arePropertiesChanged = false;\n selectedProperties: PropertyBasicInfo[] = [];\n allProperties$ = this.store.select(selectAllPropertiesStructure).pipe(\n filterNullish$(),\n map(allProperties => formatPropertyStructureToTree(allProperties))\n );\n isLoading = true;\n phoneNumberInvalid = false;\n VendorEmployeeType = VendorEmployeeType;\n vendorEmployeeToggleOptions = [\n {\n value: this.VendorEmployeeType.VendorAndEmployee,\n label: 'Vendor & Employee ',\n permission: PermissionLevelType.Management_Users,\n },\n {\n value: this.VendorEmployeeType.Vendor,\n label: 'Vendor',\n permission: PermissionLevelType.Management_Users,\n },\n ];\n federatedIssuerDomains: string[];\n domainExist$ = new BehaviorSubject(false);\n\n constructor(\n public fb: FormBuilder,\n public dialogRef: MatDialogRef,\n store: Store<{}>,\n private actions$: Actions,\n private snackbarService: SnackbarService,\n @Inject(MAT_DIALOG_DATA) public data: AddVendorModalData,\n cdr: ChangeDetectorRef,\n private pendingService: PendingService\n ) {\n super(cdr, store);\n }\n\n get firstName(): FormControl {\n return this.form.get(NewVendorFields.FirstName) as FormControl;\n }\n\n get lastName(): FormControl {\n return this.form.get(NewVendorFields.LastName) as FormControl;\n }\n\n get email(): FormControl {\n return this.form.get(NewVendorFields.Email) as FormControl;\n }\n\n get company(): FormControl {\n return this.form.get(NewVendorFields.Company) as FormControl;\n }\n\n get phoneNumber(): FormControl {\n return this.form.get(NewVendorFields.PhoneNumber) as FormControl;\n }\n\n get userGroupType(): FormControl {\n return this.form.get(NewVendorFields.UserGroupType) as FormControl;\n }\n\n get phoneNumberAddedAsIdentity(): FormControl {\n return this.form.get(NewVendorFields.PhoneNumberAddedAsIdentity) as FormControl;\n }\n\n get emailAddedAsIdentity(): FormControl {\n return this.form.get(NewVendorFields.EmailAddedAsIdentity) as FormControl;\n }\n\n ngOnInit(): void {\n this.store.dispatch(loadAllGeneralRoles());\n this.onPendingServiceChanges();\n this.onSelectUserData();\n this.initForm();\n this.initActiveUsers();\n this.initVendorRoleId();\n this.initNotifications();\n this.onEmailControlChange();\n this.onControlsAddedAsIdentifyChanges();\n\n this.userGroupType.valueChanges\n .subscribe(d => {\n this.userGroupType.value === this.VendorEmployeeType.VendorAndEmployee\n ? this.addEmployeeControls()\n : this.removeEmployeeControls();\n })\n .untilDestroyed(this);\n }\n\n private onEmailControlChange(): void {\n this.email?.valueChanges\n .pipe(\n distinctUntilChanged(),\n filter(() => !!this.data?.tenantData?.federatedIssuer),\n debounceTime(500)\n )\n .subscribe(value => this.checkForDomain(value))\n .untilDestroyed(this);\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n send(): void {\n this.formSubmitted = true;\n if (\n this.form.invalid ||\n (this.userGroupType.value === this.VendorEmployeeType.VendorAndEmployee &&\n (this.phoneNumberInvalid || (!this.phoneNumber.value && this.phoneNumberAddedAsIdentity.value))) ||\n (!this.email.value && this.emailAddedAsIdentity.value)\n ) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n if (\n this.userGroupType.value === this.VendorEmployeeType.VendorAndEmployee &&\n !this.email.value &&\n !this.phoneNumberAddedAsIdentity.value\n ) {\n this.snackbarService.error('Please check Register Phone number as login or enter an email');\n return;\n }\n\n const value: NewVendor = this.form.value;\n const inviteUser: InviteRestUserModel = createInviteUser(value);\n const companyModel: RestCompanyModel = {\n displayName: value.company,\n id: 0,\n employees: [],\n addresses: [],\n };\n\n if (this.userGroupType.value === this.VendorEmployeeType.Vendor) {\n this.addCompany(companyModel);\n return;\n }\n\n this.addCompanyWithOwner(inviteUser, companyModel);\n }\n\n private initForm(): void {\n if (this.data.tenantData?.federatedIssuer && this.data.tenantData?.federatedIssuerDomains)\n this.federatedIssuerDomains = this.data.tenantData.federatedIssuerDomains.split(',');\n\n const userGroupTypeValue = this.data.addOnlyVendor\n ? this.VendorEmployeeType.Vendor\n : this.VendorEmployeeType.VendorAndEmployee;\n\n this.form.addControl(NewVendorFields.UserGroupType, new FormControl(userGroupTypeValue));\n\n if (this.userGroupType.value === this.VendorEmployeeType.VendorAndEmployee) this.addEmployeeControls();\n }\n\n private initActiveUsers(): void {\n this.store\n .select(selectActiveUsers)\n .pipe(\n untilDestroyed(this),\n filter((allUsers: RestUserModel[]) => !!allUsers)\n )\n .subscribe((allUsers: RestUserModel[]) => {\n const existingEmails = allUsers.map(item => item.email);\n if (this.email) {\n this.email.addValidators([UserExistsValidator(existingEmails)]);\n }\n })\n .untilDestroyed(this);\n }\n\n private initVendorRoleId(): void {\n this.store\n .select(selectAllGeneralRoles)\n .pipe(untilDestroyed(this), filter(Boolean))\n .subscribe(allRoles => (this.vendorRoleId = allRoles.find(e => e.roleName == VENDOR_ROLE_NAME)?.id))\n .untilDestroyed(this);\n }\n\n private addCompany(companyModel: RestCompanyModel): void {\n this.store.dispatch(addCompany({ companyModel }));\n this.actions$\n .pipe(\n ofType(addCompanySuccess),\n take(1),\n tap(action => {\n this.snackbarService.success(`${action.companyModel.displayName} added`);\n this.dialogRef.close(action.companyModel);\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private addCompanyWithOwner(inviteUser: InviteRestUserModel, companyModel: RestCompanyModel): void {\n let selectedProperty: number[] = [];\n selectedProperty = this.selectedProperties.map(item => item.id);\n\n this.store.dispatch(\n addCompanyWithOwner({\n user: inviteUser,\n roleId: this.vendorRoleId,\n companyModel,\n selectedProperty,\n })\n );\n\n this.actions$\n .pipe(\n ofType(addCompanyWithOwnerSuccess),\n take(1),\n tap(action => {\n this.snackbarService.success(`${action.company.displayName} added`);\n this.dialogRef.close(action.company);\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private onInviteUser(inviteUser: InviteRestUserModel): void {\n const selectedProperty =\n this.arePropertiesChanged && this.selectedProperties ? this.selectedProperties.map(item => item.id) : [];\n\n this.store.dispatch(inviteNewUser({ user: inviteUser, roleId: this.vendorRoleId, selectedProperty }));\n }\n\n private initNotifications(): void {\n this.initCompanySuccess();\n this.initUserExistError();\n }\n\n private initFormGroup(): FormGroup {\n return this.fb.group({\n [NewVendorFields.Company]: ['', Validators.required],\n });\n }\n\n private initUserExistError(): void {\n this.actions$\n .pipe(\n ofType(addCompanyWithOwnerFailureUserExist),\n tap(data => {\n data?.phoneNumberAddedAsIdentity && data.phoneNumber\n ? this.snackbarService.error(`User already exists with phone ${data.phoneNumber}`)\n : this.snackbarService.error(`User already exists with email ${data.existedUserEmail}`);\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initCompanySuccess(): void {\n this.actions$\n .pipe(\n ofType(addCompanyWithOwnerSuccess),\n tap(action => {\n this.snackbarService.success(`${action.company.displayName} added`);\n this.dialogRef.close(action.company);\n }),\n untilDestroyed(this)\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n selectedRootsChange(selectedRoots: PropertyBasicInfo[]): void {\n this.arePropertiesChanged = true;\n this.selectedProperties = selectedRoots;\n }\n\n private onSelectUserData(): void {\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private addEmployeeControls(): void {\n this.form.addControl(NewVendorFields.FirstName, new FormControl('', Validators.required));\n this.form.addControl(NewVendorFields.LastName, new FormControl('', Validators.required));\n this.form.addControl(NewVendorFields.Email, new FormControl('', [EmailPatternValidator(true), Validators.email]));\n this.form.addControl(NewVendorFields.PhoneNumber, new FormControl('', [PhoneNumberValidator()]));\n this.form.addControl(NewVendorFields.PhoneNumberAddedAsIdentity, new FormControl(false));\n this.form.addControl(NewVendorFields.EmailAddedAsIdentity, new FormControl(false));\n this.form.setValidators(RequiredOneOfValidator([NewVendorFields.Email, NewVendorFields.PhoneNumber]));\n\n correctEmailInput(this.email);\n this.form.updateValueAndValidity();\n this.cdr.detectChanges();\n }\n\n private removeEmployeeControls(): void {\n this.form.removeControl(NewVendorFields.FirstName);\n this.form.removeControl(NewVendorFields.LastName);\n this.form.removeControl(NewVendorFields.Email);\n this.form.removeControl(NewVendorFields.PhoneNumber);\n this.form.removeControl(NewVendorFields.PhoneNumberAddedAsIdentity);\n this.form.removeControl(NewVendorFields.EmailAddedAsIdentity);\n\n const newValidator = RequiredOneOfValidator([], true);\n this.form.setValidators([newValidator]);\n this.form.updateValueAndValidity();\n this.cdr.detectChanges();\n }\n\n private onPendingServiceChanges(): void {\n this.pendingService.pending$\n .pipe(\n takeWhile(data => data !== false, true),\n delay(300)\n )\n .subscribe(data => {\n if (data === false) {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n })\n .untilDestroyed(this);\n }\n\n onEmailBlur(): void {\n if (!this.domainExist$.getValue() && !this.emailAddedAsIdentity.value) this.emailAddedAsIdentity.setValue(true);\n }\n\n private checkForDomain(value: string): void {\n const domain = value.match(/@(.+)$/)?.[1] || null;\n domain && this.federatedIssuerDomains.includes(domain?.trim())\n ? this.domainExist$.next(true)\n : this.domainExist$.next(false);\n }\n\n private onControlsAddedAsIdentifyChanges(): void {\n this.emailAddedAsIdentity.valueChanges\n .subscribe(val => {\n if (val && this.phoneNumberAddedAsIdentity.value) this.phoneNumberAddedAsIdentity.setValue(false);\n })\n .untilDestroyed(this);\n\n this.phoneNumberAddedAsIdentity.valueChanges\n .subscribe(val => {\n if (val && this.emailAddedAsIdentity.value) this.emailAddedAsIdentity.setValue(false);\n })\n .untilDestroyed(this);\n }\n}\n\nfunction createInviteUser(formData: NewVendor): InviteRestUserModel {\n return {\n email: formData[NewVendorFields.Email],\n firstName: formData[NewVendorFields.FirstName],\n lastName: formData[NewVendorFields.LastName],\n userGroupType: UserType.Contractor,\n displayName: `${formData.firstName} ${formData.lastName}`,\n phoneNumber: formData[NewVendorFields.PhoneNumber],\n phoneNumberAddedAsIdentity: formData[NewVendorFields.PhoneNumberAddedAsIdentity],\n emailAddedAsIdentity: formData[NewVendorFields.EmailAddedAsIdentity],\n };\n}\n","
\n
\n
{{ header }}
\n
\n\n \n
\n
\n
\n \n \n
\n \n\n
\n \n \n
\n\n \n
\n
\n
\n \n \n \n \n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { some } from 'lodash';\nimport { Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\n\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport { VENDOR_ROLE_NAME } from '@main-application/administration/constants/vendor-role-name.constant';\nimport { combineUserWithProperties } from '@main-application/administration/functions/combineUserWithProperties';\nimport { formatPropertyStructureToTree } from '@main-application/administration/functions/propertyStructureToTree';\nimport {\n clearUserPreviewData,\n inviteNewUser,\n loadAllGeneralRoles,\n} from '@main-application/administration/store/actions/administration.actions';\nimport {\n selectAllGeneralRoles,\n selectAllPropertiesStructure,\n selectAllUserToPropertyMappings,\n selectAllUsersWithGeneralRoles,\n selectAssignUserIntoPropertyInProgress,\n selectAssignUserIntoPropertyStatus,\n selectInactiveUsers,\n selectSaveUserToGeneralRoleInProgress,\n selectSaveUserToGeneralRoleStatus,\n selectUserInviteInProgress,\n selectUserInviteStatus,\n selectUserInvited,\n} from '@main-application/administration/store/selectors/administration.selectors';\nimport { UserPreview, UserPreviewFields } from '@main-application/administration/users/config/enums/user-preview';\nimport { selectNativeLanguagesEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { getCompanyList } from '@main-application/turnovers/store/actions/turnovers.actions';\nimport {\n selectCompanyList,\n selectCompanyListLoading,\n} from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UserType } from '@shared/enums/user-type';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { InviteRestUserModel, RestUserModel } from '@shared/interfaces/user.interface';\nimport { UserExistsValidator } from '@shared/validators/user-exists.validator';\nimport { UserInactiveValidator } from '@shared/validators/user-inactive.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { EmailPatternValidator, correctEmailInput } from '@ui-components/validators/email.validator';\n\nexport interface AddVendorUserModalData {\n vendorId?: number;\n header?: string;\n}\n\nexport interface AddVendorUserModalResult {\n invitedUser: RestUserModel;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-add-vendor-user-modal',\n templateUrl: './add-vendor-user-modal.component.html',\n styleUrls: ['./add-vendor-user-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AddVendorUserModalComponent extends AdministrationAbstract implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n selectedProperties: PropertyBasicInfo[] = [];\n propertiesToSelect: PropertyBasicInfo[] = [];\n arePropertiesChanged = false;\n root = [];\n warningMessage = '';\n companyRadioList: IRadioButtonOption[] = [];\n nativeLanguages: IRadioButtonOption[] = [];\n companyListLoading$: Observable;\n userToPropertyMapping: UserToPropertyMapping[];\n vendorRoleId: number;\n header: string;\n saveButtonText: string;\n formSubmitted = false;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected store: Store<{}>,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: AddVendorUserModalData,\n private formBuilder: FormBuilder,\n private snackbarService: SnackbarService\n ) {\n super(cdr, store);\n\n this.header = data.header;\n this.saveButtonText = data.vendorId ? 'Add and Assign' : 'Send invitation';\n }\n\n get firstName(): FormControl {\n return this.form.get(UserPreviewFields.FirstName) as FormControl;\n }\n\n get lastName(): FormControl {\n return this.form.get(UserPreviewFields.LastName) as FormControl;\n }\n\n get email(): FormControl {\n return this.form.get(UserPreviewFields.Email) as FormControl;\n }\n\n get companyId(): FormControl {\n return this.form.get(UserPreviewFields.CompanyId) as FormControl;\n }\n\n get phoneNumber(): FormControl {\n return this.form.get(UserPreviewFields.PhoneNumber) as FormControl;\n }\n\n get nativeLanguage(): FormControl {\n return this.form.get(UserPreviewFields.NativeLanguage) as FormControl;\n }\n\n ngOnInit(): void {\n this.initForm();\n this.store.dispatch(getCompanyList());\n this.store.dispatch(loadAllGeneralRoles());\n this.companyListLoading$ = this.store.select(selectCompanyListLoading);\n\n this.store\n .select(selectAllGeneralRoles)\n .pipe(untilDestroyed(this), filter(Boolean))\n .subscribe(allRoles => (this.vendorRoleId = allRoles.find(e => e.roleName == VENDOR_ROLE_NAME)?.id))\n .untilDestroyed(this);\n\n this.store\n .select(selectNativeLanguagesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(values => {\n this.nativeLanguages = getEnumerationRadioListFunction(values, null, false);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.companyRadioList = getCompanyRadioList(companyList);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n combineLatest([this.store.select(selectAllUsersWithGeneralRoles), this.store.select(selectInactiveUsers)])\n .pipe(\n untilDestroyed(this),\n filter(([allUsers, inactiveUsers]) => !!allUsers && !!inactiveUsers),\n tap(([allUsers, inactiveUsers]: [UserWithGeneralRole[], RestUserModel[]]) => {\n const existingActiveEmails = allUsers.map(item => item.email);\n const existingInactiveEmails = inactiveUsers.map(item => item.email);\n this.email.addValidators(UserExistsValidator(existingActiveEmails));\n this.email.addValidators(UserInactiveValidator(existingInactiveEmails));\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n combineLatest([\n this.store.select(selectAllPropertiesStructure),\n this.store.select(selectAllUserToPropertyMappings),\n this.store.select(selectUserData),\n ])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(\n ([allProperties, userToPropertyMapping, userData]) => !!allProperties && !!userToPropertyMapping && !!userData\n ),\n tap(([allProperties, userToPropertyMapping, userData]) => {\n this.userToPropertyMapping = userToPropertyMapping;\n this.root = formatPropertyStructureToTree(allProperties);\n this.propertiesToSelect = combineUserWithProperties(userData.id, allProperties, userToPropertyMapping);\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.inProgress$ = combineLatest([\n this.store.select(selectUserInviteInProgress),\n this.store.select(selectSaveUserToGeneralRoleInProgress),\n this.store.select(selectAssignUserIntoPropertyInProgress),\n ]).pipe(map(operationsInProgress => some(operationsInProgress, Boolean)));\n\n combineLatest([\n this.store.select(selectUserInvited),\n this.store.select(selectUserInviteStatus),\n this.store.select(selectSaveUserToGeneralRoleStatus),\n this.store.select(selectAssignUserIntoPropertyStatus),\n ])\n .pipe(\n untilDestroyed(this),\n filter(\n ([invitedUser, userInviteStatus, saveUserToGeneralRoleStatus, assignUserIntoPropertyStatus]) =>\n invitedUser &&\n userInviteStatus === UpdateStatus.OK &&\n saveUserToGeneralRoleStatus === UpdateStatus.UPDATED &&\n assignUserIntoPropertyStatus === UpdateStatus.UPDATED\n )\n )\n .subscribe(([invitedUser]) => {\n const company = this.companyRadioList.find(c => c.value === invitedUser.companyId);\n this.snackbarService.success(`${invitedUser.displayName} added to ${company?.label}`);\n this.close(DialogResult.Success, invitedUser);\n })\n .untilDestroyed(this);\n\n if (this.data.vendorId) {\n this.companyId.setValue(this.data.vendorId);\n }\n }\n\n save() {\n this.formSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const { firstName, lastName, email, userGroupType, companyId, phoneNumber, nativeLanguage } = this.form\n .value as UserPreview;\n let selectedProperty: number[] = [];\n const inviteUser: InviteRestUserModel = {\n email,\n firstName,\n lastName,\n userGroupType: UserType.Contractor,\n displayName: `${firstName} ${lastName}`,\n companyId,\n phoneNumber,\n nativeLanguage,\n };\n\n if (this.arePropertiesChanged) {\n selectedProperty = this.selectedProperties.map(item => item.id);\n }\n\n this.store.dispatch(inviteNewUser({ user: inviteUser, roleId: this.vendorRoleId, selectedProperty }));\n }\n\n close(result: DialogResult = DialogResult.Fail, invitedUser?: RestUserModel) {\n if (result === DialogResult.Fail) {\n this.dialogRef.close();\n } else {\n this.dialogRef.close({\n invitedUser,\n });\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.store.dispatch(clearUserPreviewData());\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n [UserPreviewFields.FirstName]: [null, [Validators.required, Validators.maxLength(24)]],\n [UserPreviewFields.LastName]: [null, [Validators.required, Validators.maxLength(24)]],\n [UserPreviewFields.Email]: [null, [Validators.required, EmailPatternValidator(), Validators.email]],\n [UserPreviewFields.CompanyId]: [null, [Validators.required]],\n [UserPreviewFields.PhoneNumber]: [null, [Validators.pattern('[- +()0-9]+')]],\n [UserPreviewFields.NativeLanguage]: [0, Validators.required],\n });\n correctEmailInput(this.email).subscribe().untilDestroyed(this);\n }\n\n selectedRootsChange($event: PropertyBasicInfo[]) {\n this.arePropertiesChanged = true;\n this.selectedProperties = $event;\n }\n}\n","import { MatDialogConfig } from '@angular/material/dialog';\n\nexport const DefaultModalConfigConstant: MatDialogConfig = {\n autoFocus: false,\n width: '618px',\n};\n","export enum DialogResult {\n Fail,\n Success,\n}\n","
\n
\n

Pictures ({{ attachments?.length || 0 }})

\n \n
\n\n \n
\n
\n
    \n
  • \n \n \n \n \n
  • \n
\n
\n
\n
\n
\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport Viewer from 'viewerjs';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { deleteUnitAttachment } from '@portfolio/store/portfolio.actions';\nimport { selectDeleteUnitAttachmentInProgress } from '@portfolio/store/portfolio.selectors';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { GalleryItem } from '@shared/interfaces/gallery-item';\n\nimport Options = Viewer.Options;\n\n@UntilDestroy()\n@Component({\n selector: 'app-gallery-modal',\n templateUrl: './gallery-modal.component.html',\n styleUrls: ['./gallery-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GalleryModalComponent extends ComponentAbstract implements OnInit, AfterViewInit, OnDestroy {\n attachments: RestGenericTypedAttachment[] = [];\n title = '';\n content = '';\n\n deleteAttachmentInProgress$: Observable;\n viewer: Viewer;\n viewerOptions: Options = {\n toolbar: {\n zoomIn: 4,\n zoomOut: 4,\n oneToOne: 4,\n reset: 4,\n prev: 4,\n play: {\n show: 4,\n size: 'large',\n },\n next: 4,\n rotateLeft: false,\n rotateRight: false,\n flipHorizontal: false,\n flipVertical: false,\n },\n };\n\n @ViewChild('imagesList', { read: ElementRef }) imagesList: ElementRef;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: GalleryItem,\n private store: Store<{}>\n ) {\n super(cdr);\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n ngOnInit(): void {\n this.deleteAttachmentInProgress$ = this.store.select(selectDeleteUnitAttachmentInProgress);\n\n this.data?.attachmentsBSubject\n .pipe(\n untilDestroyed(this),\n tap((attachments: RestGenericTypedAttachment[]) => {\n this.attachments = attachments;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.getDeleteConfirmationLabels();\n }\n\n ngAfterViewInit(): void {\n this.viewer = new Viewer(this.imagesList.nativeElement, this.viewerOptions);\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n if (this.viewer) {\n this.viewer.destroy();\n }\n }\n\n deleteItem(attachment: RestGenericTypedAttachment) {\n this.store.dispatch(deleteUnitAttachment({ unitId: this.data.unitId, attachment }));\n }\n\n private getDeleteConfirmationLabels() {\n switch (this.data.attachmentType) {\n case UnitAttachmentType.Photo:\n {\n this.title = `Removal of the unit photo`;\n this.content = 'Are you sure you want to remove the unit photo?';\n }\n break;\n\n case UnitAttachmentType.FloorPlan:\n {\n this.title = `Removal of the unit floor plan`;\n this.content = 'Are you sure you want to remove the unit floor plan?';\n }\n break;\n }\n }\n}\n","
\n
\n
\n \n {{ data?.title }}\n
\n
\n\n \n
\n \n
\n
\n \n \n \n
\n\n\n
{{ data?.content || '' }}
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { ModalData } from '@shared/interfaces/modal-data';\n\n@Component({\n selector: 'app-info-modal',\n templateUrl: './info-modal.component.html',\n styleUrls: ['./info-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class InfoModalComponent extends ComponentAbstract {\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: ModalData\n ) {\n super(cdr);\n }\n\n confirm() {\n this.dialogRef.close();\n }\n}\n","\n
\n
\n
\n
\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n","import { NgIfContext } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'app-skeleton-modals',\n templateUrl: './skeleton-modals.component.html',\n styleUrls: ['./skeleton-modals.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkeletonModalsComponent {\n @ViewChild('skeletonTitle') skeletonTitle: TemplateRef>;\n @ViewChild('skeletonContent') skeletonContent: TemplateRef>;\n @ViewChild('skeletonActions') skeletonActions: TemplateRef>;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { InputTimeManualComponent } from './input-time-manual.component';\n\n@NgModule({\n declarations: [InputTimeManualComponent],\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n exports: [InputTimeManualComponent],\n})\nexport class InputTimeManualModule {}\n","
\n \n
\n \n d:\n \n h:\n \n m\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\n@Component({\n selector: 'app-input-time-manual',\n templateUrl: './input-time-manual.component.html',\n styleUrls: ['./input-time-manual.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTimeManualComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputTimeManualComponent extends PuSubscribable implements ControlValueAccessor, OnInit {\n daysControl: FormControl = new FormControl();\n hoursControl: FormControl = new FormControl();\n minutesControl: FormControl = new FormControl();\n errors: ValidationErrors;\n invalid = false;\n disabled = false;\n\n @Input() label = '';\n @Input() labelRequired = false;\n\n @Input() set attrDisable(attrDisable: boolean) {\n if (attrDisable) {\n this.daysControl.disable();\n this.hoursControl.disable();\n this.minutesControl.disable();\n } else {\n this.daysControl.enable();\n this.hoursControl.enable();\n this.minutesControl.enable();\n }\n this.disabled = attrDisable;\n }\n\n private onChange: (value: string) => void;\n private onTouched: () => void;\n\n ngOnInit(): void {\n this.daysControl.valueChanges.subscribe(() => this.onInputChange()).untilDestroyed(this);\n this.hoursControl.valueChanges.subscribe(() => this.onInputChange()).untilDestroyed(this);\n this.minutesControl.valueChanges.subscribe(() => this.onInputChange()).untilDestroyed(this);\n }\n\n onInputChange(): void {\n const value = `${this.daysControl.value || '0'}::${this.hoursControl.value || '0'}::${\n this.minutesControl.value || '0'\n }`;\n if (this.onChange) {\n this.onChange(value);\n }\n }\n\n pad(value: number | null): string {\n if (value === null || value === undefined) {\n return '0';\n }\n return value.toString();\n }\n\n writeValue(value: string): void {\n if (value) {\n const parts = value.split('::').map(Number);\n this.daysControl.setValue(parts[0] === 0 ? null : parts[0], { emitEvent: false });\n this.hoursControl.setValue(parts[1] === 0 ? null : parts[1], { emitEvent: false });\n this.minutesControl.setValue(parts[2] === 0 ? null : parts[2], { emitEvent: false });\n } else {\n this.daysControl.setValue(null, { emitEvent: false });\n this.hoursControl.setValue(null, { emitEvent: false });\n this.minutesControl.setValue(null, { emitEvent: false });\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (isDisabled) {\n this.daysControl.disable();\n this.hoursControl.disable();\n this.minutesControl.disable();\n } else {\n this.daysControl.enable();\n this.hoursControl.enable();\n this.minutesControl.enable();\n }\n }\n\n getWidth(control: FormControl): string {\n const valueLength = control.value ? control.value.toString().length : 0;\n const length = control.value ? valueLength + 0.25 : 2.75;\n return `${length}ch`;\n }\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ButtonMenuComponent } from '@shared/components/button/button-menu/button-menu.component';\nimport { DirectivesModule } from '@shared/directives/directives.module';\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { AttachmentsListModule } from '@ui-components/components/attachments-list/attachments-list.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { NotificationModule } from '@ui-components/components/notification/notification.module';\nimport { PictureModule } from '@ui-components/components/picture/picture.module';\nimport { SkeletonModalsComponent } from '@ui-components/components/skeleton-modals/skeleton-modals.component';\nimport { TableStatusToggleModule } from '@ui-components/components/table-status-toggle/table-status-toggle.module';\nimport { DateDropdownModule } from '@ui-components/controls/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { InputAreaModule } from '@ui-components/controls/input-area/input-area.module';\nimport { InputTimeManualModule } from '@ui-components/controls/input-time-manual/input-time-manual.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { UserSelectDropdownModule } from '@ui-components/controls/user-select-dropdown/user-select-dropdown.module';\n\nimport { AddTicketModalComponent } from './add-ticket-modal.component';\nimport { PipesModule } from '../../../shared/pipes/pipes.module';\n\n@NgModule({\n declarations: [AddTicketModalComponent, SkeletonModalsComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n InputErrorModule,\n DateDropdownModule,\n AttachmentItemModule,\n AttachmentModule,\n TableStatusToggleModule,\n MatButtonModule,\n PictureModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n UserSelectDropdownModule,\n InputAreaModule,\n AttachmentsListModule,\n DragDropModule,\n MatCheckboxModule,\n PipesModule,\n ButtonMenuComponent,\n InputTimeManualModule,\n DirectivesModule,\n NotificationModule,\n ],\n})\nexport class AddTicketModalModule {}\n","
\n \n \n
\n
\n
\n \n \n \n \n
\n \n
\n \n
\n
\n\n \n
\n \n \n
\n \n
\n\n","import { DecimalPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { IActionMapping, ITreeOptions, TreeComponent, TreeModel, TreeNode } from '@circlon/angular-tree-component';\nimport { IDTypeDictionary } from '@circlon/angular-tree-component/lib/defs/api';\nimport { each, every, find, isEmpty, reduce, some, toLower } from 'lodash';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { PropertyType } from '@shared/enums/property-type.enum';\nimport { PropertyBasicInfo, PropertyBasicInfoNode } from '@shared/interfaces/propertyBasicInfo';\nimport { ISimpleChanges } from '@shared/types/simple-changes-typed.type';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { NODES_RE_INIT_DELAY, doForAllTreeNodes } from './functions/tree-utils';\n\n@Component({\n selector: 'app-select-tree',\n templateUrl: './select-tree.component.html',\n styleUrls: ['./select-tree.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DecimalPipe],\n})\nexport class SelectTreeComponent extends ComponentAbstract implements OnChanges, OnDestroy {\n @Input() containerCss = 'display-flex flex-column';\n @Input() label = '';\n @Input() labelCss = 'body-small-bold nowrap';\n @Input() nodes: any;\n @Input() isSuperUser: boolean;\n @Input() selectedNodes: PropertyBasicInfoNode[];\n @Input() warningMessage: string;\n @Input() labelRequired = false;\n @Input() displaySkeleton = false;\n @Input() selectAllEvent = new EventEmitter();\n @Output() selectedRoots = new EventEmitter();\n @Output() clearAll = new EventEmitter();\n @ViewChild(TreeComponent) tree: TreeComponent;\n filterString = '';\n placeholder = 'Select property';\n mappedSelectedNodeIds: Set = new Set();\n actionMapping: IActionMapping = {\n mouse: {\n checkboxClick: this.checkboxClick.bind(this),\n },\n };\n\n options: ITreeOptions = {\n useCheckbox: true,\n useVirtualScroll: true,\n nodeHeight: 23,\n actionMapping: this.actionMapping,\n };\n readonly EColorPalette = EColorPalette;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n private decimalPipe: DecimalPipe,\n private snackbarService: SnackbarService\n ) {\n super(cdr);\n this.updatePlaceholderAndEmit = this.updatePlaceholderAndEmit.bind(this);\n }\n\n ngOnChanges(changes: ISimpleChanges) {\n if (changes.nodes?.currentValue?.[0]?.children) {\n this.nodes[0].children = this.nodes[0].children.sort((a, b) => a.name.localeCompare(b.name));\n }\n if (changes['isSuperUser']?.currentValue) {\n setTimeout(() => {\n this.selectedNodes = this.nodes;\n this.treeInitialized();\n });\n }\n }\n\n treeInitialized() {\n this.selectNodes(this.selectedNodes);\n }\n\n clearSelection() {\n this.tree.treeModel.selectedLeafNodeIds = {};\n this.updatePlaceholderAndEmit({});\n this.clearAll.emit();\n this.checkIsSuperUser();\n }\n\n hasNodesSelected(): boolean {\n if (!this.tree || !this.tree.treeModel) {\n return false;\n }\n const selectionObject = this.tree.treeModel.selectedLeafNodeIds;\n return some(Object.values(selectionObject), value => value);\n }\n\n selectNodes(propertiesToSelect: PropertyBasicInfo[]) {\n if (!this.tree) {\n console.error('missing tree, return ');\n return;\n }\n const propertyIdsToSelect = new Set(propertiesToSelect.map(property => property.id));\n const selectedLeafNodeIds = { ...this.tree.treeModel.selectedLeafNodeIds }; // Copy existing selections\n const traverseAndCollect = (node: TreeNode) => {\n if (propertyIdsToSelect.has(node.data.id)) {\n toggleNodeSelection(node, true, selectedLeafNodeIds);\n selectedLeafNodeIds[node.id] = true;\n }\n if (node.children) {\n node.children.forEach(traverseAndCollect);\n }\n };\n this.tree.treeModel.roots.forEach(traverseAndCollect);\n this.tree.treeModel.selectedLeafNodeIds = selectedLeafNodeIds;\n this.updatePlaceholderAndEmit(selectedLeafNodeIds);\n }\n\n filterTree(event: Event) {\n const text = (event.target as HTMLInputElement).value;\n this.tree.treeModel.filterNodes(node => {\n const allParentsName = this.getAncestorsName(node.data);\n return toLower(allParentsName).includes(toLower(text));\n });\n\n if (isEmpty(text)) {\n this.collapseAll();\n this.expandRoot();\n return;\n }\n }\n\n expandRoot() {\n const firstRoot = this.tree.treeModel.roots[0];\n firstRoot.expand();\n }\n\n getAncestorsName(node: PropertyBasicInfoNode) {\n if (node.parent) {\n return this.getAncestorsName(node.parent) + node.name;\n }\n\n return node.name;\n }\n\n toggleMenu(menuExpanded: boolean) {\n this.isExpanded = menuExpanded;\n\n if (this.isExpanded) {\n this.onListOpen();\n } else {\n this.onListClose();\n }\n\n this.cdr.detectChanges();\n }\n\n setValue(tree: TreeModel, node: TreeNode, selectionValue) {\n const selectedLeafNodeIds = tree.selectedLeafNodeIds;\n toggleNodeSelection(node, selectionValue, selectedLeafNodeIds);\n tree.selectedLeafNodeIds = Object.assign({}, selectedLeafNodeIds, { [node.id]: selectionValue });\n\n this.updatePlaceholderAndEmit(selectedLeafNodeIds);\n }\n\n checkboxClick(tree: TreeModel, node: TreeNode, $event: any) {\n if (!node) {\n return;\n }\n\n const selectionValue = !node.isSelected;\n const selectedLeafNodeIds = tree.selectedLeafNodeIds;\n toggleNodeSelection(node, selectionValue, selectedLeafNodeIds);\n tree.selectedLeafNodeIds = Object.assign({}, selectedLeafNodeIds, { [node.id]: selectionValue });\n\n this.updatePlaceholderAndEmit(selectedLeafNodeIds);\n\n this.checkIsSuperUser();\n }\n\n updatePlaceholderAndEmit(selectedNodeIds: IDTypeDictionary) {\n const { selectedLeaves, selectedRoots, isRootSelected } = this.getSelectedNodes(selectedNodeIds);\n this.selectedRoots.emit(selectedRoots);\n const allCount = this.decimalPipe.transform(selectedLeaves.length, '1.0-0');\n if (!isEmpty(selectedLeaves)) {\n this.placeholder = isRootSelected\n ? `All: ${allCount} units`\n : selectedLeaves.length === 1\n ? `Selected: ${selectedLeaves.length} unit`\n : `Selected: ${selectedLeaves.length} units`;\n } else {\n this.placeholder = 'Select property';\n }\n }\n\n collapseAll() {\n this.tree.treeModel.expandedNodeIds = {};\n }\n\n expanderClick(tree: TreeModel, node: TreeNode, $event: any) {\n if (!node || !node.hasChildren) {\n return;\n }\n const value = !node.isExpanded;\n if (node.hasChildren) {\n tree.expandedNodeIds = Object.assign({}, tree.expandedNodeIds, { [node.id]: value });\n }\n }\n\n getSelectedNodes(selectedNodeIds: IDTypeDictionary) {\n const entries = Object.entries(selectedNodeIds);\n let isRootSelected = false;\n\n const onlySelectedNodes = reduce(\n entries,\n (acc, [id, isChecked]) => {\n if (isChecked) {\n if (id === '-1') {\n isRootSelected = true;\n }\n acc.push(id);\n }\n return acc;\n },\n []\n );\n\n this.mappedSelectedNodeIds = new Set(onlySelectedNodes);\n\n const selectedRoots = this.getSelectedRootsRecursive([], this.nodes[0]);\n const selectedLeaves = this.getSelectedLeavesRecursive([], this.nodes[0]);\n\n return { selectedRoots, selectedLeaves, isRootSelected };\n }\n\n private getSelectedLeavesRecursive(acc, node: PropertyBasicInfoNode) {\n if (\n !node.children &&\n this.mappedSelectedNodeIds.has(node.id.toString()) &&\n node.propertyType === PropertyType.Unit\n ) {\n acc.push(node);\n return acc;\n }\n\n if (node.children) {\n each(node.children, childNode => this.getSelectedLeavesRecursive(acc, childNode));\n }\n return acc;\n }\n\n private getSelectedRootsRecursive(acc, node: PropertyBasicInfoNode) {\n if (node.parent && this.mappedSelectedNodeIds.has(node.id.toString())) {\n acc.push(node);\n return acc;\n }\n\n if (node.children) {\n each(node.children, childNode => this.getSelectedRootsRecursive(acc, childNode));\n }\n return acc;\n }\n\n private onListOpen() {\n this.tree.treeModel.clearFilter();\n this.collapseAll();\n this.expandRoot();\n this.tree.sizeChanged();\n }\n\n private onListClose(): void {\n this.filterString = '';\n }\n\n checkIsSuperUser(): void {\n if (this.isSuperUser) {\n this.snackbarService.error('Superusers are required to have all properties and portfolios');\n setTimeout(() => {\n this.selectedNodes = this.nodes;\n this.treeInitialized();\n }, NODES_RE_INIT_DELAY);\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.snackbarService.dismiss();\n }\n}\n\nfunction toggleNodeSelection(node: TreeNode, selectionValue, selectedLeafNodeIds) {\n selectedLeafNodeIds[node.id] = selectionValue;\n\n if (selectionValue) {\n selectParentIfNeeded(node.parent, selectedLeafNodeIds);\n }\n\n if (!selectionValue) {\n deselectAncestorsIfNeeded(node.parent, selectedLeafNodeIds);\n }\n\n if (!isEmpty(node.children)) {\n node.children.forEach(childNode => toggleNodeSelection(childNode, selectionValue, selectedLeafNodeIds));\n }\n}\n\nfunction isNodeSelected(nodeToCheck: TreeNode, selectedLeafNodeIds) {\n return selectedLeafNodeIds[nodeToCheck.id];\n}\n\nfunction selectParentIfNeeded(parentNode: TreeNode, selectedLeafNodeIds) {\n if (every(parentNode.children, (childNode: TreeNode) => isNodeSelected(childNode, selectedLeafNodeIds))) {\n selectedLeafNodeIds[parentNode.id] = true;\n if (parentNode.parent) {\n selectParentIfNeeded(parentNode.parent, selectedLeafNodeIds);\n }\n }\n}\n\nfunction deselectAncestorsIfNeeded(parentNode: TreeNode, selectedLeafNodeIds) {\n if (\n isNodeSelected(parentNode, selectedLeafNodeIds) &&\n some(parentNode.children, (childNode: TreeNode) => !isNodeSelected(childNode, selectedLeafNodeIds))\n ) {\n selectedLeafNodeIds[parentNode.id] = false;\n if (parentNode.parent) {\n deselectAncestorsIfNeeded(parentNode.parent, selectedLeafNodeIds);\n }\n }\n}\n","import { TreeModel, TreeNode } from '@circlon/angular-tree-component';\n\n// built-in function had deffects (highly affecting tests)\n// https://github.com/CirclonGroup/angular-tree-component/issues/928\n//\nexport function doForAllTreeNodes(treeModel: TreeModel, callback: (node: TreeNode) => void) {\n treeModel.roots.forEach(node => doForAllNodes(node, callback));\n}\n\nfunction doForAllNodes(node: TreeNode, callback: (node: TreeNode) => void) {\n if (!node) return;\n\n callback(node);\n if (node.children) {\n node.children.forEach(child => doForAllNodes(child, callback));\n }\n}\n\nexport const NODES_RE_INIT_DELAY = 500;\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { SelectTreeModule } from '@ui-components/components/select-tree/select-tree.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { RadioButtonModule } from '@ui-components/controls/radio-button/radio-button.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\nimport { AddVendorUserModalComponent } from './add-vendor-user-modal.component';\n\n@NgModule({\n declarations: [AddVendorUserModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n SelectTreeModule,\n RadioButtonModule,\n ],\n})\nexport class AddVendorUserModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { PictureModule } from '@ui-components/components/picture/picture.module';\n\nimport { GalleryModalComponent } from './gallery-modal.component';\n\n@NgModule({\n declarations: [GalleryModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, PictureModule, IconComponent, TooltipDirectiveModule],\n})\nexport class GalleryModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\n\nimport { InfoModalComponent } from './info-modal.component';\n\n@NgModule({\n declarations: [InfoModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, IconComponent],\n exports: [InfoModalComponent],\n})\nexport class InfoModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\nimport { NewBulkScopeComponent } from './new-bulk-scope.component';\n\n@NgModule({\n declarations: [NewBulkScopeComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n InputModule,\n ReactiveFormsModule,\n IconComponent,\n MatProgressSpinnerModule,\n RadioButtonDropdownModule,\n ],\n})\nexport class NewBulkScopeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { RouterModule } from '@angular/router';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { ReadOnlyFieldModule } from '@ui-components/components/read-only-field/read-only-field.module';\nimport { UserSelectDropdownModule } from '@ui-components/controls/user-select-dropdown/user-select-dropdown.module';\n\nimport { NextStepAssigneeModalComponent } from './next-step-assignee-modal.component';\n\n@NgModule({\n declarations: [NextStepAssigneeModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n PipesModule,\n ReadOnlyFieldModule,\n UserSelectDropdownModule,\n ReactiveFormsModule,\n MatCheckboxModule,\n MatProgressSpinnerModule,\n RouterModule,\n FormsModule,\n ],\n})\nexport class NextStepAssigneeModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { InputModule } from '@ui-components/controls/input/input.module';\n\nimport { PromptModalComponent } from './prompt-modal.component';\n\n@NgModule({\n declarations: [PromptModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, ReactiveFormsModule, InputModule],\n})\nexport class PromptModalModule {}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { AttachmentsListModule } from '@ui-components/components/attachments-list/attachments-list.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { PictureModule } from '@ui-components/components/picture/picture.module';\nimport { TableStatusToggleModule } from '@ui-components/components/table-status-toggle/table-status-toggle.module';\nimport { DateDropdownModule } from '@ui-components/controls/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { InputAreaModule } from '@ui-components/controls/input-area/input-area.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { UserSelectDropdownModule } from '@ui-components/controls/user-select-dropdown/user-select-dropdown.module';\n\nimport { TicketPreviewModalComponent } from './ticket-preview-modal.component';\nimport { PipesModule } from '../../../shared/pipes/pipes.module';\n\n@NgModule({\n declarations: [TicketPreviewModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n InputErrorModule,\n DateDropdownModule,\n AttachmentItemModule,\n AttachmentModule,\n TableStatusToggleModule,\n MatButtonModule,\n PictureModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n UserSelectDropdownModule,\n InputAreaModule,\n AttachmentsListModule,\n DragDropModule,\n MatCheckboxModule,\n PipesModule,\n ],\n})\nexport class TicketPreviewModalModule {}\n","
\n \n \n
\n
\n
\n \n \n
\n \n
\n","import { NgClass, NgIf, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Optional,\n Output,\n Self,\n} from '@angular/core';\nimport { FormControl, FormGroupDirective, NgControl } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { distinctUntilChanged } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport {\n CountryCodes,\n CountryPhoneCodes,\n FinlandValidPhoneNumberLength,\n LatviaValidPhoneNumberLength,\n ValidPhoneNumberLength_10,\n} from '@shared/constants/country-phone-codes.const';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { CustomControlAbstract } from '@ui-components/controls/custom-control.abstract';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { parsePhoneNumber } from '@ui-components/validators/phone.validator';\n\n@UntilDestroy()\n@Component({\n selector: 'app-phone-number-input',\n templateUrl: './phone-number-input.component.html',\n styleUrls: ['./phone-number-input.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [InputModule, RadioButtonDropdownModule, MatIconModule, NgIf, NgStyle, NgClass, InputErrorModule],\n})\nexport class PhoneNumberInputComponent extends CustomControlAbstract implements OnInit {\n @Input() attrLabel: string;\n @Input() defaultCode: number;\n @Input() displaySkeleton = false;\n @Input() phoneNumberAsIdentity = false;\n\n @Output() phoneNumberInvalid = new EventEmitter();\n protected readonly countryCodes = CountryCodes;\n\n constructor(\n @Self() @Optional() protected ngControl: NgControl,\n protected cdr: ChangeDetectorRef,\n @Optional() formDirective: FormGroupDirective\n ) {\n super(ngControl, cdr, formDirective);\n }\n\n phoneCodeControl = new FormControl(null);\n phoneNumberControl = new FormControl(null);\n defaultMaskPattern = '(000) 000-0000';\n maskPattern = '(000) 000-0000';\n phoneCode: number;\n validPhoneNumberLength = ValidPhoneNumberLength_10;\n notValidFormat = false;\n\n ngOnInit(): void {\n if (this.defaultCode !== undefined && this.defaultCode !== null) {\n this.phoneCodeControl.setValue(this.defaultCode);\n }\n\n this.initControlBase();\n\n this.control.registerOnDisabledChange(isDisabled => {\n this.setDisabled(isDisabled);\n });\n\n this.setDisabled(this.control.disabled);\n this.parsePhoneNumber(this.control.value);\n\n this.onPhoneNumberControlChange();\n this.onPhoneCodeControlChange();\n }\n\n writeValue(value: any): void {\n if (value != this.control.value) {\n this.control.setValue(value);\n }\n }\n\n private setDisabled(isDisabled: boolean): void {\n if (isDisabled) {\n this.phoneNumberControl.disable();\n this.phoneCodeControl.disable();\n } else {\n this.phoneNumberControl.enable();\n this.phoneCodeControl.enable();\n }\n }\n\n private validateAndEmitValue() {\n this.phoneCode = this.phoneCodeControl.value;\n if (this.phoneCode === CountryPhoneCodes.Latvia) {\n this.maskPattern = '(000) 000-00';\n this.validPhoneNumberLength = LatviaValidPhoneNumberLength;\n } else if (this.phoneCode === CountryPhoneCodes.Finland) {\n this.maskPattern = '(000) 000-000';\n this.validPhoneNumberLength = FinlandValidPhoneNumberLength;\n } else if (this.phoneCode === CountryPhoneCodes.Russia) {\n this.maskPattern = '000 000 00 00';\n this.validPhoneNumberLength = ValidPhoneNumberLength_10;\n } else if (this.phoneCode === CountryPhoneCodes.Mexico) {\n this.maskPattern = '(00) 00 00 00 00';\n this.validPhoneNumberLength = ValidPhoneNumberLength_10;\n } else {\n this.maskPattern = this.defaultMaskPattern;\n this.validPhoneNumberLength = ValidPhoneNumberLength_10;\n }\n const phoneNumberRaw = this.phoneNumberControl.value;\n if (phoneNumberRaw && this.phoneCode) {\n const phoneNumber = phoneNumberRaw.replace(/\\D/g, '');\n this.onChanged(`+${this.phoneCode}${phoneNumber}`);\n } else {\n this.onChanged(``);\n }\n\n this.notValidFormat = phoneNumberRaw && this.phoneNumberControl.invalid;\n\n this.phoneNumberInvalid.emit(this.notValidFormat);\n }\n\n private parsePhoneNumber(value: string) {\n const { phoneCode, phoneNumber } = parsePhoneNumber(value, this.validPhoneNumberLength);\n if (phoneCode) {\n this.phoneCodeControl.setValue(parseInt(phoneCode), { emitEvent: false });\n }\n this.phoneNumberControl.setValue(phoneNumber, { emitEvent: false });\n }\n\n private onPhoneNumberControlChange(): void {\n this.phoneNumberControl.valueChanges\n .pipe(untilDestroyed(this), distinctUntilChanged())\n .subscribe(value => {\n this.validateAndEmitValue();\n })\n .untilDestroyed(this);\n }\n\n private onPhoneCodeControlChange(): void {\n this.phoneCodeControl.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(() => {\n this.phoneNumberControl.setValue(null, { emitEvent: false });\n this.validateAndEmitValue();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { SelectTreeModule } from '@ui-components/components/select-tree/select-tree.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { PhoneNumberInputComponent } from '@ui-components/controls/phone-number-input/phone-number-input.component';\nimport { RadioButtonModule } from '@ui-components/controls/radio-button/radio-button.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\nimport { UserPreviewModalComponent } from './user-preview-modal.component';\n\n@NgModule({\n declarations: [UserPreviewModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n ReactiveFormsModule,\n InputModule,\n RadioButtonDropdownModule,\n SelectTreeModule,\n RadioButtonModule,\n PhoneNumberInputComponent,\n InputErrorModule,\n ],\n})\nexport class UserPreviewModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { DividerModule } from '@ui-components/components/divider/divider.module';\nimport { InputErrorModule } from '@ui-components/components/input-error/input-error.module';\nimport { SelectTreeModule } from '@ui-components/components/select-tree/select-tree.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { PhoneNumberInputComponent } from '@ui-components/controls/phone-number-input/phone-number-input.component';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\nimport { AddVendorModalComponent } from './add-vendor-modal.component';\n\n@NgModule({\n declarations: [AddVendorModalComponent],\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n InputModule,\n ReactiveFormsModule,\n RadioButtonDropdownModule,\n MatProgressSpinnerModule,\n MatDividerModule,\n DividerModule,\n SelectTreeModule,\n PhoneNumberInputComponent,\n InputErrorModule,\n MatCheckboxModule,\n ],\n exports: [AddVendorModalComponent],\n})\nexport class AddVendorModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { CommentTooLongModalComponent } from './comment-too-long-modal.component';\n\n@NgModule({\n declarations: [CommentTooLongModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule],\n exports: [CommentTooLongModalComponent],\n})\nexport class CommentTooLongModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { ConfirmationModalComponent } from './confirmation-modal.component';\n\n@NgModule({\n declarations: [ConfirmationModalComponent],\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatCheckboxModule, ReactiveFormsModule],\n exports: [ConfirmationModalComponent],\n})\nexport class ConfirmationModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { AttachmentItemModule } from '@ui-components/components/attachment-item/attachment-item.module';\nimport { AttachmentsListModule } from '@ui-components/components/attachments-list/attachments-list.module';\nimport { ButtonModule } from '@ui-components/components/button/button.module';\nimport { DateDropdownModule } from '@ui-components/controls/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { InputAreaModule } from '@ui-components/controls/input-area/input-area.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { UserSelectDropdownModule } from '@ui-components/controls/user-select-dropdown/user-select-dropdown.module';\n\nimport { TurnoverPunchModalComponent } from './turnover-punch-modal.component';\n\n@NgModule({\n declarations: [TurnoverPunchModalComponent],\n imports: [\n CommonModule,\n AttachmentItemModule,\n AttachmentModule,\n InputAreaModule,\n InputModule,\n DateDropdownModule,\n RadioButtonDropdownModule,\n UserSelectDropdownModule,\n MatDialogModule,\n ButtonModule,\n MatButtonModule,\n ReactiveFormsModule,\n AttachmentsListModule,\n AttachmentItemModule,\n PipesModule,\n MatProgressSpinnerModule,\n ],\n})\nexport class TurnoverPunchModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { NgxMaskModule } from 'ngx-mask';\n\nimport { ModalsService } from '@app/modules/ui-components/modals/modals.service';\nimport { NewTurnoverModalModule } from '@app/modules/ui-components/modals/new-turnover-modal/new-turnover-modal.module';\nimport { WorkflowActionsService } from '@app/services/workflow-actions.service';\nimport { TooltipDirectiveModule } from '@shared/directives/tooltip.directive';\nimport { AttachmentModule } from '@ui-components/components/attachment/attachment.module';\nimport { DateDropdownModule } from '@ui-components/controls/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { InputFileModule } from '@ui-components/controls/input-file/input-file.module';\nimport { InputTypeFileModule } from '@ui-components/controls/input-type-file/input-type-file.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { AddTicketModalModule } from '@ui-components/modals/add-ticket-modal/add-ticket-modal.module';\nimport { AddVendorUserModalModule } from '@ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.module';\nimport { GalleryModalModule } from '@ui-components/modals/gallery-modal/gallery-modal.module';\nimport { InfoModalModule } from '@ui-components/modals/info-modal/info-modal.module';\nimport { NewBulkScopeModule } from '@ui-components/modals/new-bulk-scope/new-bulk-scope.module';\nimport { NextStepAssigneeModalModule } from '@ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.module';\nimport { PromptModalModule } from '@ui-components/modals/prompt-modal/prompt-modal.module';\nimport { TicketPreviewModalModule } from '@ui-components/modals/ticket-preview-modal/ticket-preview-modal.module';\nimport { UserPreviewModalModule } from '@ui-components/modals/user-preview-modal/user-preview-modal.module';\n\nimport { AddBidModalComponent } from './add-bid-modal/add-bid-modal.component';\nimport { AddVendorModalModule } from './add-vendor-modal/add-vendor-modal.module';\nimport { CommentTooLongModalModule } from './comment-too-long-modal/comment-too-long-modal.module';\nimport { ConfirmationModalModule } from './confirmation-modal/confirmation-modal.module';\nimport { TurnoverPunchModalModule } from './turnover-punch-modal/turnover-punch-modal.module';\n\n@NgModule({\n declarations: [AddBidModalComponent],\n providers: [ModalsService, WorkflowActionsService],\n imports: [\n CommonModule,\n NewTurnoverModalModule,\n GalleryModalModule,\n NewBulkScopeModule,\n TicketPreviewModalModule,\n CommentTooLongModalModule,\n TurnoverPunchModalModule,\n InfoModalModule,\n AddTicketModalModule,\n NextStepAssigneeModalModule,\n UserPreviewModalModule,\n AddVendorModalModule,\n ConfirmationModalModule,\n AddVendorUserModalModule,\n MatDialogModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n FormsModule,\n RadioButtonDropdownModule,\n ReactiveFormsModule,\n DateDropdownModule,\n TooltipDirectiveModule,\n InputModule,\n MatInputModule,\n NgxMaskModule,\n InputFileModule,\n InputTypeFileModule,\n PromptModalModule,\n AttachmentModule,\n MatBottomSheetModule,\n ],\n})\nexport class ModalsModule {}\n","
\n
\n
Select property and unit to create ticket
\n
\n\n \n
\n
\n 7\"\n [attrDisable]=\"!(properties$ | async)?.length\"\n [label]=\"'Property'\"\n [formControlName]=\"'propertyId'\"\n [allowClear]=\"true\"\n [listLoading]=\"selectPropertiesLoading$ | async\"\n [attrPlaceholder]=\"(selectPropertiesLoading$ | async) ? 'Loading properties…' : 'Select property'\"\n [labelRequired]=\"true\"\n [showValidationError]=\"submitted$ | async\"\n attrAppendTo=\"body\">\n
\n
\n 7\"\n [attrDisable]=\"!(units$ | async)?.length || !form.get('propertyId')?.value\"\n [label]=\"'Unit'\"\n [formControlName]=\"'unitId'\"\n [allowClear]=\"false\"\n [listLoading]=\"unitListLoading$ | async\"\n [attrPlaceholder]=\"(unitListLoading$ | async) ? 'Loading units…' : 'Select unit'\"\n [showValidationError]=\"(submitted$ | async) && form.get('propertyId')?.value\"\n attrAppendTo=\"body\">\n
\n
\n
\n \n \n \n \n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable, filter, of, shareReplay } from 'rxjs';\nimport { catchError, distinctUntilChanged, map } from 'rxjs/operators';\n\nimport { UnitsService } from '@app/services/units.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { loadUnitList } from '@dashboards/store/actions/dashboard.actions';\nimport { selectUnitList, selectUnitListLoading } from '@dashboards/store/selectors/dashboards.selectors';\nimport { selectSelectedPortfolioId } from '@dashboards/store/selectors/property-selector.selectors';\nimport { allPortfoliosValue } from '@main-application/application-menu/property-selector/constants';\nimport { selectProperties, selectPropertiesLoading } from '@portfolio/store/portfolio.selectors';\nimport { getPortfolioProperties } from '@shared/functions/get-portfolio-properties.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\n\n@UntilDestroy()\n@Component({\n standalone: true,\n selector: 'app-property-unit-selector-modal',\n templateUrl: './property-unit-selector-modal.component.html',\n styleUrls: ['./property-unit-selector-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n RadioButtonDropdownModule,\n MatProgressSpinnerModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n ],\n})\nexport class PropertyUnitSelectorModalComponent extends PuSubscribable implements OnInit {\n form!: FormGroup;\n\n properties$: Observable[]> = this.getProperties();\n units$ = new BehaviorSubject[] | null>(null);\n selectPropertiesLoading$: Observable = this.store.select(selectPropertiesLoading);\n unitListLoading$: Observable = this.store.select(selectUnitListLoading);\n properties: RestPropertyModel[] = [];\n portfolioId!: number;\n submitted$ = new BehaviorSubject(false);\n loadingUnit$ = new BehaviorSubject(false);\n\n constructor(\n public dialogRef: MatDialogRef,\n private store: Store<{}>,\n private fb: FormBuilder,\n private unitsService: UnitsService,\n private snackbarService: SnackbarService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.store\n .select(selectSelectedPortfolioId)\n .pipe(untilDestroyed(this))\n .subscribe(portfolioId => {\n this.portfolioId = portfolioId;\n })\n .untilDestroyed(this);\n\n this.initForm();\n this.onPropertyControlChange();\n this.getUnits();\n }\n\n initForm(): void {\n this.form = this.fb.group({\n propertyId: [null, [Validators.required]],\n unitId: [null, [Validators.required]],\n });\n }\n\n submit(): void {\n this.submitted$.next(true);\n this.form.markAllAsTouched();\n if (this.form.invalid) return;\n\n this.loadingUnit$.next(true);\n this.getUnit(Number(this.form.get('unitId')?.value));\n }\n\n private getUnit(unitId: number): void {\n this.unitsService\n .getUnitById(unitId)\n .pipe(\n untilDestroyed(this),\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.LoadingUnit);\n return of(null);\n })\n )\n .subscribe(unit => {\n if (!unit) return;\n this.loadingUnit$.next(false);\n const property = this.properties.find(el => el.id === this.form.get('propertyId')?.value);\n this.dialogRef.close({ unit, property });\n })\n .untilDestroyed(this);\n }\n\n private getProperties(): Observable[]> {\n return this.store.select(selectProperties).pipe(\n filter((properties: RestPropertyModel[]) => !!properties),\n map(properties => {\n this.properties = properties;\n return getPortfolioProperties(\n properties.filter(p => this.portfolioId === allPortfoliosValue || p.portfolioId === this.portfolioId)\n );\n }),\n shareReplay(),\n untilDestroyed(this)\n );\n }\n\n private onPropertyControlChange(): void {\n this.form\n .get('propertyId')\n ?.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe(propertyId => {\n this.form.get('unitId').setValue(null);\n if (propertyId) this.store.dispatch(loadUnitList({ propertyId }));\n })\n .untilDestroyed(this);\n }\n\n private getUnits(): void {\n this.store\n .select(selectUnitList)\n .pipe(\n map(unitList => {\n return unitList\n .map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n }),\n shareReplay(),\n untilDestroyed(this)\n )\n .subscribe(units => {\n if (units.length === 1) this.form.get('unitId').setValue(units[0].value);\n this.units$.next(units);\n })\n .untilDestroyed(this);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-comment-too-long-modal',\n templateUrl: './comment-too-long-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CommentTooLongModalComponent {\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: number\n ) {}\n\n cancel() {\n this.dialogRef.close();\n }\n}\n","
\n

Comment too long

\n \n
Please reduce to {{ data }} characters.
\n
\n \n \n \n
\n","
\n

\n
{{ data?.title }}
\n

\n \n
\n {{ data?.content }}\n
\n
\n \n
\n \n {{ doNotShowAgainMessage }}\n \n
\n
\n \n \n
\n {{ confirmLabel }}\n
\n \n
\n
\n
\n\n\n \n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { tap } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { ConfirmationModalData } from '@shared/interfaces/modal-data';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\nimport { DialogResult } from '../config/dialog-result.enum';\n\nconst CANCEL_DEFAULT_LABEL = 'Cancel';\nconst CANCEL_DEFAULT_COLOR = '';\nconst CONFIRM_DEFAULT_LABEL = 'OK';\nconst CONFIRM_DEFAULT_COLOR = 'primary';\n\n@UntilDestroy()\n@Component({\n selector: 'app-confirmation-modal',\n templateUrl: './confirmation-modal.component.html',\n styleUrls: ['./confirmation-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ConfirmationModalComponent extends PuSubscribable implements OnInit {\n cancelLabel: string;\n cancelColor: string;\n confirmLabel: string;\n confirmColor: 'primary' | 'warn';\n doNotShowAgain = new UntypedFormControl(false);\n doNotShowAgainMessage: string;\n hideConfirmBtn: boolean;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n private modalsService: ModalsService,\n private elementRef: ElementRef,\n @Inject(MAT_DIALOG_DATA) public data: ConfirmationModalData\n ) {\n super();\n }\n\n ngOnInit(): void {\n const overlay = this.elementRef.nativeElement.closest('.cdk-overlay-container');\n if (overlay) {\n overlay.style.zIndex = '1001';\n }\n this.cancelLabel = this.data.cancelLabel || CANCEL_DEFAULT_LABEL;\n this.cancelColor = this.data.cancelColor || CANCEL_DEFAULT_COLOR;\n this.confirmLabel = this.data.confirmLabel || CONFIRM_DEFAULT_LABEL;\n this.confirmColor = this.data.confirmColor || CONFIRM_DEFAULT_COLOR;\n this.hideConfirmBtn = this.data.hideConfirmBtn || false;\n this.doNotShowAgainMessage = this.data.doNotShowAgainMessage || \"Don't show again\";\n this.doNotShowAgain.valueChanges\n .pipe(\n untilDestroyed(this),\n tap(value => {\n this.modalsService.updateDialogHiddenState(value, this.data);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n send() {\n this.dialogRef.close(DialogResult.Success);\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport function propertyStateValidator(control: AbstractControl): ValidationErrors | null {\n const emojis = control.value;\n\n if (!emojis || emojis.length === 0) {\n return null;\n }\n\n const defaultEmojisCount = emojis.filter((emoji: any) => emoji.isDefault).length;\n\n if (defaultEmojisCount === 1) {\n return null;\n }\n\n return { defaultEmojiRequired: true };\n}\n","
\n \n
\n \n \n {{ currentArea.areaName | truncateLength: 36:false }}\n \n \n \n {{ inspectForm?.get('itemName')?.value | truncateLength: 36:false }}\n \n \n
\n
\n \n restore\n \n \n \n \n
\n \n \n \n
\n
\n\n
\n \n 0 && inspectForm?.get('emojiDetails')?.value[0]?.emojiTitle\n \">\n {{ inspectForm?.get('emojiDetails')?.value[0]?.emojiTitle | truncateLength: 36:true:'' }}\n *\n \n 0 && inspectForm?.get('emojiDetails')?.value[0]?.emojiCode\n \">\n \n \n {{ emoji.emojiName | truncateLength: 9:true }}\n
\n \n\n \n
0\">\n \n Answer questions\n *\n \n \n \n
\n \n {{ question.get('question')?.value }}\n \n
\n \n \n
\n \n \n
\n
\n \n \n \n \n\n \n
\n \n Add photo\n *\n \n
\n 0,\n 'container-attachments-required':\n inspectForm.get('fileUploadIds').invalid && inspectForm.get('fileUploadIds').touched\n }\">\n 0\"\n class=\"thumbnail-slider display-flex grid-gap-16\"\n [ngClass]=\"{ 'thumbnail-slider display-flex grid-gap-16': mappedImages.length > 0 }\">\n \n 0 ? thumbnailPlaceholder : image?.cloudUri)\"\n alt=\"Image\"\n width=\"90\"\n height=\"90\" />\n
\n \n View\n {{ mappedImages.length > 1 ? ' (' + (i + 1) + '/' + mappedImages.length + ')' : '' }}\n \n
\n
\n
\n \n \n\n \n
\n \n Add comment\n *\n \n \n \n
\n \n \n\n \n \n \n \n \n \n Done\n \n \n\n\n\n\n
\n
\n Instructions\n
\n \n \n \n
\n
\n
\n
\n \n \n Don't show again\n \n
\n
\n
\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostListener,\n Inject,\n OnInit,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MAT_BOTTOM_SHEET_DATA, MatBottomSheetRef } from '@angular/material/bottom-sheet';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\nimport { FileUploadsService } from '@app/services/file-uploads.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { PhotoViewerComponent } from '@main-application/inspections/components/photo-viewer/photo-viewer.component';\nimport {\n InspectionItemStatus,\n RestInspectionContents,\n} from '@main-application/inspections/models/rest-inspections-model.interface';\nimport { InspectionService } from '@main-application/inspections/services/inspection.service';\nimport {\n BooleanQuestion,\n EmojiDetails,\n ImageDetails,\n ResidentInspection,\n ResidentInspectionArea,\n ResidentInspectionItem,\n} from '@main-application/resident/pages/inspect/inspect.model';\nimport { ResidentInspectionsService } from '@main-application/resident/services/resident-inspections.service';\nimport { TemplateEditorDialogModule } from '@main-application/shared/template-editor-dialog/template-editor-dialog.module';\nimport { ButtonMenuComponent } from '@shared/components/button/button-menu/button-menu.component';\nimport { imageVideoFileExtensions } from '@shared/constants/file-extensions.const';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\nimport { FileUploadModel } from '@shared/interfaces';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { PipesModule } from '@shared/pipes/pipes.module';\nimport { propertyStateValidator } from '@shared/validators/propertystate.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { IconComponent } from '@ui-components/components/icon/icon.component';\nimport { MultipleAttachmentsModule } from '@ui-components/components/multiple-attachments/multiple-attachments.module';\n\n@UntilDestroy()\n@Component({\n selector: 'app-resident-inspect-details',\n templateUrl: './resident-inspect-details.component.html',\n styleUrls: ['./resident-inspect-details.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n IconComponent,\n MatButtonModule,\n MatInputModule,\n MatTooltipModule,\n MatIconModule,\n TemplateEditorDialogModule,\n ButtonMenuComponent,\n MultipleAttachmentsModule,\n PipesModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResidentInspectDetailsComponent extends PuSubscribable implements OnInit {\n cleanInputAttachment = new EventEmitter();\n EColorPalette = EColorPalette;\n EIcon = EIcon;\n inspectForm: FormGroup;\n dialogRef: MatDialogRef;\n currentItemIndex = 0;\n totalItems: number;\n onSubmitOptions = [\n {\n label: 'Done & Next',\n id: false,\n },\n {\n label: 'Done',\n id: true,\n },\n ];\n onSubmitSelected = this.onSubmitOptions[0];\n inspectionId: number;\n inspectionContentId: number;\n isCommentRequired = false;\n isPhotoRequired = false;\n mappedImages = [];\n savedMappedImages = [];\n thumbnailPlaceholder = '../../../../../../../assets/icon/zoom-in.svg';\n isUploading = false;\n hasChanges = false;\n isPhotoViewerOpened = false;\n currentArea: ResidentInspectionArea = null;\n currentAreaIndex = 0;\n initialEmojiDetails: EmojiDetails[] = [];\n initialFormData: any;\n imageVideoFileExtensions = imageVideoFileExtensions;\n\n @ViewChild('instructionsSheet') instructionsSheet: TemplateRef;\n\n constructor(\n private fb: FormBuilder,\n @Inject(MAT_BOTTOM_SHEET_DATA)\n public data: {\n id: number;\n residentInspection: ResidentInspection;\n areaId: string;\n startIndex: number;\n },\n private dialog: MatDialog,\n private bottomSheetRef: MatBottomSheetRef,\n private cdr: ChangeDetectorRef,\n private inspectionService: InspectionService,\n private residentInspectionsService: ResidentInspectionsService,\n private fileUploadsService: FileUploadsService,\n private snackbarService: SnackbarService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.currentAreaIndex = this.data.residentInspection.areas.findIndex(area => area.id === this.data.id);\n this.currentArea = this.data.residentInspection.areas[this.currentAreaIndex];\n\n this.currentItemIndex = this.data.startIndex;\n this.totalItems = this.currentArea.items.length;\n\n this.initializeForm(this.currentArea.items[this.currentItemIndex]);\n\n this.bottomSheetRef\n .backdropClick()\n .pipe(untilDestroyed(this))\n .subscribe(() => {\n this.close();\n })\n .untilDestroyed(this);\n\n const instructionKey = this.getInstructionKey(this.currentArea.items[this.currentItemIndex]);\n if (\n !this.isInstructionDismissed(instructionKey) &&\n this.currentArea.items[this.currentItemIndex].showInstructions &&\n this.currentArea.items[this.currentItemIndex].instructions\n ) {\n setTimeout(() => {\n this.openInstructions(this.currentArea.items[this.currentItemIndex].instructions);\n }, 300);\n }\n }\n\n private initializeForm(data: ResidentInspectionItem) {\n this.inspectionId = data.inspectionId;\n this.inspectionContentId = data.id;\n this.initialEmojiDetails = [];\n\n if (!this.initialEmojiDetails.length) {\n this.initialEmojiDetails = data.emojiDetails ? [...data.emojiDetails.map(emoji => ({ ...emoji }))] : [];\n }\n\n if (this.inspectForm) this.inspectForm.reset();\n this.inspectForm = this.fb.group({\n emojiDetails: [this.initialEmojiDetails.map(emoji => ({ ...emoji })), propertyStateValidator],\n itemName: [data.itemName || '', Validators.required],\n booleanQuestions: this.fb.array(this.createBooleanQuestions(data.booleanQuestions || [])),\n comment: [data.comment || null],\n fileUploadIds: [data.fileUploadIds || []],\n });\n\n this.initialFormData = JSON.parse(JSON.stringify(this.inspectForm.getRawValue()));\n\n this.mappedImages = [];\n this.loadFormDataFromLocalStorageOrProcessFileUploadIds(data);\n\n if (data.emojiDetails && data.emojiDetails.length > 0) {\n this.setValidatorsBasedOnPropertyState();\n } else {\n this.setValidatorsWithoutPropertyState(data);\n }\n\n this.inspectForm.valueChanges\n .subscribe(() => {\n this.saveFormDataToLocalStorage(data);\n })\n .untilDestroyed(this);\n\n this.cdr.detectChanges();\n }\n\n public setEmojiDefault(index: number) {\n const emojis = this.inspectForm.get('emojiDetails').value;\n emojis.forEach((emoji: EmojiDetails, i: number) => {\n emoji.isDefault = i === index;\n });\n this.inspectForm.get('emojiDetails').setValue(emojis);\n this.inspectForm.get('emojiDetails').updateValueAndValidity();\n\n this.setValidatorsBasedOnPropertyState();\n }\n\n private setValidatorsWithoutPropertyState(data: ResidentInspectionItem) {\n this.isCommentRequired = data.commentRequired;\n this.isPhotoRequired = data.photoRequired;\n\n const commentControl = this.inspectForm.get('comment');\n if (this.isCommentRequired) {\n commentControl.setValidators(Validators.required);\n } else {\n commentControl.clearValidators();\n }\n commentControl.updateValueAndValidity();\n\n const fileUploadIdsControl = this.inspectForm.get('fileUploadIds');\n if (this.isPhotoRequired && this.mappedImages.length === 0) {\n fileUploadIdsControl.setValidators(Validators.required);\n } else {\n fileUploadIdsControl.clearValidators();\n }\n fileUploadIdsControl.updateValueAndValidity();\n\n this.cdr.detectChanges();\n }\n\n private setValidatorsBasedOnPropertyState() {\n const emojis = this.inspectForm.get('emojiDetails').value;\n const selectedEmoji = emojis.find((emoji: EmojiDetails) => emoji.isDefault);\n\n this.isCommentRequired = selectedEmoji?.onSelect?.includes('commentRequired') || false;\n this.isPhotoRequired = selectedEmoji?.onSelect?.includes('photoRequired') || false;\n\n const commentControl = this.inspectForm.get('comment');\n if (this.isCommentRequired) {\n commentControl.setValidators(Validators.required);\n } else {\n commentControl.clearValidators();\n }\n commentControl.updateValueAndValidity();\n\n const fileUploadIdsControl = this.inspectForm.get('fileUploadIds');\n if (this.isPhotoRequired && this.mappedImages.length === 0) {\n fileUploadIdsControl.setValidators(Validators.required);\n } else {\n fileUploadIdsControl.clearValidators();\n }\n fileUploadIdsControl.updateValueAndValidity();\n\n this.cdr.detectChanges();\n }\n\n private createBooleanQuestions(questions: BooleanQuestion[] = []): FormGroup[] {\n return questions.map(question =>\n this.fb.group({\n question: [question.question, Validators.required],\n answer: [\n question.answer === 'true'\n ? true\n : question.answer === 'false'\n ? false\n : question.defaultAnswer === 'true'\n ? true\n : question.defaultAnswer === 'false'\n ? false\n : null,\n Validators.required,\n ], // BE requires true and false in the form of strings\n guid: [question.guid],\n })\n );\n }\n\n get booleanQuestions(): FormArray {\n return this.inspectForm.get('booleanQuestions') as FormArray;\n }\n\n public handleAttachment(attachments: AttachmentItem[]) {\n if (attachments?.length) {\n attachments.forEach(attachment => {\n const fileData = attachment.upload;\n this.mappedImages.push({\n cloudUri: fileData.cloudUri,\n fileUploadId: fileData.id,\n thumbnailUri: fileData.thumbnailUri || null,\n videoDuration: fileData.videoDurationInSeconds || null,\n });\n });\n\n Promise.resolve().then(() => {\n const key = this.residentInspectionsService.generateItemSpecificKey(\n this.currentArea.items[this.currentItemIndex]\n );\n localStorage.setItem(`${key}-images`, JSON.stringify(this.mappedImages));\n });\n\n this.setValidatorsBasedOnPropertyState();\n this.cleanInputAttachment.emit();\n this.cdr.detectChanges();\n }\n }\n\n public viewAllPhotos(images: ImageDetails[], isEditorMode = true, initialIndex = 0) {\n if (!images || images.length === 0) {\n return;\n }\n\n const imageUrls = this.mappedImages.map(image => ({\n cloudUri: image.cloudUri,\n thumbnailFileUploadCloudUri: image.thumbnailUri,\n }));\n\n if (imageUrls.length > 0) {\n const config: MatDialogConfig = {\n maxWidth: '100vw',\n minWidth: 'min(500px, 100vw)',\n height: '100vh',\n panelClass: 'photo-viewer-modal-container',\n data: {\n imageUrls,\n isEditorMode,\n initialIndex,\n },\n };\n\n this.isPhotoViewerOpened = true;\n const dialogRef = this.dialog.open(PhotoViewerComponent, config);\n\n dialogRef\n .afterClosed()\n .subscribe(result => {\n this.isPhotoViewerOpened = false;\n if (result) {\n if (!result.deletedImages) return;\n const deletedImages = result.deletedImages || [];\n const deletedFileUploadIds = this.mappedImages\n .filter(image => deletedImages.includes(image.cloudUri))\n .map(image => image.fileUploadId);\n\n const updatedFileUploadIds = this.inspectForm\n .get('fileUploadIds')\n .value.filter((id: number) => !deletedFileUploadIds.includes(id));\n this.inspectForm.get('fileUploadIds').setValue(updatedFileUploadIds);\n\n this.mappedImages = this.mappedImages.filter(image => !deletedFileUploadIds.includes(image.fileUploadId));\n\n const key = this.residentInspectionsService.generateItemSpecificKey(\n this.currentArea.items[this.currentItemIndex]\n );\n localStorage.setItem(`${key}-images`, JSON.stringify(this.mappedImages));\n\n if (this.areFileUploadIdsEqual(this.mappedImages, this.savedMappedImages)) {\n localStorage.removeItem(`${key}-images`);\n }\n\n this.cdr.markForCheck();\n }\n })\n .untilDestroyed(this);\n }\n }\n\n public submitForm(isDone = false) {\n if (this.inspectForm.invalid) {\n this.inspectForm.markAllAsTouched();\n setTimeout(() => {\n this.scrollToFirstInvalidControl();\n }, 100);\n return;\n }\n\n if (this.inspectForm.valid) {\n this.hasChanges = true;\n const updatedData = this.inspectForm.value;\n const currentItem = this.currentArea.items[this.currentItemIndex];\n\n const allFileUploadIds = [\n ...new Set([...(updatedData.fileUploadIds || []), ...this.mappedImages.map(image => image.fileUploadId)]),\n ];\n\n currentItem.surveyJSON.pages.forEach((page, pageIndex) => {\n page.elements.forEach((element, elementIndex) => {\n if (element.type === 'comment') {\n currentItem.surveyJSON.pages[pageIndex].elements[elementIndex].value = updatedData.comment;\n }\n\n if (element.type === 'file' && element.guid === updatedData.guid) {\n currentItem.surveyJSON.pages[pageIndex].elements[elementIndex].mainImage = allFileUploadIds;\n }\n\n if (element.type === 'boolean') {\n const updatedBoolean = updatedData.booleanQuestions?.find(q => q.question === element.title);\n if (updatedBoolean) {\n currentItem.surveyJSON.pages[pageIndex].elements[elementIndex].value = updatedBoolean.answer;\n }\n }\n });\n });\n\n this.currentArea.items[this.currentItemIndex] = {\n ...currentItem,\n emojiDetails: updatedData.emojiDetails,\n comment: updatedData.comment,\n booleanQuestions: updatedData.booleanQuestions,\n fileUploadIds: allFileUploadIds,\n surveyJSON: currentItem.surveyJSON,\n };\n\n const answer = this.residentInspectionsService.generateAnswer(\n this.currentArea.items,\n this.currentArea.items[this.currentItemIndex].uuid\n );\n const isCompleted = this.currentArea.items.every((item: ResidentInspectionItem) =>\n this.residentInspectionsService.getCompletedItem(item)\n );\n\n const payload = {\n id: this.currentArea.id,\n inspectionId: this.currentArea.inspectionId,\n inspectionTemplateAreaId: this.currentArea.inspectionTemplateAreaId,\n answerJSON: answer,\n status: isCompleted ? InspectionItemStatus.Completed : InspectionItemStatus.Incompleted,\n } as RestInspectionContents;\n\n this.inspectionService.queueSubmitAnswers(payload);\n\n const contentElement = document.querySelector('.inspect-form-content');\n contentElement.classList.add('fade-out');\n\n setTimeout(() => {\n contentElement.classList.remove('fade-out');\n if (isDone) {\n this.clearFormDataFromLocalStorage(this.currentArea.items[this.currentItemIndex]);\n this.bottomSheetRef.dismiss({ result: this.hasChanges });\n } else if (this.currentItemIndex === this.totalItems - 1) {\n if (this.currentAreaIndex < this.data.residentInspection.areas.length - 1) {\n this.clearFormDataFromLocalStorage(this.currentArea.items[this.currentItemIndex]);\n this.currentAreaIndex++;\n this.currentArea = this.data.residentInspection.areas[this.currentAreaIndex];\n this.currentItemIndex = 0;\n this.totalItems = this.currentArea.items.length;\n this.initializeForm(this.currentArea.items[this.currentItemIndex]);\n }\n } else {\n this.clearFormDataFromLocalStorage(this.currentArea.items[this.currentItemIndex]);\n this.currentItemIndex++;\n this.initializeForm(this.currentArea.items[this.currentItemIndex]);\n }\n }, 400);\n }\n }\n\n private scrollToFirstInvalidControl() {\n const firstInvalidControl: HTMLElement = document.querySelector('form .ng-invalid') as HTMLElement;\n\n if (firstInvalidControl) {\n firstInvalidControl.scrollIntoView({ behavior: 'smooth', block: 'center' });\n firstInvalidControl.focus();\n }\n }\n\n public markAs(id: boolean): void {\n this.onSubmitSelected = this.onSubmitOptions.find(el => el.id === id);\n }\n\n public close(): void {\n if (this.isUploading) {\n this.snackbarService.error('Please wait until the file uploads are complete.');\n return;\n }\n this.bottomSheetRef.dismiss({ result: this.hasChanges });\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n public onEscapeKeyDown(event: KeyboardEvent): void {\n if (!this.isPhotoViewerOpened) {\n this.close();\n }\n }\n\n public openInstructions(instructions: string) {\n this.dialogRef = this.dialog.open(this.instructionsSheet, {\n hasBackdrop: true,\n autoFocus: false,\n panelClass: 'instructions-container',\n position: { bottom: '0px' },\n width: '100vw',\n minWidth: '100vw',\n maxWidth: '100vw',\n data: { instructions },\n });\n }\n\n public closeInstructions(doNotShowAgain = false): void {\n if (doNotShowAgain) {\n const instructionKey = this.getInstructionKey(this.currentArea.items[this.currentItemIndex]);\n this.markInstructionAsDismissed(instructionKey);\n }\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n }\n\n private getInstructionKey(item: ResidentInspectionItem): string {\n return `${LocalStorageDataEnum.INSTRUCTIONS_DISMISSED}-${item.id}-${item.inspectionId}-${item.inspectionTemplateAreaId}-${item.uuid}`;\n }\n\n private isInstructionDismissed(key: string): boolean {\n return localStorage.getItem(key) === 'true';\n }\n\n private markInstructionAsDismissed(key: string): void {\n localStorage.setItem(key, 'true');\n }\n\n private saveFormDataToLocalStorage(item: ResidentInspectionItem) {\n if (this.inspectForm.valid) {\n const formData = JSON.parse(JSON.stringify(this.inspectForm.getRawValue()));\n const isEqualToInitial = this.deepEqual(this.initialFormData, formData);\n\n if (!isEqualToInitial) {\n const key = this.residentInspectionsService.generateItemSpecificKey(item);\n localStorage.setItem(key, JSON.stringify(formData));\n } else {\n this.clearFormDataFromLocalStorage(item);\n }\n }\n }\n\n private loadFormDataFromLocalStorageOrProcessFileUploadIds(item: ResidentInspectionItem) {\n const key = this.residentInspectionsService.generateItemSpecificKey(item);\n const storedData = localStorage.getItem(key);\n const storedImages = localStorage.getItem(`${key}-images`);\n\n if (storedImages) {\n this.mappedImages = JSON.parse(storedImages);\n const fileUploadIds = this.inspectForm.get('fileUploadIds').value;\n this.savedMappedImages = this.mappedImages.filter(image => fileUploadIds.includes(image.fileUploadId));\n } else {\n this.mappedImages = [];\n }\n\n if (storedData) {\n const parsedStoredData = JSON.parse(storedData);\n\n if (this.isLocalStorageDataCorrupted(parsedStoredData)) {\n console.error('Something went wrong. Local storage cleared.');\n this.clearFormDataFromLocalStorage(item);\n this.processFileUploadIds(item.fileUploadIds, item);\n } else {\n this.inspectForm.patchValue(parsedStoredData);\n this.processFileUploadIds(parsedStoredData.fileUploadIds, item);\n }\n } else {\n this.processFileUploadIds(item.fileUploadIds, item);\n }\n\n this.cdr.detectChanges();\n }\n\n private isLocalStorageDataCorrupted(storedData: any): boolean {\n const initialEmojis = this.initialFormData.emojiDetails;\n const storedEmojis = storedData.emojiDetails;\n if (initialEmojis?.length !== storedEmojis?.length) {\n return true;\n }\n\n const initialQuestions = this.initialFormData.booleanQuestions;\n const storedQuestions = storedData.booleanQuestions;\n if (initialQuestions?.length !== storedQuestions?.length) {\n return true;\n }\n\n if (!storedData.itemName || !storedData.fileUploadIds) {\n return true;\n }\n\n return false;\n }\n\n private processFileUploadIds(fileUploadIds: number[], item: ResidentInspectionItem) {\n fileUploadIds.forEach(fileUploadId => {\n if (!this.mappedImages.some(img => img.fileUploadId === fileUploadId)) {\n this.fileUploadsService\n .search({\n ids: [fileUploadId],\n inspectionId: item.inspectionId,\n inspectionContentId: item.id,\n })\n .subscribe(result => {\n if (result?.length) {\n const fileData: FileUploadModel = result[0];\n const imageData = {\n fileUploadId: fileData.id,\n cloudUri: fileData.cloudUri,\n thumbnailUri: fileData.thumbnailFileUploadCloudUri || null,\n videoDuration: fileData.videoDurationInSeconds || null,\n };\n\n this.mappedImages.push({ ...imageData });\n\n this.savedMappedImages = JSON.parse(JSON.stringify(this.mappedImages));\n this.cdr.markForCheck();\n }\n })\n .untilDestroyed(this);\n }\n });\n }\n\n private clearFormDataFromLocalStorage(item: ResidentInspectionItem) {\n const key = this.residentInspectionsService.generateItemSpecificKey(item);\n localStorage.removeItem(key);\n localStorage.removeItem(`${key}-images`);\n }\n\n public userClearFormDataFromLocalStorage(item: ResidentInspectionItem): void {\n const key = this.residentInspectionsService.generateItemSpecificKey(item);\n localStorage.removeItem(key);\n localStorage.removeItem(`${key}-images`);\n this.initializeForm(item);\n }\n\n private deepEqual(obj1: any, obj2: any): boolean {\n return JSON.stringify(obj1) === JSON.stringify(obj2);\n }\n\n private areFileUploadIdsEqual(arr1: any[], arr2: any[]): boolean {\n const fileUploadIds1 = arr1.map(image => image.fileUploadId).sort();\n const fileUploadIds2 = arr2.map(image => image.fileUploadId).sort();\n\n return JSON.stringify(fileUploadIds1) === JSON.stringify(fileUploadIds2);\n }\n\n public hasUnsavedData(item: ResidentInspectionItem): boolean {\n const localStorageKey = this.residentInspectionsService.generateItemSpecificKey(item);\n const hasFormData = !!localStorage.getItem(localStorageKey);\n const hasImagesData = !!localStorage.getItem(`${localStorageKey}-images`);\n\n return hasFormData || hasImagesData;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatBottomSheet } from '@angular/material/bottom-sheet';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { remove } from 'lodash';\nimport { Observable, filter, map, of, take } from 'rxjs';\n\nimport { DefaultModalConfigConstant } from '@app/modules/ui-components/modals/config/default-modal-config.constant';\nimport { PropertyUnitSelectorModalComponent } from '@main-application/service/components/property-unit-selector-modal/property-unit-selector-modal.component';\nimport { selectTenantData } from '@main-application/store/selectors/user.selectors';\nimport { UnitAttachmentType } from '@shared/enums/attachment-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { GalleryItem } from '@shared/interfaces/gallery-item';\nimport { ListUpdateAction } from '@shared/interfaces/list-update-action.interface';\nimport { ConfirmationModalData, ModalData } from '@shared/interfaces/modal-data';\nimport { RestTicketModel, RestTurnoverDataModel } from '@shared/interfaces/turnover.interface';\nimport { NewUserModel, UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\nimport { AddBidModalComponent, AddBidModalData } from '@ui-components/modals/add-bid-modal/add-bid-modal.component';\nimport { AddTicketModalComponent, TicketData } from '@ui-components/modals/add-ticket-modal/add-ticket-modal.component';\nimport {\n AddVendorUserModalComponent,\n AddVendorUserModalData,\n AddVendorUserModalResult,\n} from '@ui-components/modals/add-vendor-user-modal/add-vendor-user-modal.component';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { GalleryModalComponent } from '@ui-components/modals/gallery-modal/gallery-modal.component';\nimport { InfoModalComponent } from '@ui-components/modals/info-modal/info-modal.component';\nimport {\n NewTurnoverModalComponent,\n NewTurnoverModalData,\n} from '@ui-components/modals/new-turnover-modal/new-turnover-modal.component';\nimport {\n NextStepAssigneeModalComponent,\n NextStepAssigneeModalData,\n} from '@ui-components/modals/next-step-assignee-modal/next-step-assignee-modal.component';\nimport {\n PromptModalComponent,\n PromptModalData,\n PromptModalResult,\n} from '@ui-components/modals/prompt-modal/prompt-modal.component';\nimport {\n UserPreviewModalComponent,\n UserPreviewModalData,\n UserPreviewModalResult,\n} from '@ui-components/modals/user-preview-modal/user-preview-modal.component';\n\nimport { AddVendorModalComponent, AddVendorModalData } from './add-vendor-modal/add-vendor-modal.component';\nimport { CommentTooLongModalComponent } from './comment-too-long-modal/comment-too-long-modal.component';\nimport { ConfirmationModalComponent } from './confirmation-modal/confirmation-modal.component';\nimport { ResidentInspectDetailsComponent } from './resident-inspect-details/resident-inspect-details.component';\nimport { TurnoverPunchModalComponent } from './turnover-punch-modal/turnover-punch-modal.component';\nimport { environment } from '../../../../environments/environment';\n\nconst ModalDialogSizes = {\n xxs: '280px',\n xs: '350px',\n sm: '472px',\n md: '572px',\n lg: '650px',\n};\n\nexport type ModalDialogSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number;\n\ntype TicketModalData = ListUpdateAction | TicketData;\n\n/** Remove specific logic from base modal service. Then merge it with ModalService */\n@Injectable({ providedIn: 'root' })\nexport class ModalsService {\n nonPmsUnitCost$ = this.store.select(selectTenantData).pipe(\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.nonPmsUnitCost)\n );\n\n constructor(protected dialog: MatDialog, protected bottomSheet: MatBottomSheet, protected store: Store<{}>) {}\n\n updateDialogHiddenState(hidden: boolean, data: any) {\n const state = localStorage.getItem('dialogsHiddenByUser');\n try {\n const parsed: any[] = state ? JSON.parse(state) : [];\n if (hidden) {\n parsed.push({\n data,\n });\n } else {\n remove(parsed, d => JSON.stringify(d.data) === JSON.stringify(data));\n }\n localStorage.setItem('dialogsHiddenByUser', JSON.stringify(parsed));\n } catch (e) {}\n }\n\n isDialogHiddenByUser(data: any) {\n const state = localStorage.getItem('dialogsHiddenByUser');\n try {\n const parsed: any[] = JSON.parse(state);\n const dialog = parsed.find(d => JSON.stringify(d.data) === JSON.stringify(data));\n return dialog !== undefined;\n } catch (e) {}\n return false;\n }\n\n openInfoModal(data: ModalData) {\n return this.dialog.open(InfoModalComponent, {\n autoFocus: false,\n panelClass: 'info-modal-container',\n data,\n });\n }\n\n openCommentTooLongModal(maxCounter: number) {\n this.dialog.open(CommentTooLongModalComponent, {\n panelClass: 'comment-too-long-modal-container',\n data: maxCounter,\n });\n }\n\n openGalleryModal(data: GalleryItem) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '1170px',\n maxHeight: '100vh',\n panelClass: 'gallery-modal-container',\n data,\n };\n\n this.dialog.open(GalleryModalComponent, config);\n }\n\n openNewTurnoverModal(activeProperty: number[], isNonPms: boolean) {\n this.dialog.open(NewTurnoverModalComponent, {\n autoFocus: false,\n width: '454px',\n minHeight: '368px',\n panelClass: 'new-turnover-modal-container',\n data: { activePropertyIds: activeProperty, isNonPms: isNonPms },\n });\n }\n\n openNextStepAssigneeModal(\n turnoverData: RestTurnoverDataModel,\n workflowStep: WorkflowStepEnumType,\n propertyId: number,\n propertyName: string\n ) {\n return this.dialog.open(\n NextStepAssigneeModalComponent,\n {\n autoFocus: false,\n width: '412px',\n panelClass: 'next-step-assignee-modal-container',\n disableClose: true,\n data: {\n nextWorkflowStep: workflowStep,\n turnoverData,\n propertyId,\n propertyName,\n },\n }\n );\n }\n\n addTicketModal(data: TicketModalData, ticketType = TicketType.Other, inspectionPmsType = 0, fromServicePage = false) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '683px',\n maxHeight: '100vh',\n panelClass: 'ticket-preview-modal-container',\n data: { ...data, ticketType, inspectionPmsType, fromServicePage },\n };\n\n return this.dialog.open(AddTicketModalComponent, config);\n }\n\n openPunchModal(data: RestTicketModel) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '1171px',\n maxHeight: '100vh',\n panelClass: 'punch-modal-container',\n disableClose: true,\n data,\n };\n\n return this.dialog.open(TurnoverPunchModalComponent, config);\n }\n\n openPrompt(data: PromptModalData, size: ModalDialogSize = 'sm') {\n return this.dialog.open(PromptModalComponent, {\n ...DefaultModalConfigConstant,\n width: typeof size === 'number' ? `${size}px` : ModalDialogSizes[size],\n data,\n });\n }\n\n openNewVendorModal(data: AddVendorModalData, isMobile = false) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n maxHeight: '100vh',\n position: {\n bottom: isMobile ? '0' : '',\n },\n width: isMobile ? '100vw' : '572px',\n minWidth: isMobile ? '100vw' : '',\n maxWidth: isMobile ? '100vw' : '',\n panelClass: 'add-vendor-modal-container',\n disableClose: true,\n data,\n };\n\n return this.dialog.open(\n AddVendorModalComponent,\n config\n );\n }\n\n getAcceptChargesText() {\n return this.nonPmsUnitCost$.pipe(\n map(cost => {\n const version = environment.ver.split('.').map(e => +e);\n const isBeta = environment.apiUrl.includes('beta');\n if (isBeta && (version[0] < 5 || (version[0] == 5 && version[1] < 6))) {\n return `There will be a monthly fee of $${cost} (waived until 01/01/24) for this unit for each month it is active.`;\n }\n return `There will be a monthly fee of $${cost} for this unit for each month it is active.`;\n })\n );\n }\n\n openConfirmationModal(\n data: ConfirmationModalData,\n size: ModalDialogSize = 'sm',\n matConfig?: MatDialogConfig\n ): MatDialogRef {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: typeof size === 'number' ? `${size}px` : ModalDialogSizes[size],\n maxHeight: '80vh',\n panelClass: 'confirmation-modal-container',\n disableClose: matConfig?.disableClose ?? true,\n data,\n };\n\n if (data.doNotShowAgain && this.isDialogHiddenByUser(data)) {\n return {\n afterClosed(): Observable {\n return of(DialogResult.Success);\n },\n } as MatDialogRef;\n } else {\n return this.dialog.open(ConfirmationModalComponent, config);\n }\n }\n\n openUserPreviewModal(\n user?: UserWithGeneralRole | NewUserModel,\n preselect = false,\n isResident = false,\n tenantData = null,\n vendorId?: number,\n header?: string\n ) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '572px',\n panelClass: 'user-preview-modal-container',\n data: { user, preselect, vendorId, header, isResident, tenantData },\n };\n\n return this.dialog.open(\n UserPreviewModalComponent,\n config\n );\n }\n\n openVendorUserModal(vendorId?: number, header?: string, isMobile = false) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n position: {\n bottom: isMobile ? '0' : '',\n },\n width: isMobile ? '100vw' : '618px',\n minWidth: isMobile ? '100vw' : '',\n maxWidth: isMobile ? '100vw' : '',\n panelClass: 'add-vendor-user-modal-container',\n data: { vendorId, header },\n };\n\n return this.dialog.open(\n AddVendorUserModalComponent,\n config\n );\n }\n\n addBid(turnoverId: number) {\n const config: MatDialogConfig = {\n ...DefaultModalConfigConstant,\n width: '450px',\n panelClass: 'add-bid-modal-container',\n data: {\n turnoverId,\n },\n };\n\n return this.dialog.open(AddBidModalComponent, config);\n }\n\n openPropertyUnitSelectorModal() {\n return this.dialog.open(PropertyUnitSelectorModalComponent, {\n autoFocus: false,\n width: '454px',\n panelClass: 'property-unit-selector-modal-container',\n });\n }\n\n openResidentInspectDetails(item: any) {\n const bottomSheetRef = this.bottomSheet.open(ResidentInspectDetailsComponent, {\n data: item,\n panelClass: 'resident-inspect-details-modal',\n hasBackdrop: true,\n disableClose: true,\n autoFocus: false,\n });\n\n return bottomSheetRef.afterDismissed();\n }\n}\n","
\n
\n
\n Create non-PMS unit and turn\n \n \n New {{ systemConfigPmsName }}\n \n New Turn\n \n
\n
\n\n \n
\n
\n \n
\n
\n \n \n
\n
\n 7\"\n [attrDisable]=\"(!userUnits?.length && !form.value.PropertyId) || (unitListLoading$ | async)\"\n [label]=\"'Unit'\"\n formControlName=\"UnitId\"\n [allowClear]=\"false\"\n [attrPlaceholder]=\"'Select unit'\"\n [showValidationError]=\"showValidationError\"\n attrAppendTo=\"body\">\n\n \n
\n
\n \n
\n
\n \n
\n
\n 7\"\n [label]=\"'Start in'\"\n formControlName=\"startWorkflowStepType\"\n [allowClear]=\"false\"\n [showValidationError]=\"showValidationError\"\n attrAppendTo=\"body\">\n
\n
\n
\n
\n
\n \n \n Cancel\n \n \n
\n {{ form.value.isNonPms ? 'Create unit & turn' : 'Create turn' }}\n \n
\n \n
\n
\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { first, isNil } from 'lodash';\nimport { Observable, combineLatest, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, take } from 'rxjs/operators';\n\nimport { ComponentAbstract } from '@app/components/abstract/component.abstract';\nimport { UnitNonPmsService } from '@app/services/unit-non-pms.service';\nimport { loadUnitDetails, loadUnitList, resetUnitList } from '@dashboards/store/actions/dashboard.actions';\nimport {\n selectUnitDetails,\n selectUnitList,\n selectUnitListLoading,\n} from '@dashboards/store/selectors/dashboards.selectors';\nimport {\n selectSelectedPortfolioId,\n selectSelectedPropertyIds,\n} from '@dashboards/store/selectors/property-selector.selectors';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { selectTenantData } from '@main-application/store/selectors/user.selectors';\nimport { TurnoverForm } from '@main-application/turnovers/config/enums/turnover-form';\nimport { createNewTurnover, resetCreateNewTurnover } from '@main-application/turnovers/store/actions/turnovers.actions';\nimport {\n selectCreateTurnoverLoading,\n selectCreatedTurnover,\n} from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { selectProperties, selectPropertiesLoading } from '@portfolio/store/portfolio.selectors';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { WorkflowStepListActive } from '@shared/constants/workflow-step-list.const';\nimport { DashboardViewType } from '@shared/enums/dashboard-view-type';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getPortfolioProperties } from '@shared/functions/get-portfolio-properties.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPortfolioModel, RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { RestUnitSummaryModel } from '@shared/interfaces/rest-unit-summary-model.interface';\nimport { PostTurnoverModel } from '@shared/interfaces/turnover.interface';\nimport { UnitDetails } from '@shared/interfaces/unit-details.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { DialogResult } from '../config/dialog-result.enum';\nimport { ModalsService } from '../modals.service';\n\nexport class NewTurnoverModalData {\n activePropertyIds: number[];\n isNonPms: boolean;\n defaultWorkflowStepType?: WorkflowStepEnumType;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-new-turnover-modal',\n templateUrl: './new-turnover-modal.component.html',\n styleUrls: ['./new-turnover-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NewTurnoverModalComponent extends ComponentAbstract implements OnInit {\n form = this.formBuilder.group({\n [TurnoverForm.PROPERTY_ID]: [null as number, [Validators.required]],\n [TurnoverForm.UNIT_ID]: [null as number, [Validators.required]],\n unitName: ['non-PMS unit', [Validators.required]],\n [TurnoverForm.MOVE_OUT]: [this.timezoneService.getCurrentDateOnly(), [Validators.required]],\n startWorkflowStepType: [WorkflowStepEnumType.MoveOut, [Validators.required, this.noticeValidation()]],\n isNonPms: false,\n });\n\n portfolioItems: RestPortfolioModel[] = [];\n userPropertiesList: IRadioButtonOption[] = [];\n userProperties: IRadioButtonOption[] | IRadioButtonOption[][] = [];\n userUnits: IRadioButtonOption[] = [];\n\n selectPropertiesLoading$: Observable;\n unitListLoading$: Observable;\n unitList: UnitDetails[];\n newTurnoverLoadingInProgress$: Observable;\n systemConfigPmsName$ = this.store.select(selectTenantData).pipe(\n untilDestroyed(this),\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.pmses.split(',')[0])\n );\n nonPmsUnitCost$ = this.store.select(selectTenantData).pipe(\n untilDestroyed(this),\n filter(tenantData => !!tenantData),\n take(1),\n map(tenantData => tenantData.nonPmsUnitCost)\n );\n workflowStepTypes = WorkflowStepListActive;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: NewTurnoverModalData,\n private formBuilder: FormBuilder,\n private store: Store<{}>,\n private router: Router,\n private unitNonPmsService: UnitNonPmsService,\n private timezoneService: TimezoneService,\n private modalService: ModalsService,\n private datePipe: DatePipe,\n private snackbarService: SnackbarService\n ) {\n super(cdr);\n\n if (data.defaultWorkflowStepType) {\n this.form.controls.startWorkflowStepType.setValue(data.defaultWorkflowStepType);\n }\n }\n\n noticeValidation(): ValidatorFn {\n const today = this.timezoneService.getCurrentDateOnly();\n const tomorrow = new Date(today.setDate(today.getDate() + 1));\n return (control: FormControl): ValidationErrors | null => {\n if (!this.form?.value || control.value == WorkflowStepEnumType.Notice || today >= this.form.value.MoveOutDate) {\n return null;\n }\n\n return {\n customError: `NOTICE required if MOD < ${this.datePipe.transform(tomorrow, 'MM/dd')}`,\n };\n };\n }\n\n ngOnInit(): void {\n this.store.dispatch(resetCreateNewTurnover());\n\n this.selectPropertiesLoading$ = this.store.select(selectPropertiesLoading);\n this.unitListLoading$ = this.store.select(selectUnitListLoading);\n this.newTurnoverLoadingInProgress$ = this.store.select(selectCreateTurnoverLoading);\n\n this.form.controls.MoveOutDate.valueChanges\n .subscribe(() => this.form.controls.startWorkflowStepType.updateValueAndValidity())\n .untilDestroyed(this);\n\n this.form.controls.isNonPms.valueChanges\n .subscribe(value => {\n this.form.patchValue({\n startWorkflowStepType: value ? WorkflowStepEnumType.Reno : WorkflowStepEnumType.MoveOut,\n });\n if (value) {\n this.form.controls.unitName.enable();\n this.form.controls.UnitId.disable();\n this.modalService\n .getAcceptChargesText()\n .pipe(\n switchMap(acceptChargesText =>\n this.modalService\n .openConfirmationModal({\n cancelLabel: 'No, go back',\n confirmColor: 'warn',\n confirmLabel: 'I accept',\n title: 'Accept charges?',\n content: acceptChargesText,\n })\n .afterClosed()\n ),\n take(1),\n untilDestroyed(this),\n filter(result => result !== DialogResult.Success)\n )\n .subscribe(() => this.form.controls.isNonPms.setValue(false))\n .untilDestroyed(this);\n } else {\n this.form.controls.UnitId.addValidators(Validators.required);\n this.form.controls.unitName.disable();\n this.form.controls.UnitId.enable();\n }\n })\n .untilDestroyed(this);\n\n this.form.controls.isNonPms.setValue(this.data.isNonPms);\n\n this.store\n .select(selectSelectedPortfolioId)\n .pipe(\n untilDestroyed(this),\n filter(portfolioId => !!portfolioId),\n take(1)\n )\n .subscribe(portfolioId => {\n this.store.dispatch(\n loadUnitDetails({ propertyId: portfolioId, dashboardViewType: DashboardViewType.PORTFOLIO_WIDE_VIEW })\n );\n })\n .untilDestroyed(this);\n\n combineLatest([this.store.select(selectUnitDetails), this.store.select(selectUnitList)])\n .pipe(\n filter(() => !!this.form.value.PropertyId),\n untilDestroyed(this)\n )\n .subscribe(([unitDetails, unitList]) => {\n this.userUnits = this.getUnitList(unitList, unitDetails);\n\n if (unitDetails) {\n this.unitList = unitDetails;\n const nonPmsUnitMaxNumber = unitDetails\n .flatMap(e => e.unitName)\n .filter(unitName => /^non-PMS unit[0-9]*$/.test(unitName))\n .map(unitName => +unitName.replace('non-PMS unit', ''))\n .reduce((max, nextValue) => (nextValue >= max ? nextValue + 1 : max), 0);\n\n const unitName = 'non-PMS unit' + (nonPmsUnitMaxNumber == 0 ? '' : nonPmsUnitMaxNumber);\n\n this.form.controls.unitName.setValue(unitName);\n }\n\n this.cdr.markForCheck();\n })\n .untilDestroyed(this);\n\n this.store\n .select(selectProperties)\n .pipe(\n untilDestroyed(this),\n filter((userProperties: RestPropertyModel[]) => !!userProperties)\n )\n .subscribe((userProperties: RestPropertyModel[]) => {\n this.userPropertiesList = getPortfolioProperties(userProperties);\n\n if (this.data?.activePropertyIds?.length) {\n const activeProperties: IRadioButtonOption[] = [];\n const otherProperties: IRadioButtonOption[] = [];\n\n this.userPropertiesList.forEach((item: IRadioButtonOption) => {\n if (this.data.activePropertyIds?.includes(item.value)) {\n activeProperties.push(item);\n } else {\n otherProperties.push(item);\n }\n });\n\n this.userProperties = [activeProperties, otherProperties];\n } else {\n this.userProperties = [...this.userPropertiesList];\n }\n\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n\n this.store\n .select(selectCreatedTurnover)\n .pipe(\n untilDestroyed(this),\n filter(createdTurnover => !!createdTurnover)\n )\n .subscribe(createdTurnover => {\n let successMessage: string;\n if (this.form.value.isNonPms) {\n const unitName = this.form.value.unitName;\n successMessage = `Turn created for ${unitName}`;\n } else {\n const unitName = this.userUnits.find(e => e.value === this.form?.value?.UnitId)?.label;\n const propertyName = this.userPropertiesList.find(e => e.value === this.form.value.PropertyId)?.label;\n successMessage = `Turn created for ${propertyName} - ${unitName}`;\n }\n this.store.dispatch(resetUnitList());\n\n this.dialogRef.close();\n this.reloadRoute().then(() =>\n this.router\n .navigate([AppRoutes.TURNOVERS, `${createdTurnover.id}`], {\n queryParamsHandling: 'merge',\n })\n .then(() => this.snackbarService.success(successMessage))\n );\n })\n .untilDestroyed(this);\n\n this.form.controls.PropertyId.valueChanges\n .pipe(untilDestroyed(this))\n .subscribe(propertyId => {\n if (!isNil(propertyId)) {\n this.store.dispatch(loadUnitList({ propertyId }));\n }\n this.form.controls.UnitId.reset();\n })\n .untilDestroyed(this);\n\n this.store\n .select(selectSelectedPropertyIds)\n .pipe(untilDestroyed(this), take(1), filter(Boolean))\n .subscribe(propertyIds => {\n if (this.userProperties.length) {\n if (this.data.activePropertyIds.length) {\n this.form.controls.PropertyId.setValue(this.userProperties[0][0].value);\n } else {\n this.form.controls.PropertyId.setValue(first(propertyIds));\n }\n }\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n\n if (!this.data.defaultWorkflowStepType) {\n this.form.controls.MoveOutDate.valueChanges\n .pipe(untilDestroyed(this))\n .subscribe(moveOutDate => {\n if (moveOutDate > this.timezoneService.getCurrentDateOnly()) {\n this.form.controls.startWorkflowStepType.setValue(WorkflowStepEnumType.Notice);\n } else {\n this.form.controls.startWorkflowStepType.setValue(WorkflowStepEnumType.MoveOut);\n }\n })\n .untilDestroyed(this);\n }\n\n this.unitControlChanges();\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n newTurnover() {\n if (this.form.invalid) {\n this.showValidationError = true;\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n const unitId$ = this.form.value.isNonPms\n ? this.unitNonPmsService.add({\n propertyId: this.form.value.PropertyId,\n name: this.form.value.unitName,\n })\n : of(this.form.value.UnitId);\n\n unitId$\n .subscribe(unitId => {\n const postTurnoverModel: PostTurnoverModel = {\n unitId: unitId,\n propertyId: this.form.value.PropertyId,\n dateMoveOut: this.form.value.MoveOutDate,\n startWorkflowStepType: this.form.value.startWorkflowStepType,\n };\n\n this.store.dispatch(createNewTurnover({ postTurnoverModel }));\n })\n .untilDestroyed(this);\n }\n\n private getUnitList(unitList: RestUnitSummaryModel[] = [], unitDetails: UnitDetails[]): IRadioButtonOption[] {\n if (!unitList?.length) {\n return [];\n }\n let unitDetailsMap = new Map();\n if (unitDetails) {\n unitDetailsMap = new Map(\n unitDetails.map(el => [el.unitId, { isInTurnover: el.isInTurnover, workflowStep: el.workflowStep }])\n );\n }\n\n return unitList\n .filter(u => !u.doNotAutoCreateTurns)\n .map>(item => {\n return {\n value: item.id,\n label: this.getLabel(unitDetailsMap, item),\n };\n });\n }\n\n private getLabel(\n unitDetailsMap: Map,\n item: RestUnitSummaryModel\n ): string {\n return unitDetailsMap.has(item.id) && unitDetailsMap.get(item.id).isInTurnover\n ? `${item.name} - ${unitDetailsMap.get(item.id).workflowStep}`\n : item.name;\n }\n\n private reloadRoute(): Promise {\n return this.router.navigateByUrl('/', { skipLocationChange: true });\n }\n\n private unitControlChanges(): void {\n this.form.controls.UnitId.valueChanges\n .pipe(\n distinctUntilChanged(),\n filter(el => !!el),\n untilDestroyed(this)\n )\n .subscribe(unitId => {\n const unit = this.unitList.find(el => el.unitId === unitId);\n if (!unit) return;\n\n if (unit.isInTurnover) {\n this.snackbarService.error(\n `${unit?.unitName} is an active turn in ${unit?.workflowStep}. Please select another unit`\n );\n this.form.controls.UnitId.setValue(null, { emitEvent: false });\n this.form.updateValueAndValidity();\n return;\n }\n this.snackbarService.dismiss();\n })\n .untilDestroyed(this);\n }\n\n get allowSearchUserProperties(): boolean {\n const secondElement = this.userProperties?.[1];\n return Array.isArray(secondElement) && secondElement.length > 7;\n }\n}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\nimport { TurnoverDateRangeModule } from '@main-application/turnovers/components/sections/turnover-date-range/turnover-date-range.module';\nimport { DateDropdownModule } from '@ui-components/controls/date-dropdown/date-dropdown.module';\nimport { InputModule } from '@ui-components/controls/input/input.module';\nimport { RadioButtonDropdownModule } from '@ui-components/controls/radio-button-dropdown/radio-button-dropdown.module';\nimport { SlideToggleComponent } from '@ui-components/controls/slide-toggle/slide-toggle.component';\n\nimport { NewTurnoverModalComponent } from './new-turnover-modal.component';\n\n@NgModule({\n declarations: [NewTurnoverModalComponent],\n imports: [\n InputModule,\n SlideToggleComponent,\n MatDialogModule,\n ReactiveFormsModule,\n TurnoverDateRangeModule,\n RadioButtonDropdownModule,\n CommonModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n DateDropdownModule,\n ],\n providers: [DatePipe],\n})\nexport class NewTurnoverModalModule {}\n","
\n
\n
\n Choose new assignee for {{ data.nextWorkflowStep | enumerationValue: workflowStepList }}\n
\n
\n\n \n
\n
\n \n\n \n\n remember my choice\n
\n\n
\n \n \n
\n Done\n \n
\n \n
\n
\n \n Over this message?\n \n Choose all assignees here\n \n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ActivatedRoute } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { UserService } from '@app/services/user.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { selectUpdateStepAssigneeInProgress } from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { WorkflowStepListConst } from '@shared/constants/workflow-step-list.const';\nimport { ManagementRoute } from '@shared/enums/management-route.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestTurnoverDataModel } from '@shared/interfaces/turnover.interface';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\n\nexport class NextStepAssigneeModalData {\n nextWorkflowStep: WorkflowStepEnumType;\n turnoverData: RestTurnoverDataModel;\n propertyId: number;\n propertyName: string;\n}\n\n@UntilDestroy()\n@Component({\n selector: 'app-next-step-assignee-modal',\n templateUrl: './next-step-assignee-modal.component.html',\n styleUrls: ['./next-step-assignee-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NextStepAssigneeModalComponent extends PuSubscribable implements OnInit {\n form = this.formBuilder.group({\n assigneeId: [null as number, [Validators.required]],\n rememberIt: [false as boolean],\n });\n\n userListModel: RestUserModel[] = [];\n propertyUserListLoading$ = new BehaviorSubject(true);\n updateInProgress$: Observable;\n currentWorkflowStep: WorkflowStepEnumType;\n ManagementRoute = ManagementRoute;\n workflowStepList: IRadioButtonOption[] = WorkflowStepListConst;\n\n get propertyId() {\n return this.data.propertyId ?? this.data.turnoverData.property.id;\n }\n\n get propertyName() {\n return this.data.propertyName ?? this.data.turnoverData.property.name;\n }\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected store: Store<{}>,\n protected activatedRoute: ActivatedRoute,\n protected formBuilder: FormBuilder,\n private userService: UserService,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: NextStepAssigneeModalData\n ) {\n super();\n this.currentWorkflowStep = this.data.turnoverData.activeWorkflowStepType;\n }\n\n ngOnInit(): void {\n this.updateInProgress$ = this.store.select(selectUpdateStepAssigneeInProgress);\n\n this.propertyUserListLoading$.next(true);\n this.userService\n .getCachedPropertyUserList(this.propertyId, true)\n .pipe(untilDestroyed(this))\n .subscribe(userListModel => {\n this.propertyUserListLoading$.next(false);\n this.userListModel = userListModel;\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n close() {\n this.dialogRef.close();\n }\n\n save() {\n const { assigneeId, rememberIt } = this.form.value;\n const workflowAction: WorkflowAction = {\n turnoverId: this.data.turnoverData.id,\n nextWorkflowStep: this.data.nextWorkflowStep,\n assigneeId,\n rememberIt,\n };\n\n this.dialogRef.close(workflowAction);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nimport { InputComponent } from '@ui-components/controls/input/input.component';\n\nexport interface PromptModalData {\n title: string;\n fieldName: string;\n fieldPlaceholder?: string;\n minLength?: number;\n okButtonText?: string;\n okButtonColor?: ThemePalette;\n cancelButtonColor?: ThemePalette;\n}\n\nexport interface PromptModalResult {\n value: string;\n}\n\n@Component({\n selector: 'app-prompt-modal',\n templateUrl: './prompt-modal.component.html',\n styleUrls: ['./prompt-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PromptModalComponent implements OnInit, AfterViewInit {\n form: UntypedFormGroup;\n isSubmitted: boolean;\n\n @ViewChild(InputComponent) input: InputComponent;\n\n get displayName() {\n return this.form.controls.displayName as UntypedFormControl;\n }\n\n constructor(\n protected cdr: ChangeDetectorRef,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: PromptModalData,\n private formBuilder: UntypedFormBuilder\n ) {\n this.data.okButtonText = this.data.okButtonText || 'Add';\n this.data.okButtonColor = this.data.okButtonColor || 'primary';\n this.data.cancelButtonColor = this.data.cancelButtonColor || 'warn';\n }\n\n ngOnInit(): void {\n this.initForm();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.input?.focus();\n }, 0);\n }\n\n cancel() {\n this.dialogRef.close(null);\n }\n\n save() {\n this.isSubmitted = true;\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n this.dialogRef.close({ value: this.form.controls.displayName.value });\n }\n\n private initForm() {\n this.form = this.formBuilder.group({\n displayName: [null, [Validators.required]],\n });\n\n if (this.data.minLength > 0) {\n this.displayName.addValidators(Validators.minLength(this.data.minLength));\n }\n }\n}\n","
\n

{{ data.title }}

\n \n
\n
\n \n
\n
\n
\n \n \n \n \n
\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromPunchReducer from '../reducers/punch.reducer';\n\nconst selectPunchState = createFeatureSelector(fromPunchReducer.punchFeatureKey);\n\nexport const selectPunchesByTurnoverId = createSelector(selectPunchState, state => state.punchesByTurnoverId);\nexport const selectSelectedPunch = createSelector(selectPunchState, state => state.selectedPunch);\n","export enum TurnoverPunchFields {\n DueDate = 'DueDate',\n Priority = 'Priority',\n Title = 'Title',\n Description = 'Description',\n Attachment = 'Attachment',\n Unit = 'Unit',\n}\n","import { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\n\nexport function getAttachmentToEntityParams(\n attachmentItem: AttachmentItem,\n ticketId: number\n): UpdateTypedAttachmentToEntityModel {\n let params: UpdateTypedAttachmentToEntityModel = {\n description: '',\n externalUrl: '',\n title: '',\n unitId: 0,\n propertyId: 0,\n portfolioId: 0,\n turnoverIds: [],\n applianceId: 0,\n bidId: 0,\n ticketId: ticketId,\n attachmentType: TicketAttachmentType.Attachment,\n };\n\n if (attachmentItem?.link) {\n params = {\n ...params,\n externalUrl: attachmentItem.link,\n };\n } else {\n params = {\n ...params,\n fileUploadId: attachmentItem?.upload?.id,\n title: attachmentItem?.upload?.originalFileName,\n description: attachmentItem?.upload?.originalFileName,\n };\n }\n\n return params;\n}\n","
\n

{{ isNewPunch ? 'Create New Punch' : 'Edit Punch' }}

\n \n
\n
\n
\n
\n
Unit
\n
{{ turnoverUnitName$ | async }}
\n
\n\n
\n \n \n
\n \n \n \n
\n
\n \n\n \n
\n
\n
\n
\n \n \n\n \n
\n {{ isNewPunch ? 'Create and go to PUNCH' : 'Edit' }}\n \n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { each } from 'lodash';\nimport { Observable, filter, iif, mergeMap, of, take, tap, withLatestFrom } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { getElapsedDaysThresholds } from '@main-application/management/pages/turnover-configuration/store/actions/turnover-configuration.actions';\nimport { selectThresholdsConfiguration } from '@main-application/management/pages/turnover-configuration/store/selectors/turnover-configuration.selectors';\nimport { deleteFile } from '@main-application/store/actions/file-upload.actions';\nimport {\n clearSelectedPunch,\n loadPunchesByTurnoverId,\n sendPunch,\n sendPunchFinished,\n} from '@main-application/turnovers/store/actions/punch.actions';\nimport {\n deleteFileFromRepository,\n deleteTurnoverTicketAttachment,\n setTicketAttachment,\n setTicketAttachmentSuccess,\n} from '@main-application/turnovers/store/actions/turnovers.actions';\nimport { selectSelectedPunch } from '@main-application/turnovers/store/selectors/punch.selectors';\nimport {\n selectTurnoverDataId,\n selectTurnoverUnitName,\n} from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { PriorityTypeListConst } from '@shared/constants/priority-type-list.const';\nimport { TicketAttachmentType } from '@shared/enums/attachment-type';\nimport { PriorityType } from '@shared/enums/priority-type';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { TicketType } from '@shared/enums/ticket-type';\nimport { TurnoverPunchFields } from '@shared/enums/turnover-punch-fields.enum';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport { getAttachmentToEntityParams } from '@shared/functions/ticket-attachment.utils';\nimport { AttachmentItem } from '@shared/interfaces/attachment-item';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { TurnoverPunch } from '@shared/interfaces/turnover-punch';\nimport { RestTicketModel } from '@shared/interfaces/turnover.interface';\nimport { TurnoverAttachmentPipe } from '@shared/pipes/turnover-attachment.pipe';\n\nimport { DialogResult } from '../config/dialog-result.enum';\n\n@UntilDestroy()\n@Component({\n selector: 'app-turnover-punch-modal',\n templateUrl: './turnover-punch-modal.component.html',\n styleUrls: ['./turnover-punch-modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TurnoverPunchModalComponent extends PuSubscribable implements OnInit {\n TicketAttachmentType = TicketAttachmentType;\n TicketStatusType = TicketStatusType;\n form: UntypedFormGroup;\n isNewPunch = false;\n newAttachment: AttachmentItem;\n allAttachments: RestGenericTypedAttachment[];\n cleanInputAttachment: EventEmitter = new EventEmitter();\n isCompleted: boolean;\n turnoverUnitName$: Observable;\n inProgress = false;\n\n readonly priorityItems: IRadioButtonOption[] = PriorityTypeListConst;\n\n constructor(\n private fb: UntypedFormBuilder,\n @Inject(MAT_DIALOG_DATA) public data: RestTicketModel,\n private dialogRef: MatDialogRef,\n private store: Store<{}>,\n private actions$: Actions,\n private cdr: ChangeDetectorRef,\n private timezoneService: TimezoneService,\n private turnoverAttachment: TurnoverAttachmentPipe\n ) {\n super();\n }\n\n get dueDate(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.DueDate) as UntypedFormControl;\n }\n\n get priority(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Priority) as UntypedFormControl;\n }\n\n get title(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Title) as UntypedFormControl;\n }\n\n get description(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Description) as UntypedFormControl;\n }\n\n get attachment(): UntypedFormControl {\n return this.form.get(TurnoverPunchFields.Attachment) as UntypedFormControl;\n }\n\n ngOnInit(): void {\n this.isNewPunch = !this.data.id;\n this.isCompleted = this.data?.ticketStatusType === TicketStatusType.Resolved;\n this.allAttachments = this.data?.allAttachments;\n\n /* reset modal */\n this.store.dispatch(clearSelectedPunch());\n this.store.dispatch(getElapsedDaysThresholds());\n\n /**\n * after deleting attachment on existing punch\n * it will be reloaded\n */\n this.store\n .select(selectSelectedPunch)\n .pipe(\n untilDestroyed(this),\n filter(Boolean),\n tap(punch => {\n this.data = punch;\n this.allAttachments = this.data?.allAttachments;\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.turnoverUnitName$ = this.store.select(selectTurnoverUnitName);\n this.store\n .select(selectThresholdsConfiguration)\n .pipe(untilDestroyed(this), filter(Boolean), take(1))\n .subscribe(config => {\n const punchLowThreshold = config.stepThresholds.find(\n e => e.workflowStepEnumType === WorkflowStepEnumType.Punch\n )?.lowThresholdValue;\n const currentDate = this.timezoneService.getCurrentDateOnly();\n const defaultDate = new Date(currentDate.setDate(currentDate.getDate() + punchLowThreshold));\n\n this.form = this.fb.group({\n [TurnoverPunchFields.DueDate]: [this.data?.dueDate ?? defaultDate, Validators.required],\n [TurnoverPunchFields.Priority]: [this.data?.ticketPriorityType ?? PriorityType.Medium, Validators.required],\n // let's hardcode title as \"Punch List\" for now - lyman\n // [TurnoverPunchFields.Title]: [this.data?.name, Validators.maxLength(50)],\n [TurnoverPunchFields.Title]: ['Punch List', Validators.maxLength(255)],\n [TurnoverPunchFields.Description]: [this.data?.detailedInformation, Validators.maxLength(500)],\n [TurnoverPunchFields.Attachment]: [],\n });\n this.cdr.detectChanges();\n })\n .untilDestroyed(this);\n }\n\n deletePunchAttachment(attachment: RestGenericTypedAttachment) {\n const ticketType = TicketType.Punch;\n this.store.dispatch(deleteTurnoverTicketAttachment({ ticketType, attachment, ticketId: this.data.id }));\n }\n\n deleteNewPunchAttachment() {\n if (this.newAttachment?.upload) {\n this.store.dispatch(deleteFile({ fileId: this.newAttachment?.upload?.id }));\n }\n this.cleanInputAttachment.emit();\n this.newAttachment = null;\n this.cdr.detectChanges();\n }\n\n private removeAttachmentsIfNeeded() {\n if (this.hasAttachments()) {\n each(this.getAttachments(), item => this.deletePunchAttachment(item));\n }\n }\n\n addAttachment(attachmentItem: AttachmentItem) {\n const isNewTicket = !this.data.id;\n\n if (isNewTicket) {\n if (attachmentItem?.upload?.id !== this.newAttachment?.upload?.id && this.newAttachment?.upload?.id) {\n this.store.dispatch(deleteFileFromRepository({ fileId: this.newAttachment?.upload?.id }));\n }\n this.newAttachment = attachmentItem;\n } else {\n this.removeAttachmentsIfNeeded();\n\n this.store.dispatch(\n setTicketAttachment({\n ticketType: TicketType.Punch,\n attachmentToEntity: getAttachmentToEntityParams(attachmentItem, this.data.id),\n })\n );\n }\n\n this.cdr.detectChanges();\n }\n\n cancel() {\n this.close(DialogResult.Fail);\n }\n\n private close(result: DialogResult) {\n if (this.newAttachment?.upload) {\n this.store.dispatch(deleteFile({ fileId: this.newAttachment?.upload?.id }));\n }\n\n this.dialogRef.close(result);\n }\n\n private getAttachments(): RestGenericTypedAttachment[] {\n return this.turnoverAttachment.transform(this.data.allAttachments, TicketAttachmentType.Attachment);\n }\n\n hasAttachments(): boolean {\n const attachments = this.getAttachments();\n\n return this.isNewPunch ? !!this.newAttachment : !!attachments?.length;\n }\n\n send() {\n if (!this.form.valid) {\n this.form.markAllAsTouched();\n this.cdr.detectChanges();\n return;\n }\n\n this.inProgress = true;\n const formValue = this.form.value as TurnoverPunch;\n const punch = {\n ...this.data,\n dueDate: formValue.DueDate,\n ticketPriorityType: formValue.Priority,\n name: formValue.Title || '',\n detailedInformation: formValue.Description || '',\n } as RestTicketModel;\n\n this.store.dispatch(sendPunch({ punch }));\n\n const attachmentAdded$ = this.actions$.pipe(\n ofType(setTicketAttachmentSuccess),\n take(1),\n tap(() => {\n this.newAttachment = null;\n this.cdr.detectChanges();\n })\n );\n\n /* send punch and assign attachment if needed */\n this.actions$\n .pipe(\n untilDestroyed(this),\n ofType(sendPunchFinished),\n take(1),\n mergeMap(action => {\n const isNewTicket = !this.data.id;\n\n const addAttachmentAndWaitForSuccess$ = of(action.punch.id).pipe(\n tap(id => {\n this.store.dispatch(\n setTicketAttachment({\n ticketType: TicketType.Punch,\n attachmentToEntity: getAttachmentToEntityParams(this.newAttachment, action.punch.id),\n })\n );\n }),\n mergeMap(() => attachmentAdded$)\n );\n\n return iif(() => isNewTicket, addAttachmentAndWaitForSuccess$, of(null));\n }),\n withLatestFrom(this.store.select(selectTurnoverDataId)),\n tap(([, turnoverId]) => {\n this.store.dispatch(loadPunchesByTurnoverId({ turnoverId }));\n this.close(DialogResult.Success);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","
\n
\n

{{ header }}

\n \n
\n\n \n
\n \n
\n \n
\n
\n \n
\n
\n 7\"\n [attrDisable]=\"!(properties$ | async)?.length\"\n [label]=\"'Property'\"\n [formControl]=\"propertyId\"\n [displaySkeleton]=\"isLoading\"\n [allowClear]=\"true\"\n [listLoading]=\"selectPropertiesLoading$ | async\"\n [attrPlaceholder]=\"(selectPropertiesLoading$ | async) ? 'Loading properties…' : 'Select property'\"\n [labelRequired]=\"true\"\n [showValidationError]=\"isSubmitted\"\n attrAppendTo=\"body\">\n 7\"\n [attrDisable]=\"!(units$ | async)?.length || !propertyId?.value\"\n [label]=\"'Unit'\"\n [formControl]=\"unitId\"\n [displaySkeleton]=\"isLoading\"\n [allowClear]=\"false\"\n [labelRequired]=\"true\"\n [listLoading]=\"unitListLoading$ | async\"\n [attrPlaceholder]=\"(unitListLoading$ | async) ? 'Loading units…' : 'Select unit'\"\n [showValidationError]=\"isSubmitted\"\n attrAppendTo=\"body\">\n
\n
\n \n \n
\n\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n\n \n
\n
\n
\n
\n \n Register email as user login\n \n \n
\n
\n
\n
\n \n Register phone number as user login\n \n \n
\n
\n
\n
\n
\n
\n \n
\n\n
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n
\n\n
\n \n
\n
\n
\n
\n
\n \n
\n \n \n
\n {{ userGroupType.value === UserType.Resident ? saveResidentButtonText : saveButtonText }}\n \n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Store } from '@ngrx/store';\nimport { some } from 'lodash';\nimport { BehaviorSubject, Observable, combineLatest, shareReplay } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, takeWhile, tap } from 'rxjs/operators';\n\nimport { loadUnitList } from '@dashboards/store/actions/dashboard.actions';\nimport { selectUnitList, selectUnitListLoading } from '@dashboards/store/selectors/dashboards.selectors';\nimport { selectSelectedPortfolioId } from '@dashboards/store/selectors/property-selector.selectors';\nimport { AdministrationAbstract } from '@main-application/administration/abstract/administration-abstract';\nimport { VENDOR_ROLE_NAME } from '@main-application/administration/constants/vendor-role-name.constant';\nimport { combineUserWithProperties } from '@main-application/administration/functions/combineUserWithProperties';\nimport { formatPropertyStructureToTree } from '@main-application/administration/functions/propertyStructureToTree';\nimport { prepareSelectedUserToPropertyMappings } from '@main-application/administration/functions/userToPropertyMappingHandlers';\nimport {\n clearUserPreviewData,\n inviteNewResidentUser,\n inviteNewUser,\n loadAllGeneralRoles,\n updateResidentUserData,\n updateUserData,\n} from '@main-application/administration/store/actions/administration.actions';\nimport {\n selectAllPropertiesStructure,\n selectAllUserToPropertyMappings,\n selectAllUsersWithGeneralRoles,\n selectAssignUserIntoPropertyInProgress,\n selectAssignUserIntoPropertyStatus,\n selectInactiveUsers,\n selectRemovingPropertyAssignedUserInProgress,\n selectRemovingPropertyAssignedUserStatus,\n selectSaveUserToGeneralRoleInProgress,\n selectSaveUserToGeneralRoleStatus,\n selectUserInviteInProgress,\n selectUserInviteStatus,\n selectUserInvited,\n selectUserUpdateInProgress,\n selectUserUpdateStatus,\n} from '@main-application/administration/store/selectors/administration.selectors';\nimport { UserPreview, UserPreviewFields } from '@main-application/administration/users/config/enums/user-preview';\nimport { allPortfoliosValue } from '@main-application/application-menu/property-selector/constants';\nimport { loadAllUserProperties } from '@main-application/store/actions/user.actions';\nimport { selectNativeLanguagesEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { selectUserData } from '@main-application/store/selectors/user.selectors';\nimport { getCompanyList } from '@main-application/turnovers/store/actions/turnovers.actions';\nimport {\n selectCompanyList,\n selectCompanyListLoading,\n} from '@main-application/turnovers/store/selectors/turnovers.selectors';\nimport { loadAllUserPortfolios } from '@portfolio/store/portfolio.actions';\nimport { selectProperties, selectPropertiesLoading } from '@portfolio/store/portfolio.selectors';\nimport { EColorPalette } from '@shared/enums/color-palette.enum';\nimport { EIcon } from '@shared/enums/icon.enum';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { UpdateStatus } from '@shared/enums/update-status';\nimport { UserType } from '@shared/enums/user-type';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { getCompanyRadioList } from '@shared/functions/get-company-radio-list.function';\nimport { getEnumerationRadioListFunction } from '@shared/functions/get-enumeration-radio-list.function';\nimport { getPortfolioProperties } from '@shared/functions/get-portfolio-properties.function';\nimport { RestCompanyModel } from '@shared/interfaces/companies.interface';\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { RestPropertyModel } from '@shared/interfaces/rest-portfolio-model.interface';\nimport { TenantData } from '@shared/interfaces/tenant-data';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport {\n NewUserModel,\n UserWithGeneralRole,\n UserWithGeneralRoleAndUnits,\n} from '@shared/interfaces/user-with-general-role';\nimport { UserWithProperties } from '@shared/interfaces/user-with-properties';\nimport {\n InviteResidentUserModel,\n InviteRestUserModel,\n RestUserModel,\n UpdateResidentUserModel,\n UpdateRestUserModel,\n} from '@shared/interfaces/user.interface';\nimport { PendingService } from '@shared/services/pending.service';\nimport { UserExistsValidator } from '@shared/validators/user-exists.validator';\nimport { UserInactiveValidator } from '@shared/validators/user-inactive.validator';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { DialogResult } from '@ui-components/modals/config/dialog-result.enum';\nimport { ModalsService } from '@ui-components/modals/modals.service';\nimport { EmailPatternValidator, correctEmailInput } from '@ui-components/validators/email.validator';\nimport { PhoneNumberValidator } from '@ui-components/validators/phone.validator';\nimport { RequiredOneOfValidator } from '@ui-components/validators/required-one-of.validator';\n\nexport interface UserPreviewModalData {\n vendorId?: number;\n header?: string;\n user: UserWithGeneralRoleAndUnits | NewUserModel;\n preselect: boolean;\n isResident: boolean;\n tenantData?: TenantData;\n}\n\nexport interface UserPreviewModalResult {\n invitedUser: RestUserModel;\n}\n\nconst SuperUserRole = 1;\nexport const residentRoleId = 1000;\n\n@UntilDestroy()\n@Component({\n selector: 'app-user-preview-modal',\n templateUrl: './user-preview-modal.component.html',\n styleUrls: ['./user-preview-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class UserPreviewModalComponent extends AdministrationAbstract implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n isLoading = true;\n EIcon = EIcon;\n EColorPalette = EColorPalette;\n\n defaultCode = 1; // USA & Canada\n warningMessage = '';\n selectedProperties: PropertyBasicInfo[] = [];\n propertiesToSelect: PropertyBasicInfo[] = [];\n arePropertiesChanged = false;\n root = [];\n isSubmitted = false;\n nativeLanguages: IRadioButtonOption[] = [];\n companyRadioList: IRadioButtonOption[] = [];\n companyListLoading$: Observable;\n\n userToPropertyMapping: UserToPropertyMapping[];\n selectedUsersWithProperties: UserWithProperties[];\n\n header: string;\n saveButtonText: string;\n isSuperUser: boolean;\n skipDialogClose = false;\n portfolioId!: number;\n properties$: Observable[]> = this.getProperties();\n properties: RestPropertyModel[] = [];\n units$ = new BehaviorSubject[] | null>(null);\n selectPropertiesLoading$: Observable = this.store.select(selectPropertiesLoading);\n unitListLoading$: Observable = this.store.select(selectUnitListLoading);\n saveResidentButtonText = this.data.user ? 'Save' : 'Create Resident';\n federatedIssuerDomains: string[];\n domainExist$ = new BehaviorSubject(false);\n phoneNumberInvalid = false;\n\n constructor(\n protected cdr: ChangeDetectorRef,\n protected store: Store<{}>,\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: UserPreviewModalData,\n private formBuilder: FormBuilder,\n private modalsService: ModalsService,\n private readonly pendingService: PendingService,\n private snackbarService: SnackbarService\n ) {\n super(cdr, store);\n\n this.header = data.header || (data.user && !data.preselect ? 'Edit user' : 'Add new user');\n this.saveButtonText = data.vendorId\n ? 'Add and Assignee'\n : data.user && !data.preselect\n ? 'Save'\n : 'Send invitation';\n }\n\n private userTypesListWithPermissions = [\n {\n value: UserType.Employee,\n label: 'Employee',\n permission: PermissionLevelType.Management_Users,\n },\n {\n value: UserType.Contractor,\n label: 'Vendor',\n permission: PermissionLevelType.Management_Users,\n },\n {\n value: UserType.Resident,\n label: 'Resident',\n permission: PermissionLevelType.Management_Residents,\n },\n ];\n\n get userTypeListAllowed() {\n const getUserPermissionLevel = this.userData?.permissionLevel;\n\n if (!getUserPermissionLevel) return [];\n\n return this.userTypesListWithPermissions.filter(userType =>\n checkPermissionLevel(getUserPermissionLevel, userType.permission)\n );\n }\n\n get firstName(): FormControl {\n return this.form.get(UserPreviewFields.FirstName) as FormControl;\n }\n\n get federatedIssuerAssigneeId(): FormControl {\n return this.form.get(UserPreviewFields.FederatedIssuerAssigneeId) as FormControl;\n }\n\n get lastName(): FormControl {\n return this.form.get(UserPreviewFields.LastName) as FormControl;\n }\n\n get email(): FormControl {\n return this.form.get(UserPreviewFields.Email) as FormControl;\n }\n\n get userGroupType(): FormControl {\n return this.form.get(UserPreviewFields.UserGroupType) as FormControl;\n }\n\n get propertyId(): FormControl {\n return this.form.get(UserPreviewFields.PropertyId) as FormControl;\n }\n\n get unitId(): FormControl {\n return this.form.get(UserPreviewFields.UnitId) as FormControl;\n }\n\n get roleId(): FormControl {\n return this.form.get(UserPreviewFields.RoleId) as FormControl;\n }\n\n get companyId(): FormControl {\n return this.form.get(UserPreviewFields.CompanyId) as FormControl;\n }\n\n get phoneNumber(): FormControl {\n return this.form.get(UserPreviewFields.PhoneNumber) as FormControl;\n }\n\n get phoneNumberAddedAsIdentity(): FormControl {\n return this.form.get(UserPreviewFields.PhoneNumberAddedAsIdentity) as FormControl;\n }\n\n get emailAddedAsIdentity(): FormControl {\n return this.form.get(UserPreviewFields.EmailAddedAsIdentity) as FormControl;\n }\n\n get nativeLanguage(): FormControl {\n return this.form.get(UserPreviewFields.NativeLanguage) as FormControl;\n }\n\n ngOnInit(): void {\n this.pendingService.pending$\n .pipe(\n takeWhile(data => data !== false, true),\n delay(300)\n )\n .subscribe(data => {\n if (data === false) {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n })\n .untilDestroyed(this);\n\n this.store\n .select(selectSelectedPortfolioId)\n .pipe(untilDestroyed(this))\n .subscribe(portfolioId => {\n this.portfolioId = portfolioId;\n })\n .untilDestroyed(this);\n\n this.initForm();\n this.store.dispatch(getCompanyList());\n this.store.dispatch(loadAllGeneralRoles());\n this.companyListLoading$ = this.store.select(selectCompanyListLoading);\n this.selectAllGeneralRoles().subscribe().untilDestroyed(this);\n this.selectGeneralRoleRadioList().subscribe().untilDestroyed(this);\n\n if (this.data?.user?.unit?.propertyId)\n this.store.dispatch(loadUnitList({ propertyId: this.data.user.unit.propertyId }));\n\n this.store\n .select(selectCompanyList)\n .pipe(\n untilDestroyed(this),\n filter((companyList: RestCompanyModel[]) => !!companyList),\n tap((companyList: RestCompanyModel[]) => {\n this.companyRadioList = getCompanyRadioList(companyList).sort((a, b) => a.label.localeCompare(b.label));\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectNativeLanguagesEnumeration)\n .pipe(\n untilDestroyed(this),\n tap(values => {\n this.nativeLanguages = getEnumerationRadioListFunction(values, null, false);\n if (this.data.user) {\n this.nativeLanguage.setValue(this.data.user.nativeLanguage);\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.store\n .select(selectUserData)\n .pipe(\n untilDestroyed(this),\n filter((userData: UserData) => !!userData),\n tap((userData: UserData) => {\n this.userData = userData;\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n combineLatest([this.store.select(selectAllUsersWithGeneralRoles), this.store.select(selectInactiveUsers)])\n .pipe(\n untilDestroyed(this),\n filter(([allUsers, inactiveUsers]) => !!allUsers && !!inactiveUsers),\n tap(([allUsers, inactiveUsers]: [UserWithGeneralRole[], RestUserModel[]]) => {\n const existingActiveEmails = allUsers.map(item => item.email);\n const existingInactiveEmails = inactiveUsers.map(item => item.email);\n\n if (!this.data.user) {\n this.email.addValidators(UserExistsValidator(existingActiveEmails));\n this.email.addValidators(UserInactiveValidator(existingInactiveEmails));\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n combineLatest([this.store.select(selectAllPropertiesStructure), this.store.select(selectAllUserToPropertyMappings)])\n .pipe(\n untilDestroyed(this),\n distinctUntilChanged(),\n filter(([allProperties, userToPropertyMapping]) => !!allProperties && !!userToPropertyMapping),\n tap(([allProperties, userToPropertyMapping]) => {\n this.userToPropertyMapping = userToPropertyMapping;\n this.root = formatPropertyStructureToTree(allProperties);\n const rootNodes = allProperties.filter(item => !item.parentId);\n if (this.data.user || this.data.preselect) {\n this.propertiesToSelect = combineUserWithProperties(\n this.data.user?.['previousAddedUserId'] || this.data.user.id,\n allProperties,\n userToPropertyMapping\n );\n } else {\n this.propertiesToSelect = rootNodes;\n }\n this.cdr.detectChanges();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n this.userGroupType.valueChanges\n .pipe(\n untilDestroyed(this),\n tap((userGroupType: UserType) => {\n const validators = userGroupType === UserType.Contractor ? [Validators.required] : [];\n if (userGroupType === UserType.Contractor) {\n this.roleId.enable();\n this.roleId.setValidators([Validators.required]);\n this.roleId.updateValueAndValidity();\n\n this.propertyId.clearValidators();\n this.propertyId.updateValueAndValidity();\n\n this.unitId.clearValidators();\n this.unitId.updateValueAndValidity();\n const vendroRole = this.userRoles.find(x => x.label === VENDOR_ROLE_NAME);\n if (vendroRole) {\n this.roleId.setValue(vendroRole.value);\n }\n } else if (userGroupType === UserType.Resident) {\n this.roleId.setValue(residentRoleId);\n this.roleId.disable();\n\n this.propertyId.setValidators([Validators.required]);\n this.propertyId.updateValueAndValidity();\n\n this.unitId.setValidators([Validators.required]);\n this.unitId.updateValueAndValidity();\n } else {\n this.propertyId.clearValidators();\n this.propertyId.updateValueAndValidity();\n\n this.unitId.clearValidators();\n this.unitId.updateValueAndValidity();\n\n this.roleId.enable();\n this.roleId.setValue(null);\n this.roleId.updateValueAndValidity();\n }\n\n this.companyId.setValidators(validators);\n this.companyId.updateValueAndValidity();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n\n if (!this.data.preselect && this.data.user) {\n this.inProgress$ = combineLatest([\n this.store.select(selectUserUpdateInProgress),\n this.store.select(selectSaveUserToGeneralRoleInProgress),\n this.store.select(selectAssignUserIntoPropertyInProgress),\n this.store.select(selectRemovingPropertyAssignedUserInProgress),\n ]).pipe(map(operationsInProgress => some(operationsInProgress, Boolean)));\n\n combineLatest([\n this.store.select(selectUserUpdateStatus),\n this.store.select(selectSaveUserToGeneralRoleStatus),\n this.store.select(selectAssignUserIntoPropertyStatus),\n this.store.select(selectRemovingPropertyAssignedUserStatus),\n ])\n .pipe(\n untilDestroyed(this),\n filter(\n ([\n userUpdateStatus,\n saveUserToGeneralRoleStatus,\n assignUserIntoPropertyStatus,\n removingPropertyAssignedUserStatus,\n ]) =>\n userUpdateStatus === UpdateStatus.UPDATED &&\n (this.data.user.userGroupType === UserType.Resident ||\n (saveUserToGeneralRoleStatus === UpdateStatus.UPDATED &&\n (this.arePropertiesChanged\n ? assignUserIntoPropertyStatus === UpdateStatus.UPDATED ||\n removingPropertyAssignedUserStatus === UpdateStatus.DELETED\n : true)))\n ),\n tap(() => {\n if (this.arePropertiesChanged && this.userData?.id === this.data.user?.id) {\n this.store.dispatch(loadAllUserProperties());\n this.store.dispatch(loadAllUserPortfolios());\n }\n\n this.skipDialogClose ? (this.skipDialogClose = false) : this.close(DialogResult.Success);\n })\n )\n .subscribe()\n .untilDestroyed(this);\n } else {\n this.inProgress$ = combineLatest([\n this.store.select(selectUserInviteInProgress),\n this.store.select(selectSaveUserToGeneralRoleInProgress),\n this.store.select(selectAssignUserIntoPropertyInProgress),\n ]).pipe(map(operationsInProgress => some(operationsInProgress, Boolean)));\n\n combineLatest([\n this.store.select(selectUserInvited),\n this.store.select(selectUserInviteStatus),\n this.store.select(selectSaveUserToGeneralRoleStatus),\n this.store.select(selectAssignUserIntoPropertyStatus),\n ])\n .pipe(\n untilDestroyed(this),\n filter(\n ([invitedUser, userInviteStatus, saveUserToGeneralRoleStatus, assignUserIntoPropertyStatus]) =>\n invitedUser &&\n userInviteStatus === UpdateStatus.OK &&\n (invitedUser.userGroupType === UserType.Resident ||\n (saveUserToGeneralRoleStatus === UpdateStatus.UPDATED &&\n assignUserIntoPropertyStatus === UpdateStatus.UPDATED))\n )\n )\n .subscribe(([invitedUser]) => {\n this.close(DialogResult.Success, { ...invitedUser, roleId: this.roleId.value });\n })\n .untilDestroyed(this);\n }\n\n if (this.data.isResident) this.userGroupType.setValue(UserType.Resident);\n\n if (this.data.vendorId) {\n this.userGroupType.setValue(UserType.Contractor);\n this.companyId.setValue(this.data.vendorId);\n }\n\n this.roleId.valueChanges\n .pipe(untilDestroyed(this))\n .subscribe(roleId => {\n this.isSuperUser = this.checkUserRole(roleId);\n })\n .untilDestroyed(this);\n\n this.onPropertyControlChange();\n this.onEmailControlChange();\n this.getUnits();\n this.onControlsAddedAsIdentifyChanges();\n }\n\n save() {\n if (\n this.form.invalid ||\n this.phoneNumberInvalid ||\n (!this.phoneNumber.value && this.phoneNumberAddedAsIdentity.value) ||\n (!this.email.value && this.emailAddedAsIdentity.value)\n ) {\n this.form.markAllAsTouched();\n this.isSubmitted = true;\n this.cdr.detectChanges();\n return;\n }\n\n if (!this.email.value && !this.phoneNumberAddedAsIdentity.value) {\n this.snackbarService.error('Please check Register Phone number as login or enter an email');\n return;\n }\n\n const {\n firstName,\n lastName,\n roleId,\n email,\n userGroupType,\n unitId,\n companyId,\n nativeLanguage,\n phoneNumber,\n federatedIssuerAssigneeId,\n phoneNumberAddedAsIdentity,\n emailAddedAsIdentity,\n } = this.form.getRawValue() as UserPreview;\n\n let userToPropertyRoleList: UserToPropertyMapping[] = [];\n let deleteUserToPropertyMappings: number[] = [];\n let selectedProperty: number[] = [];\n\n const updateUser: UpdateRestUserModel | UpdateResidentUserModel = {\n id: this.data.user?.id || 0,\n firstName,\n lastName,\n nativeLanguage,\n phoneNumber,\n phoneNumberAddedAsIdentity,\n emailAddedAsIdentity,\n };\n if (this.domainExist$.getValue() && federatedIssuerAssigneeId) {\n updateUser.federatedIssuerAssigneeId = federatedIssuerAssigneeId;\n }\n if (email) updateUser.email = email;\n\n if (userGroupType !== UserType.Resident) (updateUser as UpdateRestUserModel).companyId = companyId;\n\n const inviteUser: InviteRestUserModel | InviteResidentUserModel = {\n email,\n firstName,\n lastName,\n userGroupType,\n displayName: `${firstName} ${lastName}`,\n companyId: userGroupType === UserType.Contractor ? companyId : null,\n nativeLanguage,\n phoneNumber,\n phoneNumberAddedAsIdentity,\n emailAddedAsIdentity,\n roleId,\n };\n\n if (this.domainExist$.getValue() && federatedIssuerAssigneeId) {\n inviteUser.federatedIssuerAssigneeId = federatedIssuerAssigneeId;\n }\n\n if (userGroupType === UserType.Resident) {\n (inviteUser as InviteResidentUserModel).unitId = unitId;\n\n if (!this.data.preselect && this.data.user) {\n (updateUser as UpdateResidentUserModel).unitId = unitId;\n this.store.dispatch(\n updateResidentUserData({ user: updateUser as UpdateResidentUserModel, roleId: residentRoleId })\n );\n } else {\n this.store.dispatch(\n inviteNewResidentUser({ user: inviteUser as InviteResidentUserModel, roleId: residentRoleId })\n );\n }\n\n return;\n }\n\n const currentUserProperties = this.userToPropertyMapping?.filter(\n item => item.userId === this.data.user?.['previousAddedUserId'] || item.userId === this.data.user?.id\n );\n const currentUserPropertyIds = currentUserProperties\n ? currentUserProperties.map(item => item.propertyId)\n : [];\n\n if (this.arePropertiesChanged) {\n if (!this.data.preselect && this.data.user) {\n const newUserToPropertyMappings = prepareSelectedUserToPropertyMappings(\n this.data.user as UserWithGeneralRole,\n this.selectedProperties,\n roleId\n );\n\n const selectedPropertyIds = newUserToPropertyMappings.map(value => value.propertyId);\n\n const propertyToDelete = this.propertiesToSelect\n .filter(item => !selectedPropertyIds.includes(item.id))\n .map(item => item.id);\n\n deleteUserToPropertyMappings = currentUserProperties\n .filter(item => propertyToDelete.includes(item.propertyId))\n .map(item => item.id);\n\n userToPropertyRoleList = newUserToPropertyMappings.filter(\n item => !currentUserPropertyIds.includes(item.propertyId)\n );\n } else {\n selectedProperty = this.selectedProperties.map(item => item.id);\n }\n }\n\n if (!this.data.preselect && this.data.user) {\n this.store.dispatch(\n updateUserData({ user: updateUser, roleId, userToPropertyRoleList, deleteUserToPropertyMappings })\n );\n } else {\n this.store.dispatch(inviteNewUser({ user: inviteUser, roleId, selectedProperty }));\n }\n }\n\n close(result: DialogResult = DialogResult.Fail, invitedUser?: RestUserModel) {\n if (result === DialogResult.Fail) {\n this.dialogRef.close();\n } else {\n this.dialogRef.close({\n invitedUser,\n });\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.store.dispatch(clearUserPreviewData());\n }\n\n addNewVendor() {\n this.modalsService\n .openNewVendorModal({})\n .afterClosed()\n .pipe(\n tap(company => {\n if (company) {\n this.companyId.setValue(company.id);\n this.store.dispatch(getCompanyList());\n this.cdr.detectChanges();\n }\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n private initForm() {\n if (this.data.tenantData?.federatedIssuer && this.data.tenantData?.federatedIssuerDomains)\n this.federatedIssuerDomains = this.data.tenantData.federatedIssuerDomains.split(',');\n\n this.form = this.formBuilder.group(\n {\n [UserPreviewFields.FirstName]: [\n this.data.user?.firstName || null,\n [Validators.required, Validators.maxLength(24)],\n ],\n [UserPreviewFields.LastName]: [\n this.data.user?.lastName || null,\n [Validators.required, Validators.maxLength(24)],\n ],\n [UserPreviewFields.Email]: [this.data.user?.email || null, [EmailPatternValidator(true), Validators.email]],\n [UserPreviewFields.UserGroupType]: [this.data.user?.userGroupType || UserType.Employee, [Validators.required]],\n [UserPreviewFields.RoleId]: [this.data.user?.roleId || null, [Validators.required]],\n [UserPreviewFields.CompanyId]: [\n this.data.user?.companyId,\n this.data.user?.userGroupType === UserType.Contractor ? [Validators.required] : [],\n ],\n [UserPreviewFields.PhoneNumber]: [this.data.user?.phoneNumber || null, [PhoneNumberValidator()]],\n [UserPreviewFields.PhoneNumberAddedAsIdentity]: this.data.user?.phoneNumberAddedAsIdentity || false,\n [UserPreviewFields.EmailAddedAsIdentity]: this.data.user?.emailAddedAsIdentity || false,\n [UserPreviewFields.NativeLanguage]: [this.data.user?.nativeLanguage || 0, []],\n [UserPreviewFields.PropertyId]: [\n this.data.user?.unit?.propertyId || null,\n this.data.user?.userGroupType === UserType.Resident ? [Validators.required] : [],\n ],\n [UserPreviewFields.UnitId]: [\n this.data.user?.unit?.id || null,\n this.data.user?.userGroupType === UserType.Resident ? [Validators.required] : [],\n ],\n [UserPreviewFields.FederatedIssuerAssigneeId]: [this.data.user?.federatedIssuerAssigneeId || null],\n },\n { validators: [RequiredOneOfValidator([UserPreviewFields.Email, UserPreviewFields.PhoneNumber])] }\n );\n\n if (this.data.user?.phoneNumberAddedAsIdentity) {\n this.phoneNumber.disable();\n }\n if (this.data.user?.email && !this.data.preselect) {\n this.email.disable();\n }\n\n if (this.data.user?.phoneNumber || this.data.user?.email) {\n const newValidator = RequiredOneOfValidator([], true);\n this.form.setValidators([newValidator]);\n this.form.updateValueAndValidity();\n }\n\n this.isSuperUser = this.checkUserRole(this.data.user?.roleId);\n correctEmailInput(this.email).subscribe().untilDestroyed(this);\n\n if (this.data?.tenantData?.federatedIssuer) {\n this.checkForDomain(this.data?.user?.email || '');\n }\n\n if (this.data.user?.federatedIssuerAssigneeId) {\n this.federatedIssuerAssigneeId.disable();\n }\n }\n\n selectedRootsChange($event: PropertyBasicInfo[]) {\n this.arePropertiesChanged = true;\n this.selectedProperties = $event;\n }\n\n private checkUserRole(roleId: number | undefined): boolean {\n return roleId === SuperUserRole; // Did not find role enumeration\n }\n\n private getProperties(): Observable[]> {\n return this.store.select(selectProperties).pipe(\n filter((properties: RestPropertyModel[]) => !!properties),\n map(properties => {\n this.properties = properties;\n return getPortfolioProperties(\n properties.filter(p => this.portfolioId === allPortfoliosValue || p.portfolioId === this.portfolioId)\n );\n }),\n shareReplay(),\n untilDestroyed(this)\n );\n }\n\n private onPropertyControlChange(): void {\n this.propertyId?.valueChanges\n .pipe(distinctUntilChanged(), untilDestroyed(this))\n .subscribe(propertyId => {\n this.unitId.setValue(null);\n if (propertyId) this.store.dispatch(loadUnitList({ propertyId }));\n })\n .untilDestroyed(this);\n }\n\n private onEmailControlChange(): void {\n this.email?.valueChanges\n .pipe(\n distinctUntilChanged(),\n filter(() => !!this.data?.tenantData?.federatedIssuer),\n debounceTime(500)\n )\n .subscribe(value => this.checkForDomain(value))\n .untilDestroyed(this);\n }\n\n private getUnits(): void {\n this.store\n .select(selectUnitList)\n .pipe(\n map(unitList => {\n return unitList\n .map>(item => {\n return {\n value: item.id,\n label: item.name,\n };\n })\n .sort((a, b) => a.label.localeCompare(b.label));\n }),\n shareReplay(),\n untilDestroyed(this)\n )\n .subscribe(units => this.units$.next(units))\n .untilDestroyed(this);\n }\n\n onEmailBlur(): void {\n if (!this.domainExist$.getValue() && !this.emailAddedAsIdentity.value) this.emailAddedAsIdentity.setValue(true);\n }\n\n private checkForDomain(value: string): void {\n const domain = value.match(/@(.+)$/)?.[1] || null;\n if (domain && this.federatedIssuerDomains.includes(domain?.trim())) {\n this.form.get(UserPreviewFields.FederatedIssuerAssigneeId).setValidators([Validators.required]);\n this.form.get(UserPreviewFields.FederatedIssuerAssigneeId).updateValueAndValidity();\n this.domainExist$.next(true);\n } else {\n this.form.get(UserPreviewFields.FederatedIssuerAssigneeId).clearValidators();\n this.domainExist$.next(false);\n }\n this.form.get(UserPreviewFields.FederatedIssuerAssigneeId).updateValueAndValidity();\n }\n\n private onControlsAddedAsIdentifyChanges(): void {\n this.emailAddedAsIdentity.valueChanges\n .subscribe(val => {\n if (val && this.phoneNumberAddedAsIdentity.value) this.phoneNumberAddedAsIdentity.setValue(false);\n })\n .untilDestroyed(this);\n\n this.phoneNumberAddedAsIdentity.valueChanges\n .subscribe(val => {\n if (val && this.emailAddedAsIdentity.value) this.emailAddedAsIdentity.setValue(false);\n })\n .untilDestroyed(this);\n }\n}\n","import { filter, some } from 'lodash';\n\nimport { PropertyBasicInfo } from '@shared/interfaces/propertyBasicInfo';\nimport { UserToPropertyMapping } from '@shared/interfaces/user-to-property-mapping';\nimport { UserWithProperties } from '@shared/interfaces/user-with-properties';\nimport { RestUserModel } from '@shared/interfaces/user.interface';\n\n/* TODO: if Chris doesn't change back his mind change it to accept single user */\nexport function prepareSelectedUserToPropertyMappings(\n user: RestUserModel,\n selectedProperties: PropertyBasicInfo[],\n roleId: number\n): UserToPropertyMapping[] {\n return selectedProperties.map(item => {\n return {\n id: 0,\n roleId,\n userId: user.id,\n propertyId: item.id,\n };\n });\n}\n\nexport function prepareUserToPropertyMappingsToAdd(\n selectedUsersUserToPropertyCurrentMappings: UserToPropertyMapping[],\n newUserToPropertyMappings: UserToPropertyMapping[]\n): UserToPropertyMapping[] {\n return filter(\n newUserToPropertyMappings,\n mapping =>\n !some(selectedUsersUserToPropertyCurrentMappings, { userId: mapping.userId, propertyId: mapping.propertyId })\n );\n}\n\nexport function prepareUserToPropertyMappings(\n user: RestUserModel,\n selectedUsersWithProperties: UserWithProperties[]\n): UserWithProperties[] {\n return selectedUsersWithProperties?.filter(item => item.id === user.id);\n}\n\nexport function prepareUserToPropertyMappingsToRemove(\n selectedUsersUserToPropertyCurrentMappings: UserToPropertyMapping[],\n newUserToPropertyMappings: UserToPropertyMapping[]\n) {\n const selectedUsersUserToPropertyMappingsToDelete = filter(\n selectedUsersUserToPropertyCurrentMappings,\n mapping => !some(newUserToPropertyMappings, { userId: mapping.userId, propertyId: mapping.propertyId })\n );\n\n return selectedUsersUserToPropertyMappingsToDelete;\n}\n","export const EMAIL_REGEXP =\n /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;\nexport const EMAIL_REGEXP_WITH_DOT =\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,}$/i;\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { tap } from 'rxjs/operators';\n\nimport { EMAIL_REGEXP, EMAIL_REGEXP_WITH_DOT } from '@shared/constants/email.regexp.const';\n\nexport const EmailPatternValidator = (requireDot = false): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } | null => {\n if (!control?.value) {\n return null;\n }\n\n return requireDot\n ? EMAIL_REGEXP_WITH_DOT.test(control.value)\n ? null\n : { email: true }\n : EMAIL_REGEXP.test(control.value)\n ? null\n : { email: true };\n };\n};\n\nexport const correctEmailInput = (control: AbstractControl) => {\n return control.valueChanges.pipe(\n tap(email => {\n const trimmed = email.trim();\n if (trimmed !== email) {\n control.setValue(trimmed);\n }\n })\n );\n};\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nimport { LatviaValidPhoneNumberLength, ValidPhoneNumberLength_10 } from '@shared/constants/country-phone-codes.const';\n\nexport const PhoneNumberValidator = (): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: boolean } => {\n if (!control.value) {\n return null;\n }\n\n const { phoneCode, phoneNumber } = parsePhoneNumber(control.value);\n const phoneCodeN = parseInt(phoneCode);\n const phoneNumberN = parseInt(phoneNumber);\n\n return !isNaN(phoneNumberN) &&\n (phoneNumber.length === ValidPhoneNumberLength_10 || phoneNumber.length === LatviaValidPhoneNumberLength) &&\n !isNaN(phoneCodeN) &&\n phoneCode.length > 0 &&\n phoneCode.length < 5\n ? null\n : { phoneNumber: true };\n };\n};\n\nexport const parsePhoneNumber = (\n value: string,\n validPhoneNumberLength = ValidPhoneNumberLength_10\n): { phoneNumber: string; phoneCode: string } => {\n const number = (value || '').replace(/\\D/g, '');\n let phoneNumber = null;\n let phoneCode = null;\n if (number.length >= validPhoneNumberLength) {\n phoneNumber = number.substring(number.length - validPhoneNumberLength);\n phoneCode = number.substring(0, number.length - validPhoneNumberLength);\n } else {\n phoneNumber = number;\n phoneCode = null;\n }\n return { phoneNumber, phoneCode };\n};\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport const RequiredOneOfValidator = (fields: string[], isValid = false): ValidatorFn => {\n return (control: AbstractControl): { [key: string]: any } => {\n const result = fields.some(\n field =>\n control.value[field] !== null &&\n control.value[field] !== undefined &&\n typeof control.value[field] === 'string' &&\n control.value[field]?.trim() !== ''\n );\n return result || isValid ? null : { requiredOneOf: { fields } };\n };\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { AppVersion } from '@shared/interfaces/app-version';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst versionInfo: AppVersion = require('../../version/app-version.json');\n\nexport const APP_VERSION = 'APP_VERSION';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppVersionService extends PuSubscribable {\n constructor(private http: HttpClient) {\n super();\n }\n\n private readonly version = new BehaviorSubject({ version_timestamp: 0, version_number: '' });\n readonly version$ = this.version.asObservable();\n\n pull() {\n this.emitVersion();\n setInterval(() => {\n this.emitVersion();\n }, 3 * 60 * 1000);\n }\n\n getCurrentVersion(): string {\n const version = sessionStorage.getItem(APP_VERSION);\n if (version !== null) {\n try {\n const appVersion = JSON.parse(version) as AppVersion;\n return `${appVersion.version_number} (${appVersion.version_timestamp})`;\n } catch (e) {}\n }\n return '';\n }\n\n getBuiltInVersionInfo(): AppVersion {\n return versionInfo;\n }\n\n private emitVersion() {\n this.getVersion()\n .subscribe(data => {\n this.version.next(data);\n this.saveCurrentVersion(data);\n })\n .untilDestroyed(this);\n }\n\n private getVersion(): Observable {\n return this.http.get(`/version/app-version.json?dt=${Date.now()}`);\n }\n\n private saveCurrentVersion(data: AppVersion) {\n sessionStorage.setItem(APP_VERSION, JSON.stringify(data));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, filter } from 'rxjs';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { LocalStorageDataEnum } from '@shared/enums/local-storage-data.enum';\n\nclass CacheInfo {\n cachedSubject: ReplaySubject;\n expired: boolean;\n expiredAt: Date;\n id: number;\n timestamp: Date;\n version?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CacheService extends PuSubscribable {\n private cacheInfoDictionary: { [key: string]: CacheInfo } = {};\n\n getCachedInfo(\n key: string,\n id: number,\n f: (id: number) => Observable,\n version?: number,\n forceUpdate?: boolean,\n expiredAt?: Date\n ): Observable {\n if (!this.cacheInfoDictionary[key]) {\n this.cacheInfoDictionary[key] = {\n cachedSubject: new ReplaySubject(1),\n expired: true,\n id: id,\n timestamp: new Date(),\n version: undefined,\n expiredAt: expiredAt instanceof Date ? expiredAt : undefined,\n };\n }\n\n const cacheInfo = this.cacheInfoDictionary[key];\n\n if (cacheInfo.expiredAt && new Date() > cacheInfo.expiredAt) {\n cacheInfo.expired = true;\n }\n\n if (\n cacheInfo.expired ||\n cacheInfo.id !== id ||\n cacheInfo.version !== version ||\n this.expiredFromLocalStorage(key, cacheInfo.timestamp) ||\n forceUpdate\n ) {\n if (cacheInfo.id !== id) {\n cacheInfo.cachedSubject.complete();\n cacheInfo.cachedSubject = new ReplaySubject(1);\n } else {\n cacheInfo.cachedSubject.next(undefined);\n }\n\n cacheInfo.expired = false;\n cacheInfo.timestamp = new Date();\n cacheInfo.version = version;\n cacheInfo.id = id;\n cacheInfo.expiredAt = expiredAt instanceof Date ? expiredAt : undefined;\n f(id)\n .subscribe({\n next: data => cacheInfo.cachedSubject.next(data),\n error: error => {\n console.error('Error: ', error);\n cacheInfo.cachedSubject.error(error);\n setTimeout(() => window.location.reload(), 5000);\n },\n })\n .untilDestroyed(this);\n }\n return cacheInfo.cachedSubject.pipe(filter(data => typeof data !== 'undefined'));\n }\n\n resetCacheByKey(key: string) {\n Object.keys(this.cacheInfoDictionary).forEach(cacheKey => {\n if (cacheKey.includes(key)) {\n delete this.cacheInfoDictionary[cacheKey];\n }\n });\n }\n\n private expiredFromLocalStorage(key: string, timestamp: Date) {\n const storageTimestamp = localStorage.getItem(LocalStorageDataEnum.CACHE_KEYS.replace('{0}', key));\n return storageTimestamp && new Date(storageTimestamp) > timestamp;\n }\n\n expireCachedInfo(key: string): void {\n const cacheInfo = this.cacheInfoDictionary[key];\n if (cacheInfo) {\n cacheInfo.expired = true;\n localStorage.setItem(LocalStorageDataEnum.CACHE_KEYS.replace('{0}', key), new Date().toString());\n }\n }\n}\n","import { HttpEvent } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { RequiredRatioType, RestapiService } from '@app/services/restapi.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { FileSearchQuery, FileUploadModel, Upload } from '@shared/interfaces';\nimport { AuthService } from '@shared/services/auth.service';\n\nimport { environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FileUploadsService extends PuSubscribable {\n constructor(private restApiService: RestapiService, private authService: AuthService) {\n super();\n }\n\n uploadFile(file: File, requiredRatio?: RequiredRatioType, requiredRationMin?: RequiredRatioType): Observable {\n return this.restApiService.upload(`FileUploads/`, file, {}, requiredRatio, requiredRationMin);\n }\n\n uploadFileProgress(file: File): Observable> {\n return this.restApiService.uploadProgress(`FileUploads/`, file);\n }\n\n removeFile(fileId: number): Observable {\n return this.restApiService.delete(`FileUploads/${fileId}`);\n }\n\n search(query: FileSearchQuery) {\n return this.restApiService.post(`FileUploads/search`, query);\n }\n\n generateUploadLink(fileName: string) {\n const encodedFileName = encodeURIComponent(fileName);\n return this.restApiService.post(`FileUploads/generateUploadLink?fileName=${encodedFileName}`);\n }\n\n completeFileUpload(blobUrl: string, thumbnailId?: number, videoDuration?: number, fileName?: string) {\n let url = `FileUploads/completeFileUpload?`;\n\n if (fileName) {\n url += `&FileName=${encodeURIComponent(fileName)}`;\n }\n if (thumbnailId) {\n url += `&ThumbnailFileUploadId=${thumbnailId}`;\n }\n if (videoDuration) {\n url += `&VideoDurationInSeconds=${videoDuration}`;\n }\n\n return this.restApiService.post(url, { blobUrl });\n }\n\n download(fileUploadId: number) {\n // TODO refactor. Do not subscribe in services and in multiple called user actions\n this.search({ ids: [fileUploadId] })\n .subscribe(result => {\n if (result?.length) {\n const a = document.createElement('a');\n a.href = result[0].cloudUri;\n a.target = '_blank';\n a.download = 'true';\n document.body.append(a);\n a.click();\n a.remove();\n }\n })\n .untilDestroyed(this);\n }\n\n downloadFile(fileUploadId: number) {\n return this.authService\n .getAccessToken()\n .pipe(\n tap(token => {\n const a = document.createElement('a');\n a.href = `${environment.apiUrl}/FileUploads/Download/${fileUploadId}?access_token=${token}`;\n a.target = '_parent';\n a.download = 'true';\n document.body.append(a);\n a.click();\n a.remove();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n getById(id: number) {\n return this.restApiService.getData(`FileUploads/${id}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { sumBy } from 'lodash';\nimport * as moment from 'moment/moment';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport {\n ActiveWorkflowStepI,\n WorkflowStepI,\n} from '@dashboards/components/avg-turn-chart-card/avg-turn-chart.interface';\nimport { PortfolioKpiType, RestPortfolioKpi } from '@dashboards/models/portfolio-kpi';\nimport { KpiWindowType } from '@shared/enums/kpi-window-type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KpiService {\n windowType$ = new BehaviorSubject(null);\n workflowStep$ = new BehaviorSubject(null);\n activeWorkflowStep$ = new BehaviorSubject(null);\n\n constructor(private restApiService: RestapiService) {}\n\n private filterKpiByType(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType): RestPortfolioKpi[] {\n return kpis.filter(k => k.kpiType === kpiType);\n }\n\n avg(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType, precision = 0, currentMonth = null): number | undefined {\n let filtered = this.filterKpiByType(kpis, kpiType);\n if (currentMonth) {\n filtered = filtered.filter(el => moment(el.calculationDate).format('MMM YYYY') === currentMonth);\n }\n const avg = sumBy(filtered, k => k.value * k.unitsCount) / sumBy(filtered, k => k.unitsCount);\n if (isNaN(avg)) {\n return undefined;\n } else {\n return !precision ? Math.round(avg) : parseFloat(avg.toFixed(precision));\n }\n }\n\n sum(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType, precision = 0): number {\n const filtered = this.filterKpiByType(kpis, kpiType);\n return parseFloat(sumBy(filtered, k => k.value).toFixed(precision));\n }\n\n percent(kpis: RestPortfolioKpi[], kpiType: PortfolioKpiType): number | undefined {\n const filtered = this.filterKpiByType(kpis, kpiType);\n const value = sumBy(filtered, k => k.value) / sumBy(filtered, k => k.unitsCount);\n if (isNaN(value)) {\n return undefined;\n }\n return Math.round(value * 100);\n }\n\n fetch(portfolioId: number, dateOffset: KpiWindowType, kpiTypes: PortfolioKpiType[]) {\n return this.restApiService.getData(\n `portfolio/${portfolioId}/kpis?dateOffset=${dateOffset}&${kpiTypes.map(k => `kpiIds=${k}`).join('&')}`\n );\n }\n\n trend(portfolioId: number, kpiTypes: PortfolioKpiType[], trendDays: number[]) {\n return this.restApiService.getData(\n `portfolio/${portfolioId}/kpisTrend?kpi=[${kpiTypes.map(k => k).join(',')}]&trend_line=[${trendDays.join(',')}]`\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AbstractSecurityStorage } from 'angular-auth-oidc-client';\n\nconst OIDC_STORAGE_KEY_PREFIX = 'oidc_key';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OidcStorageService implements AbstractSecurityStorage {\n read(key: string) {\n return localStorage.getItem(this.getKey(key));\n }\n\n write(key: string, value: any): void {\n localStorage.setItem(this.getKey(key), value);\n }\n\n remove(key: string): void {\n localStorage.removeItem(this.getKey(key));\n }\n\n clear(): void {\n Object.keys(localStorage)\n .filter(key => key.startsWith(OIDC_STORAGE_KEY_PREFIX))\n .forEach(key => {\n localStorage.removeItem(key);\n });\n }\n\n private getKey(key: string) {\n return `${OIDC_STORAGE_KEY_PREFIX}_${key}`;\n }\n}\n","import { PackageType } from '@shared/enums/package-type';\nimport { TenantData } from '@shared/interfaces/tenant-data';\n\nexport function checkTrialDaysLeft(tenantData: TenantData, packageType: PackageType, now: Date): number | undefined {\n if (!tenantData) {\n return undefined;\n }\n\n if (checkIfPackageEnabled(tenantData, packageType)) {\n return undefined;\n }\n\n switch (packageType) {\n case PackageType.Turns: {\n return daysLeft(tenantData.turnsPackageTrialEndOn, now);\n }\n case PackageType.Inspections: {\n return daysLeft(tenantData.inspectionPackageTrialEndOn, now);\n }\n case PackageType.InspectionsPro: {\n return daysLeft(tenantData.inspectionProPackageTrialEndsOn, now);\n }\n case PackageType.Service:\n return daysLeft(tenantData.servicePackageTrialExpiresOn, now);\n case PackageType.Residents:\n return undefined;\n }\n}\n\nexport function checkIfPackageAvailable(tenantData: TenantData, packageType: PackageType, now: Date): boolean {\n if (!tenantData) {\n return false;\n }\n\n switch (packageType) {\n case PackageType.Turns: {\n return checkIfPackageEnabled(tenantData, packageType) || isTrialActive(tenantData.turnsPackageTrialEndOn, now);\n }\n case PackageType.Inspections: {\n return (\n checkIfPackageEnabled(tenantData, packageType) || isTrialActive(tenantData.inspectionPackageTrialEndOn, now)\n );\n }\n case PackageType.InspectionsPro: {\n return (\n checkIfPackageEnabled(tenantData, packageType) || isTrialActive(tenantData.inspectionProPackageTrialEndsOn, now)\n );\n }\n case PackageType.Service:\n return (\n checkIfPackageEnabled(tenantData, packageType) || isTrialActive(tenantData.servicePackageTrialExpiresOn, now)\n );\n case PackageType.Residents:\n return checkIfPackageEnabled(tenantData, packageType);\n case PackageType.CannedAnswers:\n return checkIfPackageEnabled(tenantData, packageType);\n case PackageType.SpareParts:\n return checkIfPackageEnabled(tenantData, packageType);\n case PackageType.ResidentPortalPackageEnabled:\n return checkIfPackageEnabled(tenantData, packageType);\n case PackageType.ResidentInspectionEnabled:\n return checkIfPackageEnabled(tenantData, packageType);\n }\n}\n\nfunction checkIfPackageEnabled(tenantData: TenantData, packageType: PackageType): boolean {\n if (!tenantData) {\n return false;\n }\n\n // TODO residentPortalPackageEnabled\n const packageMapping: Record = {\n [PackageType.Turns]: tenantData.turnsPackageEnabled,\n [PackageType.Inspections]: tenantData.inspectionPackageEnabled,\n [PackageType.Service]: tenantData.servicePackageEnabled,\n [PackageType.InspectionsPro]: tenantData.inspectionProPackageEnabled,\n [PackageType.Residents]: tenantData.residentPortalPackageEnabled,\n [PackageType.CannedAnswers]: tenantData.cannedAnswersEnabled,\n [PackageType.SpareParts]: tenantData.sparePartsPackageEnabled,\n [PackageType.ResidentPortalPackageEnabled]: tenantData.residentPortalPackageEnabled,\n [PackageType.ResidentInspectionEnabled]: tenantData.residentInspectionEnabled,\n };\n\n return !!packageMapping[packageType];\n}\n\nconst isTrialActive = (date: Date, now: Date) => {\n return date && date.getTime() - now.getTime() > 0;\n};\n\nconst daysLeft = (date: Date, now: Date): number | undefined => {\n if (!date || !now) {\n return undefined;\n }\n const time = date.getTime() - now.getTime();\n const days = Math.floor(time / (1000 * 60 * 60 * 24)) || 0;\n return days;\n};\n","import { Injectable } from '@angular/core';\nimport { Observable, map, of, take } from 'rxjs';\n\nimport { TenantService } from '@app/services/tenant.service';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { PackageType } from '@shared/enums/package-type';\nimport { checkIfPackageAvailable, checkTrialDaysLeft } from '@shared/functions/checkPackages.function';\nimport { TenantData } from '@shared/interfaces/tenant-data';\n\nexport type PackageTrialState = {\n packageType: PackageType;\n trialState: number | undefined;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PackageService {\n constructor(private tenantService: TenantService, private timezoneService: TimezoneService) {}\n\n checkPackages(tenantData: TenantData, packages: PackageType[]): boolean {\n if (!tenantData) {\n return false;\n }\n\n if (!packages?.length) {\n return true;\n }\n\n return packages.some(p => checkIfPackageAvailable(tenantData, p, this.timezoneService.getCurrentDateOnly()));\n }\n\n checkPackageAvailable(packageType: PackageType): Observable {\n return this.tenantService.getCachedTenant().pipe(map(tenantData => this.checkPackages(tenantData, [packageType])));\n }\n\n checkPackagesAvailable(packages: PackageType[]): Observable {\n return this.tenantService.getCachedTenant().pipe(map(tenantData => this.checkPackages(tenantData, packages)));\n }\n\n checkPackageTrialDaysLeft(packageType: PackageType): Observable {\n return this.tenantService.getCachedTenant().pipe(\n take(1),\n map(tenantData => ({\n packageType,\n trialState: checkTrialDaysLeft(tenantData, packageType, this.timezoneService.getCurrentDateOnly()),\n }))\n );\n }\n\n checkPackagesTrialDaysLeft(packages: PackageType[]): Observable {\n if (!packages?.length) {\n return of([]);\n }\n\n return this.tenantService.getCachedTenant().pipe(\n take(1),\n map(tenantData => {\n return packages.map(packageType => ({\n packageType,\n trialState: checkTrialDaysLeft(tenantData, packageType, this.timezoneService.getCurrentDateOnly()),\n }));\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { PackageService } from '@app/services/package.service';\nimport { selectPmsTypesEnumeration } from '@main-application/store/selectors/enumeration.selectors';\nimport { PackageType } from '@shared/enums/package-type';\nimport { Providers } from '@shared/interfaces/pms-credential-model.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PmsService {\n constructor(private packageService: PackageService, private store: Store<{}>) {}\n\n isSyncWithPmsEnabled(pmsType: number): Observable {\n return combineLatest([\n this.packageService.checkPackageAvailable(PackageType.Service),\n this.store.select(selectPmsTypesEnumeration),\n ]).pipe(\n map(([servicePackageEnabled, pmsTypes]) => {\n const allowedPms = pmsTypes\n .filter(pmsType =>\n [Providers.BUILDIUM, Providers.RESMAN, Providers.ENTRATA, Providers.YARDI].includes(\n pmsType.displayText as Providers\n )\n )\n .map(p => p.enumerationValue);\n return servicePackageEnabled && allowedPms.includes(pmsType);\n })\n );\n }\n}\n","import { HttpClient, HttpEvent, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, map, mergeMap } from 'rxjs';\n\nimport { AppVersionService } from '@app/services/app-version.service';\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\nimport { TimezoneService } from '@main-application/management/pages/system-configuration/components/date-time-configuration/timezone.service';\nimport { TimezoneEntityHelper } from '@main-application/management/pages/system-configuration/components/timezone-entity.helper';\n\nimport { environment } from '../../environments/environment';\n\nexport type RequiredRatioType = '5:1' | '16:9' | '4:1';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RestapiServiceWithoutTimezone {\n constructor(protected http: HttpClient, protected appVersionService: AppVersionService) {}\n\n /**\n * @title Repository Service\n *\n * TODO: Add pagination support. https://medium.com/@JeremyLaine/server-side-pagination-and-filtering-with-angular-6-280a7909e783\n */\n\n public getData(\n route: string,\n customTimezoneFixer: (data: T, timezone: RestTimezone) => T = null,\n type: 'json' | 'html' | null = null,\n apiVersion?: string\n ): Observable {\n const options = { ...this.generateHeaders() };\n if (type === 'html') options['responseType'] = 'text';\n\n const url = apiVersion ? environment.apiUrl + `/${apiVersion}` : environment.apiUrl;\n\n return this.http.get(this.composeRoute(route, url), options);\n }\n\n public customPatchData(route: string, body: unknown): Observable {\n return this.http.patch(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public post(route: string, body?: unknown): Observable {\n return this.http.post(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public create(route: string, body: unknown): Observable {\n return this.http.post(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public associate(route: string, body: unknown): Observable {\n return this.http.post(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public update(route: string, body: unknown): Observable {\n return this.http.put(this.composeRoute(route, environment.apiUrl), body, this.generateHeaders());\n }\n\n public delete(route: string, body?: any): Observable {\n return this.http.delete(this.composeRoute(route, environment.apiUrl), this.generateHeaders(body));\n }\n\n public upload(\n route: string,\n file: File,\n options: { reportProgress?: boolean } = {},\n requiredRatio?: '5:1' | '16:9' | '4:1',\n requiredRationMin?: '5:1' | '16:9' | '4:1'\n ): Observable {\n const formData = new FormData();\n formData.append('file', file);\n\n let params = new HttpParams();\n if (requiredRatio) {\n params = params.set('requiredRatio', requiredRatio);\n }\n if (requiredRationMin) {\n params = params.set('requiredRationMin', requiredRationMin);\n }\n const requestOptions = { ...options, params };\n\n return this.http.post(this.composeRoute(route, environment.apiUrl), formData, requestOptions);\n }\n\n public uploadProgress(route: string, file: File): Observable> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(this.composeRoute(route, environment.apiUrl), formData, {\n reportProgress: true,\n responseType: 'json',\n observe: 'events',\n });\n }\n\n public download(route: string): Observable {\n return this.http.get(this.composeRoute(route, environment.apiUrl), {\n responseType: 'blob',\n });\n }\n\n public getUrl(route: string): string {\n return this.composeRoute(route, environment.apiUrl);\n }\n\n public composeRoute(route: string, environmentUrl: string): string {\n return `${environmentUrl}/${route}`;\n }\n\n private generateHeaders(body?: any) {\n return {\n headers: new HttpHeaders({ 'X-PU-VERSION': this.appVersionService.getCurrentVersion() }),\n body,\n };\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RestapiService extends RestapiServiceWithoutTimezone {\n constructor(http: HttpClient, private timezoneService: TimezoneService, appVersionService: AppVersionService) {\n super(http, appVersionService);\n }\n\n public getData(\n route: string,\n customTimezoneFixer: (data: T, timezone: RestTimezone) => T = null,\n type: 'json' | 'html' | null = null,\n v?: string\n ): Observable {\n return super\n .getData(route, null, type, v)\n .pipe(\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixer ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public customPatchData(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: RestTimezone) => TBody = null,\n customTimezoneFixerResponce: (data: T, timezone: RestTimezone) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.customPatchData(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponce ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public post(\n route: string,\n body?: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: RestTimezone) => TBody = null,\n customTimezoneFixerResponse: (data: T, timezone: RestTimezone) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.post(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponse ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public create(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: RestTimezone) => TBody = null,\n customTimezoneFixerResponce: (data: T, timezone: RestTimezone) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.create(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponce ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public update(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: RestTimezone) => TBody = null,\n customTimezoneFixerResponce: (data: T, timezone: RestTimezone) => T = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(newBody => super.update(route, newBody)),\n this.timezoneService.addTimezoneForEntity(\n customTimezoneFixerResponce ?? TimezoneEntityHelper.fixTimezoneForModelToClient\n )\n );\n }\n\n public downloadWithPost(\n route: string,\n body: TBody,\n customTimezoneFixerRequest: (data: TBody, timezone: RestTimezone) => TBody = null\n ): Observable {\n return this.timezoneService.currentTimezone$.pipe(\n map(timezone => (customTimezoneFixerRequest ?? TimezoneEntityHelper.fixTimezoneForModelToServer)(body, timezone)),\n mergeMap(payload => {\n return this.http.post(this.composeRoute(route, environment.apiUrl), payload, {\n responseType: 'blob',\n });\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\nimport { Upload } from '@shared/interfaces';\nimport { SparePartGroup, SparePartItem } from '@shared/interfaces/spare-parts.interface';\nimport { AuthService } from '@shared/services/auth.service';\n\nimport { environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SparePartsService extends PuSubscribable {\n constructor(private restApiService: RestapiService, private authService: AuthService) {\n super();\n }\n\n getItemList(): Observable {\n return this.restApiService.getData(`SparePart`);\n }\n\n deleteItem(id: number): Observable {\n return this.restApiService.delete(`SparePart/${id}`);\n }\n\n updateItem(item: SparePartItem) {\n return this.restApiService.update(`SparePart/${item.id}`, item);\n }\n\n createItem(\n item: Pick\n ) {\n return this.restApiService.create(`SparePart`, item);\n }\n\n getGroupList(): Observable {\n return this.restApiService.getData(`SparePartGroup`);\n }\n\n deleteGroup(id: number): Observable {\n return this.restApiService.delete(`SparePartGroup/${id}`);\n }\n\n updateGroup(item: SparePartGroup) {\n return this.restApiService.update(`SparePartGroup/${item.id}`, item);\n }\n\n createGroup(item: Pick) {\n return this.restApiService.create(`SparePartGroup`, item);\n }\n\n downloadPriceList(portfolioOrPropertyId: number) {\n return this.authService\n .getAccessToken()\n .pipe(\n tap(token => {\n const a = document.createElement('a');\n a.href = `${environment.apiUrl}/SparePartGroup/downloadPriceList/${portfolioOrPropertyId}?access_token=${token}`;\n a.target = '_parent';\n a.download = 'true';\n document.body.append(a);\n a.click();\n a.remove();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n\n uploadPriceList(file: File, portfolioOrPropertyId: number): Observable {\n return this.restApiService.upload(`SparePartGroup/uploadPriceList/${portfolioOrPropertyId}`, file, {});\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestSurveyTemplate } from '@shared/interfaces/survey-template';\nimport { RestTemplateAreaModel } from '@template/models/rest-template-model.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SurveysService {\n constructor(private restApiService: RestapiService) {}\n\n getSurveyTemplates(): Observable {\n return this.restApiService.getData('AdminPanel/templatesList');\n }\n\n saveTemplate(id: number, template: string): Observable {\n return this.restApiService.update('AdminPanel/template', { id, template });\n }\n\n get(id: number): Observable {\n return this.restApiService.getData(`inspections/template/survey/${id}`);\n }\n\n add(survey: RestTemplateAreaModel): Observable {\n return this.restApiService.post(`inspections/template/survey/add`, survey);\n }\n\n update(survey: RestTemplateAreaModel): Observable {\n return this.restApiService.post(`inspections/template/survey/${survey.id}`, survey);\n }\n\n delete(id: number): Observable {\n return this.restApiService.post('inspections/template/survey/delete', id);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TimezoneEntityHelper } from '@main-application/management/pages/system-configuration/components/timezone-entity.helper';\nimport { TenantSettingsModel } from '@main-application/management/pages/turnover-configuration/components/turnover-configuration-elapsed-days-section/models/config.models';\nimport { TenantData } from '@shared/interfaces/tenant-data';\n\nimport { CacheService } from './cache.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TenantService {\n constructor(private restApiService: RestapiService, private cacheService: CacheService) {}\n\n getCachedTenant(): Observable {\n return this.cacheService.getCachedInfo('getTenant', 0, () => this.getTenant());\n }\n\n private getTenant(): Observable {\n return this.restApiService.getData(\n 'system/tenantInfo',\n TimezoneEntityHelper.fixTimezoneForTenantDataToClient\n );\n }\n\n updateTenantSettings(settings: Partial): Observable {\n return this.restApiService.post('adminPanel/tenantSettings', settings);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, map, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport {\n PmsMappingCategoryCreate,\n RestPmsMappingCategoryModel,\n} from '@main-application/management/interfaces/pms-mapping-category';\nimport {\n PmsMappingTopicCreate,\n PmsMappingTopicUpdate,\n} from '@main-application/management/interfaces/pms-mapping-topic';\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\nimport { TimezoneEntityHelper } from '@main-application/management/pages/system-configuration/components/timezone-entity.helper';\nimport { AddAnswerReqI } from '@main-application/service/pages/canned-answer.interface';\nimport { CommonInMemoryUpdatingService } from '@main-application/shared/services/common-in-memory-updating.service';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { TicketStatusType } from '@shared/enums/ticket-status-type';\nimport { checkPermissionLevel } from '@shared/functions/check-permission-level.function';\nimport { filterToQueryParams } from '@shared/functions/filter-to-query-params.function';\nimport {\n RestTicketCategoryModel,\n RestTicketModel,\n RestTicketSubCategoryModel,\n RestTypedTicketAttachment,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport {\n ServiceSummaryStatsDetails,\n SummaryStatsGroup,\n} from '@ui-components/components/summary-expandable-table/summary-expandable-table.model';\n\nimport { CacheService } from './cache.service';\n\nexport const TicketsControllerKeys = {\n TicketTopic: 'TicketTopic',\n TicketCategory: 'TicketCategory',\n};\n\nexport class TicketFilter {\n assignedToMe?: boolean;\n includeCompleted?: boolean;\n startDate?: string;\n endDate?: string;\n propertyId?: number;\n propertyIds?: number[];\n portfolioId?: number;\n ticketType?: number;\n isCompleted?: number;\n unitType?: number | string;\n ticketCategoryId?: number;\n ticketTopicId?: number;\n ticketSummaryType?: number;\n collectionIds?: number;\n boardId?: number;\n}\n\nexport class SummaryTicketFilters {\n portfolioId: number;\n propertyIds: number;\n collectionId: number;\n collectionName: string;\n unitTypeId: number;\n unitTypeName: string;\n ticketCategoryId: number;\n ticketCategoryName: string;\n topicId: number;\n topicName: string;\n ticketTypeId: number;\n ticketTypeName: string;\n boardId: number;\n boardName: string;\n timeframe: number;\n customStartDate: string;\n customEndDate: string;\n assigneeIds: number[];\n isCompleted: number;\n statuses: TicketStatusType[];\n}\n\nexport enum ServiceSummaryGroupType {\n None,\n TicketCategory,\n TicketTopic,\n Collection,\n Property,\n Portfolio,\n UnitType,\n}\n\nexport enum ServiceSummaryTicketType {\n AllTickets,\n ServiceTickets,\n ResidentTickets,\n InspectionTickets,\n ReplacementTickets,\n}\n\nexport interface SummaryFilters {\n portfolioId?: number;\n topicCategoryId?: number;\n topicId?: number;\n collectionIds?: string;\n propertyIds?: string;\n unitType?: number;\n startDate?: string;\n endDate?: string;\n ticketType?: ServiceSummaryTicketType;\n groupBy?: ServiceSummaryGroupType;\n subGroupBy?: ServiceSummaryGroupType;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TicketsService extends CommonInMemoryUpdatingService {\n constructor(\n private restApiService: RestapiService,\n private cacheService: CacheService,\n private snackbarService: SnackbarService\n ) {\n super();\n }\n\n create(turnoverTicket: RestTicketModel, residentMode = false): Observable {\n return this.restApiService.create(`Tickets?residentTickets=${residentMode}`, turnoverTicket);\n }\n\n update(turnoverTicket: RestTicketModel): Observable {\n return this.restApiService.update(`Tickets/${turnoverTicket.id}`, turnoverTicket);\n }\n\n protected deleteInternal(ticketId: number): Observable {\n return this.restApiService.delete(`Tickets/${ticketId}`);\n }\n\n residentList(): Observable {\n return this.restApiService.getData(`Tickets?residentTickets=${true}`);\n }\n\n protected getListInternal(filter: any): Observable {\n const filterString = filterToQueryParams(filter);\n return this.restApiService\n .getData(`Tickets${filterString}`, TicketsService.fixTimezoneForRestTicketList)\n .pipe(\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.RetrievingTicketList);\n return of([]);\n })\n );\n }\n\n rate(ticketId: number, clientFeedbackRating: number): Observable {\n return this.restApiService.post(`Tickets/submitfeedback`, {\n ticketId: ticketId,\n clientFeedbackRating: clientFeedbackRating,\n });\n }\n\n getTicket(ticketId: number): Observable {\n return this.restApiService.getData(\n `Tickets/${ticketId}`,\n TicketsService.fixTimezoneForRestTicketModel\n );\n }\n\n getTicketAttachment(ticketId: number): Observable {\n return this.restApiService.getData(`Tickets/${ticketId}/Attachments`);\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Tickets/${attachmentToEntity.ticketId}/Attachments`,\n attachmentToEntity\n );\n }\n\n getTicketsByTurnover(turnoverId: number): Observable {\n return this.restApiService.getData(\n `Tickets/ByTurnoverId/${turnoverId}`,\n TicketsService.fixTimezoneForRestTicketList\n );\n }\n\n public static fixTimezoneForRestTicketList(data: RestTicketModel[], timezone: RestTimezone): RestTicketModel[] {\n if (!data) return [];\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForRestTicketDataModel(e, timezone));\n return data;\n }\n\n public static fixTimezoneForRestTicketModel(data: RestTicketModel, timezone: RestTimezone): RestTicketModel {\n return TimezoneEntityHelper.fixTimezoneForRestTicketDataModel(data, timezone);\n }\n\n getTicketsByAssigneeId(assigneeId: number): Observable {\n return this.restApiService.getData(`Tickets/ByAssigneeId/${assigneeId}`);\n }\n\n getTicketsByPropertyId(propertyId: number): Observable {\n return this.restApiService.getData(`Tickets/ByPropertyId/${propertyId}`);\n }\n\n deleteTurnoverAttachment(ticketId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Tickets/${ticketId}/Attachments/${attachmentId}`);\n }\n\n getCashedCategories() {\n return this.cacheService.getCachedInfo('getCategories', 0, () => this.getCategories());\n }\n\n checkPermissionToEdit(userData: UserData, ticket?: RestTicketModel, notify = false): boolean {\n const result =\n ticket?.createdById === userData.id ||\n checkPermissionLevel(userData.permissionLevel, PermissionLevelType.Tickets_EditAll) ||\n (ticket?.assigneeId === userData?.id &&\n checkPermissionLevel(userData.permissionLevel, PermissionLevelType.Tickets_Edit));\n\n if (notify && !result) {\n this.snackbarService.warning('Tickets_EditAll permission required');\n }\n\n return result;\n }\n\n getCategories() {\n return this.restApiService.getData(`TicketPickupList`);\n }\n\n createCategory(body: PmsMappingCategoryCreate) {\n return this.restApiService.post(TicketsControllerKeys.TicketCategory, body);\n }\n\n updateCategory(body: RestPmsMappingCategoryModel) {\n return this.restApiService.update(`${TicketsControllerKeys.TicketCategory}/${body.id}`, body);\n }\n\n deleteCategory(id: number) {\n return this.restApiService.delete(`${TicketsControllerKeys.TicketCategory}/${id}`);\n }\n\n getTicketCategoryList() {\n return this.restApiService.getData(`TicketCategory/list`);\n }\n\n ticketTopicList(): Observable {\n return this.restApiService.getData(`${TicketsControllerKeys.TicketTopic}/list`);\n }\n\n createTopic(body: PmsMappingTopicCreate) {\n return this.restApiService.post(TicketsControllerKeys.TicketTopic, body);\n }\n\n updateTopic(body: PmsMappingTopicUpdate, id: number) {\n return this.restApiService.update(`${TicketsControllerKeys.TicketTopic}/${id}`, body);\n }\n\n deleteTopic(id: number) {\n return this.restApiService.delete(`${TicketsControllerKeys.TicketTopic}/${id}`);\n }\n\n convertToSeconds(timeString: string): number {\n const [days, hours, minutes] = timeString.split('::').map(Number);\n return days * 86400 + hours * 3600 + minutes * 60;\n }\n\n convertToTimeSpent(seconds: number): string {\n const days = Math.floor(seconds / 86400);\n seconds %= 86400;\n const hours = Math.floor(seconds / 3600);\n seconds %= 3600;\n const minutes = Math.floor(seconds / 60);\n return `${days}::${hours}::${minutes}`;\n }\n\n formatCurrency(value: number): string {\n if (!value || value === null) return null;\n const parts = value.toString().split('.');\n const wholePart = parts[0];\n const fractionalPart = parts.length > 1 ? '.' + parts[1] : '';\n return '$' + wholePart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') + fractionalPart;\n }\n\n parseCurrency(value: string): number {\n if (!value || value === null || value === '0') return null;\n return parseFloat(value.replace(/[^0-9.-]+/g, ''));\n }\n\n getAnswers(): Observable {\n return this.restApiService.getData(`CannedAnswer`, TicketsService.fixTimezoneForRestTicketModel);\n }\n\n addAnswer(body: AddAnswerReqI): Observable {\n return this.restApiService.create('CannedAnswer', body);\n }\n\n editAnswer(text: string, id: number): Observable {\n return this.restApiService.update(`CannedAnswer/${id}`, { text });\n }\n\n deleteAnswer(id: number): Observable {\n return this.restApiService.delete(`CannedAnswer/${id}`);\n }\n\n getServiceSummaryStats(filter: SummaryFilters): Observable {\n let url = `tickets/summaryStats/${filter.groupBy ?? 0}/${filter.subGroupBy ?? 0}?`;\n\n if (filter.portfolioId !== null && filter.portfolioId !== undefined) url += `&portfolioId=${filter.portfolioId}`;\n if (filter.collectionIds) url += `&collectionIds=${filter.collectionIds}`;\n if (filter.propertyIds) url += `&propertyIds=${filter.propertyIds}`;\n if (filter.unitType !== null && filter.unitType !== undefined) url += `&unitType=${filter.unitType}`;\n if (filter.ticketType !== null && filter.ticketType !== undefined) url += `&ticketType=${filter.ticketType}`;\n if (filter.topicCategoryId !== null && filter.topicCategoryId !== undefined)\n url += `&topicCategoryId=${filter.topicCategoryId}`;\n if (filter.topicId !== null && filter.topicId !== undefined) url += `&topicId=${filter.topicId}`;\n if (filter.startDate) url += `&startDate=${filter.startDate}`;\n if (filter.endDate) url += `&endDate=${filter.endDate}`;\n\n return this.restApiService.getData(url);\n }\n\n getServiceSummaryDetails(filter: SummaryFilters): Observable {\n let url = `tickets/summaryStatsDetails?`;\n\n if (filter.portfolioId !== null && filter.portfolioId !== undefined) url += `&portfolioId=${filter.portfolioId}`;\n if (filter.collectionIds) url += `&collectionIds=${filter.collectionIds}`;\n if (filter.propertyIds) url += `&propertyIds=${filter.propertyIds}`;\n if (filter.unitType !== null && filter.unitType !== undefined) url += `&unitType=${filter.unitType}`;\n if (filter.ticketType !== null && filter.ticketType !== undefined) url += `&ticketType=${filter.ticketType}`;\n if (filter.topicCategoryId !== null && filter.topicCategoryId !== undefined)\n url += `&topicCategoryId=${filter.topicCategoryId}`;\n if (filter.topicId !== null && filter.topicId !== undefined) url += `&topicId=${filter.topicId}`;\n if (filter.startDate) url += `&startDate=${filter.startDate}`;\n if (filter.endDate) url += `&endDate=${filter.endDate}`;\n\n return this.restApiService.getData(url).pipe(\n map(data => {\n data.statsByAssignee = data.statsByAssignee.map(el => ({ ...el, isAssignee: true }));\n data.statsByTopic = data.statsByTopic.map(el => ({ ...el, isTopic: true }));\n data.statsByCategory = data.statsByCategory.map(el => ({ ...el, isCategory: true }));\n return data;\n })\n );\n }\n}\n","export function filterToQueryParams(filter: object) {\n const activeFilters = Object.entries(filter)\n .filter(e => typeof e[1] != 'undefined' && e[1] != null)\n .map(e => `${e[0]}=${typeof e[1].toISOString === 'function' ? e[1].toISOString() : e[1]}`);\n return activeFilters.length > 0 ? '?' + activeFilters.reduce((a, b) => `${a}&${b}`) : '';\n}\n","import { Injectable } from '@angular/core';\nimport { first } from 'lodash';\nimport { BehaviorSubject, Observable, finalize, of, switchMap } from 'rxjs';\n\nimport { RestapiService, RestapiServiceWithoutTimezone } from '@app/services/restapi.service';\nimport { RestTimezone } from '@main-application/management/pages/system-configuration/components/date-time-configuration/model/timezone';\nimport { TimezoneEntityHelper } from '@main-application/management/pages/system-configuration/components/timezone-entity.helper';\nimport { TimezoneHelper } from '@main-application/management/pages/system-configuration/components/timezone.helper';\nimport { TurnoverStepTimer } from '@main-application/turnovers/interfaces/timers.interface';\nimport { TurnoverAttachmentType } from '@shared/enums/attachment-type';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport {\n PostTurnoverModel,\n RestArchivedTurnover,\n RestTurnoverDataModel,\n RestTurnoverTaskModel,\n RestWorkflowTemplate,\n UpdateTypedAttachmentToEntityModel,\n} from '@shared/interfaces/turnover.interface';\nimport {\n SummaryStatsGroup,\n TurnoversSummaryStatsDetails,\n} from '@ui-components/components/summary-expandable-table/summary-expandable-table.model';\n\nimport { CacheService } from './cache.service';\n\nexport enum TurnoverSummaryQueryType {\n AllTurns,\n ActiveTurns,\n CompletedTurns,\n}\n\nexport enum TurnoverPriorityType {\n None,\n Low,\n Medium,\n High,\n}\n\nexport enum TurnoverSummaryGroupType {\n None,\n Collection,\n Property,\n Portfolio,\n UnitType,\n}\n\nexport interface TurnoverSummaryFilters {\n portfolioId?: number;\n assigneeId?: number;\n collectionIds?: string;\n propertyIds?: string;\n unitType?: number;\n startDate?: string;\n endDate?: string;\n queryType?: TurnoverSummaryQueryType;\n threshold?: TurnoverPriorityType;\n groupBy?: TurnoverSummaryGroupType;\n subGroupBy?: TurnoverSummaryGroupType;\n}\n\nclass TurnoverPatchOperation {\n op: 'add' | 'replace' | 'remove';\n path: KeyOfClassWithType | string;\n value: T;\n}\n\ntype KeyOfClassWithType = {\n [Property in keyof Class]: Class[Property] extends AllowedType ? Property : never;\n}[keyof Class];\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TurnoversService {\n kanbanListLoading = new BehaviorSubject(false);\n kanbanListLoading$ = this.kanbanListLoading.asObservable();\n\n constructor(\n private restApiService: RestapiService,\n private cacheService: CacheService,\n private restapiWithoutTimezone: RestapiServiceWithoutTimezone\n ) {}\n\n create(postTurnoverModel: PostTurnoverModel): Observable {\n return this.restApiService.create(\n `Turnovers`,\n postTurnoverModel,\n null,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n public static fixTimezoneForTurnoverTaskModel(data: RestTurnoverTaskModel[], timezone: RestTimezone) {\n data.forEach(e =>\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient(e.turnoverData as RestTurnoverDataModel, timezone)\n );\n return data;\n }\n\n public static fixTimezoneForArchivedTurnoverTaskModel(data: RestArchivedTurnover[], timezone: RestTimezone) {\n data.forEach(e => TimezoneEntityHelper.fixTimezoneForArchivedTurnoverDataModelToClient(e, timezone));\n return data;\n }\n\n getTurnover(turnoverId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/${turnoverId}`,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n update(turnoverData: RestTurnoverDataModel): Observable {\n return this.restApiService.update(\n `Turnovers/${turnoverData.id}`,\n turnoverData,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToServer,\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n patch(id: number, patchData: TurnoverPatchOperation[]): Observable {\n return this.restApiService.customPatchData[]>(\n `Turnovers/${id}`,\n patchData,\n data => {\n data.forEach(e => {\n if (['dateMoveIn', 'dateMoveOut', 'pmsMoveOutDate', 'dateAvailable', 'dateAvailable'].includes(e.path)) {\n e.value = TimezoneHelper.removeTimeZone(e.value as Date) as T;\n }\n });\n return data;\n },\n TimezoneEntityHelper.fixTimezoneForTurnoverDataModelToClient\n );\n }\n\n updateMoveOutDateSortOrder(turnoverId: number, boardId: number, sortOrderValue: number): Observable {\n return this.restApiService.post(`Turnovers/${turnoverId}/UpdateMoveOutPosition`, {\n boardId,\n position: sortOrderValue,\n });\n }\n\n updateMoveInDateSortOrder(turnoverId: number, boardId: number, sortOrderValue: number): Observable {\n return this.restApiService.post(`Turnovers/${turnoverId}/UpdateMoveInPosition`, {\n boardId,\n position: sortOrderValue,\n });\n }\n\n addUnitToBoard(turnoverId: number, boardId: number, isCompleted: boolean): Observable {\n return this.restApiService.post(`Turnovers/${turnoverId}/addToBoard/${boardId}/${isCompleted}`, {\n id: turnoverId,\n boardLayoutId: boardId,\n isCompleted: isCompleted,\n });\n }\n\n deleteUnitFromBoard(turnoverId: number, boardId: number): Observable {\n return this.restApiService.delete(`Turnovers/${turnoverId}/addToBoard/${boardId}`);\n }\n\n patchAdditionalData(\n turnoverId: number,\n boardId: number,\n patchData: TurnoverPatchOperation[]\n ): Observable {\n this.cacheService.expireCachedInfo('getPortfolioTurnovers');\n\n return this.restApiService.customPatchData[]>(\n `Turnovers/additionalData/${turnoverId}/${boardId}`,\n patchData\n );\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Turnovers/${first(attachmentToEntity.turnoverIds)}/Attachments`,\n attachmentToEntity\n );\n }\n\n setAttachments(\n turnoverId: number,\n attachmentType: TurnoverAttachmentType,\n attachmentToEntity: UpdateTypedAttachmentToEntityModel[]\n ): Observable {\n return this.restApiService.create(\n `Turnovers/${turnoverId}/bulk/attachments?attachmentType=${attachmentType}`,\n {\n attachFileIds: attachmentToEntity.map(a => a.fileUploadId),\n }\n );\n }\n\n updateAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.update(\n `Turnovers/${first(attachmentToEntity.turnoverIds)}/Attachments`,\n attachmentToEntity\n );\n }\n\n getPropertyTurnovers(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/property/${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n getCachedPortfolioTurnovers(portfolioId: number): Observable {\n this.kanbanListLoading.next(true);\n return this.restApiService\n .getData(`Turnovers/getlatestversionbyportfolioid?portfolioId=${portfolioId}`)\n .pipe(\n switchMap(version => {\n return this.cacheService.getCachedInfo(\n 'getPortfolioTurnovers',\n portfolioId,\n (id: number) => this.getPortfolioTurnovers(id),\n version\n );\n }),\n finalize(() => this.kanbanListLoading.next(false))\n );\n }\n\n getArchivedPortfolioTurnovers(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/portfolio/${portfolioId}/archived`,\n TurnoversService.fixTimezoneForArchivedTurnoverTaskModel\n );\n }\n\n getPortfolioTurnovers(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/portfolio/${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel,\n null,\n 'v2'\n );\n }\n\n getAllTasks(portfolioId: number): Observable {\n return this.restApiService.getData(\n `Turnovers/alltasks?portfolioId=${portfolioId}`,\n TurnoversService.fixTimezoneForTurnoverTaskModel\n );\n }\n\n deleteTurnover(turnoverId: number, disableAutoTurnCreation = false): Observable {\n const route = `Turnovers/${turnoverId}${disableAutoTurnCreation ? '?disableAutoTurnCreation=true' : ''}`;\n return this.restApiService.delete(route);\n }\n\n deleteTurnoverAttachment(turnoverId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Turnovers/${turnoverId}/Attachments/${attachmentId}`);\n }\n\n getTurnoversAttachments(turnoverId: number): Observable {\n return this.restApiService.getData(`Turnovers/${turnoverId}/Attachments`);\n }\n\n toggleAllSections(allPropertyIds: number[], active: boolean): Observable {\n return of(active ? allPropertyIds : []);\n }\n\n toggleSingleSection(activePropertyIds: number[], propertyId: number, active: boolean): Observable {\n if (active) {\n return of([...activePropertyIds, propertyId]);\n }\n return of(activePropertyIds.filter(value => value !== propertyId));\n }\n\n getTurnoversTimers(turnoverId: number): Observable {\n return this.restapiWithoutTimezone.getData(`Turnovers/${turnoverId}/timers`);\n }\n\n updateTurnoversTimers(turnoverId: number, timers: TurnoverStepTimer[]): Observable {\n return this.restApiService.create(`Turnovers/${turnoverId}/updateTimersData`, timers);\n }\n\n restoreTurnover(turnoverId: number) {\n return this.restApiService.post(`Turnovers/restore/${turnoverId}`);\n }\n\n getWorkflowTemplates(): Observable {\n return this.restApiService.getData(`Turnovers/GetWorkflowTemplates`);\n }\n\n recalculatePastTimerKpis(days: number) {\n return this.restApiService.post(`AdminPanel/recalculatePastTimerKpis/${days}`, days);\n }\n\n getTurnoverSummaryStats(filter: TurnoverSummaryFilters): Observable {\n let url = `turnovers/summaryStats/${filter.groupBy ?? 0}/${filter.subGroupBy ?? 0}?`;\n\n if (filter.portfolioId !== null && filter.portfolioId !== undefined) url += `&portfolioId=${filter.portfolioId}`;\n if (filter.collectionIds) url += `&collectionIds=${filter.collectionIds}`;\n if (filter.propertyIds) url += `&propertyIds=${filter.propertyIds}`;\n if (filter.unitType) url += `&unitType=${filter.unitType}`;\n if (filter.startDate) url += `&startDate=${filter.startDate}`;\n if (filter.endDate) url += `&endDate=${filter.endDate}`;\n if (filter.queryType !== null && filter.queryType !== undefined) url += `&queryType=${filter.queryType}`;\n if (filter.threshold !== null && filter.threshold !== undefined) url += `&threshold=${filter.threshold}`;\n if (filter.assigneeId !== null && filter.assigneeId !== undefined) url += `&assigneeId=${filter.assigneeId}`;\n\n return this.restApiService.getData(url);\n }\n\n getTurnoverSummaryDetails(filter: TurnoverSummaryFilters): Observable {\n let url = `turnovers/summaryStatsDetails?`;\n\n if (filter.portfolioId !== null && filter.portfolioId !== undefined) url += `&portfolioId=${filter.portfolioId}`;\n if (filter.collectionIds) url += `&collectionIds=${filter.collectionIds}`;\n if (filter.propertyIds) url += `&propertyIds=${filter.propertyIds}`;\n if (filter.unitType) url += `&unitType=${filter.unitType}`;\n if (filter.startDate) url += `&startDate=${filter.startDate}`;\n if (filter.endDate) url += `&endDate=${filter.endDate}`;\n if (filter.queryType !== null && filter.queryType !== undefined) url += `&queryType=${filter.queryType}`;\n if (filter.threshold !== null && filter.threshold !== undefined) url += `&threshold=${filter.threshold}`;\n if (filter.assigneeId !== null && filter.assigneeId !== undefined) url += `&assigneeId=${filter.assigneeId}`;\n\n return this.restApiService.getData(url);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { NonPmsModelModel } from '@shared/interfaces/turnover.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class UnitNonPmsService {\n constructor(private restApiService: RestapiService) {}\n\n add(data: NonPmsModelModel) {\n return this.restApiService.create(`Units/nonPms`, data);\n }\n\n update(data: NonPmsModelModel) {\n return this.restApiService.update(`Units/nonPms`, data);\n }\n\n delete(id: number) {\n return this.restApiService.delete(`Units/nonPms/${id}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, catchError, of } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { RestGenericTypedAttachment } from '@shared/interfaces/attachment.interface';\nimport { UpdateTypedAttachmentToEntityModel } from '@shared/interfaces/turnover.interface';\nimport { RestUnitModel, RestUnitSummaryModel } from '@shared/interfaces/unit.interface';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\n@Injectable()\nexport class UnitsService {\n constructor(private restApiService: RestapiService, private snackbarService: SnackbarService) {}\n\n update(unit: RestUnitModel) {\n return this.restApiService.update(`Units/${unit.id}`, unit).pipe(\n catchError(error => {\n if (error.status === 403) {\n this.snackbarService.error(\"You don't have permission\");\n } else {\n this.snackbarService.error(\"Can't update unit, please contact administrator or try again later\");\n }\n return of(error);\n })\n );\n }\n\n getPropertyUnits(propertyId: number): Observable {\n return this.restApiService.getData(`Units/property/${propertyId}`);\n }\n\n setAttachment(attachmentToEntity: UpdateTypedAttachmentToEntityModel): Observable {\n return this.restApiService.create(\n `Units/${attachmentToEntity.unitId}/Attachments`,\n attachmentToEntity\n );\n }\n\n getUnitAttachments(unitId: number): Observable {\n return this.restApiService.getData(`Units/${unitId}/Attachments`);\n }\n\n getUnitById(unitId: number): Observable {\n return this.restApiService.getData(`Units/${unitId}`);\n }\n\n deleteUnitAttachment(unitId: number, attachmentId: number): Observable {\n return this.restApiService.delete(`Units/${unitId}/Attachments/${attachmentId}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { find, isEmpty, omitBy } from 'lodash';\nimport { Observable, shareReplay } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { PermissionLevelType } from '@shared/enums/permission-level.enum';\nimport { UserPermissionsMap, UserType } from '@shared/enums/user-type';\nimport { getUserItems } from '@shared/functions/get-user-list.function';\nimport { IRadioButtonOption } from '@shared/interfaces/radio-button-option.interface';\nimport { UserClaims } from '@shared/interfaces/user-claims';\nimport { UserData } from '@shared/interfaces/user-data';\nimport { UserWithGeneralRole } from '@shared/interfaces/user-with-general-role';\nimport {\n InviteResidentUserModel,\n InviteRestUserModel,\n RestResidentUserModel,\n RestUserModel,\n UpdateResidentUserModel,\n UpdateRestUserModel,\n UserFilter,\n} from '@shared/interfaces/user.interface';\n\nimport { CacheService } from './cache.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n constructor(private restApiService: RestapiService, private cacheService: CacheService) {}\n\n getCachedUserList(isActive?: boolean, forceUpdate?: boolean): Observable {\n return this.cacheService\n .getCachedInfo('getUserList', 0, () => this.getUserList(), undefined, forceUpdate)\n .pipe(map(list => (typeof isActive !== 'boolean' ? list : list.filter(e => e.isActive === isActive))));\n }\n\n getCachedUserListOptions(isActive = true, forceUpdate = false): Observable[]> {\n return this.getCachedUserList(isActive, forceUpdate).pipe(map(list => getUserItems(list)));\n }\n\n search(\n filter: UserFilter,\n isResident = false\n ): Observable<{ result: RestResidentUserModel[] | RestUserModel[]; totalCount: number }> {\n const reqData = {\n userGroupTypes: filter.userGroupTypes?.length ? filter?.userGroupTypes?.join(',') : null,\n keyword: filter.search ? filter.search : null,\n pageNumber: 0,\n pageSize: filter.ps * (filter.pn + 1),\n sortBy: filter.sortBy,\n isDesc: filter.isDesc,\n roleId: filter.role,\n propertyId: filter.propertyId,\n isActive: filter.isActive,\n };\n if (filter.portfolioId !== -1) reqData['portfolioId'] = filter.portfolioId;\n\n if (isResident) {\n return this.restApiService.create<{ result: RestResidentUserModel[]; totalCount: number }>(\n 'users/search-residents',\n reqData\n );\n }\n\n return this.restApiService.create<{ result: RestUserModel[]; totalCount: number }>('users/search', reqData);\n }\n\n getUserList(filter?: UserFilter): Observable {\n let url = 'Users/';\n if (filter) {\n url += '?';\n if (filter.userGroupTypes?.length) {\n url += `userGroupTypes=${filter.userGroupTypes.join(',')}&`;\n }\n if (filter.portfolioId) {\n url += `portfolioId=${filter.portfolioId}&`;\n }\n if (filter.propertyId) {\n url += `propertyId=${filter.propertyId}&`;\n }\n if (filter.search) {\n url += `search=${filter.search}&`;\n }\n if (filter.pn >= 0) {\n url += `pn=${filter.pn}&`;\n }\n if (filter.ps >= 0) {\n url += `ps=${filter.ps}&`;\n }\n if (filter.role >= 0) {\n url += `role=${filter.role}&`;\n }\n if (filter.sortBy >= 0) {\n url += `sortBy=${filter.sortBy}&`;\n }\n if (filter.isDesc) {\n url += `isDesc=${filter.isDesc}&`;\n }\n }\n\n return this.restApiService.getData(url);\n }\n\n getCachedPropertyUserList(propertyId: number, isActive?: boolean): Observable {\n return this.cacheService\n .getCachedInfo('getPropertyUserList', propertyId, () => this.getPropertyUserList(propertyId))\n .pipe(map(list => (typeof isActive !== 'boolean' ? list : list.filter(e => e.isActive === isActive))));\n }\n\n getPropertyUserList(\n propertyId: number,\n userTypes?: number[],\n addPermissionsMap?: UserPermissionsMap[]\n ): Observable {\n const queryParams = omitBy({ userTypes, addPermissionsMap }, isEmpty) as any as URLSearchParams;\n\n const getParamsUrl = new URLSearchParams(queryParams).toString();\n return this.restApiService\n .getData(`Users/property/${propertyId}?${getParamsUrl}`)\n .pipe(shareReplay());\n }\n\n getPortfolioUserList(portfolioId: number, userTypes?: UserType[]): Observable {\n const getParamsUrl = new URLSearchParams(omitBy({ userTypes }, isEmpty) as any as URLSearchParams).toString();\n return this.restApiService.getData(`Users/portfolio/${portfolioId}?${getParamsUrl}`);\n }\n\n getUserByPropertyIds(propertyIds: number[], userTypes?: UserType[]): Observable {\n let url = `users/properties`;\n\n if (userTypes) url += `?userTypes=${userTypes.join(',')}`;\n\n return this.restApiService.post(url, propertyIds);\n }\n\n expireCashedUserData() {\n this.cacheService.expireCachedInfo('getUserData');\n this.cacheService.expireCachedInfo('getPropertyUserList');\n }\n\n getCashedUserData(): Observable {\n return this.cacheService.getCachedInfo('getUserData', 0, () => this.getUserData());\n }\n\n private getUserData(): Observable {\n return this.restApiService.getData(`users/claims`).pipe(\n map(result => {\n const userId = find(result, { claim: 'DbUserId' });\n const email = find(result, { claim: 'UserEmail' });\n const name = find(result, { claim: 'name' });\n // todo - temporary\n const firstName = find(result, {\n claim: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname',\n })?.value;\n const lastName = find(result, {\n claim: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname',\n })?.value;\n\n const generalRole = find(result, {\n claim: 'GeneralRole',\n })?.value;\n\n const companyId = find(result, {\n claim: 'CompanyId',\n })?.value;\n\n const userType: UserType = (parseInt(\n find(result, {\n claim: 'UserTypeEnumValue',\n })?.value\n ) || 0) as UserType;\n\n const permissionLevel = result\n .filter(item => item.claim === 'PermissionLevel')\n .map(item => item.value as PermissionLevelType);\n\n return {\n email: email?.value,\n id: Number.parseInt(userId?.value),\n name: name.value,\n firstName,\n lastName,\n permissionLevel,\n generalRole,\n companyId: companyId ? parseInt(companyId, 10) : null,\n userType,\n };\n })\n );\n }\n\n getUserById(id: number): Observable {\n return this.restApiService.getData(`Users/${id}`);\n }\n\n setUserData(user: UpdateRestUserModel): Observable {\n this.expireCashedUserData();\n return this.restApiService.update(`Users/${user.id}`, user);\n }\n\n removeUser(user: UserWithGeneralRole): Observable {\n this.expireCashedUserData();\n return this.restApiService.delete(`users/${user.id}`);\n }\n\n reactivateUser(user: UserWithGeneralRole): Observable {\n this.expireCashedUserData();\n return this.restApiService.create(`users/reactivate?id=${user.id}`, {});\n }\n\n inviteUser(user: InviteRestUserModel): Observable {\n this.expireCashedUserData();\n return this.restApiService.associate(`Users/Invitations`, user);\n }\n\n inviteResidentUser(user: InviteResidentUserModel): Observable {\n return this.restApiService.associate(`Users/addResident`, user);\n }\n\n setResidentUserData(user: UpdateResidentUserModel): Observable {\n return this.restApiService.update(`Users/${user.id}/editResident`, user);\n }\n\n resendInvitationEmail(userId: number): Observable {\n return this.restApiService.create(`Users/${userId}/ResendInvitation`, {});\n }\n\n resetTempPassword(userId: number): Observable<{ tempPassword: string }> {\n return this.restApiService.create<{ tempPassword: string }>(`users/${userId}/resetTempPassword`, {});\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, catchError, map, mergeMap, of, switchMap, take, tap } from 'rxjs';\n\nimport { RestapiService } from '@app/services/restapi.service';\nimport { TurnoverConfigurationStepAssigneesService } from '@main-application/management/pages/turnover-configuration/components/turnover-configuration-step-assignees/services/turnover-configuration-step-assignees.service';\nimport { TurnoverTransitionSource } from '@shared/enums/turnover-transition-source';\nimport { WorkflowStepEnumType } from '@shared/enums/workflow-step.enum';\nimport {\n RestTurnoverDataModel,\n RestTurnoverTaskModel,\n isRestTurnoverTaskModel,\n} from '@shared/interfaces/turnover.interface';\nimport { WorkflowAction } from '@shared/interfaces/workflow-action.interface';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\nimport { ModalsService } from '@ui-components/modals/modals.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkflowActionsService {\n isModalOpen = false;\n\n constructor(\n private restApiService: RestapiService,\n private snackbarService: SnackbarService,\n private responsiblePartiesService: TurnoverConfigurationStepAssigneesService,\n protected modalsService: ModalsService\n ) {}\n\n transitWorkflowStepAssignee(\n turnoverId: number,\n stepType: WorkflowStepEnumType,\n assigneeId: number,\n source: TurnoverTransitionSource\n ): Observable {\n return this.restApiService\n .create(`turnovers/${turnoverId}/transit/${stepType}/${assigneeId}?source=${source}`, {})\n .pipe(\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingTurnoverStepAssignee);\n throw err;\n })\n );\n }\n\n setWorkflowStepAssignee(\n turnoverId: number,\n stepType: WorkflowStepEnumType,\n assigneeId: number,\n rememberIt = false\n ): Observable {\n return this.restApiService\n .associate(`WorkflowActions/${turnoverId}/${stepType}/${assigneeId}?rememberIt=${rememberIt}`, null)\n .pipe(\n catchError(err => {\n this.snackbarService.error(SnackbarErrorMessage.ErrorUpdatingTurnoverStepAssignee);\n throw err;\n })\n );\n }\n\n moveToNextStep(\n turnoverId: number,\n stepType: WorkflowStepEnumType,\n assigneeId: number,\n boardId: number = null,\n rememberIt = false\n ) {\n if (typeof assigneeId === 'number')\n return this.restApiService.post(\n `turnovers/${turnoverId}/transit/${stepType}/${assigneeId}?rememberIt=${rememberIt}&source=${\n boardId ? `1&sourceId=${boardId}` : '0'\n }`\n );\n return this.restApiService.post(\n `turnovers/${turnoverId}/transit/${stepType}?source=${boardId ? `1&sourceId=${boardId}` : '0'}`\n );\n }\n\n moveToNextStepWithDefaultAssignee(\n turnover: RestTurnoverDataModel | RestTurnoverTaskModel,\n stepType: WorkflowStepEnumType,\n boardId: number = null\n ) {\n return this.getAssignee(turnover, stepType).pipe(\n take(1),\n mergeMap(assigneeInfo => {\n if (!assigneeInfo) {\n return of(false);\n }\n return this.moveToNextStep(\n turnover.id,\n stepType,\n assigneeInfo.assigneeId,\n boardId,\n assigneeInfo.rememberIt ?? false\n ).pipe(map(() => true));\n })\n );\n }\n\n getAssignee(\n turnover: RestTurnoverDataModel | RestTurnoverTaskModel,\n stepType: WorkflowStepEnumType\n ): Observable {\n if (stepType === WorkflowStepEnumType.Archive) {\n return of({} as WorkflowAction);\n }\n\n let turnoverData: RestTurnoverDataModel;\n let propertyId: number;\n let propertyName: string;\n if (isRestTurnoverTaskModel(turnover)) {\n turnoverData = turnover.turnoverData as RestTurnoverDataModel;\n propertyId = turnover.propertyId;\n propertyName = turnover.propertyName;\n } else {\n turnoverData = turnover;\n }\n propertyId = propertyId ?? turnoverData.property?.id;\n propertyName = propertyName ?? turnoverData.property?.name;\n\n const currentAssigneeId = turnoverData.workflow.find(e => e.workflowStepEnumType === stepType)?.responsiblePartyId;\n if (currentAssigneeId) {\n return of({ assigneeId: currentAssigneeId } as WorkflowAction);\n }\n return this.responsiblePartiesService.getResponsiblePartiesByPropertyId(propertyId).pipe(\n map(list => list?.find(step => step.workflowStepEnumType === stepType)?.responsiblePartyId),\n switchMap(defaultAssigneeId => {\n if (defaultAssigneeId) {\n return of({ assigneeId: defaultAssigneeId } as WorkflowAction);\n } else {\n if (this.isModalOpen) {\n return of(null);\n }\n this.isModalOpen = true;\n return this.modalsService\n .openNextStepAssigneeModal(turnoverData, stepType, propertyId, propertyName)\n .afterClosed()\n .pipe(tap(() => (this.isModalOpen = false)));\n }\n })\n );\n }\n}\n","export const isDef = (val: T | undefined): val is T => val !== undefined;\n\nexport const isNotNull = (val: T | null): val is T => val !== null;\n\nexport const isDefAndNotNull = (val: T | null | undefined): val is T => val !== undefined && val !== null;\n","import { Directive, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\ndeclare module 'rxjs' {\n interface Subscription {\n untilDestroyed: (component: PuSubscribable) => Subscription;\n }\n}\n\n@Directive()\nexport abstract class PuSubscribable implements OnDestroy {\n private readonly subscriptions: Subscription[] = [];\n\n addSubscription(subscription: Subscription) {\n this.subscriptions.push(subscription);\n }\n\n ngOnDestroy(): void {\n const length = this.subscriptions.length;\n if (length > 0) {\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\n this.subscriptions.splice(0, length);\n }\n }\n}\n\nexport class PuSubscribe {\n constructor() {\n Subscription.prototype.untilDestroyed = function (component: PuSubscribable) {\n component.addSubscription(this);\n return this;\n };\n }\n}\n","export class EnvironmentConfig {\n type: EnvironmentType;\n ver: string;\n authBaseUrl: string;\n apiUrl: string;\n openApiUrl: string;\n notificationsUrl: string;\n notificationsAllUrl: string;\n disableForm: boolean;\n showAuthorizeLogs: boolean;\n showBuildTime: boolean;\n showEasterEggs: boolean;\n deepLinkScheme: string;\n azureAuthConfig: {\n b2cDirectory: string;\n stsBase: string;\n tenant: string;\n policyKey: string;\n stsServer: string;\n stsServerSignInEmail: string;\n stsServerSignInObjectId: string;\n clientID: string;\n b2cScopes: string;\n redirectUrl: string;\n postLogoutRedirectUrl: string;\n forgotPasswordUrl: string;\n };\n}\n\nexport enum EnvironmentType {\n Demo,\n Dev,\n Local,\n Prod,\n QA,\n}\n","import { EnvironmentConfig, EnvironmentType } from './environment-config';\n\nconst currentDomain = window.location.hostname.includes('dev.ineedservice.co')\n ? 'dev.ineedservice.co'\n : 'propup-dev.com';\n\nexport const environment: EnvironmentConfig = {\n type: EnvironmentType.Dev,\n ver: '1.5.1',\n authBaseUrl: 'https://propupdevb2c.b2clogin.com/propupdevb2c.onmicrosoft.com/oauth2/v2.0',\n apiUrl: 'https://api.propup-dev.com/api',\n openApiUrl: 'https://api.propup-dev.com/openApi',\n notificationsUrl: 'https://api.propup-dev.com/notifications',\n notificationsAllUrl: 'https://api.propup-dev.com/all_notifications',\n disableForm: true,\n showAuthorizeLogs: true,\n showBuildTime: true,\n showEasterEggs: true,\n deepLinkScheme: 'propupdev://propup-dev.com/',\n azureAuthConfig: {\n b2cDirectory: 'propupdevb2c',\n stsBase: 'propupdevb2c.b2clogin.com',\n tenant: 'propupdevb2c.onmicrosoft.com',\n policyKey: 'B2C_1_SignUpSignIn',\n stsServer: 'https://propupdevb2c.b2clogin.com/propupdevb2c.onmicrosoft.com/B2C_1_SignUpSignIn/v2.0',\n stsServerSignInEmail:\n 'https://propupdevb2c.b2clogin.com/propupdevb2c.onmicrosoft.com/B2C_1A_signin_with_email/v2.0',\n stsServerSignInObjectId:\n 'https://propupdevb2c.b2clogin.com/propupdevb2c.onmicrosoft.com/B2C_1A_signin_with_oid/v2.0',\n clientID: 'b6a9b7da-a6f9-4664-9772-e93ada0e7c57',\n b2cScopes: 'openid offline_access b6a9b7da-a6f9-4664-9772-e93ada0e7c57',\n redirectUrl: `https://${currentDomain}/accept-token`,\n postLogoutRedirectUrl: `https://${currentDomain}/login`,\n forgotPasswordUrl: '',\n },\n};\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AbstractSecurityStorage, AuthModule, LogLevel, OidcSecurityService } from 'angular-auth-oidc-client';\n\nimport { OidcStorageService } from '@app/services/oidc-storage.service';\nimport { AppRoutes } from '@shared/constants/app-routes.const';\n\nimport { environment } from '../../../../environments/environment';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n AuthModule.forRoot({\n config: [\n {\n authority: environment.azureAuthConfig.stsServer,\n redirectUrl: environment.azureAuthConfig.redirectUrl,\n clientId: environment.azureAuthConfig.clientID,\n responseType: 'id_token token',\n autoUserInfo: false,\n scope: environment.azureAuthConfig.b2cScopes,\n postLogoutRedirectUri: environment.azureAuthConfig.postLogoutRedirectUrl,\n silentRenew: true,\n useRefreshToken: true,\n forbiddenRoute: AppRoutes.NO_PERMISSION,\n unauthorizedRoute: AppRoutes.NO_PERMISSION,\n silentRenewUrl: environment.azureAuthConfig.redirectUrl,\n renewTimeBeforeTokenExpiresInSeconds: 43200,\n logLevel: environment.showAuthorizeLogs ? LogLevel.Debug : LogLevel.None,\n maxIdTokenIatOffsetAllowedInSeconds: 86400,\n disableIdTokenValidation: false,\n triggerAuthorizationResultEvent: true,\n configId: 'main',\n },\n {\n authority: environment.azureAuthConfig.stsServerSignInEmail,\n redirectUrl: environment.azureAuthConfig.redirectUrl,\n clientId: environment.azureAuthConfig.clientID,\n responseType: 'id_token token',\n autoUserInfo: false,\n scope: environment.azureAuthConfig.b2cScopes,\n postLogoutRedirectUri: environment.azureAuthConfig.postLogoutRedirectUrl,\n silentRenew: false,\n useRefreshToken: false,\n forbiddenRoute: AppRoutes.NO_PERMISSION,\n unauthorizedRoute: AppRoutes.NO_PERMISSION,\n silentRenewUrl: environment.azureAuthConfig.redirectUrl,\n renewTimeBeforeTokenExpiresInSeconds: 43200,\n logLevel: environment.showAuthorizeLogs ? LogLevel.Debug : LogLevel.None,\n maxIdTokenIatOffsetAllowedInSeconds: 86400,\n disableIdTokenValidation: false,\n triggerAuthorizationResultEvent: true,\n configId: 'email',\n },\n {\n authority: environment.azureAuthConfig.stsServerSignInObjectId,\n redirectUrl: environment.azureAuthConfig.redirectUrl,\n clientId: environment.azureAuthConfig.clientID,\n responseType: 'id_token token',\n autoUserInfo: false,\n scope: environment.azureAuthConfig.b2cScopes,\n postLogoutRedirectUri: environment.azureAuthConfig.postLogoutRedirectUrl,\n silentRenew: false,\n useRefreshToken: false,\n forbiddenRoute: AppRoutes.NO_PERMISSION,\n unauthorizedRoute: AppRoutes.NO_PERMISSION,\n silentRenewUrl: environment.azureAuthConfig.redirectUrl,\n renewTimeBeforeTokenExpiresInSeconds: 43200,\n logLevel: environment.showAuthorizeLogs ? LogLevel.Debug : LogLevel.None,\n maxIdTokenIatOffsetAllowedInSeconds: 86400,\n disableIdTokenValidation: false,\n triggerAuthorizationResultEvent: true,\n configId: 'objectId',\n },\n ],\n }),\n ],\n providers: [OidcSecurityService, { provide: AbstractSecurityStorage, useClass: OidcStorageService }],\n})\nexport class OidcAuthModule {}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, finalize, tap } from 'rxjs/operators';\n\nimport { PendingService } from '../services/pending.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HttpPendingInterceptor implements HttpInterceptor {\n constructor(private pendingService: PendingService) {}\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n if (!this.shouldSkipUrl(request.url)) this.pendingService.setLoading(true, request.url);\n\n return next.handle(request).pipe(\n tap((evt: HttpEvent) => {\n if (evt instanceof HttpResponse) {\n this.pendingService.setLoading(false, request.url);\n }\n }),\n catchError(err => {\n this.pendingService.setLoading(false, request.url);\n return throwError(() => err);\n }),\n finalize(() => this.pendingService.clearPending(request.url))\n );\n }\n\n private shouldSkipUrl(url: string): boolean {\n const skipPatterns = [\n /\\.svg/,\n /app-version.json/,\n /notifyAgain/,\n /archive/,\n /complete/,\n /sendReport/,\n /extendExpireDate/,\n /regeneratePdf/,\n /\\/api\\/inspections\\/\\d+$/,\n ];\n\n return skipPatterns.some(pattern => (pattern instanceof RegExp ? pattern.test(url) : url.includes(pattern)));\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { AuthService } from '@shared/services/auth.service';\nimport { SnackbarErrorMessage } from '@ui-components/components/customized-snackbar/snackbar-message.enum';\nimport { SnackbarService } from '@ui-components/components/customized-snackbar/snackbar.service';\n\nimport { environment } from '../../../../environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TokenInterceptor implements HttpInterceptor {\n constructor(private authService: AuthService, private snackbarService: SnackbarService, private router: Router) {}\n\n private excludedRoutes: string[] = [];\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n if (request.url.includes('/assets/')) return next.handle(request);\n\n if (request.url.includes(environment.azureAuthConfig.stsBase)) {\n return next.handle(request);\n }\n\n const hasIdTokenHint = document.URL.indexOf('id_token_hint') > 0;\n const queryParams = { queryParams: { returnUrl: document.URL } };\n\n if (hasIdTokenHint) {\n this.router.navigate([AppRoutes.LOGIN], queryParams);\n }\n\n return this.authService.getAccessToken().pipe(\n mergeMap(token => {\n const hasIdTokenHint = request.url.indexOf('id_token_hint') > 0;\n\n if (token && !hasIdTokenHint) {\n const clone = request.clone({\n setHeaders: {\n Authorization: `Bearer ${token}`,\n 'X-Correlation-Id': uuidv4(),\n },\n });\n return next.handle(clone).pipe(\n catchError(err => {\n const isExcludedRoute = this.excludedRoutes.some(url => request.url.includes(url));\n\n if (err.status === 401 && !isExcludedRoute) {\n this.snackbarService.error(SnackbarErrorMessage.SessionIsOver);\n this.router.navigate([AppRoutes.LOGIN], queryParams);\n }\n return throwError(() => err);\n })\n );\n } else {\n this.router.navigate([AppRoutes.LOGIN], queryParams);\n return throwError(() => 'Empty token');\n }\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { EIcon } from '@shared/enums/icon.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomIconService {\n constructor(private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer) {}\n\n registerIcons() {\n Object.keys(EIcon).forEach(key => {\n const iconName = EIcon[key];\n this.matIconRegistry.addSvgIcon(\n iconName,\n this.domSanitizer.bypassSecurityTrustResourceUrl(`../assets/icon/${iconName}.svg`)\n );\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter } from 'rxjs/operators';\n\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nimport { environment } from '../../environments/environment';\n\n@UntilDestroy()\n@Injectable({\n providedIn: 'root',\n})\nexport class DeepLinkService extends PuSubscribable {\n constructor(private router: Router) {\n super();\n this.initializeDeepLinkHandler();\n }\n\n private initializeDeepLinkHandler(): void {\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationStart)\n )\n .subscribe((event: NavigationStart) => {\n const url = new URL(window.location.href);\n const hasLockFullScreen = url.searchParams.has('lockFullScreen');\n\n if (hasLockFullScreen && this.handleDeepLink(event.url)) {\n const currentUrl = this.router.url;\n this.router.navigateByUrl(currentUrl, { skipLocationChange: true });\n }\n })\n .untilDestroyed(this);\n }\n\n private isDeepLinkRoute(path: string): boolean {\n const ticketMatch = /^\\/tickets\\/\\d+$/.test(path);\n const inspectionMatch = /^\\/inspections\\/\\d+$/.test(path);\n return ticketMatch || inspectionMatch;\n }\n\n private handleDeepLink(url: string): boolean {\n try {\n const [pathWithoutParams] = url.split('?');\n\n if (!this.isDeepLinkRoute(pathWithoutParams)) {\n return false;\n }\n\n const path = pathWithoutParams.startsWith('/') ? pathWithoutParams.substring(1) : pathWithoutParams;\n\n const baseScheme = environment.deepLinkScheme;\n if (!baseScheme) {\n return false;\n }\n const deepLink = `${baseScheme}${path}`;\n window.location.href = deepLink;\n return true;\n } catch {\n return false;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { Meta } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { first } from 'rxjs';\nimport { filter, tap } from 'rxjs/operators';\n\nimport { CustomIconService } from '@app/services/custom-icon.service';\nimport { PuSubscribable } from '@app/utils/pu-subscribe';\n\nimport { DeepLinkService } from './services/deep-link.service';\nimport { environment } from '../environments/environment';\n\n@UntilDestroy()\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppComponent extends PuSubscribable implements OnInit {\n environment = environment;\n isAuthenticated = false;\n\n constructor(\n private metaService: Meta,\n customIconService: CustomIconService,\n iconRegistry: MatIconRegistry,\n private router: Router,\n private deepLinkService: DeepLinkService\n ) {\n super();\n customIconService.registerIcons();\n iconRegistry.setDefaultFontSetClass('material-icons');\n }\n\n ngOnInit() {\n this.metaService.addTag(\n {\n name: 'author',\n content: this.environment.ver,\n },\n true\n );\n\n this.router.events\n .pipe(\n untilDestroyed(this),\n filter(event => event instanceof NavigationEnd),\n first(),\n tap(() => {\n document.getElementById('initial-app-loader').remove();\n })\n )\n .subscribe()\n .untilDestroyed(this);\n }\n}\n","\n","import { Component, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve } from '@angular/router';\n\n@Component({\n selector: 'app-external-route',\n template: '',\n standalone: true,\n})\nexport class ExternalRouteComponent {}\n\n@Injectable()\nexport class ExternalRouteResolver implements Resolve {\n resolve(route: ActivatedRouteSnapshot): any {\n window.location.href = route.queryParamMap.get('targetUri');\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CheckForTokenGuard implements CanActivate {\n constructor(private router: Router) {}\n\n canActivate(route: ActivatedRouteSnapshot): boolean | Observable {\n if (route.queryParams.jwt) return true;\n\n this.router.navigate(['/']);\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ErrorAuthGuard implements CanActivate {\r\n constructor(private router: Router) {}\r\n\r\n canActivate(route: ActivatedRouteSnapshot): boolean {\r\n const error = route.queryParamMap.get('error');\r\n const errorDescription = route.queryParamMap.get('error_description');\r\n const permissionRequired = route.queryParamMap.get('permission-required');\r\n const anyPermissionRequired = route.queryParamMap.get('any-permission-required');\r\n\r\n if ((error && errorDescription) || permissionRequired || anyPermissionRequired) {\r\n return true;\r\n }\r\n\r\n this.router.navigate(['/login']);\r\n return false;\r\n }\r\n}\r\n","import { Location } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\nimport { Observable, of, take } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\n\nimport { AppRoutes } from '@shared/constants/app-routes.const';\nimport { AuthService } from '@shared/services/auth.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoginRouteGuard implements CanActivate {\n constructor(\n private router: Router,\n private authService: AuthService,\n private location: Location,\n private oidcService: OidcSecurityService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable {\n const currentUrl = window.location.href;\n\n if (this.isAuthenticationInProgress()) {\n return of(true);\n }\n\n return this.authService.isAuthenticated().pipe(\n mergeMap(result => {\n if (result) {\n return of(true);\n }\n\n return this.oidcService.checkAuth(this.authService.getConfigId()).pipe(\n take(1),\n mergeMap(() =>\n this.oidcService.getAuthenticationResult(this.authService.getConfigId()).pipe(\n map(accessToken => {\n if (accessToken) {\n return true;\n }\n\n const loginUrlTree = this.router.parseUrl(AppRoutes.LOGIN);\n loginUrlTree.queryParams['returnUrl'] = currentUrl;\n return loginUrlTree;\n })\n )\n )\n );\n })\n );\n }\n\n private isAuthenticationInProgress() {\n return (\n this.location.path() === AppRoutes.LOGIN ||\n this.location.path() === AppRoutes.ACCEPT_TOKEN ||\n this.location.path() === AppRoutes.ROOT ||\n !!window.location.hash\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { ExternalRouteComponent, ExternalRouteResolver } from '@app/components/external-route/external-route.component';\nimport { RoutePath } from '@shared/enums/route-path.enum';\nimport { CheckForTokenGuard } from '@shared/guards/check-for-token.guard';\nimport { ErrorAuthGuard } from '@shared/guards/error-auth.guard';\nimport { LoginRouteGuard } from '@shared/guards/login-route.guard';\n\n// Use the AuthGuard for protected routes\nconst routes: Routes = [\n {\n path: RoutePath.LOGIN,\n loadChildren: () => import('@app/modules/login/login.module').then(m => m.LoginModule),\n },\n {\n path: RoutePath.ACCEPT_TOKEN,\n loadChildren: () => import('@app/modules/accept-token/accept-token.module').then(m => m.AcceptTokenModule),\n },\n {\n path: RoutePath.NO_PERMISSION,\n canActivate: [ErrorAuthGuard],\n loadComponent: () =>\n import('@app/modules/main-application/no-permission/no-permission.component').then(m => m.NoPermissionComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_RESCHEDULE,\n loadComponent: () =>\n import('@widgets/board-builder/reschedule-widget/reschedule-widget.component').then(\n m => m.RescheduleWidgetComponent\n ),\n },\n {\n path: RoutePath.WIDGET_BOARD_DONE,\n canActivate: [CheckForTokenGuard],\n loadComponent: () => import('@widgets/board-builder/done-widget.component').then(m => m.DoneWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_COMMENT,\n canActivate: [CheckForTokenGuard],\n loadComponent: () => import('@widgets/board-builder/comment-widget.component').then(m => m.CommentWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_TURNOVER_COMMENT,\n canActivate: [CheckForTokenGuard],\n loadComponent: () =>\n import('@widgets/turnover-comment/turnover-comment-widget.component').then(m => m.TurnoverCommentWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_TURNOVER_DECLINE,\n canActivate: [CheckForTokenGuard],\n loadComponent: () =>\n import('@widgets/turnover-decline/turnover-decline.component').then(m => m.TurnoverDeclineComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_TURNOVER_INPROGRESS,\n canActivate: [CheckForTokenGuard],\n loadComponent: () =>\n import('@widgets/turnover-inprogress/turnover-inprogress.component').then(m => m.TurnoverInprogressComponent),\n },\n {\n path: RoutePath.WIDGET_BOARD_TURNOVER_ACCEPT,\n canActivate: [CheckForTokenGuard],\n loadComponent: () =>\n import('@widgets/turnover-accept/turnover-accept.component').then(m => m.TurnoverAcceptComponent),\n },\n {\n path: RoutePath.WIDGET_BID_ACCEPT,\n canActivate: [CheckForTokenGuard],\n loadComponent: () => import('@widgets/bid-management/accept-widget.component').then(m => m.AcceptWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_REJECT,\n loadComponent: () => import('@widgets/bid-management/reject-widget.component').then(m => m.RejectWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_APPROVE,\n canActivate: [CheckForTokenGuard],\n loadComponent: () => import('@widgets/bid-management/approve-widget.component').then(m => m.ApproveWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_DENY,\n loadComponent: () => import('@widgets/bid-management/deny-widget.component').then(m => m.DenyWidgetComponent),\n },\n {\n path: RoutePath.WIDGET_BID_COMMENT,\n canActivate: [CheckForTokenGuard],\n loadComponent: () => import('@widgets/bid-management/comment-widget.component').then(m => m.CommentWidgetComponent),\n },\n {\n path: RoutePath.OPEN_MOBILE_APP,\n loadComponent: () =>\n import('@widgets/open-mobile-app/open-mobile-app.component').then(m => m.OpenMobileAppComponent),\n },\n {\n path: RoutePath.DOWNLOAD_MOBILE_APP,\n loadComponent: () =>\n import('@widgets/download-mobile-app/download-mobile-app.component').then(m => m.DownloadMobileAppComponent),\n },\n {\n path: RoutePath.EXTERNAL,\n resolve: { link: ExternalRouteResolver },\n component: ExternalRouteComponent,\n },\n {\n path: ``,\n canActivate: [LoginRouteGuard],\n loadChildren: () => import('@main-application/main-application.module').then(m => m.MainApplicationModule),\n },\n { path: '**', redirectTo: '/home' },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' }), ExternalRouteComponent],\n exports: [RouterModule],\n providers: [ExternalRouteResolver],\n})\nexport class AppRoutingModule {}\n","import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { StoreModule } from '@ngrx/store';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\n\nimport { OidcAuthModule } from '@main-application/oidc-auth/oidc-auth.module';\nimport { HttpPendingInterceptor } from '@shared/interceptors/http-pending.interceptor';\nimport { TokenInterceptor } from '@shared/interceptors/token.interceptor';\nimport { ModalsModule } from '@ui-components/modals/modals.module';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app.routing.module';\nimport { environment } from '../environments/environment';\nimport { EnvironmentType } from '../environments/environment-config';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [\n AppRoutingModule,\n OidcAuthModule,\n\n BrowserAnimationsModule,\n BrowserModule,\n HttpClientModule,\n\n MatSnackBarModule, //Can't be removed because of using SnackService in TokenInterceptor (but will be nice to find way to remove it)\n\n StoreModule.forRoot({}), //Can't be removed because of next problem: (but will be nice to find way to remove it)\n //If store is initialized for root anywhere except AppModule it will not work\n //It's well known bug: https://github.com/ngrx/platform/issues/3700\n //Workaround is to initialized it here, but everything else should be done in correct modules\n StoreDevtoolsModule.instrument({\n maxAge: 25,\n logOnly: environment.type === EnvironmentType.Dev,\n }),\n\n MatDialogModule,\n ModalsModule,\n ],\n bootstrap: [AppComponent],\n providers: [\n //Can't be removed as HTTP_INTERCEPTORS is global and registered in AppModule (but will be nice to find way to remove it)\n //Some more details: https://dev.to/devakone/angular-when-httpinterceptor-doesn-t-work-with-lazy-loaded-modules-3ipg\n {\n provide: HTTP_INTERCEPTORS,\n useClass: TokenInterceptor,\n multi: true,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: HttpPendingInterceptor,\n multi: true,\n },\n ],\n})\nexport class AppModule {}\n","import { DEFAULT_CURRENCY_CODE, enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from '@app/app.module';\nimport { PuSubscribe } from '@app/utils/pu-subscribe';\n\nimport { environment } from './environments/environment';\nimport { EnvironmentType } from './environments/environment-config';\n\nif (environment.type === EnvironmentType.Prod) {\n enableProdMode();\n}\n\nplatformBrowserDynamic()\n .bootstrapModule(AppModule, {\n providers: [\n { provide: DEFAULT_CURRENCY_CODE, useValue: 'USD' },\n {\n provide: PuSubscribe,\n useValue: new PuSubscribe(),\n },\n ],\n })\n .catch(err => console.error(err));\n","var map = {\n\t\"./es\": 54529,\n\t\"./es.js\": 54529\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 = 40816;"],"x_google_ignoreList":[576]}