{"version":3,"mappings":"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AAO,IAAIpiC,EACjC,KAAKG,IAA0B,QAAjBI,OAAK+hC,oBAAY,eAAEC,QAASpiC,GAAWC,GAAQoB,KAAK8gC,aAAarwB,MAAQ7R,GAIvF,KAAM4O,EAAMlP,KAAQ0B,KAAK8gC,cACzB,YAAKE,aAEExzB,IAGH9O,uBAAR,WACIsB,KAAK8gC,aAAe,KACpB9gC,KAAK4gC,YAAa,EAClB5gC,KAAK6gC,OAAS,4CArCTniC,qUAAaH,KAHzBJ,cAAW,CACR21B,WAAY,UAEHp1B,6LCbAK,EACT,CACI,sFACA,wCACA,8CACA,+EACA,yEACA,mEACA,mEACA,qFACA,2FACA,qFACA,+EACA,8CACA,iCACA,6CACA,iCACA,uCACA,6CACA,uCACA,iCACA,uCACA,uCACA,oDACA,8CACA,8CACA,oDACA,oDACA,8CACA,2BACA,uCACA,iCACA,uCACA,iCACA,2BACA,iCACA,2BACA,2BACA,qDACA,iEACA,8CACA,2BACA,2BACA,uCACA,oDACA,wCACA,oDACA,oDACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,2BACA,2BACA,iCACA,iCACA,oDACA,uCACA,uCACA,uCACA,uCACA,gDACA,iCACA,2BACA,0DACA,iCACA,iCACA,uCACA,2BACA,iCACA,iCACA,2BACA,uCACA,iCACA,wCACA,kCACA,8CACA,kCACA,iCACA,uCACA,0DACA,oDACA,oDACA,oDACA,0DACA,0DACA,uCACA,kCACA,iCACA,uCACA,iCACA,uCACA,uCACA,uCACA,uCACA,uCACA,iCACA,2BACA,iCACA,oDACA,iCACA,iCACA,uCACA,uCACA,iCACA,iCACA,iCACA,0CACA,2BACA,uCACA,gDACA,4DACA,2BACA,uCACA,qBACA,2BACA,2BACA,iCACA,qBACA,iCACA,iCACA,iCACA,2BACA,iCACA,2FACA,2FACA,2BACA,6CACA,oDACA,iCACA,uCACA,2BACA,uCACA,2BACA,uEACA,8CACA,8CACA,oDACA,8CACA,oDACA,wCACA,0DACA,mDACA,2BACA,gEACA,yFACA,6CACA,uCACA,qBACA,2BACA,uCACA,iEACA,+CACA,iCACA,8CACA,kCACA,0DACA,8CACA,8CACA,wCACA,mCACA,0DACA,0DACA,wCACA,8CACA,8CACA,wCACA,8CACA,oDACA,oDACA,wCACA,wCACA,wCACA,oDACA,oDACA,oDACA,wCACA,oDACA,gEACA,oDACA,8CACA,8CACA,oFACA,mFACA,8CACA,oDACA,wCACA,oDACA,8CACA,0DACA,8CACA,8CACA,wCACA,wCACA,wCACA,wCACA,oDACA,wCACA,wCACA,oDACA,8CACA,oDACA,0DACA,6CACA,wCACA,kCACA,gFACA,6DACA,wCACA,oDACA,8CACA,8CACA,oDACA,oDACA,oDACA,yCACA,8CACA,wCACA,2BACA,yFACA,4BACA,0DACA,2BACA,2BACA,qBACA,2BACA,iCACA,8CACA,8CACA,uCACA,8CACA,2BACA,2BACA,iCACA,2BACA,qBACA,iCACA,2BACA,2BACA,kCACA,4BACA,kCACA,wCACA,4BACA,kCACA,wCACA,2DACA,4BACA,+CACA,6DACA,sDACA,wDACA,gBACA,0DACA,uCACA,iCACA,uCACA,2BACA,qBACA,0DACA,8CACA,6CACA,gEACA,8CACA,oDACA,8CACA,oDACA,gEACA,8CACA,yCACA,qFACA,qFACA,oDACA,0DACA,gEACA,yCACA,qDACA,8CACA,0DACA,8CACA,0DACA,iCACA,6CACA,iCACA,qBACA,2BACA,2BACA,uCACA,2BACA,2BACA,2BACA,sEACA,2BACA,qBACA,2BACA,uCACA,2BACA,iCACA,2BACA,uCACA,uCACA,uCACA,2BACA,iCACA,iCACA,2BACA,wCACA,yEACA,2BACA,8CACA,0DACA,wCACA,8CACA,wCACA,4BACA,wCACA,wCACA,8CACA,2BACA,8CACA,wCACA,kCACA,oDACA,gEACA,kCACA,oDACA,qBACA,iCACA,qBACA,uCACA,2BACA,qBACA,8CACA,gDACA,8CACA,uEACA,iCACA,uCACA,iCACA,2BACA,yCACA,yCACA,4BACA,2BACA,qBACA,iCACA,qBACA,2DACA,8CACA,0DACA,uCACA,iCACA,2BACA,iCACA,uCACA,eACA,2BACA,qBACA,wCACA,2BACA,uCACA,6CACA,kCACA,oDACA,iCACA,uCACA,kEACA,4DACA,uCACA,iCACA,6CACA,6CACA,iCACA,2BACA,uCACA,6CACA,iCACA,kCACA,wCACA,wCACA,2BACA,iCACA,uCACA,iCACA,oDACA,iCACA,4DACA,uCACA,2BACA,iCACA,2BACA,0DACA,iCACA,qBACA,2BACA,2BACA,iCACA,iCACA,iCACA,kCACA,uDACA,gEACA,qBACA,iCACA,2BACA,qBACA,2BACA,4BACA,2BACA,2BACA,gFACA,iCACA,iCACA,iCACA,iCACA,2BACA,6CACA,iCACA,iCACA,2BACA,uCACA,uCACA,2BACA,oDACA,uCACA,2BACA,iCACA,2BACA,qBACA,2BACA,qBACA,iCACA,2BACA,2BACA,iCACA,iCACA,iCACA,iCACA,8CACA,wCACA,qBACA,2BACA,sEACA,0DACA,sEACA,gEACA,oDACA,+CACA,iCACA,wCACA,uCACA,2BACA,2BACA,iCACA,mDACA,iCACA,gEACA,uCACA,iCACA,4DACA,2BACA,0DACA,oDACA,8CACA,kCACA,4BACA,iCACA,iCACA,2BACA,kEACA,qBACA,iCACA,+CACA,2BACA,iCACA,2BACA,2BACA,qBACA,oDACA,oDACA,kCACA,8CACA,kCACA,yCACA,iCACA,sEACA,qBACA,2BACA,uCACA,iCACA,iCACA,6CACA,uCACA,iCACA,iCACA,4BACA,iCACA,2BACA,2BACA,0DACA,uCACA,iCACA,qBACA,qBACA,qBACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,kEACA,gEACA,iCACA,iCACA,iCACA,6CACA,iCACA,2BACA,uCACA,qBACA,2BACA,2BACA,qBACA,2BACA,iCACA,2FACA,2BACA,iCACA,iCACA,oDACA,oDACA,oDACA,0DACA,uCACA,qBACA,2BACA,6CACA,iCACA,2BACA,iCACA,iCACA,iCACA,2BACA,2BACA,qBACA,4DACA,4DACA,iCACA,iCACA,oDACA,iGACA,8CACA,0DACA,oDACA,8CACA,0DACA,+CACA,8CACA,qDACA,wCACA,8CACA,oDACA,8CACA,gEACA,oDACA,oDACA,gEACA,oDACA,oDACA,oDACA,6EACA,oDACA,kCACA,+CACA,+CACA,0DACA,0DACA,oDACA,0DACA,oDACA,yCACA,8CACA,oDACA,8CACA,oDACA,kEACA,kEACA,8CACA,oDACA,oDACA,0DACA,oDACA,8CACA,0DACA,8CACA,wCACA,wCACA,8CACA,oDACA,yCACA,8CACA,8CACA,oDACA,wCACA,oDACA,wCACA,8CACA,wCACA,oDACA,0DACA,oDACA,wCACA,oDACA,8CACA,8CACA,wCACA,wCACA,uEACA,uGACA,oDACA,wCACA,8CACA,oDACA,0DACA,8CACA,8CACA,wCACA,iCACA,2DACA,qDACA,+EACA,+CACA,8CACA,oDACA,8CACA,oDACA,uCACA,iCACA,iCACA,2BACA,wCACA,2BACA,2BACA,iCACA,qBACA,0DACA,gEACA,iCACA,qBACA,iCACA,4EACA,2BACA,2BACA,2BACA,2BACA,2BACA,uCACA,2BACA,2BACA,oDACA,oDACA,oDACA,0DACA,8CACA,sEACA,oDACA,uCACA,uCACA,6CACA,0DACA,4DACA,+CACA,2BACA,iCACA,2BACA,oDACA,8CACA,uCACA,iCACA,qBACA,qBACA,8CACA,6CACA,8CACA,mFACA,gEACA,4EACA,qGACA,iCACA,0DACA,mDACA,2BACA,iCACA,2BACA,0DACA,2BACA,iCACA,iCACA,oDACA,8CACA,gEACA,0DACA,8CACA,oDACA,oDACA,2DACA,uCACA,iCACA,iCACA,qBACA,kCACA,2BACA,iCACA,2BACA,2BACA,iCACA,2BACA,2BACA,iCACA,iCACA,uCACA,uCACA,2BACA,uCACA,iCACA,6CACA,iCACA,2BACA,2BACA,uCACA,2BACA,0DACA,qBACA,2BACA,uCACA,0DACA,iCACA,iCACA,+FACA,uCACA,uCACA,2BACA,0DACA,oDACA,2BACA,iCACA,uCACA,oDACA,8CACA,gEACA,0DACA,0DACA,oDACA,gEACA,0DACA,oDACA,0DACA,oDACA,gEACA,sEACA,iCACA,qBACA,uCACA,gEACA,iCACA,iCACA,2BACA,qDACA,oDACA,0DACA,0DACA,oDACA,8CACA,qBACA,gEACA,6CACA,oDACA,wCACA,kEACA,wEACA,0DACA,oDACA,wCACA,wCACA,2BACA,iCACA,gEACA,uCACA,gEACA,8CACA,0DACA,oDACA,oDACA,0DACA,0DACA,uCACA,iCACA,2BACA,qBACA,qBACA,uCACA,oDACA,0DACA,0DACA,oDACA,uCACA,iCACA,2BACA,uCACA,iCACA,2BACA,iCACA,qBACA,2BACA,wCACA,2BACA,oDACA,8CACA,qDACA,oDACA,oDACA,0DACA,oDACA,8CACA,oDACA,wCACA,oDACA,8CACA,oDACA,0DACA,oDACA,2BACA,0DACA,oDACA,iCACA,iCACA,2BACA,uCACA,uCACA,iCACA,iCACA,wCACA,2BACA,uCACA,iCACA,qBACA,qBACA,6CACA,iCACA,6CACA,iCACA,2BACA,qBACA,iCACA,qBACA,2BACA,4BACA,2BACA,mCACA,iGACA,0DACA,oDACA,uCACA,oDACA,8CACA,8CACA,0EACA,mCACA,wCACA,8CACA,oDACA,wCACA,wCACA,kCACA,oDACA,oDACA,wCACA,iCACA,iCACA,iCACA,wCACA,wCACA,8CACA,uCACA,2BACA,4BACA,qBACA,2BACA,4DACA,8CACA,8CACA,2BACA,qBACA,0DACA,+CACA,0DACA,gEACA,uCACA,iCACA,kCACA,2BACA,iCACA,iCACA,wEACA,uFACA,2BACA,iCACA,2BACA,kCACA,gDACA,2BACA,iCACA,qBACA,iCACA,qBACA,2BACA,qBACA,2BACA,iCACA,uBACA,iCACA,iCACA,2BACA,qBACA,iCACA,2BACA,uCACA,2BACA,2BACA,2BACA,iCACA,2BACA,qFACA,2BACA,qBACA,uCACA,iCACA,uCACA,kEACA,2BACA,2BACA,6CACA,uCACA,iCACA,oDACA,qDACA,kCACA,wCACA,wCACA,oDACA,wCACA,oDACA,oDACA,qDACA,8CACA,oDACA,0DACA,wCACA,oDACA,wCACA,8CACA,+EACA,+EACA,wCACA,8CACA,2FACA,8CACA,8CACA,oDACA,oDACA,oDACA,oDACA,8CACA,wCACA,8CACA,wCACA,2BACA,oDACA,qBACA,uCACA,qBACA,wCACA,2BACA,iCACA,iCACA,iCACA,uCACA,iCACA,uCACA,iCACA,2BACA,uCACA,2BACA,qBACA,iCACA,iCACA,8CACA,oDACA,iCACA,uCACA,2DACA,qBACA,uCACA,iCACA,0DACA,2BACA,iCACA,uCACA,2BACA,iCACA,uCACA,2BACA,qFACA,qFACA,gEACA,mDACA,2BACA,2BACA,qBACA,uCACA,wCACA,iCACA,iCACA,+CACA,2BACA,oFACA,gEACA,6EACA,uCACA,2BACA,iCACA,kCACA,oDACA,iCACA,iCACA,2BACA,iCACA,2BACA,2BACA,iCACA,iCACA,iCACA,2BACA,wCACA,iCACA,8CACA,8CACA,wCACA,wCACA,uCACA,iCACA,uCACA,iCACA,iCACA,iCACA,6CACA,qBACA,iCACA,2BACA,sDACA,0DACA,uCACA,0DACA,2BACA,8CACA,qBACA,iCACA,iCACA,uGACA,kEACA,6CACA,uCACA,iCACA,uCACA,iCACA,2BACA,6CACA,qBACA,2BACA,yCACA,iCACA,oDACA,oDACA,8CACA,gEACA,wCACA,0DACA,wCACA,0DACA,oFACA,gEACA,0DACA,0DACA,0DACA,0DACA,oDACA,0DACA,gEACA,qBACA,2BACA,qDACA,wCACA,8CACA,8CACA,oDACA,gEACA,2BACA,iCACA,uCACA,2BACA,2BACA,iCACA,qBACA,iCACA,iCACA,8CACA,iCACA,uCACA,oDACA,2BACA,2BACA,2BACA,uCACA,iCACA,6CACA,2BACA,iCACA,6CACA,uCACA,iCACA,kCACA,2BACA,0DACA,oDACA,oDACA,0DACA,2BACA,kCACA,wCACA,oDACA,oDACA,oDACA,oDACA,wCACA,gEACA,wCACA,oDACA,wCACA,qBACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,8CACA,8CACA,8CACA,0DACA,gFACA,8CACA,8CACA,oDACA,0DACA,8CACA,wCACA,0DACA,8CACA,8CACA,8CACA,wCACA,8CACA,oDACA,8CACA,0DACA,wCACA,wCACA,oDACA,oDACA,wCACA,0DACA,2BACA,gEACA,gEACA,iCACA,iCACA,2BACA,2BACA,2BACA,iCACA,uCACA,iCACA,2BACA,uCACA,sEACA,2BACA,qBACA,iCACA,6CACA,iCACA,qDACA,2BACA,2BACA,iCACA,iCACA,gEACA,uCACA,iCACA,uCACA,2BACA,2BACA,2BACA,iCACA,qBACA,2BACA,qBACA,uCACA,qBACA,uCACA,oDACA,oDACA,0DACA,8CACA,0DACA,iCACA,2BACA,qBACA,iCACA,qBACA,qBACA,iCACA,yEACA,2BACA,iCACA,iCACA,uCACA,iCACA,2BACA,2BACA,2BACA,iCACA,6CACA,iCACA,6DACA,wCACA,wCACA,wCACA,8CACA,wCACA,kCACA,oDACA,qBACA,0DACA,0DACA,qDACA,oDACA,0DACA,8CACA,iCACA,2BACA,uCACA,2BACA,2BACA,iCACA,2BACA,4FACA,iGACA,6DCzvCKe,EACT,CACImhC,GACI,CACIC,IAAO,eACPC,GAAM,eACNC,OAAU,qBACVC,MAAS,qBACTC,KAAQ,2BACRC,QAAW,8BACXC,OAAU,qBACVC,OAAU,qBACVC,KAAQ,2BACRC,GAAM,iCAEN,gCAAiC,0DAEjC,sBAAuB,6EACvB,gCAAiC,qEACjC,qBAAsB,4GACtB,+BAAgC,uFAChC,mBAAoB,wHACpB,6BAA8B,mGAC9B,0BAA2B,uEAC3B,oCAAqC,wFACrC,oBAAqB,iEACrB,8BAA+B,4CAC/B,qBAAsB,6EACtB,+BAAgC,sCAChC,qBAAsB,8JACtB,+BAAgC,yIAChC,mBAAoB,kHACpB,6BAA8B,yIAC9B,kBAAmB,iJAEnB,6BAA8B,gHAE9B,yBAA0B,sHAC1B,wBAAyB,6DACzB,wBAAyB,oCACzB,yBAA0B,8BAC1B,wBA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CIrtC,MAAOrB,aACPsB,KAAM,WAEV,CACID,MAAOrB,YACPsB,KAAM,WAGdqtC,cAAe,CACX,CACIttC,MAAOrB,eACPsB,KAAM,qDACP,CACCD,MAAOrB,eACPsB,KAAM,2DACP,CACCD,MAAOrB,YACPsB,KAAM,uEACP,CACCD,MAAOrB,oBACPsB,KAAM,2HACP,CACCD,MAAOrB,mBACPsB,KAAM,uIACP,CACCD,MAAOrB,0BACPsB,KAAM,8EACP,CACCD,MAAOrB,yBACPsB,KAAM,0FACP,CACCD,MAAOrB,6BACPsB,KAAM,+HACP,CACCD,MAAOrB,mCACPsB,KAAM,uLACP,CACCD,MAAOrB,sCACPsB,KAAM,kHACP,CACCD,MAAOrB,4BACPsB,KAAM,2IACP,CACCD,MAAOrB,+BACPsB,KAAM,oKACP,CACCD,MAAOrB,iCACPsB,KAAM,2IACP,CACCD,MAAOrB,2BACPsB,KAAM,sEACP,CACCD,MAAOrB,gCACPsB,KAAM,qIACP,CACCD,MAAOrB,6BACPsB,KAAM,+PACP,CACCD,MAAOrB,+BACPsB,KAAM,2IACP,CACCD,MAAOrB,8BACPsB,KAAM,+HACP,CACCD,MAAOrB,gCACPsB,KAAM,iIACP,CACCD,MAAOrB,2BACPsB,KAAM,wLACP,CACCD,MAAOrB,gCACPsB,KAAM,8LACP,CACCD,MAAOrB,iCACPsB,KAAM,wLACP,CACCD,MAAOrB,+BACPsB,KAAM,oPACP,CACCD,MAAOrB,0CACPsB,KAAM,mOACP,CACCD,MAAOrB,0CACPsB,KAAM,gPACP,CACCD,MAAOrB,mBACPsB,KAAM,0FACP,CACCD,MAAOrB,kCACPsB,KAAM,wGACP,CACCD,MAAOrB,sCACPsB,KAAM,yMACP,CACCD,MAAOrB,oCACPsB,KAAM,kKACP,CACCD,MAAOrB,yCACPsB,KAAM,uKACP,CACCD,MAAOrB,6BACPsB,KAAM,oKACP,CACCD,MAAOrB,mCACPsB,KAAM,8JACP,CACCD,MAAOrB,kCACPsB,KAAM,oKACP,CACCD,MAAOrB,6BACPsB,KAAM,mJAGdwtC,kBAAmB,CACf,CACIztC,MAAOrB,SACPsB,KAA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,IACX8N,SAAU,uCACVC,SCdW,ogEDiBF0lD,IAA+C6xB,8dEV5D2rB,2EAEA,OAFoBC,QAEpBz9C,EAFA,CAAoB9yD,qBAchB,WAAY6yD,EAA8BG,GAA1C,MACID,YAAMF,EAAG,wBAAyB7yD,KAAsBswG,KAAMhwG,KADxB,sCAFhC+yD,qBAAqB,IAAIx0D,iBAOnC,OAVuC0xG,QAUvCz9C,4CAAuBD,SACnBvyD,KAAKq8F,mBAAmBxoF,KAAuB,QAAlB6+C,OAAKjzC,KAAKhV,gBAAQ,eAAE6xF,iEAzBhDv9F,WAGAgiF,qCAYJxiF,sBACAA,YAASmO,MAAC,oCACVnO,YAHQi0D,qUAAqB09C,KALjC3xG,aAAU,CACPqO,UAAW7N,IACX8N,SAAU,qBACVC,SCdW,i/BDgBF0lD,IAA8B6xB,mGEuP9B8rB,GAAkBC,aAGvBC,KACA9pC,KACA+pC,KACAC,KACA7pC,KAGA8pC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAxJ,IACG/5F,OAAOgjB,OAAO1yB,IAAa,CAG9By5F,GACA3G,GACAnkF,EACAukG,GACAxZ,GACAv1B,GACA6qB,GACAN,GACAD,GACA+K,GACAF,GACA6Z,GACAC,KACApU,GAGAqU,GACA5nF,GACA6nF,KAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAlnG,GACAmnG,GACA7rC,GACA8rC,GACAC,KACAC,GACAC,GAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAGAC,GACAhB,KACAiB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,KAGGrmG,OAAOgjB,OAAO7yB,IAAM,CACvBm2G,GACAC,GACAC,GACA1nB,GACA2nB,GACAC,GACAC,GAEA9tC,GACAv6D,EACApI,EACAqI,EACAqoG,KACAC,KACAC,GACAC,GACAC,GACAC,GACAC,KAGKC,GACT,CACIC,GACAnU,GACAE,GACAC,GACAG,GACAE,GACAC,GACAC,GACAN,GACAC,GACAM,GACAZ,GACAqU,GACAC,GACAC,GACAC,GACAzT,GACA0T,GACAzT,GACAC,GACAlc,GACA2vB,GACAC,GACAC,GACAx3B,GACAy3B,GACAC,GACAC,GACAC,GACAC,GACApe,GACAqe,GACAC,GACAC,GACAC,GACAvU,GACAZ,GACAoV,GACAC,GACApU,GACAD,GACAsU,GACApU,GACAqU,GACApU,GACA7gG,GACAwL,GACAvK,GACAuvE,GACA0kC,GACAjzB,GACA6e,GACA/I,GACAgJ,GACAxH,GACAyH,GACAM,GACAD,GACAhD,GACA4C,GACAkU,GACAjU,GACAnF,GACAoF,GACAiU,GACAhU,GACAiU,IAGFC,GACF,CACIv/B,KACAw/B,KACAl7B,KACAsV,KACArL,GACAsJ,GACAa,GACAvT,KACAqE,GACAuY,GACAwB,GACAkc,GACAvY,GACApB,GACAuC,GACAqX,MAIFC,GACF,CACI1V,KACA2V,KACA33B,KACAxO,KACA1C,KACA8oC,KACAzyC,KACA/lE,KACAqiC,MACAliC,IACAs4G,GACA9+C,MACAgb,KACA/M,KACA4nB,GACAxvE,IACA04F,KACAC,MACAn1F,MACAwkF,KACA8B,KACAiB,GACA11B,KACAy2B,MACA8M,MACAhgD,MACAka,GACA8F,KACAC,KACAggC,KACAlyG,MACAgjE,GACA,CAAEmvC,QAASxyG,MAAmB8oB,SAAU2pF,GAAuBC,OAAO,GACtE,CAAEF,QAASn5G,kBAAiBs5G,WAAYlzC,KAAuBizC,OAAO,IAIxEE,GACF,CACIvyG,MACAV,KACAQ,MACAwgE,KACA3gE,MACAga,MACA64F,GACAruF,KACAvK,KACA64F,KACAC,KACAC,KACAC,MACAC,KACAC,KACAC,MACAC,MACAjwC,MACAkwC,KACAC,KACAC,KACAC,MACAC,MACApB,MACAqB,KACAC,KACAC,MACAC,OAGFC,GACF,CACI9Y,GACA+Y,GACAtjB,GACAwK,GACAj/D,GACAk/D,GACAC,GACAC,GACAC,GACAC,GA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","names":["N","q","T","$","a","j","H","A","C","l","PaymentPage","k","c","EnumSystemOptionsZ","EnumEntityTypes","PaymentPageRedirectMethodsEnum","PaymentRequestProviderOption","CreditTypesEnum","CurrenciesEnum","EnumBitClientDeviceOSes","h","Properties","Language","p","Currencies","Value","Text","b","P","this","re","Q","api","ExecuteGetAction","ControllerName","PublicRequestID","ExecutePostAction","U","BitClientDeviceOS","X","ue","S","E","ie","oe","y","R","_","Z","z","te","le","ge","xe","F","window","nca3DSWebSDK","Date","getFullYear","MinYear","D","State","PaymentRequestParams","CCOwnerName","ShowLoading","PayButtonText","RC","IsChallenge","Navigator","GetRouteParams","Do","paymentpageEndpoint","GetPaymentPage","PageDataLoaded","Entity","RedirectToPayment","CustomCSS","AngularCSSString","languageService","SetLanguage","IsEnglish","ShowAmount","Currency","LIST","find","SetPaymentProviders","SelectedPaymentProvider","ProviderOption","CreditType","SetLabelsText","FillYearsAndMonthes","ShowChallenge","IsRecaptchaEnabled","recaptchaV3Service","G","L","setTimeout","InitFocus","OnHeightChanged","StopMessage","ResponseMessage","document","OnSuccessfulPayment","OnSuccessfulPaymentHandler","OnFailedPayment","OnfailedPaymentHandler","W","paymentPageContainer","nativeElement","getBoundingClientRect","height","fe","element","getElementsByClassName","Ce","length","de","top","postMessage","type","DoSubmitPaymentRequest","threeDSTransID","RecaptchaToken","execute","subscribe","SubmitPayment","Is3DSupported","Secure3DMinSum","SumPay","DoThreeDS","CreditCard","ThreeDSVersioning","GetPaymentRequestParamsObject","DoSubmit","threeDSServerTransID","threeDSMethodDataFormExists","createIframeAndInit3DSMethod","threeDSMethodURL","threeDSMethodData","console","log","DoThreeDSAuthentication","message","ThreeDSAuthentication","transStatus","RedirectURL","RedirectEx","createIFrameAndInit3DSChallengeRequest","acsURL","base64EncodedChallengeRequest","frameContainer05","CCOwnerID","CCOwnerPhone","CCOwnerEmail","CVV","Month","NumberOfPayments","Year","browserColorDepth","screen","colorDepth","toString","browserJavaEnabled","navigator","javaEnabled","browserLanguage","language","paymentElement","browserScreenHeight","offsetHeight","browserScreenWidth","offsetWidth","width","browserUserAgent","userAgent","browserTimezoneOffset","getTimezoneOffset","SubmitPaymentRequest","Data","IsUIEvent","value","CreditTypes","EntryID","MaxNumOfPayments","NumberOfPaymentsList","push","PaymentProvider","RedirectToPayPal","RedirectToBit","event","target","isNaN","Number","key","DetectChanges","IsAmex","substring","monthField","instance","focus","yearField","MaxYear","cvvField","AddLeadingZero","ownerIDField","ownerNameField","ProviderOptions","IsPaypalEnabled","IsBitEnabled","deviceDetector","os","PageTitle","OKButtonTitle","YearsList","Key","RCF","MonthsList","UI","GetBitUrl","close","GetPayPalUrl","RedirectMethod","RedirectSelf","location","href","open","g","J","I","w","M","args","B","providers","selector","template","m","se","O","path","component","data","Menu","Y","Route","f","ne","AppConfigService","getModuleNameByInstance","StateType","v","FocusOnMe_V","FocusOnMe_C","Object","Sections_V","Sections_C","OnGetCustomComponentStateName","ComponentName","LoadState","OnInitState","DoValidatorReset","validationGroups","forEach","reset","ChangeDetector","destroyed","detectChanges","ModuleName","Session","UserInfoDict","DataSources","Enums","SysEnums","ResourcesService","LISTITEM","LISTITEMX","apply","Framework","IsCustomBuild","ComponentStateName","IsNeedSaveState","SaveState","Navigate","includes","RouteHistoryService","GoBack","Promise","resolve","OnInputPropertiesChanged","OnPropertiesChanged","subscribtionOnEntitySaved","SysEvents","OnEntitySaved","OnExternalEntitySaved","Type","Action","subscribtionOnEntityLoaded","OnEntityLoaded","OnExternalEntityLoaded","subscribtionOnReloadComponent","OnReloadComponent","unsubscribe","ReloadComponent","RunDestroyCycle","RunInitStartCycle","RunInitFinishCycle","RunInitStartCycleInternal","RunInitFinishCycleInternal","RunDestroyCycleInternal","UnsubscribeRegisteredSubscriptions","OnStartInitCycleInternal","OnStartInitCycle","SubscribeEvents","InitState","OnInitDataSources","OnInitComponentInternal","ExecuteInitComponentHandler","OnInitComponent","OnInitComponentFinishedInternal","OnInitComponentFinished","IsUseFinishCycleChangeDetection","OnInitComponentFinishedAfterDetectInternal","CustomizeComponentsVisibility","CustomizationService","SetComponentCustomizations","Grids","toArray","Tabs","reduce","items","changes","UnsubscribeEvents","OnDestroyComponentInternal","OnDestroyComponent","FocusOnMe","IsAutoFocusEnabled","Sections","LockControls","ResetValidation","Array","AcceptGridChanges","SystemOptionFlag","SystemOption","EntityService","SetLastSavedEntity","NotifyEntitySaved","emit","validate","status","complete","then","isValid","brokenRules","validator","CompanyInfo","some","UserInfo","hasOwnProperty","bind","registeredSubscriptions","registeredInitComponentHandlers","closed","x","Endpoint","Fields_V","Fields_C","IsAddMode","SetFieldDefaultValues","call","SetDefaultFieldsLabels","IsDuplicateMode","QueryParams","IsDuplicate","EntityEntryID","IsLoading","StartNewEntity","LoadEntity","UnexpectedMessage","OnIsAllowDuplicate","ContextMenuDefault","text","visible","onClick","OnDuplicateInternal","_subscriptions","Toolbar","PageComponentName","ToolbarSettings","InitEntity","SetEntity","EntityType","OnGetEndpoint","Get","ReflectEntityLoaded","OnEntityValidate","concat","EntityValidations","map","toPromise","all","filter","NotifyEntityLoaded","NotifyReloadTitle","IsSaving","OnEntityDeleted","NavigateBack","OnEntityPrepareForSave","ValidateEntity","OnEntityConfirmSave","OnDoSave","Save","ReflectEntitySaved","DeleteEntity","Delete","ReflectEntityDeleted","OnEntityNew","RefreshEntityOriginal","SubscribeOnEntityChanges","OnEntityDuplicated","OnSetDefaults","GetEntityObjectName","GetDefaultTitle","OnEntityInitObjectName","GetDefaultEntityObjectName","TargetDocEntry","IsValidEntity","GetCurrentRouteWithoutParams","GetHistory","pipe","IsSuccess","Entities","_fieldsCount","Fields","Name","JSON","stringify","_fieldsNames","TypeName","GetEditorControl","Label","Screen","IsMobile","ShowAsWindowOnMobile","DisplayMode","BindHandler","_showAsWindowOnMobile","OnShowAsWindowOnMobile","OnIsDirtyDisabled","_isDirtyEntity","_isDirtyCustom","IsRunCycle","onScreenSizeChanged$Subscription","ScreenSize$","ReloadToolbar","pageHistory$Subscription","PageHistory$","Component","Title","GetTitle","UpdateHistoryItem","onFilterPanel$Subscription","FilterPanel","OnApplyFilter","OnClearFilter","OnReadyFilter","m_IsDialogVisible","m_IsDialogRendered","onEntityChange$Subscription","GetQueryParams","IsCurrentRouteWindow","InitToolbarSettings","EntityOriginal","EntityMode","OnInitEntity","OnInitTitle","OnInitSubtitle","OnInitContextMenus","OnInitViewModes","OnInitDefaultViewModeID","SetToolbarTitle","SetToolbarButtonsVisibility","BackButtonClick","Page","OnGetContextMenuItems","GetContextMenus","ContextMenuTitle","OnGetContextMenuTitle","ViewModes","GetViewModes","CloseButtonClick","ClosePage","OnGetToolbarSettings","Subtitle","GetSubtitle","SetHistoryItemTitle","ShowMenuButton","AppConfig","Mode","ShowBackButton","ShowBreadcrumb","IsShowAsFullScreen","HistoryLength","HasHistoryForWindow","ShowCloseButton","IsAllowNotifications","_showDialogAsBottomSheet","Error","m_DialogCompletedHandler","m_DialogCanceledHandler","InitDialog","ShowDialog","HideDialog","OnClose","CloseWindow","CloseDialogWithCancel","split","GetLastPageBodyElement","querySelectorAll","SetPagePreviewState","OnGetHistoryCustom","OnGetHistoryInternal","V","decorators","GetAPIURL","GetLoadOptions","ExecuteDeleteAction","EntryIDs","be","Le","Resolve","Reject","body","gridEl","gridParent","grid","AllowCustomization","AllowAdvancedFilters","EntityTypeName","currentRowIndex","_entityTypeName","IsColumnExists","IsRowExists","cellValue","saveEditData","hasEditData","cancelEditData","refresh","getSelectedRowKeys","rowData","editCell","GetColumn","columns","dataField","columnOption","GetRowCount","totalCount","getVisibleRows","NumberPrice","NumberSum","NumberRate","NumberPercent","export","customizeExcelCell","onAfterExporting","beginUpdate","onExporting","format","selectedRowsOnly","addWorksheet","worksheet","customizeCell","gridCell","excelCell","column","rowType","dataType","ce","Me","numFmt","alignment","xlsx","writeBuffer","endUpdate","Blob","texts","exportTo","IsRowDeletable","deleteRow","rowIndex","IsNewRowCreatable","addRow","catch","InfoMessage","getCellElement","MapEventsEdit","BeforeEdit","AfterEdit","AfterEditPromise","AfterEditAsync","setCellValue","ColumnEditHandler","MapEventsOptions","that","QueryEditCell","QueryShowCell","editing","form","customizeItem","ColumnCustomizeItemHandler","GetData","defaultSetCellValue","RaiseDependantEvents","allowAdding","Function","IsRowEditableOrUpdatable","allowUpdating","allowDeleting","row","IsRowEditable","editRow","getRowIndexByKey","rowElement","classList","add","parentType","mode","editorOptions","readOnly","tabIndex","cancel","cellElement","newColumnIndex","prevColumnIndex","newRowIndex","prevRowIndex","rows","promise","name","SetColumnsCaption","fullName","endsWith","columnCount","formItem","visibleIndex","InitGridGeneral","InitGridEditable","InitGridReport","InitGridLines","allowColumnReordering","allowColumnResizing","stateStoring","storageKey","enabled","replace","subscribtions","onInitialized","onRowClick","observed","focusedRowEnabled","option","SetColumnCaption","CurrentEntityTypeName","caption","_resourceService","orientation","putOnlyUsedFonts","addFont","setTextColor","GetPrintHeaderInfo","setFontSize","setFont","GetTextWidth","IsRTL","internal","pageSize","scaleFactor","ReverseHebrewText","GetPrintLogoPath","addImage","jsPDFDocument","topLeft","textColor","borderColor","borderWidth","drawLeftBorder","drawRightBorder","backgroundColor","font","size","style","groupSummaryItems","Ve","parseValue","Ue","join","rt","lookup","calculateCellValue","jt","pt","it","customizePdfCell","pdfCell","output","OnGetPrintTitle","OnGetFilterDescription","createElement","innerHTML","fontSize","fontWeight","position","whiteSpace","visibility","querySelector","appendChild","clientWidth","removeChild","reverse","toLowerCase","M4UConfig","customBuild","columnHidingEnabled","allowReordering","allowResizing","buttons","sorting","paging","OnRowClick","onEditingStart","OnEditingStart","onInitNewRow","OnInitNewRow","onEditorPreparing","OnEditorPreparing","onFocusedCellChanging","OnFocusCellChanging","onCellPrepared","OnCellPrepared","onOptionChanged","OnOptionChanged","onRowPrepared","OnRowPrepared","onRowValidating","OnRowValidating","hoverStateEnabled","visibleWidth","_popup","IsRowsExists","CreateNewRow","_Component","InitExtender","_Mode","_AllowCustomization","_AllowAdvancedFilters","_Name","gridAny","InitGrid","OnGridClick","DestroyGrid","vcRef","_data","componentView","Components","Endpoints","Services","useClass","useValue","_m4uConfig","keys","projects","moduleName","build","builds","Math","max","major","minor","loadM4UConfig","Resources","_resources","CustomResources","_customResources","_appConfig","d","appConfig","ProjectName","loadResources","mergeConfigs","DataSource","OnGetHomePagePath","RoutesWithEmptyLayout","RoutesAnonymous","RoutesProtected","IsHomePage","EntryComponents","getRoutes","canDeactivate","canActivate","SupportLegacyDisplaySizes","findIndex","OnInitApplicationAsync","OnLogoutApplicationAsync","OnGetGlobalDataSources","OnGetDefaultRouteParams","OnGetAppLoginExtensionLinks","setMenuModuleName","OnGetMenu","OnGetNavbarItems","GetLists","GetInjectableComponentOptions","assign","OnLoginPage","menu","values","random","cordova","SourceCurrency","DestCurrency","ItemCode","CardCode","Quantity","ItemID","CustomerID","DataSourceName","CredentialID","UserName","Password","MFAMethod","IsActive","DeliveryOptions","Address","credentialID","_notificationReadSubject","asObservable","ignoreLoadingBar","set","notificationID","next","MID","CreateBottomSheetInstance","ContentPortal","ResolveContent","Content","Class","ContentParams","Context","Height","destroy","ShowBottomSheet","OnCompleted","OnCanceled","ListParams","Show","MenuItems","Items","componentFactoryResolver","resolveComponentFactory","ViewContainerRef","createComponent","providedIn","IsDirty","resourceService","ui","OpenMessageBox","sysEvents","CloseMessageBoxSubject","GetComponentCustomizations","GetSeparatedGridCustomizations","HideGridColumns","IsNeedToHideElement","ComponentsCustomizations","FilterCustomizations","Filter","Columns","indexOf","GetRelevantCustomizations","Logic","DefaultValue","HideValues","IsHide","ReadOnly","Required","ValidationFunction","validationCallback","OnFieldValidation","ValidationMessage","rule","FieldsCustomizations","isArray","User","sessionService","CurrentUserID","Hide","screenService","IsDesktop","HideOnDesktop","HideOnMobile","options","columnResizingMode","columnAutoWidth","dateSerializationFormat","showBorders","showRowLines","renderAsync","savingTimeout","customSave","selectionFilter","selectedRowKeys","searchText","filterType","filterValues","filterValue","sortOrder","sortIndex","localStorage","setItem","customLoad","parse","getItem","columnChooser","search","headerFilter","container","scrolling","preloadEnabled","useNative","excelFilterEnabled","remoteOperations","filtering","useIcons","selectTextOnEditStart","isMobile","colCountByScreen","xs","searchPanel","onToolbarPreparing","toolbarOptions","isCustom","icon","onContentReady","totalItems","getView","_popupContainer","_initializePopupContainer","render","of","at","my","offset","groupIndex","isExpanded","onRowExpanded","every","expandRow","collapsedItems","getDataSource","customizeColumns","allowSorting","allowFiltering","valueExpr","displayExpr","dataSource","store","sort","cssClass","minWidth","allowGrouping","title","onContextMenuPreparing","allowHiding","onItemClick","groupCellTemplate","showColumnChooser","removeItem","state","clearFilter","getController","showHeaderFilterMenu","index","SetFloatingButtonsDefault","valueChangeEvent","inputAttr","autocomplete","onFocusIn","OnFocusIn","onKeyDown","OnChangeInputDirection","validationMessageMode","stylingMode","addEventListener","preventDefault","stopPropagation","autoResizeEnabled","step","code","stopImmediatePropagation","pickerType","IsTablet","displayFormat","DateFormatLong","useMaskBehavior","min","calendarOptions","showTodayButton","dropDownOptions","onOpened","GetDateBoxTodayButton","SetTodaysDate","OnCloseDateBox","onClosed","removeEventListener","placeholder","searchTimeout","ShowBottomSheetList","noDataText","showSelectionControls","multiline","maxDisplayedTags","applyValueMode","pageLoadMode","activeStateEnabled","layout","showTitle","showCloseButton","dragEnabled","hideOnOutsideClick","animation","duration","resolveLabelOverlapping","palette","legend","weight","tooltip","horizontalAlignment","argumentAxis","label","overlappingBehavior","rotationAngle","_options","showIndicator","showPane","shading","shadingColor","showArrowIcon","validationRules","floatingActionButtonConfig","select","ctrlKey","class","dir","_popupContentId","getHours","getMinutes","setHours","isDesktop","showAsBottomSheet","parentElement","display","IsMultiSelection","ValueExpr","DisplayExpr","IsSearchEnabled","SearchExpr","_saveValueChangeEvent","ShowList","_isEnabled","_field","_savedEntity","Field","Deactivate","he","Yes","No","Cancel","Clear","Done","Loading","Select","Search","Back","OK","appConfigService","systemOptionsService","getSystemOption","getSystemOptionAsBoolean","m_CompanyInfoDict","m_bIsFrameworkInitialized","resources","ResponseCode","createEvent","initEvent","dispatchEvent","systemEndpoint","GetCompanyInfo","GetSystemOptions","GetFirstModuleName","DecimalSeparator","ThousandsSeparator","InitCompanyInfoDictinary","setOptions","InitLanguage","InitializeDevExpress","InitializeInjectableComponentsOptions","devExpress","defaultLanguage","rtlEnabled","forceIsoDateParsing","InitDictionaries","NumberGeneral","NumberQuantity","UserInfos","Params","sysEventsService","NavigateDefault","InitializeFramework","_languageSubject","frameworkService","IsLoggedIn","getParams","url","GetSessionID","SessionID","SecureKey","SecureKeyType","loginService","DoLogin","NavigateByUrl","goToLoginPage","ReturnUrl","match","RegExp","LoginEndpoint","Login","CheckResult","OnLoginSuccess","CheckResultMessage","OnLoginBySessionFailed","IsFrameworkInitialized","SessionService","SaveSessionCredentials","ClearSessionCredentials","SetSession","routeHistoryService","ClearHistory","StartSaveHistory","Logout","ImpersonateLogin","GetUrl","NavigateExternal","pathname","activatedRoute","snapshot","queryParams","entries","getParamValue","GetQueryParamsInternal","GetQueryParamsWithoutPrefixes","GetQueryParamsPrefix","startsWith","params","deploymentApplicationFolder","RefreshExpiredSessionTimeout","GetUrlTree","router","navigateByUrl","GetCleanRoutes","config","ShowAsWindow","outlet","getParam","shift","GetPagesPrefix","GetCurrentRoute","routerState","root","firstChild","createUrlTree","outlets","primary","children","serializeUrl","toISOString","test","parseInt","_notificationUnreadSubject","_notificationsSubject","LoadPushMessagesUnread","_notificationReadSubscription","pushMessageEndpoint","NotificationRead$","_notificationUnReadSubscription","GetPushMessagesUnread","Item1","Item2","_timerId","setInterval","clearInterval","Pages","login","logout","credentials_activity_status","notificationshistory","notification_servers","notification_templates","notifications","system_options","credential_login_history","request_history","credentials_report","credentials_creation","data_views","remote_request_history","NotificationViewComponent","PrintBoxDialogComponent","SignBoxDialogComponent","ImageBoxDialogComponent","PhotoBoxDialogComponent","PasswordManageComponent","CredentialsActivityStatusComponent","NotificationsHistoryComponent","PreviewDialogComponent","NotificationServerComponent","NotificationServerListComponent","NotificationTemplateListComponent","NotificationTemplateComponent","HtmlBoxDialogComponent","NotificationTestDialogComponent","NotificationPreviewDialogComponent","SystemOptionsComponent","AddSystemOptionDialogComponent","BarcodeBoxDialogComponent","CredentialLoginHistoryComponent","RequestHistoryListComponent","RequestHistoryComponent","RemoteRequestHistoryListComponent","RemoteRequestHistoryComponent","WelcomeUserDialogComponent","HistoryViewComponent","SystemCredentialsComponent","SystemCredentialsCreationComponent","WelcomeMessageConfigDialogComponent","DataViewListComponent","Lists","Languages","NotificationDeliveryOptions","ID","UserCreationOptions","WelcomeDeliveryOptions","SortOrder","NotificationTypes","NotificationStatuses","NotificationPredefinedSmtpServers","SMTPServer","SMTPPort","SMTPUseSSL","NotificationPredefinedSmsServers","SMSEndpoint","SMSToken","SMSEndPointIsInforU","MFAMethods","ExportMenuItems","PopupShowStatuses","InfoUTypes","SystemOptions","DataType","SectionName","UserLoginStatuses","IsSuccessStatuses","HistoryEventTypesEnum","YesNo","Translations","lblLanguage","lblUserName","lblPassword","titleLogin","btnLogin","btnLogout","btnChangePassword","btnContactUs","btnRecoverPassword","lblSaveCredentials","titleLogout","titleLogoutLong","titleLogoutLast","titleSessionExpiredTitle","titleSessionExpired","titleChangePasswordTitle","titleChangePassword","titleChangePasswordTitle2","titleException","titleExceptionLong","titleComingSoonTitle","titlePasswordChanged","titleIdentification","titlePasswordEntry","titleRecoverPasswordTitle","titleWelcomePasswordTitle","titleRecoverPassword1","titleRecoverPassword2","titleRecoverPassword3","titleRecoverPassword4","titleWelcomePassword2","titleWelcomePassword3","btnReEntry","genOK","genYes","genNo","genCancel","genNoData","genPrint","genSign","genReset","genTakePhoto","genSavePhotos","genDownload","msgSignHere","msgSignatureRequired","msgPasswordsDontMatch","errorNetwork","errorSessionExpired","errorUserInvalid","errorNotInitialized","errorUnexpected","errorUnauthorized","errorPasswordExpired","msgFinishEditing","errorUserNameNotFound","errorIsNotExistsPhoneAndEmail","lblDay1","lblDay2","lblDay3","lblDay4","lblDay5","lblDay6","lblDay7","lblDay1s","lblDay2s","lblDay3s","lblDay4s","lblDay5s","lblDay6s","lblDay7s","msgSuccess","msgNotPerformed","lblTimes","lblUser","btnCancelDocument","lblBy","titleCreatedBy","titleCreated","titleCreatedAt","titleAgo","lblAgo","lblSearch","lblCloseSearch","lblColumnChooser","lblColumnHiding","lblShowGridFilter","lblHideGridFilter","lblExcel","lblPdf","lblViewList","lblViewGrid","lblDisplayUserName","lblLastUseDate","lblLastUseBefore","progressIndicator","lblUpdated","lblNoSorting","lblVersion","lblDateIsNull","f702","f703","f704","f705","f706","f707","f709","f710","f711","f712","f713","f714","f715","f716","f717","f718","f720","f721","f722","f723","f724","f725","lblOldPassword","lblNewPassword1","lblNewPassword2","lblRecoveryType","lblRecoveryPhone","lblRecoveryEmail","btnSendRecoveryCode","btnCheckUserName","btnBackToLogin","lblRecoveryToken","btnResend","btnSaveChanges","btnGeneratePassword","btnCreateCredentials","btnUnlockUser","lblDisplayUsername","lblDisplayUserDescription","lblCredentialsNotExist","lblPendingWelcome","titleUserInformation","errorMaxSizeUploadError","msgFileSizeRestriction","btnSelectFiles","btnMakePhoto","lblAttachFileSize","lblFilters","lblAt","lblObjectName","lblIsOverride","lblValidation","lblDViewsDBDuration","lblXViewsDBDuration","lblCheckPerformance","lblValidateViews","lblViewError","lblLoginOTPSendMethod","lblLoginOTPEmail","lblLoginOTPPhone","lblLoginOTPOTP","lnkLoginByOTP","msgNotificationSent","btnLoginOtpSendOtp","lnkLoginByPassword","lblApply","lblTaxNumber","lblIsActive","lblEmail","lblPhone","lblIsPendingWelcome","lblIsOnline","lblIsLockedOut","lblCreateCredentials","msgRouteNotFound","btnReload","lblHideColumn","lblShowHiddenColumns","lblName","lblDescription","msgLoading","lblSentDate","lblSentBy","lblEntryID","lblFromAddress","lblFromDisplayAddress","lblAddress","lblSubject","lblMailBody","lblDeliveryOption","lblSendNotificationBy","lblUsernameCreationOption","lblStatus","lblCCAddress","lblBccAddress","lblFailureDescription","lblNotificationTemplate","lblFrom","lblUntil","lblAdd","lblClear","lblCompactMode","lblSessionAlmostExpiredTitle","lblSessionAlmostExpiredPrompt","lblSessionExpiredTitle","lblFirstDate","lblLastDate","lblSessionExpiredPrompt","lblNotificationContent","lblGeneral","lblOptions","lblCustom","lblMFACode","titleMFACodeOnEmailSent","titleMFACodeOnPhoneSent","lblMFAMethod","Month_1","Month_2","Month_3","Month_4","Month_5","Month_6","Month_7","Month_8","Month_9","Month_10","Month_11","Month_12","lblExport","lblCredentialType","lblIsRestrictByIP","lblIsExcludeFromMFA","lblIPRangeStart","lblIPRangeEnd","lblIPErrorMessage","msgIPRangesIsEmpty","msgIPRangeIsEmpty","msgPasswordMinLength","msgPasswordMinCountDigits","msgPasswordMinCountLetters","msgPasswordComplexityRequirement","errorOnlyImageAllowed","btnClose","lblPhoto","lblDragAndDrop","errorRequiredMessage","titleDuplicate","lblAllNotifications","lblSMTPServer","lblSMTPPort","lblSMTPUserName","lblSMTPPassword","lblSMTPUseSSL","lblSMSEndpoint","lblSMSUserName","lblSMSPassword","lblSMSToken","lblSMSEndPointIsInforU","titleTemplateInformation","titleEmailInformation","lblFromEmail","lblFromEmailDisplay","titlePhoneInformation","lblNotificationServer","lblFromPhone","lblSMSBody","titlePushMessagesInformation","lblPushMessageBody","lblHTMLBody","btnSave","titleDelete","lblUseDefault","lblNoUnreadMessages","lblTo","lblPushMessageContent","lblSmsMessageContent","lblIsAutomatic","lblSystem","lblPopupShowStatus","lblEmailContent","btnShowInEditor","titleLeavePageConfirmation","btnLogOff","btnStayConnected","btnGoToHomePage","lblReadDate","msgDeleteNotificationTemplateQuestion","lblNotificationServerWrong","msgInvalidEmail","btnTestServer","lblMIDIsMissing","lblEnterMID","btnShowPreview","lblIsServer","lblIsClient","lblModuleName","lblLogin","lblFramework","lblOption","lblValue","lblSectionName","lblAddOption","msgOptionAlreadyExists","msgOptionEmpty","lblBadLogin","msgRemoveOption","titleEmailConfiguration","titleSMSConfiguration","msgDeleteNotificationServerQuestion","msgNoData","lblEmailHeader","lblConfigure","lblDefaultFromAddressForInforU","lblDefaultFromAddressForUnicel","lblInforUFromPhoneValidationTooltip","lblNotifications","lblMinimize","lblShowMore","titleWhatsAppInformation","lblWhatsAppBody","lblWhatsAppApiKey","lblWhatsAppEndpoint","titleWhatsAppConfiguration","titleNotificationServerList","titleNotificationTemplateList","lblPoweredBy","titleChooseOption","titleWebAPIAllowedIPs","lblIpAddress","lblLoginDate","lblPrint","lblDateFrom","lblDateTo","lblDate","msgCouldNotStartVideoError","lblCameraModeVideo","lblCameraModePhoto","titlePreview","msgLogoutQuestion","lblGroupPanel","lblExpandAll","lblMultiEmailError","msgPhotoMinCountError","msgPhotoMaxCountError","lblRestoreDefaultView","lblStartDate","lblDuration","lblController","lblAction","lblMethod","lblStatusCode","lblRequestData","lblQueryString","lblBody","lblResponse","msgTextCopied","lblCopy","btnGoToLoginHistory","btnGoToRequestsHistory","btnManageCredentials","btnGoToCredentialsReport","btnWelcomeUser","lblTestFromPhone","lblHistory","lblNewValue","lblOldValue","lblFieldCaption","lblDocumentCaption","lblHistoryLineAdded","lblHistoryLineRemoved","lblHistoryLineNumber","lblHistoryNotFound","lblHistoryChangeAdded","lblHistoryChangeRemoved","msgLoadingPDF","lblImpersonatedBy","lblIsUserCustomTemplate","msgIsUserCustomTemplateEnable","btnEnableEditable","btnDisableEditable","msgScreenSizeChangedRefresh","msgOrientationChangedRefresh","lblNotAssigned","m_Dictionaries","m_CustomDictionaries","m_Lists","OverrideModuleName","getOwnPropertyNames","LoadFieldCustomizations","LoadComponentCustomizations","GetEntitiesResources","BL","EnsureInitialized","getResourceValue","StringMap","Old","New","tryGetValueFromDictionaries","GetValueFromPath","sortListfunc","localeCompare","_pageHistorySubject","_historyItemsSubject","navigationId","_history","Id","OnNavigateDefault","onPopState","OnBrowserButtonClick","events","GetCurrentRouteWithUrl","getCurrentNavigation","id","Url","IsWindow","SaveHistoryItem","ShareHistory","pop","GoBackFromWindow","NavigateItem","navigatorService","splice","ClearPagesState","ClearPageState","route","GetScreenSize","onScreenSizeChanged","showRefreshMessage","showMessageHandler","clearTimeout","rc","uiService","_currentOrientation","Orientation","breakpointObserver","observe","processRefreshMessage","_currentScreenSize","isMatched","deviceType","matchMedia","matches","sessionStateChangedSubject","m_Session","DisplayUserName","DisplayUserDescription","m_UserInfoDict","m_DataSources","initAppSubscription","SetDataSources","notificationService","Start","Started","error","Ended","logoutAppSubscription","Stop","sessionExpiredTimeoutHandler","sessionAlmostExpiredTimeoutHandler","AlmostExpired","AutoEndSession","Expired","Success","_onEntitySavedSubject","_toolbarReloadSubject","_selectedRouteChangedSubject","_reloadMenuItemsSubject","_menuPositonSubject","_filterPanelSubject","_pageSidePanelStateSubject","_pagePreviewStateSubject","_openMessageBoxSubject","_closeMessageBoxSubject","_breadcrumbSubject","_defaultNavigationSubject","_loadPanelSubject","pageComponentName","fileName","systemOptions","IsSupportedPasswordChange","CloseMessageBox","ShowMessage","GetNotifyOptions","closeOnClick","closeOnSwipe","GetNotificationTop","contentTemplate","show","from","to","hide","innerHeight","ExecuteGetRequest","ExecutePostRequest","ExecuteDeleteRequest","http","post","GetParams","get","delete","PrepareQueryParams","headers","GetHeaders","reportProgress","context","responseType","PrepareQueryParamsInternal","ConvertToServerDate","UTC","getMonth","getDate","getSeconds","standaloneApplicationApiUrl","port","protocol","hostname","prototype","ToDate","IsToday","valueOf","Time","GetDateApproximateInternal","IsSameDate","IsHasTime","TimeFormatShort","DateFormatShort","getTime","floor","setDate","setMonth","MapObject","Description","GetNewInstance","CloneObject","IsEmpty","charCodeAt","imul","padStart","atob","slice","Uint16Array","Uint8Array","byteLength","String","fromCharCode","btoa","buffer","ConvertToBase64","exec","FileReader","onloadend","result","Buffer","File","readAsArrayBuffer","ConvertToBlob","URL","createObjectURL","Extension","DownloadFile","download","click","revokeObjectURL","IsObject","StringifyObject","readAsDataURL","Set","XMLHttpRequest","overrideMimeType","send","responseText","deep","dateParser","Proxy","IsArray","DeepProxy","deleteProperty","round","SearchTree","getResponseHeader","readyState","_reISO","_reMsAjax","FilterTree","declarations","exports","Ge","production","version","e","t","o","n","CreateSections","OptionName","CurrentOption","InOut","i","getElementById","GetElementID","scrollIntoView","behavior","block","r","getElementsByTagName","attributes","DeleteOption","u","SectionInfo","SectionIndex","IsGeneral","s","K","ee","animations","ModulesDataSource","IsServer","IsClient","CloseDialogWithSuccess","Width","IsWideScreen","OKButtonText","CancelButtonText","ExtraButtons","Buttons","OKButtonTabIndex","TabIndex","pageButtons","okBtnRef","btn","CloseButtonHidden","DefaultIsClient","InitTabs","InitModulesDataSource","InitSystemOptions","addGeneralOptionDialog","ShowDialogShort","CurrentTabIndex","AddGeneralOption","AddCustomOption","systemOptionsList","ShowOption","ae","GeneralOptions","ValueBoolean","ValueNumber","CustomOptions","systemOptionsEndpoint","SaveOptions","reload","messageDialog","IsDeleted","Prompt","GetOptions","GeneralOptionSettings","CustomSections","IsShowPasswordTooltip","PasswordComplexityLen","PasswordComplexityMinChars","PasswordComplexityMinDigits","TextBox","elementAttr","OnShowPasswordTooltip","oi","ti","expandedCard","OnClick","IsOpened","childElementCount","ShowAsUsualOnMobile","Re","bottomSheetService","ShowContextMenu","ni","Disabled","si","di","overflow","opacity","pi","Group","fi","IsGridEditable","WindowPath","WindowParams","Ee","yi","Si","CustomCloseAction","OnCancel","CloseBottomSheet","ValidationGroup","ValidateValidationGroup","OnOK","OnOkValidationFailed","IsPageShowAsFullScreen","AutoCloseBottomSheet","Oi","Ti","handler","fileLoader","files","ReturnDataType","ResetInput","srcElement","readAsText","Ei","Li","Ai","Ni","Wi","$i","Gi","_mediaItems","SetPreview","StartVideo","IsCameraStarted","StopVideo","VideoStream","PreviewMediaItem","IsPreview","video","pause","srcObject","getVideoTracks","stop","VideoWidth","GetClientWidth","VideoHeight","GetClientHeight","VideoAspectRatio","PreviewWidth","PreviewHeight","mediaDevices","getUserMedia","facingMode","ideal","aspectRatio","audio","getSettings","play","TakePhoto","MediaItems","IsAutoSavePhotoAfterTake","OnSavePhotos","Recording","RecordInterval","RecordTimeSeconds","RecordTimeString","StartRecording","GetVideoBlob","VideoDataUrl","GetSafeUrlFromBlob","VideoBytes","MediaRecorder","IsVideoRecording","IsDialogVisible","preview","src","ImageBase64","thumbs","repaint","OnClosePreview","validationGroup","MinCount","MaxCount","IsVideoMode","pe","AddPhoto","Te","_e","GetNewMediaItemEntryID","GetVideoCover","ze","He","cn","ImageBytes","Je","canvas","getContext","drawImage","toDataURL","_imageMimeType","ondataavailable","start","onstop","onerror","sanitizer","bypassSecurityTrustUrl","setAttribute","load","currentTime","videoWidth","videoHeight","toBlob","GetClientBodyElementRect","ji","Hi","Qi","Ki","PDFData","IsAllowPrint","OnPrintButtonClick","DoPrint","OnCustomPrint","observers","pdfViewer","iframe","contentWindow","print","Xi","ta","qi","ea","la","IsDrawing","pad","isEmpty","aa","_clientHeight","ResizePad","_clientWidth","SignatureData","LoadSignature","OnTouchMove","passive","Options","penColor","maxWidth","SignatureReadOnly","clear","ClientWidth","ClientHeight","MaxSignatureHeight","_areaAroundSize","fromDataURL","ratio","off","sa","da","ua","signBox","OkButtonText","OkText","SetClientSizes","ClearSignature","GetCanvasWidth","pn","ca","ga","mn","ImageSource","ShowLargeWindow","WindowHeight","WindowWidth","ma","xa","hn","fps","qrbox","OnTextDecoded","OnResultDecoded","IsInititialized","gn","DeviceIDs","CurrentDeviceIndex","StartHtmlQrCode","StopHtml5QrCode","html5QrCode","isScanning","deviceId","Config","QrCodeSuccessCallback","ReaderElement","va","framework","Reverse","hasView","viewContainer","createEmbeddedView","templateRef","ve","ba","Position","elRef","_a","onShow","_contextMenus","onHide","Pa","Wt","Se","Ca","st","maxZoomLevel","minZoomLevel","subscribtion","disabled","St","Ie","inputmode","We","lastIndexOf","isShowZero","Ct","ignoreEmptyValue","ft","_Currency","IsHideLabel","bn","Oe","Da","xn","In","ReverseValue","vn","viewContainerRef","UseColumnCaption","Color","TrueColor","_defaultActiveColor","FalseColor","getHtmlContent","cellTemplate","list","offsetParent","offsetTop","defaultView","getComputedStyle","getPropertyValue","Ia","focusStateEnabled","_disabled","NavPath","NavEntryID","NavParams","displayValue","onclick","contextMenuService","addContextMenu","Sn","Cn","searchEnabled","searchMode","SetItemTemplate","_DataMode","minSearchLength","openOnFieldClick","_ShowExtra","SetDisplayExpression","_ShowValue","_ItemCssClass","itemTemplate","PrepareItemTemplate","_DisplayExpr","ExtraField","ValueField","TextField","ShowValue","ShowExtra","searchExpr","_TextField","_ValueField","_ExtraField","GetHighlightedString","ItemCssClass","Ja","calculateFilterExpression","getCalculateFilterExpression","CustomFilterType","RelatedToAtLeastOneFilterExpressionBuilder","es","commands","LinkQueryParams","wn","rs","ye","pure","It","Store","byKey","warn","mt","DateFormatCompact","qe","DateFormatFull","getDay","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustResourceUrl","Pe","abs","as","Xe","Enabled","_Enabled","m_bInitComplete","Init","IsColumn","InitColumnRules","InitNormalRules","DoNotShowRequiredMsg","RequiredMessage","resourcesService","_getOption","_setOption","ke","ngAfterViewInit","Ke","Ls","Fs","Bs","En","eventsQueue","eventUnsubscribeFunction","renderer","listen","elementRef","EventName","IgnoreNavigationKeys","keyCode","ignoreKeyCodes","OnEvent","subscription","ks","DebounceTime","ThrottledEvent","Ks","MessageCode","Message","me","applicationPath","et","Zs","nl","Ae","ol","tt","IsSupported","swPush","notificationClicks","OnNotificationClicked","notification","action","NavigateCallback","Notification","permission","requestPermission","serviceWorker","getRegistration","showNotification","Rn","al","browser","device","IsIphone","clone","session","method","detectContentTypeHeader","has","AddHeaders","GetTrackProgressHeader","FormatFields","handle","HandleEvent","HandleError","GetErrorResponse","EndSession","ResponseExtendedMessage","statusText","stack","ul","HandleTrackProgressEvent","loaded","total","dateRegex","Ne","dl","vl","An","SidebarState","SidebarComponentOptions","SidebarPinned","sidebarService","Close","OnStateChanged","Be","yl","_sidebarSubject","_sidebars","CreateSidebarInstance","SidebarName","Nn","Xt","xl","Sizes","getInitialRoute","sessionStateChanged$","handleRoutes","LoadPanel","loadPanelVisible","baseUrl","containerRef","bottomSheetContainerRef","getSelectedMenuItem","menuItems","ChangeSelectedRoute","shouldGetInitialURL","initialURL","GetCurrentUrl","Fn","Sl","handleNavigationEnd","Ot","IsExternal","zt","read","Il","_l","OpenMessageBoxSubject","OpenMessageBoxDialog","MenuPositon","SetMenuPositon","MenuOpened","messageBoxDialog","_t","Tl","Hn","Nl","Gn","command","SwitchLanguage","nt","OnOpenContactUs","OnChangePassword","OnLogout","_menuOpened","MenuInstance","ExpandParentItems","collapseAll","_contentReadyAction","_initContentReadyAction","InitMenuItems","InitializeItems","ModulesVersion","getModulesVersion","UserMenuItems","GetUserMenuItems","SelectedRoute","_selectedItem","selectItem","TargetComponentType","IsVisibleButton","ComponentType","BaseAction","containerViewChild","InitializeItem","GetMenuTranslation","InitMenuItem","permissionFunction","isVisibleOnMobile","selected","GetParentMenus","expandItem","node","parent","itemData","pathParams","MenuTooltip","Target","Visible","contains","GetMenuIconElement","ServerVersion","ClientVersion","toggle","messageBox","loginEndpoint","ChangeLanguage","$e","ht","Pt","Ml","static","Al","Gl","Hl","Zt","m_store","Tt","searchValue","SearchFields","ComplexFilter","Sort","IsSortDescending","desc","DistinctField","skip","Skip","take","Take","DLOSearch","DLOSearchFields","DLOSort","DLOIsSortDescending","DLOSkip","DLOTake","DLOComplexFilter","DLODistinctField","yt","IsRaw","Dt","loadMode","ImplementLoad","onLoaded","ImplementByKey","kl","customLoadAction","ShapeResponse","ActionName","Et","customGetAction","Xl","ImplementTotalCount","Kl","endpoint","GetList","Count","Qe","m_DataSource","Un","Jt","isLoaded","m_DataStore","IsLoaded","paginate","on","Vn","update","ImplementUpdate","remove","ImplementRemove","insert","ImplementInsert","Ql","__rawData","ut","je","Ye","gt","GetByValue","Zl","Wn","LoadPushMessages","_sidebarStateSubscription","DS","Reload","IsLoadAllNotifications","PushMessages","GetPushMessages","Repaint","OnAllNotificationsLoad","Rt","Yl","ql","lt","$n","viewModesMenu","RegisterSubscription","Mt","Breadcrumb","IsBreadcrumbVisible","InitInjectedComponents","TargetModuleName","TargetComponentName","TargetAppName","OnInitInjectableComponent","ShowInToolbarOnMobile","Icon","ButtonIcon","ButtonText","Hint","Click","ToolbarButtons","ButtonSettings","IsStandardApplicationMode","IsShowViewModesButton","OnShowViewModes","qt","callback","Jl","ou","ru","lu","kn","OnSubmit","Stage","Language$","ReloadApplication","ShowPasswordRecoveryLink","IsSupportedLoginByOTP","LoadExtension","IsSaveCredentials","OnAfterInit","MFACodeSent","LoginExtensionLinks","Link","DeliveryOption","At","su","du","DoLogout","ClearSidebars","pu","gu","hu","xu","CredentialType","bu","Nt","Cu","Yn","credentialActivityGrid","LoadDataSource","credentialActivityEndpoint","ListCredentialTypes","CredentialsInfo","ListActivity","IsAllowFilter","IsAllowExport","GridExtender","ot","Su","Ou","_u","Mu","Au","Lu","_disposed","GetGridHeightRelativeToPage","bottom","GetGridRowContextMenu","Nu","CreateContextMenuComponent","ct","Fu","_dataSource","InitDataSource","_showAddButton","_gridToolbarComponent","ShowAddButton","_addButtonText","AddButtonText","_title","_addButtonNavParams","AddButtonNavParams","SetLoadPanelState","_isUpdateScrollPosition","SetScrollPosition","AfterInit","CreateGridToolbarComponent","RefreshGridHeight","showInColumnChooser","GridRowContextMenu","Tu","IsAutoHeight","getScrollable","scrollWidth","scrollTo","StartExtraButtonsTemplate","EndExtraButtonsTemplate","previousSibling","tagName","qn","Grid","AddButtonNavPath","before","_gridToolbarRef","toIndex","Jn","Bu","Gu","eo","Templates","ju","Fe","Uu","CurrentDeliveryOption","emailGrid","smsGrid","pushMessageGrid","whatsAppGrid","notificationEndpoint","GetNotificationsTemplates","GetRelevantDeliveryOptions","RelevantNotificationTypes","IsDeliveryOptionAvailable","IsTabsVisible","IsNoData","SearchAddress","UntilDate","SearchUntilDate","FromDate","SearchFromDate","Template","SearchTemplate","Notifications","GetNotificationsReport","GetGridExtender","itemIndex","en","vt","Hu","$u","Status","zu","Yu","ro","Xu","scrollHeight","CreatedDate","HistoryChanges","getChangeLabel","GetEntityChangeLabel","HistoryLineChanges","GetLineChangeLabel","EntityLineID","Qu","Zu","imports","ao","nc","so","OldPassword","NewPassword","NewPassword1","ChangePassword","NewPassword2","VerifyPasswordComplexity","tc","ac","uo","AdditionalTitle","MFACode","ChangePasswordExpired","GoToLogin","ic","cc","po","Email","Phone","RecoverPassword","CheckUserName","UserNameCheckResponse","IsExists","HasEmail","HasPhone","Token","VerifyRecoveryToken","ChangePasswordByToken","uc","mc","mo","fc","vc","ho","LoadCredentials","LoadCredentialsInfo","CredentialInfo","GetCredentials","Credential","IsPendingWelcome","IsRestrictByIP","IsExcludeFromMFA","IsLockedOut","IsSupportedUserWelcome","WebAPIAllowedIPs","OnGenerateRandomPassword","GetExternalInfo","OnInitMFAMethodsList","GenerateRandomPassword","IsValid","SaveCredentials","ReturnUrlParams","onValueChanged","IPRangeEnd","IPRangeStart","UnlockCredentials","welcomeUserDialog","MFAMethodList","yc","captchaKey","OnResolved","Sc","_c","vo","Files","ExtendFileInfo","AllowDownload","DownloadItem","NewFile","FilesChanged","fileBoxDialog","OnChangeUpload","AllowOnlyImages","IsImage","MaxFileSize","Size","IconStyle","IsDisplayedAsImage","NotImageErrorErrorMessage","MaxFileSizeErrorMessage","fileSizePipe","transform","PreventDefault","DragOverCount","dataTransfer","photoBoxDialog","ConvertBase64ToImageJpeg","GetIconStyle","GetStringDateNow","FormatDatePart","wt","Gt","Ut","Oc","Rc","xo","imageDialog","DeleteItem","Vt","Ec","Lc","SearchText","OnSearch","MinSymbols","Fc","Uc","$c","loadComponents","service","GetComponents","Destination","inputs","bo","zc","Yc","So","IsSupportedLoginByPassword","IsRequireTaxNumberForOTP","OnSendOtp","OnLogin","SendOtp","LoginExtensionLinks$","Qc","qc","ed","td","NotificationServers","notificationServerEndpoint","xt","nd","rd","OnDelete","dialog","NotificationServerID","FromAddress","TestNotificationServer","ld","ud","cd","NotificationTemplates","notificationTemplateEndpoint","nn","dd","hd","_o","LoadNotificationServers","IsUserCustomTemplateOriginal","IsUserCustomTemplate","gd","htmlEditorDialog","HTMLBody","previewDialog","htmlBody","phone","UpdateIsUserCustomTemplate","md","vd","inputBoxDialog","StoreMID","kt","Ht","xd","Cd","To","Sd","_d","Eo","Od","Ed","Mo","SelectOptions","GetSelectOptions","RadioGroupItems","GetRadioGroupItems","ButtonGroupOptions","GetButtonGroupOptions","SelectGroupedOptions","GetSelectGroupOptions","SelectedDataItems","Dd","group","Td","Ad","Bd","Lo","Types","Styles","WithTitleAndIcon","WithCustomIcon","SelectedType","SelectedStyle","IsCollapsable","WithShadow","Fd","Hd","Bo","Gd","$d","Go","GetPageTabs","IsShowOnlyTabs","IsShowOnlyAccordion","IsShowStepNumbers","IsShowCustomButtonText","IsShowCustomButtonIcon","Wd","Kd","Uo","BrandID","Brands","ModelID","Models","InitData","Colors","GetColors","AttachColumnEditHandler","unshift","SetData","TotalSum","Phones","IsAvailable","Amount","Price","CalculateTotalSum","kd","Yd","Wo","ListItems","GetListItems","ContextMenu","GetContextMenu","bottomListSubscription","Lt","Qd","qd","$o","Jd","np","ko","back","tp","ip","Xo","rp","sp","dp","Zo","cp","gp","qo","mp","vp","xp","Sp","nr","GetSelectBoxDialogOptions","simpleDialog","barcodeBoxDialog","htmlBoxDialog","imageBoxDialog","FieldLabel","selectBoxDialog","signBoxDialog","Jo","yn","er","tr","dn","fn","bp","wp","rr","Ip","Pp","ar","_p","Ep","Rp","Mp","Ap","Lp","ur","UserLogins","DateFrom","DateTo","CurrentCredentialID","ListLogins","ReadQuery","Credentials","webAPICredentialEndpoint","rn","lr","Np","jp","Gp","Vp","Wp","zp","pr","InitControllers","InitActions","InitModules","Module","Controller","Requests","webAPIRequestEndpoint","ListEx","GetPossibleControllers","Controllers","GetPossibleActions","Actions","GetPossibleModules","Modules","OnCredentialChanged","an","dr","$p","Qp","mr","InitBody","InitResponse","InitQueryString","clipboard","writeText","Body","Response","QueryString","Xp","Jp","qp","rf","nf","ShowUserCreationOption","NotificationDeliveryOption","sf","OnManageCredentials","LastUseDate","OnSelectionChanged","getSelectedRowsData","lf","cf","yr","GetParamsFromQuery","CredentialTypes","systemCredentialEndpoint","GetAdditionalInfoMetadata","AdditionalInfoMetadata","SystemCredentials","ListSystemCredentials","SelectedRows","LanguageID","CredentialsForCreation","SendWelcomeUserMessage","sn","Ft","hr","uf","mf","xr","ListCredentialsForCreations","UserCreationOptionID","UserCreationOption","CreateCredentials","ff","hf","yf","xf","Cr","dataEditorEndpoint","ListViews","Views","CheckPerformance","CheckValidity","Sr","vf","Sf","Cf","wf","Of","Pf","Or","InitMethods","InitStatuses","Methods","Statuses","remoteRequestEndpoint","ControllerList","ActionsList","GetPossibleMethods","MethodsList","GetPossibleStatuses","StatusesList","ln","wr","_f","Rf","Pr","Ef","Af","Ro","Ao","sr","Fo","jo","Ho","Vo","zo","Ko","Qo","Yo","or","ir","Yt","Kn","Co","Xn","Qn","$t","zn","lo","we","co","fo","go","jn","Bt","yo","Zn","no","oo","Io","wo","Oo","Po","cr","fr","gr","io","vr","br","Ir","_r","Dr","redirectTo","pathMatch","Mf","onSameUrlNavigation","relativeLinkResolution","StackTrace","errorMessage","Device","DeviceType","Browser","BrowserVersion","browser_version","OS","OSVersion","os_version","history","replaceState","Ff","jf","Vf","Tr","GetCustomRouteData","Uf","Kf","_selectedIndex","SelectedIndexChange","_visible","SetVisibility","tabs","accordion","IsInitialized","updateDimensions","Instance","_currentItemIndex","SelectedIndex","OnItemClick","OnCustomButtonClicked","Jf","IsMultiLanguage","isMultiLanguage","ScreenMode","LogDeviceInfo","IsScreenModeVisible","nm","_id","IsRound","IsHideTextOnMobile","content","am","cm","OnGoToLoginHistory","OnGoToRequestsHistory","dm","SetElementStyles","setProperty","gm","sessionState$Subscription","ShowExpiredDialog","ButtonID","KeepAlive","isMessageDialogInDOM","Er","xm","Dm","LabelLines","InitTooltipContainer","addClass","tooltipEl","IconClass","IconColor","setStyle","Lm","Lr","_viewContainerRef","_componentFactoryResolver","SetVisible","currentValue","previousValue","_tooltipComponent","hostView","Mr","detach","Ar","Nr","textBox","jm","Wm","Fr","_subscription","NotificationUnread$","UnreadCount","un","Vm","Km","Xm","Jm","qm","ng","og","rg","lg","_notification","NotificationButtons","notificationConfigurationService","GetButtons","IsRead","ReadPushNotification","OnNotificationRead","Br","ug","fg","notificationsSubscription","Notifications$","ConvertToMessage","ShowToasts","life","closable","styleClass","messageService","addAll","toast","messages","onMessageClose","jr","mg","vg","xg","Ig","wg","Dg","Tg","Ag","Ng","jg","Gg","Wg","$g","Zg","Gr","Yg","nh","Hr","HtmlBody","th","sh","Ur","_navbarItems$","NavbarItems","GetItemTranslation","GetItemVisible","ah","mh","Wr","VisibleChange","fh","vh","FilterPanelAction","xh","wh","$r","InitContextMenuItems","ContextMenuItems","separator","FilterTemplateRef","FilterPanelWidth","GetGridExternder","ExportExcel","Print","ShowContextMenuAsUsualOnMobile","insertBefore","historyViewDialog","Ih","Dh","Nh","zr","GetPages","Ah","Bh","jh","$h","kr","HistoryItems$","History","Wh","SetBreadCrumbVisible","NavigateHistoryItem","Vh","Yh","Kr","ShowLoadPanel","SetStyles","OnDocumentLoaded","contentDocument","createTextNode","head","Qh","ny","Xr","WelcomeUser","ty","ay","sy","Qr","fy","_onClickObserved","vy","wy","Yr","Iy","Dy","Zr","Py","Jr","Ze","el","qs","Js","ri","li","Bc","_i","mi","Tm","vi","Ci","Cc","Pc","Mc","Vc","qf","sm","hm","bm","Yi","oy","by","Bn","Fl","Sa","Xs","js","Gs","Hs","Us","Vs","Ws","$s","zs","ns","za","ka","Mn","is","Za","Ma","Aa","Na","La","Fa","Ba","Ga","Ha","Ua","Va","$a","Wa","ja","qa","Ta","Ea","Ra","Ka","Fm","Bm","Gm","Xa","Qa","Ya","ts","_n","Pn","Dn","Tn","On","Wf","ch","Eh","Oh","Th","zh","Zh","gy","My","om","eu","Ul","Ll","lh","pm","Lg","Hg","zg","gh","$m","cg","gg","bg","oh","Jg","Og","Eg","kc","Xf","Qm","eg","bh","ly","Oy","Ty","Ay","il","rl","ll","Ny","Lf","tl","sl","$f","Qf","Vr","cy","provide","pl","multi","useFactory","qr","Ju","tn","jc","Sm","Cm","Rr","Im","wm","Om","Em","Rm","Mm","ig","Kg","kh","uy","Jh","Ey","Ly","Lh","Gh","bt","dt","Ry","Nf","apiKey","googleMapsApiKey","region","isRegisterServiceWorker","uh","isDemoEnabled","entryComponents","Bf","defaultLocale","Gf","kg","latencyThreshold","reCAPTCHAv3Key","bootstrap","schemas","ei","jy","bootstrapModule","By","CompleteSelection","selectedItemKeys","FilteredDataSource","pageLayout","popup","$implicit","changeDetection","_Label","SetPlaceHolder","m_bEventAttached","IsFocused","customizationService","SetFieldDefaultValue","SetFieldCustomizations","Controls","first","ctlSelectBoxes","ctlTextBoxes","ctlTextAreas","ctlNumberBoxes","ctlDateBoxes","ctlCheckBoxes","ctlTagBoxes","ctlRadioGroup","ctlDropDownBoxes","IsContentHidden","cdr","subscriptionOnSetDefaults","SetDefaultValues","SetCustomizations","ValidateGrid","validationError","validationErrors","validationStatus","grids","editableGrids","ctlSliders","ctlButtons","ctlSwitches","fields1","fields2","fields3","fields4","OnSectionToggle","Style","IsHeaderLink","OnHeaderClick","ToggleSection","descendants","host","EscPressed","GetPopupElement","_pageToolbarSettings","ButtonsPosition","_isPageButtonsVisible","PageSidePanelState","IsPageSidePanelVisible","PagePreviewState","ShowPreview","PreviewPDFData","PreviewFileName","OnGetPreviewTitle","IsQuickFiltersEmpty","HasContent","pageHeader","IsMobileTitleVisible","QuickFilters","HeaderButtonsBefore","HeaderButtonsAfter","GetPageLoadingClass","GetPopupWidthClass","GetCustomClass","ShowDialogAsBottomSheet","GetPopupSize","GetBottomSheetHeight","ShowDialogAsWindow","GetPopupPosition","GetPreviewSize","direction","IsNoBodyScroll","IsNoToolbar","IsAllowNavbar","SetPageSidePanelState"],"sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./projects/paymentpage/_proxy/enums.ts","./projects/paymentpage/_resources/LISTS_EN.ts","./projects/paymentpage/_resources/LISTS_HE.ts","./projects/paymentpage/_proxy/endpoints/paymentpage.endpoint.ts","./projects/paymentpage/_proxy/entities/paymentpage.entity.ts","./projects/paymentpage/_proxy/params/paymentrequest.param.ts","./projects/paymentpage/pages/paymentpage/paymentpage.component.ts","./projects/paymentpage/pages/paymentpage/paymentpage.component.html","./projects/paymentpage/_app.config.ts","./src/base/classes/BaseClasses.ts","./src/base/component/BaseComponent.ts","./src/base/component/BasePageCRUDComponent.ts","./src/base/component/BasePageComponent.ts","./src/base/component/ServiceBag.ts","./src/base/endpoint/BaseEndpoint.ts","./src/base/endpoint/BaseEndpointCRUD.ts","./src/base/entities/BaseEntities.ts","./src/base/grid/Grid.extender.ts","./src/base/grid/Grid.directive.ts","./src/configuration/app.config.model.ts","./src/configuration/app.config.service.ts","./src/core/endpoints/general.endpoint.ts","./src/core/endpoints/genericlist.endpoint.ts","./src/core/endpoints/login.endpoint.ts","./src/core/endpoints/push-message.endpoint.ts","./src/core/endpoints/system-options.endpoint.ts","./src/core/endpoints/system.endpoint.ts","./src/core/framework/bottom-sheet.service.ts","./src/core/framework/confirm-cancel.guard.ts","./src/core/framework/customization-service.ts","./src/core/framework/devexpress.service.ts","./src/base/grid/Grid.defaults.ts","./src/core/framework/entity.service.ts","./src/common/Cities.ts","./src/_resources/DEVX.he.ts","./src/core/framework/framework.service.ts","./src/core/framework/language.service.ts","./src/core/framework/login.guard.ts","./src/core/framework/login.service.ts","./src/core/framework/navigator.service.ts","./src/core/framework/notification.service.ts","./src/_resources/EN.ts","./src/_resources/HE.ts","./src/core/framework/resources.service.ts","./src/core/framework/route-history.service.ts","./src/core/framework/screen.service.ts","./src/core/framework/session.service.ts","./src/core/framework/sysenums.enum.ts","./src/core/framework/sysevents.service.ts","./src/core/framework/sysglobals.ts","./src/core/framework/system-options.service.ts","./src/core/framework/systemoptions.enum.ts","./src/core/framework/ui.service.ts","./src/core/gateway/APIGateway.service.ts","./src/core/helpers/DateExtensions.ts","./src/core/helpers/DateHelpers.ts","./src/core/helpers/Utils.ts","./src/core/injector/injector.module.ts","./src/core/injector/injector.component.ts","./src/ui/demo/models/enum-demo-mobile-phone-color.ts","./src/environment/environment.prod.ts","./src/ui/animations/colorinout.animation.ts","./src/ui/components/general/system-options/Components/system-options-list/system-options-list.component.ts","./src/ui/components/general/system-options/Components/system-options-list/system-options-list.component.html","./src/ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component.ts","./src/ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component.html","./src/ui/components/general/system-options/Components/system-option/system-option.component.ts","./src/ui/components/general/system-options/Components/system-option/system-option.component.html","./src/ui/dialogs/messagebox-dialog/messageboxdialog.component.ts","./src/ui/dialogs/messagebox-dialog/messageboxdialog.component.html","./src/ui/components/general/system-options/system-options.component.ts","./src/ui/components/general/system-options/system-options.component.html","./src/ui/components/password/password-tooltip/password-tooltip.component.ts","./src/ui/components/password/password-tooltip/password-tooltip.component.html","./src/base/component/NullComponent.ts","./src/ui/layouts/componentlayouts/card/card.component.ts","./src/ui/layouts/componentlayouts/card/card.component.html","./src/ui/layouts/componentlayouts/link/link.component.ts","./src/ui/layouts/componentlayouts/link/link.component.html","./src/ui/animations/slideinout.animation.ts","./src/ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component.ts","./src/ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component.html","./src/ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component.ts","./src/ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component.html","./src/ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component.ts","./src/ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component.html","./src/ui/layouts/componentlayouts/page-buttons/pagebuttons.component.ts","./src/ui/layouts/componentlayouts/page-buttons/pagebuttons.component.html","./src/ui/dialogs/filebox-dialog/fileboxdialog.component.ts","./src/ui/dialogs/filebox-dialog/fileboxdialog.component.html","./src/ui/dialogs/inputbox-dialog/inputboxdialog.component.ts","./src/ui/dialogs/inputbox-dialog/inputboxdialog.component.html","./src/ui/dialogs/photobox-dialog/photoboxdialog.component.ts","./src/ui/dialogs/photobox-dialog/photoboxdialog.component.html","./src/ui/dialogs/printbox-dialog/printboxdialog.component.ts","./src/ui/dialogs/printbox-dialog/printboxdialog.component.html","./src/ui/dialogs/selectbox-dialog/selectboxdialog.component.ts","./src/ui/dialogs/selectbox-dialog/selectboxdialog.component.html","./src/ui/dialogs/signbox-dialog/signbox/signbox.component.ts","./src/ui/dialogs/signbox-dialog/signbox/signbox.component.html","./src/ui/dialogs/signbox-dialog/signboxdialog.component.ts","./src/ui/dialogs/signbox-dialog/signboxdialog.component.html","./src/ui/dialogs/imagebox-dialog/imageboxdialog.component.ts","./src/ui/dialogs/imagebox-dialog/imageboxdialog.component.html","./src/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component.ts","./src/ui/dialogs/barcodebox-dialog/barcodeboxdialog.component.html","./src/ui/directives/CustomBuild.ts","./src/ui/components/status-column/status-column.component.ts","./src/ui/components/status-column/status-column.component.html","./src/core/framework/context-menu.service.ts","./src/ui/directives/Directives.ts","./src/ui/directives/FormatSearch.directive.ts","./src/ui/directives/CustomServerSideFilter.directive.ts","./src/ui/directives/Link.directive.ts","./src/ui/directives/ViewContainer.directive.ts","./src/ui/directives/Pipes.ts","./src/ui/directives/Required.directive.ts","./src/ui/directives/ThrottleEvent.directive.ts","./src/core/exceptions/exception.component.ts","./src/core/exceptions/exception.component.html","./src/core/endpoints/history.endpoint.ts","./src/core/framework/nativenotifications.service.ts","./src/core/gateway/APIGateway.intercept.ts","./src/ui/layouts/layout/side-bar/side-bar.component.ts","./src/ui/layouts/layout/side-bar/side-bar.component.html","./src/core/framework/sidebar.service.ts","./src/ui/layouts/layout/app.component.ts","./src/ui/layouts/layout/app.component.html","./src/ui/layouts/layout/empty-layout/emptylayout.component.ts","./src/ui/layouts/layout/empty-layout/emptylayout.component.html","./src/ui/layouts/layout/main-layout/mainlayout.component.ts","./src/ui/layouts/layout/main-layout/mainlayout.component.html","./src/ui/layouts/layout/nav-menu/navmenu.component.ts","./src/ui/layouts/layout/nav-menu/navmenu.component.html","./src/ui/layouts/layout/progress-panel/progresspanel.component.ts","./src/ui/layouts/layout/progress-panel/progresspanel.component.html","./src/base/datalayer/BaseDataStoreAbstract.ts","./src/base/datalayer/DataLoadOptions.ts","./src/base/datalayer/BaseDataStoreReadOnly.ts","./src/base/datalayer/BaseDataStoreCRUD.ts","./src/base/datalayer/BaseDataSourceAbstract.ts","./src/base/datalayer/BaseDataStoreCRUDServer.ts","./src/base/datalayer/BaseDataSources.ts","./src/ui/notifications/push-message-list/push-message-list.component.ts","./src/ui/notifications/push-message-list/push-message-list.component.html","./src/ui/layouts/layout/toolbar/toolbar.component.ts","./src/ui/layouts/layout/toolbar/toolbar.component.html","./src/ui/components/login/coming-soon/comingsoon.component.ts","./src/ui/components/login/coming-soon/comingsoon.component.html","./src/ui/components/login/login/login.component.ts","./src/ui/components/login/login/login.component.html","./src/ui/components/login/logout/logout.component.ts","./src/ui/components/login/logout/logout.component.html","./src/ui/components/login/session-expire/sessionexpire.component.ts","./src/ui/components/login/session-expire/sessionexpire.component.html","./src/core/endpoints/credential-activity.endpoint.ts","./src/ui/components/general/credential-activity-status/credentials-activity-status.component.ts","./src/ui/components/general/credential-activity-status/credentials-activity-status.component.html","./src/core/endpoints/notification.endpoint.ts","./src/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component.ts","./src/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component.html","./src/core/helpers/GridHelper.ts","./src/base/component/BaseGridComponent.ts","./src/ui/notifications/notifications-history/notification-grid/notificationgrid.component.ts","./src/ui/notifications/notifications-history/notification-grid/notificationgrid.component.html","./src/ui/notifications/notifications-history/notificationshistory.component.ts","./src/ui/notifications/notifications-history/notificationshistory.component.html","./src/ui/notifications/notifications-history/notification-view/notificationview.component.ts","./src/ui/notifications/notifications-history/notification-view/notificationview.component.html","./src/ui/components/general/history-view/historyview.component.ts","./src/ui/components/general/history-view/historyview.component.html","./src/_modules/devexpress.module.ts","./src/ui/components/password/password-change/passwordchange.component.ts","./src/ui/components/password/password-change/passwordchange.component.html","./src/ui/components/password/password-change-expired/passwordchangeexpired.component.ts","./src/ui/components/password/password-change-expired/passwordchangeexpired.component.html","./src/ui/components/password/password-recovery/passwordrecovery.component.ts","./src/ui/components/password/password-recovery/passwordrecovery.component.html","./src/ui/components/password/password-welcome/passwordwelcome.component.ts","./src/ui/components/password/password-welcome/passwordwelcome.component.html","./src/ui/components/password/password-manage/passwordmanage.component.ts","./src/ui/components/password/password-manage/passwordmanage.component.html","./src/ui/layouts/componentlayouts/captcha/captcha.component.ts","./src/ui/layouts/componentlayouts/captcha/captcha.component.html","./src/ui/layouts/componentlayouts/attached-files/attached-files.component.ts","./src/ui/layouts/componentlayouts/attached-files/attached-files.component.html","./src/ui/layouts/componentlayouts/attached-files/file-card/file-card.component.ts","./src/ui/layouts/componentlayouts/attached-files/file-card/file-card.component.html","./src/ui/layouts/componentlayouts/search/search.component.ts","./src/ui/layouts/componentlayouts/search/search.component.html","./src/ui/layouts/componentlayouts/loading-animation/loading-animation.component.ts","./src/ui/layouts/componentlayouts/loading-animation/loading-animation.component.html","./src/core/framework/injected-components-base.service.ts","./src/ui/layouts/componentlayouts/injected-components/injected-components.component.ts","./src/ui/layouts/componentlayouts/injected-components/injected-components.component.html","./src/ui/components/login/login-by-otp/login-by-otp.component.ts","./src/ui/components/login/login-by-otp/login-by-otp.component.html","./src/core/endpoints/notification-server.endpoint.ts","./src/ui/notifications/notification-server/list/notification-server-list.component.ts","./src/ui/notifications/notification-server/list/notification-server-list.component.html","./src/ui/notifications/notification-server/notification-server.component.ts","./src/ui/notifications/notification-server/notification-server.component.html","./src/core/endpoints/notification-template.endpoint.ts","./src/ui/notifications/notification-template/notification-template-list/notification-template-list.component.ts","./src/ui/notifications/notification-template/notification-template-list/notification-template-list.component.html","./src/ui/notifications/notification-template/notification-template.component.ts","./src/ui/notifications/notification-template/notification-template.component.html","./src/core/mid/mid-store.component.ts","./src/core/mid/mid-store.component.html","./src/ui/demo/components/buttons/demo-buttons.component.ts","./src/ui/demo/components/buttons/demo-buttons.component.html","./src/ui/demo/layouts/demo-layout/demo-layout.component.ts","./src/ui/demo/layouts/demo-layout/demo-layout.component.html","./src/ui/demo/components/editors/demo-editors.component.ts","./src/ui/demo/components/editors/demo-editors.component.html","./src/ui/demo/components/layouts/demo-layouts.component.ts","./src/ui/demo/components/layouts/demo-layouts.component.html","./src/ui/demo/components/sections/demo-sections.component.ts","./src/ui/demo/components/sections/demo-sections.component.html","./src/ui/demo/components/cards/demo-cards.component.ts","./src/ui/demo/components/cards/demo-cards.component.html","./src/ui/demo/components/tabs/demo-tabs.component.ts","./src/ui/demo/components/tabs/demo-tabs.component.html","./src/ui/demo/components/grids/demo-grids.component.ts","./src/ui/demo/components/grids/demo-grids.component.html","./src/ui/demo/components/bottom-sheets/demo-bottom-sheets.component.ts","./src/ui/demo/components/bottom-sheets/demo-bottom-sheets.component.html","./src/ui/demo/components/pages/demo-pages.component.ts","./src/ui/demo/components/pages/demo-pages.component.html","./src/ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component.ts","./src/ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component.html","./src/ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component.ts","./src/ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component.html","./src/ui/demo/components/sidebars/demo-sidebars.component.ts","./src/ui/demo/components/sidebars/demo-sidebars.component.html","./src/ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component.ts","./src/ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component.html","./src/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component.ts","./src/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component.html","./src/ui/dialogs/preview-dialog/previewdialog.component.ts","./src/ui/dialogs/preview-dialog/previewdialog.component.html","./src/ui/demo/components/dialogs/demo-dialogs.component.ts","./src/ui/demo/components/dialogs/demo-dialogs.component.html","./src/ui/demo/components/pipes/demo-pipes.component.ts","./src/ui/demo/components/pipes/demo-pipes.component.html","./src/ui/demo/components/components/demo-components.component.ts","./src/ui/demo/components/components/demo-components.component.html","./src/ui/components/general/credential-login-history/grid/credential-login-history-grid.component.ts","./src/ui/components/general/credential-login-history/grid/credential-login-history-grid.component.html","./src/core/endpoints/webapi-credential.endpoint.ts","./src/ui/components/general/credential-login-history/credential-login-history.component.ts","./src/ui/components/general/credential-login-history/credential-login-history.component.html","./src/core/endpoints/webapi-request.endpoint.ts","./src/ui/components/general/request-history/request-history-grid/request-history-grid.component.ts","./src/ui/components/general/request-history/request-history-grid/request-history-grid.component.html","./src/ui/components/general/request-history/request-history-list/request-history-list.component.ts","./src/ui/components/general/request-history/request-history-list/request-history-list.component.html","./src/ui/components/general/request-history/request-history.component.ts","./src/ui/components/general/request-history/request-history.component.html","./src/core/endpoints/system-credentials.endpoint.ts","./src/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component.ts","./src/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component.html","./src/ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component.ts","./src/ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component.html","./src/ui/components/general/system-credentials/system-credentials.component.ts","./src/ui/components/general/system-credentials/system-credentials.component.html","./src/ui/components/general/system-credentials-creation/system-credentials-creation.component.ts","./src/ui/components/general/system-credentials-creation/system-credentials-creation.component.html","./src/core/endpoints/data-editor.endpoint.ts","./src/ui/components/general/data-views/data-view-list.component.ts","./src/ui/components/general/data-views/data-view-list.component.html","./src/core/endpoints/remote-request.endpoint.ts","./src/ui/components/general/remote-request-history/grid/remote-request-history-grid.component.ts","./src/ui/components/general/remote-request-history/grid/remote-request-history-grid.component.html","./src/ui/components/general/remote-request-history/remote-request-history-list.component.ts","./src/ui/components/general/remote-request-history/remote-request-history-list.component.html","./src/ui/components/general/remote-request-history/remote-request-history.component.ts","./src/ui/components/general/remote-request-history/remote-request-history.component.html","./src/_modules/app-routing.module.ts","./src/core/exceptions/exception.handler.ts","./src/environment/environment.model.ts","./src/ui/components/general/commonsettings/commonsetting.component.ts","./src/ui/components/general/commonsettings/commonsetting.component.html","./src/ui/layouts/layout/footer/footer.component.ts","./src/ui/layouts/layout/footer/footer.component.html","./src/ui/components/tabs/tabs.component.ts","./src/ui/components/tabs/tabs.component.html","./src/ui/components/login/base/login-base.component.ts","./src/ui/components/login/base/login-base.component.html","./src/ui/components/button/button.component.ts","./src/ui/components/button/button.component.html","./src/ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component.ts","./src/ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component.html","./src/ui/components/tag/tag.component.ts","./src/ui/components/tag/tag.component.html","./src/ui/components/session-expired/session-expired.component.ts","./src/ui/components/session-expired/session-expired.component.html","./src/ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component.ts","./src/ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component.html","./src/ui/components/tooltip/tooltip.component.ts","./src/ui/components/tooltip/tooltip.component.html","./src/ui/directives/Tooltip.directive.ts","./src/ui/directives/ViewPassword.directive.ts","./src/ui/notifications/push-message-badge/push-message-badge.component.ts","./src/ui/notifications/push-message-badge/push-message-badge.component.html","./src/ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component.ts","./src/ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component.html","./src/ui/notifications/notification-template/notification-template-grid/notification-template-grid.component.ts","./src/ui/notifications/notification-template/notification-template-grid/notification-template-grid.component.html","./src/base/service/BaseService.ts","./src/core/framework/notification-configuration-base.service.ts","./src/ui/notifications/push-message/push-message.component.ts","./src/ui/notifications/push-message/push-message.component.html","./src/ui/notifications/push-message-toasts/push-message-toasts.component.ts","./src/ui/notifications/push-message-toasts/push-message-toasts.component.html","./src/ui/notifications/notifications-history/email-history-item/email-history-item.component.ts","./src/ui/notifications/notifications-history/email-history-item/email-history-item.component.html","./src/ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component.ts","./src/ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component.html","./src/ui/notifications/notifications-history/sms-history-item/sms-history-item.component.ts","./src/ui/notifications/notifications-history/sms-history-item/sms-history-item.component.html","./src/ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component.html","./src/ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component.html","./src/ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component.ts","./src/ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component.html","./src/ui/notifications/notification-test-dialog/notification-test-dialog.component.ts","./src/ui/notifications/notification-test-dialog/notification-test-dialog.component.html","./src/ui/notifications/notification-preview-dialog/notification-preview-dialog.component.ts","./src/ui/notifications/notification-preview-dialog/notification-preview-dialog.component.html","./src/ui/layouts/layout/nav-bar/nav-bar.component.ts","./src/ui/layouts/layout/nav-bar/nav-bar.component.html","./src/ui/notifications/push-message-list-popup/push-message-list-popup.component.ts","./src/ui/notifications/push-message-list-popup/push-message-list-popup.component.html","./src/ui/layouts/layout/page-filter/page-filter.component.ts","./src/ui/layouts/layout/page-filter/page-filter.component.html","./src/ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component.ts","./src/ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component.html","./src/ui/components/spin-loader/spin-loader.component.ts","./src/ui/components/spin-loader/spin-loader.component.html","./src/ui/demo/layouts/demo-navbar/demo-navbar.component.ts","./src/ui/demo/layouts/demo-navbar/demo-navbar.component.html","./src/ui/demo/components/grids/grid/demo-grid.component.ts","./src/ui/demo/components/grids/grid/demo-grid.component.html","./src/ui/components/breadcrumb/breadcrumb.component.ts","./src/ui/components/breadcrumb/breadcrumb.component.html","./src/ui/components/pdf-viewer/pdf-viewer.component.ts","./src/ui/components/pdf-viewer/pdf-viewer.component.html","./src/ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component.ts","./src/ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component.html","./src/ui/components/general/history-view/grid/historyview-grid.component.ts","./src/ui/components/general/history-view/grid/historyview-grid.component.html","./src/core/helpers/HtmlUtils.ts","./src/ui/components/total-balance-card/total-balance-card.component.ts","./src/ui/components/total-balance-card/total-balance-card.component.html","./src/ui/components/icon/icon.component.ts","./src/ui/components/icon/icon.component.html","./src/ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component.ts","./src/ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component.html","./src/ui/components/general/data-views/data-views-grid/data-view-grid.component.ts","./src/ui/components/general/data-views/data-views-grid/data-view-grid.component.html","./src/_modules/m4uangular.module.ts","./src/main.ts","./src/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component.html","./src/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component.ts","./src/ui/components/bottom-sheet-list/bottom-sheet-list.component.html","./src/ui/components/bottom-sheet-list/bottom-sheet-list.component.ts","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.html","./src/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component.ts","./src/ui/layouts/fieldlayouts/field-detail/fielddetail.component.html","./src/ui/layouts/fieldlayouts/field-detail/fielddetail.component.ts","./src/ui/layouts/fieldlayouts/field-detailx/fielddetailx.component.html","./src/ui/layouts/fieldlayouts/field-detailx/fielddetailx.component.ts","./src/ui/layouts/fieldlayouts/field-form/fieldform.component.html","./src/ui/layouts/fieldlayouts/field-form/fieldform.component.ts","./src/ui/layouts/fieldlayouts/field-formx/fieldformx.component.html","./src/ui/layouts/fieldlayouts/field-formx/fieldformx.component.ts","./src/ui/layouts/fieldlayouts/section/section.component.html","./src/ui/layouts/fieldlayouts/section/section.component.ts","./src/ui/layouts/layout/page-layout/pagelayout.component.html","./src/ui/layouts/layout/page-layout/pagelayout.component.ts","./projects|sync|/^/.*/_app/.config$"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","\r\nexport enum EnumSystemOptionsZ {\r\n}\r\nexport enum EnumEntityTypes {\r\n PaymentPage = \"PaymentPage\"\r\n}\r\n\r\nexport enum PaymentPageRedirectMethodsEnum {\r\n EntirePage = \"EntirePage\",\r\n IFrameOnly = \"IFrameOnly\"\r\n}\r\nexport enum PaymentRequestProviderOption {\r\n UserSelection = \"UserSelection\",\r\n Shva = \"Shva\",\r\n Paypal = \"Paypal\",\r\n Bit = \"Bit\"\r\n}\r\n\r\nexport enum CreditTypesEnum {\r\n Regular = \"Regular\",\r\n Payments = \"Payments\",\r\n Credit = \"Credit\",\r\n Special_Credit_2 = \"Special_Credit_2\",\r\n Special_Immidiate_3 = \"Special_Immidiate_3\",\r\n Special_ClubDeal_4 = \"Special_ClubDeal_4\",\r\n Special_SuperCredit_5 = \"Special_SuperCredit_5\",\r\n Special_ClubPayments_9 = \"Special_ClubPayments_9\",\r\n All = \"All\"\r\n}\r\n\r\nexport enum CurrenciesEnum {\r\n ILS = \"ILS\",\r\n USD = \"USD\",\r\n EUR = \"EUR\",\r\n GBP = \"GBP\",\r\n SEK = \"SEK\",\r\n CHF = \"CHF\",\r\n CAD = \"CAD\",\r\n DKK = \"DKK\",\r\n ZAR = \"ZAR\",\r\n AUD = \"AUD\",\r\n NOK = \"NOK\",\r\n JPY = \"JPY\",\r\n INR = \"INR\",\r\n JOD = \"JOD\",\r\n HKD = \"HKD\"\r\n}\r\n\r\n\r\nexport enum EnumBitClientDeviceOSes {\r\n Web = \"Web\",\r\n Android = \"Android\",\r\n IOS = \"IOS\"\r\n}\r\n\r\nexport const Enums = {\r\n EnumSystemOptionsZ: EnumSystemOptionsZ,\r\n EnumEntityTypes: EnumEntityTypes,\r\n PaymentPageRedirectMethodsEnum: PaymentPageRedirectMethodsEnum,\r\n PaymentRequestProviderOption: PaymentRequestProviderOption,\r\n CreditTypesEnum: CreditTypesEnum,\r\n CurrenciesEnum: CurrenciesEnum,\r\n EnumBitClientDeviceOSes: EnumBitClientDeviceOSes\r\n\r\n};\r\n\r\n","import { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport const Lists_EN =\r\n{\r\n Properties:\r\n {\r\n Language: EnumLanguages.English\r\n },\r\n Currencies:\r\n [\r\n {\r\n Value: 'ILS',\r\n Text: 'Israeli Shekel',\r\n },\r\n {\r\n Value: 'USD',\r\n Text: 'Dollar',\r\n },\r\n {\r\n Value: 'EUR',\r\n Text: 'Euro',\r\n },\r\n {\r\n Value: 'GBP',\r\n Text: 'British Pound',\r\n },\r\n {\r\n Value: 'AUD',\r\n Text: 'Australian Dollar',\r\n },\r\n {\r\n Value: 'CAD',\r\n Text: 'Canadian Dollar',\r\n },\r\n {\r\n Value: 'CHF',\r\n Text: 'Swiss Franc',\r\n },\r\n {\r\n Value: 'DKK',\r\n Text: 'Danish Krone',\r\n },\r\n {\r\n Value: 'EGP',\r\n Text: 'Egyptian Pound',\r\n },\r\n {\r\n Value: 'JOD',\r\n Text: 'Jordanian Lira',\r\n },\r\n {\r\n Value: 'LBP',\r\n Text: 'Lebanese Pound',\r\n },\r\n {\r\n Value: 'NOK',\r\n Text: 'Norwegian Krone',\r\n },\r\n {\r\n Value: 'SEK',\r\n Text: 'Sweden Krone',\r\n },\r\n {\r\n Value: 'RUB',\r\n Text: 'Ruble',\r\n },\r\n {\r\n Value: 'HKD',\r\n Text: 'Hong-Kong Dollar',\r\n },\r\n {\r\n Value: 'ZAR',\r\n Text: 'South African Rand',\r\n },\r\n {\r\n Value: 'JPY',\r\n Text: 'Japanese Yen',\r\n },\r\n {\r\n Value: 'SGD',\r\n Text: 'Singapore Dollar',\r\n },\r\n {\r\n Value: 'CNH',\r\n Text: 'Chinese Yuan',\r\n },\r\n {\r\n Value: 'NZD',\r\n Text: 'New Zealand Dollar',\r\n }\r\n ],\r\n}\r\n","import { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport const Lists_HE =\r\n{\r\n Properties:\r\n {\r\n Language: EnumLanguages.Hebrew\r\n },\r\n Currencies:\r\n [\r\n {\r\n Value: 'ILS',\r\n Text: 'ש\"ח'\r\n },\r\n {\r\n Value: 'USD',\r\n Text: 'דולר'\r\n },\r\n {\r\n Value: 'EUR',\r\n Text: 'אירו'\r\n },\r\n {\r\n Value: 'GBP',\r\n Text: 'ליש\"ט'\r\n },\r\n {\r\n Value: 'AUD',\r\n Text: 'דולר אוסטרלי'\r\n },\r\n {\r\n Value: 'CAD',\r\n Text: 'דולר קנדי'\r\n },\r\n {\r\n Value: 'CHF',\r\n Text: 'פרנק שוויצרי'\r\n },\r\n {\r\n Value: 'DKK',\r\n Text: 'כתר דנמרק'\r\n },\r\n {\r\n Value: 'EGP',\r\n Text: 'לירה מצרית'\r\n },\r\n {\r\n Value: 'JOD',\r\n Text: 'דינר ירדני'\r\n },\r\n {\r\n Value: 'LBP',\r\n Text: 'לירה לבנונית'\r\n },\r\n {\r\n Value: 'NOK',\r\n Text: 'כתר נורווגי'\r\n },\r\n {\r\n Value: 'SEK',\r\n Text: 'כתר שוודי'\r\n },\r\n {\r\n Value: 'RUB',\r\n Text: 'רובל'\r\n },\r\n {\r\n Value: 'HKD',\r\n Text: 'דולר הונג-קונגי'\r\n },\r\n {\r\n Value: 'ZAR',\r\n Text: 'ראנד דרום אפריקאי'\r\n },\r\n {\r\n Value: 'JPY',\r\n Text: 'יין יפני'\r\n },\r\n {\r\n Value: 'SGD',\r\n Text: 'דולר סינגפורי'\r\n },\r\n {\r\n Value: 'CNH',\r\n Text: 'יואן סיני'\r\n },\r\n {\r\n Value: 'NZD',\r\n Text: 'דולר ניו זילנדי'\r\n }\r\n ],\r\n}\r\n","\r\n\r\n\r\n\r\nimport { BaseEntityResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEntitiesResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseDataResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseResponse } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { GenericListEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataGroupInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { APIGatewayService } from '@m4u-angular/core/gateway/APIGateway.service';\r\nimport { EnumRequestProgressTracking } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { PaymentPage } from './../entities/paymentpage.entity';\r\nimport { ThreeDSVersioningResponseParams } from './../params/threedsversioningresponse.param';\r\n\r\nimport { PaymentRequestParams } from './../params/paymentrequest.param';\r\nimport { ThreeDSAuthenticationResponseParams } from '../params/threedsauthenticationresponse.params';\r\n//import { ThreeDSMerchantObject } from './../entities/threedsmerchantobject.entity';\r\n//import { ThreeDSChallengeResponse } from './../entities/threedschallengeresponse.entity';\r\n//import { ThreeDSAuthenticationResponseParams } from './../params/threedsauthenticationresponse.param';\r\nimport { EnumBitClientDeviceOSes } from './../enums';\r\n\r\n@Injectable()\r\nexport class PaymentPageEndpoint extends BaseEndpointCRUD\r\n{\r\n\tconstructor(api: APIGatewayService) { super(\"PaymentPage\", api); }\r\n\r\n\r\n\tpublic GetPaymentPage(PublicRequestID: string): Observable> {\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPaymentPage', { PublicRequestID: PublicRequestID });\r\n\t}\r\n\r\n\tpublic ThreeDSVersioning(requestParams: PaymentRequestParams): Observable> {\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ThreeDSVersioning', requestParams, undefined);\r\n\t}\r\n\r\n\tpublic ThreeDSAuthentication(requestParams: PaymentRequestParams): Observable> {\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'ThreeDSAuthentication', requestParams, undefined);\r\n\t}\r\n\r\n\tpublic SubmitPaymentRequest(requestParams: PaymentRequestParams): Observable> {\r\n\t\treturn this.api.ExecutePostAction(this.ControllerName, 'SubmitPaymentRequest', requestParams, undefined);\r\n\t}\r\n\r\n\t// public ThreeDSMerchant(requestParams: ThreeDSMerchantObject) : Observable\r\n\t//{\r\n\t//\treturn this.api.ExecutePostAction(this.ControllerName, 'ThreeDSMerchant', requestParams, undefined );\r\n\t// }\r\n\r\n\t// public ThreeDSNotification(response: ThreeDSChallengeResponse) : Observable\r\n\t//{\r\n\t//\treturn this.api.ExecutePostAction(this.ControllerName, 'ThreeDSNotification', response, undefined );\r\n\t// }\r\n\r\n\tpublic GetBitUrl(PublicRequestID: string, BitClientDeviceOS: EnumBitClientDeviceOSes): Observable> {\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetBitUrl', { PublicRequestID: PublicRequestID, BitClientDeviceOS: BitClientDeviceOS });\r\n\t}\r\n\r\n\tpublic GetPayPalUrl(PublicRequestID: string): Observable> {\r\n\t\treturn this.api.ExecuteGetAction(this.ControllerName, 'GetPayPalUrl', { PublicRequestID: PublicRequestID });\r\n\t}\r\n}\r\n","\r\n\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { PaymentPageRedirectMethodsEnum,PaymentRequestProviderOption,CurrenciesEnum } from '../enums';\r\n\r\n\r\nexport class PaymentPage extends BaseEntity {\r\n public Name: string;\r\n public PageTitle: string;\r\n public OKButtonTitle: string;\r\n public ProviderOption: PaymentRequestProviderOption;\r\n public IsEnglish: boolean;\r\n public ShowPayments: boolean;\r\n public ShowCredit: boolean;\r\n public ShowAmount: boolean;\r\n public ShowCVV: boolean;\r\n public ShowOwnerID: boolean;\r\n public ShowOwnerName: boolean;\r\n public ShowOwnerPhone: boolean; \r\n public ShowOwnerEmail: boolean; \r\n public ShowDescription: boolean;\r\n public AngularCSSString: string;\r\n public IsPaypalEnabled: boolean;\r\n public IsBitEnabled: boolean; \r\n public Currency: CurrenciesEnum;\r\n public SumPay: number;\r\n public Is3DSupported: boolean;\r\n public Secure3DMinSum: number;\r\n public BottomMessage: string;\r\n public IsRecaptchaEnabled: boolean;\r\n\r\n public IsShowSupportedBrands: boolean;\r\n public IsShowBrandVisa: boolean;\r\n public IsShowBrandMasterCard: boolean;\r\n public IsShowBrandAmex: boolean;\r\n public IsShowBrandDiners: boolean;\r\n\r\n public RedirectMethod: PaymentPageRedirectMethodsEnum;\r\n public CreditTypes: CreditType[];\r\n}\r\n\r\nexport class CreditType extends BaseEntity {\r\n public Text: string;\r\n public Value: string;\r\n public MaxNumOfPayments: number;\r\n}","\r\n\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CreditTypesEnum } from '../enums';\r\n\r\nexport class PaymentRequestParams extends BaseEntity {\r\n public PublicRequestID: string;\r\n public CreditCard: string;\r\n public CreditType: CreditTypesEnum;\r\n public NumberOfPayments: number;\r\n public Month: string;\r\n public Year: string;\r\n public CVV: string;\r\n public CCOwnerID: string;\r\n public CCOwnerName: string;\r\n public CCOwnerPhone: string;\r\n public CCOwnerEmail: string;\r\n public threeDSServerTransID: string;\r\n public browserUserAgent: string;\r\n public browserJavaEnabled: boolean;\r\n public browserLanguage: string;\r\n public browserScreenWidth: string;\r\n public browserScreenHeight: string;\r\n public browserColorDepth: string;\r\n public browserTimezoneOffset: string;\r\n public RecaptchaToken: string;\r\n}\r\n\r\n\r\n\r\n","import { Component, ContentChildren, ElementRef, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataResponse, BaseEntityResponse, BaseState, KeyValueEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LanguageService } from \"@m4u-angular/core/framework/language.service\";\r\nimport { EnumLanguages, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DxTextBoxComponent } from 'devextreme-angular';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\r\nimport { PaymentPageEndpoint } from '../../_proxy/endpoints/paymentpage.endpoint';\r\nimport { PaymentPage } from '../../_proxy/entities/paymentpage.entity';\r\nimport { CreditTypesEnum, EnumBitClientDeviceOSes, PaymentPageRedirectMethodsEnum, PaymentRequestProviderOption } from '../../_proxy/enums';\r\nimport { PaymentRequestParams } from '../../_proxy/params/paymentrequest.param';\r\nimport { ThreeDSAuthenticationResponseParams } from '../../_proxy/params/threedsauthenticationresponse.params';\r\nimport { ThreeDSVersioningResponseParams } from '../../_proxy/params/threedsversioningresponse.param';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\n\r\n\r\nexport class State extends BaseState {\r\n PageTitle: string\r\n PayButtonText: string\r\n ShowLoading: boolean\r\n PageDataLoaded: boolean\r\n PaymentProvider: number\r\n IsChallenge: boolean\r\n ShowChallenge: boolean\r\n CreditType: number;\r\n Currency: string;\r\n SelectedPaymentProvider: PaymentRequestProviderOption\r\n ProviderOptions: KeyValueEntity[] = []\r\n MonthsList: KeyValueEntity[] = [];\r\n YearsList: KeyValueEntity[] = [];\r\n PaymentRequestParams: PaymentRequestParams\r\n NumberOfPaymentsList: KeyValueEntity[] = [];\r\n\r\n RecaptchaToken: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-paymentpage',\r\n templateUrl: './paymentpage.component.html',\r\n styleUrls: ['./paymentpage.component.scss']\r\n})\r\nexport class PaymentPageComponent extends BasePageComponent\r\n{\r\n private nca3DSWebSDK = (window as any).nca3DSWebSDK;\r\n\r\n constructor(A: ServiceBagService,\r\n public paymentpageEndpoint: PaymentPageEndpoint,\r\n private sanitizer: DomSanitizer,\r\n private languageService: LanguageService,\r\n private element: ElementRef,\r\n private deviceDetector: DeviceDetectorService) {\r\n super(A, \"PaymentPageComponent\", PaymentPage, State, EnumPageDisplayModes.FullScreen);\r\n }\r\n\r\n PublicRequestID: string;\r\n numbersOnlyPattern: any = /^\\d+$/;\r\n threeDSTransID: string;\r\n CustomCSS: string = \"\";\r\n recaptchaV3Service;\r\n\r\n MinYear: number = (new Date().getFullYear()) - 2000;\r\n MaxYear: number = this.MinYear + 20;\r\n\r\n\r\n @ViewChild('creditcardcontainer') paymentElement: ElementRef;\r\n @ViewChild('frameContainer05') frameContainer05: ElementRef;\r\n @ViewChild('yearField') yearField: DxTextBoxComponent;\r\n @ViewChild('monthField') monthField: DxTextBoxComponent;\r\n @ViewChild('cvvField') cvvField: DxTextBoxComponent;\r\n @ViewChild('ownerIDField') ownerIDField: DxTextBoxComponent;\r\n @ViewChild('ownerNameField') ownerNameField: DxTextBoxComponent;\r\n @ViewChild('paymentPageContainer') paymentPageContainer: ElementRef;\r\n\r\n override OnInitComponent() {\r\n this.State.ShowLoading = true;\r\n this.State.PayButtonText = this.RC('btnPay');\r\n this.State.IsChallenge = false;\r\n\r\n //let t = this.recaptchaV3Service;\r\n\r\n //Get file id from link\r\n this.PublicRequestID = this.A.Navigator.GetRouteParams().PublicRequestID;\r\n\r\n //Load data\r\n this.Do(this.paymentpageEndpoint.GetPaymentPage(this.PublicRequestID), false,\r\n (response: BaseEntityResponse) => {\r\n this.State.PageDataLoaded = true;\r\n this.Entity = response.Entity;\r\n //navigate to bit or paypal if needed\r\n this.RedirectToPayment(response.Entity);\r\n this.CustomCSS = Utils.NZ(response.Entity.AngularCSSString);\r\n\r\n this.languageService.SetLanguage(this.Entity.IsEnglish ? EnumLanguages.English : EnumLanguages.Hebrew);\r\n if (this.Entity.ShowAmount) {\r\n this.State.Currency = this.LIST('Currencies').find(s => s.Value == this.Entity.Currency).Text;\r\n }\r\n\r\n //set payment providers\r\n this.SetPaymentProviders(response.Entity);\r\n this.State.PaymentRequestParams = new PaymentRequestParams();\r\n this.State.SelectedPaymentProvider = response.Entity.ProviderOption;\r\n this.State.CreditType = 0;\r\n this.SetLabelsText();\r\n\r\n this.FillYearsAndMonthes();\r\n\r\n this.State.ShowChallenge = false;\r\n this.State.ShowLoading = false;\r\n //Add recaptcha service only if is enabled in Backoffice\r\n if (this.Entity.IsRecaptchaEnabled) { this.recaptchaV3Service = AppInjector.get(ReCaptchaV3Service); }\r\n \r\n //run this in delay, the component not loaded when InitFocus is executed.\r\n setTimeout(() => {\r\n this.InitFocus();\r\n this.OnHeightChanged();\r\n }, 500);\r\n },\r\n (response: BaseEntityResponse) => {\r\n this.State.PageDataLoaded = false;\r\n this.StopMessage(response.ResponseMessage);\r\n this.State.ShowLoading = false;\r\n });\r\n\r\n // register successful payment handler\r\n (window.document as any).OnSuccessfulPayment = () => {\r\n this.OnSuccessfulPaymentHandler();\r\n }\r\n\r\n // register failed payment handler\r\n (window.document as any).OnFailedPayment = () => {\r\n this.OnfailedPaymentHandler();\r\n }\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n this.OnHeightChanged();\r\n }\r\n\r\n private OnHeightChanged() {\r\n const paymentPageContainerHeight = this.paymentPageContainer?.nativeElement?.getBoundingClientRect()?.height;\r\n const currentElementContent = this.element?.nativeElement?.getElementsByClassName('dx-scrollview-content');\r\n const currentElementContentHeight = currentElementContent && currentElementContent.length > 0\r\n ? currentElementContent[0]?.getBoundingClientRect()?.height : undefined;\r\n const height = paymentPageContainerHeight || currentElementContentHeight;\r\n window.top.postMessage({ type: 'OnHeightChanged', height: height }, '*');\r\n }\r\n\r\n protected OnSuccessfulPaymentHandler() {\r\n this.State.ShowChallenge = false;\r\n setTimeout(() => this.DoSubmitPaymentRequest(), 1000);\r\n\r\n }\r\n\r\n protected OnfailedPaymentHandler() {\r\n this.State.ShowChallenge = false;\r\n this.StopMessage(this.RC('msg3dsChallengeFailed'));\r\n this.threeDSTransID = \"\";\r\n this.State.PaymentRequestParams = new PaymentRequestParams;\r\n this.State.IsChallenge = false;\r\n }\r\n\r\n //#region \"Endpoints\"\r\n OnSubmitPaymentRequest() {\r\n //if (!this.OnEntityValidate()) return;\r\n\r\n //exit payment if payment already active\r\n if (this.State.ShowLoading) { return; }\r\n\r\n //always reset token and execute recaptcha function if enabled\r\n this.State.RecaptchaToken = \"\";\r\n if (this.Entity.IsRecaptchaEnabled) {\r\n\r\n this.recaptchaV3Service.execute('payment_add').subscribe((token: string) => {\r\n this.State.RecaptchaToken = token;\r\n //if we got token then recaptcha passed\r\n if (Utils.NZ(token) != \"\") {\r\n this.SubmitPayment();\r\n }\r\n else {\r\n this.StopMessage(\"Recaptcha failed.\")\r\n }\r\n });\r\n }\r\n else {\r\n //if recaptcha is not needed then just submit\r\n this.SubmitPayment();\r\n }\r\n }\r\n\r\n SubmitPayment() {\r\n this.State.ShowLoading = true;\r\n this.State.IsChallenge = false;\r\n\r\n if (this.Entity.Is3DSupported && this.Entity.Secure3DMinSum <= this.Entity.SumPay) {\r\n this.DoThreeDS();\r\n }\r\n else {\r\n this.DoSubmitPaymentRequest();\r\n }\r\n }\r\n\r\n DoThreeDS() {\r\n //Check if CC is filled\r\n if (Utils.NZ(this.State.PaymentRequestParams.CreditCard) == '') {\r\n this.StopMessage(this.RC('msgEnterCreditCardNumber'));\r\n return;\r\n }\r\n this.State.ShowChallenge = true;\r\n this.Do(this.paymentpageEndpoint.ThreeDSVersioning(this.GetPaymentRequestParamsObject()), false,\r\n (response: BaseEntityResponse) => {\r\n //if versioning failed on unsupported card and the page allows unsupported cards, then try to submit\r\n if (response.Entity.DoSubmit) {\r\n this.State.ShowChallenge = false;\r\n this.DoSubmitPaymentRequest();\r\n this.State.ShowLoading = false;\r\n return;\r\n }\r\n this.threeDSTransID = response.Entity.threeDSServerTransID;\r\n //if versioning is Ok then run Init3DSMethod\r\n try {\r\n // If threeDSMethodDataForm have some data then run init3DS, else go to Authentication (by email from Raya)\r\n if (response.Entity.threeDSMethodDataFormExists) {\r\n let oResponse = this.nca3DSWebSDK.createIframeAndInit3DSMethod(response.Entity.threeDSMethodURL,\r\n response.Entity.threeDSMethodData, 'threeDSMethodIFrameContainer', console.log('Iframe loaded, form created and submitted'));\r\n if (oResponse != undefined) {\r\n this.DoThreeDSAuthentication();\r\n }\r\n }\r\n else { this.DoThreeDSAuthentication(); }\r\n\r\n } catch (e) {\r\n let error = e;\r\n console.log(error.message);\r\n this.StopMessage(error.message);\r\n this.State.ShowChallenge = false;\r\n this.threeDSTransID = \"\";\r\n }\r\n this.State.ShowLoading = false;\r\n },\r\n (response: BaseEntityResponse) => {\r\n this.StopMessage(response.ResponseMessage);\r\n this.State.ShowLoading = false;\r\n this.State.ShowChallenge = false;\r\n this.threeDSTransID = \"\";\r\n });\r\n }\r\n\r\n DoThreeDSAuthentication() {\r\n this.Do(this.paymentpageEndpoint.ThreeDSAuthentication(this.GetPaymentRequestParamsObject()), false,\r\n (response: BaseEntityResponse) => {\r\n //if status Y then challenge is not needed. transfer to commit payment\r\n if (response.Entity.transStatus == \"Y\" && response.Entity.RedirectURL != \"\") {\r\n this.RedirectEx(response.Entity.RedirectURL);\r\n }\r\n //If status C then we need challenge.\r\n if (response.Entity.transStatus == \"C\") {\r\n try {\r\n let oResponse = this.nca3DSWebSDK.createIFrameAndInit3DSChallengeRequest(response.Entity.acsURL,\r\n response.Entity.base64EncodedChallengeRequest, '05', 'threeDSCReq05', this.frameContainer05.nativeElement, console.log('Iframe loaded, form created and submitted'));\r\n if (oResponse != undefined) {\r\n //let s = oResponse;\r\n this.State.IsChallenge = true;\r\n }\r\n } catch (e) {\r\n let error = e;\r\n console.log(error.message);\r\n this.StopMessage(error.message);\r\n this.threeDSTransID = \"\";\r\n }\r\n\r\n }\r\n //If status N then 3dr refused this payment.\r\n if (response.Entity.transStatus == \"N\") {\r\n this.StopMessage(response.ResponseMessage);\r\n this.threeDSTransID = \"\";\r\n }\r\n\r\n this.State.ShowLoading = false;\r\n },\r\n //failed\r\n (response: BaseEntityResponse) => {\r\n this.StopMessage(response.ResponseMessage);\r\n this.State.ShowLoading = false;\r\n this.threeDSTransID = \"\";\r\n });\r\n }\r\n\r\n GetPaymentRequestParamsObject(): PaymentRequestParams {\r\n let E = new PaymentRequestParams();\r\n E.PublicRequestID = this.PublicRequestID;\r\n E.CCOwnerID = this.State.PaymentRequestParams.CCOwnerID;\r\n E.CCOwnerName = this.State.PaymentRequestParams.CCOwnerName;\r\n E.CCOwnerPhone = this.State.PaymentRequestParams.CCOwnerPhone;\r\n E.CCOwnerEmail = this.State.PaymentRequestParams.CCOwnerEmail;\r\n E.CreditCard = this.State.PaymentRequestParams.CreditCard;\r\n\r\n E.CVV = this.State.PaymentRequestParams.CVV;\r\n E.Month = this.State.PaymentRequestParams.Month;\r\n E.NumberOfPayments = this.State.PaymentRequestParams.NumberOfPayments;\r\n E.Year = (this.State.PaymentRequestParams.Year);\r\n E.browserColorDepth = window.screen.colorDepth.toString();\r\n E.browserJavaEnabled = navigator.javaEnabled();\r\n E.browserLanguage = window.navigator.language;\r\n if (this.paymentElement != undefined) {\r\n E.browserScreenHeight = this.paymentElement.nativeElement.offsetHeight.toString();//window.screen.height.toString();\r\n E.browserScreenWidth = this.paymentElement.nativeElement.offsetWidth.toString();//window.screen.width.toString();\r\n }\r\n else {\r\n E.browserScreenHeight = window.screen.height.toString();\r\n E.browserScreenWidth = window.screen.width.toString();\r\n }\r\n E.browserUserAgent = window.navigator.userAgent;\r\n E.browserTimezoneOffset = (new Date().getTimezoneOffset()).toString();\r\n E.threeDSServerTransID = this.threeDSTransID;\r\n\r\n switch (this.State.CreditType) {\r\n case 1: {\r\n E.CreditType = CreditTypesEnum.Payments;\r\n break;\r\n }\r\n case 2: {\r\n E.CreditType = CreditTypesEnum.Credit;\r\n break;\r\n }\r\n default: {\r\n E.CreditType = CreditTypesEnum.Regular;\r\n break;\r\n }\r\n }\r\n //always send recaptcha token, will be checked on server in needed or not\r\n E.RecaptchaToken = this.State.RecaptchaToken;\r\n\r\n return E;\r\n }\r\n\r\n DoSubmitPaymentRequest() {\r\n this.Do(this.paymentpageEndpoint.SubmitPaymentRequest(this.GetPaymentRequestParamsObject()), false,\r\n (response: BaseDataResponse) => {\r\n this.RedirectEx(response.Data);\r\n this.State.ShowLoading = false;\r\n },\r\n (response: BaseDataResponse) => {\r\n this.StopMessage(response.ResponseMessage);\r\n this.State.ShowLoading = false;\r\n this.State.ShowChallenge = false;\r\n this.threeDSTransID = \"\";\r\n this.State.IsChallenge = false;\r\n });\r\n }\r\n\r\n //#endregion\r\n\r\n //#region \"Events\"\r\n OnCreditTypeChanged(e) {\r\n if (!this.IsUIEvent(e) || Utils.NZ(e.value) == '' || e.value == 0) {\r\n this.State.PaymentRequestParams.NumberOfPayments = undefined;\r\n return;\r\n }\r\n let obj: KeyValueEntity;\r\n let iMaxNumber: number;\r\n if (e.value == 2) { iMaxNumber = this.Entity.CreditTypes.find(x => x.EntryID == 2).MaxNumOfPayments; }\r\n else { iMaxNumber = this.Entity.CreditTypes.find(x => x.EntryID == 1).MaxNumOfPayments; }\r\n this.State.NumberOfPaymentsList = [];\r\n\r\n if (iMaxNumber == 0) {\r\n obj = new KeyValueEntity();\r\n obj.EntryID = 1;\r\n obj.Value = \"1\";\r\n this.State.NumberOfPaymentsList.push(obj);\r\n }\r\n else {\r\n for (var i = 1; i <= iMaxNumber; i++) {\r\n obj = new KeyValueEntity();\r\n obj.EntryID = i;\r\n obj.Value = Utils.NZ(i);\r\n this.State.NumberOfPaymentsList.push(obj);\r\n }\r\n }\r\n this.State.PaymentRequestParams.NumberOfPayments = 1;\r\n this.OnHeightChanged();\r\n }\r\n\r\n OnPaymentProviderSelected() {\r\n switch (this.State.PaymentProvider) {\r\n case 1: {\r\n this.State.SelectedPaymentProvider = PaymentRequestProviderOption.Shva;\r\n break;\r\n }\r\n case 2: {\r\n this.State.SelectedPaymentProvider = PaymentRequestProviderOption.Paypal;\r\n this.RedirectToPayPal();\r\n break;\r\n }\r\n case 3: {\r\n this.State.SelectedPaymentProvider = PaymentRequestProviderOption.Bit;\r\n this.RedirectToBit();\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n OnCreditCardKeyUp(e) {\r\n let value: string = (event.target as HTMLInputElement).value;\r\n if (value == undefined || value == \"\") return;\r\n if (isNaN(Number(e.event.key))) return;\r\n\r\n this.State.PaymentRequestParams.CreditCard = value;\r\n this.DetectChanges();\r\n if (value.length > 14 && this.IsAmex()) {\r\n this.State.PaymentRequestParams.CreditCard = value.substring(0, 15);\r\n setTimeout(() => this.monthField.instance.focus(), 200);\r\n }\r\n if (value.length > 15) {\r\n this.State.PaymentRequestParams.CreditCard = value.substring(0, 16);\r\n setTimeout(() => this.monthField.instance.focus(), 200);\r\n }\r\n }\r\n\r\n OnMonthChanged(e) {\r\n if (!this.IsUIEvent(e)) { return; }\r\n if (e.value == undefined || e.value == \"\") return;\r\n if (e.value.length < 2) return;\r\n if (isNaN(Number(e.value))) return;\r\n\r\n //this.State.PaymentRequestParams.Month = this.AddLeadingZero(e.value);\r\n //this.DetectChanges();\r\n this.State.PaymentRequestParams.Month = e.value;\r\n\r\n if (Utils.ValEx(e.value) > 12) {\r\n this.State.PaymentRequestParams.Month = \"12\";\r\n }\r\n if (Utils.ValEx(e.value) < 1) {\r\n this.State.PaymentRequestParams.Month = \"01\";\r\n }\r\n\r\n this.DetectChanges();\r\n setTimeout(() => this.yearField.instance.focus(), 200);\r\n }\r\n\r\n OnMonthKeyUp(e) {\r\n //if (!this.IsUIEvent(e)) { return; }\r\n //let value: string = (event.target as HTMLInputElement).value;\r\n\r\n //if (value == undefined || value == \"\") return;\r\n //if (value.length < 2) return;\r\n //if (isNaN(Number(e.event.key))) return;\r\n\r\n //this.State.PaymentRequestParams.Month = value;\r\n //this.DetectChanges();\r\n //if (Utils.ValEx(value) > 12) {\r\n // this.State.PaymentRequestParams.Month = \"12\";\r\n //}\r\n //if (Utils.ValEx(value) <= 1) {\r\n // this.State.PaymentRequestParams.Month = \"01\";\r\n //}\r\n //setTimeout(() => this.yearField.instance.focus(), 200); \r\n }\r\n\r\n OnYearChanged(e) {\r\n if (!this.IsUIEvent(e)) { return; }\r\n if (e.value == undefined || e.value == \"\") return;\r\n if (isNaN(Number(e.value))) return;\r\n\r\n if (e.value.length == 2 && e.value.substring(0, 2) != \"20\") {\r\n if (e.value > this.MaxYear) this.State.PaymentRequestParams.Year = this.MaxYear.toString();\r\n if (this.cvvField != undefined) { setTimeout(() => this.cvvField.instance.focus(), 200); }\r\n }\r\n if (e.value.length > 4) {\r\n this.State.PaymentRequestParams.Year = this.MaxYear.toString();\r\n if (this.cvvField != undefined) { setTimeout(() => this.cvvField.instance.focus(), 200); }\r\n }\r\n if (e.value.length == 4) {\r\n if (e.value - 2000 >= 0 && e.value - 2000 < this.MaxYear) {\r\n this.State.PaymentRequestParams.Year = this.AddLeadingZero((e.value - 2000).toString());\r\n }\r\n else {\r\n this.State.PaymentRequestParams.Year = this.MaxYear.toString();\r\n }\r\n if (this.cvvField != undefined) setTimeout(() => this.cvvField.instance.focus(), 200);\r\n }\r\n\r\n if (e.value < 0) {\r\n this.State.PaymentRequestParams.Year = undefined;\r\n }\r\n\r\n this.DetectChanges();\r\n\r\n }\r\n\r\n OnYearKeyUp(e) {\r\n //if (!this.IsUIEvent(e)) { return; }\r\n //let value: string = (event.target as HTMLInputElement).value;\r\n //if (value == undefined || value == \"\") return;\r\n //if (isNaN(Number(e.event.key))) return;\r\n //this.State.PaymentRequestParams.Year = value;\r\n //this.DetectChanges();\r\n\r\n //if (value.length >= 4) {\r\n // if (this.cvvField != undefined) { setTimeout(() => this.cvvField.instance.focus(), 200); }\r\n //}\r\n\r\n //if (value.length == 2 && value.substring(0, 2) != \"20\") {\r\n // if (this.cvvField != undefined) { setTimeout(() => this.cvvField.instance.focus(), 200); }\r\n //}\r\n //if (value.length > 4) {\r\n // this.State.PaymentRequestParams.Year = this.MaxYear.toString();\r\n // if (this.cvvField != undefined) { setTimeout(() => this.cvvField.instance.focus(), 200); }\r\n //}\r\n }\r\n\r\n\r\n OnCVVChanged(e) {\r\n if (!this.IsUIEvent(e)) { return; }\r\n if (e.value.length > 4) { this.State.PaymentRequestParams.CVV = e.value.toString().substring(0, 4) }\r\n this.DetectChanges();\r\n }\r\n\r\n OnCvvKeyUp(e) {\r\n let value: string = (event.target as HTMLInputElement).value;\r\n\r\n if (value == undefined || value == \"\") return;\r\n if (isNaN(Number(e.event.key))) return;\r\n\r\n this.State.PaymentRequestParams.CVV = value;\r\n this.DetectChanges();\r\n if (value.length > 4) { this.State.PaymentRequestParams.CVV = value.toString().substring(0, 4) }\r\n\r\n if (this.State.PaymentRequestParams.CreditCard != undefined && this.State.PaymentRequestParams.CreditCard.length > 2) {\r\n if (this.IsAmex()) {\r\n if (value.length > 3 && this.ownerIDField != undefined) { setTimeout(() => this.ownerIDField.instance.focus(), 200); }\r\n return;\r\n }\r\n }\r\n if (value.length >= 3) {\r\n if (this.ownerIDField != undefined) { setTimeout(() => this.ownerIDField.instance.focus(), 200); }\r\n }\r\n }\r\n OnOwnerIDKeyUp(e) {\r\n let value: string = (event.target as HTMLInputElement).value;\r\n if (value == undefined || value == \"\") return;\r\n if (isNaN(Number(e.event.key))) return;\r\n if (value.length >= 9) {\r\n this.State.PaymentRequestParams.CCOwnerID = value;\r\n this.DetectChanges();\r\n this.State.PaymentRequestParams.CCOwnerID = value.substring(0, 9);\r\n if (this.ownerNameField != undefined) { setTimeout(() => this.ownerNameField.instance.focus(), 200); }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region \"Methods\"\r\n SetPaymentProviders(Entity: PaymentPage) {\r\n let provider: KeyValueEntity;\r\n if (Entity.ProviderOption == PaymentRequestProviderOption.UserSelection) {\r\n provider = new KeyValueEntity();\r\n provider.EntryID = 1;\r\n provider.Value = this.RC(\"optShva\");\r\n this.State.ProviderOptions.push(provider);\r\n this.State.PaymentProvider = 1;\r\n\r\n if (Entity.IsPaypalEnabled) {\r\n provider = new KeyValueEntity();\r\n provider.EntryID = 2;\r\n provider.Value = this.RC(\"optPayPal\");\r\n this.State.ProviderOptions.push(provider);\r\n }\r\n\r\n if (Entity.IsBitEnabled && (this.deviceDetector.os === 'Android' || this.deviceDetector.os === 'iOS')) {\r\n provider = new KeyValueEntity();\r\n provider.EntryID = 3;\r\n provider.Value = this.RC(\"optBit\");\r\n this.State.ProviderOptions.push(provider);\r\n }\r\n }\r\n }\r\n\r\n SetLabelsText() {\r\n if (Utils.NZ(this.Entity.PageTitle) != \"\") this.State.PageTitle = this.Entity.PageTitle;\r\n if (Utils.NZ(this.Entity.OKButtonTitle) != \"\") this.State.PayButtonText = this.Entity.OKButtonTitle;\r\n }\r\n\r\n FillYearsAndMonthes() {\r\n //if years filled then exit\r\n if (this.State.YearsList != undefined && this.State.YearsList.length > 0) { return; }\r\n let obj: KeyValueEntity;\r\n //List years \r\n let currentYear: number = new Date().getFullYear();\r\n for (var iYear = currentYear; iYear <= currentYear + 10; iYear++) {\r\n obj = new KeyValueEntity();\r\n obj.Key = (iYear - 2000).toString();\r\n obj.Value = (iYear - 2000).toString();\r\n this.State.YearsList.push(obj);\r\n }\r\n\r\n //List months\r\n for (var iMonth = 1; iMonth <= 12; iMonth++) {\r\n obj = new KeyValueEntity();\r\n obj.Key = iMonth < 10 ? \"0\" + iMonth.toString() : iMonth.toString();\r\n obj.Value = this.RCF(\"Month_\" + iMonth);\r\n this.State.MonthsList.push(obj);\r\n }\r\n }\r\n\r\n IsAmex(): boolean {\r\n if (Utils.NZ(this.State.PaymentRequestParams.CreditCard) != \"\" && this.State.PaymentRequestParams.CreditCard.length > 2) {\r\n let cardStart: string = this.State.PaymentRequestParams.CreditCard.substring(0, 2)\r\n if (cardStart == \"34\" || cardStart == \"37\") {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n AddLeadingZero(str: string): string {\r\n if (str != undefined && str.length == 1) {\r\n return \"0\" + str;\r\n }\r\n return str;\r\n }\r\n\r\n StopMessage(str: string) {\r\n this.UI.StopMessage(str, '#btnPay');\r\n }\r\n\r\n GetToolTipCVV() { return this.RC('toolTipCVVHelp') }\r\n\r\n IsValidOwnerName = () => {\r\n if (Utils.ContainsHebrewLetters(this.State.PaymentRequestParams.CCOwnerName)) { return false; }\r\n return true ;\r\n }\r\n //#endregion \r\n\r\n //#region Redirects\r\n RedirectToPayment(Entity: PaymentPage) {\r\n if (Entity.IsBitEnabled && Entity.ProviderOption == PaymentRequestProviderOption.Bit) { this.RedirectToBit(); }\r\n if (Entity.IsPaypalEnabled && Entity.ProviderOption == PaymentRequestProviderOption.Paypal) { this.RedirectToPayPal(); }\r\n }\r\n\r\n RedirectToBit() {\r\n\r\n //Get device type\r\n var os: EnumBitClientDeviceOSes = EnumBitClientDeviceOSes.Web;\r\n if (this.deviceDetector.os == \"iOS\") os = EnumBitClientDeviceOSes.IOS;\r\n if (this.deviceDetector.os == \"Android\") os = EnumBitClientDeviceOSes.Android;\r\n\r\n //Get Bit Url\r\n this.Do(this.paymentpageEndpoint.GetBitUrl(this.PublicRequestID, os), false,\r\n (response: BaseDataResponse) => {\r\n const newWindow = this.RedirectEx(response.Data);\r\n setTimeout(() => {\r\n newWindow && newWindow.close();\r\n window.close();\r\n window.top?.close();\r\n }, 1000);\r\n this.State.ShowLoading = false;\r\n },\r\n (response: BaseDataResponse) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.State.ShowLoading = false;\r\n if (this.Entity.ProviderOption == PaymentRequestProviderOption.UserSelection) this.State.SelectedPaymentProvider = PaymentRequestProviderOption.UserSelection;\r\n });\r\n }\r\n\r\n RedirectToPayPal() {\r\n //Get Bit Url\r\n this.Do(this.paymentpageEndpoint.GetPayPalUrl(this.PublicRequestID), false,\r\n (response: BaseDataResponse) => {\r\n this.RedirectEx(response.Data);\r\n this.State.ShowLoading = false;\r\n },\r\n (response: BaseDataResponse) => {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n this.State.ShowLoading = false;\r\n if (this.Entity.ProviderOption == PaymentRequestProviderOption.UserSelection) this.State.SelectedPaymentProvider = PaymentRequestProviderOption.UserSelection;\r\n });\r\n }\r\n\r\n RedirectEx(url: string) {\r\n if (this.Entity != undefined && this.Entity.RedirectMethod == PaymentPageRedirectMethodsEnum.IFrameOnly) {\r\n return this.RedirectSelf(url);\r\n }\r\n else {\r\n window.top.location.href = (url);\r\n return window.top;\r\n //this.A.Navigator.NavigateExternal(url);\r\n }\r\n }\r\n //navigate to self tab\r\n RedirectSelf(url: string) {\r\n if (url == undefined || url == '') return window;\r\n return window.open(url, '_self');\r\n }\r\n //#endregion\r\n} \r\n","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
{{State.PageTitle}}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
{{'lblDescription' | RC:THIS }}
\\r\\n \\r\\n
{{'lblTotalToPay' | RC:THIS }} : {{Entity?.SumPay | formatNumberSum }} {{State?.Currency}}
\\r\\n \\r\\n \\r\\n \\r\\n 1\\\" class=\\\"gcpp-credit-type-field\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{Entity.BottomMessage}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\";","import { AppConfig } from '@m4u-angular/configuration/app.config.model';\r\nimport { Enums, EnumSystemOptionsZ } from './_proxy/enums';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Lists_EN } from './_resources/LISTS_EN';\r\nimport { Lists_HE } from './_resources/LISTS_HE';\r\n//import { ResourcesZ_EN } from './_resources/EN';\r\n//import { ResourcesZ_HE } from './_resources/HE';\r\n\r\nimport { PaymentPageComponent } from '././pages/paymentpage/paymentpage.component';\r\nimport { DefaultRouteParams } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n//import { SysGlobals } from '@m4u-angular/framework/sysglobals';\r\nimport { PaymentPageEndpoint } from \"./_proxy/endpoints/paymentpage.endpoint\";\r\nimport { EnumApplicationMode } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nimport { EmptyLayoutComponent } from '@m4u-angular/ui/layouts/layout/empty-layout/emptylayout.component';\r\n\r\nclass NCCSPaymentPageAppConfig extends AppConfig\r\n{\r\n override ModuleName = 'NCCSPaymentPage';\r\n override Mode = EnumApplicationMode.SinglePage;\r\n override Components = [PaymentPageComponent];\r\n override Endpoints = [PaymentPageEndpoint];\r\n override Services = [];\r\n override RoutesWithEmptyLayout = [\r\n { path: 'paymentpage/:PublicRequestID', component: PaymentPageComponent, data: { Menu: 'pamentpage' } }\r\n ];\r\n\r\n\r\n\r\n override OnGetDefaultRouteParams = (userInfo?: any) =>\r\n {\r\n const defaultRouteParams = new DefaultRouteParams();\r\n defaultRouteParams.Route = ''; //'pages/Y_NCCSPaymentPage_paymentpage/531293FE-4460-46BF-8196-56D3E49A210B'; \r\n return of(defaultRouteParams);\r\n };\r\n\r\n //GetResources = () => [ResourcesZ_EN, ResourcesZ_HE];\r\n override GetLists = () => [Lists_EN, Lists_HE];\r\n SystemOptions = EnumSystemOptionsZ;\r\n override Enums = Enums;\r\n}\r\n\r\nexport const appConfig: AppConfig = new NCCSPaymentPageAppConfig();","import { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { EnumCRUDActions, EnumToggle, EnumLoginExtensionLinkType, EnumMessageBoxTypes, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { BasePageComponent } from '../component/BasePageComponent';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseEntity, BaseState, DataGroupInfo } from '../entities/BaseEntities';\r\nimport { GridExtender } from '../grid/Grid.extender';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nexport class StringMapElement {\r\n Old: string;\r\n New: string;\r\n}\r\n\r\nexport class BaseCustomizationElementFilter {\r\n Component: string | string[];\r\n Name: string | string[];\r\n User: number | number[];\r\n}\r\n\r\nexport class BaseCustomizationElementLogic {\r\n Hide: boolean;\r\n HideOnMobile: boolean;\r\n HideOnDesktop: boolean;\r\n}\r\n\r\nexport class BaseCustomizationElement {\r\n Filter: BaseCustomizationElementFilter;\r\n Logic: BaseCustomizationElementLogic;\r\n}\r\n\r\nexport class FieldCustomizationElementLogic extends BaseCustomizationElementLogic {\r\n ReadOnly: boolean;\r\n Required: boolean;\r\n Label: string;\r\n DefaultValue: string;\r\n HideValues: string[];\r\n ValidationFunction: (Entity: BaseEntity, State: BaseState) => boolean;\r\n ValidationMessage: string;\r\n}\r\n\r\nexport class ComponentCustomizationElementFilter extends BaseCustomizationElementFilter {\r\n Columns: string[];\r\n}\r\n\r\nexport class FieldCustomizationElement extends BaseCustomizationElement {\r\n override Logic: FieldCustomizationElementLogic;\r\n}\r\n\r\nexport class ComponentCustomization extends BaseCustomizationElement {\r\n override Filter: ComponentCustomizationElementFilter;\r\n}\r\n\r\nexport class EntitySavedEventArgs {\r\n constructor(\r\n public Entity: BaseEntity,\r\n public Type: new () => BaseEntity,\r\n public Action: EnumCRUDActions\r\n ) {\r\n }\r\n}\r\n\r\nexport class EntityLoadedEventArgs {\r\n constructor(\r\n public Entity: BaseEntity,\r\n public Type: new () => BaseEntity,\r\n ) {\r\n }\r\n}\r\n\r\n\r\nexport class ViewModeElement {\r\n viewmode: any;\r\n visible?: boolean;\r\n text: string;\r\n callback: any;\r\n}\r\n\r\nexport class ContextMenuElement {\r\n constructor(\r\n public text: string,\r\n public onClick: () => any,\r\n public visible?: boolean | (() => boolean),\r\n public icon?: string\r\n ) { }\r\n}\r\n\r\nexport class MainMenuElement {\r\n public visible = false;\r\n public text: string;\r\n public moduleName: string;\r\n\r\n constructor(\r\n public menu: string,\r\n public path: string,\r\n public icon: string,\r\n public permission?: string,\r\n public permissionFunction?: (userInfo?: any) => boolean,\r\n public pathParams?: (userInfo?: any) => any[],\r\n public isVisibleOnMobile?: boolean,\r\n public items?: MainMenuElement[],\r\n public queryParams?: {},\r\n public showAsBottomSheet?: boolean,\r\n public click?: () => void\r\n ) { }\r\n}\r\n\r\n\r\n\r\nexport class DataGroupInfoHeader extends DataGroupInfo {\r\n constructor(\r\n public override Name: string,\r\n public override Value: string,\r\n public override TotalRows = 0,\r\n ) {\r\n super(Name, Value, TotalRows); \r\n }\r\n public Toggle: EnumToggle = EnumToggle.Out;\r\n public DataSource: BaseDataSourceAbstract;\r\n public Items: BaseEntity[];\r\n}\r\n\r\n\r\n\r\nexport class FieldInfo {\r\n constructor(\r\n public Name: string,\r\n public Translation: string) { }\r\n}\r\n\r\n\r\nexport class MessageBoxCustomButton {\r\n Text: string;\r\n ButtonID: number;\r\n TabIndex?: number;\r\n}\r\n\r\nexport class LoginExtensionLink {\r\n Name: string;\r\n Link: string;\r\n Type: EnumLoginExtensionLinkType;\r\n ModuleName: string;\r\n}\r\n\r\nexport class DefaultRouteParams {\r\n Route: string = '';\r\n Params: any;\r\n}\r\n\r\nexport class ToolbarSettings {\r\n PageComponentName: string;\r\n Page: BasePageComponent;\r\n\r\n Title: string;\r\n Subtitle: string;\r\n SubtitleTemplate: TemplateRef;\r\n\r\n ShowMenuButton: boolean;\r\n ShowBackButton: boolean;\r\n BackButtonClick: () => void;\r\n ViewModes: ViewModeElement[];\r\n ShowCloseButton: boolean;\r\n CloseButtonClick: () => void;\r\n OnGetPreviewTitle: () => string = () => '';\r\n\r\n OnGetContextMenuItems: () => ContextMenuElement[];\r\n ContextMenuTitle: string;\r\n ShowContextMenuAsUsualOnMobile: boolean = false;\r\n\r\n IsAllowFilter: boolean = false;\r\n IsAllowExport: boolean = false;\r\n IsAllowPrint: boolean = false;\r\n IsAllowNotifications: boolean = false;\r\n IsSupportHistory: boolean = false;\r\n ShowButtonsText: boolean = false;\r\n GridExtender: GridExtender | (() => GridExtender);\r\n\r\n FilterPanelWidth: EnumWindowSizes;\r\n\r\n OnPrintButtonClick: (e) => void;\r\n}\r\n\r\nexport class InjectableComponentOptions> {\r\n TargetModuleName: string;\r\n TargetComponentName: string;\r\n TargetComponentType?: 'contact-us';\r\n ButtonText: string;\r\n ButtonIcon: string;\r\n ShowInToolbarOnMobile: boolean;\r\n IsVisibleButton: (page: BasePageComponent) => boolean;\r\n ComponentType: (new (A: ServiceBagService, ComponentName: string, StateType: (new () => BaseState)) => TComponentType);\r\n}\r\n\r\nexport class MessageBoxOptions {\r\n constructor(public Type: EnumMessageBoxTypes, public Prompt: string) {\r\n\r\n }\r\n}","import { AfterViewInit, ContentChildren, ViewChildren, ContentChild, OnChanges, OnDestroy, OnInit, QueryList, \r\n SimpleChanges, ViewChild, Component } from '@angular/core';\r\nimport { DxDataGridComponent, DxTabsComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { SectionComponent } from '@ui/layouts/fieldlayouts/section/section.component';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { EnumCRUDActions, SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseEntity, BaseResponse, BaseState, CompanyInfo, GenericListEntity } from '../entities/BaseEntities';\r\nimport { EntityLoadedEventArgs, EntitySavedEventArgs } from '../classes/BaseClasses';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.enum';\r\nimport { IBaseComponent, IBaseModuleComponent } from './IBaseComponent';\r\nimport { dxValidationGroupResult } from 'devextreme/ui/validation_group';\r\nimport { UiService } from '@core/framework/ui.service';\r\n\r\n@Component({\r\n selector: 'base-component',\r\n template: '
'\r\n})\r\n/** Base component with state */\r\n// eslint-disable-next-line max-len\r\nexport abstract class BaseComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges, IBaseComponent, IBaseModuleComponent {\r\n //Class members\r\n public State: TState = {} as TState;\r\n public DataSources: BaseDataSourceAbstract[] = {} as BaseDataSourceAbstract[];\r\n\r\n public ModuleName: string = this.A.AppConfigService.getModuleNameByInstance(this);\r\n\r\n private subscribtionOnEntitySaved: Subscription;\r\n private subscribtionOnEntityLoaded: Subscription;\r\n private subscribtionOnReloadComponent: Subscription;\r\n private registeredSubscriptions: Subscription[] = [];\r\n private registeredInitComponentHandlers: (() => void)[] = [];\r\n\r\n //Child component iterators and combiners.\r\n //Since content may be injected from outside, consider both options here\r\n @ViewChild('FocusOnMe') private FocusOnMe_V: any;\r\n @ViewChildren(DxValidationGroupComponent) private validationGroups: QueryList;\r\n @ContentChild('FocusOnMe') private FocusOnMe_C: any;\r\n private get FocusOnMe(): any {\r\n return Utils.CombineChild(this.FocusOnMe_V, this.FocusOnMe_C); \r\n }\r\n @ViewChildren(SectionComponent) private Sections_V: QueryList;\r\n @ContentChildren(SectionComponent) private Sections_C: QueryList;\r\n private get Sections(): SectionComponent[] {\r\n return Utils.CombineChildren(this.Sections_V, this.Sections_C); \r\n }\r\n @ViewChildren(DxTabsComponent) Tabs: QueryList;\r\n @ViewChildren(DxDataGridComponent) Grids: QueryList;\r\n\r\n //Overrides - for usage by actual components\r\n protected OnInitComponent() { }\r\n protected OnInitComponentFinished() { }\r\n protected OnStartInitCycle() { }\r\n protected OnDestroyComponent() { }\r\n protected OnInitDataSources() { }\r\n protected OnInitState() { }\r\n // eslint-disable-next-line max-len\r\n protected OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) { }\r\n protected OnExternalEntityLoaded(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity) { }\r\n protected OnInputPropertiesChanged(changes: SimpleChanges) { }\r\n protected OnPropertiesChanged() {}\r\n protected OnGetCustomComponentStateName(): string {\r\n return undefined; \r\n }\r\n protected IsAutoFocusEnabled(): boolean {\r\n return true; \r\n }\r\n protected IsUseFinishCycleChangeDetection(): boolean {\r\n return false; \r\n }\r\n\r\n //Internal overrides - for usage by BaseComponent* framework classes only\r\n protected OnInitComponentInternal() { }\r\n protected OnInitComponentFinishedInternal() { }\r\n protected OnInitComponentFinishedAfterDetectInternal() { }\r\n protected OnStartInitCycleInternal() { }\r\n protected OnDestroyComponentInternal() { }\r\n\r\n constructor\r\n (\r\n public A: ServiceBagService,\r\n public ComponentName: string,\r\n protected StateType: (new () => TState)\r\n ) {\r\n this.State = Utils.GetNewInstance(this.StateType);\r\n }\r\n\r\n\r\n //Return name used for state, configuration, etc\r\n public get ComponentStateName(): string {\r\n const sCustom: string = this.OnGetCustomComponentStateName();\r\n return sCustom != undefined ? sCustom : this.ComponentName;\r\n }\r\n\r\n protected InitState() {\r\n //Init state\r\n this.State = { ...Utils.GetNewInstance(this.StateType), ...this.State };\r\n\r\n //Attempt to load saved state\r\n let bStateLoaded: boolean;\r\n if (!SysGlobals.IsResetState) bStateLoaded = this.LoadState();\r\n SysGlobals.IsResetState = false;\r\n\r\n //If no saved state was loaded, init fresh\r\n if (!bStateLoaded) {\r\n this.OnInitState();\r\n if (this.DoValidatorReset()) {\r\n this.validationGroups?.forEach(validationGroup => {\r\n validationGroup?.instance?.reset();\r\n });\r\n }\r\n }\r\n\r\n //Set\r\n SysGlobals.CurrentState = this.State;\r\n }\r\n\r\n //Run internal change detection, in cases when Angular does not detect on its own. For instance, when changing references inside State\r\n protected DetectChanges() {\r\n if (this.A.ChangeDetector == undefined) return;\r\n if ((this.A.ChangeDetector as any).destroyed) return;\r\n this.A.ChangeDetector.detectChanges();\r\n }\r\n\r\n public get UI(): UiService {\r\n return this.A.UI;\r\n }\r\n\r\n public get UserInfo(): any {\r\n return this.ModuleName && this.A.Session.UserInfoDict[this.ModuleName];\r\n }\r\n\r\n //This construction is required so that the component can access this member\r\n public DS(Name: string): BaseDataSourceAbstract {\r\n return this.DataSources[Name] \r\n ? this.DataSources[Name] \r\n : this.A.Session.DataSources \r\n ? this.A.Session.DataSources[`${this.ModuleName}${Name}`] \r\n : null;\r\n }\r\n\r\n public get Enums(): any {\r\n return this.A.Enums;\r\n }\r\n\r\n public get SysEnums(): SysEnumsService {\r\n return this.A.SysEnums;\r\n }\r\n\r\n public LIST(sListName): GenericListEntity[] {\r\n return this.A.ResourcesService.LIST(sListName, this.ModuleName);\r\n }\r\n\r\n public LISTITEM(sListName, sValue): string {\r\n return this.A.ResourcesService.LISTITEM(sListName, sValue, this.ModuleName);\r\n }\r\n\r\n public LISTITEMX(sListName, sValue): GenericListEntity {\r\n return this.A.ResourcesService.LISTITEMX(sListName, sValue, this.ModuleName);\r\n }\r\n\r\n public RC(value, ...args: string[] | number[]): string {\r\n return this.A.ResourcesService.RC(value, this.ModuleName, ...args);\r\n }\r\n\r\n public RCF(value, ...args: string[] | number[]): string {\r\n return this.A.ResourcesService.RC(value, '', ...args);\r\n }\r\n\r\n public get Framework(): FrameworkService {\r\n return this.A.Framework;\r\n }\r\n\r\n public CustomBuild(build: string, execute: () => void) {\r\n if (this.Framework.IsCustomBuild(build)) execute();\r\n }\r\n\r\n public IsCustomBuild(build: string): boolean {\r\n return this.Framework.IsCustomBuild(build);\r\n }\r\n\r\n //Preserve state into global variable\r\n SaveState() {\r\n SysGlobals.PageStates[this.ComponentStateName] = this.State;\r\n }\r\n\r\n //Load state from global variable\r\n protected LoadState(): boolean {\r\n const oState = SysGlobals.PageStates[this.ComponentStateName];\r\n if (oState == undefined) return false;\r\n this.State = Utils.CloneObject(oState);\r\n return true;\r\n }\r\n\r\n\r\n //Go to route\r\n public Navigate(params: any[], optionalParams?: any, bSaveState = false, bSaveCurrentLocation = false) {\r\n //Preserve current state\r\n if (this.IsNeedSaveState(params)) this.SaveState();\r\n return this.A.Navigator.Navigate(params, optionalParams);\r\n }\r\n\r\n private IsNeedSaveState(params: any[]) {\r\n const path = params[0] as string;\r\n return !path.includes('system/');\r\n }\r\n\r\n //Go back\r\n public NavigateBack() {\r\n this.A.RouteHistoryService.GoBack();\r\n return Promise.resolve(true);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.OnInputPropertiesChanged(changes);\r\n }\r\n\r\n ngDoCheck() {\r\n this.OnPropertiesChanged();\r\n }\r\n\r\n //Attach events\r\n private SubscribeEvents() {\r\n this.subscribtionOnEntitySaved = this.A.SysEvents.OnEntitySaved.subscribe(\r\n (e: EntitySavedEventArgs) => this.OnExternalEntitySaved(e.Entity, e.Type, e.Action));\r\n this.subscribtionOnEntityLoaded = this.A.SysEvents.OnEntityLoaded.subscribe(\r\n (e: EntityLoadedEventArgs) => this.OnExternalEntityLoaded(e.Entity, e.Type));\r\n this.subscribtionOnReloadComponent = this.A.SysEvents.OnReloadComponent.subscribe(\r\n (sComponentName: string) => this.OnReloadComponent(sComponentName));\r\n }\r\n\r\n //Detach events\r\n private UnsubscribeEvents() {\r\n this.subscribtionOnEntitySaved && this.subscribtionOnEntitySaved.unsubscribe();\r\n this.subscribtionOnEntityLoaded && this.subscribtionOnEntityLoaded.unsubscribe();\r\n this.subscribtionOnReloadComponent && this.subscribtionOnReloadComponent.unsubscribe();\r\n }\r\n\r\n //Reload event handler\r\n protected OnReloadComponent(sComponentName: string) {\r\n if (this.ComponentName == sComponentName) this.ReloadComponent();\r\n }\r\n\r\n //Fully reload the component, as if user just navigated to it\r\n //Use SetTimeout in order for the navigation changes to be applied\r\n protected ReloadComponent(sComponentName: string = undefined) {\r\n if (sComponentName == undefined || sComponentName == this.ComponentName) {\r\n //Reload the current component\r\n setTimeout(() => {\r\n this.RunDestroyCycle(false);\r\n this.RunInitStartCycle(false);\r\n this.RunInitFinishCycle(false);\r\n }, 100);\r\n } else {\r\n //Send a message to reload a different one\r\n this.A.Navigator.ReloadComponent(sComponentName);\r\n }\r\n }\r\n\r\n //Lifecycle event executors\r\n protected RunInitStartCycle(bFromAngularEvent: boolean) {\r\n this.RunInitStartCycleInternal(); \r\n }\r\n protected RunInitFinishCycle(bFromAngularEvent: boolean) {\r\n this.RunInitFinishCycleInternal(); \r\n }\r\n protected RunDestroyCycle(bFromAngularEvent: boolean) {\r\n this.RunDestroyCycleInternal(); \r\n }\r\n\r\n //Lifecycle event hooks\r\n ngOnInit() {\r\n this.RunInitStartCycle(true); \r\n }\r\n ngAfterViewInit() {\r\n this.RunInitFinishCycle(true); \r\n }\r\n ngOnDestroy() {\r\n this.UnsubscribeRegisteredSubscriptions();\r\n this.RunDestroyCycle(true); \r\n }\r\n\r\n //Component initialization start cylce\r\n private RunInitStartCycleInternal() {\r\n //Before life-cycle events for child component overrides\r\n this.OnStartInitCycleInternal();\r\n this.OnStartInitCycle();\r\n\r\n //Page initialization lifecycle\r\n this.SubscribeEvents();\r\n this.InitState();\r\n this.OnInitDataSources();\r\n this.OnInitComponentInternal();\r\n this.ExecuteInitComponentHandler();\r\n this.OnInitComponent();\r\n }\r\n\r\n //Component initialization finish cylce\r\n private RunInitFinishCycleInternal() {\r\n //Focus on first textbox\r\n this.InitFocus();\r\n\r\n //Allow override\r\n this.OnInitComponentFinishedInternal();\r\n this.OnInitComponentFinished();\r\n\r\n //Run detection since FieldCustomizations set some values on the controls after view has been checked\r\n //!!! Code below -> PERFORMANCE GAP.\r\n //if (SysGlobals.ComponentCustomizations?.length || SysGlobals.FieldCustomizations?.length) {\r\n if (this.IsUseFinishCycleChangeDetection()) {\r\n this.DetectChanges(); \r\n }\r\n\r\n //Allow override after detect\r\n this.OnInitComponentFinishedAfterDetectInternal();\r\n\r\n this.CustomizeComponentsVisibility();\r\n }\r\n\r\n CustomizeComponentsVisibility() {\r\n if (!SysGlobals.ComponentCustomizations) return;\r\n\r\n //Customize components if already on the page\r\n this.A.CustomizationService.SetComponentCustomizations(this.Grids.toArray(), this.ComponentStateName);\r\n this.A.CustomizationService.SetComponentCustomizations(this.Sections_V.toArray(), this.ComponentStateName);\r\n const tabsItems = this.Tabs.toArray().reduce((p, c) => [...p, ...c.items], []);\r\n this.A.CustomizationService.SetComponentCustomizations(tabsItems, this.ComponentStateName);\r\n\r\n //Customize components after they will appear on the page by some conditions\r\n this.Grids.changes.subscribe((grids) => {\r\n this.A.CustomizationService.SetComponentCustomizations(grids.toArray(), this.ComponentStateName);\r\n });\r\n this.Sections_V.changes.subscribe((sections) => {\r\n this.A.CustomizationService.SetComponentCustomizations(sections.toArray(), this.ComponentStateName);\r\n });\r\n this.Tabs.changes.subscribe((tabs) => {\r\n const tabsItems = tabs.toArray().reduce((p, c) => [...p, ...c.items], []);\r\n this.A.CustomizationService.SetComponentCustomizations(tabsItems, this.ComponentStateName);\r\n });\r\n }\r\n\r\n //Destruction cycle\r\n private RunDestroyCycleInternal() {\r\n this.UnsubscribeEvents();\r\n this.UnsubscribeRegisteredSubscriptions();\r\n\r\n //Overrides\r\n this.OnDestroyComponentInternal();\r\n this.OnDestroyComponent();\r\n }\r\n\r\n //Focus on the marked control\r\n public InitFocus() {\r\n if (this.FocusOnMe && this.FocusOnMe.instance && this.IsAutoFocusEnabled()) setTimeout(() => this.FocusOnMe.instance.focus(), 500);\r\n }\r\n\r\n //Generic executer for observable\r\n protected Do(serviceResponse: Observable, bShowSuccessMessage = true, \r\n after?: (response: T) => void, fail?: (response: T) => void) {\r\n this.Framework.Do(serviceResponse, bShowSuccessMessage, after, fail);\r\n }\r\n\r\n //Lock controls. Use setTimeout since it's usually called after all kinds of values are changed, to allow DetectChanges to run before\r\n public LockControls(bLock: boolean) {\r\n setTimeout(() => {\r\n this.Sections.forEach(x => x.LockControls(bLock));\r\n });\r\n }\r\n\r\n //Reset the validation.\r\n protected ResetValidation() {\r\n this.Sections.forEach(x => x.ResetValidation());\r\n }\r\n\r\n //todo: rename it \r\n protected AcceptGridChanges(): Promise[] {\r\n const gridValidations = new Array>();\r\n this.Sections.forEach(x => x.AcceptGridChanges().forEach(v => gridValidations.push(v)));\r\n return gridValidations;\r\n }\r\n\r\n public SystemOptionFlag(OptionName: EnumSystemOptions | string): boolean {\r\n return this.Framework.SystemOptionFlag(OptionName);\r\n }\r\n\r\n public SystemOption(OptionName: EnumSystemOptions | string): any {\r\n return this.Framework.SystemOption(OptionName);\r\n }\r\n\r\n //Raise an event to notify potential subscribers that the entity was saved\r\n //This is in the base class since different components might be using it, not only entity ones\r\n protected NotifyEntitySaved(Entity: BaseEntity, Type: new () => BaseEntity, Action: EnumCRUDActions = EnumCRUDActions.CreateOrUpdate) {\r\n const args = new EntitySavedEventArgs(Entity, Type, Action);\r\n this.A.EntityService.SetLastSavedEntity(args);\r\n this.A.SysEvents.NotifyEntitySaved(args);\r\n }\r\n\r\n protected NotifyEntityLoaded(Entity: BaseEntity, Type: new () => BaseEntity) {\r\n this.A.SysEvents.OnEntityLoaded.emit(new EntityLoadedEventArgs(Entity, Type));\r\n }\r\n\r\n protected DoValidatorReset(): boolean {\r\n return true;\r\n }\r\n\r\n public get THIS(): BaseComponent {\r\n return this;\r\n }\r\n\r\n //Validate the group, and focus on the first elemt\r\n public ValidateValidationGroup(validationGroup: DxValidationGroupComponent, beforeMoveFocus?: () => void): Promise {\r\n //Validate\r\n const result = validationGroup.instance.validate();\r\n if (result.status === 'pending') return new Promise((resolve) => {\r\n (>result.complete).then(res => resolve(res.isValid));\r\n });\r\n\r\n return new Promise((resolve) => {\r\n if (result.isValid) {\r\n resolve(true);\r\n return;\r\n }\r\n\r\n if (beforeMoveFocus) beforeMoveFocus();\r\n\r\n //Focus and return error. Use SetTimeout since beforeMoveFocus may take some time to reflect\r\n setTimeout(() => {\r\n (result.brokenRules[0] as any).validator.focus();\r\n //Call validate method after focus again to redraw controls for correct validation error message position\r\n setTimeout(() => validationGroup.instance.validate(), 0);\r\n }, 100);\r\n resolve(false);\r\n });\r\n }\r\n\r\n //Shortcut to specify formats\r\n public get F(): CompanyInfo {\r\n return this.A.Framework.CompanyInfo;\r\n }\r\n\r\n //Return whether user has one of the permissions\r\n public IsAllow(permissions: string[]) {\r\n if (!permissions || permissions.length == 0) return true;\r\n return permissions.some((p) => this.UserInfo && this.UserInfo.hasOwnProperty('IsAllow' + p) && this.UserInfo['IsAllow' + p]);\r\n }\r\n\r\n //Filter out events that are not generated by UI\r\n //Include special way to force event by passing e==true\r\n protected IsUIEvent(e: any): boolean {\r\n if (e == true) return true;\r\n return (e != undefined && e.event != undefined);\r\n }\r\n\r\n //Bind context this to the event. It cannot be done other way\r\n protected BindHandler(sHandlerName: string) {\r\n if (this[sHandlerName] == undefined) throw (`Invalid handler ${sHandlerName} was specified`);\r\n this[sHandlerName] = this[sHandlerName].bind(this);\r\n }\r\n\r\n public RegisterSubscription(subscription: Subscription): Subscription {\r\n !this.registeredSubscriptions.includes(subscription) && this.registeredSubscriptions.push(subscription);\r\n return subscription;\r\n }\r\n\r\n public RegisterInitComponentHandler(handler: () => void) {\r\n this.registeredInitComponentHandlers.push(handler);\r\n }\r\n\r\n private UnsubscribeRegisteredSubscriptions() {\r\n //\r\n //console.log('UnsubscribeRegisteredSubscriptions: ' + this.registeredSubscriptions.length);\r\n //\r\n this.registeredSubscriptions.forEach(s => {\r\n s && !s.closed && s.unsubscribe();\r\n });\r\n }\r\n\r\n private ExecuteInitComponentHandler() {\r\n this.registeredInitComponentHandlers.forEach(h => {\r\n h && h();\r\n });\r\n }\r\n}\r\n","import { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { EnumCRUDActions, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseState, HistoryChangesSet, BaseEntitiesResponse } from '../entities/BaseEntities';\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BasePageComponent } from './BasePageComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { Observable, map, tap, Subscription } from 'rxjs';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { Component, ContentChildren, QueryList, SimpleChanges, ViewChildren } from '@angular/core';\r\nimport { FieldFormComponent } from '@m4u-angular/ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { DxCheckBoxComponent } from 'devextreme-angular';\r\nimport { BaseEndpoint } from '../endpoint/BaseEndpoint';\r\n\r\n@Component({\r\n selector: 'base-page-crud-component',\r\n template: '
'\r\n})\r\nexport abstract class BasePageCRUDComponent> extends BasePageComponent {\r\n //Mode\r\n public IsAddMode: boolean;\r\n public IsSaving: boolean = false;\r\n private IsDuplicateMode: boolean;\r\n protected EntityEntryID: number;\r\n\r\n //Overrides\r\n protected OnEntitySaved() { }\r\n protected OnEntityLoaded() { }\r\n protected OnEntityDeleted() { }\r\n protected OnEntityNew() { }\r\n protected OnEntityValidate(): boolean {\r\n return true; \r\n }\r\n protected OnEntityInitObjectName(): string {\r\n return undefined; \r\n }\r\n protected OnEntityDuplicated() { }\r\n protected OnEntityPrepareForSave() { }\r\n protected OnEntityConfirmSave(resumeSave: () => void) {\r\n resumeSave(); \r\n }\r\n protected OnIsAllowDuplicate() {\r\n return false; \r\n }\r\n protected IsAllowNavbar() {\r\n return false; \r\n }\r\n protected OnGetEndpoint(): BaseEndpointCRUD {\r\n return this.Endpoint; \r\n }\r\n\r\n // Functions validation the entity\r\n private EntityValidations: (() => Observable)[] = [];\r\n private _subscriptions: Subscription[] = [];\r\n\r\n @ViewChildren(FieldFormComponent) private Fields_V: QueryList;\r\n @ContentChildren(FieldFormComponent) private Fields_C: QueryList;\r\n protected get Fields(): FieldFormComponent[] {\r\n return Utils.CombineChildren(this.Fields_V, this.Fields_C); \r\n }\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n PageName: string,\r\n EntityType: (new () => TEntity),\r\n StateType: (new () => TState),\r\n protected Endpoint: TEndpoint,\r\n DisplayMode: EnumPageDisplayModes = EnumPageDisplayModes.Window,\r\n EntityMode: EnumPageEntitySources = EnumPageEntitySources.CRUD,\r\n ) {\r\n super(A, PageName, EntityType, StateType, DisplayMode, EntityMode);\r\n }\r\n\r\n //This is done here since before this place, ViewChildren is not initiallized\r\n //DetectChanges is called in base class\r\n override OnInitComponentFinishedInternal() {\r\n if (this.IsAddMode) this.SetFieldDefaultValues();\r\n super.OnInitComponentFinishedInternal();\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() {\r\n super.OnInitComponentFinishedAfterDetectInternal();\r\n this.SetDefaultFieldsLabels();\r\n }\r\n\r\n //Actually initialize the component\r\n override OnInitComponentInternal() {\r\n this.IsDuplicateMode = this.QueryParams?.IsDuplicate == 'true' || this.QueryParams?.IsDuplicate === true;\r\n\r\n //Perform base initialization\r\n super.OnInitComponentInternal();\r\n\r\n //Read params from route snapshot\r\n const sParam: string = this.EntityEntryID || this.A.Navigator.GetRouteParams().EntryID;\r\n\r\n //Reset flags\r\n this.IsAddMode = false;\r\n this.IsLoading = true;\r\n\r\n //Fire Onnew or OnLoad event\r\n if (sParam == 'new') {\r\n this.StartNewEntity();\r\n } else {\r\n if (+sParam > 0) {\r\n if (!this.EntityEntryID) this.EntityEntryID = +sParam;\r\n this.LoadEntity(+sParam);\r\n } else {\r\n this.UI.UnexpectedMessage('Invalid route was specified');\r\n }\r\n }\r\n\r\n if (this.OnIsAllowDuplicate() && !this.IsAddMode) {\r\n this.ContextMenuDefault.push({\r\n text: this.RC('titleDuplicate'),\r\n visible: true,\r\n onClick: this.OnDuplicateInternal.bind(this)\r\n });\r\n }\r\n\r\n this._subscriptions.push(this.A.SysEvents.Toolbar.subscribe(toolbarSettings => {\r\n if (!toolbarSettings || toolbarSettings.PageComponentName != this.ToolbarSettings.PageComponentName) return;\r\n\r\n this.SetDefaultFieldsLabels();\r\n }));\r\n }\r\n\r\n //Load an existing entity\r\n //InitEntity is called here as well since load is asynchronous event and we need \r\n //the entity in existing state in order not to have undefined references in the template\r\n protected LoadEntity(iEntryID: number) {\r\n this.InitEntity();\r\n this.SetEntity(this.EntityType, this.OnGetEndpoint().Get(iEntryID), false, () => this.ReflectEntityLoaded());\r\n }\r\n\r\n //Perform entity validation\r\n protected ValidateEntity(): Promise {\r\n if (!this.OnEntityValidate()) return new Promise((response) => response(false));\r\n\r\n return new Promise((resolve) => {\r\n const validations = this.AcceptGridChanges().concat(this.EntityValidations.map((x) => x().toPromise()));\r\n\r\n //if no grids\r\n if (!validations.length) {\r\n resolve(true);\r\n return;\r\n }\r\n\r\n //wait for all validations\r\n Promise.all(validations).then((validationResults: []) => {\r\n //if all validations true\r\n if (validationResults.filter(r => r === false).length === 0)\r\n resolve(true);\r\n else\r\n resolve(false);\r\n });\r\n });\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntityLoaded() {\r\n this.IsAddMode = false;\r\n this.OnEntityLoaded();\r\n this.NotifyEntityLoaded(this.Entity, this.EntityType);\r\n this.NotifyReloadTitle();\r\n //this.RefreshEntityOriginal()\r\n this.IsLoading = false;\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntitySaved() {\r\n this.OnEntitySaved();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, this.IsAddMode ? EnumCRUDActions.Create : EnumCRUDActions.Update);\r\n this.IsAddMode = false;\r\n this.IsSaving = false;\r\n //this.RefreshEntityOriginal();\r\n this.NotifyReloadTitle();\r\n }\r\n\r\n //Performs the life-cycle part after entity has been set to the component\r\n protected ReflectEntityDeleted() {\r\n this.OnEntityDeleted();\r\n this.NotifyEntitySaved(this.Entity, this.EntityType, EnumCRUDActions.Delete);\r\n this.NavigateBack();\r\n }\r\n\r\n //Event handler for validating and saving current entity, DON'T override it\r\n public OnSave() {\r\n this.OnEntityPrepareForSave();\r\n this.ValidateEntity().then(isValid => {\r\n if (isValid) {\r\n this.OnEntityConfirmSave(() => this.OnDoSave());\r\n } else {\r\n this.IsDuplicateMode = false;\r\n }\r\n });\r\n }\r\n\r\n //default save implementation, can be overriden\r\n protected OnDoSave() {\r\n this.IsSaving = true;\r\n this.SetEntity(this.EntityType, this.Endpoint.Save(this.Entity), true, (_) => this.ReflectEntitySaved(), (response) => {\r\n this.A.UI.StopMessage(response.ResponseMessage);\r\n this.IsSaving = false;\r\n });\r\n }\r\n\r\n OnDelete() {\r\n this.DeleteEntity();\r\n }\r\n\r\n DeleteEntity() {\r\n this.Do(this.Endpoint.Delete(this.Entity.EntryID), true, () => this.ReflectEntityDeleted());\r\n }\r\n\r\n //Create a new entity\r\n protected StartNewEntity() {\r\n this.IsAddMode = true;\r\n this.OnEntityNew();\r\n this.RefreshEntityOriginal();\r\n this.IsLoading = false;\r\n this.SubscribeOnEntityChanges();\r\n }\r\n\r\n protected override InitEntity() {\r\n\r\n //Save global entity before it will be empty in base logic\r\n let duplicatedEntity = null;\r\n\r\n if (this.IsDuplicateMode) {\r\n const currentEntity = SysGlobals.CurrentEntity as TEntity;\r\n if (currentEntity) {\r\n duplicatedEntity = Utils.MapObject(this.EntityType, currentEntity);\r\n duplicatedEntity.EntryID = -1;\r\n }\r\n }\r\n\r\n super.InitEntity();\r\n\r\n // Duplicate entity to current\r\n if (this.IsDuplicateMode && duplicatedEntity) {\r\n this.Entity = Utils.MapObject(this.EntityType, duplicatedEntity);\r\n this.OnEntityDuplicated();\r\n\r\n this.IsDuplicateMode = false;\r\n }\r\n }\r\n\r\n public SetFieldDefaultValues() {\r\n this.A.SysEvents.OnSetDefaults.emit();\r\n }\r\n\r\n //Return title with document number\r\n protected override OnInitTitle(): string {\r\n const sObjectName: string = this.GetEntityObjectName();\r\n return `${this.GetDefaultTitle()}${(sObjectName ? (' - ' + sObjectName) : '')}`;\r\n }\r\n\r\n //Return entity object name allowing overide\r\n public GetEntityObjectName(): string {\r\n const sCustomObjectName: string = this.OnEntityInitObjectName();\r\n return sCustomObjectName ? sCustomObjectName : this.GetDefaultEntityObjectName();\r\n }\r\n\r\n public override OnInitInjectableComponent(injectableComponent: BaseInjectableComponent) {\r\n // Set DocEntry in the injectable component\r\n injectableComponent.TargetDocEntry = this.EntityEntryID;\r\n // Get validation function for the entity from the injectable component\r\n this.EntityValidations.push(injectableComponent.IsValidEntity);\r\n }\r\n\r\n //Return default name for the object\r\n private GetDefaultEntityObjectName(): string {\r\n return (this.Entity != null && this.Entity.EntryID > 0 ? `${this.Entity.EntryID}` : '');\r\n }\r\n\r\n OnDuplicateInternal() {\r\n const currentRoute = this.A.Navigator.GetCurrentRouteWithoutParams();\r\n this.A.Navigator.Navigate([`/pages/${currentRoute}/new`], { IsDuplicate: true });\r\n }\r\n\r\n override OnGetHistoryInternal() {\r\n return this.Endpoint.GetHistory(this.Entity.EntryID)\r\n .pipe(\r\n tap(h => {\r\n if (!h.IsSuccess) {\r\n this.UI.StopMessage(h.ResponseMessage); \r\n } \r\n }),\r\n map(h => h.Entities)\r\n );\r\n }\r\n\r\n private _fieldsCount: number;\r\n private _fieldsNames: string[];\r\n protected override OnPropertiesChanged(): void {\r\n if (this._fieldsCount !== this.Fields.length) {\r\n const currentFieldNames = this.Fields.map(x => x.Name);\r\n if (JSON.stringify(this._fieldsNames) != JSON.stringify(currentFieldNames)) this.SetDefaultFieldsLabels();\r\n }\r\n }\r\n\r\n SetDefaultFieldsLabels() {\r\n this._fieldsNames = this.Fields.map(x => x.Name);\r\n this._fieldsCount = this.Fields.length;\r\n setTimeout(() => this.Fields.forEach(field => {\r\n if (Utils.IsEmpty(this.Entity.TypeName)) return;\r\n\r\n const control = field.GetEditorControl();\r\n const fieldLabel = this.RC(`BL.${this.Entity.TypeName}.${field.Name}`);\r\n\r\n if (control instanceof DxCheckBoxComponent) {\r\n Utils.IsEmpty(control.text) && Utils.IsEmpty(field.Label) && (control.text = fieldLabel);\r\n } else {\r\n Utils.IsEmpty(field.Label) && (field.Label = fieldLabel);\r\n }\r\n }));\r\n }\r\n\r\n override OnDestroyComponentInternal() {\r\n super.OnDestroyComponentInternal();\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._subscriptions = [];\r\n }\r\n}\r\n","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseInjectableComponent } from '@base/component/BaseInjectableComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { PageLayoutComponent } from '@ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport validationEngine from 'devextreme/ui/validation_engine';\r\nimport { Observable, Subject, Subscription, of, mergeMap } from 'rxjs';\r\nimport { ContextMenuElement, ToolbarSettings, ViewModeElement } from '../classes/BaseClasses';\r\nimport { EnumApplicationMode, EnumFilterPanelActions, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { BaseEntity, BaseEntityResponse, BaseState, HistoryChangesSet } from '../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\n\r\n@Component({\r\n selector: 'base-page-component',\r\n template: '
'\r\n})\r\nexport abstract class BasePageComponent extends BaseComponent {\r\n //Entity bindings\r\n @Input() public Entity: TEntity = {} as TEntity;\r\n public EntityOriginal: TEntity = {} as TEntity;\r\n\r\n //Flags\r\n public IsLoading: boolean;\r\n private _isDirtyEntity: boolean = false;\r\n private _isDirtyCustom: boolean = false;\r\n public OnIsDirtyDisabled() {\r\n return false;\r\n }\r\n\r\n //Primary links\r\n public ToolbarSettings: ToolbarSettings;\r\n\r\n //Major fields\r\n public QueryParams: any;\r\n public ContextMenuDefault: ContextMenuElement[] = [];\r\n protected EntityTypes: string[];\r\n\r\n //Subscriptions\r\n private onScreenSizeChanged$Subscription: Subscription;\r\n private onFilterPanel$Subscription: Subscription;\r\n private onEntityChange$Subscription: Subscription;\r\n private pageHistory$Subscription: Subscription;\r\n\r\n //Overrides\r\n protected OnInitEntity() { }\r\n protected OnInitTitle(): string {\r\n return undefined;\r\n }\r\n protected OnInitSubtitle(): string {\r\n return undefined;\r\n }\r\n protected OnInitContextMenus(): ContextMenuElement[] {\r\n return undefined;\r\n }\r\n protected OnInitViewModes(): ViewModeElement[] {\r\n return undefined;\r\n }\r\n protected OnInitDefaultViewModeID(): any {\r\n return undefined;\r\n }\r\n public OnClose() {\r\n return true;\r\n }\r\n protected OnSubmitPage() { }\r\n protected OnApplyFilter() { }\r\n protected OnClearFilter() { }\r\n protected OnReadyFilter() { }\r\n protected OnGetContextMenuTitle(): string {\r\n return '';\r\n }\r\n public OnGetFilterDescription(): string {\r\n return '';\r\n }\r\n protected OnGetPrintTitle(): string {\r\n return '';\r\n }\r\n public OnInitInjectableComponent(injectableComponent: BaseInjectableComponent) { }\r\n public OnGetHistoryCustom(): Observable {\r\n return of(undefined);\r\n }\r\n public OnGetHistoryInternal(): Observable {\r\n return of(undefined);\r\n }\r\n\r\n\r\n private _showAsWindowOnMobile: boolean;\r\n get ShowAsWindowOnMobile() {\r\n return this._showAsWindowOnMobile || this.OnShowAsWindowOnMobile();\r\n }\r\n protected OnShowAsWindowOnMobile() {\r\n return false;\r\n }\r\n\r\n @ViewChild(DxValidationGroupComponent) protected validationGroup: DxValidationGroupComponent;\r\n @ViewChild(PageLayoutComponent) protected layout: PageLayoutComponent;\r\n\r\n constructor\r\n (\r\n public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public EntityType: (new () => TEntity),\r\n StateType: (new () => TState),\r\n public DisplayMode: EnumPageDisplayModes = EnumPageDisplayModes.FullScreen,\r\n public EntityMode: EnumPageEntitySources = EnumPageEntitySources.Internal\r\n ) {\r\n super(A, ComponentName, StateType);\r\n\r\n if (this.A.Screen.IsMobile() && DisplayMode == EnumPageDisplayModes.Window && !this.ShowAsWindowOnMobile) {\r\n this.DisplayMode = EnumPageDisplayModes.BottomSheet;\r\n }\r\n this.BindHandler('NavigateBack');\r\n }\r\n\r\n public get IsDirty(): boolean {\r\n return !this.OnIsDirtyDisabled() && (this._isDirtyEntity || this._isDirtyCustom);\r\n }\r\n\r\n public SetDirty() {\r\n this._isDirtyCustom = true;\r\n }\r\n\r\n //Run initialization cycle\r\n protected override RunInitStartCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunInitStartCycle(bFromAngularEvent);\r\n }\r\n protected override RunInitFinishCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunInitFinishCycle(bFromAngularEvent);\r\n }\r\n protected override RunDestroyCycle(bFromAngularEvent: boolean) {\r\n if (this.IsRunCycle(bFromAngularEvent)) super.RunDestroyCycle(bFromAngularEvent);\r\n }\r\n private IsRunCycle(bFromAngularEvent: boolean) {\r\n return !(bFromAngularEvent && this.DisplayMode == EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n //Initialize page\r\n override OnInitComponentInternal() {\r\n super.OnInitComponentInternal();\r\n this.InitEntity();\r\n\r\n // check that it is redundant\r\n this.onScreenSizeChanged$Subscription = this.A.Screen.ScreenSize$\r\n .subscribe(() => {\r\n this.ReloadToolbar();\r\n });\r\n\r\n this.pageHistory$Subscription = this.A.RouteHistoryService.PageHistory$.subscribe((historyItem) => {\r\n if (this instanceof historyItem.Component) {\r\n historyItem.Title = this.GetTitle();\r\n historyItem.ComponentName = this.ComponentName;\r\n this.A.RouteHistoryService.UpdateHistoryItem(historyItem);\r\n }\r\n });\r\n\r\n this.onFilterPanel$Subscription = this.A.SysEvents.FilterPanel\r\n .subscribe(action => {\r\n switch (action) {\r\n case EnumFilterPanelActions.Apply:\r\n this.OnApplyFilter();\r\n break;\r\n case EnumFilterPanelActions.Clear:\r\n this.OnClearFilter();\r\n break;\r\n case EnumFilterPanelActions.Ready:\r\n this.OnReadyFilter();\r\n break;\r\n }\r\n });\r\n\r\n if (this.A.Screen.IsMobile() && this.DisplayMode == EnumPageDisplayModes.BottomSheet && !this.ShowAsWindowOnMobile) {\r\n this.m_IsDialogVisible = this.m_IsDialogRendered = true;\r\n }\r\n }\r\n\r\n override OnDestroyComponentInternal() {\r\n this.onScreenSizeChanged$Subscription && this.onScreenSizeChanged$Subscription.unsubscribe();\r\n this.onFilterPanel$Subscription && this.onFilterPanel$Subscription.unsubscribe();\r\n this.onEntityChange$Subscription && this.onEntityChange$Subscription.unsubscribe();\r\n this.pageHistory$Subscription && this.pageHistory$Subscription.unsubscribe();\r\n }\r\n\r\n override OnStartInitCycleInternal() {\r\n //Query params are not supported for dialog and bottom sheet\r\n if (this.DisplayMode == EnumPageDisplayModes.Dialog) return;\r\n //Get renamed query params\r\n this.QueryParams = this.A.Navigator.GetQueryParams(this.A.Navigator.IsCurrentRouteWindow());\r\n\r\n if (this.A.Screen.IsMobile() && this.QueryParams && this.DisplayMode === EnumPageDisplayModes.BottomSheet && this.QueryParams.ShowAsWindowOnMobile) {\r\n this.DisplayMode = EnumPageDisplayModes.Window;\r\n this._showAsWindowOnMobile = true;\r\n }\r\n }\r\n\r\n override OnInitComponentFinishedInternal() {\r\n this.InitToolbarSettings();\r\n this.NotifyReloadTitle();\r\n\r\n //if (this.PageLayout) {\r\n // const containerRef = this.PageLayout.containerRef;\r\n // const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n\r\n // SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n // if (x.TargetModuleName === this.ModuleName && x.TargetComponentName === this.ComponentName) {\r\n // // Resolve an injectable component\r\n // const componentFactory = componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n // const componentRef = containerRef.createComponent>(componentFactory);\r\n // // Set fields\r\n // componentRef.instance.TargetComponentName = this.ComponentName;\r\n // componentRef.instance.TargetAppName = this.ModuleName;\r\n // componentRef.instance.EntityType = this.EntityType;\r\n\r\n // // Handle the injectable component on high levels\r\n // this.OnInitInjectableComponent(componentRef.instance);\r\n\r\n // if (this.A.Screen.IsDesktop()) {\r\n // // Add buttons to toolbar\r\n // const buttonSettings = {\r\n // Type: 'normal',\r\n // Text: x.ButtonText,\r\n // Click: () => { componentRef.instance.BaseAction(); }\r\n // };\r\n // this.PageLayout.ToolbarButtons.push(buttonSettings);\r\n\r\n // // Give buttons settings to ths injectable component\r\n // componentRef.instance.ButtonSettings = buttonSettings;\r\n // } else {\r\n // this.ContextMenuDefault.push({\r\n // text: x.ButtonText,\r\n // onClick: () => { componentRef.instance.BaseAction(); }\r\n // });\r\n // }\r\n\r\n // }\r\n // });\r\n //}\r\n }\r\n\r\n override OnInitComponentFinishedAfterDetectInternal() {\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog) return;\r\n\r\n //Reset the validation\r\n this.ResetValidation();\r\n }\r\n\r\n public RefreshEntityOriginal() {\r\n this.EntityOriginal = Utils.MapObject(this.EntityType, this.Entity);\r\n this._isDirtyEntity = false;\r\n this._isDirtyCustom = false;\r\n }\r\n\r\n //Initialize an empty entity\r\n protected InitEntity() {\r\n if (this.EntityMode == EnumPageEntitySources.External) return;\r\n this.Entity = Utils.GetNewInstance(this.EntityType);\r\n SysGlobals.CurrentEntity = this.Entity;\r\n this.OnInitEntity();\r\n this.RefreshEntityOriginal();\r\n }\r\n\r\n //Apply a new entity to the page\r\n protected SetEntity(type: (new () => TEntity), serviceResponse: Observable>, bShowSuccessMessage: boolean = false, after?: (response: BaseEntityResponse) => void, fail?: (response: BaseEntityResponse) => void) {\r\n this.Do(serviceResponse, bShowSuccessMessage, (response: BaseEntityResponse) => {\r\n //Set entities\r\n this.Entity = Utils.MapObject(type, response.Entity);\r\n SysGlobals.CurrentEntity = this.Entity;\r\n\r\n //Save original (after event on purpose, to allow comparing with previous state)\r\n this.RefreshEntityOriginal();\r\n\r\n //subscribe on entity changes\r\n this.SubscribeOnEntityChanges();\r\n\r\n //Post-load event\r\n if (after != undefined) after(response);\r\n }, fail);\r\n }\r\n\r\n protected SubscribeOnEntityChanges() {\r\n if (this.OnIsDirtyDisabled()) return;\r\n const changed = new Subject();\r\n\r\n //add proxy for emiting changes\r\n this.Entity = Utils.DeepProxy(this.Entity, changed) as TEntity;\r\n\r\n //add subscription for handling changes\r\n this.onEntityChange$Subscription && this.onEntityChange$Subscription.unsubscribe();\r\n this.onEntityChange$Subscription = changed.subscribe((_) => {\r\n this._isDirtyEntity = !Utils.IsEquals(this.Entity, this.EntityOriginal, true);\r\n });\r\n }\r\n\r\n //Return default title for the page\r\n //If defined using menu path, use it. \r\n //If not, fallback to component name\r\n protected GetDefaultTitle(): string {\r\n let sTitle: string;\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog) sTitle = this.RC(`$$Pages.${SysGlobals.MenuPath}`);\r\n if (sTitle == undefined) sTitle = this.RC(`Pages.${this.ComponentStateName}`);\r\n return sTitle;\r\n }\r\n\r\n //Return the title for the component\r\n public GetTitle(): string {\r\n const sCustomTitle: string = this.OnInitTitle();\r\n const sFinalTitle: string = sCustomTitle ? sCustomTitle : this.GetDefaultTitle();\r\n return sFinalTitle;\r\n }\r\n\r\n public GetSubtitle(): string {\r\n const customSubtitle = this.OnInitSubtitle();\r\n return customSubtitle || '';\r\n }\r\n\r\n //Return context menu to the toolbar\r\n public GetContextMenus(): ContextMenuElement[] {\r\n let contextMenu = this.OnInitContextMenus();\r\n if (contextMenu === undefined) {\r\n contextMenu = [];\r\n }\r\n\r\n contextMenu = this.ContextMenuDefault.concat(contextMenu);\r\n\r\n return contextMenu;\r\n }\r\n\r\n\r\n //Return context menu to the toolbar\r\n public GetViewModes(): ViewModeElement[] {\r\n return this.OnInitViewModes();\r\n }\r\n\r\n public GetDefaultViewModeID(): any {\r\n\r\n return this.OnInitDefaultViewModeID();\r\n }\r\n\r\n //Signal toolbar to reload the title\r\n protected NotifyReloadTitle() {\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n protected RepaintToolbar() {\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n protected ReloadToolbar() {\r\n this.InitToolbarSettings();\r\n\r\n this.A.SysEvents.ReloadToolbar(this.ToolbarSettings);\r\n }\r\n\r\n InitToolbarSettings() {\r\n this.ToolbarSettings = new ToolbarSettings;\r\n this.ToolbarSettings.BackButtonClick = this.NavigateBack;\r\n this.ToolbarSettings.PageComponentName = this.ComponentName;\r\n this.ToolbarSettings.Page = this;\r\n this.ToolbarSettings.OnGetContextMenuItems = () => this.GetContextMenus();\r\n this.ToolbarSettings.ContextMenuTitle = this.OnGetContextMenuTitle();\r\n this.ToolbarSettings.ViewModes = this.GetViewModes();\r\n this.ToolbarSettings.CloseButtonClick = () => this.ClosePage();\r\n\r\n this.SetToolbarTitle();\r\n this.SetToolbarButtonsVisibility();\r\n\r\n const customToolbarSettings = this.OnGetToolbarSettings();\r\n if (customToolbarSettings) this.ToolbarSettings = { ...this.ToolbarSettings, ...customToolbarSettings };\r\n }\r\n\r\n protected SetToolbarTitle() {\r\n if (this.ToolbarSettings == undefined) return;\r\n this.ToolbarSettings.Title = this.GetTitle();\r\n this.ToolbarSettings.Subtitle = this.GetSubtitle();\r\n\r\n this.A.RouteHistoryService.SetHistoryItemTitle(this.ComponentName, this.ToolbarSettings.Title);\r\n }\r\n\r\n protected SetToolbarButtonsVisibility() {\r\n if (this.ToolbarSettings == undefined) return;\r\n\r\n const customToolbarSettings = this.OnGetToolbarSettings();\r\n this.ToolbarSettings.ShowMenuButton = customToolbarSettings?.ShowMenuButton != null\r\n ? customToolbarSettings.ShowMenuButton\r\n : this.A.Screen.IsMobile() && this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard && this.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n this.ToolbarSettings.ShowBackButton = customToolbarSettings?.ShowBackButton != null\r\n ? customToolbarSettings.ShowBackButton\r\n : !this.A.AppConfigService.AppConfig.ShowBreadcrumb() && (\r\n (this.IsShowAsFullScreen() && this.A.RouteHistoryService.HistoryLength > 1) ||\r\n (this.DisplayMode == EnumPageDisplayModes.Window && this.A.RouteHistoryService.HasHistoryForWindow())\r\n );\r\n this.ToolbarSettings.ShowCloseButton = customToolbarSettings?.ShowCloseButton != null\r\n ? customToolbarSettings.ShowCloseButton\r\n : !this.IsShowAsFullScreen() && (this.DisplayMode == EnumPageDisplayModes.Window || this.DisplayMode == EnumPageDisplayModes.Dialog)\r\n || this.DisplayMode == EnumPageDisplayModes.BottomSheet;\r\n this.ToolbarSettings.IsAllowNotifications = customToolbarSettings?.IsAllowNotifications != null\r\n ? customToolbarSettings.IsAllowNotifications\r\n : this.A.AppConfigService.AppConfig.IsAllowNotifications && this.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n }\r\n\r\n protected OnGetToolbarSettings() {\r\n return undefined;\r\n }\r\n\r\n protected override DoValidatorReset(): boolean {\r\n return !this.Entity || !this.Entity.EntryID;\r\n }\r\n\r\n //*IsDialogRendered is to prevent *ngIf from removing the content and causes unexplainable errors\r\n private m_IsDialogRendered: boolean;\r\n public get IsDialogRendered(): boolean {\r\n return this.m_IsDialogRendered;\r\n }\r\n\r\n //This is an indication for the template whether it is visible at the moment\r\n private m_IsDialogVisible: boolean;\r\n public get IsDialogVisible(): boolean {\r\n return this.m_IsDialogVisible;\r\n }\r\n\r\n private _showDialogAsBottomSheet: boolean;\r\n public get ShowDialogAsBottomSheet(): boolean {\r\n return this._showDialogAsBottomSheet;\r\n }\r\n\r\n //Must be executed to initialize the dialog, before setting any values to it\r\n //The reason we have this is that because the same dialog might be reused many times\r\n public InitDialog(InitialEntity?: TEntity) {\r\n if (InitialEntity != undefined) this.Entity = InitialEntity;\r\n this.RunInitStartCycle(false);\r\n this.RunInitFinishCycle(false);\r\n }\r\n\r\n //Show the component as a dialog\r\n private m_DialogCompletedHandler: (e: any) => void;\r\n private m_DialogCanceledHandler: () => void;\r\n private ShowDialog(DialogCompletedHandler: (e: any) => void, DialogCanceledHandler?: () => void) {\r\n //Check\r\n if (this.DisplayMode != EnumPageDisplayModes.Dialog && this.DisplayMode != EnumPageDisplayModes.BottomSheet)\r\n throw new Error('Your page is not a dialog, use navigation methods instead');\r\n\r\n //Reload title since it may be dependant on state that was loaded so far\r\n this.NotifyReloadTitle();\r\n\r\n //Set visibility flags and handler\r\n this.m_IsDialogVisible = true;\r\n this.m_IsDialogRendered = true;\r\n this.m_DialogCompletedHandler = DialogCompletedHandler;\r\n this.m_DialogCanceledHandler = DialogCanceledHandler;\r\n }\r\n\r\n //Combine both methods for cases when no initial state data has to be set\r\n public ShowDialogShort(\r\n DialogCompletedHandler: (e: any) => void,\r\n DialogCanceledHandler?: () => void,\r\n showAsUsualOnMobile?: boolean,\r\n initialEntity?: TEntity | any) {\r\n if (this.A.Screen.IsMobile() && !showAsUsualOnMobile) {\r\n this._showDialogAsBottomSheet = true;\r\n }\r\n\r\n this.InitDialog(initialEntity);\r\n this.ShowDialog(DialogCompletedHandler, DialogCanceledHandler);\r\n }\r\n\r\n public ShowBottomSheet(\r\n DialogCompletedHandler: (e: any) => void,\r\n DialogCanceledHandler?: () => void,\r\n initialEntity?: TEntity | any) {\r\n\r\n this._showDialogAsBottomSheet = true;\r\n this.InitDialog(initialEntity);\r\n this.ShowDialog(DialogCompletedHandler, DialogCanceledHandler);\r\n }\r\n\r\n //Close dialog and raise the callback to parent\r\n public CloseDialogWithSuccess(e?: any) {\r\n this.HideDialog();\r\n if (this.m_DialogCompletedHandler) this.m_DialogCompletedHandler(e);\r\n }\r\n\r\n //Close dialog without any event\r\n public CloseDialogWithCancel() {\r\n this.HideDialog();\r\n if (this.m_DialogCanceledHandler) this.m_DialogCanceledHandler();\r\n }\r\n\r\n //Hide the dialog\r\n private HideDialog() {\r\n this.State = Utils.GetNewInstance(this.StateType);\r\n\r\n //if (this.validationGroup && this.validationGroup.instance) {\r\n // const result = validationEngine.validateGroup(this.validationGroup.instance);\r\n // result.isValid && this.validationGroup.instance.reset();\r\n //}\r\n\r\n this.m_IsDialogVisible = false;\r\n this.RunDestroyCycle(false);\r\n }\r\n\r\n //public ScrollToTop() {\r\n // this.PageLayout.scroll.instance.scrollTo(0);\r\n //}\r\n\r\n public IsShowAsFullScreen(): boolean {\r\n //Screen and current page sizes\r\n const bMobile: boolean = this.A.Screen.IsMobile();\r\n\r\n //No need for special classes if showing full screen, unless this is a mobile device\r\n if (this.DisplayMode == EnumPageDisplayModes.FullScreen) return true;\r\n\r\n //For window - show full screen or in window according to screen size. Use window dimensions\r\n if (this.DisplayMode == EnumPageDisplayModes.Window) return bMobile ? true : false;\r\n\r\n //For dialog - show always in partial view\r\n if (this.DisplayMode == EnumPageDisplayModes.Dialog) return false;//bMobile ? true : false;\r\n }\r\n\r\n //Closes page, whether dialog or window\r\n public ClosePage() {\r\n if (this.OnClose()) {\r\n switch (this.DisplayMode) {\r\n case EnumPageDisplayModes.Window:\r\n this.A.RouteHistoryService.CloseWindow();\r\n return;\r\n case EnumPageDisplayModes.Dialog:\r\n this.CloseDialogWithCancel();\r\n return;\r\n case EnumPageDisplayModes.BottomSheet:\r\n if (this._showDialogAsBottomSheet) {\r\n this._showDialogAsBottomSheet = false;\r\n this.CloseDialogWithCancel();\r\n } else {\r\n this.A.RouteHistoryService.CloseWindow();\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.A.AppConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n public get ClientHeight(): number {\r\n return this.GetLastPageBodyElement()?.getBoundingClientRect()?.height || 0;\r\n }\r\n\r\n public get ClientWidth(): number {\r\n return this.GetLastPageBodyElement()?.getBoundingClientRect()?.width || 0;\r\n }\r\n\r\n private GetLastPageBodyElement() {\r\n const pageBodyElements = document.querySelectorAll(`.${this.ComponentName} .page-body`);\r\n return pageBodyElements && pageBodyElements.length > 0 ? pageBodyElements[pageBodyElements.length - 1] : null;\r\n }\r\n\r\n public ShowPreview(pdfData: string | Blob, fileName: string) {\r\n this.A.SysEvents.SetPagePreviewState(this.ComponentName, true, pdfData, fileName);\r\n }\r\n\r\n public HidePreview() {\r\n this.A.SysEvents.SetPagePreviewState(this.ComponentName, false);\r\n }\r\n\r\n public GetHistory(): Observable {\r\n return this.OnGetHistoryCustom().pipe(\r\n mergeMap(h => {\r\n if (!h) {\r\n return this.OnGetHistoryInternal();\r\n }\r\n return of(h);\r\n }));\r\n }\r\n}\r\n","import { ChangeDetectorRef, Injectable, Optional } from \"@angular/core\";\r\nimport { FrameworkService } from \"@core/framework/framework.service\";\r\nimport { NavigatorService } from \"@core/framework/navigator.service\";\r\nimport { SysEventsService } from \"@core/framework/sysevents.service\";\r\nimport { SysEnumsService } from \"@core/framework/sysenums.enum\";\r\nimport { GeneralEndpoint } from \"@core/endpoints/general.endpoint\";\r\nimport { GenericListEndpoint } from \"@core/endpoints/genericlist.endpoint\";\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { CustomizationService } from '@core/framework/customization-service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { EntityService } from '@m4u-angular/core/framework/entity.service';\r\n\r\n@Injectable()\r\nexport class ServiceBagService {\r\n Enums: any = {};\r\n constructor(\r\n public Framework: FrameworkService,\r\n @Optional() public ChangeDetector: ChangeDetectorRef,\r\n public GenericListEndpoint: GenericListEndpoint,\r\n public SysEnums: SysEnumsService,\r\n public Session: SessionService,\r\n public Navigator: NavigatorService,\r\n public SysEvents: SysEventsService,\r\n public GeneralEndpoint: GeneralEndpoint,\r\n public ResourcesService: ResourcesService,\r\n public AppConfigService: AppConfigService,\r\n public CustomizationService: CustomizationService,\r\n public Screen: ScreenService,\r\n public UI: UiService,\r\n public RouteHistoryService: RouteHistoryService,\r\n public EntityService: EntityService) {\r\n this.Enums = this.AppConfigService.AppConfig.Enums;\r\n }\r\n\r\n}\r\n\r\nexport const ServiceBagServices =\r\n [\r\n ServiceBagService,\r\n NavigatorService\r\n ]\r\n","import { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { IBaseModuleComponent } from '../component/IBaseComponent';\r\nimport { Inject, InjectionToken } from \"@angular/core\";\r\n\r\nexport const EMPTY_STRING_TOKEN = new InjectionToken('name');\r\n\r\nexport abstract class BaseEndpoint implements IBaseModuleComponent {\r\n ControllerName: string;\r\n\r\n ModuleName: string = AppInjector.get(AppConfigService).getModuleNameByInstance(this);\r\n\r\n constructor(\r\n @Inject(EMPTY_STRING_TOKEN) ControllerName: string,\r\n protected api: APIGatewayService) {\r\n this.ControllerName = `${this.ModuleName}/${ControllerName}`;\r\n }\r\n\r\n GetControllerURL(): string {\r\n return this.api.GetAPIURL() + this.ControllerName;\r\n }\r\n\r\n}","import { BaseEndpoint } from \"./BaseEndpoint\";\r\nimport { BaseEntity, BaseEntitiesResponse, BaseEntityResponse, BaseResponse, BaseDataResponse, HistoryChangesSet } from \"../entities/BaseEntities\";\r\nimport { APIGatewayService } from \"@core/gateway/APIGateway.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { DataLoadOptions } from \"../datalayer/DataLoadOptions\";\r\n\r\n\r\nexport abstract class BaseEndpointCRUD extends BaseEndpoint {\r\n constructor(ControllerName: string, protected override api: APIGatewayService) {\r\n super(ControllerName, api);\r\n }\r\n\r\n public Get(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'Get', { EntryID: EntryID }); }\r\n public GetShallow(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetShallow', { EntryID: EntryID }); }\r\n public GetList(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'List', options ? options.GetLoadOptions() : undefined); }\r\n public GetListShallow(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'ListShallow', options ? options.GetLoadOptions() : undefined); }\r\n public Save(Entity: TEntity): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'Save', Entity); }\r\n public SaveBatch(Entities: TEntity[]): Observable> { return this.api.ExecutePostAction(this.ControllerName, 'SaveBatch', Entities as any); }\r\n public Delete(EntryID: number): Observable { return this.api.ExecuteDeleteAction(this.ControllerName, 'Delete', { EntryID: EntryID }); }\r\n public DeleteBatch(EntryIDs: number[]): Observable { return this.api.ExecuteDeleteAction(this.ControllerName, 'DeleteBatch', { EntryIDs: EntryIDs }); }\r\n public IsExists(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsExists', { EntryID: EntryID }); }\r\n public IsDeletable(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsDeletable', { EntryID: EntryID }); }\r\n public IsEditable(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'IsEditable', { EntryID: EntryID }); }\r\n public Count(options?: DataLoadOptions): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'Count', options ? options.GetLoadOptions() : undefined); }\r\n public GetHistory(EntryID: number): Observable> { return this.api.ExecuteGetAction(this.ControllerName, 'GetHistory', { EntryID: EntryID }); }\r\n\r\n}\r\n","import {\r\n EnumCheckCredentialsResult,\r\n EnumInfoUTypes,\r\n EnumLoginSecureKeyTypes,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\r\n HistoryEventTypesEnum,\r\n EnumSystemOptionDataTypes, EnumUserLoginStatus, EnumLocalizationTypes\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport class BaseState { }\r\nexport class BaseEntity {\r\n EntryID: number;\r\n TypeName?: string;\r\n}\r\n\r\nexport class BaseResponse {\r\n IsSuccess: boolean;\r\n ResponseCode: number;\r\n ResponseMessage: string;\r\n ResponseExtendedMessage: string;\r\n}\r\n\r\nexport class KeyValueEntity extends BaseEntity {\r\n Key: string;\r\n Value: string;\r\n}\r\n\r\nexport class GenericListEntity extends BaseEntity {\r\n constructor(\r\n public Value?: string,\r\n public Text?: string,\r\n public Description?: string,\r\n public SortOrder?: number\r\n ) { super(); }\r\n}\r\n\r\n\r\n//Response types prototypes - for single entity, list of entities, and single data field response\r\nexport class BaseEntityResponse extends BaseResponse { Entity: TEntity; }\r\nexport class BaseEntitiesResponse extends BaseResponse { Entities: TEntity[] }\r\nexport class BaseDataResponse extends BaseResponse { Data: TData; }\r\n\r\nexport class CredentialsCheckResponse {\r\n public CredentialID: number;\r\n public CredentialType: number;\r\n public CheckResult: EnumCheckCredentialsResult;\r\n public CheckResultMessage: string;\r\n public UserName: string;\r\n}\r\n\r\nexport class SessionEntity extends BaseEntity {\r\n CheckResult: EnumCheckCredentialsResult\r\n CheckResultMessage: string\r\n SessionID: string\r\n CredentialID: number\r\n DisplayUserName: string\r\n DisplayUserDescription: string\r\n UserInfo: any;\r\n}\r\n\r\nexport class CredentialActivityStatus extends BaseEntity {\r\n DisplayUserName: string;\r\n LastUseDate: Date;\r\n IsOnline: boolean;\r\n}\r\n\r\n\r\nexport class LoginParams extends BaseEntity {\r\n public UserName: string\r\n public SecureKey: string\r\n public SecureKeyType: EnumLoginSecureKeyTypes;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Language: string;\r\n public Password: string;\r\n public NewPassword: string;\r\n public TaxNumber: string;\r\n}\r\n\r\nexport class PasswordRecoveryParams extends BaseEntity {\r\n public UserName: string\r\n public Address: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Token: string;\r\n public Language: string;\r\n public NewPassword: string;\r\n\r\n}\r\n\r\nexport class CompanyInfo extends BaseEntity {\r\n public DecimalSeparator: string\r\n public ThousandsSeparator: string\r\n\r\n public NumberGeneral: string\r\n public NumberPercent: string\r\n public NumberPrice: string\r\n public NumberQuantity: string\r\n public NumberRate: string\r\n public NumberSum: string\r\n\r\n public DateFormatShort: string\r\n public DateFormatLong: string\r\n public DateFormatCompact: string\r\n public DateFormatFull: string\r\n public TimeFormatLong: string\r\n public TimeFormatShort: string\r\n public DefaultVatGroupCode: string;\r\n\r\n public CurrencyLocal: string\r\n public CurrencySystem: string\r\n\r\n public VatPercent: number;\r\n public IsVatLiable: boolean;\r\n\r\n public ServerVersion: string;\r\n public ClientVersion: string;\r\n public SBOVersion: string;\r\n public LocalizationType: EnumLocalizationTypes;\r\n}\r\n\r\nexport class ClientException extends BaseEntity {\r\n Type: string\r\n Message: string\r\n StackTrace: string\r\n\r\n Device: string;\r\n DeviceType: string\r\n Browser: string\r\n BrowserVersion: string\r\n OS: string\r\n OSVersion: string\r\n}\r\n\r\nexport class DataGroupInfo extends BaseEntity {\r\n constructor(\r\n public Name: string,\r\n public Value: string,\r\n public TotalRows = 0,\r\n ) { super(); }\r\n}\r\n\r\nexport class ItemPriceInfo extends BaseEntity {\r\n Price: number;\r\n DiscountPercent: number;\r\n Currency: string;\r\n}\r\n\r\n\r\nexport class Media extends BaseEntity {\r\n ImageBase64: string;\r\n ImageBytes: number[];\r\n VideoBytes: number[];\r\n VideoDataUrl: any;\r\n}\r\n\r\nexport class WebAPICredential extends BaseEntity {\r\n UserName: string;\r\n Password: string;\r\n Type: number;\r\n IsActive: boolean = true;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods;\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class WebAPIAllowedIP extends BaseEntity {\r\n CredentialID: number;\r\n IPRangeStart: string;\r\n IPRangeEnd: string;\r\n}\r\n\r\nexport class WebAPICredentialInfo extends BaseEntity {\r\n UserName: string;\r\n Type: number;\r\n IsActive: boolean;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n IsLockedOut: boolean;\r\n IsSupportedUserWelcome: boolean;\r\n\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class CredentialExternalInfo extends BaseEntity {\r\n DisplayUserName: string;\r\n DisplayUserDescription: string;\r\n Phone: string;\r\n Email: string;\r\n AdditionalInfo1: string;\r\n AdditionalInfo2: string;\r\n AdditionalInfo3: string;\r\n AdditionalInfo4: string;\r\n AdditionalInfo5: string;\r\n IsActive: true;\r\n Type: number;\r\n}\r\n\r\nexport class AttachedFile extends BaseEntity {\r\n public Name: string;\r\n public Extension: string;\r\n public NewFile: File;\r\n public Size: number;\r\n public IconStyle: string;\r\n public IsDisplayedAsImage: boolean;\r\n public Date: Date;\r\n}\r\n\r\nexport class UploadFile extends BaseEntity {\r\n public Name: string;\r\n public Type: string;\r\n public Data: any;\r\n public Buffer: ArrayBuffer;\r\n public File: File;\r\n}\r\n\r\nexport class CommonSettingEntity extends BaseEntity {\r\n public Name: string;\r\n public Description: string;\r\n}\r\n\r\nexport class Notification extends BaseEntity {\r\n public Subject: string;\r\n public Body: string;\r\n public CreatedBy: number;\r\n public CreatedDate: Date;\r\n public FromAddress: string;\r\n public FromDisplayAddress: string;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Status: EnumNotificationStatuses;\r\n public Address: string;\r\n public CCAddress: string;\r\n public BccAddress: string;\r\n public ExternalReferenceID: any;\r\n public NotificationTemplateID: number;\r\n public FailureDescription: string;\r\n public RelatedObjectType: string;\r\n public RelatedObjectID: number;\r\n public ReadDate: Date;\r\n public IsRead: boolean;\r\n public TargetCredentialID: number;\r\n public IsAutomatic: boolean;\r\n public PopupShowStatus: EnumPopupShowStatuses;\r\n public TargetCredentialName: string;\r\n public CreatedByName: string;\r\n public NotificationTemplateName: string;\r\n}\r\n\r\nexport class NotificationListParams extends BaseEntity {\r\n public Address: string;\r\n public UntilDate: Date;\r\n public FromDate: Date;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public Template: string;\r\n}\r\n\r\nexport class NotificationServer extends BaseEntity {\r\n public SMTPServer: string;\r\n public SMTPPort: number;\r\n public SMTPUserName: string;\r\n public SMTPPassword: string;\r\n public SMTPUseSSL: boolean;\r\n public SMSEndpoint: string;\r\n public SMSUserName: string;\r\n public SMSPassword: string;\r\n public SMSToken: string;\r\n public SMSEndPointIsInforU: EnumInfoUTypes;\r\n}\r\n\r\nexport class NotificationTemplate extends BaseEntity {\r\n public Name: string;\r\n public Language: string;\r\n public Subject: string;\r\n public HTMLBody: string;\r\n public FromEmailDisplay: string;\r\n public FromEmail: string;\r\n public FromPhone: string;\r\n public SMSBody: string;\r\n public PushMessageBody: string;\r\n public NotificationServerID: number;\r\n public IsUserCustomTemplate: boolean;\r\n}\r\n\r\nexport class PushMessageListParams extends BaseEntity {\r\n public IsLoadAllNotifications: boolean;\r\n}\r\n\r\nexport class NotificationTestParams extends BaseEntity {\r\n public NotificationServerID: number;\r\n public DeliveryOption: EnumNotificationDeliveryOptions;\r\n public FromAddress: string;\r\n public Address: string;\r\n}\r\n\r\nexport class CredentialLoginParams extends BaseEntity {\r\n public DateFrom: Date;\r\n public DateTo: Date;\r\n public Status: EnumUserLoginStatus;\r\n public CredentialType: number;\r\n public CredentialID: number;\r\n}\r\n\r\nexport class CredentialLogin extends BaseEntity {\r\n public ClientUserName: string;\r\n public CredentialType: number;\r\n public StartDate: Date;\r\n public LastUseDate: Date;\r\n public Status: EnumUserLoginStatus;\r\n public ClientIPAddress: string;\r\n public ImpersonatedByID: number;\r\n public CredentialID: number;\r\n}\r\n\r\nexport class CredentialCheckResponse extends BaseEntity {\r\n public IsExists: boolean;\r\n public HasPhone: boolean;\r\n public HasEmail: boolean;\r\n}\r\n\r\nexport class SaveCredentialsParams extends BaseEntity {\r\n public CredentialID: number;\r\n public UserName: string;\r\n public Password: string;\r\n public Type: number;\r\n public IsActive: boolean;\r\n public MFAMethod: EnumMFAMethods;\r\n public IsRestrictByIP: boolean;\r\n public IsExcludeFromMFA: boolean;\r\n public WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n}\r\n\r\nexport class SystemOptionEntity extends BaseEntity {\r\n public OptionName: string;\r\n public Value: string;\r\n public SectionInfo: string;\r\n public IsServer: boolean;\r\n public IsClient: boolean;\r\n public ModuleName: string;\r\n\r\n public SectionIndex: number;\r\n public ValueNumber: number;\r\n public ValueBoolean: boolean;\r\n public IsDeleted: boolean;\r\n public DataType: EnumSystemOptionDataTypes;\r\n public DefaultIsClient: boolean;\r\n}\r\n\r\nexport class CredentialType extends BaseEntity {\r\n public Value: number;\r\n public Text: string;\r\n}\r\n\r\nexport class WebAPIRequestListParams extends BaseEntity {\r\n CredentialID: number;\r\n ModuleName: string\r\n Controller: string;\r\n Action: string;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n}\r\n\r\nexport class WebAPIRequest extends BaseEntity {\r\n SessionID: number;\r\n DateTime: Date;\r\n Duration: number;\r\n Controller: string;\r\n Action: string;\r\n ModuleName: string;\r\n Method: string;\r\n QueryString: string;\r\n Body: string;\r\n Response: string;\r\n StatusCode: number;\r\n}\r\n\r\nexport class HistoryChangesSet extends BaseEntity {\r\n public CreatedDate: Date;\r\n public CreatedBy: number;\r\n public Changeset: number;\r\n public CredentialName: string;\r\n public HistoryChanges: HistoryChangeDetails[];\r\n public HistoryLineChanges: HistoryChangeDetails[];\r\n}\r\n\r\nexport class HistoryChangeDetails extends BaseEntity {\r\n public Action: HistoryEventTypesEnum;\r\n public FieldName: string;\r\n public NewValue: string;\r\n public OldValue: string;\r\n public EntityType: string;\r\n public EntityEntryID: number;\r\n public EntityLineID: number;\r\n public Name: string;\r\n}\r\n\r\nexport class WebAPILoginResponse extends BaseEntity {\r\n public CheckResult: EnumCheckCredentialsResult;\r\n public CheckResultMessage: string;\r\n public SessionID: string;\r\n public CredentialID: number;\r\n public CredentialType: number;\r\n public DisplayUserName: string;\r\n public DisplayUserDescription: string;\r\n public UserInfo: any[] = [];\r\n}\r\n\r\nexport class SystemCredentialInfo extends BaseEntity {\r\n UserName: string;\r\n Type: number;\r\n IsPendingWelcome: boolean;\r\n MFAMethod: EnumMFAMethods;\r\n IsRestrictByIP: boolean;\r\n IsExcludeFromMFA: boolean;\r\n IsLockedOut: boolean;\r\n IsSupportedUserWelcome: boolean;\r\n WebAPIAllowedIPs: WebAPIAllowedIP[];\r\n\r\n DisplayUserName: string;\r\n DisplayUserDescription: string;\r\n Phone: string;\r\n Email: string;\r\n AdditionalInfo1: string;\r\n AdditionalInfo2: string;\r\n AdditionalInfo3: string;\r\n AdditionalInfo4: string;\r\n AdditionalInfo5: string;\r\n IsActive: boolean;\r\n LastUseDate: Date;\r\n}\r\n\r\nexport class AdditionalInfoMetadata {\r\n Caption: string;\r\n}\r\n\r\nexport class CredentialAdditionalInfoMetadata extends BaseEntity {\r\n AdditionalInfo1: AdditionalInfoMetadata;\r\n AdditionalInfo2: AdditionalInfoMetadata;\r\n AdditionalInfo3: AdditionalInfoMetadata;\r\n AdditionalInfo4: AdditionalInfoMetadata;\r\n AdditionalInfo5: AdditionalInfoMetadata;\r\n}\r\n\r\nexport class CreateCredentialsParams extends BaseEntity {\r\n public DeliveryOption: number;\r\n public UserCreationOption: number;\r\n public Language: string;\r\n public CredentialsForCreation: CredentialExternalInfo[];\r\n}\r\n\r\nexport class SystemCredentialParams extends BaseEntity {\r\n public CredentialType: number;\r\n public CredentialID: number;\r\n public IsActive: boolean;\r\n public IsPendingWelcome: boolean;\r\n public IsLockedOut: boolean;\r\n}\r\n\r\nexport class DataEditorView extends BaseEntity {\r\n public ObjectName: string;\r\n public DViewsDuration: number;\r\n public XViewsDuration: number;\r\n public DViewsDBName: string;\r\n public XViewsBName: string;\r\n public IsValid: boolean;\r\n public IsOverriden: boolean;\r\n public Error?: string;\r\n}\r\n\r\nexport class RemoteRequest extends BaseEntity {\r\n SessionID: number;\r\n DateTime: Date;\r\n Duration: number;\r\n Controller: string;\r\n Action: string;\r\n ModuleName: string;\r\n Method: string;\r\n QueryString: string;\r\n Body: string;\r\n Response: string;\r\n StatusCode: number;\r\n}\r\n\r\nexport class RemoteRequestListParams extends BaseEntity {\r\n Controllers?: string[];\r\n Actions?: string[];\r\n Methods?: string[];\r\n Statuses?: number[];\r\n public DateFrom: Date;\r\n public DateTo: Date;\r\n}\r\n","import { RC, ResourcesService } from '@core/framework/resources.service';\r\nimport { EnumGridModes } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { exportDataGrid } from 'devextreme/excel_exporter';\r\nimport { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter';\r\nimport { Format, formatDate, formatNumber, parseNumber } from 'devextreme/localization';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { Workbook } from 'exceljs';\r\nimport saveAs from 'file-saver';\r\nimport { Subscription } from 'rxjs';\r\nimport { BaseComponent } from '../component/BaseComponent';\r\nimport { BaseEntity, BaseState } from '../entities/BaseEntities';\r\nimport { IBaseComponent, IBaseModuleComponent } from './../component/IBaseComponent';\r\nimport { jsPDF } from 'jspdf';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nexport class GridCellEditHandlers {\r\n constructor(\r\n public BeforeEdit?: string,\r\n public AfterEdit?: string,\r\n public AfterEditPromise?: string,\r\n public AfterEditAsync?: string\r\n ) {}\r\n}\r\n\r\nexport class GridCellEditParams {\r\n constructor(\r\n public value: any,\r\n public rowData: any,\r\n public changes: any,\r\n public rowIndex: number\r\n ) {}\r\n}\r\n\r\nexport class GridCellEditAsyncParams {\r\n constructor(public value: any, public rowData: any, public rowIndex: number) {}\r\n}\r\n\r\nexport class GridCellOptionsParams {\r\n constructor(public value: any, public rowData: any, public rowIndex: number) {}\r\n}\r\n\r\nexport class GridCellOptionHandlers {\r\n public that?: any;\r\n constructor(public QueryEditCell?: string, public QueryShowCell?: string) {}\r\n}\r\n\r\nclass DefferedPromise extends Promise {\r\n constructor() {\r\n let resolve, reject;\r\n super((_resolve, _reject) => {\r\n resolve = _resolve;\r\n reject = _reject;\r\n });\r\n this.Resolve = resolve;\r\n this.Reject = reject;\r\n }\r\n Resolve: (value?: T | PromiseLike) => void;\r\n Reject: (reason?: any) => void;\r\n}\r\n\r\nexport class GridExtender {\r\n public get gridAny(): any {\r\n return this.grid;\r\n }\r\n public get CurrentRowIndex(): number {\r\n return this.currentRowIndex;\r\n }\r\n\r\n public constructor(\r\n grid: DxDataGridComponent,\r\n mode: EnumGridModes,\r\n allowCustomization: boolean,\r\n allowAdvancedFilters: boolean,\r\n component: IBaseComponent,\r\n entityTypeName: string\r\n ) {\r\n this.grid = grid;\r\n this.Mode = mode;\r\n this.AllowCustomization = allowCustomization;\r\n this.AllowAdvancedFilters = allowAdvancedFilters;\r\n this.Component = component;\r\n this.EntityTypeName = entityTypeName;\r\n this.isValid.Resolve(true);\r\n }\r\n public get CurrentEntityTypeName() {\r\n if (!this._entityTypeName) {\r\n if (!Utils.IsEmpty(this.EntityTypeName)) {\r\n this._entityTypeName = this.EntityTypeName;\r\n } else {\r\n const entityType = (this.Component as any)?.EntityType;\r\n if (!entityType) {\r\n return;\r\n }\r\n\r\n const entityInstance = new entityType();\r\n this._entityTypeName = entityInstance && (entityInstance as BaseEntity).TypeName;\r\n }\r\n }\r\n return this._entityTypeName;\r\n }\r\n // Subscribtions\r\n private subscribtions: Subscription[] = [];\r\n\r\n // Other\r\n private MapEventsEdit: { [ColumnName: string]: GridCellEditHandlers } = {};\r\n private MapEventsOptions: { [ColumnName: string]: GridCellOptionHandlers } = {};\r\n private currentRowIndex: number;\r\n public Mode: EnumGridModes;\r\n private AllowCustomization: boolean;\r\n private AllowAdvancedFilters: boolean;\r\n private BeforePrintDataGridOptions: any;\r\n private BeforePrintRefs: {\r\n body: any[];\r\n gridParent: HTMLElement | null;\r\n gridEl: HTMLElement | null;\r\n } = {\r\n body: [],\r\n gridEl: null,\r\n gridParent: null\r\n };\r\n\r\n private Component: IBaseComponent;\r\n private isValid: DefferedPromise = new DefferedPromise();\r\n public IsAutoResizingEnabled = true; // auto grid resizing\r\n public EntityTypeName: string;\r\n\r\n // Link main objects\r\n public grid: DxDataGridComponent;\r\n\r\n private _resourceService = AppInjector.get(ResourcesService);\r\n private _appConfigService = AppInjector.get(AppConfigService);\r\n\r\n private _entityTypeName: string;\r\n\r\n // InitCompactMode(compactModeValue: boolean) {\r\n // const compactModeClass = 'grid-compact-mode';\r\n // const gridClassList = this.grid.instance.element().classList;\r\n // compactModeValue ? gridClassList.add(compactModeClass) : gridClassList.remove(compactModeClass);\r\n // this.grid.instance.repaint();\r\n // }\r\n\r\n // Shortcut for grid editing\r\n public Get(ColumnName: string, RowIndex: number): any {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n return this.grid.instance.cellValue(RowIndex, ColumnName);\r\n }\r\n }\r\n\r\n // Shortcut for grid editing\r\n public Set(ColumnName: string, RowIndex: number, oValue: any) {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n this.grid.instance.cellValue(RowIndex, ColumnName, oValue);\r\n }\r\n }\r\n\r\n public AcceptChanges() {\r\n this.grid.instance.saveEditData();\r\n }\r\n\r\n public HasEditData() {\r\n return this.grid.instance.hasEditData();\r\n }\r\n\r\n public CancelEditData() {\r\n this.grid.instance.cancelEditData();\r\n }\r\n\r\n public SetGridFilter(ColumnName: string, ComparisonOperator: string, oValue: any) {\r\n this.grid.instance.filter([ColumnName, ComparisonOperator, oValue]);\r\n }\r\n\r\n public Refresh() {\r\n return this.grid.instance.refresh();\r\n }\r\n\r\n public GetSelectedRowKeys(): number[] {\r\n return this.grid.instance.getSelectedRowKeys();\r\n }\r\n\r\n // Shortcut for grid editing with changes object\r\n // Provides safe column checking\r\n // Returns data considering changes that were made but not saved yet\r\n public GetData(ColumnName: string, e: GridCellEditParams | any): any {\r\n if (this.IsColumnExists(ColumnName)) {\r\n if (e instanceof GridCellEditParams) {\r\n return e.changes[ColumnName] !== undefined\r\n ? e.changes[ColumnName]\r\n : e.rowData[ColumnName];\r\n } else {\r\n return e[ColumnName];\r\n }\r\n }\r\n }\r\n\r\n // Shortcut for grid editing with changes object\r\n // Provides safe column checking\r\n // Returns previous data for this column\r\n public GetPrevData(ColumnName: string, e: GridCellEditParams | GridCellEditAsyncParams): any {\r\n if (this.IsColumnExists(ColumnName)) {\r\n return e.rowData[ColumnName];\r\n }\r\n }\r\n\r\n // Shortcut for grid editing with rowData object\r\n // Provides safe column checking\r\n public SetData(ColumnName: string, oValue: any, e: GridCellEditParams | any) {\r\n if (this.IsColumnExists(ColumnName)) {\r\n if (e instanceof GridCellEditParams) {\r\n e.changes[ColumnName] = oValue;\r\n } else {\r\n e[ColumnName] = oValue;\r\n }\r\n }\r\n }\r\n\r\n // Shortcut for grid editing\r\n public GotoCell(ColumnName: string, RowIndex: number): any {\r\n if (this.IsColumnExists(ColumnName) && this.IsRowExists(RowIndex)) {\r\n return this.grid.instance.editCell(RowIndex, ColumnName);\r\n }\r\n }\r\n\r\n // Check if column exists\r\n public IsColumnExists(ColumnName: string): any {\r\n if (this.GetColumn(ColumnName) === undefined) {\r\n throw new Error(`Column ${ColumnName} does not exist`);\r\n }\r\n return true;\r\n }\r\n\r\n // Return column by name\r\n public GetColumn(ColumnName: string): any {\r\n return this.grid.columns.find((x: any) => x.dataField === ColumnName);\r\n }\r\n\r\n public SetColumnVisibility(ColumnName: string, visible: boolean): void {\r\n this.grid.instance.columnOption(ColumnName, 'visible', visible);\r\n }\r\n\r\n // Check if row exists\r\n public IsRowExists(RowIndex: number): any {\r\n const iCount: number = this.GetRowCount();\r\n if (RowIndex < 0 || (RowIndex > iCount && iCount !== -1)) {\r\n throw new Error(`Row ${RowIndex} does not exist`);\r\n }\r\n return true;\r\n }\r\n\r\n public GetRowCount(): number {\r\n const iCount: number = this.grid.instance.totalCount();\r\n return iCount === -1 ? this.grid.instance.getVisibleRows().length : iCount;\r\n }\r\n\r\n private IsRowsExists() {\r\n return (\r\n this.grid.instance.totalCount() > 0 || this.grid.instance.getVisibleRows().length > 0\r\n );\r\n }\r\n\r\n public async ExportExcel() {\r\n const framework = AppInjector.get(FrameworkService);\r\n const formats = [\r\n framework.CompanyInfo.NumberPrice,\r\n framework.CompanyInfo.NumberSum,\r\n framework.CompanyInfo.NumberRate,\r\n framework.CompanyInfo.NumberPercent\r\n ];\r\n const exportFormat = 'xlsx';\r\n const gridExport = (this.grid.export as any) ?? {};\r\n const { customizeExcelCell, onAfterExporting } = gridExport;\r\n\r\n this.grid.instance.beginUpdate();\r\n // Trigger native export event\r\n this.grid.onExporting.emit({\r\n component: this.grid.instance,\r\n element: this.grid.instance.element(),\r\n format: exportFormat,\r\n selectedRowsOnly: false\r\n });\r\n\r\n setTimeout(async () => {\r\n const workbook = new Workbook();\r\n const worksheet = workbook.addWorksheet('Main sheet');\r\n\r\n function parseNumberValue(v: unknown, format?: Format) {\r\n if (format && typeof v === 'string') {\r\n return parseNumber(v, format);\r\n }\r\n\r\n return v;\r\n }\r\n\r\n await exportDataGrid({\r\n component: this.grid.instance,\r\n worksheet: worksheet,\r\n ...this.grid.export,\r\n customizeCell: options => {\r\n const { gridCell, excelCell } = options;\r\n const { value, column, rowType } = gridCell;\r\n const { dataType } = column;\r\n\r\n const isGroupRow = rowType === 'group';\r\n const isDataRow = rowType === 'data';\r\n const isTotalRow = rowType === 'totalFooter';\r\n\r\n if (dataType === 'number' && isGroupRow) {\r\n excelCell.value = parseNumberValue(excelCell.value, column.format);\r\n }\r\n\r\n if (dataType === 'string' && isGroupRow) {\r\n if (typeof value === 'string') {\r\n const [, caption] = value.split(';');\r\n excelCell.value = caption ?? value;\r\n }\r\n }\r\n\r\n if (isDataRow && dataType === 'date' && column.format) {\r\n excelCell.value = formatDate(value, column.format);\r\n }\r\n\r\n if (isDataRow || isTotalRow || isGroupRow) {\r\n if (typeof column.format === 'string') {\r\n excelCell.numFmt = column.format;\r\n\r\n // TODO: need to keep number type as number. Aligment for number is right.\r\n if (formats.includes(column.format)) {\r\n excelCell.alignment = 'right';\r\n }\r\n }\r\n }\r\n\r\n if (customizeExcelCell) {\r\n customizeExcelCell(options);\r\n }\r\n }\r\n });\r\n\r\n const buffer = await workbook.xlsx.writeBuffer();\r\n if (onAfterExporting) {\r\n onAfterExporting({ component: this.grid.instance });\r\n }\r\n\r\n this.grid.instance.endUpdate();\r\n\r\n saveAs(\r\n new Blob([buffer], { type: 'application/octet-stream' }),\r\n `${this.grid.export?.texts?.exportTo}.${exportFormat}`\r\n );\r\n }, 0);\r\n }\r\n\r\n // Handler to remove current row\r\n RemoveCurrentRow(e) {\r\n if (!this.IsRowDeletable(e)) {\r\n return;\r\n }\r\n\r\n this.grid.instance.deleteRow(e.rowIndex);\r\n }\r\n\r\n // Handler for new row creation\r\n CreateNewRow() {\r\n if (!this.IsNewRowCreatable()) {\r\n return;\r\n }\r\n\r\n if (!this.grid.instance.hasEditData()) {\r\n this.grid.instance.addRow();\r\n } else {\r\n this.grid.instance\r\n .saveEditData()\r\n .then(() => this.grid.instance.addRow())\r\n .catch(() => {\r\n AppInjector.get(UiService).InfoMessage(RC('msgFinishEditing'));\r\n });\r\n }\r\n this.grid.instance.focus(this.grid.instance.getCellElement(0, 0));\r\n }\r\n\r\n // Bind context this to the event. It cannot be done other way\r\n private BindHandler(that: any, ColumnName: string, sHandlerName: string) {\r\n if (sHandlerName === undefined) {\r\n return;\r\n }\r\n\r\n if (that[sHandlerName] === undefined) {\r\n throw new Error(`Invalid handler was specified for ${ColumnName}`);\r\n }\r\n that[sHandlerName] = that[sHandlerName].bind(that);\r\n }\r\n\r\n /*\r\n * Attach handler event:\r\n * We have 4 events to choose from:\r\n * 1 - Before event - can be used for custom validation and such (not sure if needed yet). Can return false to prevent default operation\r\n * 2 - After event - can be used to update e.changes (by G.EditSet) directly on the row. Can return false to prevent default operation\r\n * 3 - AfterPromise event - can be used to return a promise that devextreme grid built-in mechanism will resolve\r\n * the promise can still set values using e.changes (throug G.EditSet) directly on the row\r\n * 4 - AfterAsync event - this one is fired after grid has finished processing, and value has been saved to the underlying row\r\n * this can be used for operations that relly on the underlying row value for their processing\r\n * This handler can not longer access the e.changes, but it has access to the rowIndex and can modify rows directly\r\n * as any other operation using G.Set\r\n */\r\n public AttachColumnEditHandler(\r\n that: BaseComponent,\r\n ColumnName: string,\r\n Handlers: GridCellEditHandlers\r\n ) {\r\n // Make sure column and handler both exists\r\n if (!this.IsColumnExists(ColumnName)) {\r\n return;\r\n }\r\n\r\n this.MapEventsEdit[ColumnName] = Handlers;\r\n\r\n // Bind handlers\r\n this.BindHandler(that, ColumnName, Handlers.BeforeEdit);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEdit);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEditPromise);\r\n this.BindHandler(that, ColumnName, Handlers.AfterEditAsync);\r\n\r\n // Bind the event to the column\r\n const column = this.GetColumn(ColumnName);\r\n column.setCellValue = this.ColumnEditHandler.bind(this, that, ColumnName, undefined);\r\n }\r\n\r\n /*\r\n * Attach event handler:\r\n * We have 2 events to choose from:\r\n * 1 - QueryEditCell - handler should return false if cell should not be editable\r\n * 2 - QueryPaintCell - handler should return false if cell should not be visible\r\n */\r\n public AttachColumnOptionsHandler(\r\n that: BaseComponent,\r\n ColumnName: string,\r\n Handlers: GridCellOptionHandlers\r\n ) {\r\n // Make sure column and handler both exists\r\n if (!this.IsColumnExists(ColumnName)) {\r\n return;\r\n }\r\n\r\n this.MapEventsOptions[ColumnName] = Handlers;\r\n\r\n // Bind handlers\r\n Handlers.that = that;\r\n this.BindHandler(that, ColumnName, Handlers.QueryEditCell);\r\n this.BindHandler(that, ColumnName, Handlers.QueryShowCell);\r\n\r\n // Bind form.customizeItem function to allow hiding items in form\r\n // Perform the binding only once\r\n if (this.grid.editing.form === undefined) {\r\n this.grid.editing.form = {};\r\n }\r\n\r\n if (this.grid.editing.form.customizeItem === undefined) {\r\n this.grid.editing.form.customizeItem = this.ColumnCustomizeItemHandler.bind(this, that);\r\n }\r\n }\r\n\r\n // Hide items in form edit mode\r\n private ColumnCustomizeItemHandler(that, item) {\r\n // See that we have a handler\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[item.dataField];\r\n if (handlers === undefined || handlers.QueryShowCell === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler\r\n const row = this.grid.instance.getVisibleRows()[this.currentRowIndex].data;\r\n const args = new GridCellOptionsParams(\r\n this.GetData(item.dataField, row),\r\n row,\r\n this.currentRowIndex\r\n );\r\n const bPaint = handlers.that[handlers.QueryShowCell](args);\r\n\r\n // Set value\r\n item.visible = bPaint;\r\n }\r\n\r\n // Raise dependant events when newData is set by the handler\r\n // This is done for consistancy - the same event handling mechanism can handle also value changes as a result of other event handlers,\r\n // just like it happens when using cellValue programatically from Async handler, or just outside code\r\n // This procedure determines the changes made based on the previous version of newData (originalDate) and calls the matching handlers\r\n // for each column that such change took place\r\n private RaiseDependantEvents(that, ColumnName, originalData, newData, currentRowData) {\r\n // Get list of values that were updated during this handler - compare new vs original\r\n const columnsUpdated: string[] = [];\r\n for (const key in newData) {\r\n if (\r\n key !== ColumnName &&\r\n (originalData === undefined || newData[key] !== originalData[key])\r\n ) {\r\n columnsUpdated.push(key);\r\n }\r\n }\r\n\r\n // Preserve state at this event\r\n originalData = Utils.CloneObject(newData);\r\n\r\n // Process only those that were updated\r\n for (const column of columnsUpdated) {\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellEditHandlers = this.MapEventsEdit[column];\r\n if (handlers === undefined) {\r\n continue;\r\n }\r\n\r\n // Raise event\r\n this.ColumnEditHandler(\r\n that,\r\n column,\r\n originalData,\r\n newData,\r\n newData[column],\r\n currentRowData\r\n );\r\n }\r\n }\r\n\r\n private ColumnEditHandler(that, ColumnName, originalData, newData, value, currentRowData) {\r\n\r\n // Ignore initial settings\r\n // When user resets a test field, data is set to \"\"\r\n if (value === undefined) {\r\n return;\r\n }\r\n\r\n console.log(`Editing cell: ${ColumnName} new value: ${value}`);\r\n // if (ColumnName == 'ItemDescription') debugger;\r\n\r\n // Prepare\r\n const handlers: GridCellEditHandlers = this.MapEventsEdit[ColumnName];\r\n const args: GridCellEditParams = new GridCellEditParams(\r\n value,\r\n currentRowData,\r\n newData,\r\n undefined\r\n );\r\n\r\n // Execute the before event. If it returns false, exit\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n if (handlers.BeforeEdit !== undefined) {\r\n const handlerBefore = that[handlers.BeforeEdit];\r\n if (!handlerBefore(args)) {\r\n return;\r\n }\r\n }\r\n\r\n // Set value just on the column that was really edited\r\n // (basically execute the default behaviour)\r\n if (originalData === undefined) {\r\n this.grid.instance.columnOption(ColumnName).defaultSetCellValue(newData, value);\r\n }\r\n\r\n // Execute after event.\r\n if (handlers.AfterEdit !== undefined) {\r\n const handlerAfter = that[handlers.AfterEdit];\r\n handlerAfter(args);\r\n this.RaiseDependantEvents(that, ColumnName, originalData, newData, currentRowData);\r\n }\r\n\r\n // Execute the after event asynchronically\r\n // This is to be used for cases when we need the editable value to be already set in the grid\r\n // In such case, any modifications that need to be done, should be done only using G.Set and not through changes, since\r\n // changes was already updated at this point.\r\n if (handlers.AfterEditAsync !== undefined) {\r\n const argsAsync = new GridCellEditAsyncParams(\r\n args.value,\r\n args.rowData,\r\n this.currentRowIndex\r\n );\r\n if (argsAsync.rowIndex !== -1) {\r\n const handlerAsync = that[handlers.AfterEditAsync];\r\n setTimeout(() => handlerAsync(argsAsync), 100);\r\n }\r\n }\r\n\r\n // Execute the after event.\r\n // Handler must call resolve() inside\r\n // It is here after the async event on purpose -\r\n // since if user has specified both the regular and async event, the regular event must return a promise\r\n // At any case, the order of the regular and async events is random and should not be relied upon\r\n if (handlers.AfterEditPromise !== undefined) {\r\n const handlerPromise = that[handlers.AfterEditPromise];\r\n return new Promise(resolve => {\r\n const finalize = () => {\r\n this.RaiseDependantEvents(\r\n that,\r\n ColumnName,\r\n originalData,\r\n newData,\r\n currentRowData\r\n );\r\n if (originalData === undefined) {\r\n console.log(`Saving cell: ${ColumnName}`, newData);\r\n }\r\n resolve(true);\r\n };\r\n handlerPromise(args, finalize.bind(this));\r\n });\r\n }\r\n\r\n if (originalData === undefined) {\r\n console.log(`Saving cell: ${ColumnName}`, newData);\r\n }\r\n }\r\n\r\n // Returns whether new row can be created now\r\n public IsNewRowCreatable(): boolean {\r\n const method: any = this.grid.editing.allowAdding;\r\n let bResult;\r\n if (method instanceof Function) {\r\n bResult = method();\r\n } else {\r\n bResult = method;\r\n }\r\n return bResult;\r\n }\r\n\r\n // Returns whether row can be edited now\r\n public IsRowEditable(row: any): boolean {\r\n return this.IsRowEditableOrUpdatable(row, this.grid.editing.allowUpdating);\r\n }\r\n\r\n // Returns whether row can be deleted now\r\n public IsRowDeletable(row: any): boolean {\r\n return this.IsRowEditableOrUpdatable(row, this.grid.editing.allowDeleting);\r\n }\r\n\r\n // Check if the operation is allowed for the row\r\n // Executes the bound function\r\n private IsRowEditableOrUpdatable(e: any, method: any): boolean {\r\n let bResult: boolean;\r\n\r\n const args = {\r\n component: this.grid.instance,\r\n row: {\r\n rowType: e.rowType,\r\n data: e.data\r\n }\r\n };\r\n if (method instanceof Function) {\r\n bResult = method(args);\r\n } else {\r\n bResult = method;\r\n }\r\n return bResult;\r\n }\r\n\r\n // Enable editing on click\r\n private OnRowClick(e) {\r\n if (!this.IsRowEditable(e)) {\r\n return;\r\n }\r\n\r\n if (this.grid.instance.hasEditData()) {\r\n this.grid.instance.cancelEditData();\r\n }\r\n\r\n this.grid.instance.editRow(e.rowIndex);\r\n }\r\n\r\n // Preserve current row\r\n // getRowIndexByKey will return -1 if it's a new row. For cellValue purposes, we can use 0 for that\r\n private OnEditingStart(e) {\r\n this.currentRowIndex = e.component.getRowIndexByKey(e.key);\r\n if (this.currentRowIndex === -1) {\r\n this.currentRowIndex = 0;\r\n }\r\n }\r\n\r\n // When adding new row, set the row index\r\n private OnInitNewRow(e) {\r\n this.currentRowIndex = 0;\r\n }\r\n\r\n // Add readonly class to rows that cannot be edited\r\n private OnRowPrepared(e) {\r\n if (e.rowType !== 'data' && e.rowType !== 'detail') {\r\n return;\r\n }\r\n\r\n if (!this.IsRowEditable(e)) {\r\n e.rowElement.classList.add('dx-state-readonly');\r\n }\r\n }\r\n\r\n // Various adjustments to editor\r\n private OnEditorPreparing(e) {\r\n if (e.parentType !== 'dataRow') {\r\n return;\r\n }\r\n\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[e.dataField];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handlers\r\n // If painting not allowed, editing is disabled as well\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.dataField, e.row.data),\r\n e.row.data,\r\n this.currentRowIndex\r\n );\r\n let bAllowEdit =\r\n handlers.QueryEditCell !== undefined\r\n ? handlers.that[handlers.QueryEditCell](args)\r\n : true;\r\n const bPaint =\r\n handlers.QueryShowCell !== undefined\r\n ? handlers.that[handlers.QueryShowCell](args)\r\n : true;\r\n if (!bPaint) {\r\n bAllowEdit = false;\r\n }\r\n if (bAllowEdit) {\r\n return;\r\n }\r\n\r\n // If both painting and editing is now allowed, and we're in cell mode, don't even create the editor\r\n // Otherwise, set it to readonly\r\n // This way, cells that are not pained will not show editor even when focusing on them\r\n if (this.grid.editing.mode === 'cell' && !bPaint) {\r\n e.cancel = true;\r\n } else {\r\n e.editorOptions.readOnly = true;\r\n e.editorOptions.tabIndex = -1;\r\n }\r\n }\r\n\r\n // Make cell as readonly and hide\r\n private OnCellPrepared(e) {\r\n // Handle rows only\r\n if (e.rowType !== 'data') {\r\n return;\r\n }\r\n\r\n // See if we have handlers for the updated column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[e.column.dataField];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler, and mark as readonly\r\n if (handlers.QueryEditCell !== undefined) {\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.column.dataField, e.row.data),\r\n e.row.data,\r\n e.rowIndex\r\n );\r\n const bAllowEdit = handlers.that[handlers.QueryEditCell](args);\r\n if (!bAllowEdit) {\r\n e.cellElement.classList.add('dx-state-readonly');\r\n }\r\n }\r\n\r\n // Execute handler, and mark as invisible\r\n if (handlers.QueryShowCell !== undefined) {\r\n const args = new GridCellOptionsParams(\r\n this.GetData(e.column.dataField, e.row.data),\r\n e.row.data,\r\n e.rowIndex\r\n );\r\n const bAllowEdit = handlers.that[handlers.QueryShowCell](args);\r\n if (!bAllowEdit) {\r\n e.cellElement.classList.add('m4u-hide-text');\r\n }\r\n }\r\n }\r\n\r\n // See if need to skip column\r\n private OnFocusCellChanging(e) {\r\n // See if moving forward or backward\r\n const bForward: boolean =\r\n e.newColumnIndex > e.prevColumnIndex || e.newRowIndex > e.prevRowIndex;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n // See if this is a special column. Skip them\r\n const bSpecial = e.columns[e.newColumnIndex].type !== undefined ? true : false;\r\n if (!bSpecial) {\r\n // Get column focus is moving to\r\n const sColumnName: string = e.columns[e.newColumnIndex].dataField;\r\n\r\n // See if we have handlers for this column\r\n const handlers: GridCellOptionHandlers = this.MapEventsOptions[sColumnName];\r\n if (handlers === undefined) {\r\n return;\r\n }\r\n\r\n // Execute handler. If editing is allowed, we can break execution\r\n const row = e.rows[e.newRowIndex].data;\r\n const args = new GridCellOptionsParams(\r\n this.GetData(sColumnName, row),\r\n row,\r\n e.newRowIndex\r\n );\r\n const bAllowEdit: boolean = handlers.that[handlers.QueryEditCell](args);\r\n if (bAllowEdit) {\r\n return;\r\n }\r\n }\r\n\r\n // When moving forward\r\n if (bForward) {\r\n // When not last column - move to next\r\n if (e.newColumnIndex < e.columns.length - 1) {\r\n e.newColumnIndex += 1;\r\n } else {\r\n e.newColumnIndex = 0;\r\n e.newRowIndex += 1;\r\n }\r\n } else {\r\n // When not first column - move to prev\r\n if (e.newColumnIndex > 0) {\r\n e.newColumnIndex -= 1;\r\n } else {\r\n e.newColumnIndex = e.columns.length - 1;\r\n e.newRowIndex -= 1;\r\n }\r\n }\r\n }\r\n }\r\n // !!!THIS IS WORKING BECAUSE OF PROMISE VALUE IS IMMUTABLE AFTER RESOLVE/REJECT\r\n // validation sequence is:\r\n // create new deferred for IsValid\r\n // trigger grid's saveEditData\r\n // if grid in EDIT mode\r\n // then OnRowValidating will be triggered where IsValid will be resolved\r\n // else saveEditData().then will be called and IsValid will be resolved;\r\n\r\n public ValidateGrid(): Promise {\r\n this.isValid = new DefferedPromise();\r\n this.grid.instance.saveEditData().then(() => this.isValid.Resolve(true));\r\n return this.isValid;\r\n }\r\n\r\n private OnRowValidating(e) {\r\n if (e.status === 'pending') {\r\n e.promise.then(result => this.isValid.Resolve(result.isValid));\r\n } else {\r\n this.isValid.Resolve(e.isValid);\r\n }\r\n }\r\n\r\n // Sync column visibility and order in form with the one set by the user\r\n private OnOptionChanged(e) {\r\n if (e.name === 'columns') {\r\n this.SetColumnsCaption();\r\n }\r\n\r\n if (e.name === 'columns' && (e.fullName.endsWith('visible') || e.fullName.endsWith('visibleIndex'))) {\r\n this.grid.instance.beginUpdate();\r\n for (let i = 0; i < this.grid.instance.columnCount(); i++) {\r\n const colAny = this.grid.instance.columnOption(i);\r\n\r\n this.grid.instance.columnOption(i, {\r\n formItem: {\r\n visible: colAny.visible,\r\n visibleIndex: colAny.visibleIndex\r\n }\r\n });\r\n }\r\n this.grid.instance.endUpdate();\r\n }\r\n }\r\n\r\n // Initialization entry point\r\n public InitGrid() {\r\n this.InitGridGeneral();\r\n switch (this.Mode) {\r\n case EnumGridModes.Editable:\r\n this.InitGridEditable();\r\n break;\r\n case EnumGridModes.Report:\r\n this.InitGridReport();\r\n break;\r\n case EnumGridModes.Lines:\r\n this.InitGridLines();\r\n break;\r\n }\r\n }\r\n\r\n // Generic stuff for all grids\r\n private InitGridGeneral() {\r\n this.grid.allowColumnReordering = this.AllowCustomization;\r\n this.grid.allowColumnResizing = this.AllowCustomization;\r\n\r\n const stateStoring = this.grid.stateStoring;\r\n this.grid.stateStoring = {\r\n storageKey:\r\n stateStoring?.storageKey || `${this.Component.ComponentStateName}.Grid.State`,\r\n enabled: this.AllowCustomization\r\n };\r\n\r\n // Set file name for excel export\r\n if (!this.grid.export || this.grid.export?.texts?.exportTo === 'DataGrid') {\r\n let sFileName: string = this.Component.ComponentStateName.replace(\r\n 'Component',\r\n ''\r\n ).replace('Grid', '');\r\n if (sFileName.endsWith('s')) {\r\n sFileName += 'es';\r\n } else {\r\n sFileName += 's';\r\n }\r\n this.grid.export = { texts: { exportTo: sFileName } }; // { fileName: sFileName };\r\n }\r\n\r\n // Add class to grid if it's clickable\r\n const grid = this.grid;\r\n this.subscribtions.push(\r\n this.grid.onInitialized.subscribe(e => {\r\n const gridRowClickEvent = grid.onRowClick;\r\n if ((gridRowClickEvent && gridRowClickEvent.observed) || grid.focusedRowEnabled) {\r\n e.element.classList.add('grid-row-clickable');\r\n }\r\n\r\n // HACK use custom props for saving custom grid config\r\n (this.grid.instance as any).AllowCustomization = this.AllowCustomization;\r\n (this.grid.instance as any).AllowAdvancedFilters = this.AllowAdvancedFilters;\r\n\r\n this.SetColumnsCaption();\r\n })\r\n );\r\n }\r\n\r\n private SetColumnsCaption() {\r\n const gridColumns = this.grid.instance.option('columns') || [];\r\n gridColumns.forEach((column: Column) => this.SetColumnCaption(column));\r\n }\r\n\r\n private SetColumnCaption(column: Column) {\r\n if (Utils.IsEmpty(this.CurrentEntityTypeName) || Utils.IsEmpty(column.dataField) || !Utils.IsEmpty(column.caption)) {\r\n return;\r\n }\r\n\r\n const resourceName = `BL.${this.CurrentEntityTypeName}.${column.dataField}`;\r\n const caption = this._resourceService.RC(resourceName, (this.Component as any as IBaseModuleComponent).ModuleName);\r\n this.grid.instance.columnOption(column.dataField, 'caption', caption);\r\n }\r\n\r\n public Print(): void {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n const doc = new jsPDF({\r\n orientation: 'l',\r\n putOnlyUsedFonts: true\r\n });\r\n\r\n doc.addFont('assets/fonts/Assistant-Regular.ttf', 'Assistant', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Light.ttf', 'Assistant-Light', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Medium.ttf', 'Assistant-Medium', 'normal');\r\n doc.addFont('assets/fonts/Assistant-Bold.ttf', 'Assistant', 'bold');\r\n doc.setTextColor('#294D92');\r\n\r\n const [title, printTitle, filterDescription] = this.GetPrintHeaderInfo();\r\n\r\n const arrFilterDescription = filterDescription.split('\\n');\r\n let yPosition = 16;\r\n if (title) {\r\n doc.setFontSize(28);\r\n doc.setFont('Assistant-Medium');\r\n const titleWidth = this.GetTextWidth(title, 28, 500);\r\n const titleXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - titleWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(title), titleXPosition, yPosition);\r\n yPosition += 8;\r\n }\r\n\r\n doc.setFontSize(14);\r\n doc.setFont('Assistant-Light');\r\n if (printTitle) {\r\n const printTitleWidth = this.GetTextWidth(printTitle, 14, 300);\r\n const printTitleXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - printTitleWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(printTitle), printTitleXPosition, yPosition);\r\n yPosition += 8;\r\n }\r\n\r\n if (arrFilterDescription) {\r\n for (let i = 0; i < arrFilterDescription.length; i++) {\r\n if (Utils.NZ(arrFilterDescription[i]) === '') {\r\n continue;\r\n }\r\n\r\n const filterDescriptionWidth = this.GetTextWidth(arrFilterDescription[i], 14, 300);\r\n const filterDescriptionXPosition = screen.IsRTL()\r\n ? doc.internal.pageSize.width - 14 - filterDescriptionWidth / doc.internal.scaleFactor\r\n : 14;\r\n doc.text(this.ReverseHebrewText(arrFilterDescription[i]), filterDescriptionXPosition, yPosition);\r\n if (i < arrFilterDescription.length - 1) {\r\n yPosition += 8;\r\n }\r\n }\r\n }\r\n\r\n const printLogoPath = this.GetPrintLogoPath();\r\n const iconXPosition = screen.IsRTL() ? 14 : doc.internal.pageSize.width - 34;\r\n doc.addImage(printLogoPath, 'jpeg', iconXPosition, 8, 20, 20);\r\n\r\n doc.setFontSize(16);\r\n doc.setFont('Assistant');\r\n exportToPdf({\r\n jsPDFDocument: doc,\r\n component: this.grid.instance,\r\n topLeft: { x: 0, y: yPosition - 4 },\r\n customizeCell: ({ gridCell, pdfCell }) => {\r\n pdfCell.textColor = '#294D92';\r\n pdfCell.borderColor = '#D2DAE8';\r\n pdfCell.borderWidth = 1;\r\n pdfCell.drawLeftBorder = false;\r\n pdfCell.drawRightBorder = false;\r\n if (gridCell.rowType === 'header') {\r\n pdfCell.backgroundColor = '#E5EAF2';\r\n pdfCell.font = { name: 'Assistant', size: 10, style: 'bold' };\r\n }\r\n if (gridCell.rowType === 'group') {\r\n const summaryCellValue =\r\n gridCell.groupSummaryItems &&\r\n gridCell.groupSummaryItems\r\n .map(x => {\r\n const column = gridCell.column as any;\r\n return column && column.parseValue\r\n ? column.parseValue(x.value)\r\n : x.value;\r\n })\r\n .filter(x => x && x !== 0)\r\n .map(x => formatNumber(x, gridCell.column?.format))\r\n .join(';');\r\n const lookupValue =\r\n gridCell.column?.lookup &&\r\n gridCell.column?.lookup.calculateCellValue(gridCell.value);\r\n const complexCellValue =\r\n gridCell.value && gridCell.value.includes && gridCell.value.includes(';')\r\n ? gridCell.value.split(';')[1]\r\n : gridCell.value;\r\n const formattedValue =\r\n gridCell.column?.dataType === 'date'\r\n ? formatDate(complexCellValue, gridCell.column?.format)\r\n : complexCellValue?.toString();\r\n const resultValue = lookupValue || formattedValue;\r\n pdfCell.text =\r\n summaryCellValue && resultValue\r\n ? resultValue\r\n : summaryCellValue || resultValue;\r\n }\r\n if (\r\n !screen.IsRTL() &&\r\n gridCell.rowType === 'data' &&\r\n gridCell.value &&\r\n Utils.ContainsHebrewLetters(gridCell.value)\r\n ) {\r\n pdfCell.text = this.ReverseHebrewText(gridCell.value);\r\n }\r\n const gridExport = this.grid.export as any;\r\n if (gridExport?.customizePdfCell) {\r\n gridExport.customizePdfCell({ gridCell, pdfCell });\r\n }\r\n }\r\n }).then(() => {\r\n window.open(doc.output('bloburl').toString());\r\n });\r\n\r\n return;\r\n }\r\n\r\n private GetPrintHeaderInfo() {\r\n const Page = (this.Component as any).Page;\r\n if (!Page) {\r\n return ['', '', ''];\r\n }\r\n\r\n const title = Page.GetTitle();\r\n const printTitle = Page.OnGetPrintTitle();\r\n const filterDescription = Page.OnGetFilterDescription();\r\n\r\n return [title, printTitle, filterDescription];\r\n }\r\n\r\n private GetTextWidth(text: string, fontSize: number, fontWeight: number) {\r\n const div = document.createElement('div');\r\n div.innerHTML = text;\r\n div.style.fontSize = `${fontSize}px`;\r\n div.style.fontWeight = `${fontWeight}`;\r\n div.style.position = 'absolute';\r\n div.style.height = 'auto';\r\n div.style.width = 'auto';\r\n div.style.whiteSpace = 'nowrap';\r\n div.style.visibility = 'hidden';\r\n const appContainer = document.querySelector('.app-container');\r\n appContainer.appendChild(div);\r\n const textWidth = div.clientWidth + 1;\r\n appContainer.removeChild(div);\r\n return textWidth;\r\n }\r\n\r\n private ReverseHebrewText(text: string) {\r\n return !Utils.ContainsHebrewLetters(text) ? text : text.split('').reverse().join('');\r\n }\r\n\r\n private GetPrintLogoPath(): string {\r\n const appConfig = AppInjector.get(AppConfigService);\r\n\r\n const projectAssetsFolder = `assets/projects/${appConfig.AppConfig.ModuleName.toLowerCase()}`;\r\n const projectPrintLogoPath = `${projectAssetsFolder}/print-logo.png`;\r\n const customProjectPrintLogoPath =\r\n appConfig.M4UConfig.customBuild &&\r\n `${projectAssetsFolder}/print-logo_${appConfig.M4UConfig.customBuild}.png`;\r\n\r\n return customProjectPrintLogoPath && Utils.IsIconExists(customProjectPrintLogoPath)\r\n ? customProjectPrintLogoPath\r\n : Utils.IsIconExists(projectPrintLogoPath)\r\n ? projectPrintLogoPath\r\n : 'assets/icons/icon-96x96.png';\r\n }\r\n\r\n // Initialize report grid\r\n private InitGridReport() {\r\n // Show adaptive row for reports\r\n this.grid.columnHidingEnabled = false;\r\n }\r\n\r\n // Initialize editable grid\r\n private InitGridEditable() {\r\n //Show adaptive row for reports\r\n this.grid.columnHidingEnabled = false;\r\n \r\n //Add delete column that looks normal\r\n this.grid.columns = [\r\n {\r\n type: 'buttons',\r\n width: 32,\r\n allowReordering: false,\r\n allowResizing: false,\r\n buttons: [{ name: 'delete' }]\r\n }\r\n ];\r\n\r\n if (!this.grid.sorting) {\r\n this.grid.sorting = {};\r\n }\r\n this.grid.sorting.mode = 'none';\r\n\r\n if (!this.grid.paging) {\r\n this.grid.paging = {};\r\n }\r\n this.grid.paging.pageSize = 99999;\r\n\r\n // Subscribe to events\r\n this.subscribtions.push(this.grid.onRowClick.subscribe(e => this.OnRowClick(e)));\r\n this.subscribtions.push(this.grid.onEditingStart.subscribe(e => this.OnEditingStart(e)));\r\n this.subscribtions.push(this.grid.onInitNewRow.subscribe(e => this.OnInitNewRow(e)));\r\n this.subscribtions.push(\r\n this.grid.onEditorPreparing.subscribe(e => this.OnEditorPreparing(e))\r\n );\r\n this.subscribtions.push(\r\n this.grid.onFocusedCellChanging.subscribe(e => this.OnFocusCellChanging(e))\r\n );\r\n this.subscribtions.push(this.grid.onCellPrepared.subscribe(e => this.OnCellPrepared(e)));\r\n this.subscribtions.push(this.grid.onOptionChanged.subscribe(e => this.OnOptionChanged(e)));\r\n this.subscribtions.push(this.grid.onRowPrepared.subscribe(e => this.OnRowPrepared(e)));\r\n this.subscribtions.push(this.grid.onRowValidating.subscribe(e => this.OnRowValidating(e)));\r\n }\r\n\r\n private InitGridLines() {\r\n this.InitGridReport();\r\n\r\n // tslint:disable-next-line:no-unused-expression\r\n this.grid &&\r\n this.grid.instance &&\r\n (this.grid.instance as any).option({\r\n 'selection.mode': 'single',\r\n 'selection.deferred': true,\r\n hoverStateEnabled: true\r\n });\r\n }\r\n\r\n // Unsubscribe\r\n public DestroyGrid() {\r\n this.subscribtions.forEach(o => o.unsubscribe());\r\n }\r\n\r\n OnDoubleSizePopup(e, data) {\r\n if (this.grid.editing.mode === 'form') {\r\n return;\r\n }\r\n\r\n const iWidth: number = data.column.visibleWidth * 2;\r\n e.component._popup.option('width', iWidth);\r\n }\r\n\r\n public OnGridClick() {\r\n if (!this.IsRowsExists()) {\r\n this.CreateNewRow();\r\n }\r\n }\r\n}\r\n","import { Directive, HostListener, Input, OnDestroy, ViewContainerRef } from '@angular/core';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\nimport { GridExtender } from './Grid.extender';\r\nimport { EnumGridModes } from '@core/framework/sysenums.enum';\r\nimport { IBaseComponent } from './../component/IBaseComponent';\r\nimport { IGridComponent } from '../component/BaseGridComponent';\r\n\r\n@Directive({ selector: '[configGrid]' })\r\nexport class M4UConfigGridDirective implements OnDestroy {\r\n //Set default options\r\n private grid: DxDataGridComponent;\r\n public get gridAny(): any { return this.grid; }\r\n // @ts-ignore\r\n constructor(private c: DxDataGridComponent) {\r\n this.grid = c;\r\n }\r\n\r\n //Set name (no instance yet), set directly\r\n private _Component: IBaseComponent;\r\n get Component(): IBaseComponent { return this._Component; }\r\n @Input() set Component(value: IBaseComponent) {\r\n this._Component = value;\r\n this.InitExtender();\r\n }\r\n\r\n //Initialize - should be only called once\r\n private _Mode: EnumGridModes;\r\n get Mode(): EnumGridModes { return this._Mode; }\r\n @Input() set Mode(value: EnumGridModes) {\r\n this._Mode = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _AllowCustomization: boolean = false;\r\n get AllowCustomization(): boolean { return this._AllowCustomization; }\r\n @Input() set AllowCustomization(value: boolean) {\r\n this._AllowCustomization = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _AllowAdvancedFilters: boolean = false;\r\n get AllowAdvancedFilters(): boolean { return this._AllowAdvancedFilters; }\r\n @Input() set AllowAdvancedFilters(value: boolean) {\r\n this._AllowAdvancedFilters = value;\r\n this.InitExtender();\r\n }\r\n\r\n private _Name: string;\r\n get Name(): string { return this._Name; }\r\n @Input() set Name(name: string) {\r\n this._Name = name;\r\n this.gridAny.Name = this._Name;\r\n }\r\n\r\n private _entityTypeName: string;\r\n @Input() set EntityTypeName(value: string) {\r\n this._entityTypeName = value;\r\n this.InitExtender();\r\n }\r\n get EntityTypeName() { return this._entityTypeName; }\r\n\r\n //Perform initialization once all mandatory properties are set\r\n private InitExtender() {\r\n if (this.Mode == undefined || this.Component == undefined || this.AllowCustomization == undefined || this.AllowAdvancedFilters == undefined) return;\r\n this.gridAny.G = new GridExtender(this.grid, this.Mode, this.AllowCustomization, this.AllowAdvancedFilters, this.Component, this.EntityTypeName);\r\n this.gridAny.G.InitGrid();\r\n }\r\n\r\n private get G(): GridExtender { return this.gridAny.G; }\r\n\r\n //Create new row when no rows exist\r\n @HostListener('click', ['$event'])\r\n onClick() {\r\n this.G.OnGridClick();\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.G && this.G.DestroyGrid();\r\n }\r\n\r\n}\r\n\r\n//use this directive to get descendants grid from custom components\r\n@Directive({\r\n selector: '[gridWrapper]'\r\n})\r\nexport class GridWrapperDirective {\r\n constructor(private vcRef: ViewContainerRef) { }\r\n\r\n public get G(): GridExtender {\r\n const component = this.vcRef[\"_data\"].componentView.component;\r\n\r\n return component.G;\r\n }\r\n}\r\n","import { Observable, of } from 'rxjs';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DefaultRouteParams, InjectableComponentOptions, LoginExtensionLink, MainMenuElement } from '@base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { Routes } from '@angular/router';\r\nimport { EnumApplicationMode } from '@core/framework/sysenums.enum';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n//Injection token for application configuration\r\nexport const APP_CONFIG = new InjectionToken('app.config');\r\n\r\nexport class AppConfig {\r\n //Module name. Can be obtained from server WebApi project name without 'WebAPI' prefix\r\n ModuleName: string = '';\r\n //Project name that was set up in menahel4u.json. No need to override, it is set automatically\r\n ProjectName: string = '';\r\n //Application Mode\r\n Mode: EnumApplicationMode = EnumApplicationMode.Standard;\r\n //Turn on/off notifications\r\n IsAllowNotifications: boolean;\r\n //Turn on/off breadcrumb\r\n ShowBreadcrumb: () => boolean = () => false;\r\n\r\n //Array of components\r\n Components = [];\r\n //Array of entry components\r\n EntryComponents = [];\r\n //Array of endpoints\r\n Endpoints = [];\r\n //Array of services\r\n Services = [];\r\n //Array of routes\r\n RoutesProtected: Routes = [];\r\n RoutesAnonymous: Routes = [];\r\n //\r\n RoutesWithEmptyLayout: Routes = [];\r\n //\r\n SupportLegacyDisplaySizes: boolean = false;\r\n\r\n //Get menu function\r\n OnGetMenu = (userInfos?: { [moduleName: string]: any }): Observable => of([]);\r\n //Get navbar items for mobile menu\r\n OnGetNavbarItems = (userInfos?: { [moduleName: string]: any }): Observable => of([]);\r\n //Get default route path with params function\r\n OnGetDefaultRouteParams = (userInfo?: any): Observable => of({} as DefaultRouteParams);\r\n //Get login page extension links function\r\n OnGetAppLoginExtensionLinks = (): Observable => of([]);\r\n //Get global datasources function\r\n OnGetGlobalDataSources = (): Observable<{ [id: string]: BaseDataSourceAbstract }> => of({});\r\n //Get home page instead of system/login\r\n OnGetHomePagePath = () => '';\r\n\r\n //Application lifecycle functions\r\n //On init application function\r\n OnInitApplicationAsync = (userInfo?: any): Observable => of(true);\r\n //On logout application function\r\n OnLogoutApplicationAsync = (): Observable => of(true);\r\n //On login page. Provides posibility to config/exec an additional functionality\r\n OnLoginPage = () => of(true);\r\n\r\n //Get injectable components options\r\n GetInjectableComponentOptions = (): Observable>[]> => of([]);\r\n\r\n //Get lists\r\n GetLists = (): any[] => [];\r\n\r\n //Module enums object\r\n Enums: any = {};\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { combineLatest, forkJoin, of } from 'rxjs';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { APP_CONFIG, AppConfig } from './app.config.model';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { EnumLanguages } from '@core/framework/sysenums.enum';\r\nimport { LoginGuard } from '@m4u-angular/core/framework/login.guard';\r\nimport { ConfirmCancelGuard } from '@m4u-angular/core/framework/confirm-cancel.guard';\r\n\r\nexport interface VersionDescriptor {\r\n moduleName: string;\r\n major: number;\r\n minor: number;\r\n build: number;\r\n builds: number[];\r\n}\r\n\r\nexport interface AppBuildConfig {\r\n deploymentApplicationFolder: string;\r\n customBuild: string;\r\n isRegisterServiceWorker: boolean;\r\n title: string;\r\n standaloneApplicationApiUrl: string;\r\n projects: [{\r\n [key: string]: {\r\n }\r\n }];\r\n [key: string]: any;\r\n}\r\n\r\n@Injectable()\r\nexport class AppConfigService {\r\n public AppConfig: AppConfig;\r\n public M4UConfig: AppBuildConfig;\r\n public Resources: any[];\r\n public CustomResources: any[];\r\n\r\n constructor(@Inject(APP_CONFIG) appConfig) {\r\n this.AppConfig = appConfig;\r\n this.M4UConfig = AppConfigService._m4uConfig || AppConfigService.loadM4UConfig();\r\n this.Resources = AppConfigService._resources;\r\n this.CustomResources = AppConfigService._customResources;\r\n }\r\n\r\n //Get module name by component, endpoint or service instance\r\n getModuleNameByInstance = (instance): string => {\r\n //If instance is in application components return its module name\r\n const componentInstance = this.AppConfig.Components.find(c => instance instanceof c);\r\n if (componentInstance) return (componentInstance as IBaseModuleComponent).ModuleName;\r\n\r\n //If instance is in application endpoints return its module name\r\n const endpointInstance = this.AppConfig.Endpoints.find(e => instance instanceof e);\r\n if (endpointInstance) return (endpointInstance as IBaseModuleComponent).ModuleName;\r\n\r\n //If instance is in application services return its module name\r\n const serviceInstance = this.AppConfig.Services.find(s => {\r\n if (typeof (s) === 'object') {\r\n if (s.hasOwnProperty('useClass')) return instance instanceof s['useClass'];\r\n if (s.hasOwnProperty('useValue')) return instance instanceof s['useValue'];\r\n return false;\r\n }\r\n return instance instanceof s;\r\n });\r\n if (serviceInstance) return (serviceInstance as IBaseModuleComponent).ModuleName;\r\n\r\n return '';\r\n }\r\n\r\n getModulesVersion = (): VersionDescriptor[] => {\r\n if (!AppConfigService._m4uConfig) AppConfigService._m4uConfig = Utils.LoadJsonFile('menahel4u.json');\r\n const result = Object.keys(AppConfigService._m4uConfig.projects).map(projectName => {\r\n const path = `assets/projects/${projectName}/version.json`;\r\n let version = Utils.LoadJsonFile(path);\r\n if (version) {\r\n version.moduleName = projectName;\r\n version.build = version.builds && version.builds.length ? Math.max(...version.builds) : 1;\r\n } else {\r\n version = { moduleName: projectName, major: 0, minor: 0, build: 0, builds: [] } as VersionDescriptor;\r\n }\r\n return version;\r\n });\r\n return result;\r\n }\r\n\r\n private static _m4uConfig: AppBuildConfig;\r\n static loadM4UConfig() {\r\n if (!this._m4uConfig) this._m4uConfig = Utils.LoadJsonFile('menahel4u.json');\r\n\r\n return this._m4uConfig;\r\n }\r\n\r\n //Application config variable to avoid several times loading\r\n private static _appConfig: AppConfig;\r\n static loadConfig(): AppConfig {\r\n //If already loaded just return\r\n if (this._appConfig) return this._appConfig;\r\n\r\n const m4uConfig = this.loadM4UConfig();\r\n //Validation for any project in menahel4u configuration file\r\n if (!m4uConfig.projects || !m4uConfig.projects) {\r\n throw new Error(\"There should be at least one project in menahel4u.json\");\r\n }\r\n\r\n const configs = [];\r\n //Load application configuration for each project in menahel4u configuration file\r\n Object.keys(m4uConfig.projects).forEach(projectName => {\r\n const appConfigModule = require(`projects/${projectName}/_app.config`);\r\n appConfigModule.appConfig.ProjectName = projectName;\r\n configs.push(appConfigModule.appConfig);\r\n });\r\n this.loadResources(configs);\r\n //Merge all the projects application configuration files into one\r\n this._appConfig = this.mergeConfigs(configs);\r\n return this._appConfig;\r\n }\r\n\r\n private static getRoutes(_configs: AppConfig[], routeNames: string) {\r\n return _configs.map(x => x)\r\n .reduce((arr, el) => {\r\n const routes = el[routeNames];\r\n routes.forEach(r => {\r\n //Set module name for routes with CommonSetting component and its data\r\n if (r.data && r.data.DataSource) {\r\n (r.component as any as IBaseModuleComponent).ModuleName = el.ModuleName;\r\n r.data.ModuleName = el.ModuleName;\r\n }\r\n //Get current route component\r\n const routeComponent = r.component as any as IBaseModuleComponent;\r\n //Get current route component module name\r\n const moduleNameWithPrefix = routeComponent && routeComponent.ModuleName\r\n ? `${routeComponent.ModuleName}_`\r\n : '';\r\n //Set route path depends on its component module name\r\n r.path = `${moduleNameWithPrefix}${r.path}`;\r\n });\r\n return arr.concat(routes);\r\n }, [])\r\n }\r\n\r\n //Merge application configuration files into one\r\n static mergeConfigs(configs: AppConfig[]): AppConfig {\r\n //Set module name for each of the project components, endpoints and services before application starts\r\n configs.forEach(x => {\r\n x.Components.forEach(c => (c as IBaseModuleComponent).ModuleName = x.ModuleName);\r\n x.Endpoints.forEach(e => (e as IBaseModuleComponent).ModuleName = x.ModuleName);\r\n x.Services.forEach(s => {\r\n let service;\r\n if (typeof (s) === 'object') {\r\n if (s.hasOwnProperty('useClass')) service = s['useClass'];\r\n if (s.hasOwnProperty('useValue')) service = s['useValue'];\r\n } else service = s;\r\n (service as IBaseModuleComponent).ModuleName = x.ModuleName;\r\n });\r\n });\r\n return {\r\n //Join all the projects module names by ','\r\n OnGetHomePagePath: function () {\r\n let routes = [...this.RoutesWithEmptyLayout, ...this.RoutesAnonymous, ...this.RoutesProtected].filter(x => x?.data?.IsHomePage);\r\n return routes.length > 0 ? routes[0].path : '';\r\n },\r\n ModuleName: configs.map(x => x.ModuleName).join(),\r\n //Join all the projects project names by ','\r\n ProjectName: configs.map(x => x.ProjectName).join(),\r\n //Get application mode from the first app config file\r\n Mode: configs[0].Mode,\r\n //Get notifications available from the first app config file\r\n IsAllowNotifications: configs[0].IsAllowNotifications,\r\n //Get breadcrumb available from the first app config file\r\n ShowBreadcrumb: configs[0].ShowBreadcrumb,\r\n\r\n //Merge all the projects components into one array\r\n Components: configs.map(x => x.Components).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects entry components into one array\r\n EntryComponents: configs.map(x => x.EntryComponents).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects endpoints into one array\r\n Endpoints: configs.map(x => x.Endpoints).reduce((arr, el) => arr.concat(el), []),\r\n //Merge all the projects services into one array\r\n Services: configs.map(x => x.Services).reduce((arr, el) => arr.concat(el), []),\r\n\r\n //Merge all the projects routes into one array and add module name prefix for each of the route\r\n RoutesProtected: this.getRoutes(configs, 'RoutesProtected')\r\n .map((item) => {\r\n let canDeactivateModules = !!item.canDeactivate && item.canDeactivate.length > 0 ? [...item.canDeactivate.filter(d => !!d), ConfirmCancelGuard] : [ConfirmCancelGuard];\r\n return { ...item, canActivate: [LoginGuard, ...(item.canActivate || [])], canDeactivate: canDeactivateModules }\r\n }),\r\n RoutesAnonymous: this.getRoutes(configs, 'RoutesAnonymous')\r\n .map((item) => {\r\n let canDeactivateModules = !!item.canDeactivate && item.canDeactivate.length > 0 ? [...item.canDeactivate.filter(d => !!d), ConfirmCancelGuard] : [ConfirmCancelGuard];\r\n return { ...item, canDeactivate: canDeactivateModules }\r\n }),\r\n RoutesWithEmptyLayout: this.getRoutes(configs, 'RoutesWithEmptyLayout'),\r\n\r\n SupportLegacyDisplaySizes: configs.findIndex(x => !!x.SupportLegacyDisplaySizes) !== -1,\r\n\r\n OnInitApplicationAsync: (userInfo?: any) => {\r\n //Merge all the projects on init application functions into one\r\n return combineLatest(configs.map(x => x.OnInitApplicationAsync(userInfo)))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true)))\r\n },\r\n\r\n //Merge all the projects on logout application functions into one\r\n OnLogoutApplicationAsync: () => combineLatest(\r\n configs.map(x => x.OnLogoutApplicationAsync()))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true))\r\n ),\r\n\r\n //Merge all the projects data sources into one array and add module name prefix for each of the datasources\r\n OnGetGlobalDataSources: () => {\r\n let dssObservables = configs.map(x => x.OnGetGlobalDataSources());\r\n return forkJoin(dssObservables)\r\n .pipe(mergeMap(dss => {\r\n let result = {};\r\n dss.forEach((ds: { [id: string]: BaseDataSourceAbstract }, idx) => {\r\n Object.keys(ds).forEach(key => result[`${configs[idx].ModuleName}${key}`] = ds[key]);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Get the default routes params from the first of the application configuration files\r\n OnGetDefaultRouteParams: configs[0].OnGetDefaultRouteParams,\r\n\r\n //Merge all the projects on get login extension links functions into one\r\n OnGetAppLoginExtensionLinks: () => {\r\n let linksObservables = configs.map(x => x.OnGetAppLoginExtensionLinks());\r\n return forkJoin(linksObservables)\r\n .pipe(mergeMap(links => {\r\n let result = [];\r\n links.forEach((link, idx) => {\r\n link.forEach(linkItem => this.setMenuModuleName(linkItem, configs[idx].ModuleName));\r\n result = result.concat(link);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects menus into one array and add module name prefix for each of the menu and its child\r\n OnGetMenu: (userInfos?: { [moduleName: string]: any }) => {\r\n let menusObservables = configs.map(x => x.OnGetMenu(userInfos));\r\n return forkJoin(menusObservables)\r\n .pipe(mergeMap(menus => {\r\n let result = [];\r\n menus.forEach((menu, idx) => {\r\n menu.forEach(menuItem => this.setMenuModuleName(menuItem, configs[idx].ModuleName));\r\n result = result.concat(menu);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects navbar items into one array and add module name prefix for each of the navbar\r\n OnGetNavbarItems: (userInfos?: { [moduleName: string]: any }) => {\r\n let menusObservables = configs.map(x => x.OnGetNavbarItems(userInfos));\r\n return forkJoin(menusObservables)\r\n .pipe(mergeMap(menus => {\r\n let result = [];\r\n menus.forEach((menu, idx) => {\r\n menu.forEach(menuItem => this.setMenuModuleName(menuItem, configs[idx].ModuleName));\r\n result = result.concat(menu);\r\n });\r\n return of(result);\r\n }));\r\n },\r\n\r\n GetLists: () => {\r\n let result = [];\r\n configs.forEach(x => {\r\n const lists = x.GetLists();\r\n lists.forEach(l => l.Properties.ModuleName = x.ModuleName);\r\n result = result.concat(lists);\r\n });\r\n return result;\r\n },\r\n\r\n GetInjectableComponentOptions: () => {\r\n let observables = configs.map(x => x.GetInjectableComponentOptions());\r\n return forkJoin(observables).pipe(mergeMap((options) => {\r\n let result = [];\r\n options.forEach((option) => { result = result.concat(option); })\r\n return of(result);\r\n }));\r\n },\r\n\r\n //Merge all the projects enums into one object\r\n Enums: configs.map(x => x.Enums)\r\n .reduce((obj, el) => Object.assign(obj, el), {}),\r\n\r\n OnLoginPage: () => {\r\n return combineLatest(configs.map(x => x.OnLoginPage()))\r\n .pipe(map(x => x.reduce((res, el) => res && el, true)))\r\n },\r\n } as AppConfig\r\n }\r\n\r\n //Set module name for the menu and its child\r\n static setMenuModuleName(menu, moduleName) {\r\n menu.moduleName = moduleName;\r\n menu.menu = moduleName + '.' + menu.menu;\r\n if (menu.items) menu.items.forEach(subMenu => this.setMenuModuleName(subMenu, moduleName));\r\n }\r\n\r\n //Merge resources function\r\n private static _resources: any[];\r\n private static _customResources: any[];\r\n static loadResources(configs: AppConfig[]) {\r\n this._resources = [];\r\n this._customResources = [];\r\n const languages = Object.values(EnumLanguages);\r\n const randomNoCacheParam = Math.random();\r\n\r\n configs.forEach(x => {\r\n languages.forEach(language => {\r\n if (this._m4uConfig.customBuild) {\r\n let path = `assets/i18n/${x.ProjectName}/${language}_${this._m4uConfig.customBuild}.json`;\r\n if (!(window as any).cordova) path += `?v=${randomNoCacheParam}`;\r\n const customResource = Utils.LoadJsonFile(path) as any;\r\n if (customResource) {\r\n customResource.Properties.ModuleName = x.ModuleName;\r\n this._customResources.push(customResource);\r\n }\r\n }\r\n\r\n let path = `assets/i18n/${x.ProjectName}/${language}.json`;\r\n if (!(window as any).cordova) path += `?v=${randomNoCacheParam}`;\r\n const resource = Utils.LoadJsonFile(path) as any;\r\n if (resource) {\r\n resource.Properties.ModuleName = x.ModuleName;\r\n this._resources.push(resource);\r\n }\r\n });\r\n });\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, ItemPriceInfo } from \"@base/entities/BaseEntities\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class GeneralEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"General\", api);\r\n }\r\n\r\n public CalculateConversionRate(SourceCurrency: string, DestCurrency: string, Date: Date): Observable>\r\n {\r\n //Shortcut\r\n if (SourceCurrency == DestCurrency)\r\n {\r\n var x = new BaseDataResponse();\r\n x.IsSuccess = true;\r\n x.Data = 1;\r\n return of(x);\r\n }\r\n\r\n //Execute\r\n return this.api.ExecuteGetAction(this.ControllerName, 'CalculateConversionRate', { SourceCurrency: SourceCurrency, DestCurrency: DestCurrency, Date: Date });\r\n }\r\n\r\n GetItemPrice(ItemCode: string, CardCode: string, Date: Date, Quantity: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetItemPrice', { ItemCode: ItemCode, CardCode: CardCode, Date: Date, Quantity: Quantity });\r\n }\r\n\r\n GetItemPriceEx(ItemID: number, CustomerID: number, Date: Date, Quantity: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetItemPriceEx', { ItemID: ItemID, CustomerID: CustomerID, Date: Date, Quantity: Quantity });\r\n }\r\n \r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { GenericListEntity, BaseEntitiesResponse, BaseEntityResponse } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { DataLoadOptions } from \"@base/datalayer/DataLoadOptions\";\r\n\r\n@Injectable()\r\nexport class GenericListEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"GenericList\", api);\r\n }\r\n\r\n\r\n public GetList(DataSourceName: string, options?: DataLoadOptions): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetList', options ? { ...{ DataSourceName: DataSourceName }, ...options.GetLoadOptions() } : {DataSourceName:DataSourceName});\r\n }\r\n \r\n public GetByValue(DataSourceName: string, Value: string): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetByValue', { DataSourceName: DataSourceName, Value: Value });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, LoginParams, SessionEntity, BaseResponse, CredentialActivityStatus,\r\n PasswordRecoveryParams, CredentialExternalInfo, WebAPICredentialInfo, \r\n CredentialCheckResponse, SaveCredentialsParams, CredentialsCheckResponse } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { EnumNotificationDeliveryOptions, EnumMFAMethods } from \"../framework/sysenums.enum\";\r\n\r\n\r\n@Injectable()\r\nexport class LoginEndpoint extends BaseEndpoint\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService)\r\n {\r\n super(\"Login\", api);\r\n }\r\n\r\n public Login(Params: LoginParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'Login', Params);\r\n }\r\n\r\n public ChangePasswordExpired(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePasswordExpired', Params);\r\n }\r\n\r\n public Logout(): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'Logout');\r\n }\r\n \r\n public VerifyPasswordComplexity(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'VerifyPasswordComplexity', Params);\r\n }\r\n\r\n public ChangePassword(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePassword', Params);\r\n }\r\n\r\n public RecoverPassword(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'RecoverPassword', Params);\r\n }\r\n\r\n public VerifyRecoveryToken(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'VerifyRecoveryToken', Params);\r\n }\r\n\r\n public ChangePasswordByToken(Params: PasswordRecoveryParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ChangePasswordByToken', Params);\r\n }\r\n\r\n public SendOtp(Params: LoginParams): Observable\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SendOtp', Params);\r\n }\r\n\r\n public GetCredentials(CredentialID: number, Type: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetCredentials', { CredentialID: CredentialID, Type: Type });\r\n }\r\n\r\n public GetExternalInfo(CredentialID: number, Type: number): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetExternalInfo', { CredentialID: CredentialID, Type: Type });\r\n }\r\n\r\n public GenerateRandomPassword(): Observable>\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GenerateRandomPassword');\r\n }\r\n\r\n public SaveSessionCredentials(CredentialID: number, UserName: string, Password: string, Type: number, MFAMethod: EnumMFAMethods): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'SaveCredentials', { CredentialID: CredentialID, UserName: UserName, Password: Password, Type: Type, MFAMethod: MFAMethod });\r\n }\r\n\r\n public SaveCredentials(params: SaveCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveCredentials', params);\r\n }\r\n\r\n public SetCredentialIsActive(CredentialID: number, IsActive: boolean): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'SetCredentialIsActive', { CredentialID: CredentialID, IsActive: IsActive });\r\n }\r\n\r\n public UnlockCredentials(CredentialID: number): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'UnlockCredentials', { CredentialID: CredentialID });\r\n }\r\n\r\n public WelcomeUser(CredentialID: number, DeliveryOptions: EnumNotificationDeliveryOptions, Address: string,Language: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'WelcomeUser', { CredentialID: CredentialID, DeliveryOptions: DeliveryOptions, Address: Address, Language: Language});\r\n }\r\n\r\n public CheckUserName(Params: LoginParams): Observable>\r\n {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckUserName', Params);\r\n }\r\n\r\n public ChangeLanguage(Language: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ChangeLanguage', { Language: Language});\r\n }\r\n\r\n public ImpersonateLogin(credentialID: number): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ImpersonateLogin', { credentialID: credentialID });\r\n }\r\n}\r\n","import { HttpContext } from '@angular/common/http';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, BaseResponse, GenericListEntity, Notification, NotificationListParams, PushMessageListParams } from \"@base/entities/BaseEntities\";\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable, ReplaySubject, tap } from \"rxjs\";\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class PushMessageEndpoint extends BaseEndpointCRUD {\r\n \r\n private _notificationReadSubject = new ReplaySubject(1);\r\n public NotificationRead$ = this._notificationReadSubject.asObservable();\r\n\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"PushMessage\", api);\r\n }\r\n \r\n public GetPushMessages(Params: PushMessageListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetPushMessages', Params, options?.GetLoadOptions());\r\n }\r\n public GetPushMessagesUnread(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPushMessagesUnread', undefined, undefined, undefined,\r\n { 'ignoreLoadingBar': 'true' }, new HttpContext().set(SysGlobals.IgnoreSessionRefreshRequestToken, true));\r\n }\r\n public ReadPushNotification(notificationID: number): Observable {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ReadPushMessage', null, { notificationID: notificationID })\r\n .pipe(tap(() => this._notificationReadSubject.next(true)));\r\n }\r\n}\r\n","import { BaseDataResponse } from '../../base/entities/BaseEntities';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseEntitiesResponse, BaseEntityResponse, BaseResponse, CompanyInfo, KeyValueEntity, SystemOptionEntity} from '@base/entities/BaseEntities';\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class SystemOptionsEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"SystemOptions\", api);\r\n }\r\n\r\n public GetOptions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetOptions');\r\n }\r\n\r\n public SaveOptions(options: SystemOptionEntity[]): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SaveOptions', options, undefined);\r\n }\r\n\r\n}\r\n","import { BaseDataResponse } from './../../base/entities/BaseEntities';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport {BaseEntitiesResponse, BaseEntityResponse, BaseResponse, CompanyInfo, KeyValueEntity, SystemOptionEntity} from '@base/entities/BaseEntities';\r\nimport { BaseEndpoint } from \"@base/endpoint/BaseEndpoint\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n@Injectable()\r\nexport class SystemEndpoint extends BaseEndpoint \r\n{\r\n public constructor(api: APIGatewayService)\r\n {\r\n super(\"System\", api);\r\n }\r\n \r\n\r\n //Get company info\r\n public GetCompanyInfo(): Observable>\r\n {\r\n return this.api.ExecuteGetAction(\"System\", \"CompanyInfo\");\r\n }\r\n\r\n //Get the settings\r\n public GetSystemOptions(ModuleName: string | null = null): Observable>\r\n {\r\n return this.api.ExecuteGetAction(\"System\", \"SystemOptions\", { ModuleName: ModuleName });\r\n }\r\n public StoreMID(mid: string): Observable\r\n {\r\n return this.api.ExecuteGetAction(\"System\", \"StoreMID\", { MID: mid } );\r\n }\r\n\r\n //Keep session alive\r\n public KeepAlive(): Observable\r\n {\r\n return this.api.ExecuteGetAction(\"System\", \"KeepAlive\");\r\n }\r\n\r\n public GetEntitiesResources(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetEntitiesResources');\r\n }\r\n}\r\n","import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ComponentFactoryResolver, ComponentRef, Injectable, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseDataSourceAbstract } from '@m4u-angular/base/datalayer/BaseDataSourceAbstract';\r\nimport { BottomSheetContextMenuComponent } from '@m4u-angular/ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component';\r\nimport { BottomSheetListComponent } from '@m4u-angular/ui/components/bottom-sheet-list/bottom-sheet-list.component';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { EnumWindowSizes } from './sysenums.enum';\r\n\r\nexport class BottomSheetContentParams {\r\n Name: string = 'Default';\r\n Content: Type | TemplateRef;\r\n Title: string;\r\n Class: string;\r\n ContentParams?: any;\r\n Height?: EnumWindowSizes;\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport class BottomSheetListParams {\r\n Title: string;\r\n DataSource: BaseDataSourceAbstract | any[];\r\n IsMultiSelection: boolean;\r\n ValueExpr: string = 'EntryID';\r\n DisplayExpr: string | ((item) => string) = 'Name';\r\n ListTemplate: TemplateRef;\r\n Value: any;\r\n IsSearchEnabled: boolean;\r\n SearchExpr: string[];\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport class BottomSheetContextMenuParams {\r\n Title: string;\r\n Items: ContextMenuElement[];\r\n OnCompleted: (e) => void;\r\n OnCanceled: () => void;\r\n}\r\n\r\nexport interface IBottomSheetComponent {\r\n Context: BottomSheetDialogComponent;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BottomSheetService {\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) { }\r\n\r\n Show(contentParams: BottomSheetContentParams, keepAlive?: boolean) {\r\n const bottomSheet = this.CreateBottomSheetInstance();\r\n const bottomSheetDialog = bottomSheet.instance;\r\n bottomSheetDialog.ContentPortal = this.ResolveContent(contentParams.Content);\r\n bottomSheetDialog.Title = contentParams.Title;\r\n bottomSheetDialog.Class = contentParams.Class;\r\n bottomSheetDialog.ContentParams = {\r\n ...contentParams.ContentParams,\r\n Context: bottomSheetDialog\r\n };\r\n bottomSheetDialog.Height = contentParams.Height || EnumWindowSizes.WindowAutoSize;\r\n bottomSheetDialog.OnClose = () => {\r\n !keepAlive && bottomSheet.destroy();\r\n return true;\r\n };\r\n \r\n const randomName = Math.random().toString(36).substring(2, 5);\r\n bottomSheetDialog.ComponentName = `${bottomSheetDialog.ComponentName}_${contentParams.Name}_${randomName}`;\r\n\r\n bottomSheetDialog.ShowBottomSheet(contentParams.OnCompleted, contentParams.OnCanceled);\r\n }\r\n\r\n ShowList(listParams: BottomSheetListParams) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'BottomSheetList';\r\n contentParams.Content = BottomSheetListComponent;\r\n contentParams.Title = listParams.Title;\r\n contentParams.ContentParams = {\r\n ListParams: listParams\r\n };\r\n contentParams.OnCompleted = listParams.OnCompleted;\r\n contentParams.OnCanceled = listParams.OnCanceled;\r\n\r\n this.Show(contentParams);\r\n }\r\n\r\n ShowContextMenu(contextMenuParams: BottomSheetContextMenuParams) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'BottomSheetContextMenu';\r\n contentParams.Content = BottomSheetContextMenuComponent;\r\n contentParams.Title = contextMenuParams.Title;\r\n contentParams.ContentParams = {\r\n MenuItems: contextMenuParams.Items\r\n };\r\n contentParams.OnCompleted = contextMenuParams.OnCompleted;\r\n contentParams.OnCanceled = contextMenuParams.OnCanceled;\r\n\r\n this.Show(contentParams);\r\n }\r\n\r\n private CreateBottomSheetInstance(): ComponentRef {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(BottomSheetDialogComponent);\r\n const bottomSheetDialogComponent = this.ViewContainerRef.createComponent(componentFactory);\r\n return bottomSheetDialogComponent;\r\n }\r\n\r\n private ResolveContent(content: Type | TemplateRef): Portal {\r\n return content instanceof TemplateRef\r\n ? new TemplatePortal(content, this.ViewContainerRef)\r\n : new ComponentPortal(content, this.ViewContainerRef, AppInjector, this.componentFactoryResolver);\r\n }\r\n\r\n}","import { Injectable } from '@angular/core';\r\nimport { CanDeactivate } from '@angular/router';\r\nimport { BaseEntity, BaseState } from \"../../base/entities/BaseEntities\";\r\nimport { BasePageComponent } from \"../../base/component/BasePageComponent\";\r\nimport { ResourcesService } from './resources.service';\r\nimport { MessageBoxOptions } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { EnumMessageBoxTypes } from './sysenums.enum';\r\nimport { FrameworkService } from './framework.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport {UiService} from '@core/framework/ui.service';\r\nimport { of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class ConfirmCancelGuard implements CanDeactivate> {\r\n constructor(private framework: FrameworkService, private resourceService: ResourcesService, private sysEvents: SysEventsService, private ui: UiService) {\r\n\r\n }\r\n canDeactivate(page: BasePageComponent) {\r\n if (page instanceof BasePageCRUDComponent && !page.OnIsDirtyDisabled() && page.IsDirty) {\r\n const options = new MessageBoxOptions(EnumMessageBoxTypes.YesNo, this.resourceService.RC('titleLeavePageConfirmation'));\r\n this.ui.OpenMessageBox(options);\r\n return this.sysEvents.CloseMessageBoxSubject;\r\n }\r\n return of(true);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { SessionService } from './session.service';\r\nimport { ScreenService } from './screen.service';\r\nimport { FieldFormComponent } from '@ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { Utils } from '../helpers/Utils';\r\nimport Validator from \"devextreme/ui/validator\";\r\nimport { BaseCustomizationElement, ComponentCustomization, FieldCustomizationElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Injectable()\r\nexport class CustomizationService {\r\n FieldsCustomizations: { [key: string]: FieldCustomizationElement[] } = {};\r\n ComponentsCustomizations: { [key: string]: ComponentCustomization[] } = {};\r\n\r\n constructor(private screenService: ScreenService,\r\n private sessionService: SessionService) {\r\n }\r\n\r\n /* Components customization */\r\n\r\n SetComponentCustomizations(components: any[], parentComponentName: string) {\r\n components.forEach(x => {\r\n let customizations = this.GetComponentCustomizations(x, parentComponentName);\r\n if (!customizations.length) return;\r\n\r\n if (x instanceof DxDataGridComponent) {\r\n //Separate customizations for columns and all the grid\r\n const [columnsCustomizations, gridCustomizations] = this.GetSeparatedGridCustomizations(customizations);\r\n //Hide grid columns\r\n this.HideGridColumns(x, columnsCustomizations);\r\n //Set customizations as grid customizations to check if need to hide all the grid\r\n customizations = gridCustomizations;\r\n }\r\n if (this.IsNeedToHideElement(customizations)) x.visible = false;\r\n });\r\n }\r\n\r\n GetComponentCustomizations(component: any, parentComponentName: string) {\r\n const componentName = component.Name;\r\n //Validate name is set - throw a clear exception to help find the component\r\n if (!componentName) {\r\n const componentType = component instanceof DxDataGridComponent\r\n ? 'data grid' : component.hasOwnProperty('index')\r\n ? 'tab' : 'section';\r\n throw new Error(`You forgot to define a name for some ${componentType} in ${parentComponentName} component`);\r\n }\r\n\r\n const componentKey = `${parentComponentName}_${componentName}`;\r\n\r\n if (!this.ComponentsCustomizations[componentKey]) {\r\n const fieldCustomizations = SysGlobals.ComponentCustomizations\r\n ? SysGlobals.ComponentCustomizations\r\n .filter(this.FilterCustomizations(parentComponentName, componentName))\r\n : [];\r\n this.ComponentsCustomizations[componentKey] = fieldCustomizations;\r\n }\r\n\r\n return this.ComponentsCustomizations[componentKey];\r\n }\r\n\r\n GetSeparatedGridCustomizations(customizations: ComponentCustomization[]) {\r\n return customizations\r\n .reduce((result, element) => {\r\n result[!!element.Filter.Columns ? 0 : 1].push(element);\r\n return result;\r\n }, [[], []]);\r\n }\r\n\r\n HideGridColumns(grid: DxDataGridComponent, customizations: ComponentCustomization[]) {\r\n //Get column names that need to hide\r\n const columns = grid.columns.filter((column: any) => {\r\n const columnCustomizations = customizations\r\n .filter(c => c.Filter.Columns && c.Filter.Columns.find(z => z == column.dataField));\r\n return this.IsNeedToHideElement(columnCustomizations);\r\n }).map((x: any) => x.dataField);\r\n\r\n if (columns.length) {\r\n //Remove columns that need to hide from grid\r\n const updatedColumns = grid.columns\r\n .filter((c: any) => columns.indexOf(c.dataField) < 0);\r\n grid.instance.option('columns', updatedColumns);\r\n }\r\n }\r\n\r\n /* Fields customization */\r\n\r\n public SetFieldDefaultValue(fieldComponent: FieldFormComponent) {\r\n //Skip\r\n const relevantCustomizations = this.GetRelevantCustomizations(fieldComponent);\r\n if (!relevantCustomizations.length) return;\r\n\r\n //Get default value\r\n const oDefaults = relevantCustomizations.filter(x => x.Logic.DefaultValue != undefined);\r\n if (!oDefaults.length) return;\r\n\r\n //Get control\r\n const control = fieldComponent.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n //Set value to control\r\n if (!control.value) control.value = oDefaults[oDefaults.length - 1].Logic.DefaultValue;\r\n }\r\n\r\n //Configures the customizations\r\n public SetFieldCustomizations(fieldComponent: FieldFormComponent) {\r\n //Get customizations\r\n const relevantCustomizations = this.GetRelevantCustomizations(fieldComponent);\r\n if (!relevantCustomizations.length) return;\r\n\r\n //Set label\r\n const oLabels = relevantCustomizations.filter(x => !Utils.IsEmpty(x.Logic.Label));\r\n if (oLabels.length) fieldComponent.Label = oLabels[oLabels.length - 1].Logic.Label;\r\n\r\n //Get relevant editor control\r\n //If none exists, the rest of the customizations do not apply\r\n const control = fieldComponent.GetEditorControl();\r\n if (control == undefined) return;\r\n\r\n //Get hide lists values customizations\r\n const oFieldFilters = relevantCustomizations.filter(x => x.Logic.HideValues != undefined);\r\n\r\n //Hide\r\n if (!oFieldFilters.length && this.IsNeedToHideElement(relevantCustomizations)) fieldComponent.IsHide = true;\r\n\r\n //Hide lists values by text\r\n if (oFieldFilters.length && control.items && this.IsNeedToHideElement(relevantCustomizations)) {\r\n control.items = control.items.filter(x => oFieldFilters[oFieldFilters.length - 1].Logic.HideValues.indexOf(x.Text) < 0);\r\n }\r\n\r\n //Get instance, rules, and validator\r\n const oElement = control.instance.element();\r\n let validatorInstance = Validator.getInstance(oElement) as Validator;\r\n\r\n //Make readonly\r\n if (relevantCustomizations.filter(x => x.Logic.ReadOnly).length > 0) control.readOnly = true;\r\n\r\n //Set mandatory rule\r\n const oMandatory = relevantCustomizations.filter(x => x.Logic.Required);\r\n if (oMandatory.length) {\r\n if (!validatorInstance) validatorInstance = new Validator(oElement, {});\r\n const rules = validatorInstance.option(\"validationRules\");\r\n rules.push({ type: \"required\" });\r\n validatorInstance.option(\"validationRules\", rules);\r\n }\r\n\r\n //Set custom validation rules\r\n const oCustomValidations = relevantCustomizations.filter(x => x.Logic.ValidationFunction);\r\n if (oCustomValidations.length) {\r\n if (!validatorInstance) validatorInstance = new Validator(oElement, {});\r\n const rules = validatorInstance.option(\"validationRules\") as any[];\r\n oCustomValidations.forEach(oValidation => rules.push(\r\n {\r\n type: \"custom\",\r\n validationCallback: this.OnFieldValidation,\r\n message: oValidation.Logic.ValidationMessage,\r\n ValidationFunction: oValidation.Logic.ValidationFunction\r\n }));\r\n validatorInstance.option(\"validationRules\", rules);\r\n }\r\n }\r\n\r\n OnFieldValidation(e): boolean {\r\n return e.rule.ValidationFunction(e.value, SysGlobals.CurrentEntity, SysGlobals.CurrentState);\r\n }\r\n\r\n //Returns the relevant customizations for this field\r\n private GetRelevantCustomizations(fieldComponent: FieldFormComponent): FieldCustomizationElement[] {\r\n //Validate component is set - throw a clear exception to help find the component\r\n if (fieldComponent.Component == undefined || fieldComponent.Name == undefined) {\r\n throw new Error(`You forgot to define a component binding or name for this field - ${fieldComponent.Name != undefined ? fieldComponent.Name : fieldComponent.Label}`);\r\n }\r\n\r\n const fieldKey = `${fieldComponent.Component.ComponentStateName}_${fieldComponent.Name}`;\r\n\r\n if (!this.FieldsCustomizations[fieldKey]) {\r\n const fieldCustomizations = SysGlobals.FieldCustomizations\r\n ? SysGlobals.FieldCustomizations\r\n .filter(this.FilterCustomizations(fieldComponent.Component.ComponentStateName, fieldComponent.Name))\r\n : [];\r\n this.FieldsCustomizations[fieldKey] = fieldCustomizations;\r\n }\r\n\r\n return this.FieldsCustomizations[fieldKey];\r\n }\r\n\r\n /* Common functions */\r\n\r\n private FilterCustomizations(componentName: string, elementName: string) {\r\n return x => {\r\n if (!x.Filter.Component || !x.Filter.Name) return false;\r\n\r\n //Check component\r\n if (x.Filter.Component != '*') {\r\n if (Array.isArray(x.Filter.Component)) {\r\n if (!x.Filter.Component.find(z => z == componentName)) return false;\r\n } else {\r\n if (x.Filter.Component != componentName) return false;\r\n }\r\n }\r\n\r\n //Check element\r\n if (x.Filter.Name != '*') {\r\n if (Array.isArray(x.Filter.Name)) {\r\n if (!x.Filter.Name.find(z => z == elementName)) return false;\r\n } else {\r\n if (x.Filter.Name != elementName) return false;\r\n }\r\n }\r\n\r\n //Check user\r\n if (x.Filter.User && (x.Filter.User as any) != '*') {\r\n if (Array.isArray(x.Filter.User)) {\r\n if (!x.Filter.User.find(z => z == this.sessionService.CurrentUserID)) return false;\r\n } else {\r\n if (x.Filter.User != this.sessionService.CurrentUserID) return false;\r\n }\r\n }\r\n\r\n //If got here - means customization applies here\r\n return true;\r\n };\r\n }\r\n\r\n IsNeedToHideElement(customizations: BaseCustomizationElement[]) {\r\n return customizations.filter(c => c.Logic.Hide).length\r\n || (this.screenService.IsDesktop() && customizations.filter(c => c.Logic.HideOnDesktop).length)\r\n || (this.screenService.IsMobile() && customizations.filter(c => c.Logic.HideOnMobile).length)\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport DateBox from 'devextreme/ui/date_box';\r\nimport ListBox from 'devextreme/ui/list';\r\nimport NumberBox from 'devextreme/ui/number_box';\r\nimport Popup from 'devextreme/ui/popup';\r\nimport RadioGroup from 'devextreme/ui/radio_group';\r\nimport SelectBox from 'devextreme/ui/select_box';\r\nimport TagBox from 'devextreme/ui/tag_box';\r\nimport TextArea from 'devextreme/ui/text_area';\r\nimport TextBox from 'devextreme/ui/text_box';\r\nimport Chart from 'devextreme/viz/chart';\r\nimport Funnel from 'devextreme/viz/funnel';\r\nimport PieChart from 'devextreme/viz/pie_chart';\r\nimport CheckBox from 'devextreme/ui/check_box';\r\nimport LoadPanel from 'devextreme/ui/load_panel';\r\nimport DropDownButton from 'devextreme/ui/drop_down_button';\r\nimport TreeList from 'devextreme/ui/tree_list';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { SetGridDefaults } from '@base/grid/Grid.defaults';\r\nimport { FrameworkService } from './framework.service';\r\nimport { RC } from './resources.service';\r\nimport globalConfig from 'devextreme/core/config';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport repaintFloatingActionButton from 'devextreme/ui/speed_dial_action/repaint_floating_action_button';\r\nimport dxValidator from 'devextreme/ui/validator';\r\nimport { BottomSheetListParams, BottomSheetService } from './bottom-sheet.service';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ScreenService } from './screen.service';\r\n\r\n@Injectable()\r\nexport class DevExpressService {\r\n //Load DevExpress stuff\r\n public InitializeDevExpress(framework: FrameworkService) {\r\n const screenService = AppInjector.get(ScreenService);\r\n\r\n //Defaults for grid\r\n SetGridDefaults();\r\n\r\n this.SetFloatingButtonsDefault();\r\n\r\n //Defaults for textboxes \r\n TextBox.defaultOptions({\r\n options:\r\n {\r\n valueChangeEvent: 'input',\r\n inputAttr: { autocomplete: 'new-password' },\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n onKeyDown: !screenService.IsDesktop() ? undefined : (e) => this.OnChangeInputDirection(e),\r\n validationMessageMode: 'always',\r\n stylingMode: 'underlined',\r\n onContentReady: (e) => {\r\n const element = e?.component?.element();\r\n element && element.addEventListener('wheel', (e) => {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n });\r\n }\r\n }\r\n });\r\n\r\n TextArea.defaultOptions({\r\n options:\r\n {\r\n valueChangeEvent: 'input',\r\n autoResizeEnabled: true,\r\n stylingMode: 'underlined',\r\n //minHeight: 30,\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n onKeyDown: !screenService.IsDesktop() ? undefined : (e) => this.OnChangeInputDirection(e),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Defaults for numbertboxes\r\n NumberBox.defaultOptions({\r\n options:\r\n {\r\n step: 0,\r\n onFocusIn: !screenService.IsDesktop() ? undefined : (e) => this.OnFocusIn(e),\r\n stylingMode: 'underlined',\r\n onKeyDown: (e) => {\r\n if (e.event.code === 'ArrowDown' || e.event.code === 'ArrowUp') {\r\n e.event.preventDefault();\r\n e.event.stopImmediatePropagation();\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n //Set default options for dates\r\n DateBox.defaultOptions({\r\n options:\r\n {\r\n type: 'date',\r\n pickerType: screenService.IsMobile() || screenService.IsTablet() ? 'native' : 'calendar',\r\n displayFormat: framework.CompanyInfo.DateFormatLong,\r\n useMaskBehavior: true,\r\n min: '1900-01-01',\r\n max: '2100-12-31',\r\n stylingMode: 'underlined',\r\n calendarOptions: { showTodayButton: true },\r\n dropDownOptions: { container: '.app-container' },\r\n onOpened: (e: any) => {\r\n const todayButton = this.GetDateBoxTodayButton(e);\r\n todayButton && todayButton.addEventListener('click', () => {\r\n this.SetTodaysDate(e);\r\n this.OnCloseDateBox(e);\r\n });\r\n },\r\n onClosed: (e) => {\r\n const todayButton = this.GetDateBoxTodayButton(e);\r\n todayButton && todayButton.removeEventListener('click', () => {\r\n this.SetTodaysDate(e);\r\n this.OnCloseDateBox(e);\r\n });\r\n },\r\n onKeyDown: (e) => {\r\n if (e.event.code === 'ArrowDown' || e.event.code === 'ArrowUp') {\r\n e.event.preventDefault();\r\n e.event.stopImmediatePropagation();\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n },\r\n });\r\n\r\n\r\n\r\n\r\n //Set default options for select boxes\r\n SelectBox.defaultOptions({\r\n options:\r\n {\r\n inputAttr: { autocomplete: 'new-password' },\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n placeholder: '',\r\n stylingMode: 'underlined',\r\n dropDownOptions: { container: '.app-container' },\r\n searchTimeout: 100, //Without this, tabbing works bad since value is not looked up\r\n onOpened: (e: any) => this.ShowBottomSheetList(e, false),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Set default options for select boxes\r\n TagBox.defaultOptions(\r\n {\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n noDataText: RC('genNoData'),\r\n placeholder: '',\r\n showSelectionControls: true,\r\n multiline: false,\r\n stylingMode: 'underlined',\r\n maxDisplayedTags: screenService.IsDesktop() ? 8 : 4,\r\n applyValueMode: 'useButtons',\r\n dropDownOptions: { container: '.app-container' },\r\n onOpened: (e: any) => this.ShowBottomSheetList(e, true),\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n //Set default options for list boxes\r\n ListBox.defaultOptions({\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n noDataText: RC('genNoData'),\r\n pageLoadMode: 'scrollBottom',\r\n activeStateEnabled: false,\r\n stylingMode: 'underlined',\r\n searchTimeout: 500,\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Set default options for select boxes\r\n RadioGroup.defaultOptions({\r\n options:\r\n {\r\n displayExpr: 'Text',\r\n valueExpr: 'Value',\r\n layout: 'horizontal',\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n\r\n //Basically just for messageboxes\r\n Popup.defaultOptions({\r\n options:\r\n {\r\n showTitle: true,\r\n showCloseButton: true,\r\n dragEnabled: false,\r\n hideOnOutsideClick: true,\r\n container: '.app-container'\r\n }\r\n });\r\n\r\n\r\n\r\n\r\n PieChart.defaultOptions({\r\n options:\r\n {\r\n animation:\r\n {\r\n duration: 3000\r\n },\r\n resolveLabelOverlapping: 'shift',\r\n type: 'doughnut',\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: screenService.IsDesktop()\r\n },\r\n title:\r\n {\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n }\r\n }\r\n });\r\n\r\n Chart.defaultOptions({\r\n options:\r\n {\r\n animation:\r\n {\r\n duration: 3000\r\n },\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: screenService.IsDesktop()\r\n },\r\n title:\r\n {\r\n horizontalAlignment: 'center',\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n },\r\n\r\n argumentAxis:\r\n {\r\n label:\r\n {\r\n overlappingBehavior: 'rotate',\r\n rotationAngle: 270\r\n }\r\n }\r\n }\r\n });\r\n\r\n Funnel.defaultOptions({\r\n options:\r\n {\r\n palette: 'Soft Blue',\r\n legend:\r\n {\r\n visible: false\r\n },\r\n title:\r\n {\r\n horizontalAlignment: 'center',\r\n font:\r\n {\r\n size: '16px',\r\n weight: 600\r\n }\r\n },\r\n tooltip:\r\n {\r\n enabled: screenService.IsDesktop()\r\n },\r\n }\r\n });\r\n\r\n CheckBox.defaultOptions({\r\n options:\r\n {\r\n onInitialized: function () {\r\n if ((this as any)._options.option('value') == null) {\r\n (this as any)._options.option('value', false);\r\n }\r\n },\r\n validationMessageMode: 'always'\r\n }\r\n });\r\n\r\n LoadPanel.defaultOptions({\r\n options:\r\n {\r\n showIndicator: true,\r\n showPane: true,\r\n shading: true,\r\n message: RC('msgLoading'),\r\n shadingColor: 'rgba(0,0,0,0.4)'\r\n }\r\n });\r\n\r\n DropDownButton.defaultOptions({\r\n options:\r\n {\r\n showArrowIcon: screenService.IsDesktop()\r\n }\r\n });\r\n\r\n TreeList.defaultOptions({\r\n options: {\r\n showBorders: true\r\n }\r\n });\r\n\r\n dxValidator.defaultOptions({\r\n options: {\r\n validationRules: [{\r\n type: 'required',\r\n message: RC('errorRequiredMessage')\r\n }]\r\n }\r\n });\r\n }\r\n\r\n public SetFloatingButtonsDefault() {\r\n globalConfig({\r\n floatingActionButtonConfig: {\r\n icon: 'menu',\r\n position: SysGlobals.Language == EnumLanguages.Hebrew\r\n ? {\r\n at: 'left bottom',\r\n my: 'left bottom',\r\n offset: '16 -16'\r\n }\r\n : undefined\r\n }\r\n });\r\n\r\n repaintFloatingActionButton();\r\n }\r\n\r\n private OnFocusIn(e) {\r\n const oElement = e.element.querySelector('input');\r\n if (oElement != undefined) oElement.select();\r\n }\r\n\r\n private OnChangeInputDirection(e) {\r\n const event = e.event;\r\n if (event.ctrlKey && event.key === 'Shift') {\r\n const bRTL = event.location === 2 ? true : false;\r\n e.component.option('rtlEnabled', bRTL);\r\n e.component.option('inputAttr',\r\n {\r\n class: bRTL ? 'm4u-force-text-right' : 'm4u-force-text-left',\r\n dir: bRTL ? 'rtl' : 'ltr'\r\n });\r\n e.component.focus();\r\n }\r\n }\r\n\r\n private GetDateBoxTodayButton(e: any) {\r\n const popupContentId = e.component && e.component._popupContentId;\r\n if (!popupContentId) return null;\r\n const popupContentSelector = `#${popupContentId}.dx-popup-content`;\r\n let todayButton = document.querySelector(`${popupContentSelector} .dx-calendar-today-button`);\r\n if (!todayButton) {\r\n todayButton = document.querySelector(`${popupContentSelector} + .dx-popup-bottom .dx-button-today`);\r\n }\r\n return todayButton;\r\n }\r\n\r\n private SetTodaysDate(e: any) {\r\n let todaysDate = new Date();\r\n const originalDate = new Date(e.component.option('value'));\r\n if (originalDate) {\r\n const originalHours = originalDate.getHours();\r\n const originalMinutes = originalDate.getMinutes();\r\n todaysDate.setHours(originalHours, originalMinutes);\r\n } else {\r\n todaysDate = DateHelpers.ToDateOnly(todaysDate);\r\n }\r\n e.component.option('value', todaysDate);\r\n }\r\n\r\n private OnCloseDateBox(e: any) {\r\n e.component && e.component.close();\r\n }\r\n\r\n private ShowBottomSheetList(e, isMultiSelection: boolean) {\r\n // Open as default select-box if it is Desktop view\r\n const detector = AppInjector.get(DeviceDetectorService);\r\n if (detector.isDesktop()) return;\r\n // Open as usual if dropDownOptions.showAsBottomSheet = false\r\n const dropDownOptions = e.component.option('dropDownOptions');\r\n if (dropDownOptions && dropDownOptions.hasOwnProperty('showAsBottomSheet') && !dropDownOptions.showAsBottomSheet) return;\r\n // Hide default select-box\r\n document.querySelector(`#${e.component._popupContentId}`).parentElement.style.display = 'none';\r\n e.component.option('opened', false);\r\n //(document.querySelector('.dx-selectbox-popup-wrapper .dx-overlay-content') as any).style.display = 'none';\r\n // Open as bottom sheet\r\n const bottomSheetService = AppInjector.get(BottomSheetService);\r\n const dataSource = e.component.option('dataSource') || e.component.option('items');\r\n\r\n const listParams = new BottomSheetListParams();\r\n listParams.Title = e.component.option('placeholder');\r\n listParams.DataSource = dataSource;\r\n listParams.IsMultiSelection = isMultiSelection;\r\n listParams.ValueExpr = e.component.option('valueExpr');\r\n listParams.DisplayExpr = e.component.option('displayExpr');\r\n listParams.Value = e.component.option('selectedItems') || [];\r\n listParams.IsSearchEnabled = e.component.option('searchEnabled');\r\n listParams.SearchExpr = e.component.option('searchExpr') || [e.component.option('displayExpr')];\r\n listParams.OnCompleted = (result) => {\r\n result.event && e.component._saveValueChangeEvent(result.event)\r\n e.component.option('value', result?.value);\r\n if (listParams.IsSearchEnabled) {\r\n e.component.option('searchEnabled', true);\r\n }\r\n e.component.close();\r\n };\r\n listParams.OnCanceled = () => {\r\n if (listParams.IsSearchEnabled) {\r\n e.component.option('searchEnabled', true);\r\n }\r\n e.component.close();\r\n };\r\n\r\n // Disable search directive and default search if bottom sheet list search enabled\r\n if (listParams.IsSearchEnabled) {\r\n setTimeout(() => e.component.option('searchEnabled', false));\r\n }\r\n\r\n bottomSheetService.ShowList(listParams);\r\n }\r\n}\r\n","import DataGrid from 'devextreme/ui/data_grid';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { RC } from '@m4u-angular/core/framework/resources.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\n\r\nexport function SetGridDefaults() {\r\n const Detector = AppInjector.get(DeviceDetectorService);\r\n DataGrid.defaultOptions\r\n ({\r\n options:\r\n {\r\n columnResizingMode: 'nextColumn',\r\n allowColumnResizing: true,\r\n allowColumnReordering: true,\r\n columnHidingEnabled: true,\r\n columnAutoWidth: true,\r\n dateSerializationFormat: 'yyyy-MM-dd',\r\n hoverStateEnabled: true,\r\n showBorders: true,\r\n showRowLines: true,\r\n renderAsync: true,\r\n\r\n stateStoring:\r\n {\r\n enabled: true,\r\n type: 'custom',\r\n savingTimeout: 1000,\r\n storageKey: '',\r\n\r\n customSave(state) {\r\n state.selectionFilter = state.selectedRowKeys = state.searchText = undefined;\r\n if (state.columns)\r\n for (const column of state.columns) {\r\n delete column.filterType;\r\n delete column.filterValues;\r\n delete column.filterValue;\r\n delete column.sortOrder;\r\n delete column.sortIndex;\r\n }\r\n localStorage.setItem(this.storageKey || 'storage', JSON.stringify(state));\r\n },\r\n customLoad() {\r\n return JSON.parse(localStorage.getItem(this.storageKey || 'storage'));\r\n }\r\n },\r\n\r\n columnChooser:\r\n {\r\n enabled: true,\r\n height: 400,\r\n mode: 'select',\r\n search: {\r\n enabled: true\r\n }\r\n },\r\n\r\n headerFilter:\r\n {\r\n height: 400,\r\n container: '.app-container',\r\n search: {\r\n enabled: true\r\n },\r\n visible: false\r\n },\r\n\r\n scrolling:\r\n {\r\n mode: 'infinite',\r\n preloadEnabled: true,\r\n useNative: false\r\n },\r\n\r\n export:\r\n {\r\n excelFilterEnabled: true,\r\n },\r\n\r\n remoteOperations:\r\n {\r\n filtering: true,\r\n paging: true,\r\n sorting: true,\r\n },\r\n\r\n\r\n editing:\r\n {\r\n useIcons: true,\r\n selectTextOnEditStart: !Detector.isMobile(),\r\n\r\n //Show as 2 columns even on small screens to make it more clear that is a row\r\n form:\r\n {\r\n colCountByScreen:\r\n {\r\n xs: 2\r\n }\r\n }\r\n },\r\n\r\n searchPanel: {\r\n width: '100%'\r\n },\r\n\r\n //Hide all items in the toolbar besides search (shown because of excel export, column chooser, add button)\r\n onToolbarPreparing: (e) => {\r\n const { items } = e.toolbarOptions;\r\n const newItems = items.filter(item => item.isCustom); // get custom items\r\n const instance = e.component.instance();\r\n\r\n if (instance.AllowCustomization) {\r\n const widget = items.find(x => x.name === 'columnChooserButton');\r\n widget.options.icon = 'm4u-icon m4u-icon-eye';\r\n newItems.push({\r\n ...widget,\r\n location: 'after'\r\n });\r\n }\r\n\r\n if (instance.option('searchPanel.visible')) {\r\n const widget = items.find(x => x.name === 'searchPanel');\r\n newItems.push({\r\n ...widget,\r\n location: 'center'\r\n });\r\n }\r\n\r\n if (instance.option('groupPanel.visible')) {\r\n instance.option('groupPanel.emptyPanelText', RC('lblGroupPanel'));\r\n const widget = items.find(x => x.name === 'groupPanel');\r\n\r\n //let groupingCount = 0;\r\n //for (var i = 0; i < instance.columnCount(); i++) {\r\n // const groupIndex = instance.columnOption(i, \"groupIndex\");\r\n // if (groupIndex != undefined && groupIndex >= 0) {\r\n // groupingCount++;\r\n // }\r\n //}\r\n //if (groupingCount === 0) {\r\n // const tooltip = document.createElement('div');\r\n // tooltip.classList.add('group-panel-tooltip-container');\r\n \r\n // const tooltipIcon = document.createElement('i');\r\n // tooltipIcon.classList.add('group-panel-tooltip-icon');\r\n // tooltipIcon.classList.add('mdi');\r\n // tooltipIcon.classList.add('mdi-information-outline');\r\n\r\n // const tooltipText = document.createElement('span');\r\n // tooltipText.classList.add('group-panel-tooltip-text');\r\n // tooltipText.append(RC('groupPanelTooltipText'));\r\n\r\n // tooltipIcon.appendChild(tooltipText);\r\n // tooltip.appendChild(tooltipIcon);\r\n \r\n // newItems.push({\r\n // name: 'tooltip',\r\n // options: {\r\n // icon: 'mdi mdi-information-outline',\r\n // widget: 'dxButton'\r\n // },\r\n // template: () => tooltip,\r\n // isCustom: true,\r\n // location: 'before'\r\n // });\r\n //}\r\n\r\n newItems.push({\r\n ...widget,\r\n location: 'before'\r\n });\r\n }\r\n\r\n if (!newItems.length) {\r\n e.element.classList.add('m4u-hidegridtoolbar');\r\n }\r\n\r\n e.toolbarOptions.items = newItems;\r\n },\r\n\r\n onContentReady: (e) => {\r\n const gridSummary = e.component.option('summary');\r\n let rowsCount = e.component.totalCount();\r\n rowsCount = rowsCount == -1 ? e.component.getVisibleRows().length : rowsCount;\r\n if (gridSummary && gridSummary.totalItems\r\n && gridSummary.totalItems.length && rowsCount > 0) e.element.classList.add('grid-has-summary');\r\n\r\n // this is official suggestion of devextreme support\r\n const columnChooserView = e.component.getView('columnChooserView');\r\n if (columnChooserView.element() && !columnChooserView._popupContainer) {\r\n columnChooserView._initializePopupContainer();\r\n columnChooserView.render();\r\n const position = SysGlobals.Language == EnumLanguages.Hebrew\r\n ? { of: e.element, at: 'left top', my: 'left top', offset: '0 50' }\r\n : { of: e.element, my: 'right top', at: 'right top', offset: '0 50' };\r\n columnChooserView._popupContainer.option('position', position);\r\n }\r\n },\r\n\r\n onRowPrepared: (e) => {\r\n if (e.rowType === 'group') {\r\n if (e.groupIndex > 0) {\r\n e.rowElement.classList.add('child-row');\r\n }\r\n if (e.isExpanded) e.rowElement.classList.add('row-expanded');\r\n }\r\n },\r\n\r\n onRowExpanded: (e) => {\r\n if (!e.key || (Array.isArray(e.key) && !e.key.every(i => i !== undefined))) return;\r\n\r\n const getItemByKey = (items: Array, key: Array) => {\r\n if (!(items && key)) {\r\n return undefined; \r\n }\r\n let item: any = { items: items };\r\n for (let i = 0; i < key.length && item; i++) {\r\n item = item.items.find(itm => itm.key === key[i]);\r\n }\r\n return item;\r\n };\r\n\r\n const expandRecursively = (grid, item, parentKey) => {\r\n if (!item) {\r\n return; \r\n }\r\n grid.expandRow(parentKey);\r\n const itemsCount = (item.items ? item.items.length : 0) + (item.collapsedItems ? item.collapsedItems.length : 0);\r\n\r\n if (itemsCount === 1) {\r\n if (item.items) {\r\n expandRecursively(grid, item.items[0], [...parentKey, item.items[0].key]);\r\n }\r\n if (item.collapsedItems) {\r\n expandRecursively(grid, item.collapsedItems[0], [...parentKey, item.collapsedItems[0].key]);\r\n }\r\n }\r\n };\r\n\r\n expandRecursively(e.component, getItemByKey(e.component.getDataSource()?.items(), e.key), e.key);\r\n },\r\n //Apply common properties on all columns\r\n customizeColumns(columns) {\r\n const screen = AppInjector.get(ScreenService);\r\n\r\n columns.forEach(oCol => {\r\n // Customize sorting and filtering\r\n if (oCol.allowSorting !== undefined) {\r\n oCol.allowFiltering = oCol.allowSorting;\r\n }\r\n\r\n if (oCol.search === undefined || !oCol.search.enabled) {\r\n oCol.search = {\r\n enabled: true\r\n };\r\n }\r\n\r\n //Take lookup columns\r\n if (oCol.lookup != undefined) {\r\n\r\n //Set default values\r\n if (oCol.lookup.valueExpr == undefined) oCol.lookup.valueExpr = 'Value';\r\n if (oCol.lookup.displayExpr == undefined) oCol.lookup.displayExpr = 'Text';\r\n\r\n //Take only columns with defined datasource, and ignore those where datasource is an array of values (usually coming from LIST())\r\n //Take columns that can be filtered\r\n if (oCol.allowFiltering && oCol.lookup.dataSource != undefined && !(oCol.lookup.dataSource instanceof Array)) {\r\n\r\n //Set the sorting for header filter from display expression\r\n oCol.lookup.dataSource =\r\n {\r\n store: oCol.lookup.dataSource,\r\n sort: oCol.lookup.displayExpr\r\n };\r\n }\r\n }\r\n\r\n //Init sub-settings for clearer code below\r\n if (oCol.formItem == undefined) oCol.formItem = {};\r\n if (oCol.editorOptions == undefined) oCol.editorOptions = {};\r\n\r\n\r\n //Hidden columns should not be shown in column chooser either\r\n //Use showInColumnChooser for \"system\" columns\r\n //if (oCol.showInColumnChooser == false) oCol.visible = false;\r\n\r\n //Hidden columns should not be shown in form mode either\r\n oCol.formItem.visible = oCol.visible;\r\n oCol.formItem.visibleIndex = oCol.visibleIndex;\r\n\r\n //Set format on editors as well\r\n if (oCol.format != undefined) {\r\n //Set for normal editors\r\n oCol.editorOptions.format = oCol.format;\r\n\r\n //Set for form editing mode\r\n oCol.formItem.format = oCol.format;\r\n }\r\n\r\n if (oCol.type === 'buttons') {\r\n oCol.cssClass = `${oCol.cssClass || ''} fixed-column`;\r\n oCol.minWidth = oCol.minWidth || 32;\r\n oCol.allowResizing = false;\r\n oCol.allowReordering = false;\r\n oCol.allowGrouping = false;\r\n }\r\n });\r\n },\r\n\r\n onCellPrepared: (e) => {\r\n //Add class to the boolean columns to change devexpress \"center\" alignment\r\n if (e.column.dataType === 'boolean') { // && (e.rowType === 'header' || (e.rowType === 'data' && e.row.isNewRow))) {\r\n e.cellElement.classList.add('dx-column-boolean-type');\r\n }\r\n if (e.column.dataType === 'number') {\r\n e.cellElement.classList.add('dx-column-number-type');\r\n\r\n const framework = AppInjector.get(FrameworkService);\r\n const formats = [framework.CompanyInfo.NumberPrice, framework.CompanyInfo.NumberSum,\r\n framework.CompanyInfo.NumberRate, framework.CompanyInfo.NumberPercent];\r\n if (formats.indexOf(e.column.format) >= 0) {\r\n e.cellElement.classList.add('dx-column-number-formatted');\r\n }\r\n }\r\n //Add tooltip to the header\r\n if (e.rowType === 'header' && e.column.caption) {\r\n e.cellElement.title = e.column.caption;\r\n }\r\n },\r\n\r\n onContextMenuPreparing: (e) => {\r\n if (e.target == 'header') {\r\n // e.items can be undefined\r\n if (!e.items) e.items = [];\r\n const grid = e.component;\r\n const gridInstance = grid.instance();\r\n const columns = grid.option('columns') as any[];\r\n const isAllowCustomization = (gridInstance as any).AllowCustomization;\r\n const isAllowAdvancedFilters = (gridInstance as any).AllowAdvancedFilters;\r\n\r\n if (isAllowCustomization) {\r\n\r\n // Add a Hide Column menu item\r\n if (e.column.allowHiding) {\r\n e.items.push({\r\n text: RC('lblHideColumn'),\r\n icon: ' mdi mdi-eye-off',\r\n onItemClick: () => {\r\n grid.columnOption(e.column.dataField, 'visible', false);\r\n grid.refresh();\r\n }\r\n });\r\n }\r\n\r\n e.items.push({\r\n text: RC('lblShowHiddenColumns'),\r\n icon: ' mdi mdi-eye',\r\n onItemClick: () => {\r\n columns.forEach(c => {\r\n if (!c.groupCellTemplate) grid.columnOption(c.dataField, 'visible', true);\r\n });\r\n grid.refresh();\r\n }\r\n });\r\n\r\n e.items.push({\r\n text: RC('lblColumnChooser'),\r\n icon: ' mdi mdi-cog',\r\n onItemClick: () => {\r\n gridInstance.option(\r\n {\r\n 'columnChooser.mode': 'select',\r\n 'columnChooser.search.enabled': true,\r\n });\r\n gridInstance.showColumnChooser();\r\n }\r\n });\r\n\r\n e.items.push({\r\n text: RC('lblRestoreDefaultView'),\r\n icon: ' mdi mdi-cog-refresh',\r\n onItemClick: () => {\r\n const storageKey = gridInstance.option('stateStoring.storageKey') || 'storage';\r\n localStorage.removeItem(storageKey);\r\n gridInstance.state({});\r\n }\r\n });\r\n }\r\n const filterVisible = gridInstance.option('headerFilter.visible');\r\n const { column } = e;\r\n\r\n if (isAllowAdvancedFilters) {\r\n e.items.push({\r\n text: filterVisible ? RC('lblHideGridFilter') : RC('lblShowGridFilter'),\r\n icon: ' mdi mdi-filter-variant',\r\n onItemClick: () => {\r\n gridInstance.option(\r\n {\r\n headerFilter: {\r\n visible: !filterVisible,\r\n search: {\r\n enabled: true\r\n }\r\n }\r\n });\r\n\r\n if (filterVisible) {\r\n gridInstance.clearFilter();\r\n } else {\r\n //show filter popup\r\n if (column.allowFiltering !== false) {\r\n gridInstance.getController('headerFilter').showHeaderFilterMenu(column.index);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n }\r\n });\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EntitySavedEventArgs } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\nexport class SavedEntityInfo {\r\n public Entity: BaseEntity;\r\n public Type: new () => BaseEntity;\r\n public Field: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntityService {\r\n\r\n private _savedEntity: SavedEntityInfo;\r\n private _isEnabled: boolean;\r\n private _field: string;\r\n\r\n constructor() {}\r\n\r\n Activate(field?: string) {\r\n if (!this._isEnabled) this._isEnabled = true;\r\n this._field = field;\r\n }\r\n\r\n SetLastSavedEntity(entitySavedArgs: EntitySavedEventArgs) {\r\n if (!this._isEnabled) return;\r\n\r\n this._savedEntity = new SavedEntityInfo();\r\n this._savedEntity.Entity = entitySavedArgs.Entity;\r\n this._savedEntity.Type = entitySavedArgs.Type;\r\n this._savedEntity.Field = this._field;\r\n }\r\n\r\n GetLastSavedEntity(field?: string, type?: new () => BaseEntity): SavedEntityInfo {\r\n if (!this._isEnabled) return new SavedEntityInfo;\r\n if ((field && this._savedEntity?.Field != field) || (type && this._savedEntity.Type != type)) {\r\n return;\r\n }\r\n\r\n const entity = { ...this._savedEntity };\r\n this.Deactivate();\r\n \r\n return entity;\r\n }\r\n\r\n private Deactivate() {\r\n this._savedEntity = null;\r\n this._isEnabled = false;\r\n this._field = null;\r\n }\r\n}","export const M4UCities : string[] =\r\n [\r\n 'אבו ג\\'ווייעד (שבט)',\r\n 'אבו גוש',\r\n 'אבו סנאן',\r\n 'אבו סריחאן (שבט)',\r\n 'אבו עבדון (שבט)',\r\n 'אבו עמאר (שבט)',\r\n 'אבו עמרה (שבט)',\r\n 'אבו קורינאת (שבט)',\r\n 'אבו קרינאת (יישוב)',\r\n 'אבו רובייעה (שבט)',\r\n 'אבו רוקייק (שבט)',\r\n 'אבו תלול',\r\n 'אבטין',\r\n 'אבטליון',\r\n 'אביאל',\r\n 'אביבים',\r\n 'אביגדור',\r\n 'אביחיל',\r\n 'אביטל',\r\n 'אביעזר',\r\n 'אבירים',\r\n 'אבן יהודה',\r\n 'אבן מנחם',\r\n 'אבן ספיר',\r\n 'אבן שמואל',\r\n 'אבני איתן',\r\n 'אבני חפץ',\r\n 'אבנת',\r\n 'אבשלום',\r\n 'אדורה',\r\n 'אדירים',\r\n 'אדמית',\r\n 'אדרת',\r\n 'אודים',\r\n 'אודם',\r\n 'אוהד',\r\n 'אום אל-פחם',\r\n 'אום אל-קוטוף',\r\n 'אום בטין',\r\n 'אומן',\r\n 'אומץ',\r\n 'אופקים',\r\n 'אור הגנוז',\r\n 'אור הנר',\r\n 'אור יהודה',\r\n 'אור עקיבא',\r\n 'אורה',\r\n 'אורות',\r\n 'אורטל',\r\n 'אורים',\r\n 'אורנים',\r\n 'אורנית',\r\n 'אושה',\r\n 'אזור',\r\n 'אחווה',\r\n 'אחוזם',\r\n 'אחוזת ברק',\r\n 'אחיהוד',\r\n 'אחיטוב',\r\n 'אחיסמך',\r\n 'אחיעזר',\r\n 'אטרש (שבט)',\r\n 'איבים',\r\n 'אייל',\r\n 'איילת השחר',\r\n 'אילון',\r\n 'אילות',\r\n 'אילניה',\r\n 'אילת',\r\n 'אירוס',\r\n 'איתמר',\r\n 'איתן',\r\n 'איתנים',\r\n 'אכסאל',\r\n 'אל סייד',\r\n 'אל-עזי',\r\n 'אל-עריאן',\r\n 'אל-רום',\r\n 'אלומה',\r\n 'אלומות',\r\n 'אלון הגליל',\r\n 'אלון מורה',\r\n 'אלון שבות',\r\n 'אלוני אבא',\r\n 'אלוני הבשן',\r\n 'אלוני יצחק',\r\n 'אלונים',\r\n 'אלי-עד',\r\n 'אליאב',\r\n 'אליכין',\r\n 'אליפז',\r\n 'אליפלט',\r\n 'אליקים',\r\n 'אלישיב',\r\n 'אלישמע',\r\n 'אלמגור',\r\n 'אלמוג',\r\n 'אלעד',\r\n 'אלעזר',\r\n 'אלפי מנשה',\r\n 'אלקוש',\r\n 'אלקנה',\r\n 'אמונים',\r\n 'אמירים',\r\n 'אמנון',\r\n 'אמציה',\r\n 'אניעם',\r\n 'אסד (שבט)',\r\n 'אספר',\r\n 'אעבלין',\r\n 'אעצם (שבט)',\r\n 'אפיניש (שבט)',\r\n 'אפיק',\r\n 'אפיקים',\r\n 'אפק',\r\n 'אפרת',\r\n 'ארבל',\r\n 'ארגמן',\r\n 'ארז',\r\n 'אריאל',\r\n 'ארסוף',\r\n 'אשבול',\r\n 'אשבל',\r\n 'אשדוד',\r\n 'אשדות יעקב (איחוד)',\r\n 'אשדות יעקב (מאוחד)',\r\n 'אשחר',\r\n 'אשכולות',\r\n 'אשל הנשיא',\r\n 'אשלים',\r\n 'אשקלון',\r\n 'אשרת',\r\n 'אשתאול',\r\n 'אתגר',\r\n 'באקה אל-גרביה',\r\n 'באר אורה',\r\n 'באר גנים',\r\n 'באר טוביה',\r\n 'באר יעקב',\r\n 'באר מילכה',\r\n 'באר שבע',\r\n 'בארות יצחק',\r\n 'בארותיים',\r\n 'בארי',\r\n 'בוסתן הגליל',\r\n 'בועיינה-נוג\\'ידאת',\r\n 'בוקעאתא',\r\n 'בורגתה',\r\n 'בחן',\r\n 'בטחה',\r\n 'ביצרון',\r\n 'ביר אל-מכסור',\r\n 'ביר הדאג\\'',\r\n 'ביריה',\r\n 'בית אורן',\r\n 'בית אל',\r\n 'בית אלעזרי',\r\n 'בית אלפא',\r\n 'בית אריה',\r\n 'בית ברל',\r\n 'בית ג\\'ן',\r\n 'בית גוברין',\r\n 'בית גמליאל',\r\n 'בית דגן',\r\n 'בית הגדי',\r\n 'בית הלוי',\r\n 'בית הלל',\r\n 'בית העמק',\r\n 'בית הערבה',\r\n 'בית השיטה',\r\n 'בית זיד',\r\n 'בית זית',\r\n 'בית זרע',\r\n 'בית חורון',\r\n 'בית חירות',\r\n 'בית חלקיה',\r\n 'בית חנן',\r\n 'בית חנניה',\r\n 'בית חשמונאי',\r\n 'בית יהושע',\r\n 'בית יוסף',\r\n 'בית ינאי',\r\n 'בית יצחק-שער חפר',\r\n 'בית לחם הגלילית',\r\n 'בית מאיר',\r\n 'בית נחמיה',\r\n 'בית ניר',\r\n 'בית נקופה',\r\n 'בית עובד',\r\n 'בית עוזיאל',\r\n 'בית עזרא',\r\n 'בית עריף',\r\n 'בית צבי',\r\n 'בית קמה',\r\n 'בית קשת',\r\n 'בית רבן',\r\n 'בית רימון',\r\n 'בית שאן',\r\n 'בית שמש',\r\n 'בית שערים',\r\n 'בית שקמה',\r\n 'ביתן אהרן',\r\n 'ביתר עילית',\r\n 'בלפוריה',\r\n 'בן זכאי',\r\n 'בן עמי',\r\n 'בן שמן (כפר נוער)',\r\n 'בן שמן (מושב)',\r\n 'בני ברק',\r\n 'בני דקלים',\r\n 'בני דרום',\r\n 'בני דרור',\r\n 'בני יהודה',\r\n 'בני נצרים',\r\n 'בני עטרות',\r\n 'בני עי\"ש',\r\n 'בני ציון',\r\n 'בני ראם',\r\n 'בניה',\r\n 'בנימינה-גבעת עדה',\r\n 'בסמ\"ה',\r\n 'בסמת טבעון',\r\n 'בענה',\r\n 'בצרה',\r\n 'בצת',\r\n 'בקוע',\r\n 'בקעות',\r\n 'בר גיורא',\r\n 'בר יוחאי',\r\n 'ברוכין',\r\n 'ברור חיל',\r\n 'ברוש',\r\n 'ברכה',\r\n 'ברכיה',\r\n 'ברעם',\r\n 'ברק',\r\n 'ברקאי',\r\n 'ברקן',\r\n 'ברקת',\r\n 'בת הדר',\r\n 'בת חן',\r\n 'בת חפר',\r\n 'בת חצור',\r\n 'בת ים',\r\n 'בת עין',\r\n 'בת שלמה',\r\n 'ג\\'דיידה-מכר',\r\n 'ג\\'ולס',\r\n 'ג\\'לג\\'וליה',\r\n 'ג\\'נאביב (שבט)',\r\n 'ג\\'סר א-זרקא',\r\n 'ג\\'ש (גוש חלב)',\r\n 'ג\\'ת',\r\n 'גאולי תימן',\r\n 'גאולים',\r\n 'גאליה',\r\n 'גבולות',\r\n 'גבים',\r\n 'גבע',\r\n 'גבע בנימין',\r\n 'גבע כרמל',\r\n 'גבעולים',\r\n 'גבעון החדשה',\r\n 'גבעות בר',\r\n 'גבעת אבני',\r\n 'גבעת אלה',\r\n 'גבעת ברנר',\r\n 'גבעת השלושה',\r\n 'גבעת זאב',\r\n 'גבעת ח\"ן',\r\n 'גבעת חיים (איחוד)',\r\n 'גבעת חיים (מאוחד)',\r\n 'גבעת יואב',\r\n 'גבעת יערים',\r\n 'גבעת ישעיהו',\r\n 'גבעת כ\"ח',\r\n 'גבעת ניל\"י',\r\n 'גבעת עוז',\r\n 'גבעת שמואל',\r\n 'גבעת שמש',\r\n 'גבעת שפירא',\r\n 'גבעתי',\r\n 'גבעתיים',\r\n 'גברעם',\r\n 'גבת',\r\n 'גדות',\r\n 'גדיש',\r\n 'גדעונה',\r\n 'גדרה',\r\n 'גונן',\r\n 'גורן',\r\n 'גורנות הגליל',\r\n 'גזית',\r\n 'גזר',\r\n 'גיאה',\r\n 'גיבתון',\r\n 'גיזו',\r\n 'גילון',\r\n 'גילת',\r\n 'גינוסר',\r\n 'גיניגר',\r\n 'גינתון',\r\n 'גיתה',\r\n 'גיתית',\r\n 'גלאון',\r\n 'גלגל',\r\n 'גליל ים',\r\n 'גלעד (אבן יצחק)',\r\n 'גמזו',\r\n 'גן הדרום',\r\n 'גן השומרון',\r\n 'גן חיים',\r\n 'גן יאשיה',\r\n 'גן יבנה',\r\n 'גן נר',\r\n 'גן שורק',\r\n 'גן שלמה',\r\n 'גן שמואל',\r\n 'גנות',\r\n 'גנות הדר',\r\n 'גני הדר',\r\n 'גני טל',\r\n 'גני יוחנן',\r\n 'גני מודיעין',\r\n 'גני עם',\r\n 'גני תקווה',\r\n 'געש',\r\n 'געתון',\r\n 'גפן',\r\n 'גרופית',\r\n 'גשור',\r\n 'גשר',\r\n 'גשר הזיו',\r\n 'גת (קיבוץ)',\r\n 'גת רימון',\r\n 'דאלית אל-כרמל',\r\n 'דבורה',\r\n 'דבוריה',\r\n 'דבירה',\r\n 'דברת',\r\n 'דגניה א\\'',\r\n 'דגניה ב\\'',\r\n 'דוב\"ב',\r\n 'דולב',\r\n 'דור',\r\n 'דורות',\r\n 'דחי',\r\n 'דייר אל-אסד',\r\n 'דייר חנא',\r\n 'דייר ראפאת',\r\n 'דימונה',\r\n 'דישון',\r\n 'דליה',\r\n 'דלתון',\r\n 'דמיידה',\r\n 'דן',\r\n 'דפנה',\r\n 'דקל',\r\n 'דריג\\'את',\r\n 'האון',\r\n 'הבונים',\r\n 'הגושרים',\r\n 'הדר עם',\r\n 'הוד השרון',\r\n 'הודיה',\r\n 'הודיות',\r\n 'הוואשלה (שבט)',\r\n 'הוזייל (שבט)',\r\n 'הושעיה',\r\n 'הזורע',\r\n 'הזורעים',\r\n 'החותרים',\r\n 'היוגב',\r\n 'הילה',\r\n 'המעפיל',\r\n 'הסוללים',\r\n 'העוגן',\r\n 'הר אדר',\r\n 'הר גילה',\r\n 'הר עמשא',\r\n 'הראל',\r\n 'הרדוף',\r\n 'הרצליה',\r\n 'הררית',\r\n 'ורד יריחו',\r\n 'ורדון',\r\n 'זבארגה (שבט)',\r\n 'זבדיאל',\r\n 'זוהר',\r\n 'זיקים',\r\n 'זיתן',\r\n 'זכרון יעקב',\r\n 'זכריה',\r\n 'זמר',\r\n 'זמרת',\r\n 'זנוח',\r\n 'זרועה',\r\n 'זרזיר',\r\n 'זרחיה',\r\n 'ח\\'ואלד',\r\n 'ח\\'ואלד (שבט)',\r\n 'חבצלת השרון',\r\n 'חבר',\r\n 'חברון',\r\n 'חגור',\r\n 'חגי',\r\n 'חגלה',\r\n 'חד-נס',\r\n 'חדיד',\r\n 'חדרה',\r\n 'חוג\\'ייראת (ד\\'הרה)',\r\n 'חולדה',\r\n 'חולון',\r\n 'חולית',\r\n 'חולתה',\r\n 'חוסן',\r\n 'חוסנייה',\r\n 'חופית',\r\n 'חוקוק',\r\n 'חורה',\r\n 'חורפיש',\r\n 'חורשים',\r\n 'חזון',\r\n 'חיבת ציון',\r\n 'חיננית',\r\n 'חיפה',\r\n 'חירות',\r\n 'חלוץ',\r\n 'חלץ',\r\n 'חמאם',\r\n 'חמד',\r\n 'חמדיה',\r\n 'חמדת',\r\n 'חמרה',\r\n 'חניאל',\r\n 'חניתה',\r\n 'חנתון',\r\n 'חספין',\r\n 'חפץ חיים',\r\n 'חפצי-בה',\r\n 'חצב',\r\n 'חצבה',\r\n 'חצור הגלילית',\r\n 'חצור-אשדוד',\r\n 'חצר בארותיים',\r\n 'חצרות חולדה',\r\n 'חצרות יסף',\r\n 'חצרות כ\"ח',\r\n 'חצרים',\r\n 'חרב לאת',\r\n 'חרוצים',\r\n 'חריש',\r\n 'חרמש',\r\n 'חרשים',\r\n 'חשמונאים',\r\n 'טבריה',\r\n 'טובא-זנגריה',\r\n 'טורעאן',\r\n 'טייבה',\r\n 'טייבה (בעמק)',\r\n 'טירה',\r\n 'טירת יהודה',\r\n 'טירת כרמל',\r\n 'טירת צבי',\r\n 'טל שחר',\r\n 'טל-אל',\r\n 'טללים',\r\n 'טלמון',\r\n 'טמרה',\r\n 'טמרה (יזרעאל)',\r\n 'טנא',\r\n 'טפחות',\r\n 'יאנוח-ג\\'ת',\r\n 'יבול',\r\n 'יבנאל',\r\n 'יבנה',\r\n 'יגור',\r\n 'יגל',\r\n 'יד בנימין',\r\n 'יד השמונה',\r\n 'יד חנה',\r\n 'יד מרדכי',\r\n 'יד נתן',\r\n 'יד רמב\"ם',\r\n 'ידידה',\r\n 'יהוד-מונוסון',\r\n 'יהל',\r\n 'יובל',\r\n 'יובלים',\r\n 'יודפת',\r\n 'יונתן',\r\n 'יושיביה',\r\n 'יזרעאל',\r\n 'יחיעם',\r\n 'יטבתה',\r\n 'ייט\"ב',\r\n 'יכיני',\r\n 'ינוב',\r\n 'ינון',\r\n 'יסוד המעלה',\r\n 'יסודות',\r\n 'יסעור',\r\n 'יעד',\r\n 'יעל',\r\n 'יעף',\r\n 'יערה',\r\n 'יפיע',\r\n 'יפית',\r\n 'יפעת',\r\n 'יפתח',\r\n 'יצהר',\r\n 'יציץ',\r\n 'יקום',\r\n 'יקיר',\r\n 'יקנעם (מושבה)',\r\n 'יקנעם עילית',\r\n 'יראון',\r\n 'ירדנה',\r\n 'ירוחם',\r\n 'ירושלים',\r\n 'ירחיב',\r\n 'ירכא',\r\n 'ירקונה',\r\n 'ישע',\r\n 'ישעי',\r\n 'ישרש',\r\n 'יתד',\r\n 'יתיר',\r\n 'כאבול',\r\n 'כאוכב אבו אל-היג\\'א',\r\n 'כברי',\r\n 'כדורי',\r\n 'כדיתה',\r\n 'כוכב השחר',\r\n 'כוכב יאיר',\r\n 'כוכב יעקב',\r\n 'כוכב מיכאל',\r\n 'כורזים',\r\n 'כחל',\r\n 'כחלה',\r\n 'כיסופים',\r\n 'כישור',\r\n 'כליל',\r\n 'כלנית',\r\n 'כמאנה',\r\n 'כמהין',\r\n 'כמון',\r\n 'כנות',\r\n 'כנף',\r\n 'כנרת (מושבה)',\r\n 'כנרת (קבוצה)',\r\n 'כסיפה',\r\n 'כסלון',\r\n 'כסרא-סמיע',\r\n 'כעביה-טבאש-חג\\'אג\\'רה',\r\n 'כפר אביב',\r\n 'כפר אדומים',\r\n 'כפר אוריה',\r\n 'כפר אחים',\r\n 'כפר ביאליק',\r\n 'כפר ביל\"ו',\r\n 'כפר בלום',\r\n 'כפר בן נון',\r\n 'כפר ברא',\r\n 'כפר ברוך',\r\n 'כפר גדעון',\r\n 'כפר גלים',\r\n 'כפר גליקסון',\r\n 'כפר גלעדי',\r\n 'כפר דניאל',\r\n 'כפר האורנים',\r\n 'כפר החורש',\r\n 'כפר המכבי',\r\n 'כפר הנגיד',\r\n 'כפר הנוער הדתי',\r\n 'כפר הנשיא',\r\n 'כפר הס',\r\n 'כפר הרא\"ה',\r\n 'כפר הרי\"ף',\r\n 'כפר ויתקין',\r\n 'כפר ורבורג',\r\n 'כפר ורדים',\r\n 'כפר זוהרים',\r\n 'כפר זיתים',\r\n 'כפר חב\"ד',\r\n 'כפר חושן',\r\n 'כפר חיטים',\r\n 'כפר חיים',\r\n 'כפר חנניה',\r\n 'כפר חסידים א\\'',\r\n 'כפר חסידים ב\\'',\r\n 'כפר חרוב',\r\n 'כפר טרומן',\r\n 'כפר יאסיף',\r\n 'כפר ידידיה',\r\n 'כפר יהושע',\r\n 'כפר יונה',\r\n 'כפר יחזקאל',\r\n 'כפר יעבץ',\r\n 'כפר כמא',\r\n 'כפר כנא',\r\n 'כפר מונש',\r\n 'כפר מימון',\r\n 'כפר מל\"ל',\r\n 'כפר מנדא',\r\n 'כפר מנחם',\r\n 'כפר מסריק',\r\n 'כפר מצר',\r\n 'כפר מרדכי',\r\n 'כפר נטר',\r\n 'כפר סאלד',\r\n 'כפר סבא',\r\n 'כפר סילבר',\r\n 'כפר סירקין',\r\n 'כפר עבודה',\r\n 'כפר עזה',\r\n 'כפר עציון',\r\n 'כפר פינס',\r\n 'כפר קאסם',\r\n 'כפר קיש',\r\n 'כפר קרע',\r\n 'כפר ראש הנקרה',\r\n 'כפר רוזנואלד (זרעית)',\r\n 'כפר רופין',\r\n 'כפר רות',\r\n 'כפר שמאי',\r\n 'כפר שמואל',\r\n 'כפר שמריהו',\r\n 'כפר תבור',\r\n 'כפר תפוח',\r\n 'כרי דשא',\r\n 'כרכום',\r\n 'כרם בן זמרה',\r\n 'כרם בן שמן',\r\n 'כרם יבנה (ישיבה)',\r\n 'כרם מהר\"ל',\r\n 'כרם שלום',\r\n 'כרמי יוסף',\r\n 'כרמי צור',\r\n 'כרמי קטיף',\r\n 'כרמיאל',\r\n 'כרמיה',\r\n 'כרמים',\r\n 'כרמל',\r\n 'לא רשום',\r\n 'לבון',\r\n 'לביא',\r\n 'לבנים',\r\n 'להב',\r\n 'להבות הבשן',\r\n 'להבות חביבה',\r\n 'להבים',\r\n 'לוד',\r\n 'לוזית',\r\n 'לוחמי הגיטאות',\r\n 'לוטם',\r\n 'לוטן',\r\n 'לימן',\r\n 'לכיש',\r\n 'לפיד',\r\n 'לפידות',\r\n 'לקיה',\r\n 'מאור',\r\n 'מאיר שפיה',\r\n 'מבוא ביתר',\r\n 'מבוא דותן',\r\n 'מבוא חורון',\r\n 'מבוא חמה',\r\n 'מבוא מודיעים',\r\n 'מבואות ים',\r\n 'מבועים',\r\n 'מבטחים',\r\n 'מבקיעים',\r\n 'מבשרת ציון',\r\n 'מג\\'ד אל-כרום',\r\n 'מג\\'דל שמס',\r\n 'מגאר',\r\n 'מגדים',\r\n 'מגדל',\r\n 'מגדל העמק',\r\n 'מגדל עוז',\r\n 'מגדלים',\r\n 'מגידו',\r\n 'מגל',\r\n 'מגן',\r\n 'מגן שאול',\r\n 'מגשימים',\r\n 'מדרך עוז',\r\n 'מדרשת בן גוריון',\r\n 'מדרשת רופין',\r\n 'מודיעין עילית',\r\n 'מודיעין-מכבים-רעות',\r\n 'מולדת',\r\n 'מוצא עילית',\r\n 'מוקייבלה',\r\n 'מורן',\r\n 'מורשת',\r\n 'מזור',\r\n 'מזכרת בתיה',\r\n 'מזרע',\r\n 'מזרעה',\r\n 'מחולה',\r\n 'מחנה הילה',\r\n 'מחנה טלי',\r\n 'מחנה יהודית',\r\n 'מחנה יוכבד',\r\n 'מחנה יפה',\r\n 'מחנה יתיר',\r\n 'מחנה מרים',\r\n 'מחנה תל נוף',\r\n 'מחניים',\r\n 'מחסיה',\r\n 'מטולה',\r\n 'מטע',\r\n 'מי עמי',\r\n 'מיטב',\r\n 'מייסר',\r\n 'מיצר',\r\n 'מירב',\r\n 'מירון',\r\n 'מישר',\r\n 'מיתר',\r\n 'מכורה',\r\n 'מכחול',\r\n 'מכמורת',\r\n 'מכמנים',\r\n 'מלאה',\r\n 'מלילות',\r\n 'מלכיה',\r\n 'מלכישוע',\r\n 'מנוחה',\r\n 'מנוף',\r\n 'מנות',\r\n 'מנחמיה',\r\n 'מנרה',\r\n 'מנשית זבדה',\r\n 'מסד',\r\n 'מסדה',\r\n 'מסילות',\r\n 'מסילת ציון',\r\n 'מסלול',\r\n 'מסעדה',\r\n 'מסעודין אל-עזאזמה',\r\n 'מעברות',\r\n 'מעגלים',\r\n 'מעגן',\r\n 'מעגן מיכאל',\r\n 'מעוז חיים',\r\n 'מעון',\r\n 'מעונה',\r\n 'מעיליא',\r\n 'מעין ברוך',\r\n 'מעין צבי',\r\n 'מעלה אדומים',\r\n 'מעלה אפרים',\r\n 'מעלה גלבוע',\r\n 'מעלה גמלא',\r\n 'מעלה החמישה',\r\n 'מעלה לבונה',\r\n 'מעלה מכמש',\r\n 'מעלה עירון',\r\n 'מעלה עמוס',\r\n 'מעלה שומרון',\r\n 'מעלות-תרשיחא',\r\n 'מענית',\r\n 'מעש',\r\n 'מפלסים',\r\n 'מצדות יהודה',\r\n 'מצובה',\r\n 'מצליח',\r\n 'מצפה',\r\n 'מצפה אבי\"ב',\r\n 'מצפה אילן',\r\n 'מצפה יריחו',\r\n 'מצפה נטופה',\r\n 'מצפה רמון',\r\n 'מצפה שלם',\r\n 'מצר',\r\n 'מקווה ישראל',\r\n 'מרגליות',\r\n 'מרום גולן',\r\n 'מרחב עם',\r\n 'מרחביה (מושב)',\r\n 'מרחביה (קיבוץ)',\r\n 'מרכז שפירא',\r\n 'משאבי שדה',\r\n 'משגב דב',\r\n 'משגב עם',\r\n 'משהד',\r\n 'משואה',\r\n 'משואות יצחק',\r\n 'משכיות',\r\n 'משמר איילון',\r\n 'משמר דוד',\r\n 'משמר הירדן',\r\n 'משמר הנגב',\r\n 'משמר העמק',\r\n 'משמר השבעה',\r\n 'משמר השרון',\r\n 'משמרות',\r\n 'משמרת',\r\n 'משען',\r\n 'מתן',\r\n 'מתת',\r\n 'מתתיהו',\r\n 'נאות גולן',\r\n 'נאות הכיכר',\r\n 'נאות מרדכי',\r\n 'נאות סמדר',\r\n 'נאעורה',\r\n 'נבטים',\r\n 'נגבה',\r\n 'נגוהות',\r\n 'נהורה',\r\n 'נהלל',\r\n 'נהריה',\r\n 'נוב',\r\n 'נוגה',\r\n 'נוה צוף',\r\n 'נווה',\r\n 'נווה אבות',\r\n 'נווה אור',\r\n 'נווה אטי\"ב',\r\n 'נווה אילן',\r\n 'נווה איתן',\r\n 'נווה דניאל',\r\n 'נווה זוהר',\r\n 'נווה זיו',\r\n 'נווה חריף',\r\n 'נווה ים',\r\n 'נווה ימין',\r\n 'נווה ירק',\r\n 'נווה מבטח',\r\n 'נווה מיכאל',\r\n 'נווה שלום',\r\n 'נועם',\r\n 'נוף איילון',\r\n 'נוף הגליל',\r\n 'נופים',\r\n 'נופית',\r\n 'נופך',\r\n 'נוקדים',\r\n 'נורדיה',\r\n 'נורית',\r\n 'נחושה',\r\n 'נחל עוז',\r\n 'נחלה',\r\n 'נחליאל',\r\n 'נחלים',\r\n 'נחם',\r\n 'נחף',\r\n 'נחשולים',\r\n 'נחשון',\r\n 'נחשונים',\r\n 'נטועה',\r\n 'נטור',\r\n 'נטע',\r\n 'נטעים',\r\n 'נטף',\r\n 'ניין',\r\n 'ניל\"י',\r\n 'ניצן',\r\n 'ניצן ב\\'',\r\n 'ניצנה (קהילת חינוך)',\r\n 'ניצני סיני',\r\n 'ניצני עוז',\r\n 'ניצנים',\r\n 'ניר אליהו',\r\n 'ניר בנים',\r\n 'ניר גלים',\r\n 'ניר דוד (תל עמל)',\r\n 'ניר ח\"ן',\r\n 'ניר יפה',\r\n 'ניר יצחק',\r\n 'ניר ישראל',\r\n 'ניר משה',\r\n 'ניר עוז',\r\n 'ניר עם',\r\n 'ניר עציון',\r\n 'ניר עקיבא',\r\n 'ניר צבי',\r\n 'נירים',\r\n 'נירית',\r\n 'נמרוד',\r\n 'נס הרים',\r\n 'נס עמים',\r\n 'נס ציונה',\r\n 'נעורים',\r\n 'נעלה',\r\n 'נעמ\"ה',\r\n 'נען',\r\n 'נערן',\r\n 'נצאצרה (שבט)',\r\n 'נצר חזני',\r\n 'נצר סרני',\r\n 'נצרת',\r\n 'נשר',\r\n 'נתיב הגדוד',\r\n 'נתיב הל\"ה',\r\n 'נתיב העשרה',\r\n 'נתיב השיירה',\r\n 'נתיבות',\r\n 'נתניה',\r\n 'סאג\\'ור',\r\n 'סאסא',\r\n 'סביון',\r\n 'סגולה',\r\n 'סואעד (חמרייה)',\r\n 'סואעד (כמאנה) (שבט)',\r\n 'סולם',\r\n 'סוסיה',\r\n 'סופה',\r\n 'סח\\'נין',\r\n 'סייד (שבט)',\r\n 'סלמה',\r\n 'סלעית',\r\n 'סמר',\r\n 'סנסנה',\r\n 'סעד',\r\n 'סעוה',\r\n 'סער',\r\n 'ספיר',\r\n 'סתריה',\r\n 'ע\\'ג\\'ר',\r\n 'עבדון',\r\n 'עברון',\r\n 'עגור',\r\n 'עדי',\r\n 'עדנים',\r\n 'עוזה',\r\n 'עוזייר',\r\n 'עולש',\r\n 'עומר',\r\n 'עופר',\r\n 'עופרה',\r\n 'עוצם',\r\n 'עוקבי (בנו עוקבה)',\r\n 'עזוז',\r\n 'עזר',\r\n 'עזריאל',\r\n 'עזריה',\r\n 'עזריקם',\r\n 'עטאוונה (שבט)',\r\n 'עטרת',\r\n 'עידן',\r\n 'עיילבון',\r\n 'עיינות',\r\n 'עילוט',\r\n 'עין איילה',\r\n 'עין אל-אסד',\r\n 'עין גב',\r\n 'עין גדי',\r\n 'עין דור',\r\n 'עין הבשור',\r\n 'עין הוד',\r\n 'עין החורש',\r\n 'עין המפרץ',\r\n 'עין הנצי\"ב',\r\n 'עין העמק',\r\n 'עין השופט',\r\n 'עין השלושה',\r\n 'עין ורד',\r\n 'עין זיוון',\r\n 'עין חוד',\r\n 'עין חצבה',\r\n 'עין חרוד (איחוד)',\r\n 'עין חרוד (מאוחד)',\r\n 'עין יהב',\r\n 'עין יעקב',\r\n 'עין כרם-בי\"ס חקלאי',\r\n 'עין כרמל',\r\n 'עין מאהל',\r\n 'עין נקובא',\r\n 'עין עירון',\r\n 'עין צורים',\r\n 'עין קנייא',\r\n 'עין ראפה',\r\n 'עין שמר',\r\n 'עין שריד',\r\n 'עין תמר',\r\n 'עינת',\r\n 'עיר אובות',\r\n 'עכו',\r\n 'עלומים',\r\n 'עלי',\r\n 'עלי זהב',\r\n 'עלמה',\r\n 'עלמון',\r\n 'עמוקה',\r\n 'עמיחי',\r\n 'עמינדב',\r\n 'עמיעד',\r\n 'עמיעוז',\r\n 'עמיקם',\r\n 'עמיר',\r\n 'עמנואל',\r\n 'עמקה',\r\n 'ענב',\r\n 'עספיא',\r\n 'עפולה',\r\n 'עץ אפרים',\r\n 'עצמון שגב',\r\n 'עראבה',\r\n 'עראמשה',\r\n 'ערב אל נעים',\r\n 'ערד',\r\n 'ערוגות',\r\n 'ערערה',\r\n 'ערערה-בנגב',\r\n 'עשרת',\r\n 'עתלית',\r\n 'עתניאל',\r\n 'פארן',\r\n 'פדואל',\r\n 'פדויים',\r\n 'פדיה',\r\n 'פוריה - כפר עבודה',\r\n 'פוריה - נווה עובד',\r\n 'פוריה עילית',\r\n 'פוריידיס',\r\n 'פורת',\r\n 'פטיש',\r\n 'פלך',\r\n 'פלמחים',\r\n 'פני חבר',\r\n 'פסגות',\r\n 'פסוטה',\r\n 'פעמי תש\"ז',\r\n 'פצאל',\r\n 'פקיעין (בוקייעה)',\r\n 'פקיעין חדשה',\r\n 'פרדס חנה-כרכור',\r\n 'פרדסיה',\r\n 'פרוד',\r\n 'פרזון',\r\n 'פרי גן',\r\n 'פתח תקווה',\r\n 'פתחיה',\r\n 'צאלים',\r\n 'צביה',\r\n 'צבעון',\r\n 'צובה',\r\n 'צוחר',\r\n 'צופיה',\r\n 'צופים',\r\n 'צופית',\r\n 'צופר',\r\n 'צוקי ים',\r\n 'צוקים',\r\n 'צור הדסה',\r\n 'צור יצחק',\r\n 'צור משה',\r\n 'צור נתן',\r\n 'צוריאל',\r\n 'צורית',\r\n 'ציפורי',\r\n 'צלפון',\r\n 'צנדלה',\r\n 'צפריה',\r\n 'צפרירים',\r\n 'צפת',\r\n 'צרופה',\r\n 'צרעה',\r\n 'קבועה (שבט)',\r\n 'קבוצת יבנה',\r\n 'קדומים',\r\n 'קדימה-צורן',\r\n 'קדמה',\r\n 'קדמת צבי',\r\n 'קדר',\r\n 'קדרון',\r\n 'קדרים',\r\n 'קודייראת א-צאנע(שבט)',\r\n 'קוואעין (שבט)',\r\n 'קוממיות',\r\n 'קורנית',\r\n 'קטורה',\r\n 'קיסריה',\r\n 'קלחים',\r\n 'קליה',\r\n 'קלנסווה',\r\n 'קלע',\r\n 'קציר',\r\n 'קצר א-סר',\r\n 'קצרין',\r\n 'קרית אונו',\r\n 'קרית ארבע',\r\n 'קרית אתא',\r\n 'קרית ביאליק',\r\n 'קרית גת',\r\n 'קרית טבעון',\r\n 'קרית ים',\r\n 'קרית יערים',\r\n 'קרית יערים(מוסד)',\r\n 'קרית מוצקין',\r\n 'קרית מלאכי',\r\n 'קרית נטפים',\r\n 'קרית ענבים',\r\n 'קרית עקרון',\r\n 'קרית שלמה',\r\n 'קרית שמונה',\r\n 'קרני שומרון',\r\n 'קשת',\r\n 'ראמה',\r\n 'ראס אל-עין',\r\n 'ראס עלי',\r\n 'ראש העין',\r\n 'ראש פינה',\r\n 'ראש צורים',\r\n 'ראשון לציון',\r\n 'רבבה',\r\n 'רבדים',\r\n 'רביבים',\r\n 'רביד',\r\n 'רגבה',\r\n 'רגבים',\r\n 'רהט',\r\n 'רווחה',\r\n 'רוויה',\r\n 'רוח מדבר',\r\n 'רוחמה',\r\n 'רומאנה',\r\n 'רומת הייב',\r\n 'רועי',\r\n 'רותם',\r\n 'רחוב',\r\n 'רחובות',\r\n 'רחלים',\r\n 'ריחאניה',\r\n 'ריחן',\r\n 'ריינה',\r\n 'רימונים',\r\n 'רינתיה',\r\n 'רכסים',\r\n 'רם-און',\r\n 'רמות',\r\n 'רמות השבים',\r\n 'רמות מאיר',\r\n 'רמות מנשה',\r\n 'רמות נפתלי',\r\n 'רמלה',\r\n 'רמת גן',\r\n 'רמת דוד',\r\n 'רמת הכובש',\r\n 'רמת השופט',\r\n 'רמת השרון',\r\n 'רמת יוחנן',\r\n 'רמת ישי',\r\n 'רמת מגשימים',\r\n 'רמת צבי',\r\n 'רמת רזיאל',\r\n 'רמת רחל',\r\n 'רנן',\r\n 'רעים',\r\n 'רעננה',\r\n 'רקפת',\r\n 'רשפון',\r\n 'רשפים',\r\n 'רתמים',\r\n 'שאר ישוב',\r\n 'שבי דרום',\r\n 'שבי ציון',\r\n 'שבי שומרון',\r\n 'שבלי - אום אל-גנם',\r\n 'שגב-שלום',\r\n 'שדה אילן',\r\n 'שדה אליהו',\r\n 'שדה אליעזר',\r\n 'שדה בוקר',\r\n 'שדה דוד',\r\n 'שדה ורבורג',\r\n 'שדה יואב',\r\n 'שדה יעקב',\r\n 'שדה יצחק',\r\n 'שדה משה',\r\n 'שדה נחום',\r\n 'שדה נחמיה',\r\n 'שדה ניצן',\r\n 'שדה עוזיהו',\r\n 'שדה צבי',\r\n 'שדות ים',\r\n 'שדות מיכה',\r\n 'שדי אברהם',\r\n 'שדי חמד',\r\n 'שדי תרומות',\r\n 'שדמה',\r\n 'שדמות דבורה',\r\n 'שדמות מחולה',\r\n 'שדרות',\r\n 'שואבה',\r\n 'שובה',\r\n 'שובל',\r\n 'שוהם',\r\n 'שומרה',\r\n 'שומריה',\r\n 'שוקדה',\r\n 'שורש',\r\n 'שורשים',\r\n 'שושנת העמקים',\r\n 'שזור',\r\n 'שחר',\r\n 'שחרות',\r\n 'שיבולים',\r\n 'שיטים',\r\n 'שייח\\' דנון',\r\n 'שילה',\r\n 'שילת',\r\n 'שכניה',\r\n 'שלווה',\r\n 'שלווה במדבר',\r\n 'שלוחות',\r\n 'שלומי',\r\n 'שלומית',\r\n 'שמיר',\r\n 'שמעה',\r\n 'שמרת',\r\n 'שמשית',\r\n 'שני',\r\n 'שניר',\r\n 'שעב',\r\n 'שעורים',\r\n 'שעל',\r\n 'שעלבים',\r\n 'שער אפרים',\r\n 'שער הגולן',\r\n 'שער העמקים',\r\n 'שער מנשה',\r\n 'שערי תקווה',\r\n 'שפיים',\r\n 'שפיר',\r\n 'שפר',\r\n 'שפרעם',\r\n 'שקד',\r\n 'שקף',\r\n 'שרונה',\r\n 'שריגים (לי-און)',\r\n 'שריד',\r\n 'שרשרת',\r\n 'שתולה',\r\n 'שתולים',\r\n 'תאשור',\r\n 'תדהר',\r\n 'תובל',\r\n 'תומר',\r\n 'תושיה',\r\n 'תימורים',\r\n 'תירוש',\r\n 'תל אביב - יפו',\r\n 'תל יוסף',\r\n 'תל יצחק',\r\n 'תל מונד',\r\n 'תל עדשים',\r\n 'תל קציר',\r\n 'תל שבע',\r\n 'תל תאומים',\r\n 'תלם',\r\n 'תלמי אליהו',\r\n 'תלמי אלעזר',\r\n 'תלמי ביל\"ו',\r\n 'תלמי יוסף',\r\n 'תלמי יחיאל',\r\n 'תלמי יפה',\r\n 'תלמים',\r\n 'תמרת',\r\n 'תנובות',\r\n 'תעוז',\r\n 'תפרח',\r\n 'תקומה',\r\n 'תקוע',\r\n 'תראבין א-צאנע (שבט)',\r\n 'תראבין א-צאנע(ישוב)',\r\n 'תרום'\r\n ];","export const ResourcesDEVX_HE =\r\n {\r\n \"he\":\r\n {\r\n \"Yes\": \"כן\",\r\n \"No\": \"לא\",\r\n \"Cancel\": \"בטל\",\r\n \"Clear\": \"נקה\",\r\n \"Done\": \"סיים\",\r\n \"Loading\": \"טוען...\",\r\n \"Select\": \"בחר\",\r\n \"Search\": \"חפש\",\r\n \"Back\": \"חזור\",\r\n \"OK\": \"אישור\",\r\n\r\n \"dxCollectionWidget-noDataText\": \"אין נתונים\",\r\n\r\n \"validation-required\": \"השדה הינו חובה\",\r\n \"validation-required-formatted\": \"שדה {0} הוא חובה\",\r\n \"validation-numeric\": \"הערך חייב להיות מספר\",\r\n \"validation-numeric-formatted\": \"{0} חייב להיות מספר\",\r\n \"validation-range\": \"הערך מחוץ לתווך שהוגדר\",\r\n \"validation-range-formatted\": \"{0} מחוץ לתווך שהוגדר\",\r\n \"validation-stringLength\": \"האורך לא תקין\",\r\n \"validation-stringLength-formatted\": \"האורך של {0} לא תקין\",\r\n \"validation-custom\": \"הערך לא תקין\",\r\n \"validation-custom-formatted\": \"{0} לא תקין\",\r\n \"validation-compare\": \"הערכים לא זהים\",\r\n \"validation-compare-formatted\": \"{0} לא זהה\",\r\n \"validation-pattern\": \"הערך לא תואם את התבנית שהוגדרה\",\r\n \"validation-pattern-formatted\": \"{0} לא תואם את התבנית שהוגדרה\",\r\n \"validation-email\": \"כתובת אימייל לא חוקית\",\r\n \"validation-email-formatted\": \"{0} הוא כתובת אימייל לא חוקית\",\r\n \"validation-mask\": \"הערך לא תואם בתבנית שהוגדרה\",\r\n\r\n \"dxLookup-searchPlaceholder\": \"מספר תווים מינימאלי: {0}\",\r\n\r\n \"dxList-pullingDownText\": \"משוך למטה על מנת לרענן...\",\r\n \"dxList-pulledDownText\": \"שחרר לרענן...\",\r\n \"dxList-refreshingText\": \"מרענן...\",\r\n \"dxList-pageLoadingText\": \"טוען...\",\r\n \"dxList-nextButtonText\": \"עוד\",\r\n \"dxList-selectAll\": \"בחר כולם\",\r\n \"dxListEditDecorator-delete\": \"מחק\",\r\n \"dxListEditDecorator-more\": \"עוד\",\r\n\r\n \"dxScrollView-pullingDownText\": \"משוך למטה על מנת לרענן...\",\r\n \"dxScrollView-pulledDownText\": \"שחרר לרענן...\",\r\n \"dxScrollView-refreshingText\": \"מרענן...\",\r\n \"dxScrollView-reachBottomText\": \"טוען...\",\r\n\r\n \"dxDateBox-simulatedDataPickerTitleTime\": \"בחר שעה\",\r\n \"dxDateBox-simulatedDataPickerTitleDate\": \"בחר תאריך\",\r\n \"dxDateBox-simulatedDataPickerTitleDateTime\": \"בחר תאריך ושעה\",\r\n \"dxDateBox-validation-datetime\": \"הערך חייב להיות תאריך או שעה\",\r\n\r\n \"dxFileUploader-selectFile\": \"Select file\",\r\n \"dxFileUploader-dropFile\": \"or Drop file here\",\r\n \"dxFileUploader-bytes\": \"bytes\",\r\n \"dxFileUploader-kb\": \"kb\",\r\n \"dxFileUploader-Mb\": \"Mb\",\r\n \"dxFileUploader-Gb\": \"Gb\",\r\n \"dxFileUploader-upload\": \"Upload\",\r\n \"dxFileUploader-uploaded\": \"Uploaded\",\r\n \"dxFileUploader-readyToUpload\": \"Ready to upload\",\r\n \"dxFileUploader-uploadFailedMessage\": \"Upload failed\",\r\n \"dxFileUploader-invalidFileExtension\": \"File type is not allowed\",\r\n \"dxFileUploader-invalidMaxFileSize\": \"File is too large\",\r\n \"dxFileUploader-invalidMinFileSize\": \"File is too small\",\r\n\r\n \"dxRangeSlider-ariaFrom\": \"מ\",\r\n \"dxRangeSlider-ariaTill\": \"עד\",\r\n \"dxSwitch-switchedOnText\": \"דלוק\",\r\n \"dxSwitch-switchedOffText\": \"כבוי\",\r\n\r\n \"dxForm-optionalMark\": \"אופציונאלי\",\r\n \"dxForm-requiredMessage\": \"{0} הינו חובה\",\r\n\r\n \"dxNumberBox-invalidValueMessage\": \"הערך חייב להיות מספר\",\r\n\r\n \"dxDataGrid-columnChooserTitle\": \"בחירת עמודות\",\r\n \"dxDataGrid-columnChooserEmptyText\": \"Drag a column here to hide it\",\r\n \"dxDataGrid-groupContinuesMessage\": \"Continues on the next page\",\r\n \"dxDataGrid-groupContinuedMessage\": \"Continued from the previous page\",\r\n \"dxDataGrid-groupHeaderText\": \"קבץ לפי עמודה זו\",\r\n \"dxDataGrid-ungroupHeaderText\": \"בטל קיבוץ\",\r\n \"dxDataGrid-ungroupAllText\": \"בטל קיבוץ עמודות\",\r\n \"dxDataGrid-editingEditRow\": \"ערוך\",\r\n \"dxDataGrid-editingSaveRowChanges\": \"שמור שינויים\",\r\n \"dxDataGrid-editingCancelRowChanges\": \"בטל\",\r\n \"dxDataGrid-editingDeleteRow\": \"Delete\",\r\n \"dxDataGrid-editingUndeleteRow\": \"Undelete\",\r\n \"dxDataGrid-editingConfirmDeleteMessage\": \"האם אתה בטוח שברצונך למחוק רשומה זו?\",\r\n \"dxDataGrid-validationCancelChanges\": \"בטל שינוים\",\r\n \"dxDataGrid-groupPanelEmptyText\": \"גרור עמודה לכאן על מנת לקבץ לפיה\",\r\n \"dxDataGrid-noDataText\": \"אין נתונים\",\r\n \"dxDataGrid-searchPanelPlaceholder\": \"חפש\",\r\n \"dxDataGrid-filterRowShowAllText\": \"(All)\",\r\n \"dxDataGrid-filterRowResetOperationText\": \"Reset\",\r\n \"dxDataGrid-filterRowOperationEquals\": \"Equals\",\r\n \"dxDataGrid-filterRowOperationNotEquals\": \"Does not equal\",\r\n \"dxDataGrid-filterRowOperationLess\": \"Less than\",\r\n \"dxDataGrid-filterRowOperationLessOrEquals\": \"Less than or equal to\",\r\n \"dxDataGrid-filterRowOperationGreater\": \"Greater than\",\r\n \"dxDataGrid-filterRowOperationGreaterOrEquals\": \"Greater than or equal to\",\r\n \"dxDataGrid-filterRowOperationStartsWith\": \"Starts with\",\r\n \"dxDataGrid-filterRowOperationContains\": \"Contains\",\r\n \"dxDataGrid-filterRowOperationNotContains\": \"Does not contain\",\r\n \"dxDataGrid-filterRowOperationEndsWith\": \"Ends with\",\r\n \"dxDataGrid-filterRowOperationBetween\": \"Between\",\r\n \"dxDataGrid-filterRowOperationBetweenStartText\": \"Start\",\r\n \"dxDataGrid-filterRowOperationBetweenEndText\": \"End\",\r\n \"dxDataGrid-applyFilterText\": \"Apply filter\",\r\n \"dxDataGrid-trueText\": \"כן\",\r\n \"dxDataGrid-falseText\": \"לא\",\r\n \"dxDataGrid-sortingAscendingText\": \"מיין בסדר עולה\",\r\n \"dxDataGrid-sortingDescendingText\": \"מיין בסדר יורד\",\r\n \"dxDataGrid-sortingClearText\": \"אפס מיון\",\r\n \"dxDataGrid-editingSaveAllChanges\": \"שמור שינויים\",\r\n \"dxDataGrid-editingCancelAllChanges\": \"בטל שינויים\",\r\n \"dxDataGrid-editingAddRow\": \"הוסף רשומה\",\r\n \"dxDataGrid-summaryMin\": \"Min: {0}\",\r\n \"dxDataGrid-summaryMinOtherColumn\": \"Min of {1} is {0}\",\r\n \"dxDataGrid-summaryMax\": \"Max: {0}\",\r\n \"dxDataGrid-summaryMaxOtherColumn\": \"Max of {1} is {0}\",\r\n \"dxDataGrid-summaryAvg\": \"Avg: {0}\",\r\n \"dxDataGrid-summaryAvgOtherColumn\": \"Avg of {1} is {0}\",\r\n \"dxDataGrid-summarySum\": \"Sum: {0}\",\r\n \"dxDataGrid-summarySumOtherColumn\": \"Sum of {1} is {0}\",\r\n \"dxDataGrid-summaryCount\": \"Count: {0}\",\r\n \"dxDataGrid-columnFixingFix\": \"Fix\",\r\n \"dxDataGrid-columnFixingUnfix\": \"Unfix\",\r\n \"dxDataGrid-columnFixingLeftPosition\": \"To the left\",\r\n \"dxDataGrid-columnFixingRightPosition\": \"To the right\",\r\n \"dxDataGrid-exportTo\": \"Export\",\r\n \"dxDataGrid-exportToExcel\": \"Export to Excel file\",\r\n \"dxDataGrid-excelFormat\": \"Excel file\",\r\n \"dxDataGrid-selectedRows\": \"Selected rows\",\r\n \"dxDataGrid-exportSelectedRows\": \"Export selected rows\",\r\n \"dxDataGrid-exportAll\": \"Export all data\",\r\n \"dxDataGrid-headerFilterEmptyValue\": \"(ריקים)\",\r\n \"dxDataGrid-headerFilterOK\": \"אישור\",\r\n \"dxDataGrid-headerFilterCancel\": \"ביטול\",\r\n \"dxDataGrid-ariaColumn\": \"Column\",\r\n \"dxDataGrid-ariaValue\": \"Value\",\r\n \"dxDataGrid-ariaFilterCell\": \"Filter cell\",\r\n \"dxDataGrid-ariaCollapse\": \"Collapse\",\r\n \"dxDataGrid-ariaExpand\": \"Expand\",\r\n \"dxDataGrid-ariaDataGrid\": \"Data grid\",\r\n \"dxDataGrid-ariaSearchInGrid\": \"Search in data grid\",\r\n \"dxDataGrid-ariaSelectAll\": \"Select all\",\r\n \"dxDataGrid-ariaSelectRow\": \"Select row\",\r\n \"dxDataGrid-filterBuilderPopupTitle\": \"Filter Builder\",\r\n \"dxDataGrid-filterPanelCreateFilter\": \"Create Filter\",\r\n \"dxDataGrid-filterPanelClearFilter\": \"Clear\",\r\n \"dxDataGrid-filterPanelFilterEnabledHint\": \"Enable the filter\",\r\n\r\n \"dxTreeList-ariaTreeList\": \"Tree list\",\r\n \"dxTreeList-editingAddRowToNode\": \"Add\",\r\n\r\n \"dxPager-infoText\": \"Page {0} of {1} ({2} items)\",\r\n \"dxPager-pagesCountText\": \"of\",\r\n\r\n \"dxPivotGrid-grandTotal\": \"Grand Total\",\r\n \"dxPivotGrid-total\": \"{0} Total\",\r\n \"dxPivotGrid-fieldChooserTitle\": \"Field Chooser\",\r\n \"dxPivotGrid-showFieldChooser\": \"Show Field Chooser\",\r\n \"dxPivotGrid-expandAll\": \"Expand All\",\r\n \"dxPivotGrid-collapseAll\": \"Collapse All\",\r\n \"dxPivotGrid-sortColumnBySummary\": \"Sort \\\"{0}\\\" by This Column\",\r\n \"dxPivotGrid-sortRowBySummary\": \"Sort \\\"{0}\\\" by This Row\",\r\n \"dxPivotGrid-removeAllSorting\": \"Remove All Sorting\",\r\n \"dxPivotGrid-dataNotAvailable\": \"N/A\",\r\n \"dxPivotGrid-rowFields\": \"Row Fields\",\r\n \"dxPivotGrid-columnFields\": \"Column Fields\",\r\n \"dxPivotGrid-dataFields\": \"Data Fields\",\r\n \"dxPivotGrid-filterFields\": \"Filter Fields\",\r\n \"dxPivotGrid-allFields\": \"All Fields\",\r\n \"dxPivotGrid-columnFieldArea\": \"Drop Column Fields Here\",\r\n \"dxPivotGrid-dataFieldArea\": \"Drop Data Fields Here\",\r\n \"dxPivotGrid-rowFieldArea\": \"Drop Row Fields Here\",\r\n \"dxPivotGrid-filterFieldArea\": \"Drop Filter Fields Here\",\r\n\r\n \"dxScheduler-editorLabelTitle\": \"Subject\",\r\n \"dxScheduler-editorLabelStartDate\": \"Start Date\",\r\n \"dxScheduler-editorLabelEndDate\": \"End Date\",\r\n \"dxScheduler-editorLabelDescription\": \"Description\",\r\n \"dxScheduler-editorLabelRecurrence\": \"Repeat\",\r\n\r\n \"dxScheduler-openAppointment\": \"Open appointment\",\r\n\r\n \"dxScheduler-recurrenceNever\": \"Never\",\r\n \"dxScheduler-recurrenceDaily\": \"Daily\",\r\n \"dxScheduler-recurrenceWeekly\": \"Weekly\",\r\n \"dxScheduler-recurrenceMonthly\": \"Monthly\",\r\n \"dxScheduler-recurrenceYearly\": \"Yearly\",\r\n\r\n \"dxScheduler-recurrenceEvery\": \"Every\",\r\n \"dxScheduler-recurrenceEnd\": \"End repeat\",\r\n \"dxScheduler-recurrenceAfter\": \"After\",\r\n \"dxScheduler-recurrenceOn\": \"On\",\r\n\r\n \"dxScheduler-recurrenceRepeatDaily\": \"day(s)\",\r\n \"dxScheduler-recurrenceRepeatWeekly\": \"week(s)\",\r\n \"dxScheduler-recurrenceRepeatMonthly\": \"month(s)\",\r\n \"dxScheduler-recurrenceRepeatYearly\": \"year(s)\",\r\n\r\n \"dxScheduler-switcherDay\": \"Day\",\r\n \"dxScheduler-switcherWeek\": \"Week\",\r\n \"dxScheduler-switcherWorkWeek\": \"Work Week\",\r\n \"dxScheduler-switcherMonth\": \"Month\",\r\n\r\n \"dxScheduler-switcherAgenda\": \"Agenda\",\r\n\r\n \"dxScheduler-switcherTimelineDay\": \"Timeline Day\",\r\n \"dxScheduler-switcherTimelineWeek\": \"Timeline Week\",\r\n \"dxScheduler-switcherTimelineWorkWeek\": \"Timeline Work Week\",\r\n \"dxScheduler-switcherTimelineMonth\": \"Timeline Month\",\r\n\r\n \"dxScheduler-recurrenceRepeatOnDate\": \"on date\",\r\n \"dxScheduler-recurrenceRepeatCount\": \"occurrence(s)\",\r\n \"dxScheduler-allDay\": \"All day\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditMessage\": \"Do you want to edit only this appointment or the whole series?\",\r\n \"dxScheduler-confirmRecurrenceDeleteMessage\": \"Do you want to delete only this appointment or the whole series?\",\r\n\r\n \"dxScheduler-confirmRecurrenceEditSeries\": \"Edit series\",\r\n \"dxScheduler-confirmRecurrenceDeleteSeries\": \"Delete series\",\r\n \"dxScheduler-confirmRecurrenceEditOccurrence\": \"Edit appointment\",\r\n \"dxScheduler-confirmRecurrenceDeleteOccurrence\": \"Delete appointment\",\r\n\r\n \"dxScheduler-noTimezoneTitle\": \"No timezone\",\r\n \"dxScheduler-moreAppointments\": \"{0} more\",\r\n\r\n \"dxCalendar-todayButtonText\": \"Today\",\r\n \"dxCalendar-ariaWidgetName\": \"Calendar\",\r\n\r\n \"dxColorView-ariaRed\": \"אדום\",\r\n \"dxColorView-ariaGreen\": \"ירוק\",\r\n \"dxColorView-ariaBlue\": \"כחול\",\r\n \"dxColorView-ariaAlpha\": \"שקיפות\",\r\n \"dxColorView-ariaHex\": \"קוד צבע\",\r\n\r\n \"dxTagBox-selected\": \"{0} נבחר\",\r\n \"dxTagBox-allSelected\": \"הכל נבחר ({0})\",\r\n \"dxTagBox-moreSelected\": \"{0} עוד\",\r\n\r\n \"vizExport-printingButtonText\": \"Print\",\r\n \"vizExport-titleMenuText\": \"Exporting/Printing\",\r\n \"vizExport-exportButtonText\": \"{0} file\",\r\n\r\n \"dxFilterBuilder-and\": \"And\",\r\n \"dxFilterBuilder-or\": \"Or\",\r\n \"dxFilterBuilder-notAnd\": \"Not And\",\r\n \"dxFilterBuilder-notOr\": \"Not Or\",\r\n \"dxFilterBuilder-addCondition\": \"Add Condition\",\r\n \"dxFilterBuilder-addGroup\": \"Add Group\",\r\n \"dxFilterBuilder-enterValueText\": \"\",\r\n \"dxFilterBuilder-filterOperationEquals\": \"Equals\",\r\n \"dxFilterBuilder-filterOperationNotEquals\": \"Does not equal\",\r\n \"dxFilterBuilder-filterOperationLess\": \"Is less than\",\r\n \"dxFilterBuilder-filterOperationLessOrEquals\": \"Is less than or equal to\",\r\n \"dxFilterBuilder-filterOperationGreater\": \"Is greater than\",\r\n \"dxFilterBuilder-filterOperationGreaterOrEquals\": \"Is greater than or equal to\",\r\n \"dxFilterBuilder-filterOperationStartsWith\": \"Starts with\",\r\n \"dxFilterBuilder-filterOperationContains\": \"Contains\",\r\n \"dxFilterBuilder-filterOperationNotContains\": \"Does not contain\",\r\n \"dxFilterBuilder-filterOperationEndsWith\": \"Ends with\",\r\n \"dxFilterBuilder-filterOperationIsBlank\": \"Is blank\",\r\n \"dxFilterBuilder-filterOperationIsNotBlank\": \"Is not blank\",\r\n \"dxFilterBuilder-filterOperationBetween\": \"Is between\",\r\n \"dxFilterBuilder-filterOperationAnyOf\": \"Is any of\",\r\n \"dxFilterBuilder-filterOperationNoneOf\": \"Is none of\",\r\n\r\n \"dxHtmlEditor-dialogColorCaption\": \"Change Font Color\",\r\n \"dxHtmlEditor-dialogBackgroundCaption\": \"Change Background Color\",\r\n \"dxHtmlEditor-dialogLinkCaption\": \"Add Link\",\r\n \"dxHtmlEditor-dialogLinkUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogLinkTextField\": \"Text\",\r\n \"dxHtmlEditor-dialogLinkTargetField\": \"Open link in new window\",\r\n \"dxHtmlEditor-dialogImageCaption\": \"Add Image\",\r\n \"dxHtmlEditor-dialogImageUrlField\": \"URL\",\r\n \"dxHtmlEditor-dialogImageAltField\": \"Alternate text\",\r\n \"dxHtmlEditor-dialogImageWidthField\": \"Width (px)\",\r\n \"dxHtmlEditor-dialogImageHeightField\": \"Height (px)\",\r\n \"dxHtmlEditor-heading\": \"Heading\",\r\n \"dxHtmlEditor-normalText\": \"Normal text\"\r\n }\r\n }\r\n","import { Injectable } from '@angular/core';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { Observable, forkJoin, of, mergeMap, firstValueFrom } from 'rxjs';\r\nimport { BaseEntitiesResponse, BaseResponse, CompanyInfo, GenericListEntity } from '@base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from './systemoptions.enum';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { M4UCities } from '../../common/Cities';\r\nimport config from 'devextreme/core/config';\r\nimport { loadMessages, locale } from \"devextreme/localization\";\r\nimport { ResourcesService } from './resources.service';\r\nimport { ResourcesDEVX_HE } from '../../_resources/DEVX.he';\r\nimport { DevExpressService } from './devexpress.service';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\nimport { SystemOptionsEndpoint } from '../endpoints/system-options.endpoint';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SessionService } from './session.service';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport { SystemOptionsService } from './system-options.service';\r\nimport {UiService} from '@core/framework/ui.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { DefaultRouteParams } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Injectable()\r\nexport class FrameworkService {\r\n constructor(\r\n public systemEndpoint: SystemEndpoint,\r\n public systemOptionsEndpoint: SystemOptionsEndpoint,\r\n private resources: ResourcesService,\r\n private devExpress: DevExpressService,\r\n private appConfigService: AppConfigService,\r\n private sessionService: SessionService,\r\n private systemOptionsService: SystemOptionsService,\r\n private navigator: NavigatorService,\r\n private ui: UiService,\r\n private sysEventsService: SysEventsService) { }\r\n\r\n //Variables\r\n private m_CompanyInfoDict: { [language: string]: CompanyInfo } = {};\r\n private m_bIsFrameworkInitialized: boolean;\r\n\r\n //Checks whether currently building this custom build\r\n public IsCustomBuild(build: string): boolean {\r\n return (this.appConfigService.M4UConfig.customBuild == build ? true : false);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public SystemOption(OptionName: EnumSystemOptions | string): any {\r\n return this.systemOptionsService.getSystemOption(OptionName);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public SystemOptionFlag(OptionName: EnumSystemOptions | string): boolean {\r\n return this.systemOptionsService.getSystemOptionAsBoolean(OptionName);\r\n }\r\n\r\n //Shortcut to system options so that Framework is the only one that needs to be DI\r\n public get CompanyInfo(): CompanyInfo {\r\n return this.m_CompanyInfoDict[SysGlobals.Language];\r\n }\r\n\r\n public IsFrameworkInitialized(): boolean {\r\n return this.m_bIsFrameworkInitialized;\r\n }\r\n\r\n public Do(serviceResponse: Observable, bShowSuccessMessage: boolean = true, after?: (afterResponse: BaseResponse | Blob) => void, fail?: (failResponse: BaseResponse | Blob) => void) {\r\n serviceResponse.subscribe((response: BaseResponse | Blob) => {\r\n if (response instanceof Blob) {\r\n after(response);\r\n }\r\n else {\r\n const baseResponse = response as BaseResponse;\r\n if (baseResponse.IsSuccess) {\r\n if (bShowSuccessMessage) this.ui.InfoMessage(this.resources.RC(\"msgSuccess\"));\r\n if (after != undefined) after(response);\r\n }\r\n else {\r\n if (fail != undefined) {\r\n fail(response);\r\n }\r\n else {\r\n if (baseResponse.ResponseCode == 999) {\r\n this.ui.UnexpectedMessage(baseResponse.ResponseMessage);\r\n } else {\r\n this.ui.StopMessage(baseResponse.ResponseMessage);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //Initialize the framework\r\n InitializeFramework(resolve): any {\r\n //Dispatch 'frameworkInitStarted' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event.initEvent('frameworkInitStarted', true, true);\r\n document.dispatchEvent(event);\r\n //Init company info\r\n forkJoin\r\n (\r\n [this.systemEndpoint.GetCompanyInfo(),\r\n this.systemEndpoint.GetSystemOptions(this.GetFirstModuleName())]\r\n ).subscribe(([responseCompanyInfo, responseSystemOptions]) => {\r\n //Map company info\r\n let companyInfo;\r\n if (responseCompanyInfo.IsSuccess) {\r\n companyInfo = responseCompanyInfo.Entity;\r\n }\r\n else {\r\n this.ui.UnexpectedMessage(`Unable to load company info. Please reload the application ${responseCompanyInfo.ResponseMessage}`);\r\n \r\n //Load some defaults, so app can continue at least to show the login screen or work in debug mode, \r\n //where boot process is not stopped at login screen if there are no settings\r\n companyInfo = new CompanyInfo;\r\n companyInfo.DecimalSeparator = \".\";\r\n companyInfo.ThousandsSeparator = \",\";\r\n companyInfo.DateFormatLong = \"dd/MM/yyyy\";\r\n }\r\n this.InitCompanyInfoDictinary(companyInfo);\r\n \r\n //Map system options\r\n if (responseSystemOptions.IsSuccess) {\r\n this.systemOptionsService.setOptions(responseSystemOptions.Entities);\r\n }\r\n else {\r\n this.ui.UnexpectedMessage(`Unable to load system options. Please reload the application ${responseSystemOptions.ResponseMessage}`);\r\n }\r\n \r\n //Initialize language\r\n this.InitLanguage()\r\n \r\n //Initialize devexpress\r\n this.InitializeDevExpress();\r\n \r\n // Initalize injectable components options\r\n this.InitializeInjectableComponentsOptions();\r\n \r\n //Signal we can continue\r\n this.m_bIsFrameworkInitialized = responseCompanyInfo.IsSuccess && responseSystemOptions.IsSuccess;\r\n resolve();\r\n });\r\n\r\n }\r\n\r\n public InitializeDevExpress() {\r\n this.devExpress.InitializeDevExpress(this);\r\n }\r\n\r\n //Handle language change\r\n public InitLanguage() {\r\n //Set default\r\n //Check in local storage\r\n try {\r\n if (SysGlobals.Language == undefined) SysGlobals.Language = localStorage.getItem(\"Language\");\r\n } catch (e) { }\r\n if (SysGlobals.Language == undefined) SysGlobals.Language = this.appConfigService.M4UConfig.defaultLanguage;\r\n\r\n //Initialize DevExpress translation messages\r\n if (SysGlobals.Language == EnumLanguages.Hebrew) loadMessages(ResourcesDEVX_HE);\r\n locale(SysGlobals.Language.toLowerCase());\r\n\r\n //Initialize devexpress stuff\r\n config(\r\n {\r\n rtlEnabled: SysGlobals.Language == EnumLanguages.Hebrew ? true : false,\r\n forceIsoDateParsing: true\r\n });\r\n\r\n //Init resources\r\n this.resources.InitDictionaries();\r\n\r\n }\r\n\r\n InitCompanyInfoDictinary(companyInfo: CompanyInfo) {\r\n let companyInfoHebrew = { ...companyInfo };\r\n companyInfoHebrew.NumberGeneral = `${companyInfoHebrew.NumberGeneral};${companyInfoHebrew.NumberGeneral}-`;\r\n companyInfoHebrew.NumberPercent = `${companyInfoHebrew.NumberPercent};${companyInfoHebrew.NumberPercent}-`;\r\n companyInfoHebrew.NumberPrice = `${companyInfoHebrew.NumberPrice};${companyInfoHebrew.NumberPrice}-`;\r\n companyInfoHebrew.NumberQuantity = `${companyInfoHebrew.NumberQuantity};${companyInfoHebrew.NumberQuantity}-`;\r\n companyInfoHebrew.NumberRate = `${companyInfoHebrew.NumberRate};${companyInfoHebrew.NumberRate}-`;\r\n companyInfoHebrew.NumberSum = `${companyInfoHebrew.NumberSum};${companyInfoHebrew.NumberSum}-`;\r\n\r\n this.m_CompanyInfoDict[EnumLanguages.Hebrew] = companyInfoHebrew;\r\n this.m_CompanyInfoDict[EnumLanguages.English] = companyInfo;\r\n }\r\n\r\n GetCities(): Observable {\r\n var oResult = new BaseEntitiesResponse;\r\n oResult.IsSuccess = true;\r\n oResult.Entities = M4UCities.map((element) => {\r\n return new GenericListEntity(element, element);\r\n });\r\n\r\n return of(oResult);\r\n }\r\n\r\n NavigateDefault(): Promise {\r\n //SysGlobals.LastNavigationUrl = SysGlobals.LastNavigationParams = undefined;\r\n\r\n return firstValueFrom(\r\n this.appConfigService.AppConfig.OnGetDefaultRouteParams(this.sessionService.UserInfos[0])\r\n .pipe(\r\n mergeMap(defaultRouteParams => {\r\n if (!defaultRouteParams || !defaultRouteParams.Route) {\r\n defaultRouteParams = new DefaultRouteParams;\r\n defaultRouteParams.Route = '/system/login';\r\n };\r\n\r\n return this.navigator.Navigate([defaultRouteParams.Route], defaultRouteParams.Params).then((result) => {\r\n this.sysEventsService.NavigateDefault(result);\r\n return Promise.resolve(true);\r\n });\r\n })\r\n )\r\n );\r\n }\r\n\r\n private InitializeInjectableComponentsOptions() {\r\n this.appConfigService.AppConfig.GetInjectableComponentOptions().subscribe((options) => {\r\n SysGlobals.InjectableComponentsOptions = options;\r\n });\r\n }\r\n\r\n private GetFirstModuleName(): string {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n}\r\n\r\n//Entry point for framework initialization\r\nexport function OnInitializeFramework(): () => Promise {\r\n //Initialize stuff that require pulling from the server\r\n return (): Promise => {\r\n return new Promise((resolve, reject) => {\r\n var service = AppInjector.get(FrameworkService);\r\n service.InitializeFramework(resolve);\r\n });\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { FrameworkService } from './framework.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LanguageService {\r\n\r\n private _languageSubject = new ReplaySubject(1);\r\n public Language$ = this._languageSubject.asObservable();\r\n\r\n constructor(private frameworkService: FrameworkService) {}\r\n\r\n SetLanguage(language: string) {\r\n if (language == undefined) return;\r\n\r\n if (SysGlobals.Language !== language) {\r\n SysGlobals.Language = language; // TODO: REMOVE THAT\r\n localStorage.setItem(\"Language\", language);\r\n \r\n this.frameworkService.InitLanguage();\r\n this.frameworkService.InitializeDevExpress();\r\n }\r\n\r\n this._languageSubject.next(language);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\r\nimport { LoginParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { LoginService } from './login.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SessionService } from './session.service';\r\nimport { EnumLoginSecureKeyTypes } from './sysenums.enum';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n@Injectable()\r\nexport class LoginGuard implements CanActivate {\r\n constructor(\r\n private sessionService: SessionService,\r\n private navigator: NavigatorService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n if (this.sessionService.IsLoggedIn) return of(true);\r\n\r\n const [returnUrl, returnUrlParamsSessionID] = this.getParams(state.url, 'SessionID', true) ;\r\n\r\n const currentSessionID = this.sessionService.GetSessionID();\r\n const paramsSessionID = this.navigator.GetQueryParams(this.navigator.IsCurrentRouteWindow()).SessionID;\r\n const sessionID = paramsSessionID || returnUrlParamsSessionID || currentSessionID;\r\n if (!Utils.IsEmpty(sessionID)) {\r\n const loginParams = new LoginParams;\r\n loginParams.SecureKey = sessionID;\r\n loginParams.SecureKeyType = EnumLoginSecureKeyTypes.Session;\r\n return this.loginService.DoLogin(loginParams, !!currentSessionID, !currentSessionID, \r\n () => this.navigator.NavigateByUrl(returnUrl), () => this.goToLoginPage(returnUrl));\r\n }\r\n\r\n this.goToLoginPage(returnUrl);\r\n return of(false);\r\n }\r\n\r\n private goToLoginPage(returnUrl: string) {\r\n this.navigator.Navigate(['/system/login'], { Language: SysGlobals.Language, ReturnUrl: returnUrl });\r\n }\r\n\r\n private getParams(url: string, key: string, isRemove: boolean = false) {\r\n const valueMatch = url.match(new RegExp('(._)?' + key + '=([^&]+)'));\r\n const value = valueMatch ? valueMatch[2] : null;\r\n \r\n if (isRemove) {\r\n url = url.replace(new RegExp('(\\\\?(._)?' + key + '=[^&]+&?)|(&(._)?' + key + '=[^&]+)', 'g'), '');\r\n }\r\n \r\n return [url, value];\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseDataResponse, BaseEntityResponse, LoginParams, SessionEntity } from '@base/entities/BaseEntities';\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { firstValueFrom, Observable, of } from 'rxjs';\r\nimport { map, mergeMap, tap } from 'rxjs/operators';\r\nimport { LoginEndpoint } from './../endpoints/login.endpoint';\r\nimport { FrameworkService } from './framework.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { RC } from './resources.service';\r\nimport { RouteHistoryService } from './route-history.service';\r\nimport { SessionService } from './session.service';\r\nimport { EnumCheckCredentialsResult } from './sysenums.enum';\r\n\r\n@Injectable()\r\nexport class LoginService {\r\n\r\n constructor(private Navigator: NavigatorService,\r\n private LoginEndpoint: LoginEndpoint,\r\n private Framework: FrameworkService,\r\n private SessionService: SessionService,\r\n private UI: UiService,\r\n private routeHistoryService: RouteHistoryService,\r\n private appConfigService: AppConfigService\r\n ) { }\r\n\r\n DoLogin(Params: LoginParams, bExistingSession: boolean, bIsSaveCredentials: boolean, fAfterInit: () => void, fLoginFailed: (responseSession: BaseEntityResponse) => void = null, mfaCodeSent: (deliveryOption: EnumNotificationDeliveryOptions) => void = null) {\r\n return this.LoginEndpoint.Login(Params).pipe(\r\n mergeMap((response: BaseEntityResponse) => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n }\r\n switch (response.Entity.CheckResult) {\r\n case EnumCheckCredentialsResult.Success:\r\n return this.OnLoginSuccess(response, bExistingSession, bIsSaveCredentials, Params.Language, fAfterInit);\r\n case EnumCheckCredentialsResult.PasswordExpired:\r\n this.Navigator.Navigate(['/system/passwordchangeexpired'], { UserName: Params.UserName });\r\n return of(false);\r\n case EnumCheckCredentialsResult.Failure:\r\n this.UI.StopMessage(response.Entity.CheckResultMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n case EnumCheckCredentialsResult.MFAEmailSent:\r\n mfaCodeSent && mfaCodeSent(EnumNotificationDeliveryOptions.Email);\r\n return of(false);\r\n case EnumCheckCredentialsResult.MFASMSSent:\r\n mfaCodeSent && mfaCodeSent(EnumNotificationDeliveryOptions.SMS);\r\n return of(false);\r\n case EnumCheckCredentialsResult.NoMID:\r\n if (bExistingSession) this.OnLoginBySessionFailed();\r\n this.Navigator.Navigate(['/system/midstore']);\r\n return of(false);\r\n default:\r\n if (bExistingSession) this.OnLoginBySessionFailed();\r\n this.UI.StopMessage(response.Entity.CheckResultMessage);\r\n if (fLoginFailed) fLoginFailed(response);\r\n return of(false);\r\n }\r\n })\r\n );\r\n }\r\n\r\n //Handle succesfull login\r\n private OnLoginSuccess(response: BaseEntityResponse, bExistingSession: boolean, bIsSaveCredentials: boolean, sLanguage: string, fAfterInit: () => void) {\r\n //If system options were not loaded, prevent logging in\r\n //Do this check only if login was successfull, so that if not the regular message is displayed\r\n if (!this.Framework.IsFrameworkInitialized()) {\r\n this.UI.UnexpectedMessage(RC('errorNotInitialized'));\r\n return of(false);\r\n }\r\n\r\n //Save session id and language in local storage, or clear if saving was not specified\r\n if (bIsSaveCredentials && !bExistingSession) {\r\n this.SessionService.SaveSessionCredentials(response.Entity.SessionID);\r\n }\r\n\r\n if (!bIsSaveCredentials && !bExistingSession) {\r\n this.SessionService.ClearSessionCredentials();\r\n }\r\n\r\n //Set session\r\n return this.SessionService.SetSession(response.Entity, () => {\r\n this.routeHistoryService.ClearHistory();\r\n this.routeHistoryService.StartSaveHistory();\r\n fAfterInit && fAfterInit();\r\n }, () => {\r\n this.Navigator.Navigate(['/system/login']);\r\n });\r\n }\r\n\r\n //Clear invalid sessionid, and let the user login on his own\r\n private OnLoginBySessionFailed() {\r\n this.SessionService.ClearSessionCredentials();\r\n }\r\n\r\n DoLogout(fAfterLogout: () => void) {\r\n this.LoginEndpoint.Logout()\r\n .pipe(\r\n tap(response => {\r\n //Even if there is an error, go to login screen anyway, so the user won't be stuck\r\n if (!response.IsSuccess) this.UI.UnexpectedMessage(response.ResponseMessage);\r\n }))\r\n .subscribe(() => {\r\n this.SessionService.SetSession(undefined, null, () => {\r\n this.routeHistoryService.ClearHistory();\r\n fAfterLogout && fAfterLogout();\r\n });\r\n });\r\n }\r\n\r\n ImpersonateLogin(credentialID: number): Observable {\r\n return this.LoginEndpoint.ImpersonateLogin(credentialID).pipe(mergeMap(async (response: BaseEntityResponse) => {\r\n if (!response.IsSuccess) {\r\n response.ResponseMessage && this.UI.StopMessage(response.ResponseMessage);\r\n return false;\r\n }\r\n\r\n const defaultRouteParams = await firstValueFrom(\r\n this.appConfigService.AppConfig.OnGetDefaultRouteParams(response.Entity.UserInfo[this.ModuleName]));\r\n if (!defaultRouteParams || !defaultRouteParams.Route) return false;\r\n\r\n const params = { ...defaultRouteParams.Params || {}, SessionID: response.Entity.SessionID };\r\n const url = this.Navigator.GetUrl(defaultRouteParams.Route, params);\r\n this.Navigator.NavigateExternal(url);\r\n return true;\r\n }));\r\n }\r\n\r\n private get ModuleName(): string {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Route, Router } from '@angular/router';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { ScreenService } from './screen.service';\r\nimport { SessionService } from './session.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\n/*\r\nThe idea of navigation process is as follows:\r\n1. Get the segments from the function params. Then remove all prefixes (randomizers and module name)\r\n2. Get the target page and find the route in the \"clean\" routes (already prepared, without any prefixes)\r\n3. Figure out is that route is a window or not\r\n4. Add query params to the route\r\n5. Figure out the module name by route component\r\n6. Add page randomizer prefix and module name to the route\r\n7. Navigate to the page or window\r\n*/\r\n\r\nexport const M4URouteRandomizers: string[] =\r\n [\r\n 'X_',\r\n 'Y_',\r\n 'Z_',\r\n 'W_',\r\n 'T_'\r\n ];\r\n\r\n@Injectable()\r\nexport class NavigatorService {\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private sysEvents: SysEventsService,\r\n private appConfigService: AppConfigService,\r\n private sessionService: SessionService,\r\n private screenService: ScreenService ) { }\r\n\r\n public IsCurrentRouteWindow(routeUrl?: string) {\r\n const windowIndex = window.location.pathname.indexOf('window:');\r\n return windowIndex > -1 || (routeUrl && routeUrl.indexOf('window:') > -1);\r\n }\r\n\r\n //Return custom data attached to this route\r\n public GetCustomRouteData() {\r\n return this.activatedRoute.snapshot.data;\r\n }\r\n\r\n public GetCurrentRouteWithoutParams() {\r\n return this.activatedRoute.snapshot.url[0]?.path;\r\n }\r\n\r\n //Return current query params\r\n private GetQueryParamsInternal(): any {\r\n const params = this.activatedRoute.snapshot.queryParams;\r\n const newParams = {};\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n newParams[key] = this.getParamValue(value);\r\n }\r\n\r\n return newParams;\r\n }\r\n\r\n //Return query params that are relevant for the route, renamed back to their original names\r\n public GetQueryParams(bIsWindow: boolean): any {\r\n const existingParams = this.GetQueryParamsInternal();\r\n\r\n //Remove prefixes and copy to new object\r\n return this.GetQueryParamsWithoutPrefixes(existingParams, bIsWindow);\r\n }\r\n\r\n public GetQueryParamsWithoutPrefixes(params: any, bIsWindow: boolean): any {\r\n const sPrefix = this.GetQueryParamsPrefix(bIsWindow);\r\n const newParams = {};\r\n for (const key in params) {\r\n let paramKey = key;\r\n if (key.startsWith(sPrefix)) paramKey = key.substring(sPrefix.length);\r\n const value = params[key] === 'false' ? false : params[key] === 'true' ? true : params[key];\r\n Object.assign(newParams, { [paramKey]: value });\r\n }\r\n\r\n return newParams;\r\n }\r\n\r\n public ClearQueryParams() {\r\n this.activatedRoute.snapshot.queryParams = {};\r\n }\r\n\r\n //Return the prefix string for query params for the route\r\n private GetQueryParamsPrefix(bIsWindow: boolean): string {\r\n return bIsWindow ? 'W_' : 'P_';\r\n }\r\n\r\n\r\n //Return the params for the route\r\n public GetRouteParams(): any {\r\n const params = this.activatedRoute.snapshot.params;\r\n return Object.keys(params).length ? params : this.GetQueryParams(this.IsCurrentRouteWindow());\r\n }\r\n\r\n //Return current route\r\n //use window since activatedRoute is not always correct, due to DI being on the component level, \r\n //and some components are not related to route\r\n public GetCurrentRoute(): string {\r\n let sLocation: string = `${window.location.pathname}${window.location.search}`;\r\n const baseUrl = this.appConfigService.M4UConfig.deploymentApplicationFolder;\r\n if (baseUrl) sLocation = sLocation.toLowerCase().replace(baseUrl.toLowerCase(), '');\r\n return sLocation;\r\n }\r\n\r\n //Main navigation function\r\n //Special value - params will be null to signal closing the window route\r\n public Navigate(params: any[], optionalParams?: any, ModuleName?: any) {\r\n\r\n this.sessionService.RefreshExpiredSessionTimeout();\r\n\r\n const urlTree = this.GetUrlTree(params, optionalParams, ModuleName);\r\n return this.router.navigateByUrl(urlTree);\r\n \r\n }\r\n\r\n public NavigateByUrl(url: string) {\r\n this.sessionService.RefreshExpiredSessionTimeout();\r\n \r\n return this.router.navigateByUrl(url);\r\n }\r\n\r\n private GetUrlTree(params: any[], optionalParams?: any, ModuleName?: any) {\r\n //Start as an array\r\n let segments: string[];\r\n if (typeof params === 'string') segments.push(params); else segments = params;\r\n\r\n if (segments && !segments.some(x => x !== '')) return;\r\n\r\n //Clean, and put all segments in onc nice string array\r\n let segmentsClean: string[] = [];\r\n let sTargetPage: string;\r\n if (segments != null) {\r\n segments.forEach(sSegment => {\r\n sSegment = sSegment && sSegment.toString();\r\n if (sSegment) {\r\n sSegment.split('/').forEach(sPart => {\r\n if (sPart != null && sPart != '') {\r\n sPart = sPart.replace('(', '').replace(')', '');\r\n\r\n //Remove randomizers from route path\r\n const sPrefix = M4URouteRandomizers.find(item => sPart.startsWith(item));\r\n if (sPrefix) sPart = sPart.substring(sPrefix.length);\r\n\r\n //Remove module prefix from route path\r\n const modulePrefix = this.appConfigService.AppConfig.ModuleName.split(',').find(x => sPart.startsWith(x));\r\n if (modulePrefix) sPart = sPart.substring(modulePrefix.length + 1);\r\n\r\n segmentsClean.push(sPart);\r\n }\r\n });\r\n }\r\n });\r\n\r\n //Set target page we are navigating to\r\n const generalIndex = segmentsClean.indexOf('general');\r\n sTargetPage = generalIndex >=0 ? segmentsClean[2] : segmentsClean[1];\r\n } else {\r\n segmentsClean = null;\r\n sTargetPage = null;\r\n }\r\n\r\n //Find the relevant route by the 2nd segment - match it with the route first segment\r\n //Check the router outlet to determine if its a window\r\n let bIsWindow: boolean;\r\n let route;\r\n if (sTargetPage != null) {\r\n //Get route by target page\r\n const cleanRoutes = this.GetCleanRoutes(this.router.config);\r\n const targetRoutes = cleanRoutes.filter(x => x.path.split('/')[0] == sTargetPage);\r\n if (targetRoutes.length > 1) {\r\n route = optionalParams && Object.keys(optionalParams).some(x => x == 'ShowAsWindow') && optionalParams['ShowAsWindow']\r\n ? targetRoutes.find(x => x.outlet == 'window')\r\n : targetRoutes.find(x => !x.outlet);\r\n } else if (targetRoutes.length === 1) {\r\n route = targetRoutes[0];\r\n }\r\n bIsWindow = (route != undefined && route.outlet == 'window' ? true : false);\r\n } else {\r\n bIsWindow = true;\r\n }\r\n\r\n //Rename query params that we need to pass according to the route we use - window/primary\r\n //Build a new structure in order not to modify the passed in param\r\n const sPrefix = this.GetQueryParamsPrefix(bIsWindow);\r\n const newParams = {};\r\n for (const key in optionalParams) {\r\n if (key === 'ShowAsWindow') continue;\r\n Object.assign(newParams, { [sPrefix + key]: this.getParam(optionalParams[key]) });\r\n }\r\n\r\n //Add query params from existing route so that we get a combined list\r\n if (optionalParams == undefined) optionalParams = {};\r\n\r\n //Get module name if not specified, from the current route\r\n if (ModuleName == undefined) {\r\n const routeComponent = (route ? route.component : this.activatedRoute.snapshot.component) as any as IBaseModuleComponent;\r\n ModuleName = routeComponent && routeComponent.ModuleName ? `${routeComponent.ModuleName}_` : '';\r\n } else {\r\n ModuleName = ModuleName + '_';\r\n }\r\n\r\n //Remove pages, and set the prefix\r\n let routePrefix = '';\r\n if (segmentsClean != null) {\r\n const pagesIndex = segmentsClean.indexOf('pages');\r\n if (pagesIndex >= 0) {\r\n routePrefix = segmentsClean.shift();\r\n }\r\n //Add general to primary outlet\r\n const generalIndex = segmentsClean.indexOf('general');\r\n if (generalIndex >= 0) {\r\n routePrefix = `${routePrefix}/${segmentsClean.shift()}`;\r\n }\r\n //Add randomizer and module name prefixes to the page route\r\n if (pagesIndex >= 0) {\r\n segmentsClean[0] = this.GetPagesPrefix() + ModuleName + segmentsClean[0];\r\n }\r\n } else {\r\n const currentRoute = this.GetCurrentRoute();\r\n const segments = currentRoute.replace(/^\\/|\\/$/g, '').split('/');\r\n\r\n routePrefix = segments.shift();\r\n //Add general to primary outlet\r\n if (segments.indexOf('general') >= 0) {\r\n routePrefix = `${routePrefix}/${segments.shift()}`;\r\n }\r\n }\r\n const windowPrimaryOutlet = [];\r\n let routeSnapshot = this.router.routerState.snapshot.root;\r\n while (routeSnapshot.firstChild) {\r\n routeSnapshot = routeSnapshot.firstChild;\r\n windowPrimaryOutlet.push(routeSnapshot.url.map(x => x.path).join('/'));\r\n }\r\n\r\n const primaryOutlet = bIsWindow ? windowPrimaryOutlet.join('/').replace(`${routePrefix}/`, '') : segmentsClean;\r\n const windowOutlet = bIsWindow ? segmentsClean : null;\r\n return this.router.createUrlTree([routePrefix, { outlets: { primary: primaryOutlet, window: windowOutlet }}], \r\n { queryParams: newParams });\r\n }\r\n\r\n\r\n //Get routes from config without randomizer prefixes and module names\r\n public GetCleanRoutes(config: Route[]): Route[] {\r\n let routes = [];\r\n for (let i = 0; i < config.length; i++) {\r\n //Copy route object to avoid modifying real route config\r\n const route = { ...config[i] };\r\n //Remove randomizer prefix from route path\r\n M4URouteRandomizers.forEach(x => {\r\n if (route.path.startsWith(x)) route.path = route.path.replace(x, '');\r\n });\r\n //Remove module name prefix from route path\r\n this.appConfigService.AppConfig.ModuleName.split(',').forEach(x => {\r\n if (route.path.startsWith(x)) route.path = route.path.replace(`${x}_`, '');\r\n });\r\n //Add to \"clean\" routes collection\r\n routes.push(route);\r\n if (route.children) {\r\n //Get \"clean\" route children\r\n const childrenRoutes = this.GetCleanRoutes(route.children);\r\n //Add \"clean\" route children to \"clean\" routes collection\r\n routes = [...routes, ...childrenRoutes];\r\n }\r\n }\r\n //Remove duplicates from \"clean\" routes collection that appeared because of randomizers prefixes\r\n routes = routes.filter((value, index, self) => self.map(x => { \r\n return { path: x.path, outlet: x.outlet };\r\n }).findIndex(x => x.path === value.path && x.outlet === value.outlet) === index);\r\n return routes;\r\n }\r\n\r\n //Switch routes to allow same page navigation\r\n private GetPagesPrefix(): string {\r\n SysGlobals.NavigationSequence = SysGlobals.NavigationSequence == undefined ? 1 : SysGlobals.NavigationSequence + 1;\r\n return M4URouteRandomizers[SysGlobals.NavigationSequence % M4URouteRandomizers.length];\r\n }\r\n\r\n //Send an event to force reload of component\r\n //For now, this should not be used, as same route navigation works fine\r\n public ReloadComponent(sComponentName: string) {\r\n this.sysEvents.OnReloadComponent.emit(sComponentName);\r\n }\r\n\r\n\r\n //Reload current page\r\n public ReloadApplication() {\r\n this.router.navigateByUrl(this.GetCurrentRoute());\r\n }\r\n\r\n //Go to previous page - close the window\r\n public NavigateBack() {\r\n return this.Navigate(null);\r\n }\r\n\r\n public GetUrl(route: string, queryParams: any) {\r\n const params = {};\r\n const sPrefix = this.GetQueryParamsPrefix(false);\r\n Object.keys(queryParams).forEach(key => {\r\n Object.assign(params, { [sPrefix + key]: this.getParam(queryParams[key]) });\r\n });\r\n\r\n const baseUrl = window.location.href.replace(this.router.url, '');\r\n const urlTree = this.GetUrlTree([route], queryParams);\r\n const url= this.router.serializeUrl(urlTree);\r\n return `${baseUrl}${url}`;\r\n }\r\n\r\n //Load external URL in a separate form\r\n public NavigateExternal(sURL: string) {\r\n window.open(sURL, '_blank');\r\n }\r\n\r\n public NavigatePhone(sPhone: string) {\r\n this.NavigateExternal(`tel:${sPhone}`);\r\n }\r\n\r\n public NavigateEmail(sEmail: string) {\r\n this.NavigateExternal(`mailto:${sEmail}`);\r\n }\r\n\r\n public NavigateGoogle(sQuery: string) {\r\n this.NavigateExternal(`https://www.google.com/search?q=${sQuery}`);\r\n }\r\n\r\n public NavigateWhatsApp(sPhone: string) {\r\n const sClean = sPhone.replace('-', '').replace(' ', '').replace('.', '');\r\n this.NavigateExternal(`https://api.whatsapp.com/send?phone=972${sClean}`);\r\n }\r\n\r\n public NavigateWaze(sAddress: string) {\r\n if (this.screenService.IsMobile()) {\r\n this.NavigateExternal(`waze://?q=${sAddress}`);\r\n }\r\n\r\n this.NavigateExternal(`https://waze.com/ul?q=${sAddress}&navigate=yes`);\r\n }\r\n\r\n public IsWhatsAppPhone(sPhone: string): boolean {\r\n return (!Utils.IsEmpty(sPhone) && sPhone.startsWith('05'));\r\n }\r\n\r\n private getParam(param: any): any {\r\n if (Utils.IsEmpty(param) || Utils.IsEmpty(param.getFullYear)) return param;\r\n\r\n const date = param as Date;\r\n\r\n return date.toISOString();\r\n }\r\n\r\n private getParamValue(param: any): any {\r\n if (Utils.IsEmpty(param)) return param;\r\n if (Array.isArray(param) || (typeof param === 'string' && !/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/.test(param))) return param;\r\n\r\n const parts = (param as string).split('-');\r\n return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\r\n }\r\n}\r\n\r\nexport function PrepareRoutes(routes: Route[]): Route[] {\r\n const result: Route[] = [];\r\n //Copy route object to avoid modifying real routes\r\n const oRoutes: Route[] = [...routes];\r\n //Add randomizer prefixes to the routes\r\n M4URouteRandomizers.forEach((oRandomizer) => oRoutes.forEach(oRoute => result.push(GetRouteWithPrefix(oRoute, oRandomizer))));\r\n return result;\r\n}\r\n\r\nexport function GetRoutesWithPrefix(routes: Route[], prefix: string): Route[] {\r\n const result: Route[] = [];\r\n //Copy route object to avoid modifying real routes\r\n const oRoutes: Route[] = [...routes];\r\n\r\n //Add any prefix to the routes\r\n oRoutes.forEach(oRoute => result.push(GetRouteWithPrefix(oRoute, prefix)));\r\n return result;\r\n}\r\n\r\n//Add any prefix to the single route\r\nexport function GetRouteWithPrefix(oRoute: Route, prefix: string): Route {\r\n //Copy route object to avoid modifying real route\r\n const preparedRoute = { ...oRoute };\r\n //Add prefix to the route path\r\n preparedRoute.path = prefix + preparedRoute.path;\r\n return preparedRoute;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { ReplaySubject, Subscription } from 'rxjs';\r\nimport { PushMessageEndpoint } from '../endpoints/push-message.endpoint';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NotificationService {\r\n\r\n private _notificationUnreadSubject = new ReplaySubject(1);\r\n public readonly NotificationUnread$ = this._notificationUnreadSubject.asObservable();\r\n\r\n private _notificationsSubject = new ReplaySubject(1);\r\n public readonly Notifications$ = this._notificationsSubject.asObservable();\r\n\r\n private _notificationReadSubscription: Subscription;\r\n private _notificationUnReadSubscription: Subscription;\r\n private _timerId: any;\r\n\r\n constructor(private pushMessageEndpoint: PushMessageEndpoint,\r\n private appConfigService: AppConfigService) {\r\n }\r\n\r\n public Start() {\r\n if (!this.appConfigService.AppConfig.IsAllowNotifications) return;\r\n\r\n this.LoadPushMessagesUnread();\r\n this._notificationReadSubscription = this.pushMessageEndpoint.NotificationRead$\r\n .subscribe((result: boolean) => result && this.LoadPushMessagesUnread());\r\n }\r\n\r\n public LoadPushMessagesUnread() {\r\n if (!this.appConfigService.AppConfig.IsAllowNotifications) return;\r\n\r\n this._notificationUnReadSubscription = this.pushMessageEndpoint.GetPushMessagesUnread().subscribe((response) => {\r\n if (!response.IsSuccess) return;\r\n \r\n const unreadPushMessages = response.Data as any;\r\n\r\n this._notificationUnreadSubject.next(unreadPushMessages.Item1);\r\n this._notificationsSubject.next(unreadPushMessages.Item2);\r\n\r\n !this._timerId && (this._timerId = setInterval(() => this.LoadPushMessagesUnread(), 60000));\r\n })\r\n }\r\n\r\n public Stop(): void {\r\n clearInterval(this._timerId);\r\n this._notificationReadSubscription && !this._notificationReadSubscription.closed && this._notificationReadSubscription.unsubscribe();\r\n this._notificationUnReadSubscription && !this._notificationUnReadSubscription.closed && this._notificationUnReadSubscription.unsubscribe();\r\n }\r\n}","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\r\n EnumSystemOptionDataTypes,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_EN =\r\n{\r\n Pages:\r\n {\r\n login: 'System Login',\r\n logout: 'Log off',\r\n credentials_activity_status: 'User activity status',\r\n notificationshistory: 'Notifications report',\r\n notification_servers: 'Notification servers',\r\n notification_templates: 'Notification templates',\r\n notifications: 'Notifications',\r\n system_options: 'System options',\r\n credential_login_history: \"Login history Report\",\r\n request_history: \"Request history\",\r\n credentials_report: 'Credentials report',\r\n credentials_creation: 'New credentials assignment',\r\n data_views: 'Database views management',\r\n remote_request_history: \"Remote request history\",\r\n NotificationViewComponent: 'Notification',\r\n PrintBoxDialogComponent: 'Print',\r\n SignBoxDialogComponent: 'Sign Document',\r\n ImageBoxDialogComponent: 'Image',\r\n PhotoBoxDialogComponent: 'Photo',\r\n PasswordManageComponent: 'Credentials management',\r\n CredentialsActivityStatusComponent: 'User activity status',\r\n NotificationsHistoryComponent: 'Notifications report',\r\n PreviewDialogComponent: 'Preview',\r\n NotificationServerComponent: 'Notification server',\r\n NotificationServerListComponent: 'Notification servers',\r\n NotificationTemplateListComponent: 'Notification templates',\r\n NotificationTemplateComponent: 'Notification template',\r\n HtmlBoxDialogComponent: 'HTML Editor',\r\n NotificationTestDialogComponent: 'Notification test',\r\n NotificationPreviewDialogComponent: 'Notification preview',\r\n SystemOptionsComponent: 'System options',\r\n AddSystemOptionDialogComponent: 'Add option',\r\n BarcodeBoxDialogComponent: 'Scan barcode/QR-code',\r\n CredentialLoginHistoryComponent: \"Login History Report\",\r\n RequestHistoryListComponent: \"Request history\",\r\n RequestHistoryComponent: \"Request\",\r\n RemoteRequestHistoryListComponent: \"Remote request history\",\r\n RemoteRequestHistoryComponent: \"Remote request\",\r\n WelcomeUserDialogComponent: \"Welcome message\",\r\n HistoryViewComponent: 'Document changes history',\r\n SystemCredentialsComponent: 'Credentials Report',\r\n SystemCredentialsCreationComponent: 'New credentials assignment',\r\n WelcomeMessageConfigDialogComponent: 'Welcome Notification',\r\n DataViewListComponent: 'Data Views'\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"Hebrew/עברית\",\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"English/אנגלית\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'Phone',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n }, \r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'Don\\'t Send',\r\n ID: 4,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'Email',\r\n SortOrder: 1,\r\n index: 0,\r\n text: 'Email',\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'SMS',\r\n SortOrder: 2,\r\n index: 1,\r\n text: 'SMS',\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'Push message',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'Push message',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"Draft\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"Sending\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"Failure\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"Sent\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"None\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"Email\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"Excel\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"Print\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"None\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"To show\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"Showed\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'Application Name Hebrew'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'Application Name English'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'Application URL'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'Session timeout'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'Session expiry'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'Enable request logging'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'Enable remote logging'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'Show expired timeout alert',\r\n DataType: EnumSystemOptionDataTypes.Boolean,\r\n SectionName: 'Framework'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'Show almost expired timeout alert'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'Support credentials management'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'Supported user welcome'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'Support password change'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'Support password recovery'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'Support login by otp'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'Support login by password'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'Auto create credentials'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'Auto create credentials type'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'Require tax number for OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'Password change interval, days'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'Password complexity length'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'Password complexity minimum char symbols'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'Password complexity minimum digit symbols'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'Bad login. Attempt before lock'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'Bad login. Attempts check interval, minutes'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'Bad login. Attempt lockout interval, minutes'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'XFrame blocking options'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'Deployed behind load balancer / proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'Support Email notification method'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'Support SMS notification method'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'Support WhatsApp notification method'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'Requests Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'Remote Requests Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'Notifications Retention Period'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'Sessions Retention Period'\r\n }\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"All\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"Success\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"Failure\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"Success\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"Failure\"\r\n },\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"Field changed\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"Row added\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"Row deleted\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Special\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'Yes'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'No'\r\n }\r\n ],\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"Language\",\r\n lblUserName: \"User name\",\r\n lblPassword: \"Password\",\r\n titleLogin: \"System Login\",\r\n btnLogin: \"Login\",\r\n btnLogout: 'Logout',\r\n btnChangePassword: 'Change password',\r\n btnContactUs: \"Contact us\",\r\n btnRecoverPassword: 'Forgot password',\r\n lblSaveCredentials: 'Remember Me',\r\n titleLogout: \"Logoff\",\r\n titleLogoutLong: \"Logged off succesfully\",\r\n titleLogoutLast: \"You are being redirected to the login screen\",\r\n titleSessionExpiredTitle: \"Session Expired\",\r\n titleSessionExpired: \"You have been logged off due to inactivity or a change in user credentials on the server. Please log in again \",\r\n titleChangePasswordTitle: \"Change password\",\r\n titleChangePassword: \"Enter a new password. The password should be a strong one, and follow the rules set by your IT staff\",\r\n titleChangePasswordTitle2: \"Change expired password\",\r\n titleException: \"System error\",\r\n titleExceptionLong: \"Error details are displayed below. Please send them to the system administrator.\\nUnexpected error has occured:\",\r\n titleComingSoonTitle: \"This feature is coming soon\",\r\n titlePasswordChanged: 'The password has been changed succesfully. Please use your new password to login again',\r\n titleIdentification: 'User identification',\r\n titlePasswordEntry: 'New password entry',\r\n titleRecoverPasswordTitle: 'Forgot password recovery',\r\n titleWelcomePasswordTitle: 'First system login',\r\n titleRecoverPassword1: 'Enter your user name',\r\n titleRecoverPassword2: 'You can recover your forgotten password, as long as you have access to the email or phone that is saved in your account',\r\n titleRecoverPassword3: 'To change the password please enter the verification code sent to you',\r\n titleRecoverPassword4: 'Enter a new password. The password should be a strong one, and follow the rules set by your IT staff',\r\n titleWelcomePassword2: 'Welcome! Please enter the username and the verification code you have received, in order to proceede to setting up your new password',\r\n titleWelcomePassword3: \"Enter a new password. The password should be a strong one, and follow the rules set by your IT staff. From now on, you will use this password to enter the system\",\r\n btnReEntry: \"Re-Login\",\r\n genOK: 'OK',\r\n genYes: \"Yes\",\r\n genNo: \"No\",\r\n genCancel: \"Cancel\",\r\n genNoData: \"No data exists\",\r\n genPrint: 'Print',\r\n genSign: 'Sign',\r\n genReset: 'Reset',\r\n genTakePhoto: 'Take Photo',\r\n genSavePhotos: 'Save photos',\r\n genDownload: 'Download',\r\n msgSignHere: 'Please draw your signature inside the square',\r\n msgSignatureRequired: 'You must provide your signature to continue',\r\n msgPasswordsDontMatch: 'Password and password confirmation do not match',\r\n errorNetwork: \"Server communication error - check your network connection\",\r\n errorSessionExpired: \"Session expired due to inactivity\",\r\n errorUserInvalid: \"User details have changes. Please log in again\",\r\n errorNotInitialized: \"Unable to login since system settings were not loaded propely. Please reload the page\",\r\n errorUnexpected: \"@@@Unexpected server error has occured@@@: {0}\",\r\n errorUnauthorized: \"User is not authorized for this operation\",\r\n errorPasswordExpired: \"Password has expired. Please choose a different password\",\r\n msgFinishEditing: \"Please finish editing current line before adding the new one\",\r\n errorUserNameNotFound: \"User name not found\",\r\n errorIsNotExistsPhoneAndEmail: \"No email or phone is defined. Contact support\",\r\n lblDay1: \"Sunday\",\r\n lblDay2: \"Monday\",\r\n lblDay3: \"Tuesday\",\r\n lblDay4: \"Wednesday\",\r\n lblDay5: \"Thursday\",\r\n lblDay6: \"Friday\",\r\n lblDay7: \"Saturday\",\r\n lblDay1s: \"Sun\",\r\n lblDay2s: \"Mon\",\r\n lblDay3s: \"Tue\",\r\n lblDay4s: \"Wed\",\r\n lblDay5s: \"Thu\",\r\n lblDay6s: \"Fri\",\r\n lblDay7s: \"Sat\",\r\n msgSuccess: \"Operation completed succesfully\",\r\n msgNotPerformed: \"Unable to complete operation\",\r\n lblTimes: 'times',\r\n lblUser: \"Standard user\",\r\n btnCancelDocument: 'Cancel Document',\r\n lblBy: 'By',\r\n titleCreatedBy: 'Created by',\r\n titleCreated: 'Created',\r\n titleCreatedAt: 'Created at',\r\n titleAgo: 'Ago',\r\n lblAgo: 'ago',\r\n lblSearch: 'Search',\r\n lblCloseSearch: 'Close search',\r\n lblColumnChooser: 'Show Column Chooser',\r\n lblColumnHiding: 'Switch Column Hiding',\r\n lblShowGridFilter: 'Show Advanced Filters',\r\n lblHideGridFilter: 'Hide Advanced Filters',\r\n lblExcel: 'Export to Excel',\r\n lblPdf: 'Export to PDF',\r\n lblViewList: 'View as list of cards',\r\n lblViewGrid: 'View as table',\r\n lblDisplayUserName: 'User name',\r\n lblLastUseDate: 'Last action at',\r\n lblLastUseBefore: 'Last action before',\r\n progressIndicator: 'Transferring data.. Please wait',\r\n lblUpdated: 'Updated',\r\n lblNoSorting: '- Default -',\r\n lblVersion: 'Version',\r\n lblDateIsNull: \"Date is null\",\r\n f702: \"less than a minute\",\r\n f703: \"5 minutes\",\r\n f704: \"10 minutes\",\r\n f705: \"15 minutes\",\r\n f706: \"half an hour\",\r\n f707: \"less than an hour\",\r\n f709: \"hour and a half\",\r\n f710: \"more than two hours\",\r\n f711: \"{0} hours\",\r\n f712: \"day\",\r\n f713: \"two days\",\r\n f714: \"{0} days\",\r\n f715: \"over a week\",\r\n f716: \"more than two weeks\",\r\n f717: \"{0} weeks\",\r\n f718: \"over a month\",\r\n f720: \"two months\",\r\n f721: \"{0} months\",\r\n f722: \"over a year\",\r\n f723: \"more than two years\",\r\n f724: \"{0} years\",\r\n f725: \"less than a day\",\r\n lblOldPassword: 'Old password',\r\n lblNewPassword1: 'New password',\r\n lblNewPassword2: 'Confirm password',\r\n lblRecoveryType: 'Password recovery method',\r\n lblRecoveryPhone: 'Phone number for password recovery',\r\n lblRecoveryEmail: 'Email address for password recovery',\r\n btnSendRecoveryCode: 'Send verification code',\r\n btnCheckUserName: 'Recover password',\r\n btnBackToLogin: 'Back to login page',\r\n lblRecoveryToken: 'Verification code',\r\n btnResend: 'Send again',\r\n btnSaveChanges: 'Save changes',\r\n btnGeneratePassword: 'Generate password',\r\n btnCreateCredentials: 'Create credentials',\r\n btnUnlockUser: 'Unlock user',\r\n lblDisplayUsername: 'Display user name',\r\n lblDisplayUserDescription: 'Display user description',\r\n lblCredentialsNotExist: 'User not yet created',\r\n lblPendingWelcome: 'User pending activation through welcome link',\r\n titleUserInformation: 'User Information',\r\n errorMaxSizeUploadError: 'Size of some selected files is bigger that {0} and they are automatically excluded from the selection.',\r\n msgFileSizeRestriction: 'Max file size is {0}.',\r\n btnSelectFiles: 'Select files',\r\n btnMakePhoto: 'Make photo',\r\n lblAttachFileSize: 'File size',\r\n lblFilters: 'Filters',\r\n lblAt: 'At',\r\n\r\n lblObjectName: 'Object name',\r\n lblIsOverride: 'Is Overriden',\r\n lblValidation: 'Is Valid',\r\n lblDViewsDBDuration: 'Original Duration',\r\n lblXViewsDBDuration: 'Overriden Duration',\r\n lblCheckPerformance: 'Check Performance',\r\n lblValidateViews: 'Validate structure',\r\n lblViewError: 'Error',\r\n\r\n lblLoginOTPSendMethod: 'Send one time password via',\r\n lblLoginOTPEmail: 'Email address for send one time password',\r\n lblLoginOTPPhone: 'Phone number for send one time password',\r\n lblLoginOTPOTP: 'One time password',\r\n lnkLoginByOTP: 'Login by one time password',\r\n msgNotificationSent: 'Notification is sent',\r\n btnLoginOtpSendOtp: 'Send password',\r\n lnkLoginByPassword: 'Login by password',\r\n\r\n lblApply: 'Apply',\r\n lblTaxNumber: 'Tax number',\r\n\r\n lblIsActive: 'Active',\r\n lblEmail: 'Email',\r\n lblPhone: 'Phone',\r\n lblIsPendingWelcome: 'Is Pending Welcome',\r\n lblIsOnline: 'Is Online',\r\n lblIsLockedOut: 'Is Locked Out',\r\n lblCreateCredentials: 'Create Credentials',\r\n\r\n msgRouteNotFound: 'Route not found',\r\n btnReload: 'Reload',\r\n lblHideColumn: 'Hide Column',\r\n lblShowHiddenColumns: 'Show Hidden Columns',\r\n\r\n lblName: 'Name',\r\n lblDescription: 'Description',\r\n\r\n msgLoading: \"Processing, please wait\",\r\n lblSentDate: \"Sent date\",\r\n lblSentBy: \"Sent by\",\r\n lblEntryID: \"ID\",\r\n lblFromAddress: \"From Address\",\r\n lblFromDisplayAddress: \"From name\",\r\n lblAddress: \"Address\",\r\n lblSubject: \"Subject\",\r\n lblMailBody: \"Body\",\r\n lblDeliveryOption: \"Delivery option\",\r\n lblSendNotificationBy: \"Send notification by\",\r\n lblUsernameCreationOption: 'Username creation by',\r\n lblStatus: \"Status\",\r\n lblCCAddress: \"Copy to\",\r\n lblBccAddress: \"BCC\",\r\n lblFailureDescription: \"Failure description\",\r\n lblNotificationTemplate: \"Template name\",\r\n lblFrom: \"From \",\r\n lblUntil: \"Until \",\r\n\r\n lblAdd: \"Add\",\r\n lblClear: \"Clear\",\r\n lblCompactMode: \"Compact Mode\",\r\n\r\n lblSessionAlmostExpiredTitle: \"Session will expire soon\",\r\n lblSessionAlmostExpiredPrompt: \"Long period of inactivity was detected. Your session will expire soon\",\r\n lblSessionExpiredTitle: \"Session expired\",\r\n lblFirstDate: \"First Date\",\r\n lblLastDate: \"Last Date\",\r\n lblSessionExpiredPrompt: \"You session has expired. You will be automaticaly re-directed to login page.\",\r\n\r\n lblNotificationContent: \"Notification Content\",\r\n lblGeneral: \"General\",\r\n lblOptions: \"Options\",\r\n lblCustom: \"Custom\",\r\n\r\n lblMFACode: \"Code\",\r\n titleMFACodeOnEmailSent: \"The one-time password was sent to your email. Enter it below\",\r\n titleMFACodeOnPhoneSent: \"The one-time password was sent to your mobile. Enter it below\",\r\n\r\n lblMFAMethod: \"Multi-factor authentication\",\r\n Month_1: \"January\",\r\n Month_2: \"February\",\r\n Month_3: \"March\",\r\n Month_4: \"April\t\",\r\n Month_5: \"May\",\r\n Month_6: \"June\",\r\n Month_7: \"July\",\r\n Month_8: \"August\",\r\n Month_9: \"September\",\r\n Month_10: \"October\",\r\n Month_11: \"November\",\r\n Month_12: \"December\",\r\n\r\n lblExport: \"Export\",\r\n lblCredentialType: \"Credential Type\",\r\n lblIsRestrictByIP: \"Restrict by IP\",\r\n lblIsExcludeFromMFA: \"Exclude from MFA\",\r\n lblIPRangeStart: \"IP range start\",\r\n lblIPRangeEnd: \"IP range end\",\r\n lblIPErrorMessage: \"An IP address must have "000.000.000.000" format\",\r\n msgIPRangesIsEmpty: \"You have to add at least one IP address/range\",\r\n msgIPRangeIsEmpty: \"Enter a valid IP address/range\",\r\n msgPasswordMinLength: \"The password length must be at least {0} symbols.\",\r\n msgPasswordMinCountDigits: \"The password must contain at least {0} digits.\",\r\n msgPasswordMinCountLetters: \"The password must contain at least {0} letters.\",\r\n msgPasswordComplexityRequirement: \"The password length must be at least {0} symbols long, with minimum {1} digits and {2} letters\",\r\n errorOnlyImageAllowed: \"Only images allowed.\",\r\n btnClose: \"Close\",\r\n lblPhoto: \"Photo\",\r\n\r\n lblDragAndDrop: \"You can drag & drop files here\",\r\n errorRequiredMessage: \"Field is required\",\r\n titleDuplicate: \"Duplicate\",\r\n lblAllNotifications: \"All notifications\",\r\n\r\n lblSMTPServer: \"SMTP Server\",\r\n lblSMTPPort: \"SMTP Port\",\r\n lblSMTPUserName: \"SMTP Username\",\r\n lblSMTPPassword: \"SMTP Password\",\r\n lblSMTPUseSSL: \"SMTP Use SSL\",\r\n lblSMSEndpoint: \"SMS Endpoint\",\r\n lblSMSUserName: \"SMS Username\",\r\n lblSMSPassword: \"SMS Password\",\r\n lblSMSToken: \"SMS Token\",\r\n lblSMSEndPointIsInforU: \"SMS Provider\",\r\n\r\n titleTemplateInformation: \"Notification template information\",\r\n titleEmailInformation: \"E-mail template settings\",\r\n lblFromEmail: \"From e-mail\",\r\n lblFromEmailDisplay: \"From e-mail display\",\r\n titlePhoneInformation: \"SMS template settings\",\r\n lblNotificationServer: \"Notification server\",\r\n lblFromPhone: \"From phone\",\r\n lblSMSBody: \"SMS body\",\r\n titlePushMessagesInformation: \"Push messages template settings\",\r\n lblPushMessageBody: \"Push message body\",\r\n lblHTMLBody: \"HTML body\",\r\n btnSave: 'Save',\r\n titleDelete: 'Delete',\r\n lblUseDefault: 'Use default',\r\n lblNoUnreadMessages: 'No unread messages',\r\n lblTo: 'To',\r\n lblPushMessageContent: 'Push message content',\r\n lblSmsMessageContent: 'SMS message content',\r\n lblIsAutomatic: 'Is automatic',\r\n lblSystem: 'System',\r\n lblPopupShowStatus: 'Popup show status',\r\n lblEmailContent: 'Email content',\r\n btnShowInEditor: 'Show in editor',\r\n titleLeavePageConfirmation: 'Data will be lost, do you want to continue?',\r\n btnLogOff: 'Log Off',\r\n btnStayConnected: 'Stay Connected',\r\n btnGoToHomePage: 'Go To Home Page',\r\n lblReadDate: 'Read date',\r\n msgDeleteNotificationTemplateQuestion: 'Notification template could be used in the application. Are you sure want to delete it?',\r\n lblNotificationServerWrong: 'Notification server configuration is incorrect. Please make changes and try again',\r\n msgInvalidEmail: 'Email is invalid or incorrect format',\r\n btnTestServer: 'Test server',\r\n lblMIDIsMissing: \"MID is missing\",\r\n lblEnterMID: \"Enter new MID code.\",\r\n btnShowPreview: \"Show preview\",\r\n lblIsServer: \"Server\",\r\n lblIsClient: \"Client\",\r\n lblModuleName: \"Module\",\r\n lblLogin: \"Login\",\r\n lblFramework: \"Framework\",\r\n lblOption: \"Option\",\r\n lblValue: \"Value\",\r\n lblSectionName: \"Section\",\r\n lblAddOption: 'Add option',\r\n msgOptionAlreadyExists: 'Option already exists',\r\n msgOptionEmpty: 'Option {0} is empty',\r\n lblBadLogin: 'Bad login',\r\n msgRemoveOption: \"Are you sure you want to delete the Option '{0}'?\",\r\n titleEmailConfiguration: \"E-mail Configuration\",\r\n titleSMSConfiguration: \"SMS Configuration\",\r\n msgDeleteNotificationServerQuestion: \"Notification server could be used in the application. Are you sure want to delete it?\",\r\n msgNoData: \"No Data\",\r\n lblEmailHeader: \"Email Header\",\r\n lblConfigure: \"Configure\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"Please enter a white-listed phone number of name up to 11 characters in english\",\r\n lblNotifications: \"Notifications\",\r\n lblMinimize: \"Minimize\",\r\n lblShowMore: \"Show more\",\r\n titleWhatsAppInformation: \"WhatsApp template settings\",\r\n lblWhatsAppBody: \"WhatsApp Message Body\",\r\n lblWhatsAppApiKey: \"WhatsApp Api Key\",\r\n lblWhatsAppEndpoint: \"WhatsApp Endpoint\",\r\n titleWhatsAppConfiguration: \"WhatsApp Configuration\",\r\n titleNotificationServerList: \"Notification server list\",\r\n titleNotificationTemplateList: \"Notification template list\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"Choose option\",\r\n titleWebAPIAllowedIPs: \"Allowed IPs\",\r\n lblIpAddress: \"IP Address\",\r\n lblLoginDate: \"Login Date\",\r\n lblPrint: \"Print\",\r\n lblDateFrom: 'Date From',\r\n lblDateTo: 'Date To',\r\n lblDate: \"Date\",\r\n msgCouldNotStartVideoError: 'Camera is not available',\r\n lblCameraModeVideo: 'Video',\r\n lblCameraModePhoto: 'Photo',\r\n titlePreview: 'Preview',\r\n msgLogoutQuestion: 'Are you sure you want to logout?',\r\n lblGroupPanel: 'Drag column to group',\r\n lblExpandAll: 'Expand All',\r\n lblMultiEmailError: 'Value is invalid. Use symbol ; as email separator',\r\n msgPhotoMinCountError: 'The minimum count is {0}',\r\n msgPhotoMaxCountError: 'The maximum count is {0}',\r\n lblRestoreDefaultView: \"Restore default view\",\r\n lblStartDate: \"Start date\",\r\n lblDuration: \"Duration\",\r\n lblController: \"Controller\",\r\n lblAction: \"Action\",\r\n lblMethod: \"Method\",\r\n lblStatusCode: \"Status code\",\r\n lblRequestData: \"Request data\",\r\n lblQueryString: \"Query string\",\r\n lblBody: \"Body\",\r\n lblResponse: \"Response\",\r\n msgTextCopied: \"Text copied\",\r\n lblCopy: \"Copy\",\r\n btnGoToLoginHistory: \"Go to login history\",\r\n btnGoToRequestsHistory: \"Go to requests history\",\r\n btnManageCredentials: \"Manage Credentials\",\r\n btnGoToCredentialsReport: \"Go to credentials report\",\r\n btnWelcomeUser: \"Send welcome message\",\r\n lblTestFromPhone: \"From phone\",\r\n lblHistory: \"Changes log\",\r\n lblNewValue: \"New value\",\r\n lblOldValue: \"Old value\",\r\n lblFieldCaption: \"Field\",\r\n lblDocumentCaption: \" Document\",\r\n lblHistoryLineAdded: \"{0} {1} was added.\",\r\n lblHistoryLineRemoved: \"{0} {1} was removed.\",\r\n lblHistoryLineNumber: \"{0} {1}\",\r\n lblHistoryNotFound: \"No changes found.\",\r\n lblHistoryChangeAdded: \"{0} {1} was created\",\r\n lblHistoryChangeRemoved: \"{0} {1} was deleted\",\r\n msgLoadingPDF: 'Loading PDF file...',\r\n lblImpersonatedBy: 'Impersonated By',\r\n lblIsUserCustomTemplate: \"User custom template\",\r\n msgIsUserCustomTemplateEnable: \"If the option 'Editable' is enabled, you will be able to change the template manually, but the system won't be able to update it automatically\",\r\n btnEnableEditable: \"Enable editable\",\r\n btnDisableEditable: \"Disable editable\",\r\n msgScreenSizeChangedRefresh: 'Screen size is changed. Please refresh browser window.',\r\n msgOrientationChangedRefresh: 'Orientation is changed. Please refresh browser window.',\r\n lblNotAssigned: \"- Unassigned -\"\r\n }\r\n};\r\n","import {\r\n EnumInfoUTypes,\r\n EnumLanguages,\r\n EnumMFAMethods,\r\n EnumNotificationDeliveryOptions,\r\n EnumNotificationStatuses,\r\n EnumPopupShowStatuses,\r\n EnumSystemOptions,\r\n EnumUserLoginStatus,\r\n EnumYesNo,\r\n HistoryEventTypesEnum\r\n} from '@core/framework/sysenums.enum';\r\n\r\nexport const Resources_HE =\r\n{\r\n Pages:\r\n {\r\n login: 'התחברות למערכת',\r\n logout: 'התנתק',\r\n credentials_activity_status: 'מצב פעילות משתמשים',\r\n notificationshistory: 'דוח התראות שנשלחו',\r\n notification_servers: 'שרתי התראות',\r\n notification_templates: 'תבניות להתראות',\r\n notifications: 'התראות',\r\n system_options: 'הגדרות מערכת',\r\n credential_login_history: \"דוח התחברויות משתמשים\",\r\n request_history: \"דוח פניות לשרת\",\r\n credentials_report: 'דוח משתמשים',\r\n data_views: 'ניהול Views בסיס נתונים',\r\n credentials_creation: 'יצירת משתמשים חדשים',\r\n remote_request_history: \"דוח בקשות יוצאות\",\r\n NotificationViewComponent: 'התראה שנשלחה',\r\n PrintBoxDialogComponent: 'הדפסה',\r\n SignBoxDialogComponent: 'חתימה על מסמך',\r\n ImageBoxDialogComponent: 'תמונה',\r\n PhotoBoxDialogComponent: 'צילום',\r\n PasswordManageComponent: 'ניהול פרטי התחברות',\r\n CredentialsActivityStatusComponent: 'מצב פעילות משתמשים',\r\n NotificationsHistoryComponent: 'דוח התראות שנשלחו',\r\n PreviewDialogComponent: 'תצוגה מקדימה',\r\n NotificationServerComponent: 'שרת התראות',\r\n NotificationServerListComponent: 'שרתי התראות',\r\n NotificationTemplateListComponent: 'תבניות להתראות',\r\n NotificationTemplateComponent: 'תבנית התראה',\r\n HtmlBoxDialogComponent: 'עורך HTML',\r\n NotificationTestDialogComponent: 'בדיקת התראות',\r\n NotificationPreviewDialogComponent: 'תצוגה מקדימה של התראות',\r\n SystemOptionsComponent: 'הגדרות מערכת',\r\n AddSystemOptionDialogComponent: 'הוסף הגדרה',\r\n BarcodeBoxDialogComponent: 'סרוק ברקוד/QR-code',\r\n CredentialLoginHistoryComponent: \"דוח התחברויות משתמשים\",\r\n RequestHistoryListComponent: \"דוח פניות לשרת\",\r\n RequestHistoryComponent: \"פניה לשרת\",\r\n WelcomeUserDialogComponent: \"הודעת ברוכים הבאים\",\r\n HistoryViewComponent: 'היסטוריית שינוים',\r\n SystemCredentialsComponent: 'דוח משתמשים',\r\n SystemCredentialsCreationComponent: 'יצירת משתמשים חדשים',\r\n WelcomeMessageConfigDialogComponent: 'הודעה על התחברות ראשונית למערכת',\r\n DataViewListComponent: 'ניהול Views בסיס נתונים'\r\n },\r\n Lists:\r\n {\r\n Languages:\r\n [\r\n {\r\n Value: EnumLanguages.Hebrew,\r\n Text: \"עברית/Hebrew\"\r\n },\r\n {\r\n Value: EnumLanguages.English,\r\n Text: \"אנגלית/English\"\r\n },\r\n ],\r\n\r\n NotificationDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\",\r\n ID: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n ID: 3\r\n }\r\n ],\r\n UserCreationOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n ID: 0\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'טלפון',\r\n ID: 1\r\n }\r\n ],\r\n WelcomeDeliveryOptions: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: 'אימייל',\r\n ID: 0,\r\n SortOrder: 1\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: 'הודעת SMS',\r\n ID: 1,\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n ID: 3,\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.DontSend,\r\n Text: 'לא לשלוח',\r\n ID: 2,\r\n SortOrder: 4\r\n }\r\n ],\r\n NotificationTypes: [\r\n {\r\n Value: EnumNotificationDeliveryOptions.Email,\r\n Text: \"אימייל\",\r\n SortOrder: 1,\r\n index: 0,\r\n text: \"אימייל\",\r\n Name: EnumNotificationDeliveryOptions.Email\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.SMS,\r\n Text: \"הודעת SMS\",\r\n SortOrder: 2,\r\n index: 1,\r\n text: \"הודעת SMS\",\r\n Name: EnumNotificationDeliveryOptions.SMS\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.PushMessage,\r\n Text: 'התראה באפליקציה',\r\n SortOrder: 3,\r\n index: 2,\r\n text: 'התראה באפליקציה',\r\n Name: EnumNotificationDeliveryOptions.PushMessage\r\n },\r\n {\r\n Value: EnumNotificationDeliveryOptions.WhatsApp,\r\n Text: 'הודעת WhatsApp',\r\n SortOrder: 4,\r\n index: 3,\r\n text: 'הודעת WhatsApp',\r\n Name: EnumNotificationDeliveryOptions.WhatsApp\r\n }\r\n ],\r\n NotificationStatuses:\r\n [\r\n {\r\n Value: EnumNotificationStatuses.Draft,\r\n Text: \"טיוטה\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sending,\r\n Text: \"שליחה\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Failure,\r\n Text: \"נכשל\"\r\n },\r\n {\r\n Value: EnumNotificationStatuses.Sent,\r\n Text: \"נשלח\"\r\n },\r\n ],\r\n NotificationPredefinedSmtpServers: [\r\n {\r\n Text: \"Office 365\",\r\n SMTPServer: \"smtp.office365.com\",\r\n SMTPPort: 587,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"Gmail\",\r\n SMTPServer: \"smtp.gmail.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: true\r\n },\r\n {\r\n Text: \"SendGrid\",\r\n SMTPServer: \"smtp.sendgrid.com\",\r\n SMTPPort: 111,\r\n SMTPUseSSL: false\r\n }\r\n ],\r\n NotificationPredefinedSmsServers: [\r\n {\r\n Text: \"InforU\",\r\n SMSEndpoint: \"https://uapi.inforu.co.il/SendMessageXml.ashx\",\r\n SMSToken: 111,\r\n SMSEndPointIsInforU: EnumInfoUTypes.InforU\r\n },\r\n {\r\n Text: \"Unicell\",\r\n SMSEndpoint: \"http://api.soprano.co.il/\",\r\n SMSToken: 222,\r\n SMSEndPointIsInforU: EnumInfoUTypes.Unicell\r\n }\r\n ],\r\n MFAMethods:\r\n [\r\n {\r\n Value: EnumMFAMethods.None,\r\n Text: \"ללא\"\r\n },\r\n {\r\n Value: EnumMFAMethods.Email,\r\n Text: \"מייל\"\r\n },\r\n {\r\n Value: EnumMFAMethods.SMS,\r\n Text: \"SMS\"\r\n },\r\n {\r\n Value: EnumMFAMethods.WhatsApp,\r\n Text: \"WhatsApp\"\r\n }\r\n ],\r\n ExportMenuItems: [\r\n {\r\n SortOrder: 0,\r\n Value: 1,\r\n Text: \"אקסל\"\r\n },\r\n {\r\n SortOrder: 1,\r\n Value: 2,\r\n Text: \"הדפס\"\r\n }\r\n ],\r\n PopupShowStatuses: [\r\n {\r\n Value: EnumPopupShowStatuses.None,\r\n Text: \"ללא\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.ToShow,\r\n Text: \"הצג\"\r\n },\r\n {\r\n Value: EnumPopupShowStatuses.Showed,\r\n Text: \"הוצג\"\r\n }\r\n ],\r\n InfoUTypes: [\r\n {\r\n Value: EnumInfoUTypes.Unicell,\r\n Text: \"Unicell\"\r\n },\r\n {\r\n Value: EnumInfoUTypes.InforU,\r\n Text: \"InforU\"\r\n }\r\n ],\r\n SystemOptions: [\r\n {\r\n Value: EnumSystemOptions.AppNameHE,\r\n Text: 'שם בעברית'\r\n }, {\r\n Value: EnumSystemOptions.AppNameEN,\r\n Text: 'שם באנגלית'\r\n }, {\r\n Value: EnumSystemOptions.AppURL,\r\n Text: 'קישור למערכת'\r\n }, {\r\n Value: EnumSystemOptions.SessionTimeout,\r\n Text: 'משך זמן לניתוק סשן, דקות'\r\n }, {\r\n Value: EnumSystemOptions.SessionExpiry,\r\n Text: 'משך זמן להזדהות מחדש, דקות'\r\n }, {\r\n Value: EnumSystemOptions.EnableRequestLogging,\r\n Text: 'אפשר בקשת גישה'\r\n }, {\r\n Value: EnumSystemOptions.EnableRemoteLogging,\r\n Text: 'אפשר חיבור מרחוק'\r\n }, {\r\n Value: EnumSystemOptions.ShowExpiredTimeoutAlert,\r\n Text: 'הצג תוקף התחברות למערכת'\r\n }, {\r\n Value: EnumSystemOptions.ShowAlmostExpiredTimeoutAlert,\r\n Text: 'הצג תוקף התחברות למערכת שעומד לפוג'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedCredentialsManagement,\r\n Text: 'תמיכה בניהול אישורים'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedUserWelcome,\r\n Text: 'תמיכה בהקמת משתמשים חדשים'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordChange,\r\n Text: 'תמיכה בשינוי סיסמא לאחר הזדהות'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedPasswordRecovery,\r\n Text: 'תמיכה בשחזור סיסמא ששכחתי'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByOTP,\r\n Text: 'אפשר חיבור ב-OTP'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportedLoginByPassword,\r\n Text: 'אפשר חיבור באמצעות סיסמא'\r\n }, {\r\n Value: EnumSystemOptions.IsAutoCreateCredentials,\r\n Text: 'צור משתמש במערכת באופן אוטומטי בחיבור ראשון דרך OTP'\r\n }, {\r\n Value: EnumSystemOptions.AutoCreateCredentialsType,\r\n Text: 'סוג משתמש ליצירה אוטומטית'\r\n }, {\r\n Value: EnumSystemOptions.IsRequireTaxNumberForOTP,\r\n Text: 'בדוק מספר ח.פ בהזדהות עם OTP'\r\n }, {\r\n Value: EnumSystemOptions.PasswordChangeIntervalDays,\r\n Text: 'תדירות החלפת סיסמה (ימים)'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityLen,\r\n Text: 'מורכבות סיסמה - מספר תווים מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinChars,\r\n Text: 'מורכבות סיסמה - מספר אותיות מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.PasswordComplexityMinDigits,\r\n Text: 'מורכבות סיסמה - מספר ספרות מינימאלי'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptBeforeLock,\r\n Text: 'מספר ניסיונות התחברות כושלים לפני נעילת משתמש'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes,\r\n Text: 'חלון זמן לבדיקת מספר ניסיונות התחברות, דקות'\r\n }, {\r\n Value: EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes,\r\n Text: 'משך נעילת משתמש לאחר ניסיון התחברות כושל, דקות'\r\n }, {\r\n Value: EnumSystemOptions.XFrameOptions,\r\n Text: 'אפשרויות חסימת XFrame'\r\n }, {\r\n Value: EnumSystemOptions.IsDeployedBehindLoadBalancer,\r\n Text: 'התקנה מאחורי Load Balancer או Proxy'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodEmail,\r\n Text: 'שליחה של הודעות מערכת באמצעות האימייל'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodSMS,\r\n Text: 'שליחה של הודעות מערכת באמצעות SMS'\r\n }, {\r\n Value: EnumSystemOptions.IsSupportNotificationMethodWhatsApp,\r\n Text: 'שליחה של הודעות מערכת באמצעות WhatsApp'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRequests,\r\n Text: 'מספר ימים לשמירת בקשות שהתקבלו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodRemoteRequests,\r\n Text: 'מספר ימים לשמירת בקשות שנשלחו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodNotifications,\r\n Text: 'מספר ימים לשמירת התרעות שנשלחו'\r\n }, {\r\n Value: EnumSystemOptions.RetentionPeriodSessions,\r\n Text: 'מספר ימים לשמירת לוג סישנים'\r\n }\r\n ],\r\n UserLoginStatuses: [\r\n {\r\n Value: EnumUserLoginStatus.All,\r\n Text: \"הכל\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Success,\r\n Text: \"הצליח\"\r\n },\r\n {\r\n Value: EnumUserLoginStatus.Failure,\r\n Text: \"נכשל\"\r\n }\r\n ],\r\n IsSuccessStatuses: [\r\n {\r\n Value: true,\r\n Text: \"הצליח\"\r\n },\r\n {\r\n Value: false,\r\n Text: \"נכשל\"\r\n }\r\n ],\r\n HistoryEventTypesEnum: [\r\n {\r\n Value: HistoryEventTypesEnum.FieldChange,\r\n Text: \"שינוי ערך\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowAdded,\r\n Text: \"נוספה שורה\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.RowDeleted,\r\n Text: \"שורה נמחקה\"\r\n },\r\n {\r\n Value: HistoryEventTypesEnum.Special,\r\n Text: \"Special\"\r\n }\r\n ],\r\n YesNo:\r\n [\r\n {\r\n Value: EnumYesNo.Yes,\r\n Text: 'כן'\r\n },\r\n {\r\n Value: EnumYesNo.No,\r\n Text: 'לא'\r\n }\r\n ],\r\n },\r\n Translations:\r\n {\r\n lblLanguage: \"שפה\",\r\n lblUserName: \"שם משתמש\",\r\n lblPassword: \"סיסמה\",\r\n titleLogin: \"כניסה למערכת\",\r\n btnLogin: \"כניסה למערכת\",\r\n btnLogout: 'התנתק',\r\n btnChangePassword: 'שנה סיסמה',\r\n btnContactUs: \"צור קשר\",\r\n btnRecoverPassword: 'שכחתי סיסמה',\r\n lblSaveCredentials: 'שמור פרטי הזדהות',\r\n titleLogout: \"נותקת מהמערכת\",\r\n titleLogoutLong: \"נותקת מהמערכת בהצלחה.\",\r\n titleLogoutLast: \"הינך מועבר למסך הכניסה\",\r\n titleSessionExpiredTitle: \"ניתוק עקב חוסר פעילות\",\r\n titleSessionExpired: \"נותקת מהמערכת עקב חוסר פעילות או שינוי בפרטי המשתמש בשרת. אנא בצע כניסה מחודשת למערכת\",\r\n titleChangePasswordTitle: \"שינוי סיסמה\",\r\n titleChangePassword: \"בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת\",\r\n titleChangePasswordTitle2: \"שינוי סיסמה שפג תוקפה\",\r\n titleException: \"שגיאת מערכת\",\r\n titleExceptionLong: \"אירעה שגיאה בלתי צפויה במערכת\\nפרטי השגיאה מופיעים מטה - אנא העבר אותם למנהל המערכת\",\r\n titleComingSoonTitle: \"בקרוב! גם זה יפותח..\",\r\n titlePasswordChanged: 'הסיסמה הוחלפה בהצלחה. אנא השתמך בסיסמה החדשה על מנת להכנס מחדש למערכת',\r\n titleIdentification: 'הזדהות',\r\n titlePasswordEntry: 'הזנת סיסמה חדשה',\r\n titleRecoverPasswordTitle: 'שחזור סיסמה שנשכחה',\r\n titleWelcomePasswordTitle: 'כניסה ראשונית למערכת',\r\n titleRecoverPassword1: 'הקלד את שם המשתמש',\r\n titleRecoverPassword2: 'באפשרותך לשחזר סיסמה שנשכחה, אם יש לך גישה לאימייל או לטלפון שמוגדר בחשבון משתמש שלך',\r\n titleRecoverPassword3: 'על מנת לבחור סיסמא חדשה, יש להקליד את הקוד אימות שנשלח אלייך באמצעי שבחרת',\r\n titleRecoverPassword4: 'בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת',\r\n titleWelcomePassword2: 'ברוך הבא למערכת. יש להזין את שם המשתמש והקוד הסודי שנשלח אלייך על מנת לעבור לבחירת הסיסמה',\r\n titleWelcomePassword3: \"בחר סיסמה חדשה העומדת בדרישות המורכבות שהוגדרו על ידי מנהל המערכת. סיסמה זו תשמש אותך מעכשיו על מנת להיכנס למערכת\",\r\n btnReEntry: \"כניסה מחודשת\",\r\n genOK: 'אישור',\r\n genYes: \"כן\",\r\n genNo: \"לא\",\r\n genCancel: \"ביטול\",\r\n genNoData: \"אין נתונים להצגה\",\r\n genPrint: 'הדפס',\r\n genSign: 'חתום',\r\n genReset: 'נקה',\r\n genTakePhoto: 'צלם',\r\n genSavePhotos: 'שמור תמונות',\r\n genDownload: 'הורד',\r\n msgSignHere: 'אנא צייר את חתימתך בתוך המלבן',\r\n msgSignatureRequired: 'הינך חייב לחתום כאן על מנת להמשיך',\r\n msgPasswordsDontMatch: 'הסיסמאות לא תואמות, אנא נסה שנית',\r\n errorNetwork: \"שגיאת תקשורת לשרת - בדוק את חיבור הרשת\",\r\n errorSessionExpired: \"נותקת עקב חוסר פעילות\",\r\n errorUserInvalid: \"פרטי המשתמש השתנו. אנא התחבר מחדש למערכת\",\r\n errorNotInitialized: \"לא ניתן להכנס למערכת כיוון שלא נטענו ההגדרות \\n אנא טען את הדף מחדש\",\r\n errorUnexpected: \"@@@שגיאה לא צפויה בשרת@@@: {0}\",\r\n errorUnauthorized: \"המשתמש אינו מורשה לבצע פעולה זו\",\r\n errorPasswordExpired: 'הסיסמה שהזנת פג תוקפה. יש להזין סיסמה חדשה',\r\n msgFinishEditing: \"יש לשמור את השורה הנוכחית לפני הוספת שורה חדשה\",\r\n errorUserNameNotFound: \"המשתמש לא קיים\",\r\n errorIsNotExistsPhoneAndEmail: \"לא מוגדר טלפון או מייל למשתמש זה. צור קשר עם התמיכה\",\r\n lblDay1: \"ראשון\",\r\n lblDay2: \"שני\",\r\n lblDay3: \"שלישי\",\r\n lblDay4: \"רביעי\",\r\n lblDay5: \"חמישי\",\r\n lblDay6: \"שישי\",\r\n lblDay7: \"שבת\",\r\n lblDay1s: \"א'\",\r\n lblDay2s: \"ב'\",\r\n lblDay3s: \"ג'\",\r\n lblDay4s: \"ד'\",\r\n lblDay5s: \"ה'\",\r\n lblDay6s: \"ו'\",\r\n lblDay7s: \"ש'\",\r\n msgSuccess: \"הפעולה הסתיימה בהצלחה\",\r\n msgNotPerformed: \"לא ניתן לסיים את הפעולה\",\r\n lblTimes: 'פעמים',\r\n lblUser: \"משתמש רגיל\",\r\n btnCancelDocument: 'בטל מסמך',\r\n lblBy: 'ע\"י',\r\n titleCreatedBy: 'נוצר על ידי',\r\n titleCreated: 'נוצר',\r\n titleCreatedAt: 'נוצר ב',\r\n titleAgo: 'לפני',\r\n lblAgo: 'לפני',\r\n lblSearch: 'חיפוש',\r\n lblCloseSearch: 'סגור חיפוש',\r\n lblColumnChooser: 'בחירת עמודות',\r\n lblColumnHiding: 'מצב גלילה',\r\n lblShowGridFilter: 'הפעל סינון מתקדם',\r\n lblHideGridFilter: 'הסתר סינון מתקדם',\r\n lblExcel: 'ייצוא לאקסל',\r\n lblPdf: 'ייצוא ל PDF',\r\n lblViewList: 'הצג בתור רשימת כרטיסיות',\r\n lblViewGrid: 'הצג בתור טבלה',\r\n lblDisplayUserName: 'שם משתמש',\r\n lblLastUseDate: 'תאריך פעולה אחרונה',\r\n lblLastUseBefore: 'פעולה אחרונה לפני',\r\n progressIndicator: 'מעביר נתונים.. אנא המתן',\r\n lblUpdated: 'עודכן',\r\n lblNoSorting: '- ברירת מחדל -',\r\n lblVersion: 'גרסה',\r\n lblDateIsNull: \"התאריך ריק\",\r\n f702: \"פחות מדקה\",\r\n f703: \"5 דקות\",\r\n f704: \"10 דקות\",\r\n f705: \"רבע שעה\",\r\n f706: \"חצי שעה\",\r\n f707: \"פחות משעה\",\r\n f709: \"שעה וחצי\",\r\n f710: \"שעתיים פלוס\",\r\n f711: \"{0} שעות\",\r\n f712: \"יום\",\r\n f713: \"יומיים\",\r\n f714: \"{0} ימים\",\r\n f715: \"שבוע פלוס\",\r\n f716: \"שבועיים פלוס\",\r\n f717: \"{0} שבועות\",\r\n f718: \"חודש פלוס\",\r\n f720: \"חודשיים\",\r\n f721: \"{0} חודשים\",\r\n f722: \"שנה פלוס\",\r\n f723: \"שנתיים פלוס\",\r\n f724: \"{0} שנים\",\r\n f725: \"פחות מיום\",\r\n lblOldPassword: 'סיסמה ישנה',\r\n lblNewPassword1: 'סיסמה חדשה',\r\n lblNewPassword2: 'אימות סיסמה',\r\n lblRecoveryPhone: 'טלפון לשליחת קוד אימות',\r\n lblRecoveryEmail: 'אימייל לשליחת קוד אימות',\r\n btnSendRecoveryCode: 'שלח קוד לאימות',\r\n btnCheckUserName: 'שחזר סיסמה',\r\n btnBackToLogin: '$$$Back to login page',\r\n lblRecoveryType: 'אופן שיחזור סיסמה',\r\n lblRecoveryToken: 'קוד אימות סודי',\r\n btnResend: 'שלח שנית',\r\n btnSaveChanges: 'שמור פרטי הזדהות',\r\n btnGeneratePassword: 'סיסמה חדשה',\r\n btnCreateCredentials: 'צור משתמש',\r\n btnUnlockUser: 'שחרר משתמש נעול',\r\n lblDisplayUsername: 'שם משתמש לתצוגה',\r\n lblDisplayUserDescription: 'תאור משתמש לתצוגה',\r\n lblCredentialsNotExist: 'המשתמש טרם הוקם',\r\n lblPendingWelcome: 'נשלחה בקשה והמשתמש טרם הצטרף',\r\n titleUserInformation: 'פרטי משתמש',\r\n errorMaxSizeUploadError: 'חלק מהקבצים שנבחרו עוברים את הגודל המקסימאלי של {0} מגה, ולא יועלו',\r\n msgFileSizeRestriction: 'גודל הקובץ המקסימאלי הינה {0} מגה',\r\n btnSelectFiles: 'בחר קבצים',\r\n btnMakePhoto: 'צלם תמונה',\r\n lblAttachFileSize: 'גודל',\r\n lblFilters: 'סינונים',\r\n lblAt: 'ב',\r\n\r\n lblObjectName: 'שם אובייקט',\r\n lblIsOverride: 'בוצע קיסטום',\r\n lblValidation: 'תקין',\r\n lblDViewsDBDuration: 'זמן תגובה מקורי',\r\n lblXViewsDBDuration: 'זמן תגובה לאחר קיסטום',\r\n lblCheckPerformance: 'בדוק ביצועים',\r\n lblValidateViews: 'בדוק תקינות מבנה',\r\n lblViewError: '$$$Error',\r\n\r\n lblLoginOTPSendMethod: 'שלח סיסמה חד-פעמית באמצעות',\r\n lblLoginOTPEmail: 'אימייל לשליחת סיסמה חד-פעמית',\r\n lblLoginOTPPhone: 'טלפון לשליחת SMS עם סיסמה חד-פעמית',\r\n lblLoginOTPOTP: 'סיסמה חד-פעמית',\r\n lnkLoginByOTP: 'הזדהות באמצעות סיסמה חד-פעמית',\r\n msgNotificationSent: 'הסיסמה נשלחה',\r\n btnLoginOtpSendOtp: 'שלח סיסמה',\r\n lnkLoginByPassword: 'כניסה עם שם משתמש וסיסמה',\r\n\r\n lblApply: 'החל',\r\n lblTaxNumber: 'ח.פ/תעודת זהות',\r\n\r\n lblIsActive: 'פעיל',\r\n lblEmail: 'אימייל',\r\n lblPhone: 'טלפון',\r\n lblIsPendingWelcome: 'ממתין להתחברות ראשונית',\r\n lblIsOnline: 'אונליין',\r\n lblIsLockedOut: 'נעול',\r\n lblCreateCredentials: 'צור משתמש',\r\n\r\n msgRouteNotFound: 'נתיב שגוי',\r\n btnReload: 'טען מחדש',\r\n lblHideColumn: 'הסתר עמודה',\r\n lblShowHiddenColumns: 'הצג את כל העמודות',\r\n\r\n lblName: \"שם\",\r\n lblDescription: \"תיאור\",\r\n\r\n msgLoading: \"מעדכן נתונים.. אנא המתן\",\r\n lblSentDate: \"תאריך שליחה\",\r\n lblSentBy: \"נשלח על ידי\",\r\n lblEntryID: \"מספר\",\r\n lblFromAddress: \"מכתובת\",\r\n lblFromDisplayAddress: \"שם שולח\",\r\n lblAddress: \"כתובת\",\r\n lblSubject: \"כותרת\",\r\n lblMailBody: \"תוכן המייל\",\r\n lblDeliveryOption: \"אופן שליחה\",\r\n lblSendNotificationBy: \"שלח הודעות באמצעות\",\r\n lblUsernameCreationOption: 'מתן שם משתמש לפי',\r\n lblStatus: \"סטאטוס\",\r\n lblCCAddress: \"העתק ל\",\r\n lblBccAddress: \"העתק מוסתר ל\",\r\n lblFailureDescription: \"הודעת שגיאה\",\r\n lblNotificationTemplate: \"שם תבנית\",\r\n lblFrom: \"מ\",\r\n lblUntil: \"עד \",\r\n lblSessionAlmostExpiredTitle: \"החיבור שלך יפוג בקרוב\",\r\n lblSessionAlmostExpiredPrompt: \"המערכת זיהתה חוסר פעילות ותנתק אותך בקרוב\",\r\n lblSessionExpiredTitle: \"החיבור למערכת פג\",\r\n lblSessionExpiredPrompt: \"החיבור שלך פג עקב חוסר פעילות. הינך מועבר לדף הכניסה\",\r\n lblFirstDate: \"תאריך ראשון\",\r\n lblLastDate: \"תאריך אחרון\",\r\n lblDate: \"תאריך\",\r\n lblAdd: \"הוסף\",\r\n lblClear: \"נקה\",\r\n lblCompactMode: \"תצוגה קומפקטית\",\r\n\r\n lblNotificationContent: \"תוכן ההתראה\",\r\n lblGeneral: \"כללי\",\r\n lblOptions: \"אפשרויות\",\r\n lblCustom: \"הגדרות מיוחדות\",\r\n\r\n lblMFACode: \"קוד חד-פעמי\",\r\n titleMFACodeOnEmailSent: \"סיסמה חד-פעמית נשלחה אלייך למייל. תזין אותו בשדה למטה\",\r\n titleMFACodeOnPhoneSent: \"סיסמה חד-פעמית נשלחה אלייך לנייד. תזין אותו בשדה למטה\",\r\n\r\n lblMFAMethod: \"אימות דו-שלבי\",\r\n\r\n Month_1: \"ינואר\",\r\n Month_2: \"פברואר\",\r\n Month_3: \"מרץ\",\r\n Month_4: \"אפריל\t\",\r\n Month_5: \"מאי\",\r\n Month_6: \"יוני\",\r\n Month_7: \"יולי\",\r\n Month_8: \"אוגוסט\",\r\n Month_9: \"ספטמבר\",\r\n Month_10: \"אוקטובר\",\r\n Month_11: \"נובמבר\",\r\n Month_12: \"דצמבר\",\r\n lblExport: \"ייצוא\",\r\n lblCredentialType: \"סוג משתמש\",\r\n lblIsRestrictByIP: \"הגבל לפי כתובת IP\",\r\n lblIsExcludeFromMFA: \"החרג כתובת מ מאימות דו-שלבי\",\r\n lblIPRangeStart: \"מכתובת IP\",\r\n lblIPRangeEnd: \"עד כתובת IP\",\r\n lblIPErrorMessage: \"כתובת ה IP חייבת להיות במבנה "000.000.000.000"\",\r\n msgIPRangesIsEmpty: \"יש לבחור כתובת אחת לפחות\",\r\n msgIPRangeIsEmpty: \"יש להזין כתובת IP חוקית\",\r\n msgPasswordMinLength: \"הסיסמה חייבת להיות באורך מינימאלי של {0} תווים\",\r\n msgPasswordMinCountDigits: \"הסיסמה חייבת להכיל מינימום של {0} ספרות\",\r\n msgPasswordMinCountLetters: \"הסיסמה חייבת להכיל מינימום של {0} אותיות באנגלית\",\r\n msgPasswordComplexityRequirement: \"הסיסמא חייבת להיות באורך מינימאלי של {0} תווים, ולהכיל לפחות {1} ספרות ו {2} אותיות באנגלית\",\r\n errorOnlyImageAllowed: \"ניתן לבחור רק תמונות\",\r\n btnClose: \"סגור\",\r\n lblPhoto: \"תמונה\",\r\n\r\n lblDragAndDrop: \"ניתן לגרור ולשחרר קבצים לכאן\",\r\n errorRequiredMessage: \"שדה חובה\",\r\n titleDuplicate: \"שכפל\",\r\n lblAllNotifications: \"כל ההתראות\",\r\n\r\n lblSMTPServer: \"שרת SMTP\",\r\n lblSMTPPort: \"פורט SMTP\",\r\n lblSMTPUserName: \"שם משתמש ל SMTP\",\r\n lblSMTPPassword: \"סיסמא ל SMTP\",\r\n lblSMTPUseSSL: \"השתמש בחיבור SSL\",\r\n lblSMSEndpoint: \"כתובת שרת SMS\",\r\n lblSMSUserName: \"שם משתמש ל SMS\",\r\n lblSMSPassword: \"סיסמא ל SMS\",\r\n lblSMSToken: \"טוקן ל SMS\",\r\n lblSMSEndPointIsInforU: \"ספק SMS\",\r\n\r\n titleTemplateInformation: \"מידע על תבנית התראה\",\r\n titleEmailInformation: \"הגדרות מייל\",\r\n lblFromEmail: \"שלח מכתובת אימייל\",\r\n lblFromEmailDisplay: \"שלח מ שם\",\r\n titlePhoneInformation: \"הגדרות SMS\",\r\n lblNotificationServer: \"שרת התראות\",\r\n lblFromPhone: \"שלח SMS מטלפון\",\r\n lblSMSBody: \"תוכן ההודעה\",\r\n titlePushMessagesInformation: \"הגדרות התראה באפליקציה\",\r\n lblPushMessageBody: \"תוכן ההתראה\",\r\n lblHTMLBody: \"גוף HTML\",\r\n btnSave: 'שמור',\r\n titleDelete: 'מחק',\r\n lblUseDefault: 'השתמש בברירת מחדל',\r\n lblNoUnreadMessages: 'אין התראות חדשות',\r\n lblTo: 'אל',\r\n lblPushMessageContent: 'תוכן ההתראה',\r\n lblSmsMessageContent: 'תוכן ההודעה',\r\n lblIsAutomatic: 'נשלח אוטומטית',\r\n lblSystem: 'הודעת מערכת',\r\n lblPopupShowStatus: 'סטאטוס התראה קופצת',\r\n lblEmailContent: 'תוכן אימייל',\r\n btnShowInEditor: 'הצג בעורך HTML',\r\n titleLeavePageConfirmation: 'המידע שהזנת לא יישמר. האם ברצונך להמשיך?',\r\n btnLogOff: 'התנתק',\r\n btnStayConnected: 'הישאר מחובר',\r\n btnGoToHomePage: 'עבור לעמוד הבית',\r\n lblReadDate: 'תאריך צפייה',\r\n msgDeleteNotificationTemplateQuestion: 'ייתכן ותבנית זו בשימוש על ידי המערכת. האם ברצונך למחוק אותה?',\r\n lblNotificationServerWrong: 'הגדרות שרת ההתראות אינן תקינות. בדוק אותן ונסה שנית',\r\n lblMIDIsMissing: \"חסר קוד MID\",\r\n lblEnterMID: \"הכנס קוד MID חדש.\",\r\n btnTestServer: 'בדוק שרת',\r\n btnShowPreview: \"תצוגה מקדימה\",\r\n lblIsServer: \"שרת\",\r\n lblIsClient: \"קליינט\",\r\n lblModuleName: \"מודול\",\r\n lblLogin: \"Login\",\r\n lblFramework: \"Framework\",\r\n lblOption: \"הגדרה\",\r\n lblValue: \"ערך\",\r\n lblSectionName: \"סעיף\",\r\n lblAddOption: 'הוסף הגדרה',\r\n msgOptionAlreadyExists: 'ההגדרה כבר קיימת',\r\n msgOptionEmpty: 'הגדרה {0} ריקה',\r\n lblBadLogin: 'הזדהות נכשלה',\r\n msgRemoveOption: \"האם אתה בטוח שברצונך למחוק את האפשרות '{0}'?\",\r\n titleEmailConfiguration: \"תצורת אימייל\",\r\n titleSMSConfiguration: \"תצורת SMS\",\r\n msgDeleteNotificationServerQuestion: \"ניתן להשתמש בשרת הודעות באפליקציה. האם אתה בטוח שברצונך למחוק אותו?\",\r\n msgNoData: \"אין נתונים\",\r\n lblEmailHeader: \"כותרת מייל\",\r\n lblConfigure: \"הגדר\",\r\n lblDefaultFromAddressForInforU: \"Test\",\r\n lblDefaultFromAddressForUnicel: \"0509999999\",\r\n lblInforUFromPhoneValidationTooltip: \"יש להקליד מספר טלפון שנמצא ברשימת White-list במערכת או שם שולח באנגלית בלבד, עד 11 תווים\",\r\n lblNotifications: \"התראות\",\r\n lblMinimize: \"צמצם\",\r\n lblShowMore: \"הצג עוד\",\r\n titleWhatsAppInformation: \"תבנית לשליחת WhatsApp\",\r\n lblWhatsAppBody: \"תוכן הודעה ב-WhatsApp\",\r\n lblWhatsAppApiKey: \"WhatsApp Api Key\",\r\n lblWhatsAppEndpoint: \"WhatsApp Endpoint\",\r\n titleWhatsAppConfiguration: \"הגדרות WhatsApp\",\r\n titleNotificationServerList: \"שרת התראות\",\r\n titleNotificationTemplateList: \"תבנית התראות\",\r\n\r\n lblPoweredBy: \"Powered by Menahel4U\",\r\n titleChooseOption: \"בחר אפשרות\",\r\n titleWebAPIAllowedIPs: \"$$$Allowed IPs\",\r\n lblIpAddress: \"כתובת IP\",\r\n lblLoginDate: \"תאריך חיבור\",\r\n lblPrint: \"הדפסה\",\r\n lblDateFrom: 'מתאריך',\r\n lblDateTo: 'עד תאריך',\r\n msgCouldNotStartVideoError: 'מצלמה אינה זמינה',\r\n lblCameraModeVideo: 'וידאו',\r\n lblCameraModePhoto: 'תמונה',\r\n titlePreview: 'תצוגה מקדימה',\r\n msgLogoutQuestion: 'האם אתה בטוח שברצונך להתנתק?',\r\n lblGroupPanel: 'קיבוץ עמודות',\r\n lblExpandAll: 'הרחב הכל',\r\n lblMultiEmailError: 'ערך לא חוקי, השתמש בסמל ; על מנת להפריד בין המיילים',\r\n msgPhotoMinCountError: 'הספירה המינימלית היא {0}',\r\n msgPhotoMaxCountError: 'הספירה המקסימלית היא {0}',\r\n lblRestoreDefaultView: \"שחזר תצוגת ברירת מחדל\",\r\n lblStartDate: \"תאריך התחלה\",\r\n lblDuration: \"משך זמן\",\r\n lblController: \"קונטרולר\",\r\n lblMethod: \"שיטה\",\r\n lblStatusCode: \"קוד סטטוס\",\r\n lblRequestData: \"נתוני בקשה\",\r\n lblQueryString: \"פרמטרים ב URL\",\r\n lblBody: \"תוכן בקשה\",\r\n lblResponse: \"תוכן תשובה\",\r\n msgTextCopied: \"טקסט הועתק\",\r\n lblCopy: \"העתק\",\r\n btnGoToLoginHistory: \"עבור לדוח התחברויות\",\r\n btnGoToRequestsHistory: \"עבור לדוח פניות לשרת\",\r\n btnGoToCredentialsReport: \"עבור לדוח משתמשים\",\r\n btnManageCredentials: \"נהל פרטי התחברות\",\r\n btnWelcomeUser: \"שליחת הודעת ברוך-הבא\",\r\n lblTestFromPhone: \"מטלפון\",\r\n lblNewValue: \"ערך חדש\",\r\n lblOldValue: \"ערך ישן\",\r\n lblFieldCaption: \"שדה\",\r\n lblDocumentCaption: \" מסך\",\r\n lblAction: \"פעולה\",\r\n lblHistoryLineAdded: \"{0} - שורה מספר {1} נוספה.\",\r\n lblHistoryLineRemoved: \"{0} - שורה מספר {1} נמחקה.\",\r\n lblHistoryLineNumber: \"{0} - שורה מספר {1}\",\r\n lblHistory: \"היסטורית שינוים\",\r\n lblHistoryNotFound: \"לא נמצאו שינויים.\",\r\n lblHistoryChangeAdded: \"{0} {1} נוצר\",\r\n lblHistoryChangeRemoved: \"{0} {1} נמחק\",\r\n msgLoadingPDF: 'טוען קובץ PDF...',\r\n lblImpersonatedBy: 'בוצעה התחזות ע\"י',\r\n lblIsUserCustomTemplate: \"תבנית שבוצעו בה התאמות מיוחדות\",\r\n msgIsUserCustomTemplateEnable: \"אם אפשרות העריכה תופעל, תוכל לערוך את התבנית, אך במקרה של עדכון גרסה עתידי, המערכת לא תוכל לעדכן תבנית זו באופן אוטומטי במידה ויהיו בה שינויים.\",\r\n btnEnableEditable: \"הפעל אפשרות לעריכה\",\r\n btnDisableEditable: \"בטל אפשרות לעריכה\",\r\n msgScreenSizeChangedRefresh: '$$$Screen size is changed. Please refresh browser window.',\r\n msgOrientationChangedRefresh: '$$$Orientation is changed. Please refresh browser window.',\r\n lblNotAssigned: \"- לא משוייך -\"\r\n }\r\n};\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { GenericListEntity } from '@base/entities/BaseEntities';\r\nimport { StringMapElement, FieldCustomizationElement, ComponentCustomization } from '@base/classes/BaseClasses';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { Resources_EN } from '../../_resources/EN';\r\nimport { Resources_HE } from '../../_resources/HE';\r\nimport { SysGlobals } from './sysglobals';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { EnumLanguages } from './sysenums.enum';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\n\r\n@Injectable()\r\nexport class ResourcesService {\r\n private m_Dictionaries: any[];\r\n private m_CustomDictionaries: any[];\r\n private m_Lists: any[];\r\n\r\n constructor(private appConfigService: AppConfigService,\r\n private systemEndpoint: SystemEndpoint) { }\r\n\r\n\r\n //Prepare dictionaries - we have an hierarchy of 3:\r\n // Custom dictionary for the specific build\r\n // General dictionary for the program\r\n // Base dictionary for the built in \"framework\" part\r\n public InitDictionaries() {\r\n\r\n this.m_Dictionaries = [];\r\n this.m_CustomDictionaries = [];\r\n this.m_Lists = [];\r\n\r\n switch (SysGlobals.Language) {\r\n case EnumLanguages.Hebrew:\r\n {\r\n const { Lists, ...Resources } = Resources_HE;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n case EnumLanguages.English:\r\n {\r\n const { Lists, ...Resources } = Resources_EN;\r\n this.m_Lists.push(Lists);\r\n this.m_Dictionaries.push(Resources);\r\n break;\r\n }\r\n }\r\n\r\n // add custom resources to the dictionary by current language and custom build\r\n const allCustomResources = this.appConfigService.CustomResources;\r\n const customResources = allCustomResources.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n if (customResources && customResources.length) this.m_CustomDictionaries = this.m_CustomDictionaries.concat(customResources);\r\n\r\n // add resources to the dictionary by current language\r\n const allResources = this.appConfigService.Resources;\r\n const resources = allResources.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n if (resources && resources.length) this.m_Dictionaries = this.m_Dictionaries.concat(resources);\r\n\r\n // remove undefined to handle cases when some translations do not exist\r\n this.m_Dictionaries = this.m_Dictionaries.filter(x => x != undefined);\r\n\r\n // add lists to the dictionary by current language\r\n const allLists = this.appConfigService.AppConfig.GetLists();\r\n const lists = allLists.filter(x => x.Properties && x.Properties.Language === SysGlobals.Language);\r\n const overrideLists = lists.filter(x => x.Properties && x.Properties.OverrideModuleName);\r\n overrideLists.forEach(x => {\r\n const listsByModuleName = lists.find(z => z.Properties.ModuleName === x.Properties.OverrideModuleName);\r\n if (listsByModuleName) {\r\n Object.getOwnPropertyNames(x)\r\n .filter(name => name !== 'Properties')\r\n .forEach(name => {\r\n const sourceList = x[name];\r\n listsByModuleName[name] = sourceList;\r\n });\r\n }\r\n });\r\n\r\n this.m_Lists = this.m_Lists.concat(lists);\r\n\r\n // load field customizations\r\n SysGlobals.FieldCustomizations = this.LoadFieldCustomizations();\r\n // load component customizations\r\n SysGlobals.ComponentCustomizations = this.LoadComponentCustomizations();\r\n\r\n this.systemEndpoint.GetEntitiesResources().subscribe(response => {\r\n if (!response.IsSuccess) return;\r\n\r\n const entitiesResources = response.Data.filter(x => x.Properties.Language === SysGlobals.Language);\r\n if (entitiesResources && entitiesResources.length) {\r\n const { Properties, ...entities } = entitiesResources[0];\r\n const modifiedEntityResources: any = { ...entitiesResources[0] };\r\n Object.keys(modifiedEntityResources).forEach(key => {\r\n if (Object.keys(entities).indexOf(key) >= 0) delete modifiedEntityResources[key];\r\n });\r\n modifiedEntityResources['BL'] = entities;\r\n this.m_Dictionaries = this.m_Dictionaries.concat([modifiedEntityResources]);\r\n }\r\n });\r\n }\r\n\r\n\r\n private GetValueFromPath(obj: any, path: string) {\r\n return path.split('.').reduce((acc, val) => acc && acc[val], obj);\r\n }\r\n\r\n //Initializes resources in case they are required before actual initialization took place\r\n private EnsureInitialized() {\r\n if (this.m_Dictionaries == undefined) {\r\n SysGlobals.Language = this.appConfigService.M4UConfig.defaultLanguage;\r\n this.InitDictionaries();\r\n }\r\n }\r\n\r\n //Return resource string for relevant resource\r\n //If not found, return the name with $ $\r\n public RC(sResourceName: string, moduleName?: string, ...args: string[] | number[]): string {\r\n //Init\r\n this.EnsureInitialized();\r\n\r\n //Special syntax to allow returning undefined\r\n var bReturnUndefined: boolean;\r\n if (sResourceName.startsWith('$$')) {\r\n sResourceName = sResourceName.substring(2);\r\n bReturnUndefined = true;\r\n }\r\n\r\n //Avoid undefined value\r\n moduleName = moduleName || '';\r\n\r\n //Get resource path\r\n var sPath = sResourceName.includes('.') ? sResourceName : `Translations.${sResourceName}`;\r\n\r\n let sData = this.getResourceValue(this.m_CustomDictionaries, sPath, moduleName);\r\n\r\n if (sData == undefined) {\r\n\r\n //Get resource value from dictionaries\r\n sData = this.getResourceValue(this.m_Dictionaries, sPath, moduleName);\r\n }\r\n\r\n //Return not found with $$ to indicate a problem\r\n if (sData == undefined) return bReturnUndefined ? undefined : `$${sResourceName}$`;\r\n\r\n //Support formatting arguments\r\n for (let index = 0; index < args.length; index++) {\r\n sData = sData.replace(`{${index}}`, args[index]);\r\n }\r\n\r\n //Support for value replacement\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n if (dictionary.StringMap == undefined) continue;\r\n for (let element of dictionary.StringMap) {\r\n sData = sData.replace((element as StringMapElement).Old, (element as StringMapElement).New);\r\n }\r\n }\r\n\r\n //Return\r\n return sData;\r\n }\r\n\r\n getResourceValue(oDictionaries: any[], sPath: string, sModuleName: string) {\r\n const currentModuleDictionaries = oDictionaries.filter(x => x.Properties && x.Properties.ModuleName === sModuleName);\r\n //Get value for current module\r\n let sData = this.tryGetValueFromDictionaries(currentModuleDictionaries, sPath);\r\n if (sData == undefined) {\r\n const frameworkDictionaries = oDictionaries.filter(x => !x.Properties || !x.Properties.ModuleName);\r\n //Process all dictionaries\r\n //Highest priority dictionary (custom one) is first\r\n sData = this.tryGetValueFromDictionaries(frameworkDictionaries, sPath);\r\n }\r\n return sData;\r\n }\r\n\r\n tryGetValueFromDictionaries(oDictionaries: any[], sPath: string) {\r\n let sData: any;\r\n for (let dictionary of oDictionaries) {\r\n //Get value, including support for nested values\r\n sData = this.GetValueFromPath(dictionary, sPath);\r\n if (sData) break;\r\n }\r\n return sData;\r\n }\r\n\r\n //Return list by name\r\n public LISTITEM(sListName: string, sValue: string, moduleName?: string): string {\r\n var list = this.LIST(sListName, moduleName);\r\n var item = list.find(x => x.Value == sValue);\r\n if (item == undefined) return `$${sValue}$`;\r\n return item.Text;\r\n }\r\n\r\n //Return list by name\r\n public LISTITEMX(sListName: string, sValue: string, moduleName?: string): GenericListEntity {\r\n var list = this.LIST(sListName, moduleName);\r\n var item = list.find(x => x.Value == sValue);\r\n if (item == undefined) return undefined;\r\n return item;\r\n }\r\n\r\n //Return list by name\r\n public LIST(sListName: string, moduleName?: string): GenericListEntity[] {\r\n //Init\r\n this.EnsureInitialized();\r\n\r\n //Avoid undefined value\r\n moduleName = moduleName || '';\r\n\r\n return this.getResourceValue(this.m_Lists, sListName, moduleName)?.sort(this.sortListfunc) || [];\r\n }\r\n\r\n // Sort LIST\r\n sortListfunc(item1: GenericListEntity, item2: GenericListEntity): number {\r\n // first sort by SortOrder\r\n if (item1.SortOrder !== undefined && item2.SortOrder === undefined) return -1;\r\n if (item1.SortOrder === undefined && item2.SortOrder !== undefined) return 1;\r\n if (item1.SortOrder !== undefined && item2.SortOrder !== undefined) return item1.SortOrder - item2.SortOrder;\r\n\r\n // then sort by Text\r\n if (item1.Text !== undefined && item2.Text !== undefined) return item1.Text.localeCompare(item2.Text);\r\n\r\n return 0;\r\n }\r\n\r\n //Load customizations\r\n public LoadFieldCustomizations(): FieldCustomizationElement[] {\r\n\r\n //Process all dictionaries\r\n //Highest priority dictionary (custom one) is first\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n var oList = this.GetValueFromPath(dictionary, `FieldCustomizations`);\r\n if (oList != undefined) return oList;\r\n }\r\n\r\n }\r\n\r\n LoadComponentCustomizations(): ComponentCustomization[] {\r\n for (let dictionary of this.m_CustomDictionaries) {\r\n var oList = this.GetValueFromPath(dictionary, `ComponentCustomizations`);\r\n if (oList != undefined) return oList;\r\n }\r\n }\r\n}\r\n\r\n\r\nexport function RC(value: string, ...args: string[] | number[]) {\r\n return AppInjector.get(ResourcesService).RC(value, '', ...args);\r\n}\r\n\r\n\r\nexport function LIST(sListName: string): GenericListEntity[] {\r\n return AppInjector.get(ResourcesService).LIST(sListName);\r\n}\r\n\r\n\r\nexport function LISTITEM(sListName: string, sValue: string): string {\r\n return AppInjector.get(ResourcesService).LISTITEM(sListName, sValue);\r\n}\r\n\r\nexport function LISTITEMX(sListName: string, sValue: string): GenericListEntity {\r\n return AppInjector.get(ResourcesService).LISTITEMX(sListName, sValue);\r\n}\r\n\r\n","import { LocationChangeEvent, PlatformLocation } from '@angular/common';\r\nimport { Injectable, Type } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { findLast, findLastIndex } from 'lodash';\r\nimport { filter, map, ReplaySubject } from 'rxjs';\r\nimport { FrameworkService } from './framework.service';\r\nimport { NavigatorService } from './navigator.service';\r\nimport { SysEventsService } from './sysevents.service';\r\nimport { SysGlobals } from './sysglobals';\r\n\r\nexport class HistoryItem {\r\n Id: number;\r\n Url: string;\r\n QueryParams: any;\r\n Title: string;\r\n Component: Type;\r\n ComponentName: string;\r\n IsWindow: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class RouteHistoryService {\r\n\r\n private _history: HistoryItem[] = [];\r\n\r\n private _pageHistorySubject = new ReplaySubject(1);\r\n readonly PageHistory$ = this._pageHistorySubject.asObservable();\r\n\r\n private _historyItemsSubject = new ReplaySubject(1);\r\n readonly HistoryItems$ = this._historyItemsSubject.asObservable();\r\n\r\n get HistoryLength() { return this._history.length; }\r\n\r\n constructor(private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private navigatorService: NavigatorService,\r\n private sysEventsService: SysEventsService,\r\n private frameworkService: FrameworkService,\r\n private location: PlatformLocation) {\r\n this.sysEventsService.OnNavigateDefault.subscribe((result) => {\r\n if (!result) return;\r\n this.ClearHistory(0);\r\n });\r\n this.location.onPopState(this.OnBrowserButtonClick);\r\n }\r\n\r\n // on after init application start saving route history\r\n public StartSaveHistory() {\r\n this.router.events\r\n .pipe(\r\n // filter events, take only NavigationEnd\r\n filter(event => event instanceof NavigationEnd),\r\n map(() => {\r\n let { route, url } = this.GetCurrentRouteWithUrl();\r\n // create history item entity\r\n return {\r\n Id: this.router.getCurrentNavigation().id,\r\n Url: url,\r\n QueryParams: this.GetQueryParamsWithoutPrefixes(route.snapshot.queryParams),\r\n Component: route.component,\r\n IsWindow: route.snapshot.outlet === 'window'\r\n } as HistoryItem;\r\n }),\r\n filter(historyItem => !historyItem.Url.includes('system/')))\r\n // send it to the page where the title will be set\r\n .subscribe(historyItem => this.SaveHistoryItem(historyItem));\r\n }\r\n\r\n SetHistoryItemTitle(componentName: string, title: string) {\r\n // get history item index by component name\r\n const historyItemIndex = findLastIndex(this._history, x => x.ComponentName === componentName);\r\n if (historyItemIndex < 0) return;\r\n\r\n // set history item title\r\n this._history[historyItemIndex].Title = title;\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n }\r\n\r\n UpdateHistoryItem(historyItem: HistoryItem) {\r\n const historyItemIndex = this._history.findIndex(x => x.Id === historyItem.Id);\r\n if (historyItemIndex < 0) return;\r\n\r\n this._history[historyItemIndex] = historyItem;\r\n\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n }\r\n\r\n public SaveHistoryItem(historyItem: HistoryItem) {\r\n // remove 'new' route from history for correct navigation through history\r\n const lastHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (lastHistoryItem && lastHistoryItem.Url.endsWith('new')) {\r\n this._history.pop();\r\n }\r\n\r\n // if there is an item already just update the title, if not - add it to the history \r\n const historyItemIndex = this._history.findIndex(x => x.Id === historyItem.Id);\r\n if (historyItemIndex < 0) {\r\n this._history.push(historyItem);\r\n }\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n\r\n this._pageHistorySubject.next(historyItem);\r\n }\r\n\r\n public GoBack() {\r\n // get current history item from history\r\n const currentHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (!currentHistoryItem) {\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n\r\n // get previous history item\r\n const previousHistoryItem = this._history[this._history.length - 2];\r\n if (previousHistoryItem) {\r\n // if going back from window to the full page - navigate null to avoid page reload\r\n if (currentHistoryItem.IsWindow && !previousHistoryItem.IsWindow) {\r\n return this.GoBackFromWindow(previousHistoryItem, this._history.length - 2);\r\n }\r\n return this.NavigateItem(previousHistoryItem, this._history.length - 2);\r\n }\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n\r\n public NavigateHistoryItem(item: HistoryItem) {\r\n // get history item by id\r\n const historyItem = this._history.find(x => x.Id === item.Id);\r\n const historyItemIndex = this._history.indexOf(historyItem);\r\n // get current history item from history\r\n const currentHistoryItem = this._history[this._history.length - 1];\r\n if (currentHistoryItem.IsWindow) {\r\n // get full page url\r\n const { _, url } = this.GetCurrentRouteWithUrl(true);\r\n // if current route full page url equals navigatable item full page url\r\n if (historyItem.Url == url) {\r\n // just close the window to avoid page reload\r\n return this.NavigateItem(null, historyItemIndex);\r\n }\r\n }\r\n return this.NavigateItem(historyItem, historyItemIndex);\r\n }\r\n\r\n CloseWindow() {\r\n // get current history item from history\r\n const currentHistoryItem = this._history.length && this._history[this._history.length - 1];\r\n if (!currentHistoryItem) {\r\n // if there is no history - navigate default\r\n return this.frameworkService.NavigateDefault();\r\n }\r\n // get last history item that is not a window\r\n const lastPageHistoryItem = findLast(this._history, x => !x.IsWindow);\r\n // get last page index or previous\r\n const lastPageHistoryItemIndex = lastPageHistoryItem ? this._history.indexOf(lastPageHistoryItem) : this._history.length - 2;\r\n\r\n return this.GoBackFromWindow(lastPageHistoryItem, lastPageHistoryItemIndex);\r\n }\r\n\r\n private GoBackFromWindow(pageHistoryItem: HistoryItem, cleanStartIndex?: number) {\r\n const { _, url } = this.GetCurrentRouteWithUrl(true);\r\n // if current primary page is not the same take page history item\r\n const navigationPath = pageHistoryItem?.Url === url ? null : pageHistoryItem;\r\n return this.NavigateItem(navigationPath, cleanStartIndex);\r\n }\r\n\r\n private NavigateItem(historyItem: HistoryItem, cleanStartIndex?: number) {\r\n // navigate to the previous history item or close window without reload\r\n return (historyItem && this.navigatorService.Navigate([historyItem.Url], historyItem.QueryParams) || this.navigatorService.Navigate(null))\r\n .then((result) => {\r\n // if navigatation was successful\r\n if (result) {\r\n // clean history if needed\r\n if (cleanStartIndex != null) this.ClearHistory(cleanStartIndex);\r\n // share history to the subscribers\r\n this.ShareHistory();\r\n return Promise.resolve(true);\r\n }\r\n return Promise.resolve(false);\r\n });\r\n }\r\n\r\n private ShareHistory() {\r\n // get history without current item to show it correctly\r\n let historyWithoutCurrent = [...this._history];\r\n if (this._history.length > 0) historyWithoutCurrent.splice(this._history.length - 1);\r\n\r\n // remove first item in case our primary route is the same (for windows)\r\n let { _, url } = this.GetCurrentRouteWithUrl(true);\r\n if (historyWithoutCurrent.length > 0 && historyWithoutCurrent[0].Url === url) {\r\n historyWithoutCurrent.shift();\r\n }\r\n\r\n // send history withput current the subscribers (breadcrumb)\r\n this._historyItemsSubject.next(historyWithoutCurrent);\r\n }\r\n\r\n public HasHistory() {\r\n // check if there are history items\r\n return this._history.length > 0;\r\n }\r\n\r\n public ClearHistory(startIndex?: number) {\r\n // clear history at all or by the index (on breadcrumb item click)\r\n if (startIndex != null) {\r\n // clean history from item to the prelast item (because last item is correct and needed in history after navigation)\r\n this.ClearPagesState(startIndex, this._history.length - 1);\r\n this._history.splice(startIndex, this._history.length - startIndex - 1);\r\n } else {\r\n this.ClearPagesState();\r\n this._history.length = 0;\r\n }\r\n // send history withput current the subscribers (breadcrumb)\r\n this._historyItemsSubject.next(this._history);\r\n }\r\n\r\n private ClearPagesState(startIndex?: number, endIndex?: number) {\r\n for (let i = startIndex || 0; i < (endIndex != null ? endIndex : this._history.length); i++) {\r\n this.ClearPageState(this._history[i]);\r\n }\r\n }\r\n\r\n private ClearPageState(historyItem: HistoryItem) {\r\n const pageComponentName = historyItem && historyItem.ComponentName;\r\n // if no page component name or there is the same component in history - no need to clear it\r\n if (!pageComponentName || this._history.some(x => x.Id !== historyItem.Id && x.Component === historyItem.Component)) return;\r\n\r\n delete SysGlobals.PageStates[pageComponentName];\r\n }\r\n\r\n private OnBrowserButtonClick = (event: LocationChangeEvent) => {\r\n const navigationId = event.state.navigationId;\r\n const historyItemIndex = this._history.findIndex(x => x.Id === navigationId);\r\n if (historyItemIndex >= 0) {\r\n this.ClearHistory(historyItemIndex);\r\n }\r\n }\r\n\r\n private GetCurrentRouteWithUrl(onlyPrimaryOutlet?: boolean): any {\r\n let route = this.activatedRoute;\r\n let urlSegments = route.snapshot.url;\r\n // get the bottom route and url by all the tree\r\n // if onlyParentOutlet = true then it makes search by firstChild which can't be a window\r\n while (onlyPrimaryOutlet ? route.firstChild : route.children.length) {\r\n route = onlyPrimaryOutlet ? route.firstChild : route.children[route.children.length - 1];\r\n urlSegments = [...urlSegments, ...route.snapshot.url];\r\n }\r\n return { route: route, url: urlSegments.map(x => x.path).join('/') }\r\n }\r\n\r\n private GetQueryParamsWithoutPrefixes(params) {\r\n let newParams = {};\r\n for (let key in params) {\r\n const newKey = key.substring(key.indexOf('_') + 1);\r\n newParams[newKey] = params[key];\r\n }\r\n return newParams;\r\n }\r\n\r\n HasHistoryForWindow() {\r\n if (!this._history || this._history.length < 2) return false;\r\n\r\n const currentHistoryItem = this._history[this._history.length - 1];\r\n const previousHistoryItem = this._history[this._history.length - 2];\r\n return !(!previousHistoryItem.IsWindow && currentHistoryItem.IsWindow);\r\n }\r\n}","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport devices from 'devextreme/core/devices';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ResourcesService } from './resources.service';\r\nimport { EnumLanguages, EnumScreenSizes } from \"./sysenums.enum\";\r\nimport { SysGlobals } from './sysglobals';\r\nimport { UiService } from './ui.service';\r\n\r\nexport type Orientation = 'landscape' | 'portrait';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ScreenService {\r\n\r\n private _currentScreenSize: EnumScreenSizes;\r\n private _currentOrientation: Orientation;\r\n private onScreenSizeChanged: BehaviorSubject = new BehaviorSubject(this.GetScreenSize());\r\n readonly ScreenSize$ = this.onScreenSizeChanged.asObservable();\r\n public options = {\r\n showRefreshMessage: {\r\n size: false,\r\n orientation: false\r\n }\r\n };\r\n private showMessageHandler: any;\r\n\r\n public get Sizes() {\r\n return {\r\n 'screen-x-small': this.breakpointObserver.isMatched(Breakpoints.XSmall),\r\n 'screen-small': this.breakpointObserver.isMatched(Breakpoints.Small),\r\n 'screen-medium': this.breakpointObserver.isMatched(Breakpoints.Medium),\r\n 'screen-large': this.breakpointObserver.isMatched(Breakpoints.Large),\r\n 'screen-x-large': this.breakpointObserver.isMatched(Breakpoints.XLarge)\r\n };\r\n }\r\n\r\n //Subscribe to size changes\r\n constructor(private breakpointObserver: BreakpointObserver,\r\n private uiService: UiService,\r\n private rc: ResourcesService) {\r\n this._currentOrientation = this.Orientation();\r\n this.breakpointObserver\r\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\r\n .subscribe(() => {\r\n const newSize = this.GetScreenSize();\r\n const orientation = this.Orientation();\r\n let shown = false;\r\n if (orientation !== this._currentOrientation) {\r\n shown = this.processRefreshMessage('orientation');\r\n this._currentOrientation = orientation;\r\n }\r\n\r\n if (newSize !== this._currentScreenSize) {\r\n (!shown && this._currentScreenSize) && (shown = this.processRefreshMessage('size'));\r\n this._currentScreenSize = newSize;\r\n this.onScreenSizeChanged.next(this._currentScreenSize);\r\n }\r\n //\r\n });\r\n }\r\n\r\n //Return relevant screen size\r\n public GetScreenSize(): EnumScreenSizes {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall)) return EnumScreenSizes.ScreenXSmall;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Small)) return EnumScreenSizes.ScreenSmall;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Medium)) return EnumScreenSizes.ScreenMedium;\r\n if (this.breakpointObserver.isMatched(Breakpoints.Large)) return EnumScreenSizes.ScreenLarge;\r\n if (this.breakpointObserver.isMatched(Breakpoints.XLarge)) return EnumScreenSizes.ScreenXLarge;\r\n }\r\n\r\n public IsRTL(): boolean {\r\n return (SysGlobals.Language == EnumLanguages.Hebrew);\r\n }\r\n\r\n public IsMobile() {\r\n // var size = this.GetScreenSize();\r\n // return size == EnumScreenSizes.ScreenXSmall;\r\n const device = devices.current();\r\n return device.deviceType === 'phone';\r\n }\r\n\r\n public IsDesktop() {\r\n // var size = this.GetScreenSize();\r\n // if (this.appConfigService.AppConfig.SupportLegacyDisplaySizes) {\r\n // return !this.IsMobile();\r\n // } else {\r\n // return size == EnumScreenSizes.ScreenLarge || size == EnumScreenSizes.ScreenXLarge;\r\n // }\r\n const device = devices.current();\r\n return device.deviceType === 'desktop';\r\n }\r\n\r\n public IsTablet() {\r\n // var size = this.GetScreenSize();\r\n // return size == EnumScreenSizes.ScreenSmall || size == EnumScreenSizes.ScreenMedium;\r\n const device = devices.current();\r\n return device.deviceType === 'tablet';\r\n }\r\n\r\n public Orientation(): Orientation {\r\n const orientation = devices.orientation();\r\n return orientation;\r\n }\r\n\r\n public IsPrintMode(): boolean {\r\n return window.matchMedia('print').matches;\r\n }\r\n\r\n public LogDeviceInfo() {\r\n const device = devices.current();\r\n console.log(device);\r\n }\r\n\r\n public IsWideScreen() {\r\n const screenSize = this.GetScreenSize();\r\n return (screenSize === EnumScreenSizes.ScreenLarge || screenSize === EnumScreenSizes.ScreenXLarge);\r\n }\r\n\r\n public IsMediumScreen() {\r\n const screenSize = this.GetScreenSize();\r\n return (screenSize === EnumScreenSizes.ScreenMedium);\r\n }\r\n\r\n processRefreshMessage = (mode: 'size' | 'orientation') => {\r\n if (this.showMessageHandler) {\r\n clearTimeout(this.showMessageHandler);\r\n this.showMessageHandler = null;\r\n }\r\n\r\n let message;\r\n if (this.options?.showRefreshMessage?.size && mode === 'size') {\r\n message = this.rc.RC('msgScreenSizeChangedRefresh');\r\n } else if (this.options?.showRefreshMessage?.orientation && mode === 'orientation') {\r\n message = this.rc.RC('msgOrientationChangedRefresh');\r\n }\r\n\r\n message && (this.showMessageHandler = setTimeout(() => {\r\n this.uiService.InfoMessage(message);\r\n this.showMessageHandler = null;\r\n }, 3000));\r\n\r\n return !!message;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SessionEntity } from '@base/entities/BaseEntities';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { BehaviorSubject, ReplaySubject, first, mergeMap, Subject, Subscription, tap, map, of } from 'rxjs';\r\nimport { SystemOptionsService } from './system-options.service';\r\nimport { EnumSystemOptions } from './systemoptions.enum';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { NotificationService } from './notification.service';\r\n\r\nexport enum SessionStates {\r\n Started,\r\n Ended,\r\n AlmostExpired,\r\n Expired\r\n};\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n //Store server session\r\n private m_Session: SessionEntity;\r\n //Store user info\r\n private m_UserInfoDict: { [id: string]: any };\r\n //Store dataSources\r\n private m_DataSources: { [id: string]: BaseDataSourceAbstract };\r\n\r\n private sessionExpiredTimeoutHandler;\r\n private sessionAlmostExpiredTimeoutHandler;\r\n private initAppSubscription: Subscription;\r\n private logoutAppSubscription: Subscription;\r\n\r\n private sessionStateChangedSubject = new Subject();\r\n readonly sessionStateChanged$ = this.sessionStateChangedSubject.asObservable();\r\n\r\n constructor(private systemOptionsService: SystemOptionsService,\r\n private appConfigService: AppConfigService,\r\n private notificationService: NotificationService) { }\r\n\r\n get IsLoggedIn(): boolean { return (this.m_Session != null); }\r\n get DisplayUserName(): string { return this.IsLoggedIn ? this.m_Session.DisplayUserName : ''; }\r\n get DisplayUserDescription(): string { return this.IsLoggedIn ? this.m_Session.DisplayUserDescription : ''; }\r\n get CurrentUserID(): number { return this.IsLoggedIn ? this.m_Session.CredentialID : undefined; }\r\n get SessionID(): string { return this.IsLoggedIn ? this.m_Session.SessionID : undefined; }\r\n get UserInfoDict(): { [id: string]: any } { return this.IsLoggedIn ? this.m_UserInfoDict : {}; }\r\n get UserInfos(): any[] { return this.IsLoggedIn ? Object.keys(this.m_UserInfoDict).map(x => this.m_UserInfoDict[x]) : []; }\r\n get DataSources(): { [id: string]: BaseDataSourceAbstract } { return this.IsLoggedIn ? this.m_DataSources : {}; }\r\n\r\n //Set session\r\n SetSession(oSession: SessionEntity,\r\n afterInitFn?: () => void,\r\n afterLogoutFn?: () => void) {\r\n this.m_Session = oSession;\r\n this.m_UserInfoDict = oSession ? oSession.UserInfo : undefined;\r\n\r\n this.RefreshExpiredSessionTimeout(!!oSession);\r\n\r\n if (!!oSession) {\r\n this.initAppSubscription && !this.initAppSubscription.closed && this.initAppSubscription.unsubscribe();\r\n\r\n const initApplication$ = this.appConfigService.AppConfig.OnInitApplicationAsync(this.m_Session.UserInfo)\r\n .pipe(\r\n first(),\r\n mergeMap((result) => {\r\n if (result)\r\n return this.appConfigService.AppConfig.OnGetGlobalDataSources();\r\n else\r\n throw 'Cannot start session.';\r\n }),\r\n tap(ds => this.SetDataSources(ds)),\r\n tap(() => this.notificationService.Start()),\r\n tap(() => { afterInitFn && afterInitFn(); }),\r\n map(() => true)\r\n );\r\n this.initAppSubscription = initApplication$\r\n .subscribe({\r\n next: x => {\r\n this.sessionStateChangedSubject.next(SessionStates.Started);\r\n }, error: e => {\r\n this.sessionStateChangedSubject.next(SessionStates.Ended);\r\n }\r\n });\r\n\r\n return initApplication$;\r\n }\r\n\r\n if (!oSession) {\r\n this.logoutAppSubscription && !this.logoutAppSubscription.closed && this.logoutAppSubscription.unsubscribe();\r\n\r\n const onLogoutapplication$ = this.appConfigService.AppConfig.OnLogoutApplicationAsync()\r\n .pipe(\r\n tap(() => {\r\n this.ClearSessionCredentials();\r\n this.SetDataSources(undefined);\r\n }),\r\n tap(() => this.notificationService.Stop()),\r\n tap(() => { afterLogoutFn && afterLogoutFn(); }),\r\n map(() => false)\r\n );\r\n this.logoutAppSubscription = onLogoutapplication$\r\n .subscribe(x => {\r\n this.sessionStateChangedSubject.next(SessionStates.Ended);\r\n });\r\n return onLogoutapplication$;\r\n }\r\n }\r\n\r\n // Shortcut for end session action\r\n EndSession(afterFn?: () => void) {\r\n this.SetSession(undefined, null, afterFn);\r\n }\r\n\r\n //Set datasources\r\n SetDataSources(dataSources: { [id: string]: BaseDataSourceAbstract }) {\r\n this.m_DataSources = dataSources;\r\n }\r\n\r\n SaveSessionCredentials(sessionID: string) {\r\n localStorage.setItem(\"SessionID\", sessionID);\r\n }\r\n\r\n // obsolete ??\r\n ClearSessionCredentials() {\r\n localStorage.removeItem(\"SessionID\");\r\n }\r\n \r\n GetSessionID() {\r\n return localStorage.getItem(\"SessionID\");\r\n }\r\n\r\n //Mark session as logged out \r\n // obsolete\r\n // LogoutException() {\r\n // //this.ClearSessionData();\r\n // this.SetSession(null);\r\n // }\r\n\r\n //Mark session as logged out, and reset the saved session\r\n // obsolete\r\n // LogoutAndResetSession() {\r\n // this.ClearSessionCredentials();\r\n // this.ClearSessionData();\r\n // }\r\n\r\n //Clear all session data\r\n // obsolete\r\n // ClearSessionData() {\r\n // this.SetSession(undefined);\r\n // this.SetDataSources(undefined);\r\n // }\r\n\r\n RefreshExpiredSessionTimeout(startNew: boolean = true) {\r\n const sessionTimeout = +this.systemOptionsService.getSystemOption(EnumSystemOptions.SessionTimeout);\r\n if (!sessionTimeout || sessionTimeout < 0) return;\r\n\r\n const sessionAlmostTimeout = (sessionTimeout > 3) ? (sessionTimeout - 2) : 0;\r\n\r\n if (this.sessionExpiredTimeoutHandler) {\r\n clearTimeout(this.sessionExpiredTimeoutHandler);\r\n this.sessionExpiredTimeoutHandler = null;\r\n }\r\n\r\n if (this.sessionAlmostExpiredTimeoutHandler) {\r\n clearTimeout(this.sessionAlmostExpiredTimeoutHandler);\r\n this.sessionAlmostExpiredTimeoutHandler = null;\r\n }\r\n\r\n if (startNew && !!this.m_Session) {\r\n if (sessionAlmostTimeout) {\r\n this.sessionAlmostExpiredTimeoutHandler = setTimeout(() => {\r\n this.sessionStateChangedSubject.next(SessionStates.AlmostExpired);\r\n }, sessionAlmostTimeout * 1000 * 60);\r\n }\r\n\r\n this.sessionExpiredTimeoutHandler = setTimeout(() => {\r\n this.AutoEndSession();\r\n }, sessionTimeout * 1000 * 60);\r\n }\r\n }\r\n\r\n private AutoEndSession() {\r\n this.RefreshExpiredSessionTimeout(false);\r\n //\r\n // TODO: END SESSION\r\n // IT should be full cleanup of session states (pre/post action, api calls, etc.)\r\n this.ClearSessionCredentials();\r\n //\r\n this.sessionStateChangedSubject.next(SessionStates.Expired);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\nexport enum EnumCheckCredentialsResult {\r\n Success = \"Success\",\r\n Failure = \"Failure\",\r\n Lockout = \"Lockout\",\r\n PasswordExpired = \"PasswordExpired\",\r\n SessionExpired = \"SessionExpired\",\r\n NoLicense = \"NoLicense\",\r\n TechnicalFailure = \"TechnicalFailure\",\r\n MFASMSSent = \"MFASMSSent\",\r\n MFAEmailSent = \"MFAEmailSent\",\r\n NoMID = \"NoMID\"\r\n}\r\nexport enum EnumPageDisplayModes {\r\n FullScreen = \"FullScreen\",\r\n Window = \"Window\",\r\n Dialog = \"Dialog\",\r\n BottomSheet = \"BottomSheet\"\r\n}\r\n\r\nexport enum EnumPageEntitySources {\r\n Internal = \"Internal\",\r\n External = \"External\",\r\n CRUD = \"CRUD\"\r\n}\r\n\r\nexport enum EnumScreenSizes {\r\n ScreenXSmall = \"ScreenXSmall\",\r\n ScreenSmall = \"ScreenSmall\",\r\n ScreenMedium = \"ScreenMedium\",\r\n ScreenLarge = \"ScreenLarge\",\r\n ScreenXLarge = \"ScreenXLarge\"\r\n}\r\n\r\nexport enum EnumWindowSizes {\r\n WindowXSmall = \"WindowXSmall\",\r\n WindowSmall = \"WindowSmall\",\r\n WindowMedium = \"WindowMedium\",\r\n WindowLarge = \"WindowLarge\",\r\n WindowXLarge = \"WindowXLarge\",\r\n WindowAutoSize = \"WindowAutoSize\"\r\n}\r\n\r\nexport enum EnumCRUDActions {\r\n Create = \"Create\",\r\n Update = \"Update\",\r\n CreateOrUpdate = \"CreateOrUpdate\",\r\n Delete = \"Delete\"\r\n}\r\n\r\nexport enum EnumRequestProgressTracking {\r\n Send = \"Send\",\r\n Receive = \"Receive\",\r\n Both = \"Both\"\r\n}\r\n\r\n\r\nexport enum EnumToggle {\r\n In = 'In',\r\n Out = 'Out'\r\n}\r\n\r\nexport enum EnumCardMode {\r\n Simple = 'Simple',\r\n Expand = 'Expand',\r\n SimpleExpand = 'SimpleExpand',\r\n Edit = 'Edit'\r\n}\r\n\r\nexport enum EnumGridModes {\r\n Editable = 'Editable',\r\n Report = 'Report',\r\n Lines = 'Lines'\r\n}\r\n\r\nexport enum EnumGridScrollingModes {\r\n Virtual = \"virtual\",\r\n Standart = \"standart\",\r\n Infinite = \"infinite\"\r\n}\r\n\r\nexport enum EnumInputBoxTypes {\r\n Text = \"Text\",\r\n Email = \"Email\",\r\n TextArea = \"TextArea\",\r\n Number = \"Number\",\r\n Date = \"Date\"\r\n}\r\n\r\nexport enum EnumMessageBoxTypes {\r\n OK = \"OK\",\r\n YesNo = \"YesNo\",\r\n Custom = \"Custom\"\r\n}\r\n\r\nexport enum EnumFileBoxReturnDataTypes {\r\n FileList = \"FileList\",\r\n FileDataAsString = \"FileStringData\",\r\n FileDataAsLinesArray = \"FileDataAsLinesArray\",\r\n FileDataAsJSONArray = \"FileDataAsJSONArray\"\r\n}\r\n\r\nexport enum EnumNotificationDeliveryOptions {\r\n Email = \"Email\",\r\n SMS = \"SMS\",\r\n PushMessage = \"PushMessage\",\r\n Print = \"Print\",\r\n ExportToPDF = \"ExportToPDF\",\r\n WhatsApp = \"WhatsApp\",\r\n DontSend = \"DontSend\"\r\n}\r\n\r\nexport enum EnumLoginExtensionLinkType {\r\n Link,\r\n Route,\r\n Mailto,\r\n ButtonLink\r\n}\r\n\r\nexport enum EnumApplicationMode {\r\n Standard = \"Standard\",\r\n IFrame = \"IFrame\",\r\n SinglePage = \"SinglePage\"\r\n}\r\n\r\nexport enum EnumLanguages {\r\n Hebrew = \"HE\",\r\n English = \"EN\"\r\n}\r\n\r\nexport enum EnumNotificationStatuses {\r\n Draft = \"Draft\",\r\n Sending = \"Sending\",\r\n Failure = \"Failure\",\r\n Sent = \"Sent\"\r\n}\r\n\r\nexport enum EnumPopupShowStatuses {\r\n None = \"None\",\r\n ToShow = \"ToShow\",\r\n Showed = \"Showed\"\r\n}\r\n\r\nexport enum EnumFilterPanelActions {\r\n Apply = \"Apply\",\r\n Clear = \"Clear\",\r\n Ready = \"Ready\"\r\n}\r\n\r\nexport enum EnumSidebarActions {\r\n Open = \"Open\",\r\n Close = \"Close\",\r\n Toggle = \"Toggle\"\r\n}\r\n\r\nexport enum EnumSidebarStates {\r\n Opened = \"Opened\",\r\n Closed = \"Closed\"\r\n}\r\n\r\nexport enum EnumMenuPositions {\r\n Open = \"Open\",\r\n Close = \"Close\"\r\n}\r\n\r\nexport enum EnumMFAMethods {\r\n None = \"None\",\r\n SMS = \"SMS\",\r\n Email = \"Email\",\r\n WhatsApp = \"WhatsApp\"\r\n}\r\n\r\nexport enum EnumLoginSecureKeyTypes {\r\n Password = \"Password\",\r\n Otp = \"Otp\",\r\n MFACode = \"MFACode\",\r\n Session = \"Session\"\r\n}\r\n\r\nexport enum EnumInfoUTypes {\r\n Unicell = \"Unicell\",\r\n InforU = \"InforU\"\r\n}\r\n\r\nexport enum EnumSystemOptionDataTypes {\r\n String = \"String\",\r\n Number = \"Number\",\r\n Boolean = \"Boolean\"\r\n}\r\n\r\nexport enum EnumSystemOptions {\r\n AppNameHE = 'AppNameHE',\r\n AppNameEN = 'AppNameEN',\r\n AppURL = 'AppURL',\r\n\r\n SessionTimeout = 'SessionTimeout',\r\n SessionExpiry = 'SessionExpiry',\r\n EnableRequestLogging = 'EnableRequestLogging',\r\n EnableRemoteLogging = 'EnableRemoteLogging',\r\n ShowExpiredTimeoutAlert = 'ShowExpiredTimeoutAlert',\r\n ShowAlmostExpiredTimeoutAlert = 'ShowAlmostExpiredTimeoutAlert',\r\n\r\n IsSupportedCredentialsManagement = 'IsSupportedCredentialsManagement',\r\n IsSupportedUserWelcome = 'IsSupportedUserWelcome',\r\n IsSupportedPasswordChange = 'IsSupportedPasswordChange',\r\n IsSupportedPasswordRecovery = 'IsSupportedPasswordRecovery',\r\n IsSupportedLoginByOTP = 'IsSupportedLoginByOTP',\r\n IsSupportedLoginByPassword = 'IsSupportedLoginByPassword',\r\n IsAutoCreateCredentials = 'IsAutoCreateCredentials',\r\n AutoCreateCredentialsType = 'AutoCreateCredentialsType',\r\n IsRequireTaxNumberForOTP = 'IsRequireTaxNumberForOTP',\r\n\r\n PasswordChangeIntervalDays = 'PasswordChangeIntervalDays',\r\n PasswordComplexityLen = 'PasswordComplexityLen',\r\n PasswordComplexityMinChars = 'PasswordComplexityMinChars',\r\n PasswordComplexityMinDigits = 'PasswordComplexityMinDigits',\r\n\r\n BadLoginAttemptBeforeLock = 'BadLoginAttemptBeforeLock',\r\n BadLoginAttemptsCheckIntervalMinutes = 'BadLoginAttemptsCheckIntervalMinutes',\r\n BadLoginAttemptLockouIntervalMinutes = 'BadLoginAttemptLockouIntervalMinutes',\r\n\r\n XFrameOptions = 'XFrameOptions',\r\n IsDeployedBehindLoadBalancer = 'IsDeployedBehindLoadBalancer',\r\n\r\n IsSupportNotificationMethodEmail = 'IsSupportNotificationMethodEmail',\r\n IsSupportNotificationMethodSMS = 'IsSupportNotificationMethodSMS',\r\n IsSupportNotificationMethodWhatsApp = 'IsSupportNotificationMethodWhatsApp',\r\n\r\n RetentionPeriodRequests = 'RetentionPeriodRequests',\r\n RetentionPeriodRemoteRequests = 'RetentionPeriodRemoteRequests',\r\n RetentionPeriodNotifications = 'RetentionPeriodNotifications',\r\n RetentionPeriodSessions ='RetentionPeriodSessions'\r\n}\r\n\r\nexport enum HistoryEventTypesEnum {\r\n FieldChange = \"FieldChange\",\r\n RowAdded = \"RowAdded\",\r\n RowDeleted = \"RowDeleted\",\r\n Special = \"Special\"\r\n}\r\n\r\nexport enum EnumPrintingType {\r\n Entity = \"Entity\",\r\n Report = \"Report\"\r\n}\r\n\r\nexport enum EnumUserLoginStatus {\r\n All = \"All\",\r\n Success = \"Success\",\r\n Failure = \"Failure\"\r\n}\r\n\r\nexport enum EnumYesNo\r\n{ \r\n\tNo = \"No\",\r\n\tYes = \"Yes\"\r\n}\r\n\r\nexport enum EnumLocalizationTypes {\r\n Israel = 1,\r\n Europe = 2,\r\n NorthAmerica = 3,\r\n SouthAmerica = 4,\r\n FarEast = 6,\r\n Indian = 7\r\n}\r\n\r\nexport enum EnumCustomFilterTypes {\r\n RelatedToAtLeastOne = 'RelatedToAtLeastOne'\r\n}\r\n\r\n@Injectable()\r\nexport class SysEnumsService {\r\n constructor() { }\r\n\r\n public EnumWindowSizes = EnumWindowSizes;\r\n public EnumCardMode = EnumCardMode;\r\n public EnumToggle = EnumToggle;\r\n public EnumInputBoxTypes = EnumInputBoxTypes;\r\n public EnumMessageBoxTypes = EnumMessageBoxTypes;\r\n public EnumFileBoxReturnDataTypes = EnumFileBoxReturnDataTypes;\r\n public EnumNotificationDeliveryOptions = EnumNotificationDeliveryOptions;\r\n public EnumLoginExtensionLinkType = EnumLoginExtensionLinkType;\r\n public EnumApplicationMode = EnumApplicationMode;\r\n public EnumNotificationStatuses = EnumNotificationStatuses;\r\n public EnumPageDisplayModes = EnumPageDisplayModes;\r\n public EnumLanguages = EnumLanguages;\r\n public EnumFilterPanelActions = EnumFilterPanelActions;\r\n public EnumMenuPositions = EnumMenuPositions;\r\n public EnumMFAMethods = EnumMFAMethods;\r\n public EnumSidebarActions = EnumSidebarActions;\r\n public EnumSystemOptionDataTypes = EnumSystemOptionDataTypes;\r\n public HistoryEventTypesEnum = HistoryEventTypesEnum;\r\n public EnumPrintingType = EnumPrintingType;\r\n public EnumInfoUTypes = EnumInfoUTypes;\r\n public EnumUserLoginStatus = EnumUserLoginStatus;\r\n public EnumLocalizationTypes = EnumLocalizationTypes;\r\n public EnumCustomFilterTypes = EnumCustomFilterTypes;\r\n}\r\n","import { EventEmitter, Injectable } from '@angular/core';\r\nimport { EntityLoadedEventArgs, EntitySavedEventArgs, MessageBoxOptions, ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\r\nimport { EnumFilterPanelActions, EnumMenuPositions } from './sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SysEventsService {\r\n // EventEmitter inherits from RxJS Subject. ALWAYS use subscribe/unsubscribe when working with them\r\n public OnSetDefaults: EventEmitter = new EventEmitter();\r\n public OnEntityLoaded: EventEmitter = new EventEmitter();\r\n public OnNavigate: EventEmitter = new EventEmitter();\r\n public OnReloadComponent: EventEmitter = new EventEmitter();\r\n\r\n private _onEntitySavedSubject = new Subject();\r\n public OnEntitySaved = this._onEntitySavedSubject.asObservable();\r\n\r\n NotifyEntitySaved(e: EntitySavedEventArgs) {\r\n this._onEntitySavedSubject.next(e);\r\n }\r\n\r\n private _toolbarReloadSubject = new ReplaySubject(3);\r\n readonly Toolbar = this._toolbarReloadSubject.asObservable();\r\n\r\n ReloadToolbar(toolbarSettings: ToolbarSettings) {\r\n this._toolbarReloadSubject.next(toolbarSettings);\r\n }\r\n\r\n private _selectedRouteChangedSubject = new BehaviorSubject('');\r\n readonly SelectedRoute = this._selectedRouteChangedSubject.asObservable();\r\n\r\n ChangeSelectedRoute(route: string) {\r\n this._selectedRouteChangedSubject.next(route);\r\n }\r\n\r\n private _reloadMenuItemsSubject = new ReplaySubject(1); //BehaviorSubject(false);\r\n readonly MenuItems = this._reloadMenuItemsSubject.asObservable();\r\n\r\n ReloadMenuItems() {\r\n this._reloadMenuItemsSubject.next(true);\r\n }\r\n\r\n private _menuPositonSubject = new ReplaySubject(1);\r\n readonly MenuPositon = this._menuPositonSubject.asObservable();\r\n\r\n // null or undefined to toggle menu\r\n SetMenuPositon(position?: EnumMenuPositions) {\r\n this._menuPositonSubject.next(position);\r\n }\r\n\r\n private _filterPanelSubject = new Subject();\r\n readonly FilterPanel = this._filterPanelSubject.asObservable();\r\n\r\n FilterPanelAction(action: EnumFilterPanelActions) {\r\n this._filterPanelSubject.next(action);\r\n }\r\n\r\n private _pageSidePanelStateSubject = new ReplaySubject<{ pageComponentName: string, state: boolean }>(1);\r\n readonly PageSidePanelState = this._pageSidePanelStateSubject.asObservable();\r\n\r\n SetPageSidePanelState(pageComponentName: string, state: boolean) {\r\n this._pageSidePanelStateSubject.next({ pageComponentName: pageComponentName, state: state });\r\n }\r\n\r\n private _pagePreviewStateSubject = new Subject<{ pageComponentName: string, state: boolean, data: string | Blob, fileName: string }>();\r\n readonly PagePreviewState = this._pagePreviewStateSubject.asObservable();\r\n\r\n SetPagePreviewState(pageComponentName: string, state: boolean, data?: string | Blob, fileName?: string) {\r\n this._pagePreviewStateSubject.next({ pageComponentName: pageComponentName, state: state, data, fileName });\r\n }\r\n\r\n private _openMessageBoxSubject = new Subject();\r\n readonly OpenMessageBoxSubject = this._openMessageBoxSubject.asObservable();\r\n\r\n public OpenMessageBox(options: MessageBoxOptions) {\r\n this._openMessageBoxSubject.next(options);\r\n }\r\n\r\n private _closeMessageBoxSubject = new Subject();\r\n readonly CloseMessageBoxSubject = this._closeMessageBoxSubject.asObservable();\r\n\r\n public CloseMessageBox(value: boolean) {\r\n this._closeMessageBoxSubject.next(value);\r\n }\r\n\r\n private _breadcrumbSubject = new Subject();\r\n readonly Breadcrumb = this._breadcrumbSubject.asObservable();\r\n\r\n public SetBreadCrumbVisible(isVisible: boolean) {\r\n this._breadcrumbSubject.next(isVisible);\r\n }\r\n\r\n private _defaultNavigationSubject = new Subject();\r\n readonly OnNavigateDefault = this._defaultNavigationSubject.asObservable();\r\n\r\n public NavigateDefault(result: boolean) {\r\n this._defaultNavigationSubject.next(result);\r\n }\r\n\r\n private _loadPanelSubject = new Subject();\r\n readonly LoadPanel = this._loadPanelSubject.asObservable();\r\n\r\n public SetLoadPanelState(result: boolean) {\r\n this._loadPanelSubject.next(result);\r\n }\r\n}\r\n","import { ClientException, BaseState, BaseEntity } from '@base/entities/BaseEntities';\r\nimport { ComponentCustomization, FieldCustomizationElement, InjectableComponentOptions } from '@base/classes/BaseClasses';\r\nimport { Route } from '@angular/router';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nclass SysGlobalsClass {\r\n MainMenuVisible: boolean;\r\n MenuPath: string;\r\n PageStates: { [page: string]: BaseState } = {};\r\n IsResetState: boolean;\r\n LastException: ClientException;\r\n Language: string;\r\n CurrentEntity: BaseEntity;\r\n CurrentState: BaseState;\r\n FieldCustomizations: FieldCustomizationElement[];\r\n ComponentCustomizations: ComponentCustomization[];\r\n PageRoutes: Route[];\r\n NavigationSequence: number;\r\n ProgressPercent: number;\r\n IsProgressTracking: boolean;\r\n IgnoreSessionRefreshRequestToken: HttpContextToken = new HttpContextToken(() => false);\r\n\r\n InjectableComponentsOptions: InjectableComponentOptions>[] = [];\r\n}\r\n\r\nexport const SysGlobals = new SysGlobalsClass();\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { KeyValueEntity } from '@base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from './systemoptions.enum';\r\n\r\n@Injectable()\r\nexport class SystemOptionsService {\r\n private systemOptions: KeyValueEntity[];\r\n constructor() { }\r\n\r\n setOptions(options: KeyValueEntity[]) {\r\n this.systemOptions = [...options];\r\n }\r\n\r\n mergeOptions(options: KeyValueEntity[]) {\r\n this.systemOptions = [...this.systemOptions, ...options];\r\n }\r\n\r\n getSystemOption(optionName: EnumSystemOptions | string) {\r\n if (this.systemOptions == undefined) return undefined;\r\n var option = this.systemOptions.find(x => x.Key == optionName);\r\n if (option == undefined) throw (`SystemOption ${optionName} is not defined`);\r\n return option.Value;\r\n }\r\n\r\n getSystemOptionAsBoolean(optionName: EnumSystemOptions | string) {\r\n return this.getSystemOption(optionName) == '1';\r\n }\r\n}","\r\nexport enum EnumSystemOptions \r\n{\r\n IsSupportedPasswordChange = \"IsSupportedPasswordChange\",\r\n IsSupportedPasswordRecovery = \"IsSupportedPasswordRecovery\",\r\n IsSupportedLoginByOTP = \"IsSupportedLoginByOTP\",\r\n IsSupportedLoginByPassword = 'IsSupportedLoginByPassword',\r\n IsRequireTaxNumberForOTP = 'IsRequireTaxNumberForOTP',\r\n ShowExpiredTimeoutAlert = 'ShowExpiredTimeoutAlert',\r\n ShowAlmostExpiredTimeoutAlert = 'ShowAlmostExpiredTimeoutAlert',\r\n SessionTimeout = 'SessionTimeout',\r\n PasswordComplexityLen = \"PasswordComplexityLen\",\r\n PasswordComplexityMinChars = \"PasswordComplexityMinChars\",\r\n PasswordComplexityMinDigits = \"PasswordComplexityMinDigits\",\r\n VatValue = \"VatValue\",\r\n IsSupportNotificationMethodEmail = 'IsSupportNotificationMethodEmail',\r\n IsSupportNotificationMethodSMS = 'IsSupportNotificationMethodSMS',\r\n IsSupportNotificationMethodWhatsApp = 'IsSupportNotificationMethodWhatsApp'\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport notify from 'devextreme/ui/notify';\r\nimport { MessageBoxOptions } from '@base/classes/BaseClasses';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\n\r\n@Injectable()\r\nexport class UiService {\r\n\r\n constructor(private sysEventsService: SysEventsService) {\r\n }\r\n\r\n public OpenMessageBox(options: MessageBoxOptions) {\r\n this.sysEventsService.OpenMessageBox(options);\r\n }\r\n\r\n public CloseMessageBox(result: boolean) {\r\n this.sysEventsService.CloseMessageBox(result);\r\n }\r\n\r\n // Information message for the user\r\n public WarningMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'warning', iMilliSecs || 30000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n // Information message for the user\r\n public InfoMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'success', iMilliSecs || 5000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n // Error message for the user\r\n public StopMessage(sMessage: string, sSelector?: string, iMilliSecs?: number, isShowMultipleToasts?: boolean) {\r\n this.ShowMessage(sMessage, 'error', iMilliSecs || 15000, sSelector, false, isShowMultipleToasts);\r\n }\r\n\r\n public Notify(sMessage: string) {\r\n this.ShowMessage(sMessage, 'info', 15000, undefined, true);\r\n }\r\n\r\n // Differentiate between user messages and message that system has no expected\r\n // For instance, getting an error when populating a combo is not expected. \r\n // An error message when saving an entity can happen, thus StopMessage should be used\r\n public UnexpectedMessage(sMessage: string) {\r\n this.ShowMessage(sMessage, 'info', 15000);\r\n console.error(sMessage);\r\n }\r\n\r\n // Show the message\r\n private ShowMessage(sMessage: string, sType: string, iMilliSecs: number, sSelector?: string,\r\n isNotification?: boolean, isShowMultipleToasts?: boolean) {\r\n const toasts = document.querySelectorAll('.dx-toast-content');\r\n const options = this.GetNotifyOptions(sMessage, sSelector, toasts, sType, isNotification, isShowMultipleToasts);\r\n const displayTime = iMilliSecs - toasts.length * 1000;\r\n notify(options, sType, displayTime <= 5000 ? 5000 : displayTime);\r\n }\r\n\r\n private GetNotifyOptions(sMessage: string, sSelector: string, toasts: NodeListOf, toastType: string,\r\n isNotification?: boolean, isShowMultipleToasts?: boolean) {\r\n const customToastCssClass = `m4u-custom-toast-${toastType}`;\r\n const toastIconClass = `m4u-icon-toast-${toastType}`; \r\n const position = isNotification ? 'right bottom' : 'bottom center';\r\n const offset = isNotification \r\n ? `-20px -${this.GetNotificationTop(toasts)}` \r\n : isShowMultipleToasts ? `0 -${this.GetNotificationTop(toasts)}` : '0 -20px';\r\n return {\r\n closeOnClick: true,\r\n closeOnSwipe: true,\r\n width: 200,\r\n position: {\r\n at: position,\r\n my: position,\r\n of: sSelector || null,\r\n offset: offset\r\n },\r\n contentTemplate: `
\r\n
\r\n ${sMessage}\r\n
`,\r\n show: {\r\n duration: 0\r\n },\r\n animation: {\r\n show:\r\n {\r\n type: 'fade',\r\n duration: 500,\r\n from: 0,\r\n to: 1\r\n },\r\n hide:\r\n {\r\n type: 'fade',\r\n duration: 1000,\r\n from: 1,\r\n to: 0\r\n }\r\n }\r\n };\r\n }\r\n\r\n private GetNotificationTop(toasts: NodeListOf): number {\r\n let top = 0;\r\n const lastOffset = toasts.length ? toasts[toasts.length - 1]?.getBoundingClientRect().top : null;\r\n\r\n if (lastOffset) {\r\n top = lastOffset;\r\n }\r\n if (top <= 0) {\r\n top = 20;\r\n }\r\n else {\r\n top = window.innerHeight - top;\r\n top += 5;\r\n }\r\n\r\n return top;\r\n }\r\n}\r\n","import { HttpClient, HttpContext } from \"@angular/common/http\";\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { EnumRequestProgressTracking } from \"../framework/sysenums.enum\";\r\nimport { Utils } from '../helpers/Utils';\r\nimport { AppConfigService } from '../../configuration/app.config.service';\r\n\r\n@Injectable()\r\nexport class APIGatewayService {\r\n constructor(private http: HttpClient,\r\n private appConfigService: AppConfigService) {\r\n }\r\n\r\n //Controller based actions\r\n //********************************\r\n public ExecuteGetAction(sController: string, sAction: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecuteGetRequest(sController + '/' + sAction, QueryParams, TrackProgress, ResponseType, Headers, Context);\r\n }\r\n\r\n public ExecutePostAction(sController: string, sAction: string, Entity: BaseEntity | BaseEntity[], QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecutePostRequest(sController + '/' + sAction, Entity, QueryParams, TrackProgress, Headers, Context);\r\n }\r\n\r\n public ExecuteDeleteAction(sController: string, sAction: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.ExecuteDeleteRequest(sController + '/' + sAction, QueryParams, TrackProgress, Headers, Context);\r\n }\r\n\r\n //*******************************\r\n //HTTP-Level requests\r\n //*******************************\r\n private ExecutePostRequest(url: string, data: any, QueryParams: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.post(this.GetAPIURL() + url, Utils.CloneObject(data), this.GetParams(QueryParams, TrackProgress, undefined, Headers, Context)); //Notice the cloning, to avoid changing the actual fields when parsing the body\r\n }\r\n\r\n private ExecuteGetRequest(url: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.get(this.GetAPIURL() + url, this.GetParams(QueryParams, TrackProgress, ResponseType, Headers, Context));\r\n }\r\n\r\n private ExecuteDeleteRequest(url: string, QueryParams?: any, TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }, Context?: HttpContext): Observable {\r\n return this.http.delete(this.GetAPIURL() + url, this.GetParams(QueryParams, TrackProgress, undefined, Headers, Context));\r\n }\r\n\r\n //Return request parameters\r\n private GetParams(QueryParams: any, TrackProgress?: EnumRequestProgressTracking, ResponseType?: string, Headers?: { [header: string] : string | string[] }, Context?: HttpContext) {\r\n let ret =\r\n {\r\n params: this.PrepareQueryParams(QueryParams),\r\n headers: this.GetHeaders(TrackProgress, Headers),\r\n reportProgress: (TrackProgress != undefined),\r\n context: Context\r\n };\r\n\r\n if (ResponseType) {\r\n (ret as any).responseType = ResponseType;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n private GetHeaders(TrackProgress?: EnumRequestProgressTracking, Headers?: { [header: string] : string | string[] }): { [header: string] : string | string[] } {\r\n let headers = Headers;\r\n if (TrackProgress) headers = { ...{ 'm4u-trackprogress': TrackProgress }, ...headers };\r\n return headers;\r\n }\r\n\r\n\r\n private PrepareQueryParams(QueryParams: any): any {\r\n\r\n //Step 1 - pre-process \r\n var params = this.PrepareQueryParamsInternal(QueryParams);\r\n\r\n\r\n //Step 2 - flatten/spread\r\n if (params != undefined) {\r\n Object.keys(params).forEach(key => {\r\n var value = params[key];\r\n if (value instanceof Object && !(value instanceof Array)) {\r\n Object.keys(value).forEach(childKey => {\r\n var valueChild = value[childKey];\r\n params[childKey] = valueChild;\r\n });\r\n delete params[key];\r\n }\r\n });\r\n }\r\n\r\n //Step 3 - format dates\r\n params = this.PrepareQueryParamsInternal(params);\r\n return params;\r\n }\r\n\r\n //Prepare query parameters - format dates and remove nulls\r\n private PrepareQueryParamsInternal(QueryParams: any): any {\r\n if (QueryParams === undefined) return undefined;\r\n Object.keys(QueryParams).forEach(key => {\r\n var value = QueryParams[key];\r\n if (value === undefined || value === null || value == \"\") delete QueryParams[key];\r\n if (value instanceof Date) QueryParams[key] = this.ConvertToServerDate(value);\r\n });\r\n return QueryParams;\r\n }\r\n\r\n //*******************************\r\n\r\n\r\n //Formats value for sending to the server, without time zone\r\n private ConvertToServerDate(value: Date): string {\r\n var D = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds()));\r\n var S = D.toISOString();\r\n if (S.endsWith(\"Z\")) S = S.substring(0, S.length - 1);\r\n return S;\r\n }\r\n\r\n\r\n //Return the base URL for the API\r\n public GetAPIURL(): string {\r\n if (this.appConfigService.M4UConfig.standaloneApplicationApiUrl) {\r\n return this.appConfigService.M4UConfig.standaloneApplicationApiUrl;\r\n }\r\n\r\n //Debug overrides\r\n //Use port 4444 for development for HTTP, 44333 for HTTPS\r\n const port: string = location.port == \"4200\" || location.port == \"4201\"\r\n ? (location.protocol == \"http:\" ? \"4444\" : \"44333\")\r\n : location.port;\r\n\r\n const formattedPort = port && `:${port}` || '';\r\n const baseUrl = this.appConfigService.M4UConfig.deploymentApplicationFolder;\r\n const formattedBaseUrl = baseUrl && `${baseUrl.replace('/', '')}/` || '';\r\n\r\n //Combine\r\n return `${location.protocol}//${location.hostname}${formattedPort}/${formattedBaseUrl}api/`;\r\n // }\r\n }\r\n}\r\n\r\n","declare global\r\n{\r\n interface Date\r\n {\r\n ToDate(): Date;\r\n IsToday(): boolean;\r\n Time(): Date;\r\n }\r\n \r\n\r\n\r\n}\r\n\r\nDate.prototype.ToDate = function (): Date\r\n{\r\n return new Date(this.getFullYear(), this.getMonth(), this.getDate());\r\n}\r\n\r\nDate.prototype.IsToday = function (): boolean\r\n{\r\n return this.ToDate().valueOf() == new Date().ToDate().valueOf();\r\n}\r\n\r\n\r\nDate.prototype.Time = function (): Date\r\n{\r\n return new Date(1900, 1, 1, this.getHours(), this.getMinutes(), this.getSeconds());\r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport { }","import { DataGroupInfoHeader } from '@base/classes/BaseClasses';\r\nimport { formatDate } from \"devextreme/localization\";\r\nimport { FrameworkService } from \"../framework/framework.service\";\r\nimport { RC } from \"../framework/resources.service\";\r\nimport { EnumLanguages } from '../framework/sysenums.enum';\r\nimport { SysGlobals } from \"../framework/sysglobals\";\r\nimport { AppInjector } from \"../injector/injector.module\";\r\nimport \"./DateExtensions\";\r\n\r\nexport class DateHelpers {\r\n\r\n\r\n //Return only date part of the value\r\n public static ToDateOnly(value: Date): Date {\r\n var date = new Date(value);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n }\r\n\r\n //Return only time part of the value\r\n public static ToTimeOnly(value: Date): Date {\r\n return new Date(1900, 0, 1, value.getHours(), value.getMinutes(), value.getSeconds());\r\n }\r\n\r\n public static DiffInSeconds(d1: Date, d2: Date): number {\r\n return (d2.valueOf() - d1.valueOf()) / (1000 * 1);\r\n }\r\n\r\n public static DiffInMinutes(d1: Date, d2: Date): number {\r\n return (d2.valueOf() - d1.valueOf()) / (1000 * 60);\r\n }\r\n\r\n public static DiffInHours(d1: Date, d2: Date): number {\r\n var x1 = new Date(0, 0, 0, d1.getHours(), d1.getMinutes());\r\n var x2 = new Date(0, 0, 0, d2.getHours(), d2.getMinutes());\r\n return (x2.valueOf() - x1.valueOf()) / (1000 * 3600);\r\n }\r\n\r\n public static DiffInDays(d1: Date, d2: Date): number {\r\n return (d2.ToDate().valueOf() - d1.ToDate().valueOf()) / (1000 * 3600 * 24);\r\n }\r\n\r\n public static DiffInWeeks(d1: Date, d2: Date): number {\r\n return (d2.ToDate().valueOf() - d1.ToDate().valueOf()) / 604800000;\r\n }\r\n\r\n public static DiffInMonthes(d1: Date, d2: Date): number {\r\n let months = 0;\r\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\r\n months -= d1.getMonth();\r\n months += d2.getMonth();\r\n return months <= 0 ? 0 : months;\r\n }\r\n\r\n public static IsSameDate(d1: Date, d2: Date) {\r\n return (d1.getFullYear() == d2.getFullYear() && d1.getMonth() == d2.getMonth() && d1.getDate() == d2.getDate());\r\n }\r\n\r\n public static BOM(d1: Date) {\r\n return new Date(d1.getFullYear(), d1.getMonth(), 1);\r\n }\r\n\r\n public static BOY(d1: Date) {\r\n return new Date(d1.getFullYear(), 0, 1);\r\n }\r\n\r\n public static EOY(d1: Date) {\r\n return new Date(d1.getFullYear(), 11, 1);\r\n }\r\n\r\n public static EOM(d1: Date) {\r\n return new Date(d1.getFullYear(), d1.getMonth() + 1, 0);\r\n }\r\n\r\n public static GetDayName(iDay: number): string {\r\n switch (iDay) {\r\n case 1: return RC(\"lblDay1\");\r\n case 2: return RC(\"lblDay2\");\r\n case 3: return RC(\"lblDay3\");\r\n case 4: return RC(\"lblDay4\");\r\n case 5: return RC(\"lblDay5\");\r\n case 6: return RC(\"lblDay6\");\r\n case 7: return RC(\"lblDay7\");\r\n }\r\n }\r\n\r\n public static GetDayNameShort(iDay: number): string {\r\n switch (iDay) {\r\n case 1: return RC(\"lblDay1s\");\r\n case 2: return RC(\"lblDay2s\");\r\n case 3: return RC(\"lblDay3s\");\r\n case 4: return RC(\"lblDay4s\");\r\n case 5: return RC(\"lblDay5s\");\r\n case 6: return RC(\"lblDay6s\");\r\n case 7: return RC(\"lblDay7s\");\r\n }\r\n }\r\n\r\n public static GetDateApproximate(date: Date, bShowDate: boolean = true): string {\r\n var framework = AppInjector.get(FrameworkService);\r\n if (date == null) return RC(\"lblDateIsNull\");\r\n var sApproximate: string = this.GetDateApproximateInternal(date);\r\n var sFormattedDate: string = this.IsSameDate(date, new Date()) && this.IsHasTime(date)\r\n ? formatDate(date, framework.CompanyInfo.TimeFormatShort)\r\n : formatDate(date, framework.CompanyInfo.DateFormatShort);\r\n var sFinalDate: string = bShowDate ? `(${sFormattedDate})` : '';\r\n if (SysGlobals.Language == EnumLanguages.English) return `${sApproximate} ${RC('lblAgo')} ${sFinalDate}`;\r\n if (SysGlobals.Language == EnumLanguages.Hebrew) return `${RC('lblAgo')} ${sApproximate} ${sFinalDate}`;\r\n }\r\n\r\n\r\n public static IsHasTime(date: Date) {\r\n return date.getHours() != 0 || date.getMinutes() != 0 || date.getSeconds() != 0;\r\n }\r\n\r\n private static GetDateApproximateInternal(date: Date): string {\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const nMinutes = diff / 1000 / 60;\r\n const nHours = nMinutes / 60;\r\n const nDays = nHours / 24;\r\n const nWeeks = nDays / 7;\r\n const nMonths = nDays / 30;\r\n const nYears = nMonths / 12;\r\n\r\n\r\n // Less then 1 day\r\n if (this.IsHasTime(date)) {\r\n if (nMinutes <= 1) return RC(\"f702\");\r\n if (nMinutes <= 5) return RC(\"f703\");\r\n if (nMinutes <= 10) return RC(\"f704\");\r\n if (nMinutes <= 15) return RC(\"f705\");\r\n if (nMinutes <= 30) return RC(\"f706\");\r\n if (nMinutes <= 60) return RC(\"f707\");\r\n if (nMinutes <= 90) return RC(\"f709\");\r\n if (nMinutes <= 135) return RC(\"f710\");\r\n if (nDays <= 1) return RC(\"f711\", Math.floor(nHours));\r\n }\r\n else {\r\n if (nDays <= 1) return RC(\"f725\");\r\n }\r\n\r\n // Less then 1 week\r\n if (nDays <= 2) return RC(\"f712\");\r\n if (nDays <= 3) return RC(\"f713\");\r\n if (nWeeks <= 1) return RC(\"f714\", Math.floor(nDays));\r\n\r\n // Less then 1 month\r\n if (nWeeks <= 2) return RC(\"f715\")\r\n if (nWeeks <= 3) return RC(\"f716\")\r\n if (nMonths <= 1) return RC(\"f717\", Math.floor(nWeeks))\r\n\r\n // Less then 1 year\r\n if (nMonths <= 2) return RC(\"f718\")\r\n if (nMonths <= 3) return RC(\"f720\")\r\n if (nYears <= 1) return RC(\"f721\", Math.floor(nMonths))\r\n\r\n // Years\r\n if (nYears <= 2) return RC(\"f722\")\r\n if (nYears <= 3) return RC(\"f723\")\r\n\r\n return RC(\"f724\", Math.floor(nYears));\r\n }\r\n\r\n public static GetGroupsByDate(): DataGroupInfoHeader[] {\r\n let groups =\r\n [\r\n new DataGroupInfoHeader(RC('lblToday'), '-1'),\r\n new DataGroupInfoHeader(RC('lblYesterday'), '-2'),\r\n new DataGroupInfoHeader(RC('lblLastWeek'), '-7'),\r\n new DataGroupInfoHeader(RC('lblLastMonth'), '-30'),\r\n new DataGroupInfoHeader(RC('lblBefore'), '-999')\r\n ]\r\n\r\n return groups;\r\n }\r\n\r\n\r\n public static AddDay(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setDate(date.getDate() + count);\r\n return newDate;\r\n }\r\n\r\n public static AddWeek(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setDate(date.getDate() + count * 7);\r\n return newDate;\r\n }\r\n\r\n public static AddMonth(date: Date, count: number) {\r\n const newDate = new Date(date.valueOf());\r\n newDate.setMonth(date.getMonth() + count);\r\n return newDate;\r\n }\r\n}","import { BaseEntity, GenericListEntity, UploadFile, AttachedFile, CompanyInfo } from '@base/entities/BaseEntities';\r\nimport { QueryList } from '@angular/core';\r\nimport cloneDeep from 'lodash/cloneDeep';\r\nimport camelcaseKeys from 'camelcase-keys';\r\nimport { Subject } from 'rxjs';\r\n\r\n/** Utility functions for interaction with objects */\r\n// @dynamic\r\nexport class Utils {\r\n\r\n /** Returns a new typed array */\r\n public static MapList(type: (new () => TEntity), Entities: TEntity[]): TEntity[] {\r\n //Empty response, do nothing\r\n if (Entities.length == 0) return undefined;\r\n\r\n //Map each element and add to array\r\n const newArray: Array = new Array();\r\n Entities.forEach(Entity => {\r\n newArray.push(this.MapObject(type, Entity));\r\n });\r\n\r\n return newArray;\r\n }\r\n\r\n public static MapAsNumeric(item: GenericListEntity): any {\r\n return (\r\n {\r\n Value: +item.Value,\r\n Text: item.Text,\r\n Description: item.Description\r\n });\r\n }\r\n\r\n /** Copy all properties from source object to a new typed object */\r\n /**\r\n * \r\n * @param type The type of the result entity\r\n * @param Entity The value of the source \r\n */\r\n public static MapObject(type: (new () => TEntity), Entity: TEntity): TEntity {\r\n //Empty response, do nothing\r\n if (Entity == undefined) return undefined;\r\n\r\n //Create new instance, copy \r\n const newObject: TEntity = this.GetNewInstance(type);\r\n const resultObject = this.CloneObject(Entity as any) as TEntity;\r\n resultObject.TypeName = newObject.TypeName;\r\n return resultObject;\r\n }\r\n\r\n public static GetNewInstance(type: (new () => TEntity)): TEntity {\r\n return new type();\r\n }\r\n\r\n public static CloneObject(obj: object): any {\r\n return cloneDeep(obj);\r\n }\r\n\r\n public static IsPrimitiveType(obj: object) {\r\n return (obj !== Object(obj));\r\n }\r\n\r\n public static CopyProperties(type: (new () => TEntity), source: TEntity, destination: TEntity) {\r\n //Empty response, do nothing\r\n if (source == undefined || destination == undefined) return undefined;\r\n for (const k in source) destination[k] = source[k];\r\n }\r\n\r\n public static IsEmpty(obj: any): boolean {\r\n if (typeof (obj) === 'number' && obj === 0) return false;\r\n return obj === undefined || obj == null || obj == '';\r\n }\r\n\r\n public static NZ(obj: any, replace: any = ''): string {\r\n return (this.IsEmpty(obj) ? replace : obj);\r\n }\r\n\r\n public static ValEx(s: string): number {\r\n if (this.IsEmpty(s)) return 0;\r\n if (typeof s === 'number') return s;\r\n const num = s.replace(',', '').replace(' ', '');\r\n return +num;\r\n }\r\n\r\n //Computer checksum hash (not for cryptography)\r\n public static ComputeChecksum(value: string): string {\r\n let h1 = 0xdeadbeef ^ 0, h2 = 0x41c6ce57 ^ 0;\r\n for (let i = 0, ch; i < value.length; i++) {\r\n ch = value.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);\r\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);\r\n return (h2 >>> 0).toString(16).padStart(8, '0') + (h1 >>> 0).toString(16).padStart(8, '0');\r\n }\r\n\r\n //Convert value to bool, considering undefined\r\n public static ToBoolean(value: boolean): boolean {\r\n if (value == undefined) return false;\r\n return value;\r\n }\r\n\r\n //Convert 64base encoded data into blob\r\n public static ConvertToBlob(oBase64Data: any, sContentType: string, bIsUseUint16: boolean = false): Blob {\r\n if (oBase64Data === undefined || oBase64Data === null) return undefined;\r\n const byteCharacters = atob(oBase64Data);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += 512) {\r\n const slice = byteCharacters.slice(offset, offset + 512);\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = !bIsUseUint16 ? new Uint8Array(byteNumbers) : new Uint16Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n return new Blob(byteArrays, { type: sContentType });\r\n }\r\n\r\n public static ConvertToBase64(bytesArray: number[]) {\r\n let binary = '';\r\n const bytes = new Uint8Array(bytesArray);\r\n const len = bytes.byteLength;\r\n for (let i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n }\r\n\r\n public static ConvertToBytesArray(base64Data: string) {\r\n if (base64Data === undefined || base64Data === null) return undefined;\r\n const data = base64Data.split(';');\r\n base64Data = data.length > 1 ? data[1].substring(data[1].indexOf(',') + 1) : base64Data;\r\n\r\n const binary_string = window.atob(base64Data);\r\n const len = binary_string.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n bytes[i] = binary_string.charCodeAt(i);\r\n }\r\n return Array.from(new Uint8Array(bytes.buffer));\r\n }\r\n\r\n public static GetImageSource(bytesArray: number[], mimeType: string): string {\r\n return `data:${mimeType};base64,${this.ConvertToBase64(bytesArray)}`;\r\n }\r\n\r\n public static GetImageSourceFromBase64(base64String: string, mimeType: string): string {\r\n return `data:${mimeType};base64,${base64String}`;\r\n }\r\n\r\n public static ExtractDataFromDataURL(DataURL: string): string {\r\n return DataURL.split(',')[1];\r\n }\r\n\r\n public static CombineChild(oItem1: T, oItem2: T): T {\r\n return oItem1 != undefined ? oItem1 : oItem2;\r\n }\r\n\r\n public static CombineChildren(list1: QueryList, list2: QueryList): T[] {\r\n let arr: T[] = [];\r\n if (list1 != undefined) arr = arr.concat(list1.toArray());\r\n if (list2 != undefined) arr = arr.concat(list2.toArray());\r\n return arr;\r\n }\r\n\r\n public static ConvertCSVToJSONArray(strData, sDelimited: string) {\r\n let data = [], i = 0, k = 0, header = [];\r\n\r\n\r\n // Create a regular expression to parse the CSV values.\r\n const objPattern = new RegExp(\r\n (\r\n // Delimiters.\r\n '(\\\\' + sDelimited + '|\\\\r?\\\\n|\\\\r|^)' +\r\n\r\n // Quoted fields.\r\n '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\r\n\r\n // Standard fields.\r\n '([^\"\\\\' + sDelimited + '\\\\r\\\\n]*))'\r\n ),\r\n 'gi'\r\n );\r\n\r\n // Create an array to hold our data. Give the array\r\n // a default empty first row.\r\n let arrData = [[]];\r\n\r\n // Create an array to hold our individual pattern\r\n // matching groups.\r\n let arrMatches = null;\r\n\r\n\r\n // Keep looping over the regular expression matches\r\n // until we can no longer find a match.\r\n while (arrMatches = objPattern.exec(strData)) {\r\n\r\n // Get the delimiter that was found.\r\n const strMatchedDelimiter = arrMatches[1];\r\n\r\n // Check to see if the given delimiter has a length\r\n // (is not the start of string) and if it matches\r\n // field delimiter. If id does not, then we know\r\n // that this delimiter is a row delimiter.\r\n if (strMatchedDelimiter.length && (strMatchedDelimiter != sDelimited)) {\r\n // Since we have reached a new row of data,\r\n // add an empty row to our data array.\r\n arrData.push([]);\r\n }\r\n\r\n // Now that we have our delimiter out of the way,\r\n // let's check to see which kind of value we\r\n // captured (quoted or unquoted).\r\n if (arrMatches[2]) {\r\n // We found a quoted value. When we capture\r\n // this value, unescape any double quotes.\r\n var strMatchedValue = arrMatches[2].replace(new RegExp('\"\"', 'g'), '\"');\r\n\r\n } else {\r\n // We found a non-quoted value.\r\n var strMatchedValue = arrMatches[3];\r\n }\r\n\r\n // Now that we have our value string, let's add\r\n // it to the data array.\r\n arrData[arrData.length - 1].push(strMatchedValue);\r\n }\r\n\r\n\r\n //Filter out empty lines\r\n arrData = arrData.filter(x => !this.IsEmpty(x));\r\n\r\n //Rename headers\r\n for (i = 0; i < arrData.length; i++) {\r\n if (i == 0) {\r\n header = arrData[i];\r\n } else {\r\n const obj = {};\r\n for (k = 0; k < header.length; k++) {\r\n if (k < arrData[i].length) {\r\n obj[header[k]] = arrData[i][k];\r\n }\r\n }\r\n data.push(obj);\r\n }\r\n }\r\n return data;\r\n\r\n }\r\n\r\n public static ContainsHebrewLetters(str: any): boolean {\r\n const regex = new RegExp('[א-ת]+');\r\n return (regex.test(str));\r\n }\r\n\r\n public static LoadFilesBody(files: File[], done: (uploads: UploadFile[]) => void) {\r\n const result: UploadFile[] = [];\r\n\r\n if (files && files.length) {\r\n const length = files.length;\r\n let count = 0;\r\n\r\n for (const file of files) {\r\n const fileReader = new FileReader();\r\n\r\n fileReader.onloadend = (e) => {\r\n count++;\r\n\r\n const buffer = fileReader.result as ArrayBuffer;\r\n const array = Array.from(new Uint8Array(buffer));\r\n\r\n result.push({\r\n Name: file.name,\r\n Type: file.type,\r\n Data: array,\r\n Buffer: buffer,\r\n File: file\r\n } as UploadFile);\r\n\r\n if (length === count) {\r\n done(result);\r\n }\r\n\r\n };\r\n fileReader.readAsArrayBuffer(file);\r\n }\r\n } else {\r\n done(result);\r\n }\r\n }\r\n\r\n public static DoFileDownload(file: AttachedFile, fileBlob: string, contentType: string, bIsUseUint16: boolean = false) {\r\n const blob = Utils.ConvertToBlob(fileBlob, contentType, bIsUseUint16);\r\n const objectUrl = URL.createObjectURL(blob);\r\n const fileName = file.Name + (file.Extension ? '.' + file.Extension : '');\r\n this.DownloadFile(objectUrl, fileName);\r\n }\r\n\r\n public static DownloadFile(fileUrl: string, fileName: string) {\r\n const a = document.createElement('a');\r\n a.href = fileUrl;\r\n a.download = fileName;\r\n a.click();\r\n URL.revokeObjectURL(fileUrl);\r\n }\r\n\r\n // Compare not undefined/null objects\r\n public static IsEquals(obj1: {}, obj2: {}, ignoreEmptyProps: boolean = false) {\r\n if (obj1 === null || obj2 === null || !this.IsObject(obj1) || !this.IsObject(obj2)) return false;\r\n return this.StringifyObject(obj1, ignoreEmptyProps) === this.StringifyObject(obj2, ignoreEmptyProps);\r\n }\r\n\r\n public static ConvertBlobToImage(image: Blob, result: (image) => void) {\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n result(reader.result);\r\n }, false);\r\n\r\n if (image && image.size !== 0) {\r\n reader.readAsDataURL(image);\r\n } else {\r\n result(null);\r\n }\r\n }\r\n\r\n public static ConvertBlobToBytesArray(file: Blob, result: (bytes) => void) {\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n const arrayBuffer = (reader.result as ArrayBuffer);\r\n result(Array.from(new Uint8Array(arrayBuffer)));\r\n }, false);\r\n\r\n if (file && file.size !== 0) {\r\n reader.readAsArrayBuffer(file);\r\n } else {\r\n result(null);\r\n }\r\n }\r\n\r\n public static UniqueBy(array: any[], mapFunc: Function = x => x) {\r\n return new Set(array.map(x => mapFunc(x)));\r\n }\r\n\r\n public static LoadJsonFile(path: string): T {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open('GET', path, false);\r\n if (xmlhttp.overrideMimeType) {\r\n xmlhttp.overrideMimeType('application/json');\r\n }\r\n xmlhttp.send();\r\n const json = xmlhttp.status == 200 && !xmlhttp.responseText.startsWith('<') ? xmlhttp.responseText : null;\r\n return json ? JSON.parse(json) : null;\r\n }\r\n\r\n // current implementation doesn't allow to have routes with numbers inside\r\n //public static getClearURLFromRoute(event) {\r\n // const route = event.urlAfterRedirects.split('?')[0]\r\n // .replace(/[0-9]/g, '')\r\n // .replace(/\\/$/, '')\r\n // .replace('(', '')\r\n // .replace(')', '');\r\n // return route.substring(0, route.indexOf('_') - 1) + route.substring(route.lastIndexOf('_') + 1);\r\n //}\r\n\r\n public static ToCamelCase | readonly any[]>(input: T): T {\r\n return camelcaseKeys(input, { deep: true }) as T;\r\n }\r\n\r\n public static ParseJSONString(jsonString: string): any {\r\n return JSON.parse(jsonString, this.dateParser);\r\n }\r\n\r\n private static _reISO = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*))(?:Z|(\\+|-)([\\d|:]*))?$/;\r\n private static _reMsAjax = /^\\/Date\\((d|-|.*)\\)[\\/|\\\\]$/;\r\n private static dateParser = (key, value) => {\r\n if (typeof value === 'string') {\r\n let a = Utils._reISO.exec(value);\r\n if (a)\r\n return new Date(value);\r\n a = Utils._reMsAjax.exec(value);\r\n if (a) {\r\n const b = a[1].split(/[-+,.]/);\r\n return new Date(b[0] ? +b[0] : 0 - +b[1]);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n public static StringifyObject(obj: any, ignoreEmptyProps: boolean = false) {\r\n const copyObj = { ...obj };\r\n\r\n //remove empty props\r\n if (ignoreEmptyProps) {\r\n for (const propName in copyObj) {\r\n if (copyObj[propName] === null || copyObj[propName] === undefined || copyObj[propName] === '') {\r\n delete copyObj[propName];\r\n }\r\n }\r\n }\r\n return JSON.stringify(copyObj);\r\n }\r\n\r\n public static DeepProxy(obj: any, subject: Subject = null) {\r\n const self = this;\r\n const mapStore = {};\r\n return new Proxy(obj, {\r\n get(target, property) {\r\n const value = target[property];\r\n // if this property has been proxied, just return\r\n if (mapStore[property] === true) return value;\r\n // if it's an non-proxied object, we return its proxy\r\n if (value && Utils.IsObject(value) && !(value instanceof Date) || Utils.IsArray(value)) {\r\n const proxyValue = mapStore[property] || self.DeepProxy(value, subject);\r\n mapStore[property] = proxyValue;\r\n return proxyValue;\r\n }\r\n // else we just take a mark\r\n mapStore[property] = true;\r\n return value;\r\n },\r\n set(target, property, value) {\r\n const newVal = (Utils.IsObject(value) && value && !(value instanceof Date) || Utils.IsArray(value))\r\n ? self.DeepProxy(value, subject)\r\n : value;\r\n target[property] = newVal;\r\n mapStore[property] = true;\r\n subject && subject.next(); \r\n return true;\r\n },\r\n deleteProperty(target, property) {\r\n delete target[property];\r\n delete mapStore[property];\r\n subject && subject.next();\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n public static IsArray(arr: any) {\r\n return Array.isArray(arr);\r\n }\r\n\r\n public static IsObject(obj: any) {\r\n return typeof obj === 'object';\r\n }\r\n\r\n public static IsEmail(email: string, isSupportMultiple: boolean = false) {\r\n if (!email || email.length === 0) {\r\n return false;\r\n }\r\n\r\n const validRegex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n let emails = [];\r\n\r\n if (isSupportMultiple) {\r\n emails = email.split(';');\r\n } else {\r\n emails.push(email);\r\n }\r\n\r\n for (let i = 0; i < emails.length; i++) {\r\n if (!emails[i].match(validRegex)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public static GetIconStyle(extension: string) {\r\n if (extension) {\r\n switch (extension) {\r\n case '.pdf':\r\n return 'mdi mdi-file-pdf-box';\r\n case '.doc':\r\n case '.docx':\r\n return 'mdi mdi-file-word-box';\r\n case '.xls':\r\n case '.xlsx':\r\n return 'mdi mdi-file-excel-box';\r\n case '.rft':\r\n case '.txt':\r\n return 'mdi mdi-text-box';\r\n case '.zip':\r\n case '.rar':\r\n case '.gzip':\r\n return 'mdi mdi-zip-box';\r\n case '.htm':\r\n case '.html':\r\n return 'mdi mdi-language-html5';\r\n case '.jpg':\r\n case '.jpeg':\r\n return 'mdi mdi-jpg-box';\r\n case '.gif':\r\n return 'mdi mdi-gif-box';\r\n case '.bmp':\r\n case '.tiff':\r\n case '.png':\r\n return 'mdi mdi-file-png-box';\r\n case '.xml':\r\n return 'mdi mdi-file-xml-box';\r\n default:\r\n return 'mdi mdi-file';\r\n }\r\n }\r\n\r\n return 'mdi mdi-file';\r\n }\r\n\r\n public static Round(num: number) {\r\n return +(Math.round((num + 'e+2') as any) + 'e-2');\r\n }\r\n\r\n public static SearchTree(element: any, value: any, key = 'key') {\r\n if (!element) {\r\n return null;\r\n }\r\n if (element[key] == value) {\r\n return element;\r\n }\r\n if (element.items != null) {\r\n let result = null;\r\n for (let i = 0; result == null && i < element.items.length; i++) {\r\n result = Utils.SearchTree(element.items[i], value, key);\r\n }\r\n return result;\r\n }\r\n return null;\r\n }\r\n\r\n public static FilterTree = (childNodes: any[], property: string, value: any) => {\r\n const deepCloneArr = Utils.CloneObject(childNodes);\r\n return deepCloneArr.filter((object) => {\r\n\r\n const props = property.split(',');\r\n for (let i = 0; i < props.length; i++) {\r\n const prop = props[i];\r\n if (object[prop] && object[prop].toString().toLowerCase().includes(value?.toLowerCase())) {\r\n return true;\r\n }\r\n }\r\n\r\n if (object.items) {\r\n object.items = Utils.FilterTree(object.items, property, value);\r\n return object.items.length;\r\n }\r\n\r\n return false;\r\n });\r\n };\r\n\r\n public static IsIconExists(path: string): boolean {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('HEAD', path, false);\r\n xhr.send();\r\n\r\n const contentType = xhr.getResponseHeader('Content-Type');\r\n return xhr.readyState === 4 && xhr.status === 200 && (contentType.startsWith('image/png') || contentType.startsWith('image/svg'));\r\n }\r\n}\r\n","import { NgModule, Injector } from '@angular/core';\r\nimport { InjectorComponent } from './injector.component';\r\n\r\n@NgModule({\r\n declarations: [InjectorComponent],\r\n exports: [InjectorComponent]\r\n})\r\nexport class InjectorModule {\r\n constructor(_injector: Injector) {\r\n AppInjector = _injector;\r\n }\r\n}\r\n\r\nexport let AppInjector: Injector;\r\n","import { Component } from \"@angular/core\";\r\n\r\n\r\n@Component({\r\n selector: 'm4u-injector',\r\n template: ''\r\n})\r\nexport class InjectorComponent {\r\n}","export enum EnumDemoMobilePhoneColor\r\n{\r\n White = \"White\",\r\n Black = \"Black\",\r\n AlpineGreen = \"AlpineGreen\",\r\n MidnightGray = \"MidnightGray\"\r\n}","export const environment = {\r\n production: true,\r\n version: '1.0.0'\r\n};\r\n","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\nexport const ColorInOutAnimation = trigger('colorInOut', [\r\n state('In', style( {\r\n 'background-color': '#8bb389'\r\n })),\r\n state('Out', style({\r\n 'background-color': 'transparent'\r\n })),\r\n transition('In => Out', animate('1000ms ease-in-out'))\r\n]);","import { EnumToggle } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseState, SystemOptionEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ColorInOutAnimation } from '@m4u-angular/ui/animations/colorinout.animation';\r\n\r\nclass State extends BaseState {\r\n Sections: any[] = [];\r\n InOut: EnumToggle = EnumToggle.Out;\r\n\r\n CurrentOption: SystemOptionEntity;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-options-list',\r\n templateUrl: './system-options-list.component.html',\r\n styleUrls: ['./system-options-list.component.scss'],\r\n animations: [ColorInOutAnimation]\r\n})\r\nexport class SystemOptionsListComponent extends BaseComponent {\r\n\r\n @Input() set DataSource(value: SystemOptionEntity[]) {\r\n this.State.Sections = [];\r\n\r\n if (!value) { return; }\r\n\r\n this.CreateSections(value);\r\n }\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n\r\n @Output() DeleteOption: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionsListComponent', State);\r\n }\r\n\r\n GetElementID(option: SystemOptionEntity) {\r\n let id = option.OptionName;\r\n\r\n if (option.ModuleName) { id = `${id}_${option.ModuleName}`; }\r\n\r\n return id;\r\n }\r\n\r\n GetColorInOut(option: SystemOptionEntity) {\r\n if (!this.State.CurrentOption) { return EnumToggle.Out; }\r\n\r\n if (this.State.CurrentOption.OptionName === option.OptionName && this.State.CurrentOption.ModuleName === option.ModuleName) {\r\n return this.State.InOut;\r\n }\r\n\r\n return EnumToggle.Out;\r\n }\r\n\r\n ShowOption(option: SystemOptionEntity) {\r\n this.State.CurrentOption = option;\r\n\r\n setTimeout(() => {\r\n const element = document.getElementById(this.GetElementID(option));\r\n\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n const inputs = element.getElementsByTagName('input');\r\n\r\n if (inputs.length > 0 && inputs[0].attributes['type'] !== 'hidden') {\r\n inputs[0].focus();\r\n }\r\n\r\n this.State.InOut = EnumToggle.In;\r\n\r\n setTimeout(() => { this.State.InOut = EnumToggle.Out; });\r\n }\r\n });\r\n\r\n }\r\n\r\n OnDeleteOption(option: SystemOptionEntity) {\r\n this.DeleteOption.emit(option);\r\n }\r\n\r\n private CreateSections(options: SystemOptionEntity[]) {\r\n let section;\r\n\r\n for (let i = 0; i < options.length; i++) {\r\n section = this.State.Sections.find(x => x.name === options[i].SectionInfo);\r\n\r\n if (section == null) {\r\n section = {\r\n name: options[i].SectionInfo,\r\n index: options[i].SectionIndex,\r\n label: this.IsGeneral ? this.RC('lbl' + options[i].SectionInfo) : options[i].SectionInfo,\r\n options: []\r\n };\r\n\r\n this.State.Sections.push(section);\r\n }\r\n\r\n section.options.push(options[i]);\r\n }\r\n\r\n for (let i = 0; i < this.State.Sections.length; i++) {\r\n this.State.Sections[i].options = this.State.Sections[i].options.sort((a, b) => {\r\n if (a.OptionName > b.OptionName) { return 1; }\r\n if (a.OptionName < b.OptionName) { return -1; }\r\n return 0;\r\n });\r\n }\r\n\r\n this.State.Sections = this.State.Sections.sort((a, b) => a.index - b.index);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\";","import { SystemOptionEntity } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, Input } from '@angular/core';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SectionName: string;\r\n OptionName: string;\r\n Value: string;\r\n IsServer = true;\r\n IsClient = true;\r\n ModuleName: string = null;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-add-system-option-dialog',\r\n templateUrl: './add-system-option-dialog.component.html',\r\n styleUrls: ['./add-system-option-dialog.component.scss']\r\n})\r\nexport class AddSystemOptionDialogComponent extends BasePageComponent {\r\n\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n @Input() CustomSections: string[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'AddSystemOptionDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n IsValidModuleName = () => {\r\n if (this.ModulesDataSource.find(x => x.Value === this.State.ModuleName)) { return true; }\r\n\r\n return false;\r\n }\r\n\r\n OnAddOption() {\r\n const option = new SystemOptionEntity();\r\n option.OptionName = this.State.OptionName;\r\n option.ModuleName = this.State.ModuleName;\r\n option.Value = this.State.Value;\r\n option.IsServer = this.State.IsServer;\r\n option.IsClient = this.State.IsClient;\r\n option.SectionInfo = this.State.SectionName;\r\n\r\n this.CloseDialogWithSuccess(option);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseState, SystemOptionEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-option',\r\n templateUrl: './system-option.component.html',\r\n styleUrls: ['./system-option.component.scss']\r\n})\r\nexport class SystemOptionComponent extends BaseComponent {\r\n\r\n @Input() Option: SystemOptionEntity;\r\n @Input() ModulesDataSource: any[];\r\n @Input() IsGeneral = false;\r\n\r\n @Output() DeleteOption: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemOptionComponent', BaseState);\r\n }\r\n\r\n OnDelete() {\r\n this.DeleteOption.emit();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumMessageBoxTypes, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { MessageBoxCustomButton } from '@base/classes/BaseClasses';\r\nimport { PageButtonsComponent } from '@ui/layouts/componentlayouts/page-buttons/pagebuttons.component';\r\n\r\nclass State {\r\n ExtraButtons: MessageBoxCustomButton[];\r\n OKButtonText: string;\r\n OKButtonTabIndex: number;\r\n CancelButtonText: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-messageboxdialog',\r\n templateUrl: './messageboxdialog.component.html',\r\n styleUrls: ['./messageboxdialog.component.scss']\r\n})\r\nexport class MessageBoxDialogComponent extends BasePageComponent\r\n{\r\n @ViewChild('pageButtons') pageButtons: PageButtonsComponent;\r\n\r\n @Input() Title: string;\r\n @Input() Prompt: string;\r\n @Input() Buttons: MessageBoxCustomButton[];\r\n @Input() Width: EnumWindowSizes;\r\n @Input() Height: EnumWindowSizes;\r\n @Input() Type: EnumMessageBoxTypes = EnumMessageBoxTypes.OK;\r\n @Input() IsHideCancel: boolean;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'MessageBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n if (!this.Width) {\r\n this.Width = !this.A.Screen.IsMobile() \r\n ? ((this.A.Screen.IsWideScreen()) ? EnumWindowSizes.WindowXSmall : EnumWindowSizes.WindowMedium)\r\n : EnumWindowSizes.WindowLarge;\r\n }\r\n if (!this.Height) {\r\n this.Height = !this.A.Screen.IsMobile() ? EnumWindowSizes.WindowAutoSize : EnumWindowSizes.WindowXSmall;\r\n }\r\n }\r\n\r\n protected override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetDefaultTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n\r\n //Prepare buttons\r\n override OnInitComponentFinished() {\r\n\r\n //Preset the types\r\n switch (this.Type) {\r\n case EnumMessageBoxTypes.OK:\r\n this.State.OKButtonText = this.RC('genOK');\r\n this.State.CancelButtonText = this.RC('genCancel');\r\n this.State.ExtraButtons = undefined;\r\n break;\r\n case EnumMessageBoxTypes.YesNo:\r\n this.State.OKButtonText = this.RC('genYes');\r\n this.State.CancelButtonText = this.RC('genNo');\r\n this.State.ExtraButtons = undefined;\r\n break;\r\n case EnumMessageBoxTypes.Custom:\r\n const [button] = this.Buttons\r\n this.State.OKButtonText = button.Text;\r\n this.State.OKButtonTabIndex = button.TabIndex;\r\n\r\n if (button.TabIndex) {\r\n setTimeout(() => {\r\n this.pageButtons.okBtnRef.btn.instance.focus()\r\n }, 500)\r\n }\r\n\r\n // this.State.CancelButtonText = this.RC('genCancel');\r\n this.pageButtons.CloseButtonHidden = true;\r\n this.State.ExtraButtons = this.Buttons.slice(1);\r\n // this.Width = EnumWindowSizes.WindowAutoSize;\r\n break;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n {{Prompt}}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState, SystemOptionEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { EnumMessageBoxTypes, EnumSystemOptionDataTypes, EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { AddSystemOptionDialogComponent } from './Components/add-system-option-dialog/add-system-option-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { SystemOptionsListComponent } from './Components/system-options-list/system-options-list.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n GeneralOptions: SystemOptionEntity[];\r\n CustomOptions: SystemOptionEntity[];\r\n\r\n ModulesDataSource: any[];\r\n CurrentTabIndex: number = 0;\r\n Tabs: any[] = [];\r\n CustomSections: string[] = [];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-options',\r\n templateUrl: './system-options.component.html',\r\n styleUrls: ['./system-options.component.scss']\r\n})\r\nexport class SystemOptionsComponent extends BasePageComponent {\r\n private GeneralOptionSettings = {\r\n [EnumSystemOptions.AppNameHE]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n [EnumSystemOptions.AppNameEN]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n [EnumSystemOptions.AppURL]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'General', SectionIndex: 0, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.SessionTimeout]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.SessionExpiry]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.EnableRequestLogging]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.EnableRemoteLogging]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.ShowExpiredTimeoutAlert]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.ShowAlmostExpiredTimeoutAlert]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.IsSupportedCredentialsManagement]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportedUserWelcome]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportedPasswordChange]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedPasswordRecovery]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedLoginByOTP]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportedLoginByPassword]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsAutoCreateCredentials]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: false },\r\n [EnumSystemOptions.AutoCreateCredentialsType]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n [EnumSystemOptions.IsRequireTaxNumberForOTP]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Login', SectionIndex: 2, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.PasswordChangeIntervalDays]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityLen]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityMinChars]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n [EnumSystemOptions.PasswordComplexityMinDigits]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Password', SectionIndex: 3, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.BadLoginAttemptBeforeLock]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n [EnumSystemOptions.BadLoginAttemptsCheckIntervalMinutes]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n [EnumSystemOptions.BadLoginAttemptLockouIntervalMinutes]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'BadLogin', SectionIndex: 4, DefaultIsClient: false },\r\n\r\n [EnumSystemOptions.XFrameOptions]: { DataType: EnumSystemOptionDataTypes.String, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.IsDeployedBehindLoadBalancer]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.IsSupportNotificationMethodEmail]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportNotificationMethodSMS]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n [EnumSystemOptions.IsSupportNotificationMethodWhatsApp]: { DataType: EnumSystemOptionDataTypes.Boolean, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: true },\r\n\r\n [EnumSystemOptions.RetentionPeriodRequests]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodRemoteRequests]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodNotifications]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n [EnumSystemOptions.RetentionPeriodSessions]: { DataType: EnumSystemOptionDataTypes.Number, SectionName: 'Framework', SectionIndex: 1, DefaultIsClient: false },\r\n };\r\n\r\n @ViewChild(AddSystemOptionDialogComponent) addGeneralOptionDialog: AddSystemOptionDialogComponent;\r\n @ViewChild(SystemOptionsListComponent) systemOptionsList: SystemOptionsListComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private appConfigService: AppConfigService) {\r\n super(A, 'SystemOptionsComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.InitTabs();\r\n this.InitModulesDataSource();\r\n this.InitSystemOptions();\r\n }\r\n\r\n OnClickAdd() {\r\n this.addGeneralOptionDialog.ShowDialogShort((option: SystemOptionEntity) => {\r\n\r\n if (this.State.CurrentTabIndex === 0) {\r\n this.AddGeneralOption(option);\r\n } else {\r\n this.AddCustomOption(option);\r\n }\r\n\r\n this.systemOptionsList.ShowOption(option);\r\n });\r\n }\r\n\r\n OnSaveOptions() {\r\n for (let i = 0; i < this.State.GeneralOptions.length; i++) {\r\n if (this.State.GeneralOptions[i].DataType === EnumSystemOptionDataTypes.Boolean) {\r\n this.State.GeneralOptions[i].Value = this.State.GeneralOptions[i].ValueBoolean ? '1' : '0';\r\n } else if (this.State.GeneralOptions[i].DataType === EnumSystemOptionDataTypes.Number) {\r\n this.State.GeneralOptions[i].Value = this.State.GeneralOptions[i].ValueNumber.toString();\r\n }\r\n\r\n if (Utils.IsEmpty(this.State.GeneralOptions[i].Value)) {\r\n this.State.CurrentTabIndex = 0;\r\n setTimeout(() => {\r\n this.systemOptionsList.ShowOption(this.State.GeneralOptions[i]);\r\n this.UI.StopMessage(this.RC('msgOptionEmpty').replace('{0}', this.State.GeneralOptions[i].OptionName));\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.State.CustomOptions.length; i++) {\r\n if (Utils.IsEmpty(this.State.CustomOptions[i].Value)) {\r\n setTimeout(() => {\r\n this.State.CurrentTabIndex = 1;\r\n this.systemOptionsList.ShowOption(this.State.CustomOptions[i]);\r\n this.UI.StopMessage(this.RC('msgOptionEmpty').replace('{0}', this.State.GeneralOptions[i].OptionName));\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n this.Do(this.A.Framework.systemOptionsEndpoint.SaveOptions(this.State.GeneralOptions.concat(this.State.CustomOptions)), true, (response) => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n OnDeleteOption(option: SystemOptionEntity) {\r\n this.messageDialog.Type = EnumMessageBoxTypes.YesNo;\r\n\r\n this.messageDialog.ShowDialogShort(() => {\r\n option.IsDeleted = true;\r\n });\r\n\r\n this.messageDialog.Title = this.RC('titleDelete');\r\n this.messageDialog.Prompt = this.RC('msgRemoveOption').replace('{0}', option.OptionName);\r\n }\r\n\r\n private InitSystemOptions() {\r\n this.Do(this.A.Framework.systemOptionsEndpoint.GetOptions(), false, (response) => {\r\n this.State.GeneralOptions = [];\r\n this.State.CustomOptions = [];\r\n\r\n let settings;\r\n\r\n response.Entities.forEach((x) => {\r\n x.ModuleName = x.ModuleName ? x.ModuleName : null;\r\n\r\n settings = this.GeneralOptionSettings[x.OptionName];\r\n\r\n if (!settings) {\r\n this.State.CustomOptions.push(x);\r\n\r\n if (this.State.CustomSections.indexOf(x.SectionInfo) < 0) {\r\n this.State.CustomSections.push(x.SectionInfo);\r\n }\r\n } else {\r\n x.SectionInfo = settings.SectionName;\r\n x.SectionIndex = settings.SectionIndex;\r\n x.DataType = settings.DataType;\r\n x.DefaultIsClient = settings.DefaultIsClient;\r\n\r\n if (settings.DataType === EnumSystemOptionDataTypes.Number) {\r\n x.ValueNumber = parseInt(x.Value, 10);\r\n } else if (settings.DataType === EnumSystemOptionDataTypes.Boolean) {\r\n x.ValueBoolean = x.Value === '1' ? true : false;\r\n }\r\n\r\n this.State.GeneralOptions.push(x);\r\n }\r\n\r\n });\r\n });\r\n }\r\n\r\n private InitModulesDataSource() {\r\n const modules = this.appConfigService.AppConfig.ModuleName.split(',');\r\n\r\n // Add first empty item\r\n this.State.ModulesDataSource = [];\r\n this.State.ModulesDataSource.push({\r\n Text: 'All',\r\n Value: undefined\r\n });\r\n\r\n for (let i = 0; i < modules.length; i++) {\r\n this.State.ModulesDataSource.push({\r\n Text: modules[i],\r\n Value: modules[i]\r\n });\r\n }\r\n }\r\n\r\n private InitTabs() {\r\n this.State.Tabs = [\r\n {\r\n index: 0,\r\n text: this.RC('lblGeneral')\r\n }, {\r\n index: 1,\r\n text: this.RC('lblCustom')\r\n }\r\n ];\r\n }\r\n\r\n private AddGeneralOption(option: SystemOptionEntity) {\r\n if (this.State.GeneralOptions.find(x => x.OptionName === option.OptionName && x.ModuleName === option.ModuleName)) {\r\n this.UI.UnexpectedMessage(this.RC('msgOptionAlreadyExists'));\r\n } else {\r\n const settings = this.GeneralOptionSettings[option.OptionName];\r\n\r\n option.IsClient = settings.DefaultIsClient;\r\n option.DataType = settings.DataType;\r\n option.SectionInfo = settings.SectionName;\r\n option.SectionIndex = settings.SectionIndex;\r\n\r\n if (option.DataType === EnumSystemOptionDataTypes.Boolean) {\r\n option.ValueBoolean = false;\r\n } else if (option.DataType === EnumSystemOptionDataTypes.Number) {\r\n option.ValueNumber = 0;\r\n }\r\n\r\n const options = Utils.CloneObject(this.State.GeneralOptions);\r\n options.push(option);\r\n\r\n this.State.GeneralOptions = options;\r\n }\r\n }\r\n\r\n private AddCustomOption(option: SystemOptionEntity) {\r\n if (this.State.CustomOptions.find(x => x.OptionName === option.OptionName && x.ModuleName === option.ModuleName)) {\r\n this.UI.UnexpectedMessage(this.RC('msgOptionAlreadyExists'));\r\n } else {\r\n\r\n option.IsClient = true;\r\n option.IsServer = true;\r\n\r\n const options = Utils.CloneObject(this.State.CustomOptions);\r\n options.push(option);\r\n\r\n this.State.CustomOptions = options;\r\n\r\n if (this.State.CustomSections.indexOf(option.SectionInfo) < 0) {\r\n this.State.CustomSections.push(option.SectionInfo);\r\n }\r\n }\r\n }\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { DxTextBoxComponent, DxTooltipComponent } from 'devextreme-angular';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/systemoptions.enum';\r\n\r\nclass State extends BaseState{\r\n IsShowPasswordTooltip: boolean;\r\n PasswordComplexityLen: number;\r\n PasswordComplexityMinChars: number;\r\n PasswordComplexityMinDigits: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-password-tooltip',\r\n templateUrl: './password-tooltip.component.html',\r\n styleUrls: ['./password-tooltip.component.scss']\r\n})\r\nexport class PasswordTooltipComponent extends BaseComponent {\r\n\r\n @Input() TextBox: DxTextBoxComponent;\r\n @ViewChild(DxTooltipComponent) tooltip: DxTooltipComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PasswordTooltipComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.PasswordComplexityLen = +this.SystemOption(EnumSystemOptions.PasswordComplexityLen);\r\n this.State.PasswordComplexityMinChars = +this.SystemOption(EnumSystemOptions.PasswordComplexityMinChars);\r\n this.State.PasswordComplexityMinDigits = +this.SystemOption(EnumSystemOptions.PasswordComplexityMinDigits);\r\n }\r\n\r\n override OnInitComponent(){\r\n if(!this.TextBox) return;\r\n\r\n if (!this.TextBox.buttons) { this.TextBox.buttons = []; }\r\n this.TextBox.buttons.push({\r\n location: 'after',\r\n name: 'showTooltip',\r\n options: {\r\n elementAttr: { class: 'btn-size-small password-view-btn', style: 'margin:0;' },\r\n icon: 'mdi mdi-information-outline', \r\n type: 'normal', \r\n onClick: this.OnShowPasswordTooltip\r\n }\r\n });\r\n }\r\n\r\n OnShowPasswordTooltip = () => {\r\n this.State.IsShowPasswordTooltip = !this.State.IsShowPasswordTooltip;\r\n }\r\n}\r\n","export default \"\\r\\n
{{ ('msgPasswordComplexityRequirement' | RC).replace('{0}', State.PasswordComplexityLen)\\r\\n .replace('{1}', State.PasswordComplexityMinDigits)\\r\\n .replace('{2}', State.PasswordComplexityMinChars)}}
\\r\\n
\\r\\n\";","import { Component } from \"@angular/core\";\r\nimport { BaseEntity, BaseState } from \"../entities/BaseEntities\";\r\nimport { BasePageComponent } from \"./BasePageComponent\";\r\nimport { ServiceBagService } from \"./ServiceBag\";\r\n\r\n@Component({ selector: 'app-null', template:'
NULL COMPONENT
NULL COMPONENT' })\r\nexport class NullComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'NullComponent', BaseEntity, BaseState);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, ElementRef } from '@angular/core';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SlideInOutAnimation } from '../../../animations/slideinout.animation';\r\nimport { EnumCardMode, EnumToggle } from '@core/framework/sysenums.enum';\r\nimport { ContextMenuElement } from '@base/classes/BaseClasses';\r\nimport { BottomSheetContextMenuParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\n\r\nclass CardState {\r\n IsOpened: boolean;\r\n Toggle: EnumToggle = EnumToggle.Out;\r\n}\r\n\r\n\r\n\r\n/**\r\n * If you want use several modes please specify Input field 'modes'\r\n * \r\n * content \r\n * expand content \r\n * edit content \r\n * \r\n */\r\n@Component({\r\n providers: [ServiceBagServices],\r\n selector: 'm4u-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class M4UCardComponent extends BaseComponent {\r\n\r\n @Input() Menu: ContextMenuElement[];\r\n @Input() Class: string;\r\n @Input() Title: string;\r\n @Input() ShowAsUsualOnMobile: boolean;\r\n \r\n\r\n @Output() OnClick: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('expandedCard') expandedCard: ElementRef;\r\n get ExpandedCardHeight() {\r\n return this.expandedCard?.nativeElement?.children[0]?.getBoundingClientRect()?.height; \r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'M4UCardComponent', CardState);\r\n }\r\n\r\n OnCardClick() {\r\n this.OnClick.emit();\r\n }\r\n\r\n // Show one icon if only one visible element\r\n get SingleVisibleElement(): ContextMenuElement {\r\n const visibleMenus = this.Menu.filter(f => f.visible == true || f.visible == undefined);\r\n if (visibleMenus.length === 1) return visibleMenus[0];\r\n return undefined;\r\n }\r\n\r\n ToggleCardState() {\r\n this.State.IsOpened = !this.State.IsOpened;\r\n }\r\n\r\n GetFooterButtonText(): string {\r\n return this.State.IsOpened ? this.RC('lblMinimize') : this.RC('lblShowMore');\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n OnShowContextMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.A.Screen.IsMobile() && !this.ShowAsUsualOnMobile) {\r\n const title = this.Title || this.RC('titleChooseOption');\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = title;\r\n menuParams.Items = this.Menu;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n return;\r\n }\r\n\r\n cm.show(event);\r\n return false;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n 1 && !SingleVisibleElement\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, HostListener, Output, EventEmitter, Input } from '@angular/core';\r\n\r\n@Component({\r\n\r\n selector: 'm4u-link',\r\n templateUrl: './link.component.html',\r\n styleUrls: ['./link.component.scss'],\r\n})\r\nexport class M4ULinkComponent {\r\n @Input() href: string;\r\n @Input() Type: 'success' | 'danger' | 'normal' | 'default' = 'default';\r\n @Input() Disabled: boolean;\r\n @Input() Icon: string;\r\n @Input() Class: string;\r\n @Output() onClick = new EventEmitter();\r\n\r\n @HostListener(\"click\", [\"$event\"])\r\n public OnClickHandler(event: any) {\r\n event.stopPropagation();\r\n if (this.Disabled) { return };\r\n this.onClick.emit();\r\n }\r\n\r\n GetClass() {\r\n return (this.Class || '') + (this.Type ? (' m4u-link-' + this.Type) : '');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\";","import { trigger, state, style, transition, animate } from '@angular/animations';\r\n\r\nexport const SlideInOutAnimation = trigger('slideInOut', [\r\n state('In', style({\r\n overflow: 'hidden',\r\n height: '*',\r\n })),\r\n state('Out', style({\r\n opacity: '0',\r\n overflow: 'hidden',\r\n height: '0px',\r\n })),\r\n transition('In => Out', animate('300ms ease-in-out')),\r\n transition('Out => In', animate('300ms ease-in-out'))\r\n])\r\n\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { BaseComponent } from \"@base/component/BaseComponent\";\r\nimport { BaseState } from \"@base/entities/BaseEntities\";\r\nimport { ServiceBagService } from \"@base/component/ServiceBag\";\r\nimport { SlideInOutAnimation } from \"../../../animations/slideinout.animation\";\r\nimport { Utils } from \"@core/helpers/Utils\";\r\nimport { DataGroupInfoHeader } from \"@base/classes/BaseClasses\";\r\n\r\n@Component({\r\n selector: 'm4u-collapsiblegroup',\r\n templateUrl: './collapsiblegroup.component.html',\r\n styleUrls: ['./collapsiblegroup.component.scss'],\r\n animations: [SlideInOutAnimation]\r\n})\r\nexport class CollapsibleGroupComponent extends BaseComponent\r\n{\r\n @Input() Group: DataGroupInfoHeader;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"CollapsibleGroupComponent\", BaseState);\r\n }\r\n\r\n get GroupName(): string {\r\n return Utils.IsEmpty(this.Group.Name) ? this.RC('lblNotAssigned') : this.Group.Name;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{ GroupName }} ({{ Group.TotalRows }})\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { EnumGridModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-gridbuttonadd',\r\n templateUrl: './gridbuttonadd.component.html',\r\n styleUrls: ['./gridbuttonadd.component.scss']\r\n})\r\nexport class GridButtonAddComponent {\r\n @Input() Text: string;\r\n @Input() Type: string;\r\n\r\n @Input() WindowPath: string;\r\n @Input() WindowParams: any;\r\n \r\n constructor(private navigator: NavigatorService) { }\r\n\r\n @Input() public grid: DxDataGridComponent;\r\n get gridAny(): any { return this.grid; }\r\n\r\n get IsGridEditable() {\r\n return this.gridAny && this.gridAny.G && this.gridAny.G.Mode === EnumGridModes.Editable;\r\n }\r\n\r\n get IsDisabled() {\r\n return this.IsGridEditable && !this.gridAny.G.IsNewRowCreatable();\r\n }\r\n\r\n OnClick() {\r\n this.IsGridEditable\r\n ? this.gridAny.G.CreateNewRow()\r\n : this.navigator.Navigate([this.WindowPath], this.WindowParams);\r\n }\r\n}","export default \"\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-gridbuttonremove',\r\n templateUrl: './gridbuttonremove.component.html',\r\n styleUrls: ['./gridbuttonremove.component.scss']\r\n})\r\nexport class GridButtonRemoveComponent \r\n{\r\n constructor() { }\r\n\r\n @Input() public grid: DxDataGridComponent;\r\n get gridAny(): any { return this.grid; }\r\n @Input() public item: any;\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { DxButtonComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { ButtonComponent } from '../../../components/button/button.component';\r\n\r\n@Component({\r\n selector: 'm4u-pagebuttons',\r\n templateUrl: './pagebuttons.component.html',\r\n styleUrls: ['./pagebuttons.component.scss']\r\n})\r\nexport class PageButtonsComponent {\r\n constructor(private resources: ResourcesService) { }\r\n\r\n @Input() Page: BasePageComponent | BasePageCRUDComponent>;\r\n @Input() OKText: string = this.resources.RC('genOK');\r\n @Input() OKTabIndex: number | undefined;\r\n @Input() CancelText: string = this.resources.RC('genCancel');\r\n @Input() ValidationGroup: DxValidationGroupComponent;\r\n @Input() IsAllow = true;\r\n @Input() IsCloseOnly: boolean;\r\n @Input() CustomCloseAction: boolean;\r\n @Input() Disabled: boolean;\r\n @Input() CloseButtonHidden: boolean;\r\n @Input() AutoCloseBottomSheet = true;\r\n @Output() OnOK = new EventEmitter();\r\n @Output() OnCancel = new EventEmitter();\r\n @Output() OnOkValidationFailed = new EventEmitter();\r\n\r\n @ViewChild('okBtn') okBtnRef: ButtonComponent;\r\n\r\n //Handle cancel press\r\n OnCancelButton() {\r\n if (!this.CustomCloseAction) {\r\n this.Page.ClosePage();\r\n return;\r\n }\r\n \r\n this.OnCancel.emit();\r\n this.CloseBottomSheet();\r\n }\r\n\r\n get OkButtonDisabled(): boolean {\r\n if (this.Disabled) {\r\n return true;\r\n }\r\n //disable ok button for crud pages if no changes\r\n if (this.Page instanceof BasePageCRUDComponent && !(this.Page as any).OnIsDirtyDisabled()) {\r\n return !(this.Page as any).IsDirty;\r\n }\r\n return false;\r\n }\r\n\r\n get IsSaving(): boolean {\r\n if (this.Page instanceof BasePageCRUDComponent) {\r\n return this.Page.IsSaving;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n //Handle OK press\r\n OnOKButton() {\r\n //Validate, if validation group was specified\r\n if (this.ValidationGroup != undefined) {\r\n this.Page.ValidateValidationGroup(this.ValidationGroup).then(isValid => {\r\n if (!isValid) {\r\n this.OnOkValidationFailed.emit();\r\n return;\r\n }\r\n\r\n this.OnOK.emit();\r\n this.CloseBottomSheet();\r\n });\r\n } else {\r\n //Emit event\r\n this.OnOK.emit();\r\n this.CloseBottomSheet();\r\n }\r\n }\r\n\r\n IsCloseButtonHidden() {\r\n return (this.IsPageShowAsFullScreen() || this.CloseButtonHidden);\r\n }\r\n\r\n IsPageShowAsFullScreen() {\r\n return this.Page && this.Page.IsShowAsFullScreen && this.Page.IsShowAsFullScreen();\r\n }\r\n\r\n CloseBottomSheet() {\r\n if (this.Page.DisplayMode === EnumPageDisplayModes.BottomSheet && this.AutoCloseBottomSheet) this.Page.ClosePage();\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumFileBoxReturnDataTypes } from '@core/framework/sysenums.enum';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-fileboxdialog',\r\n templateUrl: './fileboxdialog.component.html',\r\n styleUrls: ['./fileboxdialog.component.scss']\r\n})\r\nexport class FileBoxDialogComponent extends BaseComponent\r\n{\r\n @ViewChild('fileLoader') fileLoader: ElementRef;\r\n @Input() ReturnDataType: EnumFileBoxReturnDataTypes;\r\n @Input() IsAllowMultiple: boolean;\r\n @Input() AllowedFileTypes: string;\r\n\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'FileBoxDialogComponent', BaseState);\r\n }\r\n\r\n private handler: (e: any) => void;\r\n public ShowDialog(DialogCompletedHandler: (e: any) => void)\r\n {\r\n //Show the dialog\r\n this.handler = DialogCompletedHandler;\r\n this.fileLoader.nativeElement.click();\r\n }\r\n\r\n OnFileSelected()\r\n {\r\n //Get list of files selected\r\n var list: FileList = this.fileLoader.nativeElement.files;\r\n if (list == undefined || list.length == 0) return;\r\n\r\n \r\n\r\n\r\n //Return raw FileList\r\n if (this.ReturnDataType == EnumFileBoxReturnDataTypes.FileList)\r\n {\r\n this.handler(list);\r\n this.ResetInput();\r\n return;\r\n }\r\n\r\n\r\n //Read the file\r\n var reader = new FileReader();\r\n reader.onloadend = (e) =>\r\n {\r\n //Get data\r\n var data: string = (e.srcElement as any).result;\r\n\r\n //Reset value on input, so that next time change event is triggered again\r\n this.fileLoader.nativeElement.value = null;\r\n\r\n //Execute callback\r\n switch (this.ReturnDataType)\r\n {\r\n case EnumFileBoxReturnDataTypes.FileDataAsString:\r\n //Return as plain data\r\n this.handler(data);\r\n\r\n case EnumFileBoxReturnDataTypes.FileDataAsLinesArray:\r\n //Return as lines array\r\n var arrLines = data.split(/\\r?\\n/);\r\n arrLines = arrLines.filter(x => !Utils.IsEmpty(x));\r\n this.handler(arrLines);\r\n return;\r\n\r\n case EnumFileBoxReturnDataTypes.FileDataAsJSONArray:\r\n //Return as JSON\r\n //Return as lines array\r\n var arrObjects = Utils.ConvertCSVToJSONArray(data, \",\");\r\n this.handler(arrObjects);\r\n return;\r\n\r\n }\r\n }\r\n reader.readAsText(list[0]);\r\n this.ResetInput();\r\n }\r\n\r\n private ResetInput() {\r\n this.fileLoader.nativeElement.value = \"\";\r\n }\r\n\r\n\r\n}\r\n","export default \" \";","import { Component, Input } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumInputBoxTypes } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\n\r\nclass State {\r\n Value: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-inputboxdialog',\r\n templateUrl: './inputboxdialog.component.html',\r\n styleUrls: ['./inputboxdialog.component.scss']\r\n})\r\nexport class InputBoxDialogComponent extends BasePageComponent {\r\n @Input() FieldLabel = '';\r\n @Input() Title: string = this.GetDefaultTitle();\r\n @Input() Prompt: string;\r\n @Input() Type: EnumInputBoxTypes = EnumInputBoxTypes.Text;\r\n\r\n @Input() set Value(value: any) {\r\n setTimeout(() => this.State.Value = value);\r\n }\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'InputBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetDefaultTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild, ElementRef } from '@angular/core';\r\nimport { BaseEntity, Media } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { DxTileViewComponent, DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nclass State {\r\n VideoWidth: number;\r\n VideoHeight: number;\r\n PreviewWidth: number;\r\n PreviewHeight: number;\r\n VideoAspectRatio: number;\r\n\r\n IsPreview: boolean;\r\n PreviewMediaItem: Media;\r\n\r\n VideoStream: MediaStream;\r\n\r\n IsVideoMode: boolean = false;\r\n Recording: Recording = new Recording;\r\n IsOpened = false;\r\n IsCameraStarted = false;\r\n}\r\n\r\nclass Recording {\r\n IsVideoRecording: boolean = false;\r\n MediaRecorder: MediaRecorder = null;\r\n RecordTimeSeconds: number = 0;\r\n RecordTimeString: string;\r\n RecordInterval: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-photoboxdialog',\r\n templateUrl: './photoboxdialog.component.html',\r\n styleUrls: ['./photoboxdialog.component.scss']\r\n})\r\nexport class PhotoBoxDialogComponent extends BasePageComponent\r\n{\r\n private _mediaItems: Media[] = [];\r\n private _imageMimeType: string = \"image/jpeg\";\r\n\r\n @Input() set MediaItems(value) {\r\n this._mediaItems = value;\r\n this._mediaItems?.forEach(item => {\r\n this.SetPreview(item);\r\n })\r\n }\r\n\r\n get MediaItems(): Media[] {\r\n return this._mediaItems;\r\n }\r\n\r\n @Input() Title: string;\r\n @Input() IsAutoSavePhotoAfterTake = false;\r\n @Input() IsAllowVideo: boolean = false;\r\n @Input() MinCount: number;\r\n @Input() MaxCount: number;\r\n\r\n @ViewChild(\"video\") public video: ElementRef;\r\n @ViewChild(\"canvas\") public canvas: ElementRef;\r\n @ViewChild(\"preview\") public preview: ElementRef;\r\n @ViewChild(\"validationGroup\") validationGroup: DxValidationGroupComponent;\r\n @ViewChild(DxTileViewComponent) public thumbs: DxTileViewComponent;\r\n @Input() ExtraFields: TemplateRef;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer) {\r\n super(A, 'PhotoBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //If custom title was set, return it\r\n override OnInitTitle(): string {\r\n if (this.Title == undefined) return undefined;\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n setTimeout(() => {\r\n this.StartVideo();\r\n this.State.IsOpened = true;\r\n }, 500);\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this.State.IsOpened = false;\r\n this.State.IsCameraStarted = false;\r\n this.StopVideo();\r\n }\r\n\r\n //Stop video and cleanup\r\n StopVideo() {\r\n if (this.State.VideoStream != undefined) {\r\n this.State.PreviewMediaItem = undefined;\r\n this.State.IsPreview = false;\r\n this.video.nativeElement.pause();\r\n this.video.nativeElement.srcObject = undefined;\r\n this.State.VideoStream.getVideoTracks().forEach(x => x.stop());\r\n this.State.VideoStream = undefined;\r\n this.State.IsCameraStarted = false;\r\n\r\n }\r\n }\r\n\r\n //Plug in video\r\n StartVideo() {\r\n //Set size\r\n this.State.VideoWidth = this.GetClientWidth() * 3;\r\n this.State.VideoHeight = (this.GetClientHeight() - 178) * 3;\r\n this.State.VideoAspectRatio = this.State.VideoWidth / this.State.VideoHeight;\r\n this.State.PreviewWidth = this.GetClientWidth();\r\n this.State.PreviewHeight = (this.GetClientHeight() - 178);\r\n\r\n\r\n //Init\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n navigator.mediaDevices.getUserMedia(\r\n {\r\n video:\r\n {\r\n facingMode: 'environment',\r\n width: { ideal: this.State.VideoWidth },\r\n height: { ideal: this.State.VideoHeight },\r\n aspectRatio: { ideal: this.State.VideoAspectRatio },\r\n },\r\n audio: false\r\n\r\n }).then(stream => {\r\n this.State.IsCameraStarted = true;\r\n this.State.VideoStream = stream;\r\n this.State.VideoAspectRatio = stream.getVideoTracks()[0].getSettings().aspectRatio;\r\n this.State.VideoWidth = stream.getVideoTracks()[0].getSettings().width;\r\n this.State.VideoHeight = stream.getVideoTracks()[0].getSettings().height;\r\n this.video.nativeElement.srcObject = stream;\r\n this.video.nativeElement.play();\r\n }, error => {\r\n console.error(error);\r\n this.UI.StopMessage(this.RC('msgCouldNotStartVideoError'));\r\n });\r\n }\r\n }\r\n\r\n\r\n //Build new structure, and add to array\r\n //Give identifiers starting with -1 and going down\r\n OnTakePhoto() {\r\n let photo = this.TakePhoto();\r\n this.MediaItems.push(photo);\r\n if (this.IsAutoSavePhotoAfterTake) { this.OnSavePhotos(); }\r\n }\r\n\r\n OnStartVideoRecording() {\r\n let photo = this.TakePhoto();\r\n\r\n this.State.Recording.RecordInterval = setInterval(() => {\r\n this.State.Recording.RecordTimeSeconds++;\r\n this.State.Recording.RecordTimeString = new Date(this.State.Recording.RecordTimeSeconds * 1000).toISOString().slice(14, 19);\r\n }, 1000);\r\n\r\n this.StartRecording().then((recordedChunks) => {\r\n let recordedBlob = this.GetVideoBlob(recordedChunks);\r\n photo.VideoDataUrl = this.GetSafeUrlFromBlob(recordedBlob);\r\n Utils.ConvertBlobToBytesArray(recordedBlob, (array) => {\r\n photo.VideoBytes = array;\r\n });\r\n this.MediaItems.push(photo);\r\n }).catch((error) => {\r\n console.error(error);\r\n this.UI.StopMessage(`${error?.error} ${error?.message}`);\r\n });\r\n }\r\n\r\n OnStopVideoRecording() {\r\n if (this.State.Recording.MediaRecorder?.state === \"recording\") {\r\n this.State.Recording.MediaRecorder.stop();\r\n this.State.Recording.IsVideoRecording = false;\r\n }\r\n\r\n if (this.State.Recording.RecordInterval) {\r\n clearInterval(this.State.Recording.RecordInterval);\r\n this.State.Recording.RecordInterval = null;\r\n this.State.Recording.RecordTimeString = null;\r\n this.State.Recording.RecordTimeSeconds = 0;\r\n }\r\n }\r\n\r\n OnResizeWindow() {\r\n if (!this.IsDialogVisible) return;\r\n this.StartVideo();\r\n }\r\n\r\n OnOrientationChanged() {\r\n if (!this.IsDialogVisible) return;\r\n this.StartVideo();\r\n }\r\n\r\n\r\n //Show photo in the preview box\r\n OnShowMediaItem(item: Media) {\r\n this.State.PreviewMediaItem = item;\r\n this.State.IsPreview = true;\r\n this.DetectChanges();\r\n this.preview.nativeElement.src = item.ImageBase64;\r\n }\r\n\r\n //Switch back to video\r\n OnClosePreview() {\r\n this.State.PreviewMediaItem = undefined;\r\n this.State.IsPreview = false;\r\n this.StartVideo();\r\n }\r\n\r\n\r\n //Delete from photo list\r\n OnRemovePhoto() {\r\n this.MediaItems = this.MediaItems.filter(x => x.EntryID != this.State.PreviewMediaItem.EntryID);\r\n this.thumbs.instance.repaint()\r\n this.OnClosePreview();\r\n }\r\n\r\n //Finish - emit the PhotoChanged event to update parent state, and close\r\n OnSavePhotos() {\r\n this.ValidateValidationGroup(this.validationGroup).then(isValid => {\r\n if (!isValid) return;\r\n\r\n if (this.MinCount && this.MediaItems.length < this.MinCount) {\r\n this.UI.StopMessage(this.RC('msgPhotoMinCountError', this.MinCount));\r\n return;\r\n }\r\n\r\n if (this.MaxCount && this.MediaItems.length > this.MaxCount) {\r\n this.UI.StopMessage(this.RC('msgPhotoMaxCountError', this.MaxCount));\r\n return;\r\n }\r\n\r\n this.StopVideo();\r\n this.CloseDialogWithSuccess(this.MediaItems);\r\n this.ClosePage();\r\n });\r\n }\r\n\r\n OnSetVideoMode() {\r\n this.State.IsVideoMode = true;\r\n }\r\n\r\n OnSetPhotoMode() {\r\n this.State.IsVideoMode = false;\r\n }\r\n\r\n OnFileSelected(e) {\r\n const files = e?.target?.files;\r\n if (!files || files?.length == 0) return;\r\n\r\n const file = files[0];\r\n const isImage = file.type.startsWith(\"image\");\r\n const fileReader = new FileReader();\r\n\r\n if (isImage) {\r\n fileReader.addEventListener(\"load\", (event) => {\r\n const photo = this.AddPhoto(event.target.result);\r\n this.MediaItems.push(photo);\r\n });\r\n\r\n fileReader.readAsDataURL(files[0]);\r\n }\r\n else {\r\n fileReader.addEventListener('load', async () => {\r\n const arrayBuffer = (fileReader.result as ArrayBuffer);\r\n const result = Array.from(new Uint8Array(arrayBuffer));\r\n const blob = new Blob([new Uint8Array(result)], { type: file.type });\r\n\r\n const media = new Media;\r\n media.EntryID = this.GetNewMediaItemEntryID();\r\n const imagePreviewBlob = await this.GetVideoCover(blob);\r\n\r\n Utils.ConvertBlobToBytesArray(imagePreviewBlob, (array) => {\r\n media.ImageBytes = array;\r\n this.SetPreview(media);\r\n });\r\n\r\n media.VideoBytes = result;\r\n this.SetPreview(media);\r\n this.MediaItems.push(media);\r\n }, false);\r\n\r\n fileReader.readAsArrayBuffer(file);\r\n }\r\n\r\n const imageGallery = document.getElementById('image-gallery') as any;\r\n imageGallery && (imageGallery.value = '');\r\n }\r\n\r\n private GetNewMediaItemEntryID() {\r\n return this.MediaItems.reduce((min, p) => p.EntryID < min ? p.EntryID : min, 0) - 1;\r\n }\r\n\r\n private TakePhoto(): Media {\r\n this.canvas.nativeElement.getContext(\"2d\").drawImage(this.video.nativeElement, 0, 0, this.State.VideoWidth, this.State.VideoHeight);\r\n return this.AddPhoto(this.canvas.nativeElement.toDataURL(this._imageMimeType, 1));\r\n }\r\n\r\n private AddPhoto(base64) {\r\n const photo = new Media;\r\n photo.ImageBase64 = base64;\r\n photo.EntryID = this.GetNewMediaItemEntryID();\r\n photo.ImageBytes = Utils.ConvertToBytesArray(photo.ImageBase64);\r\n return photo;\r\n }\r\n\r\n private StartRecording() {\r\n this.State.Recording.MediaRecorder = new MediaRecorder(this.State.VideoStream);\r\n let data = [];\r\n\r\n this.State.Recording.MediaRecorder.ondataavailable = (event) => data.push(event.data);\r\n this.State.Recording.MediaRecorder.start();\r\n this.State.Recording.IsVideoRecording = true;\r\n\r\n let stopped = new Promise((resolve, reject) => {\r\n this.State.Recording.MediaRecorder.onstop = resolve;\r\n this.State.Recording.MediaRecorder.onerror = (event) => reject(event);\r\n });\r\n\r\n return stopped.then(() => data);\r\n }\r\n\r\n private SetPreview(item: Media) {\r\n if (item.VideoBytes?.length > 0 && !item.VideoDataUrl) item.VideoDataUrl = this.GetSafeUrlFromBlob(this.GetVideoBlob([new Uint8Array(item.VideoBytes)]));\r\n if (item.ImageBytes?.length > 0 && !item.ImageBase64) item.ImageBase64 = Utils.GetImageSource(item.ImageBytes, this._imageMimeType);\r\n }\r\n\r\n private GetVideoBlob(data): Blob {\r\n return new Blob(data, { type: \"video/webm\" });\r\n }\r\n\r\n private GetSafeUrlFromBlob(data: Blob) {\r\n return this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(data));\r\n }\r\n\r\n private GetVideoCover(data: Blob, seekTo = 0.0) {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // load the file to a video player\r\n const videoPlayer = document.createElement('video');\r\n videoPlayer.setAttribute('src', URL.createObjectURL(data));\r\n videoPlayer.load();\r\n videoPlayer.addEventListener('error', (ex) => {\r\n reject(ex);\r\n });\r\n // load metadata of the video to get video duration and dimensions\r\n videoPlayer.addEventListener('loadedmetadata', () => {\r\n // seek to user defined timestamp (in seconds) if possible\r\n if (videoPlayer.duration < seekTo) {\r\n reject(\"video is too short.\");\r\n return;\r\n }\r\n // delay seeking or else 'seeked' event won't fire on Safari\r\n setTimeout(() => {\r\n videoPlayer.currentTime = seekTo;\r\n }, 200);\r\n // extract video thumbnail once seeking is complete\r\n videoPlayer.addEventListener('seeked', () => {\r\n // define a canvas to have the same dimension as the video\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = videoPlayer.videoWidth;\r\n canvas.height = videoPlayer.videoHeight;\r\n // draw the video frame to canvas\r\n const ctx = canvas.getContext(\"2d\");\r\n ctx.drawImage(videoPlayer, 0, 0, canvas.width, canvas.height);\r\n // return the canvas image as a blob\r\n ctx.canvas.toBlob(\r\n blob => {\r\n resolve(blob);\r\n },\r\n \"image/jpeg\",\r\n 0.75 /* quality */\r\n );\r\n });\r\n });\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n }\r\n });\r\n }\r\n\r\n private GetClientWidth() {\r\n return this.GetClientBodyElementRect()?.width || 0;\r\n }\r\n\r\n private GetClientHeight() {\r\n return this.GetClientBodyElementRect()?.height || 0;\r\n }\r\n\r\n private GetClientBodyElementRect() {\r\n const elements = document.querySelectorAll('.page-body');\r\n if (!elements || !elements.length) return null;\r\n return elements[elements.length - 1]?.getBoundingClientRect();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.VideoWidth}}x{{State.VideoHeight}}\\r\\n
\\r\\n
{{ State.Recording.RecordTimeString }}
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'lblCameraModePhoto' | RC:THIS }}
\\r\\n
{{ 'lblCameraModeVideo' | RC:THIS }}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input, ViewChild, EventEmitter, Output } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumLanguages, EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { PdfViewerComponent } from '@m4u-angular/ui/components/pdf-viewer/pdf-viewer.component';\r\n\r\nclass State {\r\n PDFData: any\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-printboxdialog',\r\n templateUrl: './printboxdialog.component.html',\r\n styleUrls: ['./printboxdialog.component.scss']\r\n})\r\nexport class PrintBoxDialogComponent extends BasePageComponent\r\n{\r\n @ViewChild('pdfViewer') pdfViewer: PdfViewerComponent;\r\n\r\n //Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n @Input() set PDFData(value: string | Blob) {\r\n if (typeof value === 'string') value = Utils.ConvertToBlob(value, 'application/pdf');\r\n this.State.PDFData = value;\r\n }\r\n\r\n @Input() FileName: string;\r\n @Input() Title: string;\r\n @Output() OnCustomPrint: EventEmitter = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PrintBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n //If custom title was set, return it\r\n override OnInitTitle(): string {\r\n if (this.Title == undefined) return undefined;\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n protected OnGetToolbarSettings() {\r\n return {\r\n IsAllowPrint: true,\r\n OnPrintButtonClick: (e) => this.DoPrint()\r\n } as ToolbarSettings;\r\n }\r\n\r\n DoPrint() {\r\n if (this.OnCustomPrint.observers.length > 0) {\r\n //Emit custom event\r\n this.OnCustomPrint.emit();\r\n return;\r\n }\r\n //Send to print\r\n this.pdfViewer.instance.iframe.nativeElement.contentWindow.print();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { GenericListEntity, BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\n\r\nclass State {\r\n Value: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-selectboxdialog',\r\n templateUrl: './selectboxdialog.component.html',\r\n styleUrls: ['./selectboxdialog.component.scss']\r\n})\r\nexport class SelectBoxDialogComponent extends BasePageComponent {\r\n @Input() Values: GenericListEntity[];\r\n @Input() FieldLabel: string;\r\n @Input() Title: string = this.GetTitle();\r\n @Input() Prompt: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SelectBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.Title;\r\n }\r\n\r\n override GetTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.Messages', moduleName);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { SignaturePad } from 'angular2-signaturepad';\r\n\r\nclass State {\r\n SignatureData: string;\r\n IsDrawing = false;\r\n Options: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-signbox',\r\n templateUrl: './signbox.component.html',\r\n styleUrls: ['./signbox.component.scss']\r\n})\r\nexport class SignBoxComponent extends BaseComponent {\r\n\r\n @ViewChild('pad') pad: SignaturePad;\r\n @Input() SignatureReadOnly: boolean;\r\n @Input() MaxSignatureHeight: number = 0;\r\n @Input() Options: any;\r\n\r\n private _clientHeight: number;\r\n @Input() set ClientHeight(value: number) {\r\n if (!value) return;\r\n this._clientHeight = value;\r\n this.ResizePad();\r\n }\r\n\r\n get ClientHeight() {\r\n return this._clientHeight;\r\n }\r\n\r\n private _clientWidth: number;\r\n @Input() set ClientWidth(value: number) {\r\n if (!value) return;\r\n this._clientWidth = value;\r\n this.ResizePad();\r\n }\r\n\r\n get ClientWidth() {\r\n return this._clientWidth;\r\n }\r\n\r\n public set SignatureData(value: string) {\r\n this.State.SignatureData = value;\r\n setTimeout(() => this.LoadSignature(), 100);\r\n }\r\n public get SignatureData(): string {\r\n return this.State.SignatureData;\r\n }\r\n\r\n private readonly _areaAroundSize = 180;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SignBoxComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n window.addEventListener('touchmove', this.OnTouchMove, { passive: false });\r\n window.addEventListener('touchstart', this.OnTouchMove, { passive: false });\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.State.Options = this.Options ?? {};\r\n if (!this.State.Options.penColor) this.State.Options.penColor = '#0177F9';\r\n if (!this.State.Options.backgroundColor) this.State.Options.backgroundColor = '#ffffff';\r\n if (!this.State.Options.maxWidth) this.State.Options.maxWidth = 2;\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n window.removeEventListener('touchmove', this.OnTouchMove);\r\n window.removeEventListener('touchstart', this.OnTouchMove);\r\n }\r\n\r\n OnTouchMove = (e) => {\r\n if (!this.State.IsDrawing) return;\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n OnBeginDrawing() {\r\n this.State.IsDrawing = true;\r\n }\r\n\r\n OnEndDrawing() {\r\n this.State.IsDrawing = false;\r\n }\r\n\r\n OnResizeWindow() {\r\n this.ResizePad();\r\n }\r\n\r\n OnOrientationChanged() {\r\n this.ResizePad();\r\n }\r\n\r\n ClearSignature() {\r\n if (!this.SignatureReadOnly) this.pad.clear();\r\n }\r\n\r\n IsEmpty = () => this.pad.isEmpty();\r\n\r\n Save() {\r\n this.State.SignatureData = this.pad.toDataURL();\r\n }\r\n\r\n ResizePad() {\r\n const width = this.ClientWidth;\r\n const height = this.ClientHeight;\r\n\r\n if (width) {\r\n this.pad.set('canvasWidth', width - 5);\r\n }\r\n\r\n if (height) {\r\n if (this.MaxSignatureHeight != 0 && height - this._areaAroundSize > this.MaxSignatureHeight) {\r\n this.pad.set('canvasHeight', this.MaxSignatureHeight);\r\n }\r\n else {\r\n this.pad.set('canvasHeight', height - this._areaAroundSize);\r\n }\r\n }\r\n \r\n this.LoadSignature()\r\n }\r\n\r\n private LoadSignature() {\r\n this.pad.clear();\r\n if (this.SignatureData != undefined) this.pad.fromDataURL(this.SignatureData, { ratio: 1 });\r\n if (this.SignatureReadOnly) this.pad.off();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BaseEntity } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\n\r\nclass State {\r\n OkText: string;\r\n ClientWidth: number;\r\n ClientHeight: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-signboxdialog',\r\n templateUrl: './signboxdialog.component.html',\r\n styleUrls: ['./signboxdialog.component.scss']\r\n})\r\nexport class SignBoxDialogComponent extends BasePageComponent {\r\n @ViewChild(SignBoxComponent) signBox: SignBoxComponent;\r\n @Input() Title: string;\r\n @Input() OkButtonText: string;\r\n @Input() MaxSignatureHeight = 0;\r\n @Input() SignatureReadOnly: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SignBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n // Main property to store the data. Since additional operation needs to take place, use this method instead of state directly\r\n public set SignatureData(value: string) {\r\n this.signBox.SignatureData = value;\r\n }\r\n\r\n public get SignatureData(): string {\r\n return this.signBox.SignatureData;\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n if (this.OkButtonText !== undefined) {\r\n this.State.OkText = this.OkButtonText;\r\n } else {\r\n this.State.OkText = this.RC('genSign');\r\n }\r\n this.SetClientSizes();\r\n }\r\n\r\n OnResetPad() {\r\n this.signBox.ClearSignature();\r\n }\r\n\r\n // Save\r\n OnSaveSignature() {\r\n if (!this.SignatureReadOnly) {\r\n // Make sure signature exists\r\n if (this.signBox.IsEmpty()) {\r\n this.UI.StopMessage(this.RC('msgSignatureRequired'), '#pad');\r\n return;\r\n }\r\n\r\n // Save and close\r\n this.signBox.Save();\r\n this.CloseDialogWithSuccess(this.SignatureData);\r\n } else {\r\n this.CloseDialogWithCancel();\r\n }\r\n }\r\n\r\n private GetCanvasWidth(): number {\r\n return document.querySelector('.signbox-container')?.getBoundingClientRect()?.width - 3 || 0;\r\n }\r\n\r\n private SetClientSizes() {\r\n setTimeout(() => {\r\n this.State.ClientWidth = this.GetCanvasWidth();\r\n this.State.ClientHeight = window.innerHeight / 2;\r\n }, 400);\r\n // wait for animation, TODO: figure out how to subscribe to complete animation template\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
{{'msgSignHere' | RC }}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\nclass State extends BaseState {\r\n ImageSource: string | SafeUrl;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-imageboxdialog',\r\n templateUrl: './imageboxdialog.component.html',\r\n styleUrls: ['./imageboxdialog.component.scss']\r\n})\r\nexport class ImageBoxDialogComponent extends BasePageComponent\r\n{\r\n @Input() set ImageSource(value: string | Blob) {\r\n this.State.ImageSource = typeof value === 'string' ? value : this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(value));\r\n }\r\n @Input() Title: string;\r\n @Input() ShowLargeWindow: boolean = false;\r\n \r\n WindowHeight: EnumWindowSizes = EnumWindowSizes.WindowLarge;\r\n WindowWidth: EnumWindowSizes = EnumWindowSizes.WindowMedium;\r\n\r\n constructor(A: ServiceBagService, private sanitizer: DomSanitizer)\r\n {\r\n super(A, 'ImageBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n // If custom title was set, return it\r\n override OnInitTitle(): string\r\n {\r\n if (this.Title == undefined) return this.GetDefaultTitle();\r\n return this.GetDefaultTitle() + ' - ' + this.Title;\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.ShowLargeWindow) {\r\n this.WindowHeight = this.WindowWidth = EnumWindowSizes.WindowXLarge;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@core/framework/sysenums.enum';\r\nimport { Html5Qrcode, Html5QrcodeScanner } from \"html5-qrcode\";\r\nimport { Html5QrcodeCameraScanConfig } from \"html5-qrcode/esm/html5-qrcode\";\r\nimport { Html5QrcodeResult } from \"html5-qrcode/esm/core\";\r\nimport { DxPopupComponent } from 'devextreme-angular';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nclass State extends BaseState {\r\n DeviceIDs: string[] = [];\r\n CurrentDeviceIndex = null;\r\n IsInititialized: boolean = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-barcodeboxdialog',\r\n templateUrl: './barcodeboxdialog.component.html',\r\n styleUrls: ['./barcodeboxdialog.component.scss']\r\n})\r\nexport class BarcodeBoxDialogComponent extends BasePageComponent{\r\n @ViewChild('reader') ReaderElement: ElementRef | undefined;\r\n\r\n @Input() UseFrontCamera: boolean = false;\r\n @Input() Config: Html5QrcodeCameraScanConfig = { fps: 10, qrbox: { width: 250, height: 250 } };\r\n @Input() ExtraFields: TemplateRef;\r\n @Output() OnTextDecoded: EventEmitter = new EventEmitter();\r\n @Output() OnResultDecoded: EventEmitter = new EventEmitter();\r\n html5QrCode!: Html5Qrcode;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'BarcodeBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.IsInititialized = true;\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n\r\n Html5Qrcode.getCameras().then(devices => {\r\n if (devices && devices.length) {\r\n this.State.DeviceIDs = devices.map(x => x.id);\r\n this.State.CurrentDeviceIndex = this.State.DeviceIDs.length - 1;\r\n this.StartHtmlQrCode();\r\n }\r\n }).catch(err => {\r\n console.log(err);\r\n });\r\n\r\n //let html5QrcodeScanner = new Html5QrcodeScanner(\"reader\", undefined, false);\r\n //html5QrcodeScanner.render(this.onScanSuccess, this.onScanFailure);\r\n }\r\n\r\n protected override OnDestroyComponent() {\r\n this.State.IsInititialized = false;\r\n }\r\n\r\n public override OnClose() {\r\n if (this.StopHtml5QrCode(false)) return false;\r\n this.CloseDialogWithCancel();\r\n return false;\r\n }\r\n\r\n private StartHtmlQrCode() {\r\n if (this.html5QrCode?.isScanning) {\r\n this.html5QrCode.stop().then((ignore) => {\r\n this.html5QrCode.start(\r\n { deviceId: this.State.DeviceIDs[this.State.CurrentDeviceIndex] },\r\n this.Config,\r\n this.QrCodeSuccessCallback,\r\n (error) => { })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }).catch((err) => {\r\n console.error(err);\r\n });\r\n return;\r\n }\r\n\r\n this.html5QrCode = new Html5Qrcode(this.ReaderElement?.nativeElement?.id);\r\n this.html5QrCode.start(\r\n { deviceId: this.State.DeviceIDs[this.State.CurrentDeviceIndex] },\r\n this.Config,\r\n this.QrCodeSuccessCallback,\r\n (error) => { })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n private StopHtml5QrCode(isSuccess) {\r\n if (this.html5QrCode) {\r\n this.html5QrCode.stop().then((ignore) => {\r\n isSuccess ? this.CloseDialogWithSuccess() : this.CloseDialogWithCancel();\r\n }).catch((err) => {\r\n console.error(err);\r\n this.CloseDialogWithCancel();\r\n });\r\n return true;\r\n }\r\n }\r\n\r\n OnBarcodeClick (e) {\r\n this.State.CurrentDeviceIndex++;\r\n this.State.CurrentDeviceIndex = this.State.CurrentDeviceIndex % this.State.DeviceIDs.length;\r\n this.StartHtmlQrCode();\r\n }\r\n\r\n QrCodeSuccessCallback = (decodedText: any, decodedResult: Html5QrcodeResult) => {\r\n this.OnTextDecoded.emit(decodedText);\r\n this.OnResultDecoded.emit(decodedResult);\r\n }\r\n\r\n CloseDialog(isSuccess: boolean) {\r\n if (this.StopHtml5QrCode(isSuccess)) return;\r\n this.CloseDialogWithCancel();\r\n }\r\n}","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { FrameworkService } from \"@core/framework/framework.service\"\r\n\r\n@Directive({ selector: '[customBuild]' })\r\nexport class M4UCustomBuildDirective\r\n{\r\n private hasView = false;\r\n\r\n constructor(\r\n private templateRef: TemplateRef,\r\n private viewContainer: ViewContainerRef,\r\n private framework: FrameworkService) { }\r\n\r\n @Input() set customBuild(value: string)\r\n {\r\n var bTrue = this.framework.IsCustomBuild(value);\r\n if (this.Reverse) bTrue = !bTrue;\r\n if (bTrue && !this.hasView)\r\n {\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n this.hasView = true;\r\n } else if (bTrue && this.hasView)\r\n {\r\n this.viewContainer.clear();\r\n this.hasView = false;\r\n }\r\n }\r\n\r\n @Input() Reverse: boolean;\r\n}","import { Component, ElementRef, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-status-column',\r\n templateUrl: './status-column.component.html',\r\n styleUrls: ['./status-column.component.scss']\r\n})\r\nexport class StatusColumnComponent {\r\n\r\n @Input() Icon: string;\r\n @Input() IconUrl: string;\r\n @Input() Text: string;\r\n @Input() Color: string;\r\n @Input() Position: 'start' | 'center' | 'end' = 'start';\r\n\r\n constructor(private elRef: ElementRef) { }\r\n\r\n GetClass() {\r\n return `status-column-position-${this.Position}`;\r\n }\r\n\r\n getHtmlContent() {\r\n return this.elRef.nativeElement;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{Text}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { ContextMenu } from 'primeng/contextmenu';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ContextMenuService {\r\n\r\n private _contextMenus: ContextMenu[] = [];\r\n\r\n public addContextMenu(cm: ContextMenu) {\r\n cm.onShow.subscribe(() => {\r\n this._contextMenus.forEach(x => x.hide());\r\n this._contextMenus.push(cm);\r\n });\r\n cm.onHide.subscribe(() => this._contextMenus = this._contextMenus.filter(x => x !== cm));\r\n }\r\n}","import { ComponentFactoryResolver, Directive, HostListener, Input, OnDestroy, Output, EventEmitter, ViewContainerRef, AfterViewInit } from '@angular/core';\r\nimport { IBaseComponent } from '@base/component/IBaseComponent';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { DxDateBoxComponent, DxListComponent, DxNumberBoxComponent, DxSelectBoxComponent, DxTagBoxComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { DxiColumnComponent, DxoLookupComponent } from 'devextreme-angular/ui/nested';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { Subscription } from 'rxjs';\r\nimport { StatusColumnComponent } from '../components/status-column/status-column.component';\r\nimport { FieldDetailComponentX } from '../layouts/fieldlayouts/field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '../layouts/fieldlayouts/field-form/fieldform.component';\r\nimport Validator from 'devextreme/ui/validator';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { formatNumber } from 'devextreme/localization';\r\nimport { ContextMenu } from 'primeng/contextmenu';\r\nimport { ContextMenuService } from '@m4u-angular/core/framework/context-menu.service';\r\n\r\n\r\n@Directive({ selector: 'dx-select-box[configEntitySource]' })\r\nexport class M4UConfigEntitySourceDirectiveSelectBox {\r\n constructor(c: DxSelectBoxComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-tag-box[configEntitySource]' })\r\nexport class M4UConfigEntitySourceDirectiveTagBox {\r\n constructor(c: DxTagBoxComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxo-lookup[configEntitySource]' })\r\nexport class M4UConfigEntitySourceLookupColumn {\r\n constructor(c: DxoLookupComponent) {\r\n c.displayExpr = 'Name';\r\n c.valueExpr = 'EntryID';\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configMonthYear]' })\r\nexport class M4UConfigMonthYearDirective implements OnDestroy {\r\n private subscribtion: Subscription;\r\n constructor(c: DxDateBoxComponent) {\r\n c.type = 'date';\r\n c.displayFormat = 'MM/yyyy';\r\n c.pickerType = 'calendar';\r\n\r\n c.calendarOptions =\r\n {\r\n maxZoomLevel: 'year',\r\n minZoomLevel: 'century'\r\n };\r\n\r\n //Disable input textbox since it causes problems\r\n this.subscribtion = c.onContentReady.subscribe((e) => {\r\n e.component.option('inputAttr', { disabled: true });\r\n });\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.subscribtion.unsubscribe();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configYear]' })\r\nexport class M4UConfigYearDirective implements OnDestroy {\r\n private subscribtion: Subscription;\r\n constructor(c: DxDateBoxComponent) {\r\n c.type = 'date';\r\n c.displayFormat = 'yyyy';\r\n c.pickerType = 'calendar';\r\n\r\n c.calendarOptions =\r\n {\r\n maxZoomLevel: 'decade',\r\n minZoomLevel: 'century'\r\n };\r\n\r\n //Disable input textbox since it causes problems\r\n this.subscribtion = c.onContentReady.subscribe((e) => {\r\n e.component.option('inputAttr', { disabled: true });\r\n });\r\n }\r\n\r\n //Clean up\r\n ngOnDestroy() {\r\n this.subscribtion.unsubscribe();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[configTime]' })\r\nexport class M4UConfigTimeDirective {\r\n constructor(c: DxDateBoxComponent, framework: FrameworkService) {\r\n\r\n const Detector = AppInjector.get(DeviceDetectorService);\r\n\r\n c.type = 'time';\r\n c.displayFormat = framework.CompanyInfo.TimeFormatShort;\r\n c.pickerType = (!Detector.isMobile() ? 'list' : 'native');\r\n c.min = null;\r\n c.max = null;\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatSum]' })\r\nexport class M4UFormatSumDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberSum;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPrice]' })\r\nexport class M4UFormatPriceDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberPrice;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatRoundedPrice]' })\r\nexport class M4UFormatRoundedPriceDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n let numberPrice = framework.CompanyInfo.NumberPrice;\r\n const separatorIdx = numberPrice.lastIndexOf(framework.CompanyInfo.DecimalSeparator);\r\n if (separatorIdx !== -1) {\r\n numberPrice = numberPrice.substring(0, separatorIdx);\r\n }\r\n c.format = numberPrice;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPriceWithCurrency]' })\r\nexport class FormatPriceWithCurrencyDirective {\r\n\r\n @Input() dataField: string;\r\n @Input() isShowZero = false;\r\n @Input('formatPriceWithCurrency') set currencyField(value: string) {\r\n this.c.calculateCellValue = (data) => {\r\n const number = data[this.dataField];\r\n const currency = data[value];\r\n\r\n if (number === null || number === undefined) {\r\n return null; \r\n }\r\n if (!this.isShowZero && number === 0) {\r\n return null; \r\n }\r\n\r\n let result = formatNumber(number, this.framework.CompanyInfo.NumberSum);\r\n\r\n if (currency) {\r\n result = `${result} ${currency}`; \r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n constructor(private c: DxiColumnComponent, private framework: FrameworkService) { }\r\n}\r\n\r\n@Directive({ selector: '[formatQuantity]' })\r\nexport class M4UFormatQuantityDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberQuantity;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatPercent]' })\r\nexport class M4UFormatPercentDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberPercent + '\\'%\\'';\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatRate]' })\r\nexport class M4UFormatRateDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberRate;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatGeneral]' })\r\nexport class M4UFormatGeneralDirective {\r\n constructor(c: DxNumberBoxComponent, framework: FrameworkService) {\r\n c.format = framework.CompanyInfo.NumberGeneral;\r\n c.inputAttr = { inputmode: 'decimal' };\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-text-box[multiEmail]' })\r\nexport class M4UMultiEmailDirective implements AfterViewInit {\r\n constructor(private c: DxTextBoxComponent, private A: ServiceBagService) {\r\n }\r\n\r\n ngAfterViewInit() {\r\n const oElementInstance = this.c.instance;\r\n let validatorInstance = Validator.getInstance(oElementInstance.element()) as Validator;\r\n if (!validatorInstance) validatorInstance = new Validator(oElementInstance.element(), {});\r\n const rules = validatorInstance.option('validationRules'); \r\n\r\n rules.push({\r\n type: 'custom',\r\n ignoreEmptyValue: true,\r\n message: this.A.ResourcesService.RC('lblMultiEmailError'),\r\n validationCallback: (e) => {\r\n if (e.value == null) return true;\r\n return Utils.IsEmail(e.value, true);\r\n }\r\n });\r\n\r\n validatorInstance.option('validationRules', rules);\r\n }\r\n}\r\n\r\n@Directive({ selector: '[formatCurrency]' })\r\nexport class M4UFormatCurrencyDirective {\r\n constructor(private c: DxNumberBoxComponent, private framework: FrameworkService) {\r\n }\r\n\r\n //Append currency value to the current format\r\n _Currency: string;\r\n @Input('formatCurrency') set Currency(value: string) {\r\n this._Currency = value;\r\n if (value == undefined) return;\r\n let format;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberGeneral)) format = this.framework.CompanyInfo.NumberGeneral;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberPrice)) format = this.framework.CompanyInfo.NumberPrice;\r\n if (this.c.format.toString().startsWith(this.framework.CompanyInfo.NumberSum)) format = this.framework.CompanyInfo.NumberSum;\r\n\r\n if (!format) return;\r\n this.c.format = format.split(';').reduce((acc: string, a: string) => acc += `${a} ${this._Currency};`, '').slice(0, -1);\r\n }\r\n get Currency(): string {\r\n return this._Currency;\r\n }\r\n}\r\n\r\n@Directive({ selector: '[stop-click-propagation]' })\r\nexport class M4UStopClickPropagation {\r\n @HostListener('click', ['$event'])\r\n public onClick(event: any): void {\r\n event.stopPropagation();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[field-empty]' })\r\nexport class M4UFieldEmptyDirective {\r\n @Input() Component: IBaseComponent;\r\n @Input() IsHideLabel: boolean;\r\n\r\n constructor(f: FieldFormComponent, private screen: ScreenService) {\r\n f.Component = this.Component;\r\n f.Name = 'Empty';\r\n f.IsHideLabel = this.IsHideLabel;\r\n f.IsHide = this.screen.IsMobile();\r\n }\r\n}\r\n\r\n@Directive({ selector: '[fieldx-empty]' })\r\nexport class M4UFieldXEmptyDirective extends M4UFieldEmptyDirective {\r\n constructor(f: FieldDetailComponentX, screen: ScreenService) {\r\n super(f, screen);\r\n f.Value = 'Empty';\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[configBooleanColumn]' })\r\nexport class M4UConfigBooleanColumnDirective {\r\n @Input() TrueColor: string;\r\n @Input() FalseColor: string;\r\n @Input() Text: string;\r\n @Input() UseColumnCaption = false;\r\n @Input() ReverseValue = false;\r\n\r\n private _defaultActiveColor = '#0fbe7b';\r\n\r\n constructor(column: DxiColumnComponent,\r\n private viewContainerRef: ViewContainerRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private A: ServiceBagService) {\r\n column.cellTemplate = this.cellTemplate;\r\n }\r\n\r\n cellTemplate = (container, options) => {\r\n const value = this.ReverseValue ? !options.value : !!options.value;\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(StatusColumnComponent);\r\n const component = this.viewContainerRef.createComponent(componentFactory);\r\n component.instance.Text = this.Text || (this.UseColumnCaption\r\n ? options.column.caption\r\n : this.A.ResourcesService.RC(value ? 'genYes' : 'genNo'));\r\n component.instance.Color = value\r\n ? this.TrueColor || this._defaultActiveColor\r\n : this.FalseColor || undefined;\r\n const content = component.instance.getHtmlContent();\r\n container.appendChild(content);\r\n }\r\n}\r\n\r\n@Directive({ selector: '[list-with-pagination]' })\r\nexport class M4UListWithPagination {\r\n @Input() Page: BasePageComponent;\r\n\r\n constructor(private list: DxListComponent) { }\r\n\r\n ngOnInit() {\r\n const listTop = this.list['element'].nativeElement.getBoundingClientRect().top;\r\n\r\n // Calculate grid height fit to the page\r\n const height = window.innerHeight - listTop;\r\n\r\n // Get page footer height\r\n const pageFooters = document.querySelectorAll('.page-container m4u-footer');\r\n const pageFooter = pageFooters[pageFooters.length - 1];\r\n const pageFooterHeight = pageFooter && pageFooter['offsetParent'] && (pageFooter['offsetParent'].offsetHeight - pageFooter['offsetTop']) || 0;\r\n\r\n // Get layout padding\r\n const pageContainers = document.getElementsByClassName('page-content-container');\r\n const currentLayoutPadding = +document.defaultView\r\n .getComputedStyle(pageContainers[pageContainers.length - 1], '')\r\n .getPropertyValue('padding-bottom').match(/\\d/g).join('');\r\n\r\n // If less than header and one row add window height\r\n this.list.height = (height < 160 ? height + window.innerHeight : height) - currentLayoutPadding - pageFooterHeight; // Layout padding, page footer\r\n\r\n }\r\n\r\n}\r\n\r\n@Directive({ selector: '[field-link]' })\r\nexport class M4UFieldLinkDirective {\r\n @Input() NavPath: string;\r\n @Input() NavParams: any;\r\n @Input() NavEntryID: number;\r\n\r\n private _disabled: boolean;\r\n @Input() set Disabled(value: boolean) {\r\n this._disabled = value;\r\n if (this._disabled) this.component.elementAttr = { class: 'm4u-link disabled' };\r\n }\r\n\r\n constructor(private component: DxTextBoxComponent,\r\n private navigatorService: NavigatorService) {\r\n this.component.elementAttr = { class: 'm4u-link' };\r\n this.component.focusStateEnabled = false;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: any): void {\r\n event.stopPropagation();\r\n if (this._disabled) return;\r\n\r\n if (!this.NavPath.endsWith('/')) this.NavPath = `${this.NavPath}/`;\r\n const navEntryID = this.NavEntryID || this.component.value;\r\n const fullPath = `${this.NavPath}${navEntryID}`;\r\n\r\n this.navigatorService.Navigate([fullPath], this.NavParams);\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[link-column]' })\r\nexport class M4ULinkColumnDirective {\r\n @Input() Disabled: (cell: any) => boolean;\r\n @Output() OnClick = new EventEmitter();\r\n\r\n constructor(column: DxiColumnComponent) {\r\n column.cssClass = `${column.cssClass || ''} link-column`;\r\n column.cellTemplate = this.cellTemplate;\r\n }\r\n\r\n cellTemplate = (container, cell) => {\r\n const disabled = this.Disabled && this.Disabled(cell);\r\n container.innerHTML = cell.displayValue || '';\r\n if (disabled) {\r\n container.classList.add('disabled');\r\n return;\r\n }\r\n \r\n container.onclick = (event) => {\r\n event.stopPropagation();\r\n this.OnClick.emit(cell);\r\n };\r\n };\r\n}\r\n\r\n@Directive({ selector: 'p-contextMenu[contextMenu]' })\r\nexport class M4UContextMenuDirective {\r\n constructor(cm: ContextMenu, private contextMenuService: ContextMenuService) {\r\n this.contextMenuService.addContextMenu(cm);\r\n }\r\n}\r\n\r\n","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { DxSelectBoxComponent, DxTagBoxComponent } from 'devextreme-angular';\r\nimport { Utils } from '@core/helpers/Utils';\r\n\r\n@Directive({ selector: '[configSearch]' })\r\nexport class M4UConfigSearchDirective {\r\n\r\n //Set default options\r\n constructor(private c: DxSelectBoxComponent) {\r\n //Enables typing in\r\n c.searchEnabled = true;\r\n\r\n //Set mode. This is what supported on the server\r\n c.searchMode = \"contains\";\r\n\r\n this.SetItemTemplate();\r\n }\r\n\r\n searchText: string = ''\r\n\r\n //Set some properties related to server search mode\r\n _DataMode: string;\r\n get DataMode(): string { return this._DataMode; }\r\n @Input() set DataMode(value: string) {\r\n this._DataMode = value;\r\n\r\n //If local, no need for minimum\r\n this.c.minSearchLength = (this._DataMode == 'server' ? 2 : 0);\r\n\r\n //Opening causes a full load. If in client mode, we don't care\r\n this.c.openOnFieldClick = (this._DataMode == 'server' ? false : true);\r\n }\r\n\r\n _ShowExtra: boolean;\r\n get ShowExtra(): boolean { return this._ShowExtra; }\r\n @Input() set ShowExtra(value: boolean) {\r\n this._ShowExtra = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate();\r\n }\r\n\r\n //Set template that highlights the typed in item, shows the value, and enables search by value\r\n _ShowValue: boolean;\r\n get ShowValue(): boolean { return this._ShowValue; }\r\n @Input() set ShowValue(value: boolean) {\r\n this._ShowValue = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate()\r\n }\r\n\r\n _ItemCssClass: string;\r\n get ItemCssClass(): string { return this._ItemCssClass; }\r\n @Input() set ItemCssClass(value: string) {\r\n this._ItemCssClass = value;\r\n this.SetDisplayExpression();\r\n this.SetItemTemplate()\r\n }\r\n\r\n //Set the template\r\n SetItemTemplate() {\r\n this.c.itemTemplate = this.PrepareItemTemplate.bind(this);\r\n }\r\n\r\n //Have to expose this one as well to allow overriding it, since the code itself overrides this field on the base control\r\n _DisplayExpr: string;\r\n get DisplayExpr(): string { return this._DisplayExpr; }\r\n @Input() set DisplayExpr(value: string) {\r\n this._DisplayExpr = value;\r\n this.SetDisplayExpression();\r\n }\r\n\r\n @HostListener('onInput') onInput() {\r\n this.searchText = String(this.c.instance.option('text'))\r\n }\r\n\r\n @HostListener('onSelectionChanged') onSelectionChanged() {\r\n this.searchText = ''\r\n }\r\n\r\n //Set correct display and search strings\r\n SetDisplayExpression() {\r\n\r\n //Set display expression to the one set manually, or build an automatic one depending on the Value/Text fields\r\n if (this.DisplayExpr != undefined) {\r\n this.c.displayExpr = this.DisplayExpr;\r\n } else {\r\n if (this._ShowValue || (this._ShowExtra && this.ExtraField)) {\r\n this.c.displayExpr = (item) => (item != null\r\n ? `${Utils.NZ(item[this._ShowExtra ? this.ExtraField : this.ValueField])} - ${Utils.NZ(item[this.TextField])}`\r\n : null);\r\n }\r\n else {\r\n this.c.displayExpr = this.TextField;\r\n }\r\n }\r\n\r\n const arr = [];\r\n arr.push(this.TextField);\r\n if (this.ShowValue) arr.push(this.ValueField);\r\n if (this.ShowExtra) arr.push(this.ExtraField);\r\n this.c.searchExpr = arr;\r\n }\r\n\r\n //Set that field that is being used as a text, to allow customer datasources\r\n _TextField: string = \"Text\";\r\n get TextField(): string { return this._TextField; }\r\n @Input() set TextField(value: string) {\r\n if (this._TextField != value) {\r\n this._TextField = value;\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n //Set that field that is being used as a value, to allow customer datasources\r\n _ValueField: string = \"Value\";\r\n get ValueField(): string { return this._ValueField; }\r\n @Input() set ValueField(value: string) {\r\n if (this._ValueField != value) {\r\n this._ValueField = value;\r\n value && (this.c.valueExpr = value);\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n //Set that field that is being used as a extra \r\n _ExtraField: string = \"Extra\";\r\n get ExtraField(): string { return this._ExtraField; }\r\n @Input() set ExtraField(extra: string) {\r\n if (this._ExtraField != extra) {\r\n this._ExtraField = extra;\r\n this.SetDisplayExpression();\r\n }\r\n }\r\n\r\n private GetValueFromPath(obj: any, path: string): string {\r\n const value = path.split('.').reduce((acc, val) => acc && acc[val], obj);\r\n return typeof value === 'number' ? value.toString() : value;\r\n }\r\n\r\n //Prepare the template\r\n private PrepareItemTemplate(itemData, itemIndex, itemElement): string {\r\n var sEnteredString: string = this.searchText;\r\n\r\n //Get extra\r\n var sExtraPart: string = '';\r\n if (this.ShowExtra) sExtraPart = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.ExtraField), \"extra\");\r\n\r\n //Return either both parts, or just one\r\n if (this._ShowValue) {\r\n var sValuePart: string = this.GetHighlightedString(sEnteredString, `${this.GetValueFromPath(itemData, this.ValueField)}`, \"value\");\r\n var sTextPart: string = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.TextField), \"text\");\r\n return `${sValuePart}${sTextPart}` + (this.ShowExtra ? sExtraPart : '');\r\n }\r\n else {\r\n var sTextPart: string = this.GetHighlightedString(sEnteredString, this.GetValueFromPath(itemData, this.TextField), \"textnovalue\");\r\n return sTextPart + (this.ShowExtra ? sExtraPart : '');;\r\n }\r\n }\r\n\r\n //Return a highlighten string for a line\r\n private GetHighlightedString(sEnteredString: string, sItemString: string, sClass: string): string {\r\n var sValue: string;\r\n if (!Utils.IsEmpty(sEnteredString) && !Utils.IsEmpty(sItemString)) {\r\n var iPos = sItemString.toLowerCase().indexOf(sEnteredString.toLowerCase());\r\n if (iPos >= 0) {\r\n //Put the text we found inside a span\r\n var iLen = sEnteredString.length;\r\n sValue = `${sItemString.slice(0, iPos)}${sItemString.slice(iPos, iPos + iLen)}${sItemString.slice(iPos + iLen)}`;\r\n }\r\n else {\r\n //Not found\r\n sValue = Utils.NZ(sItemString);\r\n }\r\n }\r\n else {\r\n //Same as not found\r\n sValue = Utils.NZ(sItemString);\r\n }\r\n\r\n //Return div for this line\r\n return `
${sValue}
`;\r\n }\r\n}\r\n","import { EnumCustomFilterTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { Directive, Input } from '@angular/core';\r\n\r\n\r\n@Directive({ selector: 'dxi-column[configServerSideCustomFilter]' })\r\nexport class M4UConfigServerSideCustomFilterDirective {\r\n @Input() CustomFilterType: EnumCustomFilterTypes;\r\n\r\n constructor(column: DxiColumnComponent) {\r\n column.calculateFilterExpression = this.getCalculateFilterExpression();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n getCalculateFilterExpression(): Function {\r\n switch (this.CustomFilterType) {\r\n case EnumCustomFilterTypes.RelatedToAtLeastOne:\r\n return this.RelatedToAtLeastOneFilterExpressionBuilder;\r\n default: return this.RelatedToAtLeastOneFilterExpressionBuilder;\r\n }\r\n }\r\n\r\n RelatedToAtLeastOneFilterExpressionBuilder(this: Column, filterValue: any, selectedFilterOperation: string, target) {\r\n return [this.dataField, EnumCustomFilterTypes.RelatedToAtLeastOne, filterValue];\r\n }\r\n}\r\n","//This is based on the standard routerLink directive\r\n\r\nimport { Attribute, Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';\r\nimport { NavigatorService } from '@core/framework/navigator.service';\r\n\r\n\r\n\r\n@Directive({ selector: ':not(a):not(area)[Link]' })\r\nexport class M4URouterLinkEx\r\n{\r\n\r\n private commands: any[] = [];\r\n constructor(\r\n private Navigator: NavigatorService,\r\n @Attribute('tabindex') tabIndex: string,\r\n renderer: Renderer2,\r\n el: ElementRef)\r\n {\r\n if (tabIndex == null) renderer.setAttribute(el.nativeElement, 'tabindex', '0');\r\n }\r\n\r\n @Input()\r\n set Link(commands: any[] | string)\r\n {\r\n this.commands = Array.isArray(commands) ? commands : [commands];\r\n }\r\n\r\n @Input()\r\n public LinkQueryParams: any;\r\n\r\n\r\n @HostListener('click')\r\n onClick(): boolean\r\n {\r\n this.Navigator.Navigate(this.commands, this.LinkQueryParams);\r\n return true;\r\n }\r\n\r\n}\r\n\r\n\r\n@Directive({ selector: 'a[Link],area[Link]' })\r\nexport class M4URouterLinkExWithHref\r\n{\r\n\r\n private commands: any[] = [];\r\n constructor(private Navigator: NavigatorService)\r\n {\r\n }\r\n\r\n @Input()\r\n set Link(commands: any[] | string)\r\n {\r\n this.commands = Array.isArray(commands) ? commands : [commands];\r\n }\r\n\r\n\r\n @Input()\r\n public LinkQueryParams: any;\r\n\r\n @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'])\r\n onClick(button: number, ctrlKey: boolean, metaKey: boolean, shiftKey: boolean): boolean\r\n {\r\n if (button !== 0 || ctrlKey || metaKey || shiftKey) return true;\r\n this.Navigator.Navigate(this.commands, this.LinkQueryParams);\r\n return true;\r\n }\r\n\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[view-container]',\r\n})\r\nexport class M4UViewContainerDirective {\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl } from '@angular/platform-browser';\r\nimport { IBaseModuleComponent } from '@base/component/IBaseComponent';\r\nimport { formatDate, formatNumber } from 'devextreme/localization';\r\nimport { from, Observable, of } from 'rxjs';\r\nimport { BaseDataSourceAbstract } from '@base/datalayer/BaseDataSourceAbstract';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { truncate } from 'lodash';\r\n\r\n\r\n\r\n@Pipe({ name: 'RC', pure: true })\r\nexport class RCPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, component: IBaseModuleComponent, ...args: string[] | number[]): string {\r\n return this.resources.RC(value, component && component.ModuleName, ...args);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCM', pure: true })\r\nexport class RCMPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, moduleName: string): string {\r\n return this.resources.RC(value, moduleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCX', pure: false })\r\nexport class RCXPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, component: IBaseModuleComponent): string {\r\n return this.resources.RC(value, component && component.ModuleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'RCMX', pure: false })\r\nexport class RCMXPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string, moduleName): string {\r\n return this.resources.RC(value, moduleName);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'YesNo' })\r\nexport class YesNoPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: boolean): string {\r\n return this.resources.RC((value ? \"genYes\" : 'genNo'));\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'YesNoYN' })\r\nexport class YesNoPipeYN implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: string): string {\r\n return this.resources.RC((value == 'Y' ? \"genYes\" : 'genNo'));\r\n }\r\n}\r\n\r\n@Pipe({ name: 'YesEmpty' })\r\nexport class YesEmptyPipe implements PipeTransform {\r\n constructor(private resources: ResourcesService) { }\r\n transform(value: boolean): string {\r\n return value ? this.resources.RC('genYes') : '';\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({ name: 'LookupList' })\r\nexport class LookupListPipe implements PipeTransform {\r\n transform(value: any, Entities: any[], propName: string = \"Text\", sDefault: string = undefined, sNullValue: string = undefined): string {\r\n\r\n //If default value was not set, set it to the original value\r\n if (sDefault == undefined && value != undefined) sDefault = `${value}`\r\n\r\n if (!Entities || !Entities.length) return sNullValue;\r\n //Lookup\r\n var result = Entities.find(entity => entity.Value == value);\r\n\r\n //If not found\r\n if (result == undefined) return sDefault;\r\n\r\n //Get result from the selected property\r\n var sReturn = result[propName];\r\n\r\n //Handle null\r\n if (sReturn == \"\" || sReturn == undefined) sReturn = sNullValue;\r\n\r\n //Finish\r\n return sReturn;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'Lookup' })\r\nexport class LookupPipe implements PipeTransform {\r\n transform(value: number, dataSource: BaseDataSourceAbstract | [], propName: string = \"Text\", sDefault: string = undefined, sNullValue: string = undefined, keyName: string = \"EntryID\"): Observable {\r\n\r\n const getStringFromResult = (result: any) => {\r\n if (result == undefined) return sDefault;\r\n\r\n var sReturn: string = result[propName];\r\n\r\n if (sReturn == \"\" || sReturn == undefined) sReturn = sNullValue;\r\n\r\n return sReturn;\r\n }\r\n\r\n //If default value was not set, set it to the original value\r\n if (sDefault == undefined && value != undefined) sDefault = `${value}`;\r\n\r\n if (Utils.IsEmpty(value)) return of(sDefault);\r\n\r\n if (dataSource == undefined) return of('');\r\n\r\n if ((dataSource as any).Store) {\r\n const ds = dataSource as BaseDataSourceAbstract;\r\n //Get value\r\n var promise = ds.Store.byKey(value)\r\n .then(result => {\r\n return getStringFromResult(result);\r\n })\r\n .catch(() => {\r\n console.warn(`Lookup value ${value} not found`);\r\n return sDefault;\r\n });\r\n\r\n return from(promise);\r\n } else {\r\n let result = (dataSource as []).find(x => x[keyName] == value);\r\n return of(getStringFromResult(result));\r\n }\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberShort' })\r\nexport class FormatNumberShortPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: number): string {\r\n return formatNumber(value, \"#,##0.#\");\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberGeneral' })\r\nexport class FormatNumberGeneralPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberGeneral);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberSum' })\r\nexport class FormatNumberSumPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberSum);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberPrice' })\r\nexport class FormatNumberPricePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberPrice);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberQuantity' })\r\nexport class FormatNumberQuantityPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberQuantity);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberPercent' })\r\nexport class FormatNumberPercentPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberPercent);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatNumberRate' })\r\nexport class FormatNumberRatePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n return formatNumber(value, this.framework.CompanyInfo.NumberRate);\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({ name: 'formatDate' })\r\nexport class FormatDatePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n\r\n const date = value instanceof Date ? value : new Date(value)\r\n\r\n return formatDate(date, this.framework.CompanyInfo.DateFormatLong);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDateShort' })\r\nexport class FormatDateShortPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date | string, fallback: string = undefined): string {\r\n if (value == undefined) return fallback;\r\n\r\n const date = value instanceof Date ? value : new Date(value)\r\n\r\n return formatDate(date, this.framework.CompanyInfo.DateFormatShort);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateCompact' })\r\nexport class FormatDateCompactPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.DateFormatCompact);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateApproximate' })\r\nexport class FormatDateApproximatePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDateApproximate(value);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateAtTime' })\r\nexport class FormatDateAtTimePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService,\r\n private resources: ResourcesService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n\r\n const date = formatDate(value, this.framework.CompanyInfo.DateFormatLong);\r\n const time = formatDate(value, this.framework.CompanyInfo.TimeFormatShort);\r\n\r\n return `${date} ${this.resources.RC('lblAt')} ${time}`;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatDateFull' })\r\nexport class FormatFullDateCompactPipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.DateFormatFull);\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'formatTime' })\r\nexport class FormatTimePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return formatDate(value, this.framework.CompanyInfo.TimeFormatShort);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDayName' })\r\nexport class FormatDayNamePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDayName(value.getDay() + 1);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatDayNameShort' })\r\nexport class FormatDayNameShortPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: Date): string {\r\n if (value == undefined) return undefined;\r\n return DateHelpers.GetDayNameShort(value.getDay() + 1);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'formatPriceWithCurrency' })\r\nexport class FormatPriceWithCurrencyPipe implements PipeTransform \r\n{\r\n constructor(private framework: FrameworkService) { }\r\n\r\n transform(value: number, currency: string = null, isShowZero: boolean = false): string {\r\n let result = '';\r\n\r\n if(value == null) value = 0;\r\n if(value == 0 && !isShowZero) return result;\r\n\r\n result = formatNumber(value, this.framework.CompanyInfo.NumberSum);\r\n if(currency != null) {\r\n result += ' ' + currency;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n\r\n@Pipe({ name: 'highlight' })\r\nexport class HighlightPipe implements PipeTransform {\r\n constructor(public sanitizer: DomSanitizer) { }\r\n\r\n transform(text: any, search: string): string {\r\n if (search == undefined || text == undefined) return text;\r\n var pattern = search\r\n .replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\")\r\n .split(' ')\r\n .filter((t) => t.length > 0)\r\n .join('|');\r\n\r\n var regex = new RegExp(pattern, 'gi');\r\n\r\n return search\r\n ? `${text}`.replace(regex, (match) => `${match}`)\r\n : text;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: \"orderBy\" })\r\nexport class ArrayOrderByPipe implements PipeTransform {\r\n transform(array: any, field: string): any[] {\r\n if (!Array.isArray(array)) return;\r\n\r\n array.sort((a: any, b: any) => {\r\n // null value always on top\r\n if (a[field] == null) return -1;\r\n if (b[field] == null) return 1;\r\n\r\n if (a[field] < b[field]) {\r\n return -1;\r\n } else if (a[field] > b[field]) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n return array;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'safe' })\r\nexport class SafePipe implements PipeTransform {\r\n constructor(protected sanitizer: DomSanitizer) { }\r\n\r\n public transform(value: string, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\r\n switch (type) {\r\n case 'html':\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case 'style':\r\n return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case 'script':\r\n return this.sanitizer.bypassSecurityTrustScript(value);\r\n case 'url':\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case 'resourceUrl':\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default:\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n }\r\n }\r\n}\r\n\r\n@Pipe({ name: 'stringBr' })\r\nexport class StringBrPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: string): string {\r\n if (!value) return value;\r\n return value.replace(/[\\r\\n]+/g, '
');\r\n }\r\n}\r\n\r\n@Pipe({ name: 'fileSize' })\r\nexport class FileSizePipe implements PipeTransform {\r\n constructor(private framework: FrameworkService) { }\r\n transform(value: number): string {\r\n const MByte = 1024 * 1024;\r\n if (value === undefined || value === null) return '';\r\n if (value < 1024) return (value + 'b');\r\n if (value < MByte) return Math.round(value / 1024) + 'KB';\r\n return formatNumber(+(value / MByte), this.framework.CompanyInfo.NumberGeneral) + 'MB';\r\n }\r\n}\r\n\r\n@Pipe({ name: 'abs' })\r\n\r\nexport class AbsPipe implements PipeTransform {\r\n transform(value: number): number {\r\n return Math.abs(value);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'truncate' })\r\nexport class TruncatePipe implements PipeTransform {\r\n constructor() {}\r\n transform(value: string): string {\r\n if (!value) return value;\r\n return truncate(value)\r\n }\r\n}","import { Directive, Input, AfterViewInit } from '@angular/core';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { DxTextBoxComponent, DxSelectBoxComponent, DxNumberBoxComponent, DxCheckBoxComponent,\r\n DxRadioGroupComponent, DxDateBoxComponent, DxTextAreaComponent } from 'devextreme-angular';\r\nimport { DxiColumnComponent } from 'devextreme-angular/ui/nested';\r\nimport { ValidationRule } from 'devextreme/common';\r\nimport Validator from 'devextreme/ui/validator';\r\n\r\nexport class M4UStandardDirective implements AfterViewInit {\r\n constructor(private c: any,\r\n private rule: 'async' | 'compare' | 'custom' | 'email' | 'numeric' | 'pattern' | 'range' | 'required' | 'stringLength',\r\n private IsColumn: boolean,\r\n private resourcesService: ResourcesService) { }\r\n\r\n private m_bInitComplete: boolean;\r\n\r\n _Enabled = true;\r\n @Input() set Enabled(value: boolean) {\r\n\r\n // Prevent double execution\r\n if (this.Enabled === value) {\r\n return;\r\n }\r\n\r\n this._Enabled = value;\r\n\r\n\r\n // Run only if changing after initialization\r\n if (this.m_bInitComplete) {\r\n this.Init();\r\n }\r\n }\r\n\r\n @Input() RequiredMessage: string;\r\n @Input() DoNotShowRequiredMsg: boolean;\r\n\r\n ngAfterViewInit() {\r\n this.Init();\r\n this.m_bInitComplete = true;\r\n }\r\n\r\n private Init() {\r\n if (this.IsColumn) {\r\n this.InitColumnRules();\r\n } else {\r\n this.InitNormalRules();\r\n }\r\n }\r\n\r\n InitNormalRules() {\r\n const oElementInstance = this.c.instance;\r\n let validatorInstance = Validator.getInstance(oElementInstance.element()) as Validator;\r\n if (!validatorInstance) {\r\n validatorInstance = new Validator(oElementInstance.element(), {});\r\n }\r\n\r\n // var overlay = validatorInstance.element().find(\".dx-invalid-message.dx-overlay\");\r\n // overlay.dxValidationMessage(\"instance\" ).option( \"position\", {\r\n // my: 'bottom right',\r\n // at: \"top right\",\r\n // });\r\n\r\n const rules = validatorInstance.option('validationRules').filter(x => x.type !== this.rule);\r\n\r\n // Add the rule, or filter it out\r\n if (this._Enabled) {\r\n rules.push({\r\n type: this.rule,\r\n message: this.DoNotShowRequiredMsg ? '' : (this.RequiredMessage || (this.resourcesService.RC('errorRequiredMessage')))\r\n });\r\n }\r\n\r\n // Set\r\n validatorInstance.option('validationRules', rules);\r\n }\r\n\r\n InitColumnRules() {\r\n let rules = this.c._getOption('validationRules') as ValidationRule[];\r\n if (rules === undefined) {\r\n rules = [];\r\n }\r\n\r\n // Add the rule, or filter it out\r\n if (this._Enabled) {\r\n rules.push({ type: this.rule });\r\n } else {\r\n rules = rules.filter(x => x.type !== this.rule);\r\n }\r\n\r\n // Set\r\n this.c._setOption('validationRules', rules);\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-text-box[configRequired]' })\r\nexport class M4URequiredDirectiveTextBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTextBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-number-box[configRequired]' })\r\nexport class M4URequiredDirectiveNumberBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxNumberBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-select-box[configRequired]' })\r\nexport class M4URequiredDirectiveSelectBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxSelectBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-check-box[configRequired]' })\r\nexport class M4URequiredDirectiveCheckBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxCheckBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-radio-group[configRequired]' })\r\nexport class M4URequiredDirectiveRadioGroup extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxRadioGroupComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: 'dx-date-box[configRequired]' })\r\nexport class M4URequiredDirectiveDateBox extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxDateBoxComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dxi-column[configRequired]' })\r\nexport class M4URequiredDirectiveColumn extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxiColumnComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', true, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n\r\n@Directive({ selector: 'dx-text-area[configRequired]' })\r\nexport class M4URequiredDirectiveTextArea extends M4UStandardDirective implements AfterViewInit {\r\n constructor(c: DxTextAreaComponent, resourcesService: ResourcesService) {\r\n super(c, 'required', false, resourcesService);\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output, ElementRef, Renderer2 } from '@angular/core';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n\r\n/**\r\n * \r\n */\r\n\r\n@Directive({\r\n selector: '[throttleevent]'\r\n})\r\nexport class ThrottleEventDirective implements OnInit, OnDestroy {\r\n @Input() EventName: string; // Event name, like 'keydown'\r\n @Input() DebounceTime: number = 500;\r\n @Input() IgnoreNavigationKeys: boolean = false;\r\n @Output() ThrottledEvent = new EventEmitter(); //The resulting event that should be handled\r\n\r\n ignoreKeyCodes = [37, 38, 39, 40, 33, 34, 36, 35];\r\n\r\n private eventsQueue = new Subject();\r\n private subscription: Subscription;\r\n private eventUnsubscribeFunction: any;\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2) { }\r\n\r\n //Handle the event\r\n OnEvent(event) {\r\n //Add event to the queue\r\n this.eventsQueue.next(event);\r\n }\r\n\r\n //Initialize listener and the new queue\r\n ngOnInit() {\r\n //Listen to the requested event\r\n this.eventUnsubscribeFunction = this.renderer.listen(this.elementRef.nativeElement, this.EventName, (event) => {\r\n if (!event) return;\r\n if (this.IgnoreNavigationKeys && event.keyCode) {\r\n if (this.ignoreKeyCodes.indexOf(event.keyCode) === -1) {\r\n this.OnEvent(event);\r\n }\r\n } else {\r\n this.OnEvent(event);\r\n }\r\n });\r\n\r\n //Listen to the events queue and throttle them\r\n this.subscription = this.eventsQueue.pipe(debounceTime(this.DebounceTime)).subscribe(e => this.ThrottledEvent.emit(e));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n this.eventUnsubscribeFunction();\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { ClientException } from '@base/entities/BaseEntities';\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { AppConfigService } from '../../configuration/app.config.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { EnumApplicationMode } from '../framework/sysenums.enum';\r\nimport { RC } from '../framework/resources.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { FrameworkService } from '../framework/framework.service';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-exception',\r\n templateUrl: './exception.component.html',\r\n styleUrls: ['./exception.component.scss']\r\n})\r\nexport class ExceptionComponent implements OnInit, OnDestroy {\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private appConfigService: AppConfigService,\r\n private activatedRoute: ActivatedRoute,\r\n private frameworkService: FrameworkService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.activatedRoute.data.subscribe(data => {\r\n if (data && data.MessageCode) {\r\n const exception = new ClientException;\r\n exception.Message = RC(data.MessageCode);\r\n SysGlobals.LastException = exception;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription && this.subscription.unsubscribe();\r\n }\r\n\r\n GetButtonText() {\r\n return this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard\r\n ? RC('btnReEntry')\r\n : RC('btnReload');\r\n }\r\n\r\n OnReload() {\r\n if (this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard) {\r\n this.frameworkService.NavigateDefault();\r\n return;\r\n }\r\n //For SiglePage and IFrame modes reload application\r\n //Application path was taken from 'unsupported-browsers' script that sets path on the application start\r\n window.location.href = window['applicationPath'];\r\n }\r\n\r\n E(): ClientException {\r\n return SysGlobals.LastException;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
{{'titleException' | RC}}
\\r\\n \\r\\n \\r\\n
\\r\\n

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

\\r\\n {{E()?.Message}}\\r\\n

\\r\\n {{E()?.StackTrace}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { BaseEntitiesResponse, HistoryChangesSet } from \"@base/entities/BaseEntities\";\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class HistoryEndpoint extends BaseEndpointCRUD {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"History\", api);\r\n }\r\n}\r\n","import { SwPush } from '@angular/service-worker';\r\nimport { Injectable } from '@angular/core';\r\nimport { ResourcesService } from './resources.service';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { environment } from \"../../environment/environment\";\r\nimport { NavigatorService } from './navigator.service';\r\n\r\n@Injectable()\r\nexport class NativeNotificationsService\r\n{\r\n\r\n public OnNotificationClicked: any;\r\n\r\n //Pass all notification clicks to it's respective handler\r\n constructor(private swPush: SwPush, private resources: ResourcesService)\r\n {\r\n if (!this.IsSupported()) return;\r\n this.swPush.notificationClicks.subscribe(event => this.OnNotificationClicked(event.notification.data, event.action, this.NavigateCallback));\r\n }\r\n\r\n //Since this can run when application is closed, support both navigating using router, and just setting the location\r\n public NavigateCallback(sURL: string)\r\n {\r\n\r\n //Any kind of navigation is causing errors, so just disable it for now\r\n return;\r\n\r\n if (!this.IsSupported()) return;\r\n try\r\n {\r\n var navigator = AppInjector.get(NavigatorService);\r\n navigator.Navigate([sURL]);\r\n }\r\n catch\r\n {\r\n location.replace(sURL);\r\n }\r\n }\r\n\r\n //Request permission to display notifications\r\n public RequestNotificationPermission()\r\n {\r\n if (!this.IsSupported()) return;\r\n if (Notification.permission != 'granted') Notification.requestPermission();\r\n }\r\n\r\n //Shows a desktop notification\r\n public ShowNotification(options: any)\r\n {\r\n try {\r\n if (!this.IsSupported()) return;\r\n } catch (e) {\r\n return;\r\n } \r\n if (navigator.serviceWorker == undefined) return;\r\n navigator.serviceWorker.getRegistration().then(registration =>\r\n {\r\n try\r\n {\r\n registration.showNotification(this.resources.RC('AppTitles.Messages'), options as any);\r\n }\r\n catch\r\n {}\r\n });\r\n\r\n }\r\n\r\n //Check support. on iPhone for instance there is no support\r\n private IsSupported(): boolean\r\n {\r\n return (('Notification' in window) && (environment.production));\r\n }\r\n}\r\n\r\n","import { EnumLanguages } from './../framework/sysenums.enum';\r\nimport { HttpErrorResponse, HttpEvent, HttpEventType, HttpHandler, HttpInterceptor, HttpProgressEvent, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { BaseResponse } from '@base/entities/BaseEntities';\r\nimport { NavigatorService } from '../framework/navigator.service';\r\nimport { RC } from '../framework/resources.service';\r\nimport { EnumRequestProgressTracking } from '../framework/sysenums.enum';\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { Utils } from '../helpers/Utils';\r\nimport { SessionService } from '../framework/session.service';\r\n\r\n@Injectable()\r\nexport class APIGatewayInterceptor implements HttpInterceptor {\r\n private dateRegex = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)(Z?)$/;\r\n private IsIphone: boolean;\r\n constructor(private session: SessionService,\r\n private deviceDetector: DeviceDetectorService,\r\n private Navigator: NavigatorService) {\r\n if (this.deviceDetector.browser == \"Safari\" || this.deviceDetector.device == \"ipad\" || this.deviceDetector.device == \"iphone\") this.IsIphone = true;\r\n }\r\n\r\n //Formats value for sending to the server, without time zone\r\n private ConvertToServerDate(value: Date): string {\r\n var D = new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds()));\r\n var S = D.toISOString();\r\n if (S.endsWith(\"Z\")) S = S.substring(0, S.length - 1);\r\n return S;\r\n }\r\n\r\n //Append headers for communication\r\n private AddHeaders(request: HttpRequest): HttpRequest {\r\n\r\n // Set language\r\n var lang;\r\n try {\r\n lang = localStorage.getItem('Language');\r\n } catch (e) { }\r\n if (!lang) { lang = EnumLanguages.Hebrew; }\r\n request = request.clone({ headers: request.headers.set('m4u-language', lang) });\r\n\r\n if (!this.session.IsLoggedIn) return request;\r\n \r\n if (request.method == 'POST' && request.detectContentTypeHeader() == null \r\n && (!request.params.has('autoContentType') || !request.params.get('autoContentType'))) { \r\n\r\n request = request.clone({ headers: request.headers.set('Content-Type', 'application/octet-stream') }); \r\n }\r\n\r\n return request.clone({ headers: request.headers.set('m4u-session', this.session.SessionID as any) });\r\n }\r\n\r\n //Intercept the request pipeline\r\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n //Append headers\r\n const httpRequest: HttpRequest = this.AddHeaders(request);\r\n\r\n //Turn on progress indicator\r\n if (this.GetTrackProgressHeader(httpRequest) != undefined) {\r\n SysGlobals.IsProgressTracking = true;\r\n SysGlobals.ProgressPercent = 0;\r\n }\r\n\r\n //Format dates on send\r\n this.FormatFields(httpRequest.body, 1);\r\n\r\n //Pipe request for additional handling\r\n return next.handle(httpRequest).pipe(\r\n tap((event: HttpEvent) => this.HandleEvent(httpRequest, event)),\r\n catchError((httpResponse: any) => this.HandleError(httpRequest, httpResponse)));\r\n }\r\n\r\n //Return response\r\n private GetErrorResponse(sError: string, responseCode: number): BaseResponse {\r\n var response = new BaseResponse;\r\n response.IsSuccess = false;\r\n response.ResponseCode = responseCode;\r\n response.ResponseMessage = RC(sError);\r\n return response;\r\n }\r\n\r\n //If error has occured, replace the response with an error\r\n private HandleError(httpRequest: HttpRequest, httpResponse: HttpErrorResponse) {\r\n //Handle according to error code\r\n var response: BaseResponse;\r\n switch (httpResponse.status) {\r\n case (0):\r\n //Means there is a communication problem. Did not get any response - write to console\r\n {\r\n response = this.GetErrorResponse(\"errorNetwork\", 999);\r\n console.error(`Server communication problem - check your network - ${httpRequest.url}`);\r\n console.error(httpResponse);\r\n break;\r\n }\r\n\r\n\r\n case (401):\r\n //Means user is invalid. Server will return the error as the body\r\n //Redirect to login page\r\n {\r\n response = httpResponse.error;\r\n // this.session.ClearSessionData();\r\n this.session.EndSession(() => { this.Navigator.Navigate(['/system/sessionexpired']); });\r\n break;\r\n }\r\n\r\n\r\n case (402):\r\n //Means we have license issues. Server will return the error as the body\r\n {\r\n response = httpResponse.error;\r\n break;\r\n }\r\n\r\n case (403):\r\n //Means that session has expired - Re-direct\r\n {\r\n response = this.GetErrorResponse(\"errorSessionExpired\", httpResponse.status);\r\n // this.session.ClearSessionData();\r\n this.session.EndSession(() => { this.Navigator.Navigate(['/system/sessionexpired']); })\r\n break;\r\n }\r\n\r\n\r\n case (412):\r\n //Means user is not authorized for this action - return to the caller as is\r\n {\r\n response = this.GetErrorResponse(\"errorUnauthorized\", httpResponse.status);\r\n break;\r\n }\r\n\r\n case (418):\r\n //Special case of a handled exception returned by the server. \r\n //Server will return the error as the body\r\n //The server has logged the exception anyway. Convert the received data\r\n {\r\n //Substitute data from the returned data\r\n response = httpResponse.error;\r\n if (response == null) response = new BaseResponse;\r\n response.ResponseCode = httpResponse.status;\r\n response.ResponseMessage = RC(\"errorUnexpected\", Utils.NZ(response.ResponseMessage));\r\n\r\n\r\n //Write to console\r\n console.error(`Server exception received: \\n ${Utils.NZ(response.ResponseMessage)} \\n ${Utils.NZ(response.ResponseExtendedMessage)}`);\r\n break;\r\n }\r\n case (419):\r\n //Means that MID is missing or wrong\r\n response = httpResponse.error;\r\n this.Navigator.Navigate(['/system/midstore']);\r\n break;\r\n\r\n case (423):\r\n //Password expired - logout, and redirect\r\n // this.session.LogoutAndResetSession();\r\n response = this.GetErrorResponse(\"errorPasswordExpired\", httpResponse.status);\r\n const userName = this.session.UserInfos && this.session.UserInfos.length ? this.session.UserInfos[0]?.Name : undefined;\r\n this.session.EndSession(() => { this.Navigator.Navigate(['/system/passwordchangeexpired'], { UserName: userName }); });\r\n break;\r\n\r\n default:\r\n //Unexpected errors\r\n {\r\n //Substitute data from the status code\r\n response = new BaseResponse;\r\n response.IsSuccess = false;\r\n response.ResponseCode = httpResponse.status;\r\n response.ResponseMessage = httpResponse.statusText;\r\n\r\n //Write to console\r\n let stack = new Error(httpResponse.message).stack;\r\n let errMsg = (httpResponse.message) ? httpResponse.message : httpResponse.status ? `${httpResponse.status} - ${httpResponse.statusText}` : 'Server error';\r\n console.error(errMsg);\r\n if (stack) console.error(stack);\r\n\r\n break;\r\n }\r\n }\r\n\r\n //Turn off progress indicator\r\n if (this.GetTrackProgressHeader(httpRequest) != undefined) SysGlobals.IsProgressTracking = false;\r\n\r\n //Return as observable\r\n return new Observable>((observer) => {\r\n var httpResponse = new HttpResponse({ body: response });\r\n observer.next(httpResponse);\r\n observer.complete();\r\n })\r\n\r\n }\r\n\r\n //Tap into HTTP events\r\n private HandleEvent(httpRequest: HttpRequest, httpEvent: HttpEvent) {\r\n //Handle request finish\r\n if (httpEvent instanceof HttpResponse) {\r\n //Format response data\r\n this.FormatFields(httpEvent.body, 2);\r\n\r\n //Turn off progress indicator\r\n if (this.GetTrackProgressHeader(httpRequest) != undefined) SysGlobals.IsProgressTracking = false;\r\n }\r\n\r\n //Progress tracking\r\n if (httpEvent.type == HttpEventType.DownloadProgress || httpEvent.type == HttpEventType.UploadProgress) {\r\n var track: EnumRequestProgressTracking = this.GetTrackProgressHeader(httpRequest);\r\n if (track != undefined) this.HandleTrackProgressEvent(httpEvent as HttpProgressEvent, track);\r\n }\r\n\r\n if (!httpRequest.context.get(SysGlobals.IgnoreSessionRefreshRequestToken)) {\r\n this.session.RefreshExpiredSessionTimeout();\r\n }\r\n }\r\n\r\n //Return the track progress header indicator\r\n private GetTrackProgressHeader(request: HttpRequest): EnumRequestProgressTracking {\r\n var header = request.headers.get(\"m4u-trackprogress\");\r\n return header ? header[0] as EnumRequestProgressTracking : undefined;\r\n }\r\n\r\n //Handle progress events\r\n private HandleTrackProgressEvent(event: HttpProgressEvent, TrackProgress: EnumRequestProgressTracking) {\r\n\r\n //If tracking should be disabled (shouldnt get here anyway)\r\n if (TrackProgress == EnumRequestProgressTracking.Send && event.type == HttpEventType.DownloadProgress) return;\r\n if (TrackProgress == EnumRequestProgressTracking.Receive && event.type == HttpEventType.UploadProgress) return;\r\n\r\n //Set the percent, depending on what we're tracking\r\n var fPercent: number = event.loaded / event.total * 100;\r\n if (TrackProgress == EnumRequestProgressTracking.Both) {\r\n if (event.type == HttpEventType.UploadProgress) fPercent = fPercent * 0.5;\r\n if (event.type == HttpEventType.DownloadProgress) fPercent = 50 + fPercent * 0.5;\r\n }\r\n\r\n //Set progress\r\n SysGlobals.ProgressPercent = fPercent;\r\n\r\n }\r\n\r\n //\r\n private FormatFields(object: Object, iDirection: number) {\r\n\r\n\r\n //Skip nulls\r\n if (!object || !(object instanceof Object)) return;\r\n\r\n\r\n //Recurse arrays\r\n if (object instanceof Array) {\r\n for (const item of object) {\r\n this.FormatFields(item, iDirection);\r\n }\r\n }\r\n\r\n\r\n for (const key of Object.keys(object)) {\r\n\r\n //Recurse arrays\r\n const value = object[key];\r\n if (value instanceof Array) {\r\n for (const item of value) {\r\n this.FormatFields(item, iDirection);\r\n }\r\n }\r\n\r\n //Recurse objects\r\n if (value instanceof Object) this.FormatFields(value, iDirection);\r\n\r\n //Format dates on sending to local date\r\n if (iDirection == 1) {\r\n if (value instanceof Date) object[key] = this.ConvertToServerDate(value);\r\n }\r\n\r\n //Format on receiving\r\n if (iDirection == 2) {\r\n\r\n //Format dates on receiving as Date object\r\n //Notice the special fix for iPHONE - otherwise dates are shifted by the timezone\r\n if (typeof value === 'string' && this.dateRegex.test(value)) {\r\n if (this.IsIphone && value != null) {\r\n object[key] = new Date(\r\n (+value.substring(0, 4)),\r\n (+value.substring(5, 7) - 1),\r\n (+value.substring(8, 10)),\r\n (+value.substring(11, 13)),\r\n (+value.substring(14, 16)),\r\n (+value.substring(17, 19)));\r\n }\r\n else {\r\n object[key] = new Date(value);\r\n }\r\n }\r\n\r\n //Replace null values returned by the server with undefined, to maintain consistancy\r\n if (value === null) object[key] = undefined;\r\n }\r\n }\r\n }\r\n}\r\n","import { CdkPortalOutletAttachedRef, Portal } from '@angular/cdk/portal';\r\nimport { Component, ComponentRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumSidebarStates, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n SidebarOpened: boolean;\r\n}\r\n\r\nexport type SidebarPosition = 'left' | 'right';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-side-bar',\r\n templateUrl: './side-bar.component.html',\r\n styleUrls: ['./side-bar.component.scss']\r\n})\r\nexport class SideBarComponent extends BaseComponent {\r\n\r\n Name: string;\r\n Title: string;\r\n ContentPortal: Portal;\r\n SidebarState: EnumSidebarStates;\r\n SidebarComponentOptions?: any;\r\n SidebarPinned: boolean;\r\n Width: EnumWindowSizes;\r\n Position: SidebarPosition;\r\n Class: string;\r\n\r\n get IsOpened() {\r\n return this.SidebarState === EnumSidebarStates.Opened;\r\n }\r\n\r\n get ShowPinButton() {\r\n return this.Name === 'Filters';\r\n }\r\n\r\n constructor(A: ServiceBagService, private sidebarService: SidebarService) {\r\n super(A, 'SideBarComponent', State);\r\n }\r\n\r\n ContentAttached(ref: CdkPortalOutletAttachedRef) {\r\n if (this.SidebarComponentOptions && ref instanceof ComponentRef) {\r\n Object.entries(this.SidebarComponentOptions).forEach(([key, value]) => {\r\n ref.instance[key] = value;\r\n });\r\n }\r\n }\r\n\r\n GetWidthClass() {\r\n const width = this.Width || EnumWindowSizes.WindowSmall;\r\n switch (width) {\r\n case EnumWindowSizes.WindowXSmall: return 'p-sidebar-xs';\r\n case EnumWindowSizes.WindowSmall: return 'p-sidebar-s';\r\n case EnumWindowSizes.WindowMedium: return 'p-sidebar-m';\r\n case EnumWindowSizes.WindowLarge: return 'p-sidebar-l';\r\n case EnumWindowSizes.WindowXLarge: return 'p-sidebar-xl';\r\n case EnumWindowSizes.WindowAutoSize: return 'auto';\r\n }\r\n }\r\n\r\n GetPositionClass() {\r\n return this.Position || (this.A.Screen.IsRTL() ? 'left' : 'right');\r\n }\r\n\r\n PinSidebar() {\r\n this.SidebarPinned = !this.SidebarPinned;\r\n }\r\n\r\n CloseSidebar() {\r\n this.sidebarService.Close(this.Name);\r\n }\r\n\r\n OnSidebarViewChanged(state: 'show' | 'hide') {\r\n const sidebarState = state === 'show' ? EnumSidebarStates.Opened : EnumSidebarStates.Closed;\r\n this.sidebarService.OnStateChanged(this.Name, sidebarState);\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ Title }}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\";","import { ComponentPortal, Portal, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ComponentFactoryResolver, Injectable, TemplateRef, Type, ViewContainerRef } from '@angular/core';\r\nimport { SideBarComponent, SidebarPosition } from '@m4u-angular/ui/layouts/layout/side-bar/side-bar.component';\r\nimport { Subject } from 'rxjs';\r\nimport { AppInjector } from '../injector/injector.module';\r\nimport { EnumSidebarStates, EnumWindowSizes } from './sysenums.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SidebarService {\r\n _sidebars: Record = {};\r\n public ViewContainerRef: ViewContainerRef;\r\n\r\n private _sidebarSubject = new Subject<{ SidebarName: string, State: EnumSidebarStates }>();\r\n readonly SidebarState = this._sidebarSubject.asObservable();\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {\r\n }\r\n\r\n Show(sidebarName: string, title: string, content: Type | TemplateRef, width?: EnumWindowSizes, \r\n componentOptions?: any, position? : SidebarPosition, className?: string) {\r\n let sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance || sidebarName === 'Filters') {\r\n sidebarInstance = this.CreateSidebarInstance();\r\n sidebarInstance.Name = sidebarName;\r\n sidebarInstance.Title = title;\r\n sidebarInstance.ContentPortal = this.ResolveContent(content);\r\n sidebarInstance.Width = width;\r\n sidebarInstance.SidebarComponentOptions = componentOptions;\r\n sidebarInstance.Position = position;\r\n sidebarInstance.Class = className;\r\n this._sidebars[sidebarName] = sidebarInstance;\r\n }\r\n \r\n sidebarInstance.SidebarState = EnumSidebarStates.Opened;\r\n }\r\n\r\n Hide(sidebarName: string): boolean {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n if (sidebarInstance.SidebarPinned) return false;\r\n \r\n sidebarInstance.SidebarState = EnumSidebarStates.Closed;\r\n return true;\r\n }\r\n\r\n Close(sidebarName: string) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n sidebarInstance.SidebarState = EnumSidebarStates.Closed;\r\n }\r\n\r\n GetState(sidebarName: string) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n return sidebarInstance && sidebarInstance.SidebarState;\r\n }\r\n\r\n OnStateChanged(sidebarName: string, state: EnumSidebarStates) {\r\n const sidebarInstance = this._sidebars[sidebarName];\r\n if (!sidebarInstance) return;\r\n\r\n if (sidebarInstance.SidebarState !== state) sidebarInstance.SidebarState = state;\r\n this._sidebarSubject.next({ SidebarName: sidebarName, State: state });\r\n }\r\n\r\n ClearSidebars() {\r\n Object.keys(this._sidebars).forEach(sidebarName => {\r\n this.Close(sidebarName);\r\n });\r\n this._sidebars = {};\r\n }\r\n\r\n DestroySidebar(sidebarName: string) {\r\n if (sidebarName && this._sidebars[sidebarName]) {\r\n this.Close(sidebarName);\r\n delete this._sidebars[sidebarName];\r\n }\r\n }\r\n\r\n private CreateSidebarInstance(): SideBarComponent {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(SideBarComponent);\r\n const componentRef = this.ViewContainerRef.createComponent(componentFactory);\r\n return componentRef.instance;\r\n }\r\n\r\n private ResolveContent(content: Type | TemplateRef): Portal {\r\n return content instanceof TemplateRef\r\n ? new TemplatePortal(content, this.ViewContainerRef)\r\n : new ComponentPortal(content, this.ViewContainerRef, AppInjector, this.componentFactoryResolver);\r\n }\r\n}","import { APP_BASE_HREF, DOCUMENT } from '@angular/common';\r\nimport { AfterViewInit, Component, HostBinding, Inject, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { MainMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { AppConfigService } from '@m4u-angular/configuration/app.config.service';\r\nimport { BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { SessionService, SessionStates } from '@m4u-angular/core/framework/session.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { combineLatest, filter, map, mergeMap, Subscription, take, takeWhile, tap } from 'rxjs';\r\nimport { BottomSheetProvider } from 'swipe-bottom-sheet/angular';\r\n\r\n@Component({\r\n selector: 'm4u-app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @HostBinding('class') get getClass() {\r\n return Object.keys(this.screen.Sizes).filter(cl => this.screen.Sizes[cl]).join(' ');\r\n }\r\n @ViewChild('sidebarContainer', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n @ViewChild('bottomSheetContainer', { read: ViewContainerRef }) bottomSheetContainerRef: ViewContainerRef;\r\n\r\n shouldGetInitialURL = true;\r\n initialURL: string;\r\n loadPanelVisible: boolean = false;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n private menuItems: MainMenuElement[];\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document,\r\n @Inject(APP_BASE_HREF) private baseUrl: string,\r\n public screen: ScreenService,\r\n private router: Router,\r\n private events: SysEventsService,\r\n private sessionService: SessionService,\r\n private appConfigService: AppConfigService,\r\n private sidebarService: SidebarService,\r\n private activatedRoute: ActivatedRoute,\r\n private bottomSheetService: BottomSheetService) {\r\n //bottomSheet: BottomSheetProvider,\r\n // vcRef: ViewContainerRef) {\r\n //bottomSheet.rootVcRef = vcRef;\r\n \r\n }\r\n\r\n ngOnInit() {\r\n // get initial url to select ccertain menu item.\r\n // cannot do it inside main cycle of handling routes cuz angular.ROUTES object raises this event earlier\r\n // that we make possible to handle it with all necessary data \r\n this.getInitialRoute();\r\n\r\n this._subscriptions.push(this.sessionService.sessionStateChanged$.subscribe(state => {\r\n if (state === SessionStates.Started) {\r\n this.handleRoutes();\r\n }\r\n }));\r\n this._subscriptions.push(this.events.LoadPanel.subscribe(visible => {\r\n this.loadPanelVisible = visible;\r\n if (visible) {\r\n setTimeout(() => {\r\n if (this.loadPanelVisible) this.loadPanelVisible = false;\r\n }, 3000);\r\n }\r\n }));\r\n\r\n if (this.baseUrl) {\r\n const baseElements = this.document.getElementsByTagName('base');\r\n\r\n if (baseElements.length > 0) {\r\n baseElements[0].setAttribute('href', this.baseUrl);\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.sidebarService.ViewContainerRef = this.containerRef;\r\n this.bottomSheetService.ViewContainerRef = this.bottomSheetContainerRef;\r\n }\r\n\r\n getSelectedMenuItem(menuItems: MainMenuElement[], selectedRoute: string): MainMenuElement {\r\n let selectedMenuItem;\r\n menuItems.forEach(menuItem => {\r\n if (menuItem.path === selectedRoute) {\r\n selectedMenuItem = menuItem;\r\n return;\r\n }\r\n if (!selectedMenuItem && menuItem.items) selectedMenuItem = this.getSelectedMenuItem(menuItem.items, selectedRoute);\r\n });\r\n return selectedMenuItem;\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n handleNavigationEnd(selectedRoute: string) {\r\n const selectedMenuItem = this.getSelectedMenuItem(this.menuItems, selectedRoute);\r\n this.events.ChangeSelectedRoute(selectedMenuItem && selectedMenuItem.menu);\r\n }\r\n\r\n getInitialRoute() {\r\n // getting \r\n this.router.events\r\n .pipe(\r\n takeWhile(x => this.shouldGetInitialURL),\r\n filter(event => event instanceof NavigationEnd))\r\n .subscribe(event => {\r\n if (this.shouldGetInitialURL) {\r\n if (this.menuItems) {\r\n this.shouldGetInitialURL = false;\r\n } else {\r\n this.initialURL = this.GetCurrentUrl();\r\n }\r\n }\r\n });\r\n }\r\n\r\n handleRoutes() {\r\n // Only after session starts get menu items\r\n this._subscriptions.push(\r\n combineLatest([this.appConfigService.AppConfig.OnGetMenu(this.sessionService.UserInfoDict), \r\n this.appConfigService.AppConfig.OnGetNavbarItems(this.sessionService.UserInfoDict)])\r\n .pipe(\r\n map(([menuItems, navbarItems]) => [...menuItems, ...navbarItems]),\r\n take(1),\r\n tap(x => {\r\n this.menuItems = x;\r\n if (this.initialURL) {\r\n this.shouldGetInitialURL = false;\r\n this.handleNavigationEnd(this.initialURL);\r\n this.initialURL = null;\r\n }\r\n }),\r\n mergeMap(() => this.router.events),\r\n filter(event => event instanceof NavigationEnd))\r\n .subscribe(event => {\r\n this.shouldGetInitialURL = false;\r\n this.handleNavigationEnd(this.GetCurrentUrl());\r\n })\r\n );\r\n }\r\n\r\n private GetCurrentUrl() {\r\n let route = this.activatedRoute;\r\n let urlSegments = route.snapshot.url;\r\n // get the bottom route and url by all the tree\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n urlSegments = [...urlSegments, ...route.snapshot.url];\r\n }\r\n if (route.snapshot.params && route.snapshot.params.EntryID && !route.snapshot.data.IsExternal) {\r\n const entryIdUrlSegment = urlSegments.find(x => x.path === route.snapshot.params.EntryID);\r\n entryIdUrlSegment && (urlSegments = urlSegments.filter(x => x !== entryIdUrlSegment));\r\n }\r\n const url = urlSegments.map(x => x.path).join('/');\r\n return `/${url.substring(0, url.indexOf('_') - 1)}${url.substring(url.lastIndexOf('_') + 1)}`;\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'm4u-empty-layout',\r\n templateUrl: './emptylayout.component.html',\r\n styleUrls: ['./emptylayout.component.scss']\r\n})\r\nexport class EmptyLayoutComponent {\r\n constructor(public screen: ScreenService) {\r\n\r\n }\r\n}","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MessageBoxOptions } from '@base/classes/BaseClasses';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumMenuPositions } from '@core/framework/sysenums.enum';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'm4u-mainlayout',\r\n templateUrl: './mainlayout.component.html',\r\n styleUrls: ['./mainlayout.component.scss']\r\n})\r\nexport class MainLayoutComponent implements OnInit, OnDestroy {\r\n @ViewChild('messageBox') messageBoxDialog: MessageBoxDialogComponent;\r\n\r\n MenuOpened = false;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(public screen: ScreenService,\r\n private events: SysEventsService,\r\n private ui: UiService) {\r\n this._subscriptions.push(this.events.OpenMessageBoxSubject.subscribe((options: MessageBoxOptions) => {\r\n this.OpenMessageBoxDialog(options);\r\n }));\r\n }\r\n\r\n ngOnInit() {\r\n this._subscriptions.push(this.events.MenuPositon.subscribe(p => this.SetMenuPositon(p)));\r\n }\r\n\r\n SetMenuPositon(position?: EnumMenuPositions) {\r\n if (!position) {\r\n this.MenuOpened = !this.MenuOpened;\r\n this.events.SetMenuPositon(this.MenuOpened ? EnumMenuPositions.Open : EnumMenuPositions.Close);\r\n } else {\r\n this.MenuOpened = position === EnumMenuPositions.Open;\r\n }\r\n }\r\n\r\n OpenMessageBoxDialog(options: MessageBoxOptions) {\r\n this.messageBoxDialog.Type = options.Type;\r\n this.messageBoxDialog.Prompt = options.Prompt;\r\n this.messageBoxDialog.ShowDialogShort(() => { \r\n this.ui.CloseMessageBox(true); \r\n }, () => { \r\n this.ui.CloseMessageBox(false); \r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, ComponentFactoryResolver, Input, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ContextMenuElement, MainMenuElement } from '@base/classes/BaseClasses';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.enum';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxTreeViewComponent } from 'devextreme-angular/ui/tree-view';\r\nimport { VersionDescriptor } from '@m4u-angular/configuration/app.config.service';\r\nimport { LoginEndpoint } from '@m4u-angular/core/endpoints/login.endpoint';\r\nimport { EnumLanguages, EnumMenuPositions, EnumMessageBoxTypes, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { Subscription } from 'rxjs';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\n\r\nclass MenuTooltip {\r\n Target: Element;\r\n Content: string;\r\n Visible: boolean;\r\n}\r\n\r\nclass State extends BaseState {\r\n ModulesVersion: VersionDescriptor[] = [];\r\n MenuItems: MainMenuElement[] = [];\r\n MenuTooltip: MenuTooltip = new MenuTooltip;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-navmenu',\r\n templateUrl: './navmenu.component.html',\r\n styleUrls: ['./navmenu.component.scss']\r\n})\r\nexport class NavMenuComponent extends BaseComponent {\r\n @ViewChild(DxTreeViewComponent, { static: true }) menu: DxTreeViewComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n @ViewChild('dynamicContainer', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n private _menuOpened = false;\r\n @Input() set MenuOpened(value) {\r\n if (value === this._menuOpened) return;\r\n\r\n this._menuOpened = value;\r\n if (!this.MenuInstance) return;\r\n if (!value) this.MenuInstance.collapseAll();\r\n else this.ExpandParentItems();\r\n }\r\n get MenuOpened() {\r\n return this._menuOpened;\r\n }\r\n\r\n private get MenuInstance() {\r\n const menuInstance = this.menu && this.menu.instance;\r\n if (menuInstance && !menuInstance['_contentReadyAction']) menuInstance['_initContentReadyAction']();\r\n return menuInstance;\r\n }\r\n\r\n UserMenuItems: ContextMenuElement[] = [];\r\n private _selectedItem: string;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private resourcesService: ResourcesService,\r\n private loginEndpoint: LoginEndpoint,\r\n private languageService: LanguageService,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'NavMenuComponent', State);\r\n }\r\n\r\n OnOpenContactUs;\r\n\r\n override OnInitComponent() {\r\n this.InitMenuItems();\r\n\r\n this._subscriptions.push(this.A.SysEvents.MenuItems.subscribe((isNeedToReload) => {\r\n if (isNeedToReload) {\r\n this.InitializeItems();\r\n this.MenuInstance && this.MenuInstance.repaint();\r\n }\r\n }));\r\n\r\n this.State.ModulesVersion = this.A.AppConfigService.getModulesVersion();\r\n \r\n this.UserMenuItems = this.GetUserMenuItems();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this._subscriptions.push(this.A.SysEvents.SelectedRoute.subscribe(selectedRoute => {\r\n this._selectedItem = selectedRoute;\r\n this.MenuInstance && this.MenuInstance.selectItem(selectedRoute);\r\n }));\r\n\r\n SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n if (x.TargetComponentType !== 'contact-us') return;\r\n\r\n if (x.IsVisibleButton && !x.IsVisibleButton({ DisplayMode: EnumPageDisplayModes.FullScreen } as BasePageComponent)) {\r\n return;\r\n }\r\n\r\n // Resolve an injectable component\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n const componentRef = this.containerRef.createComponent>(componentFactory);\r\n\r\n this.OnOpenContactUs = () => componentRef.instance.BaseAction();\r\n });\r\n }\r\n\r\n InitMenuItems() {\r\n this._subscriptions.push(this.A.AppConfigService.AppConfig.OnGetMenu(this.A.Session.UserInfoDict)\r\n .subscribe(items => {\r\n this.State.MenuItems = items;\r\n this.InitializeItems();\r\n })\r\n );\r\n }\r\n\r\n ToggleMenu() {\r\n this.MenuOpened = !this.MenuOpened;\r\n this.A.SysEvents.SetMenuPositon(this.MenuOpened ? EnumMenuPositions.Open : EnumMenuPositions.Close);\r\n }\r\n\r\n GetUserMenuItems = (): any[] => {\r\n const showPasswordChangeLink = this.A.Framework.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordChange);\r\n const langs = this.resourcesService.LIST('Languages').filter(item => item.Value !== SysGlobals.Language).map(item => ({\r\n label: item.Text,\r\n visible: true,\r\n command: () => this.SwitchLanguage(item.Value as EnumLanguages)\r\n }));\r\n\r\n return [{\r\n label: this.RC('btnContactUs'),\r\n visible: !!this.OnOpenContactUs,\r\n command: this.OnOpenContactUs\r\n }, {\r\n label: this.RC('btnChangePassword'),\r\n visible: showPasswordChangeLink,\r\n command: this.OnChangePassword.bind(this)\r\n },\r\n ...langs,\r\n {\r\n label: this.RC('btnLogout'),\r\n visible: true,\r\n command: this.OnLogout.bind(this)\r\n }];\r\n };\r\n\r\n IsUserMenuOpened(cm) {\r\n return cm?.containerViewChild?.nativeElement?.style?.display == 'block';\r\n }\r\n\r\n InitializeItems() {\r\n this.State.MenuItems.forEach(menu => this.InitializeItem(menu));\r\n this.MenuInstance && this.MenuInstance.option('items', this.State.MenuItems);\r\n }\r\n\r\n InitializeItem(menu: MainMenuElement) {\r\n menu.text = this.GetMenuTranslation(menu);\r\n this.InitMenuItem(menu);\r\n\r\n if (menu.items) menu.items.forEach(x => this.InitializeItem(x));\r\n }\r\n\r\n InitMenuItem(menu: MainMenuElement) {\r\n const menuUserInfo = menu.moduleName && this.A.Session.UserInfoDict[menu.moduleName];\r\n const permissionResult = Utils.IsEmpty(menu.permission)\r\n ? true\r\n : menuUserInfo && menuUserInfo.hasOwnProperty(menu.permission) && menuUserInfo[menu.permission];\r\n const permissionFunctionResult = Utils.IsEmpty(menu.permissionFunction)\r\n ? true\r\n : menu.permissionFunction(menuUserInfo);\r\n menu.visible = !!permissionResult && permissionFunctionResult;\r\n \r\n // add 'rtl' class for custom icons in RTL\r\n if (this.A.Screen.IsRTL() && menu.icon && menu.icon.startsWith('m4u-ico')) menu.icon = `${menu.icon} rtl`;\r\n\r\n // set common icon for folders if it is empty\r\n if (menu.items && Utils.IsEmpty(menu.icon)) menu.icon = 'mdi mdi-folder-open';\r\n\r\n // hide main menu elements for mobile\r\n if (this.A.Screen.IsMobile()) menu.visible = menu.visible && (menu.isVisibleOnMobile == undefined ? true : menu.isVisibleOnMobile);\r\n\r\n if (this._selectedItem && this._selectedItem === menu.menu) {\r\n (menu as any).selected = true;\r\n }\r\n }\r\n\r\n ExpandParentItems() {\r\n if (!this.MenuInstance || !this._menuOpened) return;\r\n\r\n const parentMenus = this.GetParentMenus();\r\n parentMenus.forEach(x => this.MenuInstance.expandItem(x));\r\n }\r\n\r\n GetParentMenus() {\r\n const search = (parents, item: MainMenuElement): string[] => item.menu === this._selectedItem\r\n ? [...parents]\r\n : item.items?.length > 0 ? item.items.reduce((acc, child) => acc.concat(search([...parents, item.menu], child)), []) : [];\r\n\r\n let parentMenus = [];\r\n this.State.MenuItems.filter(x => x.items?.length).forEach(x => {\r\n parentMenus = [...parentMenus, ...search([], x)];\r\n });\r\n return parentMenus;\r\n }\r\n\r\n GetMenuTranslation(menu: MainMenuElement) {\r\n const menuWithoutModule = menu.menu.substring(menu.menu.indexOf(\".\") + 1, menu.menu.length);\r\n return menu.text || this.A.ResourcesService.RC(`$$Pages.${menuWithoutModule}`, menu.moduleName);\r\n }\r\n\r\n OnItemClick(event: any) {\r\n // Do nothing if menu was already selected\r\n if (event.node.selected) return;\r\n\r\n // If menu closed and it the highest level and it has children then just open it\r\n if (!this.MenuOpened && !event.node.parent && event.itemData.items) {\r\n this.A.SysEvents.SetMenuPositon(EnumMenuPositions.Open);\r\n return;\r\n }\r\n\r\n // Do nothing if menu path is empty\r\n const menu = event.itemData;\r\n \r\n if (menu.click && typeof menu.click === 'function') {\r\n menu.click();\r\n return;\r\n }\r\n\r\n if (!menu.path) return;\r\n\r\n const menuUserInfo = menu.moduleName ? this.A.Session.UserInfoDict[menu.moduleName] : this.A.Session.UserInfos[0];\r\n const pathParams = menu.pathParams && menu.pathParams(menuUserInfo) || [];\r\n\r\n this.routeHistoryService.ClearHistory();\r\n // Navigate my menu path and params\r\n this.A.Navigator.Navigate([menu.path, pathParams], menu.queryParams || null).then(() => {\r\n // Close menu after navigation\r\n if (this.MenuOpened) this.A.SysEvents.SetMenuPositon(EnumMenuPositions.Close);\r\n });\r\n }\r\n\r\n OnContentReady(e: any) {\r\n const elements = e.component.element().querySelectorAll('.dx-treeview-item');\r\n elements.forEach((el, index) => {\r\n if (!this.State.MenuItems || !this.State.MenuItems[index]) return;\r\n\r\n el.addEventListener('mouseenter', event => {\r\n if (this.MenuOpened) return;\r\n\r\n const target = event.target as Element;\r\n this.State.MenuTooltip = {\r\n Target: document.querySelector(`${Array.from(target.classList).map(x => `.${x}`).join('')} .menu-icon-container`),\r\n Content: this.State.MenuItems[index]?.text,\r\n Visible: !!target\r\n };\r\n });\r\n el.addEventListener('mouseleave', event => this.State.MenuTooltip = new MenuTooltip);\r\n });\r\n }\r\n\r\n GetMenuIconElement(element: Element) {\r\n if (!element) return null;\r\n if (element.classList.contains('menu-icon-container') || !element.children || !element.children.length) return element;\r\n\r\n const r = Array.from(element.children).find(x => this.GetMenuIconElement(x));\r\n return r;\r\n }\r\n\r\n GetVersion(): string {\r\n return `S-${this.A.Framework.CompanyInfo.ServerVersion} : C-${Utils.NZ(this.A.Framework.CompanyInfo.ClientVersion)}`;\r\n }\r\n\r\n GetDisplayUserName(): string {\r\n if (this.A.Session.DisplayUserName == undefined) return '';\r\n return this.A.Session.DisplayUserName.substring(0, 25);\r\n }\r\n\r\n GetDisplayUserDescription(): string {\r\n return Utils.NZ(this.A.Session.DisplayUserDescription, this.RC('lblUser')).substring(0, 25);\r\n }\r\n\r\n OnShowUserMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n cm.toggle(event);\r\n }\r\n\r\n OnChangePassword() {\r\n this.Navigate(['/system/passwordchange']);\r\n }\r\n\r\n OnLogout() {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('msgLogoutQuestion');\r\n this.messageBox.ShowDialogShort(() => {\r\n this.Navigate(['/system/logout']);\r\n });\r\n }\r\n\r\n GetAppTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('AppTitles.General', moduleName);\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.A.AppConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n SwitchLanguage(language: EnumLanguages) {\r\n this.languageService.SetLanguage(language);\r\n this._subscriptions.push(this.loginEndpoint.ChangeLanguage(language).subscribe((response: BaseResponse) => {\r\n if (response.IsSuccess) window.location.reload();\r\n }));\r\n }\r\n\r\n override OnDestroyComponent() {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{ GetAppTitle() }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n {{State.MenuTooltip.Content}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{data.text}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\\"\\\"\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{GetDisplayUserDescription()}}
\\r\\n
\\r\\n {{GetDisplayUserName()}}\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{version.moduleName}}: {{version.major}}.{{version.minor}}.{{version.build}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\n\r\n@Component({\r\n selector: 'm4u-progresspanel',\r\n templateUrl: 'progresspanel.component.html',\r\n styleUrls: ['./progresspanel.component.scss']\r\n})\r\n\r\nexport class ProgressPanelComponent extends BaseComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'ProgressPanelComponent', BaseState);\r\n }\r\n\r\n IsVisible(): boolean {\r\n return SysGlobals.IsProgressTracking;\r\n }\r\n\r\n GetText = (ratio: number, value: number): string => {\r\n return Math.round(ratio * 100) + '%' + ' ' + this.RC('progressIndicator');\r\n }\r\n\r\n GetValue(): number {\r\n return SysGlobals.ProgressPercent;\r\n }\r\n\r\n}\r\n\r\n","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";"," import CustomStore from \"devextreme/data/custom_store\";\r\n\r\nimport { BaseEntitiesResponse, BaseEntity, BaseDataResponse, BaseResponse, BaseEntityResponse } from \"../entities/BaseEntities\";\r\nimport { FrameworkService } from \"@core/framework/framework.service\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { map, Observable } from 'rxjs';\r\n import {UiService} from '@core/framework/ui.service';\r\n\r\n\r\nexport abstract class BaseDataStoreAbstract\r\n{\r\n protected m_store: CustomStore;\r\n public get Store(): CustomStore\r\n {\r\n return this.m_store;\r\n }\r\n\r\n //Convert the response we get from our webservice to what devexpress is expecting (array of objects)\r\n protected ShapeResponse(response: Observable): any\r\n {\r\n return response.pipe(\r\n map((resultObject: any) =>\r\n {\r\n //Make sure result is success\r\n if (!(resultObject as BaseResponse).IsSuccess)\r\n {\r\n AppInjector.get(UiService).UnexpectedMessage((resultObject as BaseResponse).ResponseMessage);\r\n return [];\r\n }\r\n\r\n //Return the internal field\r\n if ((resultObject as BaseEntitiesResponse).Entities != undefined) return (resultObject as BaseEntitiesResponse).Entities;\r\n if ((resultObject as BaseDataResponse).Data != undefined) return (resultObject as BaseDataResponse).Data;\r\n if ((resultObject as BaseEntityResponse).Entity != undefined) return (resultObject as BaseEntityResponse).Entity;\r\n\r\n //If got here, something is wrong\r\n console.error(resultObject);\r\n console.error(\"Invalid response was returned\");\r\n return [];\r\n })).toPromise();\r\n } \r\n}\r\n","import { Utils } from \"@core/helpers/Utils\";\r\n\r\nexport class DataLoadOptions\r\n{\r\n\r\n //Member variables\r\n private Search: string\r\n private SearchFields: string[]\r\n private Sort: string\r\n private IsSortDescending: boolean;\r\n private Skip: number\r\n private Take: number\r\n private ComplexFilter: string;\r\n private DistinctField: string\r\n\r\n //Convert the loadOptions received from DevExpress controls to a structure we can recognize\r\n constructor(loadOptions: any)\r\n {\r\n //If empty object was passed, means we in raw mode and do not need this at all\r\n if (loadOptions == undefined) return;\r\n\r\n //Parse search \r\n if (!Utils.IsEmpty(loadOptions.searchValue))\r\n {\r\n this.Search = loadOptions.searchValue;\r\n this.SearchFields = loadOptions.searchExpr;\r\n }\r\n\r\n //Parse complex filter\r\n if (!Utils.IsEmpty(loadOptions.filter) && typeof loadOptions.filter !== 'function')\r\n {\r\n this.ComplexFilter = (JSON.stringify({ Filter: loadOptions.filter }));\r\n }\r\n\r\n //Parse sort - can come as an array or simple field name\r\n if (!Utils.IsEmpty(loadOptions.sort) )\r\n {\r\n if (Array.isArray(loadOptions.sort))\r\n {\r\n this.Sort = loadOptions.sort[0].selector;\r\n this.IsSortDescending = loadOptions.sort[0].desc;\r\n }\r\n else\r\n {\r\n this.Sort = loadOptions.sort;\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n //Parse search \r\n if (!Utils.IsEmpty(loadOptions.dataField)) this.DistinctField = loadOptions.dataField;\r\n\r\n\r\n //Parse take/skip\r\n if (!Utils.IsEmpty(loadOptions.skip)) this.Skip = loadOptions.skip;\r\n if (!Utils.IsEmpty(loadOptions.take)) this.Take = loadOptions.take;\r\n\r\n }\r\n \r\n //Return the load options as a query string \r\n public GetLoadOptions(): any\r\n {\r\n\r\n //Sort+Search\r\n var result: any = {};\r\n if (!Utils.IsEmpty(this.Search) && !Utils.IsEmpty(this.SearchFields))\r\n {\r\n result.DLOSearch = this.Search;\r\n result.DLOSearchFields = this.SearchFields;\r\n }\r\n if (!Utils.IsEmpty(this.Sort))\r\n {\r\n result.DLOSort = this.Sort;\r\n if (this.IsSortDescending) result.DLOIsSortDescending = 1;\r\n }\r\n\r\n //Skip+Take\r\n if (this.Skip > 0) result.DLOSkip = this.Skip;\r\n if (this.Take > 0) result.DLOTake = this.Take;\r\n\r\n if (!Utils.IsEmpty(this.ComplexFilter)) result.DLOComplexFilter = this.ComplexFilter;\r\n if (!Utils.IsEmpty(this.DistinctField)) result.DLODistinctField = this.DistinctField;\r\n\r\n return result;\r\n }\r\n\r\n\r\n}\r\n","import { APIGatewayService } from '@core/gateway/APIGateway.service';\r\nimport CustomStore from \"devextreme/data/custom_store\";\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { BaseDataStoreAbstract } from './BaseDataStoreAbstract';\r\nimport { Observable } from 'rxjs';\r\nimport { DataLoadOptions } from './DataLoadOptions';\r\n\r\n\r\nexport class BaseDataStoreReadOnly extends BaseDataStoreAbstract\r\n{\r\n private api: APIGatewayService;\r\n\r\n constructor(\r\n private ControllerName?: string,\r\n private ActionName?: string,\r\n private QueryParams?: any,\r\n private customLoadAction?: (options?: DataLoadOptions) => Observable,\r\n private customGetAction?: (Value: any) => Observable,\r\n // @ts-ignore\r\n private OnLoadedHandler?: (Data: any[]) => void,\r\n private IsRaw: boolean = true,\r\n // @ts-ignore\r\n private KeyFieldName: any = \"EntryID\")\r\n {\r\n //Base\r\n super();\r\n\r\n //Cannot inject in constructor since we create the class manually\r\n this.api = AppInjector.get(APIGatewayService);\r\n\r\n //Create custom store. Separated because of ByKey callback, does not work if put together conditionally\r\n if (this.IsRaw)\r\n {\r\n this.m_store = new CustomStore({\r\n key: KeyFieldName,\r\n loadMode: \"raw\",\r\n load: () => this.ImplementLoad(undefined),\r\n onLoaded: (data) => OnLoadedHandler ? OnLoadedHandler(data) : {}\r\n });\r\n\r\n }\r\n else\r\n {\r\n this.m_store = new CustomStore({\r\n key: KeyFieldName,\r\n loadMode: \"processed\",\r\n load: (loadOptions) => this.ImplementLoad(loadOptions),\r\n byKey: (Value) => this.ImplementByKey(Value),\r\n onLoaded: (data) => OnLoadedHandler ? OnLoadedHandler(data) : {}\r\n });\r\n }\r\n \r\n\r\n }\r\n\r\n //Perform the actual load\r\n private ImplementLoad(loadOptions): Promise\r\n {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n if (this.customLoadAction == undefined)\r\n {\r\n return this.ShapeResponse(this.api.ExecuteGetAction(this.ControllerName, this.ActionName, { ...this.QueryParams, ...options.GetLoadOptions() }));\r\n }\r\n else\r\n {\r\n return this.ShapeResponse(this.customLoadAction(options));\r\n }\r\n }\r\n\r\n //Get data by key\r\n private ImplementByKey(Value: any): Promise\r\n {\r\n return this.ShapeResponse(this.customGetAction(Value));\r\n }\r\n}\r\n","import { BaseEntity } from '../entities/BaseEntities';\r\nimport CustomStore from \"devextreme/data/custom_store\";\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BaseDataStoreAbstract } from './BaseDataStoreAbstract';\r\nimport { DataLoadOptions } from './DataLoadOptions';\r\n\r\n\r\nexport class BaseDataStoreCRUD extends BaseDataStoreAbstract\r\n{\r\n constructor(private endpoint: BaseEndpointCRUD)\r\n {\r\n //Call base\r\n super();\r\n\r\n this.m_store = new CustomStore({\r\n key: \"EntryID\",\r\n loadMode: \"processed\",\r\n load: (loadOptions) => this.ImplementLoad(loadOptions),\r\n byKey: (Value) => this.ImplementByKey(Value),\r\n totalCount: (loadOptions) => this.ImplementTotalCount(loadOptions)\r\n });\r\n }\r\n\r\n //Perform the actual load\r\n private ImplementLoad(loadOptions): Promise\r\n {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n //Return data from the service\r\n return this.ShapeResponse(this.endpoint.GetList(options));\r\n }\r\n\r\n //Get data by key\r\n private ImplementByKey(Value: any): Promise\r\n {\r\n return this.ShapeResponse(this.endpoint.Get(Value));\r\n }\r\n\r\n private ImplementTotalCount(loadOptions): Promise\r\n {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n //Return data from the service\r\n return this.ShapeResponse(this.endpoint.Count(options));\r\n }\r\n}","import CustomStore from \"devextreme/data/custom_store\";\r\nimport DataSource from \"devextreme/data/data_source\";\r\nimport { Observable, from, of } from \"rxjs\";\r\nimport { BaseEntity } from \"../entities/BaseEntities\";\r\nimport { BaseDataStoreAbstract } from \"./BaseDataStoreAbstract\";\r\n\r\nexport abstract class BaseDataSourceAbstract\r\n{\r\n private m_DataSource: DataSource;\r\n\r\n constructor(private m_DataStore: BaseDataStoreAbstract, customOptions?:any)\r\n {\r\n \r\n this.m_DataSource = new DataSource(\r\n {\r\n ...\r\n {\r\n store: m_DataStore.Store,\r\n pageSize: 30\r\n },\r\n ...\r\n customOptions\r\n });\r\n }\r\n\r\n public get IsLoaded(): boolean {\r\n return this.m_DataSource.isLoaded();\r\n }\r\n\r\n public get Data(): DataSource\r\n {\r\n return this.m_DataSource;\r\n }\r\n\r\n public get Store(): CustomStore\r\n {\r\n return this.m_DataStore.Store;\r\n }\r\n\r\n public get Items(): any[]\r\n {\r\n if (!this.IsLoaded) this.m_DataSource.load();\r\n return this.m_DataSource.items();\r\n }\r\n\r\n public GetItemsAsync(): Observable\r\n {\r\n this.m_DataSource.paginate(false);\r\n if (!this.IsLoaded) return from(this.m_DataSource.load().then(items => items));\r\n return of(this.m_DataSource.items());\r\n }\r\n\r\n public FindAsync(Key: any): Observable\r\n {\r\n if (Key == null || Key == undefined) \r\n {\r\n console.error(\"Trying to find an empty key\");\r\n };\r\n return from(this.Store.byKey(Key));\r\n }\r\n\r\n //Performs synchronous search on the datasource. Can be used only with raw datasources that has already been loaded\r\n public Find(Key: any): TEntity\r\n {\r\n return (this.Data.items() as TEntity[]).find(x => x.EntryID == Key);\r\n }\r\n\r\n public GetCount(): Observable\r\n {\r\n return from(this.Store.totalCount(undefined));\r\n }\r\n\r\n public Reload() : Observable\r\n {\r\n return from(this.Data.reload());\r\n }\r\n\r\n public AddEventListener(eventName: string, action: (e?: any) => void) {\r\n this.m_DataSource.on(eventName as any, action);\r\n }\r\n}\r\n","import { BaseEntity, BaseResponse } from '../entities/BaseEntities';\r\nimport CustomStore from 'devextreme/data/custom_store';\r\nimport { BaseEndpointCRUD } from '../endpoint/BaseEndpointCRUD';\r\nimport { BaseDataStoreAbstract } from './BaseDataStoreAbstract';\r\nimport { DataLoadOptions } from './DataLoadOptions';\r\nimport { map } from \"rxjs/operators\";\r\nimport { AppInjector } from '@core/injector/injector.module';\r\nimport { FrameworkService } from '@core/framework/framework.service';\r\nimport {UiService} from '@core/framework/ui.service';\r\n\r\nexport class BaseDataStoreCRUDServer extends BaseDataStoreAbstract\r\n{\r\n\r\n // @ts-ignore\r\n constructor(private endpoint: BaseEndpointCRUD, private isRaw: boolean = true, private customLoadAction?: (options?: DataLoadOptions) => Observable)\r\n {\r\n //Call base\r\n super();\r\n\r\n this.m_store = new CustomStore({\r\n key: \"EntryID\",\r\n loadMode: isRaw ? \"raw\": \"processed\",\r\n load: (loadOptions) => this.ImplementLoad(loadOptions),\r\n byKey: (Value) => this.ImplementByKey(Value),\r\n update: (key, entity) => this.ImplementUpdate(key, entity),\r\n remove: (key) => this.ImplementRemove(key),\r\n insert: (entity) => this.ImplementInsert(entity)\r\n });\r\n }\r\n\r\n private ImplementLoad(loadOptions): Promise {\r\n //Prepare options object\r\n var options = new DataLoadOptions(loadOptions);\r\n\r\n if (this.customLoadAction == undefined) {\r\n return this.ShapeResponse(this.endpoint.GetList(options));\r\n }\r\n else {\r\n return this.ShapeResponse(this.customLoadAction(options));\r\n }\r\n }\r\n\r\n //Get data by key\r\n private ImplementByKey(Value: any): Promise\r\n {\r\n return this.ShapeResponse(this.endpoint.Get(Value));\r\n }\r\n\r\n private ImplementInsert(entity: TEntity)\r\n {\r\n return this.ShapeResponse(this.endpoint.Save(entity));\r\n }\r\n\r\n private ImplementUpdate(key: number, newEntity: TEntity): Promise\r\n {\r\n let data = >(this.Store).__rawData;\r\n if (data) {\r\n const oldEntity = data.filter(r => r.EntryID === key)[0];\r\n const entity = { ...oldEntity, ...newEntity };\r\n return this.ShapeResponse(this.endpoint.Save(entity));\r\n }\r\n\r\n return this.Store.byKey(key).then((value) => {\r\n const oldEntity = value;\r\n const entity = { ...oldEntity, ...newEntity };\r\n return this.ShapeResponse(this.endpoint.Save(entity));\r\n });\r\n }\r\n\r\n private ImplementRemove(entryID: number): Promise\r\n {\r\n return this.endpoint.Delete(entryID).pipe(\r\n map((resultObject: any) =>\r\n {\r\n //Make sure result is success\r\n if (!(resultObject as BaseResponse).IsSuccess)\r\n {\r\n AppInjector.get(UiService).StopMessage((resultObject as BaseResponse).ResponseMessage);\r\n return false;\r\n }\r\n })).toPromise();\r\n }\r\n}\r\n","import { BaseDataStoreReadOnly } from \"./BaseDataStoreReadOnly\";\r\nimport { BaseEntity } from \"../entities/BaseEntities\";\r\nimport { BaseDataStoreCRUD } from \"./BaseDataStoreCRUD\";\r\nimport { BaseEndpointCRUD } from \"../endpoint/BaseEndpointCRUD\";\r\nimport { BaseDataSourceAbstract } from \"./BaseDataSourceAbstract\";\r\nimport { BaseDataStoreAbstract } from \"./BaseDataStoreAbstract\";\r\nimport { Observable } from \"rxjs\";\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { DataLoadOptions } from \"./DataLoadOptions\";\r\nimport { Utils } from \"@core/helpers/Utils\";\r\nimport { GenericListEndpoint } from \"@core/endpoints/genericlist.endpoint\";\r\nimport { BaseEndpoint } from '../endpoint/BaseEndpoint';\r\nimport { Type } from '@angular/core';\r\nimport { BaseDataStoreCRUDServer } from \"./BaseDataStoreCRUDServer\";\r\n\r\n\r\n\r\n/*\r\n The idea is as follows:\r\n There are 2 objects - datasource and datastore\r\n Datastore defines the data\r\n Datasource defines the query to the data\r\n In reality, they are linked close together\r\n There are 6 datastore types to help construction them fast\r\n Each also creates a new datastore inside\r\n\r\n Basically the choices are between :\r\n 1. Calling a method on the WebAPI directly (Direct, DirectService)\r\n 2. Calling a method on a service in code (CustomAction)\r\n 3. Accessing a generic list data provider (GenericListI, GenericListS)\r\n 4. Accessing the data through a CRUD service's Load() for it's respective entity\r\n\r\nThe datasources can be defined in two places:\r\n1. In the component constructor - in the DataSources array \r\n2. In Init.ts, defined as a global datasource that is accessible from all components\r\n\r\nThe data is loaded into the datasource once per it's lifetime\r\nThere are 3 types of datasources - \"stupid/raw\" and \"smart\" ones:\r\n1. The stupid datasources only need to provide the data once using a method that returns BaseEntitiesResponse. \r\n Further processing is done by the datasource itself. \r\n This means that the server always must return the full dataset\r\n\r\n2. The smart datasources need to provide data multiple times depending on the user-entered value\r\n The data filtering and paging will be done on the server and a small subset will be returned\r\n To implement this, two methods must be provided \r\n 1. A method that takes DataLoadOptions and returns BaseEntitiesResponse\r\n 2. A method that returns an object by it's id\r\n\r\n\r\n*** A word about GenericListProvider ***\r\n * The GenericList functions are implemented to work in both methods\r\n * \r\n \r\n \r\n */\r\n\r\n\r\n\r\n\r\n//Completely custom\r\nexport class DataSourceCustom extends BaseDataSourceAbstract {\r\n constructor(store: BaseDataStoreAbstract) {\r\n super(store);\r\n }\r\n}\r\n\r\n//Create datasource based on CRUD service\r\nexport class DataSourceEndpointCRUD extends BaseDataSourceAbstract {\r\n constructor(service: BaseEndpointCRUD, customOptions?: any) {\r\n super(new BaseDataStoreCRUD(service), customOptions);\r\n }\r\n}\r\n\r\n//Create serverside datasource based on CRUD service\r\nexport class ServerSideDataSourceEndpointCRUD extends BaseDataSourceAbstract {\r\n constructor(service: BaseEndpointCRUD, customOptions?: any, customLoadAction?: (options: DataLoadOptions) => Observable) {\r\n super(new BaseDataStoreCRUDServer(service, false, customLoadAction), customOptions);\r\n }\r\n}\r\n\r\n\r\n//Datasource that is directly bound to a controller action on the server\r\nexport class DataSourceDirect extends BaseDataSourceAbstract {\r\n constructor(ControllerName: string, ActionName: string, QueryString?: string, customOptions?: any) {\r\n super(new BaseDataStoreReadOnly(ControllerName, ActionName, QueryString), customOptions);\r\n }\r\n}\r\n//Datasource that is directly bound to a controller action on the server, taking the controller name from an existing service that represents it\r\nexport class DataSourceDirectService extends BaseDataSourceAbstract {\r\n constructor(serviceType: Type, ActionName: string, QueryString?: string, customOptions?: any, isRaw: boolean = true) {\r\n const controllerName = AppInjector.get(serviceType).ControllerName;\r\n super(new BaseDataStoreReadOnly(controllerName, ActionName, QueryString, undefined, undefined, undefined, isRaw), customOptions);\r\n }\r\n}\r\n\r\n\r\n//Datasource that is bound to a function returning the data\r\nexport class DataSourceCustomAction extends BaseDataSourceAbstract {\r\n constructor(\r\n customLoadAction: (options: DataLoadOptions) => Observable,\r\n customGetAction?: (Value: any) => Observable,\r\n OnLoadedHandler?: (Data: any[]) => void,\r\n IsRaw: boolean = true,\r\n customOptions?: any,\r\n keyExpr?: any) {\r\n super(\r\n new BaseDataStoreReadOnly\r\n (\r\n null,\r\n null,\r\n null,\r\n customLoadAction,\r\n customGetAction,\r\n OnLoadedHandler,\r\n IsRaw,\r\n keyExpr),\r\n customOptions);\r\n }\r\n}\r\n\r\n//Datasource bound to a generic list (string)\r\nexport class DataSourceGenericListS extends BaseDataSourceAbstract {\r\n constructor(DataSourceName: string, IsRaw: boolean = true) {\r\n super(\r\n new BaseDataStoreReadOnly\r\n (\r\n null,\r\n null,\r\n null,\r\n (options) => AppInjector.get(GenericListEndpoint).GetList(DataSourceName, options),\r\n IsRaw ? undefined : (Value) => AppInjector.get(GenericListEndpoint).GetByValue(DataSourceName, Value),\r\n undefined,\r\n IsRaw,\r\n \"Value\"\r\n ),\r\n {\r\n sort: \"Text\"\r\n });\r\n }\r\n}\r\n\r\n//Datasource bound to a generic list (numeric)\r\nexport class DataSourceGenericListI extends BaseDataSourceAbstract {\r\n constructor(DataSourceName: string, IsRaw: boolean = true) {\r\n super(\r\n new BaseDataStoreReadOnly\r\n (\r\n null,\r\n null,\r\n null,\r\n //Function that gets the data\r\n (options) => AppInjector.get(GenericListEndpoint).GetList(DataSourceName, options),\r\n IsRaw ? undefined : (Value) => AppInjector.get(GenericListEndpoint).GetByValue(DataSourceName, Value),\r\n undefined,\r\n IsRaw,\r\n \"Value\"\r\n ),\r\n {\r\n //Function that maps the data\r\n map: (item) => Utils.MapAsNumeric(item),\r\n sort: \"Text\"\r\n });\r\n }\r\n\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { PushMessageEndpoint } from '@m4u-angular/core/endpoints/push-message.endpoint';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumSidebarStates } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { BaseComponent } from '../../../base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../base/component/ServiceBag';\r\nimport { BaseState, PushMessageListParams } from '../../../base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n IsLoadAllNotifications: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-list',\r\n templateUrl: './push-message-list.component.html',\r\n styleUrls: ['./push-message-list.component.scss']\r\n})\r\nexport class PushMessageListComponent extends BaseComponent implements IBottomSheetComponent {\r\n\r\n @Output() OnAllNotificationsLoad = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService,\r\n private pushMessageEndpoint: PushMessageEndpoint,\r\n private sidebarService: SidebarService) {\r\n super(A, 'PushMessageListComponent', State);\r\n }\r\n Context: BottomSheetDialogComponent;\r\n\r\n private _sidebarStateSubscription: Subscription;\r\n\r\n protected override OnInitComponent(): void {\r\n this.LoadPushMessages();\r\n\r\n this._sidebarStateSubscription = this.sidebarService.SidebarState.subscribe((state) => {\r\n if (state.SidebarName === 'Notifications' && state.State === EnumSidebarStates.Opened && this.DS('PushMessages')) {\r\n this.DS('PushMessages').Reload();\r\n }\r\n });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._sidebarStateSubscription && this._sidebarStateSubscription.unsubscribe();\r\n }\r\n\r\n LoadPushMessages() {\r\n const params = new PushMessageListParams;\r\n params.IsLoadAllNotifications = this.State.IsLoadAllNotifications;\r\n\r\n this.DataSources['PushMessages'] = new DataSourceCustomAction((options: DataLoadOptions) =>\r\n this.pushMessageEndpoint.GetPushMessages(params, options), undefined, undefined, false);\r\n }\r\n\r\n OnLoadAllNotifications() {\r\n this.State.IsLoadAllNotifications = true;\r\n this.LoadPushMessages();\r\n this.Context?.Repaint();\r\n this.OnAllNotificationsLoad.emit(this.State.IsLoadAllNotifications);\r\n }\r\n\r\n GetNoDataText() {\r\n return !this.State.IsLoadAllNotifications ? this.RC('lblNoUnreadMessages') : this.RC('genNoData');\r\n }\r\n\r\n OnNotificationRead() {\r\n this.DS('PushMessages').Reload();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\";","import { Component, ComponentFactoryResolver, Input, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumApplicationMode, EnumPageDisplayModes } from '@core/framework/sysenums.enum';\r\nimport { BaseInjectableComponent } from '@m4u-angular/base/component/BaseInjectableComponent';\r\nimport { BottomSheetContentParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { PushMessageListComponent } from '@m4u-angular/ui/notifications/push-message-list/push-message-list.component';\r\nimport { DxContextMenuComponent } from 'devextreme-angular';\r\n\r\nclass State extends BaseState {\r\n ToolbarButtons: any[] = [];\r\n ToolbarSettings: ToolbarSettings = new ToolbarSettings;\r\n IsBreadcrumbVisible: boolean;\r\n IsAllowNotifications: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-toolbar',\r\n templateUrl: 'toolbar.component.html',\r\n styleUrls: ['./toolbar.component.scss']\r\n})\r\nexport class ToolbarComponent extends BaseComponent {\r\n @Input() PageComponentName: string;\r\n @Input() ToolbarButtonsBefore: TemplateRef;\r\n @Input() ToolbarButtonsCenter: TemplateRef;\r\n @Input() ToolbarButtonsAfter: TemplateRef;\r\n\r\n @ViewChild('mnuViewModes') protected viewModesMenu: DxContextMenuComponent;\r\n @ViewChild('dynamicContainer', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n get ShowBreadcrumb() {\r\n return this.A.AppConfigService.AppConfig.ShowBreadcrumb() \r\n && this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Window\r\n && !this.State.ToolbarSettings?.Page?.IsShowAsFullScreen()\r\n && this.A.RouteHistoryService.HistoryLength > 2;\r\n }\r\n\r\n get ShowTitle() {\r\n return (!this.A.Screen.IsMobile() && this.State.ToolbarSettings?.Page?.DisplayMode !== EnumPageDisplayModes.BottomSheet)\r\n || (!this.A.Screen.IsMobile() && ((this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Window \r\n && !this.State.ToolbarSettings?.Page?.ShowAsWindowOnMobile)\r\n || (this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.SinglePage \r\n && this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.FullScreen)));\r\n }\r\n\r\n get ShowTitleOnMobile() {\r\n return this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.BottomSheet\r\n || (this.A.Screen.IsMobile() && (this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Dialog\r\n || (this.State.ToolbarSettings?.Page?.DisplayMode === EnumPageDisplayModes.Window \r\n && (this.State.ToolbarSettings?.Page?.ShowAsWindowOnMobile || this.State.ToolbarSettings?.Page?.IsShowAsFullScreen()))));\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService, \r\n private sidebarService: SidebarService,\r\n private bottomSheetService: BottomSheetService,\r\n private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(A, 'ToolbarComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.RegisterSubscription(this.A.SysEvents.Toolbar.subscribe((settings: ToolbarSettings) => {\r\n if (!settings || settings.PageComponentName !== this.PageComponentName) return;\r\n\r\n this.State.ToolbarSettings = { ...this.State.ToolbarSettings, ...settings };\r\n this.State.IsAllowNotifications = this.A.AppConfigService.AppConfig.IsAllowNotifications \r\n && this.State.ToolbarSettings?.Page?.DisplayMode == EnumPageDisplayModes.FullScreen;\r\n this.DetectChanges();\r\n }));\r\n\r\n this.RegisterSubscription(this.A.SysEvents.Breadcrumb.subscribe(isVisible => {\r\n this.State.IsBreadcrumbVisible = isVisible;\r\n }));\r\n }\r\n \r\n override OnInitComponentFinished() {\r\n this.InitInjectedComponents();\r\n }\r\n\r\n InitInjectedComponents() {\r\n SysGlobals.InjectableComponentsOptions.forEach(x => {\r\n if (x.TargetModuleName !== this.State.ToolbarSettings.Page?.ModuleName) {\r\n return; \r\n }\r\n if (x.TargetComponentName && x.TargetComponentName !== this.State.ToolbarSettings.Page.ComponentName) {\r\n return true; \r\n }\r\n if (x.IsVisibleButton && !x.IsVisibleButton(this.State.ToolbarSettings.Page)) {\r\n return; \r\n }\r\n\r\n // Resolve an injectable component\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(x.ComponentType);\r\n const componentRef = this.containerRef.createComponent>(componentFactory);\r\n // Set fields\r\n componentRef.instance.TargetComponentName = this.State.ToolbarSettings.Page.ComponentName;\r\n componentRef.instance.TargetAppName = this.State.ToolbarSettings.Page.ModuleName;\r\n componentRef.instance.EntityType = this.State.ToolbarSettings.Page.EntityType;\r\n\r\n // Handle the injectable component on high levels\r\n this.State.ToolbarSettings.Page.OnInitInjectableComponent(componentRef.instance);\r\n\r\n if (!this.screen.IsMobile() || x.ShowInToolbarOnMobile) {\r\n // Add buttons to toolbar\r\n const buttonSettings = {\r\n Icon: x.ButtonIcon,\r\n Text: !x.ButtonIcon ? x.ButtonText : undefined,\r\n Hint: x.ButtonIcon ? x.ButtonText : undefined,\r\n Click: () => {\r\n componentRef.instance.BaseAction(); \r\n }\r\n };\r\n this.State.ToolbarButtons.push(buttonSettings);\r\n\r\n // Give buttons settings to ths injectable component\r\n componentRef.instance.ButtonSettings = buttonSettings;\r\n } else {\r\n this.State.ToolbarSettings.Page.ContextMenuDefault.push({\r\n icon: x.ButtonIcon,\r\n text: x.ButtonText,\r\n onClick: () => {\r\n componentRef.instance.BaseAction(); \r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n //Determine whether to show the close button icon instead of back\r\n public IsShowCloseButton() {\r\n return this.IsStandardApplicationMode() && this.State.ToolbarSettings && this.State.ToolbarSettings.ShowCloseButton;\r\n }\r\n\r\n public IsShowBackButton(): boolean {\r\n return this.IsStandardApplicationMode() && this.State.ToolbarSettings && this.State.ToolbarSettings.ShowBackButton;\r\n }\r\n\r\n IsStandardApplicationMode(): boolean {\r\n return this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard;\r\n }\r\n\r\n OnNavigateHomeOrSwitchMode() {\r\n if (this.IsShowViewModesButton()) {\r\n //Switch mode\r\n this.OnShowViewModes();\r\n } else {\r\n //Go to home route\r\n if (!this.IsStandardApplicationMode() || !this.State.ToolbarSettings.Page \r\n || this.State.ToolbarSettings.Page.DisplayMode != EnumPageDisplayModes.FullScreen) return;\r\n this.A.Framework.NavigateDefault();\r\n }\r\n }\r\n\r\n ToggleMenu = (e) => {\r\n this.A.SysEvents.SetMenuPositon();\r\n e.stopPropagation();\r\n };\r\n\r\n OnShowPushMessages(e) {\r\n if (!this.screen.IsMobile()) {\r\n this.sidebarService.Show('Notifications', this.RC('lblNotifications'), PushMessageListComponent);\r\n return;\r\n }\r\n\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'Notifications';\r\n contentParams.Title = this.RC('lblNotifications');\r\n contentParams.Content = PushMessageListComponent;\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n\r\n IsShowViewModesButton() {\r\n return this.State.ToolbarSettings.ViewModes?.length;\r\n }\r\n\r\n //Show menu after refresh - since menu items may change\r\n OnShowViewModes = () => {\r\n this.viewModesMenu.instance.show();\r\n };\r\n\r\n //Set the title, and call the attached callback\r\n OnViewModesMenuClick(e) {\r\n this.State.ToolbarSettings.Title = e.itemData.text;\r\n e.itemData.callback();\r\n }\r\n\r\n OnBack() {\r\n this.State.ToolbarSettings.BackButtonClick();\r\n }\r\n\r\n //Close page or navigate back using custom callback\r\n OnClosePage() {\r\n this.State.ToolbarSettings.CloseButtonClick();\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n IsShowDesktopBackButton() {\r\n return this.A.Screen.IsDesktop() && this.State.ToolbarSettings.Page?.DisplayMode !== EnumPageDisplayModes.Window\r\n || this.A.Screen.IsMobile();\r\n }\r\n\r\n IsShowWindowBackButton() {\r\n return this.A.Screen.IsDesktop() && this.State.ToolbarSettings.Page?.DisplayMode === EnumPageDisplayModes.Window;\r\n }\r\n\r\n HasBreadcrumb() {\r\n return document.querySelector('.toolbar-group-top m4u-breadcrumb')?.childElementCount > 0;\r\n }\r\n \r\n //ShowHideToolbarButtons() {\r\n // const currentPageSelectorPrefix = `.${this.State.ToolbarSettings.PageComponentName}.page-container`;\r\n // const flexibleToolbarButtons = document\r\n // .querySelectorAll(`${currentPageSelectorPrefix} .p-toolbar-group-right .flexible-toolbar-button`);\r\n // const toolbarButtons = document\r\n // .querySelectorAll(`${currentPageSelectorPrefix} .p-toolbar-group-right .flexible-toolbar-buttons toolbar-buttons > *`);\r\n // const hiddableElements = [...Array.prototype.slice.call(flexibleToolbarButtons), ...Array.prototype.slice.call(toolbarButtons)];\r\n\r\n // if (hiddableElements.length === 0) return;\r\n\r\n // const toolbarLeft = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar-group-left`);\r\n // const toolbarLeftWidth = toolbarLeft && toolbarLeft.getBoundingClientRect().width || 0;\r\n\r\n // const toolbar = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar`);\r\n // const toolbarPadding = this.A.Screen.IsMobile() ? 8 : 34;\r\n // const toolbarWidth = (toolbar && toolbar.getBoundingClientRect().width - 2 * toolbarPadding) || 0;\r\n\r\n // const toolbarRight = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar-group-right`);\r\n // const toolbarRightWidth = toolbarRight && toolbarRight.getBoundingClientRect().width || 0;\r\n\r\n // const moreButton = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar .more-button`);\r\n // const moreButtonWidth = moreButton && moreButton.getBoundingClientRect().width || 0;\r\n\r\n // if (toolbarLeftWidth + toolbarRightWidth > toolbarWidth) {\r\n // const lastItem = hiddableElements[hiddableElements.length - 1];\r\n // const lastItemWidth = lastItem.getBoundingClientRect().width;\r\n // lastItem.setAttribute('width', lastItemWidth.toString());\r\n\r\n // const li = document.createElement(\"li\");\r\n // li.appendChild(lastItem);\r\n\r\n // const contextMenus = document.querySelectorAll('.more-button-context-menu ul');\r\n // const currentContextMenu = contextMenus[contextMenus.length - 1];\r\n // currentContextMenu.appendChild(li);\r\n\r\n // this.ShowHideMoreButton();\r\n // this.ShowHideToolbarButtons();\r\n // return;\r\n // }\r\n\r\n // const moreButtonItems = document.querySelectorAll('.more-button-context-menu ul li > *');\r\n // const firstMoreElement = moreButtonItems[0];\r\n\r\n // if (firstMoreElement) {\r\n // const firstMoreElementWidth = +firstMoreElement.getAttribute('width') || 0;\r\n // let occupiedWidth = toolbarLeftWidth + toolbarRightWidth + firstMoreElementWidth;\r\n // if (moreButtonItems.length == 1) occupiedWidth -= moreButtonWidth;\r\n // if (occupiedWidth < toolbarWidth) {\r\n // const toolbarButtonsContainer = document\r\n // .querySelector(`${currentPageSelectorPrefix} .p-toolbar-group-right .flexible-toolbar-buttons toolbar-buttons`);\r\n // toolbarButtonsContainer && toolbarButtonsContainer.appendChild(firstMoreElement);\r\n\r\n // this.ShowHideMoreButton();\r\n // this.ShowHideToolbarButtons();\r\n // }\r\n // }\r\n\r\n // this.ShowHideMoreButton();\r\n //}\r\n\r\n //private ShowHideMoreButton() {\r\n // const currentPageSelectorPrefix = `.${this.State.ToolbarSettings.PageComponentName}.page-container`;\r\n // const moreButtonContainer = document.querySelector(`${currentPageSelectorPrefix} .p-toolbar .more-button-container`);\r\n // if (!moreButtonContainer) return;\r\n\r\n // if (document.querySelectorAll('.more-button-context-menu ul li > *').length === 0) {\r\n // moreButtonContainer.classList.add('m4u-hidden');\r\n // } else {\r\n // moreButtonContainer.classList.remove('m4u-hidden');\r\n // }\r\n //}\r\n}\r\n\r\n","export default \"
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{State.ToolbarSettings.Title}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{State.ToolbarSettings.Subtitle}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, AfterViewInit } from '@angular/core';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\n\r\n\r\n@Component({\r\n selector: 'm4u-comingsoon',\r\n templateUrl: './comingsoon.component.html',\r\n styleUrls: ['./comingsoon.component.scss']\r\n})\r\nexport class ComingSoonComponent extends BasePageComponent implements AfterViewInit\r\n{\r\n constructor(A: ServiceBagService) \r\n {\r\n super(A, 'ComingSoonComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override ngAfterViewInit()\r\n {\r\n setTimeout(() => { this.Navigate(['/pages/dashboard'], { Language: SysGlobals.Language }); }, 4000);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
{{'titleComingSoonTitle' | RC}}
\\r\\n \\r\\n
{{'titleLogoutLast' | RC}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, HostListener, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseState, LoginParams } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { EnumLanguages, EnumLoginExtensionLinkType, EnumLoginSecureKeyTypes, \r\n EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.enum';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { LoginExtensionLink } from '@base/classes/BaseClasses';\r\nimport { VersionDescriptor } from '@m4u-angular/configuration/app.config.service';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n IsSaveCredentials: boolean;\r\n ShowPasswordRecoveryLink: boolean;\r\n LoginExtensionLinks: LoginExtensionLink[];\r\n ReturnUrl: string;\r\n IsSupportedLoginByOTP: boolean;\r\n Stage: number;\r\n ModulesVersion: VersionDescriptor[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss']\r\n})\r\nexport class LoginComponent extends BasePageComponent {\r\n @HostListener('document:keypress', ['$event'])\r\n EnterPress(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.OnSubmit(); \r\n } \r\n }\r\n\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private languageService: LanguageService) {\r\n super(A, 'LoginComponent', LoginParams, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.A.AppConfigService.AppConfig.OnLoginPage();\r\n \r\n //Checking support of the login by otp is needed for to avoid an endless loop of transitions between 'login' & login-otp'\r\n if (!this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByPassword) \r\n && this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP)) {\r\n this.Navigate(['/system/login-otp'], { Language: SysGlobals.Language });\r\n return;\r\n }\r\n\r\n this.State.Stage = 1;\r\n this.Entity.SecureKeyType = EnumLoginSecureKeyTypes.Password;\r\n\r\n this.State.ModulesVersion = this.A.AppConfigService.getModulesVersion();\r\n\r\n this._subscriptions.push(this.languageService.Language$.subscribe(language => {\r\n if (this.Entity.Language === language) return;\r\n \r\n this.Entity.Language = language;\r\n this.A.Navigator.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n setTimeout(() => this.A.Navigator.ReloadApplication(), 500);\r\n }));\r\n }\r\n\r\n override OnInitState() {\r\n this.State.ShowPasswordRecoveryLink = this.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordRecovery);\r\n this.State.IsSupportedLoginByOTP = this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP);\r\n this.State.ReturnUrl = this.QueryParams.ReturnUrl\r\n && (this.QueryParams.ReturnUrl as string).replace(this.A.AppConfigService.M4UConfig.deploymentApplicationFolder, '');\r\n }\r\n\r\n override OnInitEntity() {\r\n //Take default language from URL to allow presetting it\r\n if (this.QueryParams.Language != undefined) {\r\n this.Entity.Language = (this.QueryParams.Language == EnumLanguages.English ? EnumLanguages.English : EnumLanguages.Hebrew);\r\n } else {\r\n const language = localStorage.getItem('Language');\r\n this.Entity.Language = language || this.A.AppConfigService.M4UConfig.defaultLanguage;\r\n }\r\n this.languageService.SetLanguage(this.Entity.Language);\r\n\r\n //Take sure if was passed in\r\n this.Entity.UserName = this.QueryParams.UserName;\r\n this.LoadExtension();\r\n }\r\n\r\n //Perform the login\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n this.loginService.DoLogin(this.Entity, false, this.State.IsSaveCredentials, () => {\r\n this.OnAfterInit(); \r\n }, null, (deliveryOption: EnumNotificationDeliveryOptions) => {\r\n this.MFACodeSent(deliveryOption); \r\n })\r\n .subscribe(() => {});\r\n }\r\n\r\n OnAfterInit() {\r\n if (this.State.ReturnUrl) {\r\n this.A.Navigator.NavigateByUrl(this.State.ReturnUrl);\r\n return;\r\n }\r\n this.A.Framework.NavigateDefault();\r\n }\r\n\r\n override OnSubmitPage() {\r\n this.OnSubmit();\r\n }\r\n\r\n OnPasswordRecovery() {\r\n this.Navigate(['/system/passwordrecovery'], { UserName: this.Entity.UserName });\r\n }\r\n\r\n LoadExtension() {\r\n this.A.AppConfigService.AppConfig.OnGetAppLoginExtensionLinks()\r\n .subscribe(links => this.State.LoginExtensionLinks = links);\r\n }\r\n\r\n OnExtensionLinkClick(link: LoginExtensionLink) {\r\n (link.Type === EnumLoginExtensionLinkType.Route || link.Type === EnumLoginExtensionLinkType.ButtonLink) \r\n && this.Navigate([link.Link]);\r\n }\r\n\r\n GoToLoginByOTP() {\r\n if (this.State.IsSupportedLoginByOTP) this.Navigate(['/system/login-otp'], { Language: this.Entity.Language });\r\n }\r\n\r\n MFACodeSent(deliveryOption: EnumNotificationDeliveryOptions) {\r\n this.Entity.DeliveryOption = deliveryOption;\r\n this.State.Stage = 2;\r\n this.State.IsSaveCredentials = false;\r\n this.Entity.SecureKey = null;\r\n this.Entity.SecureKeyType = EnumLoginSecureKeyTypes.MFACode;\r\n\r\n const message = this.Entity.DeliveryOption == EnumNotificationDeliveryOptions.Email \r\n ? this.RC('titleMFACodeOnEmailSent') \r\n : this.RC('titleMFACodeOnPhoneSent');\r\n this.UI.InfoMessage(message);\r\n }\r\n\r\n GetAdditionalTitle() {\r\n if(this.State.Stage == 2) {\r\n if(this.Entity.DeliveryOption == EnumNotificationDeliveryOptions.Email) return this.RC('titleMFACodeOnEmailSent');\r\n else return this.RC('titleMFACodeOnPhoneSent');\r\n }\r\n return '';\r\n }\r\n\r\n OnCodeFieldInitialized(e){\r\n setTimeout(() => e.component.instance().focus(), 500);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{'btnRecoverPassword' | RCX}}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, OnInit } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { LoginService } from '@m4u-angular/core/framework/login.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-logout',\r\n templateUrl: './logout.component.html',\r\n styleUrls: ['./logout.component.scss']\r\n})\r\nexport class LogoutComponent extends BasePageComponent implements OnInit {\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private sidebarService: SidebarService) {\r\n super(A, 'LogoutComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override ngOnInit() {\r\n this.loginService.DoLogout(() => {\r\n this.sidebarService.ClearSidebars();\r\n setTimeout(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); }, 4000);\r\n }); \r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, AfterViewInit } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-sessionexpire',\r\n templateUrl: './sessionexpire.component.html',\r\n styleUrls: ['./sessionexpire.component.scss']\r\n})\r\nexport class SessionExpireComponent extends BasePageComponent implements AfterViewInit {\r\n\r\n constructor(A: ServiceBagService,\r\n private sidebarService: SidebarService) {\r\n super(A, 'SessionExpireComponent', BaseEntity, BaseState);\r\n }\r\n\r\n\r\n override ngAfterViewInit() {\r\n this.sidebarService.ClearSidebars();\r\n setTimeout(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); }, 2000);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n BaseEntityResponse,\r\n CredentialActivityStatus,\r\n BaseEntitiesResponse,\r\n CredentialLoginParams,\r\n CredentialLogin, CredentialType\r\n} from '@base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { BaseEndpoint } from '@base/endpoint/BaseEndpoint';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\n\r\n@Injectable()\r\nexport class CredentialActivityEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('CredentialActivity', api);\r\n }\r\n\r\n public ListActivity(CredentialType: number, options: DataLoadOptions): Observable> {\r\n return this.api.ExecuteGetAction(\r\n this.ControllerName,\r\n 'ListActivity',\r\n { CredentialType: CredentialType, options: options?.GetLoadOptions() });\r\n }\r\n\r\n public ListCredentialTypes(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ListCredentialTypes');\r\n }\r\n\r\n public ListLogins(Params: CredentialLoginParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListLogins', Params, options?.GetLoadOptions());\r\n }\r\n}\r\n","import { Component, ViewChild } from \"@angular/core\";\r\nimport { BaseEntity, BaseState, CredentialType } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from \"@base/datalayer/BaseDataSources\";\r\nimport { GridExtender } from \"@base/grid/Grid.extender\";\r\nimport { CredentialActivityStatusGridComponent } from './grid/credentials-activity-status-grid.component';\r\nimport { CredentialActivityEndpoint } from \"@core/endpoints/credential-activity.endpoint\";\r\n\r\nclass State extends BaseState {\r\n CredentialsInfo: CredentialType[] = [];\r\n CredentialType: number = -1;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-credentials-activity-status',\r\n templateUrl: './credentials-activity-status.component.html',\r\n styleUrls: ['./credentials-activity-status.component.scss']\r\n})\r\n\r\nexport class CredentialsActivityStatusComponent extends BasePageComponent{\r\n @ViewChild('credentialActivityGrid') credentialActivityGrid: CredentialActivityStatusGridComponent;\r\n public get G(): GridExtender {\r\n return this.credentialActivityGrid?.G;\r\n }\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'CredentialsActivityStatusComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitDataSources() {\r\n this.LoadDataSource();\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialsInfo = response.Entities;\r\n\r\n response.Entities.forEach(entity => {\r\n if (entity.Value == null) {\r\n entity.Value = -999;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private LoadDataSource() {\r\n this.DataSources['Data'] = new DataSourceCustomAction(\r\n (options) => this.credentialActivityEndpoint.ListActivity(this.State.CredentialType ?? -999, options),\r\n undefined, (entities) => {\r\n entities.forEach(entity => {\r\n if (entity.CredentialType == null) {\r\n entity.CredentialType = -999;\r\n }\r\n });\r\n }, false);\r\n this.DS('Data').Reload();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: this.G\r\n };\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.CredentialType = -1;\r\n this.LoadDataSource();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { BaseDataResponse, BaseEntitiesResponse, GenericListEntity, Notification, NotificationListParams } from '@base/entities/BaseEntities';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { Observable } from \"rxjs\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { EnumNotificationDeliveryOptions } from '@core/framework/sysenums.enum';\r\n\r\n\r\n@Injectable()\r\nexport class NotificationEndpoint extends BaseEndpointCRUD {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"Notification\", api);\r\n }\r\n \r\n public GetNotificationsReport(Params: NotificationListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'GetNotificationsReport', Params, options?.GetLoadOptions());\r\n }\r\n public GetRelevantDeliveryOptions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetRelevantDeliveryOptions', { });\r\n }\r\n public GetNotificationsTemplates(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetNotificationsTemplates', { });\r\n }\r\n}\r\n","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DxDataGridComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-grid-toolbar',\r\n templateUrl: './grid-toolbar.component.html',\r\n styleUrls: ['./grid-toolbar.component.scss']\r\n})\r\nexport class GridToolbarComponent extends BaseComponent {\r\n @Input() Grid: DxDataGridComponent;\r\n @Input() ShowAddButton: boolean;\r\n @Input() AddButtonText: string;\r\n @Input() AddButtonNavPath: string;\r\n @Input() AddButtonNavParams: any;\r\n @Input() Title: string;\r\n @Input() StartExtraButtonsTemplate: TemplateRef;\r\n @Input() EndExtraButtonsTemplate: TemplateRef;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'GridToolbarComponent', BaseState);\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { BasePageComponent } from '../../base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '../../base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes } from '../framework/sysenums.enum';\r\nimport DxDataGrid from 'devextreme/ui/data_grid';\r\n\r\nexport class GridHelper {\r\n\r\n public static RefreshGridHeight(grid: DxDataGrid, page?: BasePageComponent) {\r\n if (grid && this.GetRowCount(grid) > 0 && grid.option('dataSource') && !(grid as any)._disposed) {\r\n const height = this.GetGridHeightRelativeToPage(grid, page);\r\n const currentHeight = grid.option('height');\r\n if (height !== currentHeight) grid.option('height', height);\r\n }\r\n }\r\n\r\n public static GetGridHeightRelativeToPage(grid: DxDataGrid, page?: BasePageComponent): any {\r\n const gridRect = grid.element().getBoundingClientRect();\r\n // If grid is empty there is no need to fit the full screen height\r\n if (this.GetRowCount(grid) === 0) return 'auto';\r\n\r\n // Calculate grid height fit to the page\r\n let height = window.innerHeight - gridRect.top;\r\n if (page && (page.DisplayMode === EnumPageDisplayModes.Window || page.DisplayMode === EnumPageDisplayModes.Dialog)) {\r\n const bottom = document.querySelector('.m4u-popup .page-body.dx-scrollview')?.getBoundingClientRect()?.bottom || 0;\r\n const bottomIndent = window.innerHeight - bottom;\r\n height -= bottomIndent;\r\n } else {\r\n // Get page footer height\r\n const pageFooters = document.querySelectorAll('.page-container m4u-footer');\r\n const pageFooter = pageFooters[pageFooters.length - 1];\r\n const pageFooterHeight = pageFooter && pageFooter['offsetParent'] \r\n && (pageFooter['offsetParent'].offsetHeight - pageFooter['offsetTop']) || 0;\r\n height -= pageFooterHeight;\r\n }\r\n\r\n // Get layout padding\r\n const pageContainers = document.getElementsByClassName('page-body');\r\n if (!pageContainers || !pageContainers.length) return 'auto';\r\n\r\n const currentLayoutPadding = +(document?.defaultView\r\n ?.getComputedStyle(pageContainers[pageContainers.length - 1], '')\r\n ?.getPropertyValue('padding-bottom')?.match(/\\d/g)?.join('') || 0);\r\n // If less than header and one row add window height\r\n return (height < 160 ? height + window.innerHeight : height) - currentLayoutPadding; // Layout padding, page footer\r\n }\r\n\r\n private static GetRowCount(grid: DxDataGrid): number {\r\n const iCount: number = grid.totalCount();\r\n return iCount == -1 ? grid.getVisibleRows().length : iCount;\r\n }\r\n}","\r\nimport { Component, ComponentFactoryResolver, ComponentRef, Input, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { DxContextMenuComponent, DxDataGridComponent } from 'devextreme-angular';\r\nimport { GridExtender } from '../grid/Grid.extender';\r\nimport { BaseDataSourceAbstract } from '../datalayer/BaseDataSourceAbstract';\r\nimport { BaseState, BaseEntity } from './../entities/BaseEntities';\r\nimport { BaseComponent } from './BaseComponent';\r\nimport { ServiceBagService } from './ServiceBag';\r\nimport { BasePageComponent } from './BasePageComponent';\r\nimport { GridToolbarComponent } from '@m4u-angular/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport dxButton from 'devextreme/ui/button';\r\nimport { Column } from 'devextreme/ui/data_grid';\r\nimport { ContextMenuElement } from '../classes/BaseClasses';\r\nimport { Subscription } from 'rxjs';\r\nimport { GridHelper } from '@m4u-angular/core/helpers/GridHelper';\r\n\r\n@Component({\r\n selector: 'base-grid',\r\n template: '
'\r\n})\r\n// eslint-disable-next-line max-len\r\nexport abstract class BaseGridComponent extends BaseComponent implements IGridComponent {\r\n private _gridToolbarRef: ComponentRef;\r\n private _gridToolbarComponent: GridToolbarComponent;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n private _dataSource: BaseDataSourceAbstract | any[];\r\n @Input() set DataSource(value: BaseDataSourceAbstract | any[]) {\r\n this._dataSource = value;\r\n if (value) this.InitDataSource();\r\n }\r\n get DataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n private _showAddButton: boolean;\r\n @Input() set ShowAddButton(value: boolean) {\r\n this._showAddButton = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.ShowAddButton = this._showAddButton);\r\n }\r\n get ShowAddButton() {\r\n return this._showAddButton;\r\n }\r\n\r\n private _addButtonText: string;\r\n @Input() set AddButtonText(value: string) {\r\n this._addButtonText = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.AddButtonText = this._addButtonText);\r\n }\r\n get AddButtonText() {\r\n return this._addButtonText;\r\n }\r\n\r\n private _title: string;\r\n @Input() set Title(value: string) {\r\n this._title = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.Title = this._title);\r\n }\r\n get Title() {\r\n return this._title;\r\n }\r\n\r\n private _addButtonNavParams: any;\r\n @Input() set AddButtonNavParams(value: any) {\r\n this._addButtonNavParams = value;\r\n this._gridToolbarComponent && (this._gridToolbarComponent.AddButtonNavParams = this._addButtonNavParams);\r\n }\r\n get AddButtonNavParams() {\r\n return this._addButtonNavParams;\r\n }\r\n\r\n @Input() set Visible(value: boolean) {\r\n this.grid && (this.grid.visible = value);\r\n }\r\n\r\n @Input() IsAutoHeight: boolean;\r\n @Input() Page: BasePageComponent;\r\n @Input() AddButtonNavPath: string;\r\n @Input() StartExtraButtonsTemplate: TemplateRef;\r\n @Input() EndExtraButtonsTemplate: TemplateRef;\r\n\r\n @ViewChild(DxDataGridComponent) protected grid: DxDataGridComponent;\r\n @ViewChild(DxDataGridComponent, { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n public get gridAny(): any {\r\n return this.grid;\r\n }\r\n public get G(): GridExtender {\r\n return this.gridAny && this.gridAny.G;\r\n }\r\n\r\n private _isUpdateScrollPosition: boolean = false;\r\n\r\n protected AfterInit() { }\r\n\r\n constructor(public override A: ServiceBagService,\r\n public override ComponentName: string,\r\n public EntityType: (new () => TEntity),\r\n StateType: (new () => TState)) {\r\n super(A, ComponentName, StateType);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.A.SysEvents.SetLoadPanelState(true);\r\n this._isUpdateScrollPosition = this.A.Screen.IsRTL();\r\n this.RegisterSubscription(this.A.SysEvents.MenuPositon.subscribe(() => this.SetScrollPosition()));\r\n }\r\n\r\n InitDataSource() {\r\n this.AfterInit();\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n this._gridToolbarComponent = this.CreateGridToolbarComponent();\r\n\r\n this._subscriptions.push(this.grid.onContentReady.subscribe(() => {\r\n setTimeout(() => this.RefreshGridHeight());\r\n this.SetScrollPosition();\r\n // Get context menu items without putting data there, just to know if any exists\r\n const contextMenuItems = this.GetGridRowContextMenu();\r\n // If no context menu items then no need to add column at all\r\n if (!contextMenuItems || !contextMenuItems.length) return;\r\n\r\n // TODO: better to use addColumn API method.\r\n const columns = this.grid.instance.option('columns');\r\n const gridColumns = columns.map((column: Column) => ({\r\n ...column,\r\n visible: column.type === 'buttons' ? column.visible : this.grid.instance.columnOption(column.dataField, 'visible'),\r\n width: column.type === 'buttons' ? column.width : this.grid.instance.columnOption(column.dataField, 'width'),\r\n visibleIndex: column.type === 'buttons' ? column.visibleIndex : this.grid.instance.columnOption(column.dataField, 'visibleIndex'),\r\n groupIndex: column.type === 'buttons' ? column.groupIndex : this.grid.instance.columnOption(column.dataField, 'groupIndex')\r\n }));\r\n\r\n const gridRowContextMenuColumn = gridColumns.find(x => x.name == 'gridRowContextMenu');\r\n if (!gridRowContextMenuColumn) {\r\n const columnOptions = {\r\n name: 'gridRowContextMenu',\r\n showInColumnChooser: false,\r\n type: 'buttons',\r\n cellTemplate: this.GridRowContextMenu,\r\n search: {\r\n enabled: false\r\n },\r\n cssClass: 'context-menu-column',\r\n allowResizing: false,\r\n allowReordering: false,\r\n width: 32\r\n } as any;\r\n gridColumns.push(columnOptions);\r\n (this.grid.instance as any).option('columns', gridColumns);\r\n }\r\n }));\r\n\r\n //this._subscriptions.push(this.grid.onOptionChanged.subscribe((e) => {\r\n // if (e.name !== 'dataSource') return;\r\n\r\n // this.grid?.instance?.getScrollable()?.scrollTo({ top: 0 });\r\n // this.grid?.instance?.repaint();\r\n //}));\r\n\r\n this.A.SysEvents.SetLoadPanelState(false);\r\n }\r\n\r\n GridRowContextMenu = (container, options) => {\r\n if (options.row.rowType !== 'data') return;\r\n\r\n const contextMenuItems = this.GetGridRowContextMenu(options);\r\n if (!contextMenuItems.length || !contextMenuItems.some(x => x.visible == null || x.visible)) return;\r\n\r\n const div = document.createElement('div');\r\n container.appendChild(div);\r\n\r\n const contextMenuButton = new dxButton(div, {\r\n icon: 'mdi mdi-dots-vertical',\r\n elementAttr: { class: 'grid-row-context-menu-button btn-size-small' },\r\n onClick: (event) => {\r\n event.event?.stopPropagation();\r\n const contextMenu = this.CreateContextMenuComponent();\r\n contextMenu.items = contextMenuItems.map(x => {\r\n const visible = typeof x.visible == 'function' ? x.visible() : x.visible;\r\n return {\r\n ...x,\r\n visible: visible\r\n };\r\n });\r\n contextMenu.target = div;\r\n contextMenu.visible = true;\r\n }\r\n });\r\n };\r\n\r\n private CreateContextMenuComponent() {\r\n const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n const componentFactory = componentFactoryResolver.resolveComponentFactory(DxContextMenuComponent);\r\n const componentRef = this.containerRef.createComponent(componentFactory);\r\n\r\n return componentRef.instance;\r\n }\r\n\r\n // Please make sure that options?.row?.rowData or options?.data is using with '?' \r\n // (for example, options?.row?.rowData?.EntryID) when overriding this method\r\n protected GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [];\r\n }\r\n\r\n RefreshGridHeight() {\r\n if (this.IsAutoHeight) GridHelper.RefreshGridHeight(this.grid.instance, this.Page);\r\n }\r\n\r\n SetScrollPosition() {\r\n setTimeout(() => {\r\n if (!this._isUpdateScrollPosition) return;\r\n\r\n const scrollable = this.grid.instance.getScrollable();\r\n if (!scrollable) return;\r\n\r\n const maxScrollLeft = scrollable.scrollWidth();\r\n scrollable.scrollTo({\r\n x: maxScrollLeft\r\n });\r\n }, 150);\r\n }\r\n\r\n override Navigate(params: any[], optionalParams?: any, bSaveState = false, bSaveCurrentLocation = false): Promise {\r\n if (this.Page != undefined) (this.Page as any).SaveState();\r\n return super.Navigate(params, optionalParams, bSaveState, bSaveCurrentLocation);\r\n }\r\n\r\n private CreateGridToolbarComponent(): GridToolbarComponent {\r\n if (!this.Title && !this.ShowAddButton && !this.StartExtraButtonsTemplate && !this.EndExtraButtonsTemplate) return;\r\n\r\n const previousElement = this.containerRef.element.nativeElement.parentElement.previousSibling;\r\n if (previousElement?.tagName?.toLowerCase() === 'm4u-grid-toolbar') previousElement.remove();\r\n\r\n const componentFactoryResolver = AppInjector.get(ComponentFactoryResolver);\r\n const componentFactory = componentFactoryResolver.resolveComponentFactory(GridToolbarComponent);\r\n const componentRef = this.containerRef.createComponent(componentFactory);\r\n\r\n componentRef.instance.Grid = this.grid;\r\n componentRef.instance.ShowAddButton = this.ShowAddButton;\r\n componentRef.instance.Title = this.Title;\r\n componentRef.instance.AddButtonNavPath = this.AddButtonNavPath;\r\n componentRef.instance.AddButtonNavParams = this.AddButtonNavParams;\r\n componentRef.instance.StartExtraButtonsTemplate = this.StartExtraButtonsTemplate;\r\n componentRef.instance.EndExtraButtonsTemplate = this.EndExtraButtonsTemplate;\r\n componentRef.instance.AddButtonText = this.AddButtonText;\r\n\r\n this.containerRef.element.nativeElement.parentElement.before(componentRef.location.nativeElement);\r\n this._gridToolbarRef = componentRef;\r\n return componentRef.instance;\r\n }\r\n\r\n protected OnReorder(e, lines) {\r\n const visibleRows = e.component.getVisibleRows();\r\n const toIndex = lines.indexOf(visibleRows[e.toIndex].data);\r\n const fromIndex = lines.indexOf(e.itemData);\r\n lines.splice(fromIndex, 1);\r\n lines.splice(toIndex, 0, e.itemData);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n this._gridToolbarRef?.destroy();\r\n }\r\n}\r\n\r\n\r\nexport interface IGridComponent {\r\n readonly G: GridExtender;\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { BaseEntity, BaseState, GenericListEntity, Notification } from '@base/entities/BaseEntities';\r\nimport { BaseGridComponent } from \"@base/component/BaseGridComponent\";\r\nimport { ServiceBagService, ServiceBagServices } from \"@m4u-angular/base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n Templates: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notificationgrid',\r\n templateUrl: './notificationgrid.component.html',\r\n styleUrls: ['./notificationgrid.component.scss']\r\n})\r\nexport class NotificationGridComponent extends BaseGridComponent\r\n{\r\n @Input() set Templates (value: GenericListEntity[]) {\r\n this.State.Templates = value;\r\n }\r\n\r\n constructor(A: ServiceBagService, componentName: string) {\r\n super(A, componentName, Notification, State);\r\n }\r\n\r\n override OnInitComponentFinished() {\r\n super.OnInitComponentFinished();\r\n if (this.G) this.G.grid.columnHidingEnabled = false;\r\n }\r\n \r\n OnNavigate(e) {\r\n this.Navigate([\"/pages/general/notificationview\", e.data.EntryID]);\r\n } \r\n}\r\n","export default \"\";","import { Component, ViewChild } from '@angular/core';\r\nimport {\r\n BaseEntity, BaseState, GenericListEntity,\r\n BaseEntitiesResponse, Notification, NotificationListParams, BaseDataResponse\r\n} from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@base/datalayer/BaseDataSources';\r\nimport { NotificationEndpoint } from '@core/endpoints/notification.endpoint';\r\nimport { EnumNotificationDeliveryOptions, EnumSystemOptions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { NotificationGridComponent } from './notification-grid/notificationgrid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { EmailHistoryGridComponent } from './notification-grid/email-history-grid/email-history-grid.component';\r\nimport { SmsHistoryGridComponent } from './notification-grid/sms-history-grid/sms-history-grid.component';\r\nimport { PushMessageHistoryGridComponent } from './notification-grid/push-message-history-grid/push-message-history-grid.component';\r\n\r\nclass State extends BaseState {\r\n SearchAddress: string;\r\n SearchUntilDate: Date;\r\n SearchFromDate: Date;\r\n SearchTemplate: string;\r\n Templates: GenericListEntity[];\r\n CurrentTabIndex: number = 0;\r\n CurrentDeliveryOption: EnumNotificationDeliveryOptions;\r\n IsTabsVisible = false;\r\n RelevantNotificationTypes: any[] = [];\r\n IsNoData = false;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-notificationshistory',\r\n templateUrl: './notificationshistory.component.html',\r\n styleUrls: ['./notificationshistory.component.scss']\r\n})\r\nexport class NotificationsHistoryComponent extends BasePageComponent{\r\n @ViewChild('emailGrid') public emailGrid: EmailHistoryGridComponent;\r\n @ViewChild('smsGrid') public smsGrid: SmsHistoryGridComponent;\r\n @ViewChild('pushMessageGrid') public pushMessageGrid: PushMessageHistoryGridComponent;\r\n @ViewChild('whatsAppGrid') public whatsAppGrid: SmsHistoryGridComponent;\r\n @ViewChild(NotificationGridComponent) public grid: NotificationGridComponent;\r\n\r\n constructor(A: ServiceBagService, private notificationEndpoint: NotificationEndpoint) {\r\n super(A, 'NotificationsHistoryComponent', Notification, State);\r\n }\r\n\r\n override OnInitDataSources() {\r\n this.Do(this.notificationEndpoint.GetNotificationsTemplates(), false, (response: BaseEntitiesResponse) => {\r\n this.State.Templates = response.Entities;\r\n });\r\n\r\n this.Do(this.notificationEndpoint.GetRelevantDeliveryOptions(),\r\n false, (response: BaseDataResponse) => {\r\n this.State.RelevantNotificationTypes = this.LIST('NotificationTypes')\r\n .filter(x => response.Data.some(y => y === x.Value) && this.IsDeliveryOptionAvailable(x.Value));\r\n if (response.Data.length === 0) {\r\n this.State.IsNoData = true;\r\n return;\r\n }\r\n\r\n this.State.IsTabsVisible = response.Data.length > 1;\r\n this.State.CurrentDeliveryOption = response.Data[0];\r\n\r\n this.LoadDataSource();\r\n });\r\n }\r\n\r\n //Load the report\r\n LoadDataSource() {\r\n if (!this.State.CurrentDeliveryOption) return;\r\n\r\n const params = new NotificationListParams();\r\n params.DeliveryOption = this.State.CurrentDeliveryOption;\r\n params.Address = this.State.SearchAddress;\r\n params.UntilDate = this.State.SearchUntilDate;\r\n params.FromDate = this.State.SearchFromDate;\r\n params.Template = this.State.SearchTemplate;\r\n\r\n this.DataSources['Notifications'] =\r\n new DataSourceCustomAction((options: DataLoadOptions) => this.notificationEndpoint.GetNotificationsReport(params, options),\r\n undefined, undefined, false);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/general/notificationview', e.data.EntryID]);\r\n }\r\n\r\n OnNavigateCard(e) {\r\n this.Navigate(['/pages/general/notificationview', e.EntryID]);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: () => this.GetGridExtender()\r\n } as ToolbarSettings;\r\n }\r\n\r\n private GetGridExtender = () => {\r\n switch (this.State.CurrentDeliveryOption) {\r\n case EnumNotificationDeliveryOptions.Email: return this.emailGrid?.G;\r\n case EnumNotificationDeliveryOptions.SMS: return this.smsGrid?.G;\r\n case EnumNotificationDeliveryOptions.PushMessage: return this.pushMessageGrid?.G;\r\n case EnumNotificationDeliveryOptions.WhatsApp: return this.whatsAppGrid?.G;\r\n default: return this.emailGrid?.G;\r\n }\r\n };\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.State.SearchAddress = this.State.SearchFromDate = this.State.SearchUntilDate = this.State.SearchTemplate = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n OnTabChanged(event) {\r\n this.State.CurrentTabIndex = event.itemIndex;\r\n this.State.CurrentDeliveryOption = event.itemData.Value;\r\n this.LoadDataSource();\r\n\r\n setTimeout(() => this.ReloadToolbar());\r\n }\r\n\r\n IsDeliveryOptionAvailable(option: string) {\r\n switch (option) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n case EnumNotificationDeliveryOptions.PushMessage:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
{{'msgNoData' | RC}}
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from \"@angular/core\";\r\nimport { BaseEntityResponse, BaseState, Notification } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumNotificationDeliveryOptions, EnumNotificationStatuses, EnumPageDisplayModes } from \"@m4u-angular/core/framework/sysenums.enum\";\r\nimport { NotificationEndpoint } from \"@m4u-angular/core/endpoints/notification.endpoint\";\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-notificationview',\r\n templateUrl: './notificationview.component.html',\r\n styleUrls: ['./notificationview.component.scss']\r\n})\r\nexport class NotificationViewComponent extends BasePageComponent\r\n{\r\n constructor(A: ServiceBagService, private notificationEndpoint: NotificationEndpoint, public sanitizer: DomSanitizer) {\r\n super(A, 'NotificationViewComponent', Notification, BaseState, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n const entryID = this.A.Navigator.GetRouteParams().EntryID;\r\n this.SetEntity(Notification, this.notificationEndpoint.Get(entryID), false, (response: BaseEntityResponse) => {});\r\n }\r\n\r\n GetStatusColor() {\r\n switch(this.Entity.Status) {\r\n case EnumNotificationStatuses.Sent:\r\n return 'green-cyan';\r\n case EnumNotificationStatuses.Failure:\r\n return 'cinnabar';\r\n case EnumNotificationStatuses.Sending:\r\n return 'atomic-tangerine';\r\n case EnumNotificationStatuses.Draft:\r\n return 'portage';\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Input,Component, ViewChild } from \"@angular/core\";\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { GridExtender } from \"@base/grid/Grid.extender\";\r\n\r\nimport { HistoryEventTypesEnum, EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HistoryViewGridComponent } from '@m4u-angular/ui/components/general/history-view/grid/historyview-grid.component'\r\nimport { BaseEntity, BaseState, HistoryChangeDetails, HistoryChangesSet } from '@base/entities/BaseEntities';\r\nimport dxScrollView from 'devextreme/ui/scroll_view';\r\n\r\nclass State extends BaseState {\r\n SearchUntilDate: Date;\r\n SearchFromDate: Date;\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-historyview',\r\n templateUrl: './historyview.component.html',\r\n styleUrls: ['./historyview.component.scss']\r\n})\r\n\r\nexport class HistoryViewComponent extends BasePageComponent { \r\n\r\n @Input() Entities: HistoryChangesSet[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HistoryViewComponent', BaseEntity, State, EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n protected override OnInitComponentFinished(): void {\r\n setTimeout(() => {\r\n const scroll = dxScrollView.getInstance(document.querySelector('.history-view-page .page-body')) as any;\r\n scroll && scroll.scrollTo({ top: scroll.scrollHeight() });\r\n });\r\n }\r\n\r\n IsShowDate(item: HistoryChangesSet) {\r\n const itemIndex = this.Entities.indexOf(item);\r\n return itemIndex === 0 || this.Entities[itemIndex - 1].CreatedDate.ToDate().getTime() != item.CreatedDate.ToDate().getTime();\r\n }\r\n\r\n GetEntityChangesContext(item: HistoryChangesSet) {\r\n return { items: item.HistoryChanges, type: 'entity', getChangeLabel: (item: HistoryChangeDetails) => this.GetEntityChangeLabel(item) };\r\n }\r\n\r\n private GetEntityChangeLabel(item: HistoryChangeDetails) {\r\n const entityName = item.Name && item.EntityType !== item.Name ? item.Name : '';\r\n switch (item.Action) {\r\n case HistoryEventTypesEnum.RowAdded:\r\n return this.RC('lblHistoryChangeAdded', item.EntityType, entityName);\r\n case HistoryEventTypesEnum.RowDeleted:\r\n return this.RC('lblHistoryChangeRemoved', item.EntityType, entityName);\r\n case HistoryEventTypesEnum.FieldChange:\r\n case HistoryEventTypesEnum.Special:\r\n return `${item.EntityType} ${entityName}`;\r\n }\r\n }\r\n\r\n GetLineChangesContext(item: HistoryChangesSet) {\r\n return { items: item.HistoryLineChanges, type: 'lines', getChangeLabel: (item: HistoryChangeDetails) => this.GetLineChangeLabel(item) };\r\n }\r\n\r\n GetLineChangeLabel(item: HistoryChangeDetails) {\r\n switch (item.Action) {\r\n case HistoryEventTypesEnum.RowAdded:\r\n return this.RC('lblHistoryLineAdded', item.EntityType, `${item.EntityLineID + 1}`);\r\n case HistoryEventTypesEnum.RowDeleted:\r\n return this.RC('lblHistoryLineRemoved', item.EntityType, `${item.EntityLineID + 1}`);\r\n case HistoryEventTypesEnum.FieldChange:\r\n return `${item.EntityType} ${item.EntityLineID + 1}`;\r\n }\r\n }\r\n\r\n ShowChangeLabel(items: HistoryChangeDetails[], item: HistoryChangeDetails, index: number, type: 'entity' | 'lines') {\r\n return (item.Action !== 'Special') && index > 0 \r\n ? type === 'entity' \r\n ? items[index].EntityEntryID !== items[index - 1].EntityEntryID || items[index].Action !== items[index - 1].Action\r\n : items[index].EntityLineID !== items[index - 1].EntityLineID || items[index].Action !== items[index - 1].Action\r\n : true;\r\n }\r\n\r\n IsItemCollapsed(item) {\r\n return this.Entities.indexOf(item) !== this.Entities.length - 1;\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{ item.CreatedDate | formatDateShort }}\\r\\n {{ item.CreatedDate | formatTime }}\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{ getChangeLabel(change) }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{change.FieldName}}:
\\r\\n
{{change.OldValue || '-'}}
\\r\\n
\\r\\n
{{change.NewValue || '-'}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\";","import { NgModule } from '@angular/core';\r\n\r\n//DevExpress built-in stuff\r\nimport { DevExtremeModule } from 'devextreme-angular';\r\n\r\n\r\n\r\n\r\n@NgModule({\r\n imports:\r\n [\r\n DevExtremeModule\r\n ],\r\n \r\n exports:\r\n [\r\n DevExtremeModule\r\n ]\r\n \r\n})\r\nexport class M4UDevExpressModule\r\n{\r\n\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseState, LoginParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\n\r\nclass State extends BaseState {\r\n OldPassword: string\r\n NewPassword1: string\r\n NewPassword2: string\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordchange',\r\n templateUrl: './passwordchange.component.html',\r\n styleUrls: ['./passwordchange.component.scss']\r\n})\r\nexport class PasswordChangeComponent extends BasePageComponent\r\n{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'ChangePasswordComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n\r\n //Make the change. \r\n //After making the change, logout and show the login screen\r\n //Also, reset the stored password\r\n //This procedure is done since the session has expired on the server because of the change, and we need a new one\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.OldPassword;\r\n params.NewPassword = this.State.NewPassword1;\r\n this.Do(this.loginEndpoint.ChangePassword(params), false, () => {\r\n this.UI.InfoMessage(RC(\"titlePasswordChanged\"));\r\n // this.A.Session.LogoutAndResetSession();\r\n this.A.Session.EndSession(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); });\r\n });\r\n }\r\n\r\n OnCancel() {\r\n this.A.Framework.NavigateDefault();\r\n }\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params), false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseResponse, BaseState, CredentialsCheckResponse, LoginParams } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.enum';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { EnumCheckCredentialsResult, EnumLoginSecureKeyTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n UserName: string\r\n OldPassword: string\r\n NewPassword1: string\r\n NewPassword2: string\r\n ShowPasswordRecoveryLink: boolean;\r\n Stage: number;\r\n MFACode: string;\r\n AdditionalTitle: string;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordchangeexpired',\r\n templateUrl: './passwordchangeexpired.component.html',\r\n styleUrls: ['./passwordchangeexpired.component.scss']\r\n})\r\nexport class PasswordChangeExpiredComponent extends BasePageComponent\r\n{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'ChangePasswordExpiredComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n //Set initial username\r\n override OnInitState() {\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.State.ShowPasswordRecoveryLink = this.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordRecovery);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.State.Stage = 1;\r\n this.State.AdditionalTitle = this.RC('titleChangePassword');\r\n }\r\n\r\n //Make the change. \r\n //After making the change, show the login screen\r\n //Also, reset the stored password\r\n //This procedure is done since the session has expired on the server because of the change, and we need a new one\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new LoginParams();\r\n params.Language = SysGlobals.Language;\r\n params.UserName = this.State.UserName;\r\n\r\n if (this.State.Stage === 1) {\r\n params.SecureKey = this.State.OldPassword;\r\n params.NewPassword = this.State.NewPassword1;\r\n } else {\r\n params.SecureKey = this.State.MFACode;\r\n params.SecureKeyType = EnumLoginSecureKeyTypes.MFACode;\r\n params.Password = this.State.OldPassword;\r\n params.NewPassword = this.State.NewPassword1;\r\n }\r\n\r\n this.loginEndpoint.ChangePasswordExpired(params).subscribe((response: CredentialsCheckResponse | BaseResponse) => {\r\n if (response instanceof BaseResponse) {\r\n if (!response.IsSuccess) this.UI.StopMessage(response.ResponseMessage);\r\n this.GoToLogin();\r\n return;\r\n }\r\n switch (response.CheckResult) {\r\n case EnumCheckCredentialsResult.Success:\r\n this.UI.InfoMessage(RC(\"titlePasswordChanged\"));\r\n this.GoToLogin();\r\n return;\r\n case EnumCheckCredentialsResult.MFAEmailSent:\r\n this.State.Stage = 2;\r\n this.State.AdditionalTitle = this.RC('titleMFACodeOnEmailSent');\r\n return;\r\n case EnumCheckCredentialsResult.MFASMSSent:\r\n this.State.Stage = 2;\r\n this.State.AdditionalTitle = this.RC('titleMFACodeOnPhoneSent');\r\n return;\r\n default:\r\n (response.CheckResultMessage || response['ResponseMessage']) && (this.UI.StopMessage(response.CheckResultMessage || response['ResponseMessage']));\r\n this.GoToLogin();\r\n return;\r\n }\r\n });\r\n }\r\n\r\n OnCancel() {\r\n this.GoToLogin();\r\n }\r\n\r\n GoToLogin() {\r\n this.A.Session.EndSession(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language, UserName: this.State.UserName }); });\r\n }\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params), false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n\r\n OnForgotPassword() {\r\n this.Navigate(['/system/passwordrecovery']);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { CredentialCheckResponse } from './../../../../base/entities/BaseEntities';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseState, LoginParams, PasswordRecoveryParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { EnumNotificationDeliveryOptions, EnumSystemOptions } from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\n\r\nclass State extends BaseState {\r\n Stage: number;\r\n UserName: string;\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n Email: string;\r\n Phone: string;\r\n Token: string;\r\n NewPassword1: string;\r\n NewPassword2: string;\r\n UserNameCheckResponse: CredentialCheckResponse;\r\n DeliveryOptions: any[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordrecovery',\r\n templateUrl: './passwordrecovery.component.html',\r\n styleUrls: ['./passwordrecovery.component.scss']\r\n})\r\nexport class PasswordRecoveryComponent extends BasePageComponent{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'ChangePasswordExpiredComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n //Set initial username\r\n override OnInitState() {\r\n this.State.Stage = 1;\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.State.DeliveryOptions = this.LIST('NotificationDeliveryOptions').filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n default:\r\n break;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n //Send the recovery code to the phone/email as specified\r\n //If phone or email are invalid, an error will be returned\r\n //Upon success, move to the next stage\r\n OnSendRecoveryCode() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n const params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.DeliveryOption = this.State.DeliveryOption;\r\n params.Address = (this.State.DeliveryOption == EnumNotificationDeliveryOptions.Email ? this.State.Email : this.State.Phone);\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.RecoverPassword(params), false, () => this.State.Stage = 3);\r\n }\r\n\r\n OnCheckUsername() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n\r\n const params = new LoginParams();\r\n params.UserName = this.State.UserName;\r\n this.Do(this.loginEndpoint.CheckUserName(params), false, (response) => {\r\n this.State.UserNameCheckResponse = response.Entity;\r\n\r\n if (!this.State.UserNameCheckResponse.IsExists) {\r\n this.UI.UnexpectedMessage(this.RC('errorUserNameNotFound'));\r\n } else if (!this.State.UserNameCheckResponse.HasEmail && !this.State.UserNameCheckResponse.HasPhone) {\r\n this.UI.UnexpectedMessage(this.RC('errorIsNotExistsPhoneAndEmail'));\r\n } else {\r\n if (!this.State.UserNameCheckResponse.HasPhone)\r\n this.State.DeliveryOptions = this.State.DeliveryOptions.filter(x => x.Value == EnumNotificationDeliveryOptions.Email);\r\n if (!this.State.UserNameCheckResponse.HasEmail)\r\n this.State.DeliveryOptions = this.State.DeliveryOptions.filter(x => x.Value != EnumNotificationDeliveryOptions.Email);\r\n this.State.Stage = 2;\r\n this.State.DeliveryOption = this.State.DeliveryOptions?.length > 0 ? this.State.DeliveryOptions[0].Value : null;\r\n }\r\n });\r\n }\r\n\r\n //Verify the recovery token\r\n //Upon success, move to the next screen\r\n OnVerifyRecoveryToken() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n const params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyRecoveryToken(params), false, () => this.State.Stage = 4);\r\n }\r\n\r\n //Go back to previous stage\r\n OnResend() {\r\n this.InitState();\r\n this.State.Stage = 1;\r\n }\r\n\r\n OnCancel() {\r\n this.Navigate(['system/login']);\r\n }\r\n\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n const params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params),\r\n false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n\r\n //Make the change. \r\n //After making the change, logout and show the login screen\r\n //Also, reset the stored password\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n const params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n params.NewPassword = this.State.NewPassword1;\r\n this.Do(this.loginEndpoint.ChangePasswordByToken(params), false, () => {\r\n this.UI.InfoMessage(RC('titlePasswordChanged'));\r\n // this.A.Session.LogoutAndResetSession();\r\n this.A.Session.EndSession(() => {\r\n this.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n });\r\n });\r\n }\r\n\r\n GetAdditionalTitle() {\r\n switch (this.State.Stage) {\r\n case 1: return this.RC('titleRecoverPassword1');\r\n case 2: return this.RC('titleRecoverPassword2');\r\n case 3: return this.RC('titleRecoverPassword3');\r\n case 4: return this.RC('titleRecoverPassword4');\r\n }\r\n\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { BaseEntity, BaseState, LoginParams, PasswordRecoveryParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\n\r\nclass State extends BaseState {\r\n Stage: number;\r\n UserName: string\r\n Token: string;\r\n NewPassword1: string;\r\n NewPassword2: string;\r\n\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordwelcome',\r\n templateUrl: './passwordwelcome.component.html',\r\n styleUrls: ['./passwordwelcome.component.scss']\r\n})\r\nexport class PasswordWelcomeComponent extends BasePageComponent\r\n{\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'ChangePasswordExpiredComponent', LoginParams, State);\r\n this.BindHandler('IsPasswordsMatch');\r\n this.BindHandler('IsPasswordComplex');\r\n }\r\n\r\n //Set initial params\r\n override OnInitState() {\r\n this.State.Stage = 2;\r\n this.State.UserName = this.QueryParams.UserName;\r\n this.State.Token = this.QueryParams.Token;\r\n\r\n //Set language\r\n if (this.QueryParams.Language != undefined) {\r\n SysGlobals.Language = this.QueryParams.Language;\r\n this.Framework.InitLanguage();\r\n this.Framework.InitializeDevExpress();\r\n }\r\n }\r\n\r\n\r\n //Verify the recovery token\r\n //Upon success, move to the next screen\r\n OnVerifyRecoveryToken() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyRecoveryToken(params), false, () => this.State.Stage = 3);\r\n }\r\n\r\n //Go back to previous stage\r\n OnResend() {\r\n this.InitState();\r\n this.State.Stage = 1;\r\n }\r\n\r\n OnCancel() {\r\n this.Navigate(['system/login']);\r\n }\r\n\r\n\r\n IsPasswordsMatch(): boolean {\r\n return this.State.NewPassword1 == this.State.NewPassword2;\r\n }\r\n\r\n //Verifies (server-side) whether password is complex enough\r\n IsPasswordComplex() {\r\n return new Promise((resolve, reject) => {\r\n var params = new LoginParams;\r\n params.SecureKey = this.State.NewPassword1;\r\n params.Language = SysGlobals.Language;\r\n this.Do(this.loginEndpoint.VerifyPasswordComplexity(params), false, () => resolve(true), (response: BaseResponse) => reject(response.ResponseMessage));\r\n });\r\n }\r\n\r\n //Make the change. \r\n //After making the change, logout and show the login screen\r\n //Also, reset the stored password\r\n OnSubmit() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n var params = new PasswordRecoveryParams;\r\n params.UserName = this.State.UserName;\r\n params.Token = this.State.Token;\r\n params.Language = SysGlobals.Language;\r\n params.NewPassword = this.State.NewPassword1;\r\n this.Do(this.loginEndpoint.ChangePasswordByToken(params), false, () => {\r\n this.UI.InfoMessage(RC(\"titlePasswordChanged\"));\r\n //this.A.Session.LogoutAndResetSession();\r\n this.A.Session.EndSession(() => { this.Navigate(['/system/login'], { Language: SysGlobals.Language }); });\r\n });\r\n }\r\n\r\n GetAdditionalTitle() {\r\n return this.State.Stage === 2 ? this.RC('titleWelcomePassword2') : this.State.Stage === 3 ? this.RC('titleRecoverPassword3') : '';\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { SaveCredentialsParams } from './../../../../base/entities/BaseEntities';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport {\r\n BaseState, BaseEntity, BaseEntityResponse, CredentialExternalInfo,\r\n BaseDataResponse, WebAPICredentialInfo, WebAPICredential, WebAPIAllowedIP\r\n} from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { EnumPageDisplayModes, EnumNotificationDeliveryOptions, EnumMFAMethods } from '@core/framework/sysenums.enum';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/systemoptions.enum';\r\nimport { WelcomeUserDialogComponent } from './welcome-user-dialog/welcome-user-dialog.component';\r\n\r\n\r\nclass State extends BaseState {\r\n Credential: WebAPICredential = new WebAPICredential;\r\n WebAPIAllowedIPs: WebAPIAllowedIP[] = [];\r\n CredentialInfo: CredentialExternalInfo = new CredentialExternalInfo;\r\n IsExists: boolean = false;\r\n IsLockedOut: boolean = false;\r\n IsSupportedUserWelcome: boolean = false;\r\n MFAMethodList: any[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-passwordmanage',\r\n templateUrl: './passwordmanage.component.html',\r\n styleUrls: ['./passwordmanage.component.scss']\r\n})\r\nexport class PasswordManageComponent extends BasePageComponent{\r\n @ViewChild('validationGroup') validationGroup: DxValidationGroupComponent;\r\n @ViewChild('welcomeUserDialog') welcomeUserDialog: WelcomeUserDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private loginEndpoint: LoginEndpoint) {\r\n super(A, 'PasswordManageComponent', BaseEntity, State, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.LoadCredentials();\r\n this.LoadCredentialsInfo();\r\n }\r\n\r\n override OnInitTitle() {\r\n const userName = this.State.CredentialInfo && this.State.CredentialInfo.DisplayUserName;\r\n return userName && `${this.GetDefaultTitle()} - ${userName}`;\r\n }\r\n\r\n LoadCredentials() {\r\n this.Do(this.loginEndpoint.GetCredentials(this.QueryParams.CredentialID, this.QueryParams.Type),\r\n false, (response: BaseDataResponse) => {\r\n this.State.IsExists = true;\r\n if (response.Data) {\r\n this.State.Credential.UserName = response.Data.UserName;\r\n this.State.Credential.Type = response.Data.Type;\r\n this.State.Credential.IsActive = response.Data.IsActive;\r\n this.State.Credential.IsPendingWelcome = response.Data.IsPendingWelcome;\r\n this.State.Credential.MFAMethod = response.Data.MFAMethod;\r\n this.State.Credential.IsRestrictByIP = response.Data.IsRestrictByIP;\r\n this.State.Credential.IsExcludeFromMFA = response.Data.IsExcludeFromMFA;\r\n this.State.IsLockedOut = response.Data.IsLockedOut;\r\n this.State.IsSupportedUserWelcome = response.Data.IsSupportedUserWelcome;\r\n this.State.WebAPIAllowedIPs = response.Data.WebAPIAllowedIPs;\r\n }\r\n }, () => {\r\n this.State.IsExists = false;\r\n this.State.Credential.MFAMethod = EnumMFAMethods.None;\r\n this.OnGenerateRandomPassword();\r\n });\r\n }\r\n\r\n LoadCredentialsInfo() {\r\n this.Do(this.loginEndpoint.GetExternalInfo(this.QueryParams.CredentialID, this.QueryParams.Type),\r\n false, (response: BaseEntityResponse) => {\r\n if (response.Entity) {\r\n this.State.CredentialInfo = response.Entity;\r\n this.NotifyReloadTitle();\r\n if (!this.State.IsExists) {\r\n this.State.Credential.UserName = this.State.CredentialInfo.Email;\r\n this.State.Credential.Type = this.QueryParams.Type;\r\n\r\n if (!this.State.Credential.UserName) {\r\n this.State.Credential.UserName = this.QueryParams.UserName;\r\n }\r\n }\r\n this.OnInitMFAMethodsList();\r\n }\r\n });\r\n }\r\n\r\n OnGenerateRandomPassword() {\r\n this.Do(this.loginEndpoint.GenerateRandomPassword(), false,\r\n (response: BaseDataResponse) => this.State.Credential.Password = response.Data);\r\n }\r\n\r\n OnSaveChanges() {\r\n if (!this.IsValid()) {\r\n return;\r\n }\r\n\r\n this.ValidateValidationGroup(this.validationGroup).then((isValid) => {\r\n if (isValid) {\r\n const params = new SaveCredentialsParams();\r\n params.CredentialID = this.QueryParams.CredentialID;\r\n params.UserName = this.State.Credential.UserName;\r\n params.Password = this.State.Credential.Password;\r\n params.Type = this.State.Credential.Type;\r\n params.MFAMethod = this.State.Credential.MFAMethod;\r\n params.IsRestrictByIP = this.State.Credential.IsRestrictByIP;\r\n params.IsExcludeFromMFA = this.State.Credential.IsExcludeFromMFA;\r\n params.WebAPIAllowedIPs = this.State.WebAPIAllowedIPs;\r\n params.IsActive = this.State.Credential.IsActive;\r\n\r\n this.Do(this.loginEndpoint.SaveCredentials(params), true, () => {\r\n if (!this.State.IsExists) {\r\n this.LoadCredentials();\r\n return;\r\n }\r\n this.NotifyEntitySaved(this.State.Credential, WebAPICredential);\r\n const params = this.QueryParams.ReturnUrlParams ? JSON.parse(this.QueryParams.ReturnUrlParams) : undefined;\r\n this.QueryParams.ReturnUrl\r\n ? this.A.Navigator.Navigate([this.QueryParams.ReturnUrl], params)\r\n : this.A.RouteHistoryService.GoBack();\r\n });\r\n }\r\n });\r\n }\r\n\r\n OnMFAMethodChanged() {\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.None) {\r\n this.State.Credential.IsExcludeFromMFA = false;\r\n } else {\r\n this.State.Credential.IsRestrictByIP = false;\r\n }\r\n }\r\n\r\n OnIsRestrictByIPChanged() {\r\n if (!this.State.Credential.IsRestrictByIP) {\r\n this.State.Credential.IsExcludeFromMFA = false;\r\n }\r\n }\r\n\r\n IsMFAMethodNone() {\r\n return this.State.Credential.MFAMethod === EnumMFAMethods.None;\r\n }\r\n\r\n OnIPEditorPreparing(e) {\r\n if (e.dataField === 'IPRangeStart') {\r\n const defaultValueChangeHandler = e.editorOptions.onValueChanged;\r\n\r\n e.editorOptions.onValueChanged = (args) => {\r\n defaultValueChangeHandler(args);\r\n\r\n if (!e.row.data.IPRangeEnd) {\r\n e.component.cellValue(e.row.rowIndex, 'IPRangeEnd', e.row.data.IPRangeStart);\r\n }\r\n };\r\n }\r\n }\r\n\r\n OnUnlockUser() {\r\n this.State.IsLockedOut = false;\r\n this.Do(this.loginEndpoint.UnlockCredentials(this.QueryParams.CredentialID), true);\r\n }\r\n\r\n OnWelcomeUser() {\r\n this.welcomeUserDialog.CredentialID = this.QueryParams.CredentialID;\r\n this.welcomeUserDialog.CredentialInfo = this.State.CredentialInfo;\r\n this.welcomeUserDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n private IsValid() {\r\n if (this.State.Credential.IsRestrictByIP || this.State.Credential.IsExcludeFromMFA) {\r\n if (this.State.WebAPIAllowedIPs.length === 0) {\r\n this.UI.StopMessage(this.RC('msgIPRangesIsEmpty'));\r\n\r\n return false;\r\n } else {\r\n if (this.State.WebAPIAllowedIPs.some(x => Utils.IsEmpty(x.IPRangeStart) && Utils.IsEmpty(x.IPRangeEnd))) {\r\n this.UI.StopMessage(this.RC('msgIPRangeIsEmpty'));\r\n\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private OnInitMFAMethodsList() {\r\n const isEmailChannelActive = this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n const isSMSChannelActive = this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n const isWhatsAppChannelActive = this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n\r\n this.State.MFAMethodList = this.LIST('MFAMethods').filter(x => {\r\n if (x.Value === EnumMFAMethods.None) return true;\r\n\r\n // Check MFAMethod Email\r\n if (x.Value === EnumMFAMethods.Email) {\r\n // If Email is filled then add MFAMethod to the list\r\n if (this.State.CredentialInfo.Email && isEmailChannelActive) return true;\r\n // If old MFAMethod is Email, set it as disabled and add to the list\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.Email) {\r\n (x as any).disabled = true;\r\n return true;\r\n }\r\n }\r\n\r\n // Check MFAMethod SMS\r\n if (x.Value === EnumMFAMethods.SMS) {\r\n // If Phone is filled then add MFAMethod to the list\r\n if (this.State.CredentialInfo.Phone && isSMSChannelActive) return true;\r\n // If old MFAMethod is SMS, set it as disabled and add to the list\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.SMS) {\r\n (x as any).disabled = true;\r\n return true;\r\n }\r\n }\r\n\r\n if (x.Value === EnumMFAMethods.WhatsApp) {\r\n if (this.State.CredentialInfo.Phone && isWhatsAppChannelActive) return true;\r\n if (this.State.Credential.MFAMethod === EnumMFAMethods.WhatsApp) {\r\n (x as any).disabled = true;\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n //GetPasswordTooltipLabel(): string {\r\n // return this.RC('msgPasswordComplexityRequirement').replace('{0}', this.SystemOption(EnumSystemOptions.PasswordComplexityLen))\r\n // .replace('{1}', this.SystemOption(EnumSystemOptions.PasswordComplexityMinDigits))\r\n // .replace('{2}', this.SystemOption(EnumSystemOptions.PasswordComplexityMinChars));\r\n //}\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
{{'lblCredentialsNotExist' | RC}}
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{'lblPendingWelcome' | RC}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, Output, EventEmitter } from \"@angular/core\";\r\nimport { AppConfigService } from '../../../../configuration/app.config.service';\r\n\r\n@Component({\r\n selector: 'm4u-captcha',\r\n templateUrl: './captcha.component.html',\r\n styleUrls: ['./captcha.component.scss']\r\n})\r\nexport class CaptchaComponent {\r\n @Output() OnResolved = new EventEmitter();\r\n // setup re-captcha -> https://www.google.com/recaptcha/admin/create\r\n SiteKey = this.appConfigService.M4UConfig.captchaKey;\r\n\r\n constructor(private appConfigService: AppConfigService) { }\r\n\r\n OnCaptchaResolved(e) {\r\n this.OnResolved.emit(e);\r\n }\r\n}","export default \"\";","import { Component, Output, EventEmitter, Input, ViewChild } from '@angular/core';\r\nimport { BaseState, AttachedFile, Media } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { FileBoxDialogComponent } from '../../../dialogs/filebox-dialog/fileboxdialog.component';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { RC } from '@core/framework/resources.service';\r\nimport { FileSizePipe } from '../../../directives/Pipes';\r\nimport { PhotoBoxDialogComponent } from '@ui/dialogs/photobox-dialog/photoboxdialog.component';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n Language: string;\r\n Files: AttachedFile[];\r\n DragOverCount = 0;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-attachedfiles',\r\n templateUrl: './attached-files.component.html',\r\n styleUrls: ['./attached-files.component.scss'],\r\n providers: [FileSizePipe]\r\n})\r\nexport class AttachedFilesComponent extends BaseComponent {\r\n @Input() set Files(value: AttachedFile[]) {\r\n this.State.Files = value;\r\n this.ExtendFileInfo();\r\n }\r\n\r\n @Input() HideSelectingFileOnMobile = false;\r\n @Input() AllowOnlyImages = false;\r\n @Input() AllowDownload = true;\r\n @Input() AllowUpload = true;\r\n @Input() Disabled: boolean;\r\n @Input() Accept: string;\r\n @Output() FilesChanged = new EventEmitter();\r\n @Output() DownloadItem = new EventEmitter();\r\n @Input() MaxFileSize: number = 20 * 1024 * 1024;\r\n @Input() MaxFileSizeMessage = 'msgFileSizeRestriction';\r\n @Input() MaxFileSizeErrorMessage = 'errorMaxSizeUploadError';\r\n @Input() NotImageErrorErrorMessage = 'errorOnlyImageAllowed';\r\n @Input() AllowDragAndDrop: boolean;\r\n @Input() AllowMakePhoto: boolean;\r\n @Input() IsAutoSavePhotoAfterTake = false;\r\n\r\n @ViewChild(FileBoxDialogComponent) fileBoxDialog: FileBoxDialogComponent;\r\n @ViewChild(PhotoBoxDialogComponent) photoBoxDialog: PhotoBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n public screen: ScreenService,\r\n private fileSizePipe: FileSizePipe) {\r\n super(A, 'AttachedFilesComponent', State);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Language = SysGlobals.Language;\r\n this.State.Files = this.State.Files || [];\r\n }\r\n\r\n OnDownloadItem(file: AttachedFile) {\r\n if (this.AllowDownload) {\r\n this.DownloadItem.emit(file);\r\n }\r\n }\r\n\r\n OnDeleteItem(file: AttachedFile) {\r\n if (file.NewFile) {\r\n const idx = this.State.Files.findIndex(f => f.Name === file.Name && !!f.NewFile);\r\n if (idx !== -1) {\r\n this.State.Files.splice(idx, 1);\r\n this.FilesChanged.emit(this.State.Files);\r\n }\r\n }\r\n }\r\n\r\n OnAddFilesToUpload() {\r\n this.fileBoxDialog.ShowDialog((list: File[]) => {\r\n if (list && list.length) {\r\n this.OnChangeUpload(list);\r\n }\r\n });\r\n }\r\n\r\n OnChangeUpload(files: File[]) {\r\n let maxSizeError = false;\r\n let notImageError = false;\r\n\r\n for (const file of files) {\r\n const newFiles = this.State.Files.filter(f => !!f.NewFile);\r\n if (newFiles.findIndex(fu => fu.NewFile.name === file.name) === -1) {\r\n\r\n if (this.AllowOnlyImages && !this.IsImage(file.type)) {\r\n notImageError = true;\r\n } else if (file.size > this.MaxFileSize) {\r\n maxSizeError = true;\r\n } else {\r\n const newFile = {\r\n Name: file.name,\r\n NewFile: file,\r\n Size: file.size,\r\n IconStyle: 'mdi mdi-file-outline',\r\n IsDisplayedAsImage: this.IsImage(file.type)\r\n } as AttachedFile;\r\n this.State.Files.push(newFile);\r\n }\r\n }\r\n }\r\n\r\n if (notImageError) this.UI.StopMessage(RC(this.NotImageErrorErrorMessage));\r\n if (maxSizeError) this.UI.StopMessage(RC(this.MaxFileSizeErrorMessage, this.fileSizePipe.transform(this.MaxFileSize)));\r\n\r\n this.FilesChanged.emit(this.State.Files);\r\n }\r\n\r\n OnDropFiles(e) {\r\n this.PreventDefault(e);\r\n this.State.DragOverCount--;\r\n this.OnChangeUpload(e.dataTransfer.files);\r\n }\r\n\r\n OnDragLeave(e) {\r\n this.PreventDefault(e);\r\n this.State.DragOverCount--;\r\n }\r\n\r\n OnDragEnter(e) {\r\n this.PreventDefault(e);\r\n this.State.DragOverCount++;\r\n }\r\n\r\n OnDragOver(e) {\r\n this.PreventDefault(e); \r\n }\r\n\r\n IsDragOver(): boolean {\r\n return this.State.DragOverCount > 0 ? true : false;\r\n }\r\n\r\n OnShowPhotoBox() {\r\n this.photoBoxDialog.ShowDialogShort((photos: Media[]) => {\r\n if (photos) {\r\n let photoNumber = 0;\r\n this.OnChangeUpload(photos.map((photo) => this.ConvertBase64ToImageJpeg(photo.ImageBase64, photoNumber++)));\r\n }\r\n });\r\n }\r\n\r\n private IsImage(fileType: string): boolean {\r\n return fileType.startsWith('image');\r\n }\r\n\r\n private ExtendFileInfo() {\r\n if (this.State.Files) {\r\n this.State.Files.forEach(f => {\r\n f.IconStyle = this.GetIconStyle(f);\r\n });\r\n }\r\n }\r\n\r\n private GetIconStyle(file: AttachedFile): string {\r\n return Utils.GetIconStyle(file.Extension);\r\n }\r\n\r\n private PreventDefault(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n private ConvertBase64ToImageJpeg(base64: string, imageNumber: number) {\r\n const photoInfo = base64.split(';');\r\n const decodedData = atob(photoInfo[1].substring(photoInfo[1].indexOf(',') + 1));\r\n let dataLength = decodedData.length;\r\n const u8arr = new Uint8Array(dataLength);\r\n\r\n while (dataLength--) {\r\n u8arr[dataLength] = decodedData.charCodeAt(dataLength);\r\n }\r\n\r\n const name = `Photo_${this.GetStringDateNow()}.jpg`;\r\n\r\n return new File([u8arr], name, { type: 'image/jpeg' });\r\n }\r\n\r\n private GetStringDateNow(){\r\n const now = new Date();\r\n \r\n // eslint-disable-next-line max-len\r\n return `${this.FormatDatePart(now.getDate())}${this.FormatDatePart(now.getMonth() + 1)}${now.getFullYear()} _${this.FormatDatePart(now.getHours())}${this.FormatDatePart(now.getMinutes())}${this.FormatDatePart(now.getSeconds())}`;\r\n }\r\n\r\n private FormatDatePart(part: number) {\r\n return part.toString().padStart(2, '0');\r\n }\r\n}\r\n","export default \"
\\r\\n\\r\\n
\\r\\n {{'lblDragAndDrop' | RC}}\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{(MaxFileSizeMessage | RC:THIS).replace('{0}', (MaxFileSize | fileSize))}}\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\";","import { BaseState, AttachedFile } from '@base/entities/BaseEntities';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { ImageBoxDialogComponent } from '@ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\n\r\nclass State extends BaseState {\r\n ImageSource: string;\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-filecard',\r\n templateUrl: './file-card.component.html',\r\n styleUrls: ['./file-card.component.scss']\r\n})\r\nexport class FileCardComponent extends BaseComponent {\r\n @Input() Entity: AttachedFile;\r\n @Input() AllowDownload = true;\r\n @Input() Disabled = false;\r\n @Input() ShowDeleteOptionForcely = false;\r\n @Input() ShowDownloadOptionForcely = false;\r\n @Output() DeleteItem = new EventEmitter();\r\n @Output() DownloadItem = new EventEmitter();\r\n\r\n @ViewChild(ImageBoxDialogComponent) imageDialog: ImageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'FileCardComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.Entity.IsDisplayedAsImage) {\r\n Utils.LoadFilesBody([this.Entity.NewFile], (uploadFiles) => {\r\n const file = uploadFiles[0];\r\n this.State.ImageSource = Utils.GetImageSource(file.Data, this.Entity.NewFile.type);\r\n });\r\n }\r\n }\r\n\r\n OnImageClick() {\r\n if (!this.Entity?.IsDisplayedAsImage) {\r\n return;\r\n }\r\n\r\n this.imageDialog.ImageSource = this.State.ImageSource;\r\n this.imageDialog.ShowDialogShort(() => { });\r\n }\r\n\r\n OnCloseClick() {\r\n this.imageDialog.CloseDialogWithSuccess();\r\n }\r\n\r\n OnDeleteItem() {\r\n this.DeleteItem.emit(this.Entity);\r\n }\r\n\r\n OnDownloadItem() {\r\n this.DownloadItem.emit(this.Entity);\r\n }\r\n\r\n OnClose() {\r\n this.NavigateBack();\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{Entity.Name + (Entity.Extension || '')}}\\r\\n
\\r\\n
\\r\\n
{{Entity.Size | fileSize}}
\\r\\n
|
\\r\\n
{{ Entity.Date | formatDate }}
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { BaseState } from \"@base/entities/BaseEntities\";\r\nimport { BaseComponent } from \"@base/component/BaseComponent\";\r\nimport { ServiceBagService } from \"@base/component/ServiceBag\";\r\n\r\n/**\r\n * Example of usage:\r\n * \r\n */\r\n@Component({\r\n selector: 'm4u-search',\r\n templateUrl: './search.component.html',\r\n styleUrls: ['./search.component.scss']\r\n})\r\nexport class M4USearchComponent extends BaseComponent\r\n{\r\n @Input() SearchText: string = '';\r\n @Input() Placeholder: string = this.RC('lblSearch');\r\n @Input() DebounceTime: number = 500;\r\n @Input() MinSymbols: number = 0;\r\n @Input() Min: number = 0;\r\n @Input() Max: number = 0;\r\n @Output() OnSearch = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, \"M4USearchComponent\", BaseState);\r\n }\r\n\r\n Search(force: boolean) {\r\n\r\n if (this.SearchText == null || this.SearchText == '') {\r\n this.SearchText = '';\r\n this.OnSearch.emit('');\r\n return;\r\n }\r\n\r\n if (this.MinSymbols > 0 && !force) {\r\n if (this.SearchText && this.SearchText.length >= this.MinSymbols) {\r\n this.OnSearch.emit(this.SearchText);\r\n }\r\n return;\r\n }\r\n\r\n this.OnSearch.emit(this.SearchText);\r\n }\r\n\r\n Clear(event?: any) {\r\n if (!event || !event.value) {\r\n this.SearchText = '';\r\n this.Search(true);\r\n }\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'm4u-loading-animation',\r\n templateUrl: './loading-animation.component.html',\r\n styleUrls: ['./loading-animation.component.scss']\r\n})\r\nexport class M4ULoadingAnimationComponent {\r\n constructor() { }\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Injectable, Type } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class InjectedComponentsBaseService {\r\n\r\n GetComponents(destination: string): Type[] {\r\n return [];\r\n }\r\n}","import { Component, ComponentFactoryResolver, Input, OnInit, ViewContainerRef } from '@angular/core';\r\nimport { InjectedComponentsBaseService } from '@core/framework/injected-components-base.service';\r\n\r\n@Component({\r\n selector: 'm4u-injected-components',\r\n templateUrl: './injected-components.component.html'\r\n})\r\nexport class InjectedComponentsComponent implements OnInit {\r\n @Input() Destination: string;\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver, private viewContainerRef: ViewContainerRef,\r\n private service: InjectedComponentsBaseService) { }\r\n\r\n ngOnInit() {\r\n this.loadComponents();\r\n }\r\n\r\n loadComponents() {\r\n (this.service.GetComponents(this.Destination) || []).forEach((buttonComponent) => {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(buttonComponent);\r\n componentFactory.inputs\r\n this.viewContainerRef.createComponent(componentFactory);\r\n });\r\n }\r\n}\r\n","export default \"\";","import { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseState, LoginParams, BaseResponse } from '@base/entities/BaseEntities';\r\nimport { Component, ViewChild } from '@angular/core';\r\nimport {\r\n EnumLanguages, EnumLoginExtensionLinkType, EnumLoginSecureKeyTypes,\r\n EnumNotificationDeliveryOptions\r\n} from '@core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@core/framework/sysglobals';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { EnumSystemOptions } from '@core/framework/systemoptions.enum';\r\nimport { DxValidationGroupComponent } from 'devextreme-angular';\r\nimport { LoginExtensionLink } from '@base/classes/BaseClasses';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\n\r\nclass State extends BaseState {\r\n IsSupportedLoginByPassword: boolean;\r\n IsSaveCredentials: boolean;\r\n IsRequireTaxNumberForOTP: boolean;\r\n ShowPasswordRecoveryLink: boolean;\r\n LoginExtensionLinks$: Observable;\r\n ReturnUrl: string;\r\n ReturnUrlParams: string;\r\n Stage: number;\r\n DeliveryOptions: any[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-login-by-otp',\r\n templateUrl: './login-by-otp.component.html',\r\n styleUrls: ['./login-by-otp.component.scss']\r\n})\r\nexport class LoginByOtpComponent extends BasePageComponent {\r\n @ViewChild('validationGroup') protected validationGroup: DxValidationGroupComponent;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private loginService: LoginService,\r\n private loginEndpoint: LoginEndpoint,\r\n private languageService: LanguageService) {\r\n super(A, 'LoginByOtpComponent', LoginParams, State);\r\n }\r\n\r\n override OnInitComponent() {\r\n if (this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByOTP) == false) {\r\n this.Navigate(['/system/login'], { Language: SysGlobals.Language });\r\n return;\r\n }\r\n\r\n this.State.DeliveryOptions = this.LIST('NotificationDeliveryOptions').filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n default:\r\n break;\r\n }\r\n return false;\r\n });\r\n this.State.ShowPasswordRecoveryLink = this.SystemOptionFlag(EnumSystemOptions.IsSupportedPasswordRecovery);\r\n this.State.IsSupportedLoginByPassword = this.SystemOptionFlag(EnumSystemOptions.IsSupportedLoginByPassword);\r\n this.State.IsRequireTaxNumberForOTP = this.SystemOptionFlag(EnumSystemOptions.IsRequireTaxNumberForOTP);\r\n this.Entity.DeliveryOption = this.State.DeliveryOptions[0]?.Value;\r\n this.State.ReturnUrl = this.QueryParams.ReturnUrl\r\n && (this.QueryParams.ReturnUrl as string).replace(this.A.AppConfigService.M4UConfig.deploymentApplicationFolder, '');\r\n this.State.ReturnUrlParams = this.QueryParams.ReturnUrlParams;\r\n this.State.Stage = 1;\r\n\r\n this.LoadExtension();\r\n\r\n this._subscriptions.push(this.languageService.Language$.subscribe(language => {\r\n if (this.Entity.Language === language) return;\r\n\r\n this.Entity.Language = language;\r\n\r\n this.A.Navigator.Navigate(['/system/login-otp'], { Language: SysGlobals.Language });\r\n setTimeout(() => this.A.Navigator.ReloadApplication(), 500);\r\n }));\r\n }\r\n\r\n override OnInitEntity() {\r\n //Take default language from URL to allow presetting it\r\n if (this.QueryParams.Language != undefined) {\r\n this.Entity.Language = (this.QueryParams.Language == EnumLanguages.English ? EnumLanguages.English : EnumLanguages.Hebrew);\r\n } else {\r\n this.Entity.Language = this.A.AppConfigService.M4UConfig.defaultLanguage;\r\n }\r\n this.languageService.SetLanguage(this.Entity.Language);\r\n\r\n //Take sure if was passed in\r\n this.Entity.UserName = this.QueryParams.UserName;\r\n }\r\n\r\n OnExtensionLinkClick(link: LoginExtensionLink) {\r\n if (link.Type === EnumLoginExtensionLinkType.Route) this.Navigate([link.Link]);\r\n }\r\n\r\n OnPasswordRecovery() {\r\n this.Navigate(['/system/passwordrecovery'], { UserName: this.Entity.UserName });\r\n }\r\n\r\n override OnSubmitPage() {\r\n if (this.State.Stage == 1) this.OnSendOtp();\r\n else if (this.State.Stage == 2) this.OnLogin();\r\n }\r\n\r\n // Send otp\r\n OnSendOtp() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n this.Do(this.loginEndpoint.SendOtp(this.Entity), false, (response: BaseResponse) => {\r\n if (response.IsSuccess) {\r\n this.UI.InfoMessage(this.RC('msgNotificationSent'));\r\n this.State.Stage = 2;\r\n } else {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n });\r\n }\r\n\r\n // Perform the login\r\n OnLogin() {\r\n if (!this.validationGroup.instance.validate().isValid) return;\r\n this.Entity.SecureKeyType = EnumLoginSecureKeyTypes.Otp;\r\n this.loginService.DoLogin(this.Entity, false, this.State.IsSaveCredentials, () => {\r\n this.OnAfterInit();\r\n })\r\n .subscribe(() => { });\r\n }\r\n\r\n OnResend() {\r\n this.State.Stage = 1;\r\n }\r\n\r\n GoToLogin() {\r\n if (this.State.IsSupportedLoginByPassword) this.Navigate(['/system/login']);\r\n }\r\n\r\n private LoadExtension() {\r\n this.State.LoginExtensionLinks$ = this.A.AppConfigService.AppConfig.OnGetAppLoginExtensionLinks();\r\n }\r\n\r\n private OnAfterInit() {\r\n if (this.State.ReturnUrl) {\r\n const params = this.State.ReturnUrlParams ? JSON.parse(this.State.ReturnUrlParams) : undefined;\r\n this.A.Navigator.Navigate([this.State.ReturnUrl], params);\r\n return;\r\n }\r\n this.A.Framework.NavigateDefault();\r\n }\r\n\r\n GetAppTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('$$AppTitles.LoginAppName', moduleName);\r\n }\r\n\r\n GetAppCompanyName() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.A.ResourcesService.RC('$$AppTitles.LoginCompanyName', moduleName);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{'btnRecoverPassword' | RCX}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Injectable } from '@angular/core';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { BaseResponse, NotificationServer, NotificationTestParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable } from 'rxjs';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\n\r\n@Injectable()\r\nexport class NotificationServerEndpoint extends BaseEndpointCRUD {\r\n constructor(api: APIGatewayService) {super(\"NotificationServer\", api);}\r\n \r\n public TestNotificationServer(Params: NotificationTestParams): Observable {\r\n return this.api.ExecutePostAction(this.ControllerName, 'TestNotificationServer', Params);\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseDataStoreCRUDServer } from '@m4u-angular/base/datalayer/BaseDataStoreCRUDServer';\r\nimport { BaseEntity, BaseState, NotificationServer } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationServerEndpoint } from '@m4u-angular/core/endpoints/notification-server.endpoint';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-server-list',\r\n templateUrl: './notification-server-list.component.html',\r\n styleUrls: ['./notification-server-list.component.scss']\r\n})\r\nexport class NotificationServerListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationServerEndpoint: NotificationServerEndpoint) {\r\n super(A, 'NotificationServerListComponent', BaseEntity, BaseState);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === NotificationServer) this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['NotificationServers'] = new BaseDataStoreCRUDServer(this.notificationServerEndpoint);\r\n }\r\n\r\n OnNavigate() {\r\n this.Navigate(['/pages/general/notification-server/new']);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import {Component, ViewChild} from '@angular/core';\r\nimport {NotificationServerEndpoint} from '@m4u-angular/core/endpoints/notification-server.endpoint';\r\nimport {BaseResponse, BaseState, NotificationServer, NotificationTestParams} from '@m4u-angular/base/entities/BaseEntities';\r\nimport {ServiceBagService, ServiceBagServices} from '@m4u-angular/base/component/ServiceBag';\r\nimport {BasePageCRUDComponent} from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport {EnumMessageBoxTypes, EnumPageDisplayModes} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport {ContextMenuElement} from '@base/classes/BaseClasses';\r\nimport {NotificationTestDialogComponent, State} from '@ui/notifications/notification-test-dialog/notification-test-dialog.component';\r\nimport {MessageBoxDialogComponent} from '@ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-server',\r\n templateUrl: './notification-server.component.html'\r\n})\r\nexport class NotificationServerComponent extends BasePageCRUDComponent\r\n{\r\n @ViewChild('dialog') dialog: NotificationTestDialogComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private endpoint: NotificationServerEndpoint, private notificationServerEndpoint: NotificationServerEndpoint)\r\n {\r\n super(A, 'NotificationServerComponent', NotificationServer, BaseState, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) { return undefined; }\r\n\r\n return [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n }\r\n\r\n override OnDelete(): void {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('msgDeleteNotificationServerQuestion');\r\n this.messageBox.ShowDialogShort(() => { this.DeleteEntity(); });\r\n }\r\n\r\n OnTestNotification() {\r\n this.dialog.ShowDialogShort((state: State) => {\r\n const params = new NotificationTestParams;\r\n params.NotificationServerID = this.Entity.EntryID;\r\n params.DeliveryOption = state.DeliveryOption;\r\n params.FromAddress = state.FromAddress;\r\n params.Address = state.Address;\r\n\r\n this.Do(this.notificationServerEndpoint.TestNotificationServer(params), true, undefined,\r\n (response: BaseResponse) => this.A.UI.StopMessage(this.RC('lblNotificationServerWrong')));\r\n });\r\n }\r\n\r\n OnPredefinedSmtpServerSelected(e: any) {\r\n this.Entity.SMTPServer = e.itemData.SMTPServer;\r\n this.Entity.SMTPPort = e.itemData.SMTPPort;\r\n this.Entity.SMTPUseSSL = e.itemData.SMTPUseSSL;\r\n }\r\n\r\n OnPredefinedSmsServerSelected(e: any) {\r\n this.Entity.SMSEndpoint = e.itemData.SMSEndpoint;\r\n this.Entity.SMSToken = e.itemData.SMSToken;\r\n this.Entity.SMSEndPointIsInforU = e.itemData.SMSEndPointIsInforU;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\nimport { BaseDataResponse, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NotificationTemplateEndpoint extends BaseEndpointCRUD {\r\n constructor(api: APIGatewayService) {\r\n super('NotificationTemplate', api);\r\n }\r\n\r\n public UpdateIsUserCustomTemplate(oTemplate: NotificationTemplate): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'UpdateIsUserCustomTemplate', oTemplate);\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport { BaseEntity, BaseState, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { EnumCRUDActions } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template-list',\r\n templateUrl: './notification-template-list.component.html',\r\n styleUrls: ['./notification-template-list.component.scss']\r\n})\r\nexport class NotificationTemplateListComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationTemplateEndpoint: NotificationTemplateEndpoint) {\r\n super(A, 'NotificationTemplateListComponent', BaseEntity, BaseState);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n protected override OnExternalEntitySaved(ExternalEntity: BaseEntity, ExternalEntityType: new () => BaseEntity, ExternalEntityAction: EnumCRUDActions) {\r\n if (ExternalEntityType === NotificationTemplate) this.LoadDataSource();\r\n }\r\n\r\n LoadDataSource() {\r\n this.DataSources['NotificationTemplates'] = new DataSourceCustomAction((options: DataLoadOptions) => \r\n this.notificationTemplateEndpoint.GetList(options));\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntitiesResponse, BaseState, NotificationServer, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationServerEndpoint } from '@m4u-angular/core/endpoints/notification-server.endpoint';\r\nimport { NotificationTemplateEndpoint } from '@m4u-angular/core/endpoints/notification-template.endpoint';\r\nimport { EnumMessageBoxTypes, EnumPageDisplayModes} from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HtmlBoxDialogComponent } from '@m4u-angular/ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { DxTextAreaComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { NotificationPreviewDialogComponent } from '../notification-preview-dialog/notification-preview-dialog.component';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nexport class State extends BaseState {\r\n NotificationServers: NotificationServer[] = [];\r\n\r\n IsUserCustomTemplateOriginal: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template',\r\n templateUrl: './notification-template.component.html',\r\n styleUrls: ['./notification-template.component.scss']\r\n})\r\nexport class NotificationTemplateComponent extends BasePageCRUDComponent {\r\n\r\n @ViewChild('htmlEditorDialog') htmlEditorDialog: HtmlBoxDialogComponent;\r\n @ViewChild('previewDialog') previewDialog: NotificationPreviewDialogComponent;\r\n @ViewChild('messageBox') messageBox: MessageBoxDialogComponent;\r\n @ViewChild('htmlBody') htmlBody: DxTextAreaComponent;\r\n @ViewChild('phone') phone: DxTextBoxComponent;\r\n\r\n get SelectedNotificationServer() {\r\n return this.State.NotificationServers && this.Entity.NotificationServerID && this.Entity.NotificationServerID === -999 \r\n ? this.State.NotificationServers.find(n => n.EntryID !== -999) \r\n : this.State.NotificationServers.find(n => n.EntryID === this.Entity.NotificationServerID);\r\n }\r\n\r\n // eslint-disable-next-line max-len\r\n multipleEmailPattern: any = /^(([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)(\\s*;\\s*|\\s*$))*$/;\r\n infoUPhonePattern: any = /^[a-zA-Z0-9\\s]*$/;\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private endpoint: NotificationTemplateEndpoint,\r\n private notificationServerEndpoint: NotificationServerEndpoint) {\r\n super(A, 'NotificationTemplateComponent', NotificationTemplate, State, endpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this.LoadNotificationServers();\r\n }\r\n\r\n protected override OnEntityInitObjectName() {\r\n return this.Entity && this.Entity.Name;\r\n }\r\n\r\n protected override OnEntitySaved() {\r\n this.NavigateBack();\r\n }\r\n\r\n protected override OnInitContextMenus(): ContextMenuElement[] {\r\n if (this.IsAddMode) return undefined;\r\n\r\n return [{\r\n text: this.RC('titleDelete'),\r\n visible: true,\r\n onClick: this.OnDelete.bind(this)\r\n }];\r\n }\r\n\r\n protected override OnEntityLoaded(): void {\r\n this.State.IsUserCustomTemplateOriginal = this.Entity.IsUserCustomTemplate;\r\n }\r\n\r\n private LoadNotificationServers() {\r\n this.Do(this.notificationServerEndpoint.GetList(), false, (response: BaseEntitiesResponse) => {\r\n if (response.Entities.length === 1) {\r\n const defaultNotificationServer = {\r\n EntryID: -999, \r\n SMTPServer: this.RC('lblUseDefault')\r\n } as any;\r\n this.State.NotificationServers = [defaultNotificationServer, ...response.Entities];\r\n if (!this.Entity.NotificationServerID) this.Entity.NotificationServerID = -999;\r\n } else this.State.NotificationServers = response.Entities;\r\n });\r\n }\r\n\r\n OnShowInEditor() {\r\n this.htmlEditorDialog.Language = this.Entity.Language;\r\n this.htmlEditorDialog.HTMLBody = this.Entity.HTMLBody;\r\n this.htmlEditorDialog.ShowDialogShort((state: any) => {\r\n this.Entity.HTMLBody = state.HTMLBody;\r\n });\r\n }\r\n\r\n OnShowPreview() {\r\n this.previewDialog.HTMLBody = this.Entity.HTMLBody;\r\n this.previewDialog.ShowDialogShort(() => {});\r\n }\r\n\r\n override OnDelete(): void {\r\n this.messageBox.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBox.Prompt = this.RC('msgDeleteNotificationTemplateQuestion');\r\n this.messageBox.ShowDialogShort(() => {\r\n this.DeleteEntity(); \r\n });\r\n }\r\n\r\n OnEmailSectionToggle(isOpened: boolean) {\r\n if (isOpened) setTimeout(() => this.htmlBody && this.htmlBody.instance.repaint());\r\n }\r\n\r\n OnPhoneSectionToggle(isOpened: boolean) {\r\n if (isOpened) setTimeout(() => this.phone && this.phone.instance.repaint());\r\n }\r\n\r\n OnChangeIsUserCustomTemplate() {\r\n const template = Utils.CloneObject(this.Entity);\r\n template.IsUserCustomTemplate = this.Entity.IsUserCustomTemplate ? false : true;\r\n this.Do(this.Endpoint.UpdateIsUserCustomTemplate(template), true, (response) => {\r\n this.Entity.IsUserCustomTemplate = response.Data;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","\r\nimport { SysGlobals } from '../framework/sysglobals';\r\nimport { InputBoxDialogComponent } from '@m4u-angular/ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { Component, ViewChild } from '@angular/core';\r\n\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { SystemEndpoint } from '../endpoints/system.endpoint';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-mid-store',\r\n templateUrl: './mid-store.component.html'\r\n})\r\nexport class MidStoreComponent extends BasePageComponent {\r\n\r\n constructor(A: ServiceBagService,\r\n private systemEndpoint: SystemEndpoint) {\r\n super(A, ' MidStoreComponent', BaseEntity, BaseState);\r\n }\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n\r\n override OnInitComponentFinishedInternal() {\r\n this.inputBoxDialog.ShowDialogShort((value: string) => {\r\n this.Do(this.systemEndpoint.StoreMID(value), false, () => { this.Navigate(['/system/login'], { Language: SysGlobals.Language })})\r\n }, () => this.Navigate(['/system/login'], { Language: SysGlobals.Language }));\r\n }\r\n\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport {BaseState} from '@base/entities/BaseEntities';\r\nimport {BaseComponent} from '@base/component/BaseComponent';\r\nimport {ServiceBagService} from '@base/component/ServiceBag';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\nclass State extends BaseState {\r\n Value: number = 0;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-buttons',\r\n templateUrl: './demo-buttons.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoButtonsComponent extends BaseComponent implements IBottomSheetComponent {\r\n Context: BottomSheetDialogComponent;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoButtonsComponent', State);\r\n }\r\n \r\n\r\n public OnButtonClicked() {\r\n this.State.Value++;\r\n }\r\n}\r\n","export default \"\\r\\n

Buttons

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

(OnClick) - specifies callback function on click. Current\\r\\n value: {{State.Value}}.

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

Mode - changes initial styles.

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

Disabled - specifies if the button is clickable.

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

Type - changes background color for solid buttons.

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

Icon - add icon in button. Could be used with or without text.\\r\\n

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

IsRound - specifies if the button is rounded.

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

Size - changes height and width.

\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-demo-layout',\r\n templateUrl: './demo-layout.component.html',\r\n styleUrls: ['./demo-layout.component.scss']\r\n})\r\nexport class DemoLayoutComponent extends BaseComponent {\r\n \r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoLayoutComponent', State);\r\n }\r\n}","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","import {Component} from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport DataSource from \"devextreme/data/data_source\";\r\nimport ArrayStore from \"devextreme/data/array_store\";\r\n\r\nclass State extends BaseState {\r\n SelectOptions: any[] = [];\r\n SelectGroupedOptions: DataSource;\r\n SelectedOption: number;\r\n SelectedDataItems: string[] = [];\r\n Number: number;\r\n IsTextAreaOutlined: boolean = false;\r\n RadioGroupItems: any[] = [];\r\n ButtonGroupOptions: any[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-editors',\r\n templateUrl: './demo-editors.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoEditorsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoEditorsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.Number = 47.853;\r\n\r\n this.State.SelectOptions = this.GetSelectOptions();\r\n this.State.RadioGroupItems = this.GetRadioGroupItems();\r\n this.State.ButtonGroupOptions = this.GetButtonGroupOptions();\r\n this.State.SelectGroupedOptions = this.GetSelectGroupOptions();\r\n }\r\n\r\n public GetSelectedDataItems(): string {\r\n return this.State.SelectedDataItems.join(', ');\r\n }\r\n\r\n private GetButtonGroupOptions(): any[] {\r\n return [\r\n {\r\n text: 'Option 1',\r\n value: 'Value 1'\r\n },\r\n {\r\n text: 'Option 2',\r\n value: 'Value 2'\r\n },\r\n {\r\n text: 'Option 3',\r\n value: 'Value 3'\r\n }\r\n ];\r\n }\r\n\r\n private GetRadioGroupItems(): any[] {\r\n return [\r\n {\r\n Text: 'Option 1',\r\n Value: 'Value 1'\r\n },\r\n {\r\n Text: 'Option 2',\r\n Value: 'Value 2'\r\n },\r\n {\r\n Text: 'Option 3',\r\n Value: 'Value 3'\r\n }\r\n ]\r\n }\r\n\r\n private GetSelectOptions(): any[] {\r\n return [\r\n {\r\n Name: \"Option 1\",\r\n ExtraField: \"Extra Field 1\",\r\n EntryID: 1\r\n },\r\n {\r\n Name: \"Option 2\",\r\n ExtraField: \"Extra Field 2\",\r\n EntryID: 2\r\n },\r\n {\r\n Name: \"Option 3\",\r\n ExtraField: \"Extra Field 3\",\r\n EntryID: 3\r\n }\r\n ];\r\n }\r\n\r\n private GetSelectGroupOptions(): DataSource {\r\n return new DataSource({\r\n store: new ArrayStore({\r\n data: [\r\n {\r\n Name: \"Option 1\",\r\n ExtraField: \"Extra Field 1\",\r\n Group: \"Group 1\",\r\n EntryID: 1\r\n },\r\n {\r\n Name: \"Option 2\",\r\n ExtraField: \"Extra Field 2\",\r\n Group: \"Group 1\",\r\n EntryID: 2\r\n },\r\n {\r\n Name: \"Option 3\",\r\n ExtraField: \"Extra Field 3\",\r\n Group: \"Group 2\",\r\n EntryID: 3\r\n },\r\n {\r\n Name: \"Option 4\",\r\n ExtraField: \"Extra Field 4\",\r\n Group: \"Group 2\",\r\n EntryID: 4\r\n }],\r\n key: \"EntryID\"\r\n }),\r\n group: 'Group'\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n

Editors

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

dx-radio-group - represents group of radio buttons with single\\r\\n selection.

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

dx-button-group - represents group of buttons with single\\r\\n selection.

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

dx-text-box - represents field for entering text.

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

dx-text-box as link. Use field-link directive to get this

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

dx-text-area - represents field for entering long text.

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

dx-select-box - field with single selection. Current value:\\r\\n {{State.SelectedOption}}.

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

configEntitySource - sets for element displayExpr to Name and valueExpr to EntryId.\\r\\n *This directive could be applied only to dx-select-box, dx-tag-box and dxo-lookup.

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

Select with configEntitySource directive.

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

Simple outlined select with clear button.

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

Select with grouping by field.

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

Select with search.

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

Select with search by display name, value and extra\\r\\n field.

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

dx-tag-box - field with multiple selection.

\\r\\n

0\\\">Current values:\\r\\n {{GetSelectedDataItems()}}

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

dx-tag-box with selection controls and search.

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

dx-tag-box with grouped options.

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

Simple dx-tag-box with configEntitySource.

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

dx-number-box - represents field for entering numbers.

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

All formats that could be applied to dx-number-box.

\\r\\n

*All formats are loaded on app start into CompanyInfo entity in frameworkService

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

formatSum - configures input to format a number as sum.

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

formatPrice - configures input to format a number as price.

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

formatQuantity - configures input to format a number as quantity.

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

formatPercent - configures input to format a number as a percentage.

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

formatRate - configures input to format a number as rate.

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

formatGeneral - configures input to format a number as general.

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

dx-date-box - field for selecting date.

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

Simple dx-date-box.

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

configMonthYear - directive that enables selection of month and\\r\\n year only.

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

configYear - directive that enables selection of year only.

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

configTime - directive that enables selection of time.

\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-demo-layouts',\r\n templateUrl: './demo-layouts.component.html',\r\n styleUrls: ['./demo-layouts.component.scss', '../../styles/demo-styles.scss']\r\n})\r\nexport class DemoLayoutsComponent {\r\n\r\n constructor() {\r\n }\r\n}\r\n","export default \"\\r\\n

Layouts

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

For building forms you can use m4u-column, m4u-row\\r\\n and m4u-pagebuttons.

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

For aligning elements to center vertically in row you can use combination of\\r\\n m4u-row\\r\\n with class\\r\\n align-center.

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

Some text

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

For aligning elements to center vertically in column you can combination of\\r\\n m4u-column\\r\\n with class\\r\\n align-center.

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

For creating narrow m4u-column, you need to add class small to it.

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \";","import { Component } from '@angular/core';\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\n\r\nclass State extends BaseState {\r\n Types: any[];\r\n Styles: any[];\r\n SelectedType: 'default' | 'outlined' = 'outlined';\r\n SelectedStyle: 'light' | 'dark' = 'light';\r\n IsCollapsable: boolean = false;\r\n WithShadow: boolean = true;\r\n WithTitleAndIcon: boolean = true;\r\n WithCustomIcon: boolean = false;\r\n IsHeaderLink: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-sections',\r\n templateUrl: './demo-sections.component.html',\r\n styleUrls: ['./demo-sections.component.scss', '../../styles/demo-styles.scss']\r\n})\r\nexport class DemoSectionsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoSectionsComponent', State);\r\n }\r\n \r\n protected override OnInitComponent() {\r\n this.State.Types = [\r\n {\r\n Text: \"Default\",\r\n Value: \"default\"\r\n },\r\n {\r\n Text: \"Outlined\",\r\n Value: \"outlined\"\r\n }\r\n ];\r\n \r\n this.State.Styles = [\r\n {\r\n Text: \"Light\",\r\n Value: \"light\"\r\n },\r\n {\r\n Text: \"Dark\",\r\n Value: \"dark\"\r\n }\r\n ];\r\n }\r\n\r\n GetSectionMarkup() : string {\r\n let result = ''\r\n }\r\n\r\n OnHeaderClick(e) {\r\n console.log(e);\r\n }\r\n}\r\n","export default \"

Sections

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

m4u-section - represents wrapper for form with fields.

\\r\\n

Your result markup {{GetSectionMarkup()}}.

\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n Menu = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-cards',\r\n templateUrl: './demo-cards.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoCardsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoCardsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n\r\n this.State.Menu = [\r\n {\r\n label: 'Edit',\r\n icon: 'dx-icon dx-edit',\r\n command: () => {\r\n console.log('edit clicked');\r\n }\r\n },\r\n {\r\n label: 'Delete',\r\n icon: 'dx-icon dx-trash',\r\n command: () => {\r\n console.log('delete clicked')\r\n }\r\n }\r\n ];\r\n }\r\n}\r\n","export default \"

Cards

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

Card without Menu and Title.

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

Card with Menu and without Title.

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

Card with Title and Menu.

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

Card with horizontal m4u-fielddetail and Icon.

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

Card with horizontal m4u-fielddetail, Icon and hidden label.

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

Card with horizontal m4u-fielddetail, Icon and ValueAlignment=\\\"end\\\".

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

Card with vertical m4u-fielddetail.

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

Card with expand-card.

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\";","import {Component} from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\n\r\nclass State extends BaseState {\r\n Tabs: any[] = [];\r\n CurrentTabIndex: number = 0;\r\n IsShowOnlyTabs: boolean = false;\r\n IsShowOnlyAccordion: boolean = false;\r\n IsShowStepNumbers: boolean = false;\r\n IsShowCustomButtonText: boolean = false;\r\n IsShowCustomButtonIcon: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-tabs',\r\n templateUrl: './demo-tabs.component.html',\r\n styleUrls: ['./demo-tabs.component.scss', '../../styles/demo-styles.scss']\r\n})\r\nexport class DemoTabsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoTabsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.Tabs = this.GetPageTabs();\r\n }\r\n \r\n public OnIsShowOnlyTabsChanged() {\r\n if (this.State.IsShowOnlyTabs)\r\n this.State.IsShowOnlyAccordion = false;\r\n }\r\n \r\n public OnIsShowOnlyAccordionChanged() {\r\n if (this.State.IsShowOnlyAccordion)\r\n this.State.IsShowOnlyTabs = false;\r\n }\r\n\r\n public GetTabsMarkup() : string {\r\n let result = ''\r\n }\r\n \r\n private GetPageTabs(): any[] {\r\n return [\r\n {\r\n index: 0,\r\n text: 'Tab Name 1',\r\n Name: \"Tab1\"\r\n },\r\n {\r\n index: 1,\r\n text: 'Tab Name 2',\r\n Name: \"Tab2\"\r\n },\r\n {\r\n index: 2,\r\n text: 'Tab Name 3',\r\n Name: \"Tab3\"\r\n },\r\n {\r\n index: 3,\r\n text: 'Tab Name 4',\r\n Name: \"Tab4\"\r\n },\r\n ];\r\n }\r\n}\r\n","export default \"

Tabs

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

m4u-tabs - used for showing different content depending on selected tab. On desktop by default it shows Tabs, and on mobile phones Accordion.

\\r\\n

Your result markup: {{GetTabsMarkup()}}.

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

Tab 1 content

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

Tab 2 content

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

Tab 3 content

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

Tab 4 content

\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \";","import {Component, ViewChild} from '@angular/core';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService, ServiceBagServices} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {DemoMobilePhone, DemoMobilePhoneBrand, DemoMobilePhoneModel} from \"@ui/demo/models/demo-mobile-phone\";\r\nimport {EnumDemoMobilePhoneColor} from \"@ui/demo/models/enum-demo-mobile-phone-color\";\r\nimport {DxDataGridComponent} from \"devextreme-angular\";\r\nimport {GridExtender, GridCellEditParams} from \"@base/grid/Grid.extender\";\r\nimport {Utils} from \"@core/helpers/Utils\";\r\n\r\nclass State extends BaseState {\r\n Phones: DemoMobilePhone[] = [];\r\n Brands: DemoMobilePhoneBrand[] = [];\r\n Models: DemoMobilePhoneModel[] = [];\r\n Colors: any[] = [];\r\n\r\n SelectedPhones: DemoMobilePhone[] = [];\r\n \r\n TotalSum: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-demo-grids',\r\n templateUrl: './demo-grids.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoGridsComponent extends BaseComponent {\r\n\r\n @ViewChild(\"gridExample\") grid: DxDataGridComponent;\r\n public get G(): GridExtender { return (this.grid as any)?.G};\r\n \r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoGridsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitData();\r\n this.State.Colors = this.GetColors();\r\n }\r\n\r\n protected override OnInitComponentFinished() {\r\n this.G.AttachColumnEditHandler(this, \"Amount\", { AfterEdit: 'OnAmountColumnChanged' });\r\n this.G.AttachColumnEditHandler(this, \"Price\", { AfterEdit: 'OnPriceColumnChanged' });\r\n this.G.AttachColumnEditHandler(this, \"TotalSum\", { AfterEdit: 'OnTotalSumColumnChanged' });\r\n }\r\n \r\n public OnSearchToolbarPreparing(event: any) {\r\n event.toolbarOptions.items.unshift({\r\n location: 'after',\r\n template: 'gridViewTemplate',\r\n isCustom: true\r\n });\r\n }\r\n\r\n public OnAmountColumnChanged(e: GridCellEditParams) {\r\n console.log(e);\r\n this.G.SetData(\r\n \"TotalSum\",\r\n Utils.ValEx(this.G.GetData('Amount', e)) * Utils.ValEx(this.G.GetData('Price', e)), \r\n e);\r\n }\r\n \r\n public OnPriceColumnChanged(e: GridCellEditParams) {\r\n this.G.SetData(\r\n \"TotalSum\",\r\n Utils.ValEx(this.G.GetData('Price', e)) * Utils.ValEx(this.G.GetData('Amount', e)),\r\n e);\r\n }\r\n \r\n public OnTotalSumColumnChanged(e: GridCellEditParams) {\r\n this.G.SetData(\r\n \"Price\",\r\n Utils.ValEx(this.G.GetData('TotalSum', e)) / Utils.ValEx(this.G.GetData('Amount', e)),\r\n e);\r\n }\r\n \r\n public CalculateBrandDisplayName = (rowData) => {\r\n if (!rowData.BrandID)\r\n return;\r\n\r\n return this.State.Brands.find(x => x.EntryID === rowData.BrandID).Name;\r\n }\r\n\r\n public CalculateModelDisplayName = (rowData) => {\r\n if (!rowData.ModelID)\r\n return;\r\n\r\n return this.State.Models.find(x => x.EntryID === rowData.ModelID).Name;\r\n }\r\n\r\n public GetModelsToSelect(data) { \r\n return this.State.Brands.find(x => x.EntryID === data.data.BrandID).Models;\r\n }\r\n\r\n public CalculateTotalSum() {\r\n this.State.TotalSum = this.State.Phones.map(i => i.TotalSum).reduce((a, b) => a + b);\r\n }\r\n \r\n public OnTrashClicked(event: any) {\r\n console.log(event);\r\n }\r\n \r\n private GetColors(): any[] {\r\n return [\r\n {\r\n Value: EnumDemoMobilePhoneColor.White,\r\n Text: 'White',\r\n SortOrder: 1,\r\n },\r\n {\r\n Value: EnumDemoMobilePhoneColor.Black,\r\n Text: 'Black',\r\n SortOrder: 2\r\n },\r\n {\r\n Value: EnumDemoMobilePhoneColor.AlpineGreen,\r\n Text: 'Alpine Green',\r\n SortOrder: 3\r\n },\r\n {\r\n Value: EnumDemoMobilePhoneColor.MidnightGray,\r\n Text: 'Midnight Gray',\r\n SortOrder: 4\r\n }\r\n ]\r\n }\r\n\r\n private InitData() {\r\n \r\n let s22Ultra = {\r\n EntryID: 1,\r\n Name: \"S22 Ultra\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let s22 = {\r\n EntryID: 2,\r\n Name: \"S22\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let fold = {\r\n EntryID: 3,\r\n Name: \"Fold\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let samsungBrand = {\r\n EntryID: 1,\r\n Name: \"Samsung\",\r\n Models: [s22Ultra, s22, fold]\r\n } as DemoMobilePhoneBrand;\r\n\r\n let iPhone13 = {\r\n EntryID: 4,\r\n Name: \"iPhone 13\"\r\n } as DemoMobilePhoneModel;\r\n\r\n let iPhone12 = {\r\n EntryID: 5,\r\n Name: \"iPhone 12\"\r\n } as DemoMobilePhoneModel;\r\n \r\n let appleBrand = {\r\n EntryID: 2,\r\n Name: \"Apple\",\r\n Models: [iPhone13, iPhone12]\r\n } as DemoMobilePhoneBrand;\r\n \r\n this.State.Brands = [samsungBrand, appleBrand];\r\n this.State.Models = [s22Ultra, s22, fold, iPhone12, iPhone13];\r\n \r\n this.State.Phones = [\r\n {\r\n ModelID: s22Ultra.EntryID,\r\n BrandID: samsungBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.Black,\r\n IsAvailable: true,\r\n Amount: 3,\r\n Price: 1099,\r\n TotalSum: 3297\r\n },\r\n {\r\n ModelID: s22.EntryID,\r\n BrandID: samsungBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.White,\r\n IsAvailable: false,\r\n Amount: 2,\r\n Price: 899,\r\n TotalSum: 1798\r\n },\r\n {\r\n ModelID: fold.EntryID,\r\n BrandID: samsungBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.MidnightGray,\r\n IsAvailable: true,\r\n Amount: 5,\r\n Price: 1699,\r\n TotalSum: 8495\r\n },\r\n {\r\n ModelID: iPhone13.EntryID,\r\n BrandID: appleBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.AlpineGreen,\r\n IsAvailable: true,\r\n Amount: 1,\r\n Price: 899,\r\n TotalSum: 899\r\n },\r\n {\r\n ModelID: iPhone12.EntryID,\r\n BrandID: appleBrand.EntryID,\r\n Color: EnumDemoMobilePhoneColor.White,\r\n IsAvailable: false,\r\n Amount: 0,\r\n Price: 799,\r\n TotalSum: 0\r\n }\r\n ];\r\n \r\n this.CalculateTotalSum();\r\n }\r\n}\r\n","export default \"\\r\\n

Grids

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

*To setup [dataSource] of component, you need to set data in OnInitDatasources like this.DataSources['DS_NAME'] = new DataSourceCustomAction((options: DataLoadOptions) => this.endpoint.GetList(options)), and then set in attribute [dataSource]=\\\"DS('DS_NAME')\\\" of dx-data-grid.

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

Simple dx-data-grid.

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

\\r\\n You can pass Grid toolbar parameters to the component that extends from BaseGridComponent.\\r\\n To set grid row context menu - override GetGridRowContextMenu method.\\r\\n To make column as link - use link-column directive\\r\\n

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

Grid with icon button and hint that displays on hover.

\\r\\n

*If you need to have more than one icon button, it is better to use context menu.

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

Grid with column filtering and column chooser.

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

Grid with search panel and elements in it.\\r\\n

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

Grid with custom buttons in toolbar.

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

Grid with multiple selection.

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

Grid with edit, add and delete\\r\\n actions. Also includes cascade selecting and simple recalculation in columns.

\\r\\n

Total sum: {{State.TotalSum}}

\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \";","import { Component, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ContextMenuElement } from '@base/classes/BaseClasses';\r\nimport { BaseComponent } from '@base/component/BaseComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { BaseState } from '@base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetContextMenuParams, BottomSheetListParams, BottomSheetService } from '@core/framework/bottom-sheet.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n ListItems: any[] = [];\r\n ContextMenu: ContextMenuElement[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-bottom-sheets',\r\n templateUrl: './demo-bottom-sheets.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoBottomSheetsComponent extends BaseComponent {\r\n\r\n @ViewChild('template') template: TemplateRef;\r\n\r\n private bottomListSubscription: Subscription;\r\n \r\n constructor(A: ServiceBagService, public screen: ScreenService, private bottomSheetService: BottomSheetService) {\r\n super(A, 'DemoBottomSheetsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.ListItems = this.GetListItems();\r\n this.State.ContextMenu = this.GetContextMenu();\r\n }\r\n \r\n protected override OnDestroyComponent() {\r\n super.OnDestroyComponent();\r\n \r\n this.bottomListSubscription?.unsubscribe();\r\n }\r\n \r\n public OnShowComponentClicked() {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Content = DemoButtonsComponent;\r\n contentParams.Title = 'Component Example';\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n \r\n public OnShowTemplateClicked() {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Content = this.template;\r\n contentParams.Title = 'Template Example';\r\n this.bottomSheetService.Show(contentParams);\r\n }\r\n \r\n public OnShowListClicked() {\r\n const listParams = new BottomSheetListParams();\r\n listParams.Title = 'Items';\r\n listParams.DataSource = this.State.ListItems;\r\n listParams.OnCompleted = (result) => console.log(result);\r\n\r\n this.bottomSheetService.ShowList(listParams);\r\n }\r\n\r\n public OnShowContextMenuClicked() {\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = 'Context Menu Example';\r\n menuParams.Items = this.State.ContextMenu;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n }\r\n \r\n public GetContextMenu() : ContextMenuElement[] {\r\n return [\r\n {\r\n text: 'Add',\r\n icon: 'add',\r\n onClick: () => console.log('Context Menu - add button clicked.')\r\n },\r\n {\r\n text: 'Edit',\r\n icon: 'edit',\r\n onClick: () => console.log('Context Menu - edit button clicked.')\r\n }\r\n ];\r\n }\r\n \r\n public GetListItems() {\r\n return [\r\n {\r\n EntryID: 1,\r\n Name: 'Clock',\r\n Icon: 'mdi mdi-clock-outline'\r\n },\r\n {\r\n EntryID: 2,\r\n Name: 'Map',\r\n Icon: 'mdi mdi-map-outline'\r\n },\r\n {\r\n EntryID: 3,\r\n Name: 'Agenda',\r\n Icon: 'mdi mdi-view-agenda-outline'\r\n }\r\n ];\r\n }\r\n}\r\n","export default \"

Bottom Sheets

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

BottomSheetService used for showing different types of content at bottom popup window.

\\r\\n

It can show Page, Component, Template, List or Context Menu.

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

Template content

\\r\\n
\";","import { Component } from '@angular/core';\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {}\r\n\r\n@Component({\r\n selector: 'app-demo-pages',\r\n templateUrl: './demo-pages.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPagesComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoPagesComponent', State);\r\n }\r\n \r\n public OnHeadersExampleClicked() {\r\n this.Navigate(['demo/page-examples/header-buttons']);\r\n }\r\n \r\n public OnToolbarExampleClicked() {\r\n this.Navigate(['demo/page-examples/toolbar-buttons']);\r\n }\r\n}\r\n","export default \"

Pages

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

Extending your page from BasePageComponent gives you ability to easily customize it.

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

Examples with header and toolbar.

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport {BasePageComponent} from \"../../../../../../base/component/BasePageComponent\";\r\nimport {BaseEntity, BaseState} from \"../../../../../../base/entities/BaseEntities\";\r\nimport {ServiceBagService, ServiceBagServices} from \"@base/component/ServiceBag\";\r\nimport {ContextMenuElement, ToolbarSettings} from \"@base/classes/BaseClasses\";\r\nimport { Location } from '@angular/common';\r\n\r\nclass State extends BaseState {}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-demo-page-toolbar-buttons',\r\n templateUrl: './demo-page-toolbar-buttons.component.html',\r\n styleUrls: ['../../../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPageToolbarButtonsComponent extends BasePageComponent {\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private location: Location) {\r\n \r\n super(A, 'DemoPageToolbarButtons', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitTitle() : string {\r\n return 'Toolbar buttons';\r\n }\r\n \r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = true;\r\n\r\n settings.ShowBackButton = true;\r\n settings.BackButtonClick = () => this.location.back();\r\n\r\n settings.ContextMenuTitle = \"Context menu\";\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n\r\n return settings;\r\n }\r\n\r\n private GetContextMenu(): ContextMenuElement[] {\r\n return [\r\n {\r\n text: 'Add',\r\n icon: 'add',\r\n onClick: () => console.log('Context Menu - add button clicked.')\r\n },\r\n {\r\n text: 'Edit',\r\n icon: 'edit',\r\n onClick: () => console.log('Context Menu - edit button clicked.')\r\n }\r\n ]\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n

Header

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

Footer

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

This page has Class=\\\"no-padding\\\" to remove all paddings.

\\r\\n

Right toolbar buttons, back button and context menu could be set in overriden OnGetToolbarSettings function.

\\r\\n

Position (header, toolbar) of default buttons could be set in attribute ButtonsPosition of m4u-page.

\\r\\n

Custom elements could be placed by passing ng-template to ToolbarButtonsBefore and ToolbarButtonsAfter page properties.\\r\\n \\r\\n\";","import {Component} from '@angular/core';\r\nimport {BasePageComponent} from \"../../../../../../base/component/BasePageComponent\";\r\nimport {BaseEntity, BaseState} from \"../../../../../../base/entities/BaseEntities\";\r\nimport {ServiceBagService, ServiceBagServices} from \"@base/component/ServiceBag\";\r\nimport {ContextMenuElement, ToolbarSettings} from \"@base/classes/BaseClasses\";\r\nimport {Location} from '@angular/common';\r\n\r\nclass State extends BaseState {\r\n ContextMenu: ContextMenuElement[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-demo-page-header-buttons',\r\n templateUrl: './demo-page-header-buttons.component.html',\r\n styleUrls: ['../../../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPageHeaderButtonsComponent extends BasePageComponent {\r\n\r\n constructor(\r\n A: ServiceBagService,\r\n private location: Location) {\r\n\r\n super(A, 'DemoPageToolbarButtons', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return 'Header buttons';\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings();\r\n\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.IsAllowPrint = true;\r\n\r\n settings.ShowBackButton = true;\r\n settings.BackButtonClick = () => this.location.back();\r\n \r\n settings.ContextMenuTitle = \"Context menu\";\r\n settings.OnGetContextMenuItems = this.GetContextMenu;\r\n\r\n return settings;\r\n }\r\n\r\n private GetContextMenu(): ContextMenuElement[] {\r\n return [\r\n {\r\n text: 'Add',\r\n icon: 'add',\r\n onClick: () => console.log('Context Menu - add button clicked.')\r\n },\r\n {\r\n text: 'Edit',\r\n icon: 'edit',\r\n onClick: () => console.log('Context Menu - edit button clicked.')\r\n }\r\n ]\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n

Header

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

Footer

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

This page has Class=\\\"no-top-padding no-bottom-padding\\\" to remove top and bottom paddings.

\\r\\n

Right toolbar buttons, back button and context menu could be set in overriden OnGetToolbarSettings function.

\\r\\n

Position (header, toolbar) of default buttons could be set in attribute ButtonsPosition of m4u-page.

\\r\\n

Left toolbar elements could be added through passing ng-template to QuickFilters page property.

\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import {Component, TemplateRef, ViewChild} from '@angular/core';\r\nimport {SidebarService} from \"@core/framework/sidebar.service\";\r\nimport {DemoBottomSheetsComponent} from \"@ui/demo/components/bottom-sheets/demo-bottom-sheets.component\";\r\n\r\n@Component({\r\n selector: 'app-demo-sidebars',\r\n templateUrl: './demo-sidebars.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoSidebarsComponent {\r\n\r\n @ViewChild('template') template: TemplateRef;\r\n \r\n constructor(private sidebarService: SidebarService) {\r\n }\r\n\r\n public OnShowComponentClicked() {\r\n this.sidebarService.Show(\"Component\", \"Component Example\", DemoBottomSheetsComponent);\r\n }\r\n \r\n public OnShowTemplateClicked() {\r\n this.sidebarService.Show(\"Template\", \"Template Example\", this.template);\r\n }\r\n \r\n public OnCloseTemplateClicked() {\r\n this.sidebarService.Close(\"Template\");\r\n }\r\n}\r\n","export default \"

Sidebars

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

SidebarService used for showing different types of content at right side of window.

\\r\\n

It can show only Component or Template.

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

Template content

\\r\\n\\r\\n \\r\\n
\";","import {Component} from '@angular/core';\r\nimport {EnumPageDisplayModes, EnumPageEntitySources} from \"../../../../../core/framework/sysenums.enum\";\r\nimport {BaseEntity, BaseState} from \"../../../../../base/entities/BaseEntities\";\r\nimport {BasePageComponent} from \"../../../../../base/component/BasePageComponent\";\r\nimport {ServiceBagService} from \"../../../../../base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-simple-dialog',\r\n templateUrl: './demo-simple-dialog.component.html',\r\n styleUrls: ['../../../styles/demo-styles.scss']\r\n})\r\nexport class DemoSimpleDialogComponent extends BasePageComponent {\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoSimpleDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override GetDefaultTitle(): string {\r\n return 'Simple dialog';\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLanguages, EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n HTMLBody: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-htmlbox-dialog',\r\n templateUrl: './htmlbox-dialog.component.html',\r\n styleUrls: ['./htmlbox-dialog.component.scss']\r\n})\r\nexport class HtmlBoxDialogComponent extends BasePageComponent {\r\n\r\n @Input() HTMLBody: string;\r\n @Input() Language: string;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HtmlBoxDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.HTMLBody = this.HTMLBody;\r\n }\r\n\r\n GetHtmlEditorClass() {\r\n const rtlClass = this.Language === EnumLanguages.Hebrew ? 'html-editor-he' : 'html-editor-en';\r\n return `html-text-editor ${rtlClass}`;\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@core/framework/sysenums.enum';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-previewdialog',\r\n templateUrl: './previewdialog.component.html',\r\n styleUrls: ['./previewdialog.component.scss']\r\n})\r\nexport class PreviewDialogComponent extends BasePageComponent {\r\n @Input() Url: string;\r\n\r\n constructor(A: ServiceBagService, public sanitizer: DomSanitizer) {\r\n super(A, 'PreviewDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n get src() {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(this.Url)\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import {Component, ViewChild} from '@angular/core';\r\nimport {BaseState, GenericListEntity, Media} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {DemoSimpleDialogComponent} from \"@ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component\";\r\nimport {BarcodeBoxDialogComponent} from \"@ui/dialogs/barcodebox-dialog/barcodeboxdialog.component\";\r\nimport {FileBoxDialogComponent} from \"@ui/dialogs/filebox-dialog/fileboxdialog.component\";\r\nimport {HtmlBoxDialogComponent} from \"@ui/dialogs/htmlbox-dialog/htmlbox-dialog.component\";\r\nimport {ImageBoxDialogComponent} from \"@ui/dialogs/imagebox-dialog/imageboxdialog.component\";\r\nimport {InputBoxDialogComponent} from \"@ui/dialogs/inputbox-dialog/inputboxdialog.component\";\r\nimport {EnumFileBoxReturnDataTypes, EnumInputBoxTypes, EnumMessageBoxTypes} from \"@core/framework/sysenums.enum\";\r\nimport {MessageBoxDialogComponent} from \"@ui/dialogs/messagebox-dialog/messageboxdialog.component\";\r\nimport {PhotoBoxDialogComponent} from \"@ui/dialogs/photobox-dialog/photoboxdialog.component\";\r\nimport {PreviewDialogComponent} from \"@ui/dialogs/preview-dialog/previewdialog.component\";\r\nimport {SelectBoxDialogComponent} from \"@ui/dialogs/selectbox-dialog/selectboxdialog.component\";\r\nimport {SignBoxDialogComponent} from \"@ui/dialogs/signbox-dialog/signboxdialog.component\";\r\n\r\nclass State extends BaseState {\r\n HTMLBody: string;\r\n SelectOptions: GenericListEntity[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-dialogs',\r\n templateUrl: './demo-dialogs.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoDialogsComponent extends BaseComponent {\r\n\r\n @ViewChild(DemoSimpleDialogComponent) simpleDialog: DemoSimpleDialogComponent;\r\n @ViewChild(BarcodeBoxDialogComponent) barcodeBoxDialog: BarcodeBoxDialogComponent;\r\n @ViewChild(FileBoxDialogComponent) fileBoxDialog: FileBoxDialogComponent;\r\n @ViewChild(HtmlBoxDialogComponent) htmlBoxDialog: HtmlBoxDialogComponent;\r\n @ViewChild(ImageBoxDialogComponent) imageBoxDialog: ImageBoxDialogComponent;\r\n @ViewChild(InputBoxDialogComponent) inputBoxDialog: InputBoxDialogComponent;\r\n @ViewChild(MessageBoxDialogComponent) messageBoxDialog: MessageBoxDialogComponent;\r\n @ViewChild(PhotoBoxDialogComponent) photoBoxDialog: PhotoBoxDialogComponent;\r\n @ViewChild(PreviewDialogComponent) previewDialog: PreviewDialogComponent;\r\n @ViewChild(SelectBoxDialogComponent) selectBoxDialog: SelectBoxDialogComponent;\r\n @ViewChild(SignBoxDialogComponent) signBoxDialog: SignBoxDialogComponent;\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoDialogsComponent', State);\r\n }\r\n \r\n override OnInitComponent() {\r\n this.State.HTMLBody = \"Html content\";\r\n this.State.SelectOptions = this.GetSelectBoxDialogOptions();\r\n }\r\n\r\n public OpenSimpleDialog() {\r\n this.simpleDialog.ShowDialogShort((_) => console.log('Simple Dialog closed'));\r\n }\r\n \r\n public OpenBarcodeBoxDialog() {\r\n this.barcodeBoxDialog.ShowDialogShort((_) => console.log('Barcode Box Dialog closed'))\r\n }\r\n \r\n public OnTextDecoded(event) {\r\n console.log('On text decoded');\r\n console.log(event);\r\n }\r\n\r\n public OnResultDecoded(event) {\r\n console.log('On result decoded');\r\n console.log(event);\r\n }\r\n\r\n public OpenFileBoxDialog() {\r\n this.fileBoxDialog.ReturnDataType = EnumFileBoxReturnDataTypes.FileList;\r\n this.fileBoxDialog.ShowDialog((list: File[]) => {\r\n console.log(\"File Box Dialog closed\");\r\n console.log(list);\r\n });\r\n }\r\n \r\n public OpenHtmlBoxDialog() {\r\n this.htmlBoxDialog.ShowDialogShort((state: any) => {\r\n console.log(\"Html Box Dialog closed\");\r\n console.log(state.HTMLBody);\r\n this.State.HTMLBody = state.HTMLBody;\r\n });\r\n }\r\n\r\n public OpenImageBoxDialog() {\r\n this.imageBoxDialog.ImageSource = 'https://i.pinimg.com/originals/8e/19/19/8e19199e990ba486fe79426a560c1b84.jpg';\r\n this.imageBoxDialog.ShowDialogShort(() => { \r\n console.log('Image Box Dialog closed');\r\n });\r\n }\r\n \r\n public CloseImageBoxDialog() {\r\n this.imageBoxDialog.CloseDialogWithSuccess();\r\n }\r\n \r\n public OpenInputBoxDialog() {\r\n this.inputBoxDialog.FieldLabel = \"Field label\";\r\n this.inputBoxDialog.Prompt = \"Field prompt\";\r\n this.inputBoxDialog.Type = EnumInputBoxTypes.Number;\r\n \r\n this.inputBoxDialog.ShowDialogShort((value: number) => {\r\n console.log('Input Box Dialog closed. Value: ' + value);\r\n });\r\n }\r\n \r\n public OpenMessageBoxDialog() {\r\n this.messageBoxDialog.Prompt = \"Prompt message\";\r\n this.messageBoxDialog.Type = EnumMessageBoxTypes.YesNo;\r\n this.messageBoxDialog.ShowDialogShort((e) => {\r\n console.log(\"Message Box Dialog closed with success\");\r\n }, () => {\r\n console.log(\"Message Box Dialog closed with failure\");\r\n });\r\n }\r\n \r\n public OpenPhotoBoxDialog() {\r\n this.photoBoxDialog.ShowDialogShort((data: Media[]) => {\r\n console.log('Photo Box Dialog closed');\r\n console.log(data);\r\n });\r\n }\r\n \r\n public OpenPreviewDialog() {\r\n this.previewDialog.Url = 'https://www.microsoft.com/uk-ua/';\r\n this.previewDialog.ShowDialogShort(() => {\r\n console.log('Preview Dialog closed');\r\n });\r\n }\r\n \r\n public OpenSelectBoxDialog() {\r\n this.selectBoxDialog.ShowDialogShort((result) => {\r\n console.log(result);\r\n });\r\n }\r\n \r\n private GetSelectBoxDialogOptions(): GenericListEntity[] {\r\n return [\r\n {\r\n EntryID: 1,\r\n Text: \"Option 1\",\r\n Value: \"Value 1\",\r\n Description: \"Description 1\"\r\n },\r\n {\r\n EntryID: 2,\r\n Text: \"Option 2\",\r\n Value: \"Value 2\",\r\n Description: \"Description 2\"\r\n }\r\n ];\r\n }\r\n \r\n public OpenSignBoxDialog() {\r\n this.signBoxDialog.ShowDialogShort((signature) => {\r\n console.log('Sign Box Dialog closed');\r\n console.log(signature);\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n

Dialogs

\\r\\n

Dialog is a type of modal window that appears in front of app content\\r\\n to provide critical information, ask for a decision or to input needed information.

\\r\\n

You can create your own custom dialog window, if none of the predefined dialogs\\r\\n suits you.

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

Example of Custom Dialog.

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

Example of Barcode Box Dialog.

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

Example of File Box Dialog.

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

Example of Html Box Dialog.

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

Example of Image Box Dialog.

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

Example of Input Box Dialog.

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

Example of Message Box Dialog.

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

Example of Photo Box Dialog.

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

Example of Preview Dialog.

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

Example of Select Box Dialog.

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

Example of Sign Box Dialog.

\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {EnumNotificationStatuses} from \"@core/framework/sysenums.enum\";\r\n\r\nclass State extends BaseState {\r\n Status: EnumNotificationStatuses;\r\n Number: number;\r\n Date: Date;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-pipes',\r\n templateUrl: './demo-pipes.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoPipesComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoPipesComponent', State);\r\n }\r\n \r\n override OnInitComponent() {\r\n this.State.Number = 1234.456\r\n this.State.Date = new Date();\r\n }\r\n}\r\n","export default \"\\r\\n

Pipes

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

RC - pipe for translating resources by provided key.

\\r\\n

For translating core resources, you need to use pipe RC. Example: { { 'lblName' | RC } }- output {{'lblName' | RC}}.

\\r\\n

For translating project resources, you need to use RC:THIS.

\\r\\n

RCX - the same as RC, but with pure=true property of pipe, that allows page to instantly apply changes. *Used for login page, is not recommended for usage. Example: { { 'RESOURCE_NAME' | RCX } }.

\\r\\n

RCMX - wrapper around RC to search resource in provided module. *Is not recommended for usage. Example: { { 'RESOURCE_NAME' | RCMX:'MODULE_NAME' } }.

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

Location of core resources: ClientApp/src/_resources.

\\r\\n

Location of project resources: ClientApp/projects/PROJECT_NAME/_resources or PROJECT_FOLDER/_resources.

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

LookupList pipe provides functionality to search through DataSource by provided value. Example: { State.Status | LookupList:LIST('NotificationStatuses') }

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

Value: {{State.Status | LookupList:LIST('NotificationStatuses')}}

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

*All formats are loaded on app start into CompanyInfo entity in frameworkService

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

formatNumberShort - formatting as short. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberShort }}

\\r\\n

formatNumberGeneral - formatting according to the format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberGeneral }}

\\r\\n

formatNumberSum - formatting according to the sum format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberSum }}

\\r\\n

formatNumberPrice - formatting according to the price format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberPrice }}

\\r\\n

formatNumberQuantity - formatting according to the quantity format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberQuantity }}

\\r\\n

formatNumberPercent - formatting according to the percent format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberPercent }}

\\r\\n

formatNumberRate - formatting according to the rate format provided by the company. Raw: {{State.Number}}, Formatted: {{ State.Number | formatNumberRate }}

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

*All formats are loaded on app start into CompanyInfo entity in frameworkService

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

formatDate - formatting according to the long date format provided by company. Formatted: {{ State.Date | formatDate }}

\\r\\n

formatDateShort - formatting according to the short date format provided by company. Formatted: {{ State.Date | formatDateShort }}

\\r\\n

formatDateCompact - formatting according to the compact date format provided by company. Formatted: {{ State.Date | formatDateCompact }}

\\r\\n

formatDateApproximate - formatting approximate date. Formatted: {{ State.Date | formatDateApproximate }}

\\r\\n

formatDateAtTime - formatting according to the long date and long time formats provided by company. Formatted: {{ State.Date | formatDateAtTime }}

\\r\\n

formatDateFull - formatting according to the full date format provided by company. Formatted: {{ State.Date | formatDateFull }}

\\r\\n

formatTime - formatting according to the short time format provided by company. Formatted: {{ State.Date | formatTime }}

\\r\\n

formatDayNameShort - formatting according to the short day format provided by company. Formatted: {{ State.Date | formatDayNameShort }}

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

stringBr - used for replacing \\\\r\\\\n in value to <br/>.

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

fileSize - used for formatting number to file size. Raw: 1000000, Formatted: {{ 1000000 | fileSize}}

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

abs - used for formatting number to its absolute value. Raw: -123, Formatted: {{ -123 | abs}}

\\r\\n \\r\\n
\";","import { Component } from '@angular/core';\r\nimport {AttachedFile, BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\n\r\nclass State extends BaseState {\r\n IsLoadingBarVisible: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: 'app-demo-components',\r\n templateUrl: './demo-components.component.html',\r\n styleUrls: ['../../styles/demo-styles.scss']\r\n})\r\nexport class DemoComponentsComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoComponentsComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n }\r\n \r\n \r\n public FilesChanged(files: AttachedFile[]) {\r\n console.log(files);\r\n }\r\n}\r\n","export default \"

Components

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

m4u-attachedfiles - component for managing files. There are options to show\\r\\n input files and download them, or upload new files.

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

m4u-loading-animation - infinite loading bar. Positionated at the center of the window.

\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\";","import { Component, Input } from \"@angular/core\";\r\nimport { ServiceBagService, ServiceBagServices } from \"../../../../../base/component/ServiceBag\";\r\nimport { BaseState, CredentialType, CredentialLogin, WebAPICredential } from \"../../../../../base/entities/BaseEntities\";\r\nimport { BaseGridComponent } from \"../../../../../base/component/BaseGridComponent\";\r\nimport { ContextMenuElement } from \"@m4u-angular/base/classes/BaseClasses\";\r\n\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credential-login-history-grid',\r\n templateUrl: './credential-login-history-grid.component.html'\r\n})\r\nexport class CredentialLoginHistoryGridComponent extends BaseGridComponent{\r\n @Input() Credentials: any;\r\n @Input() CredentialsInfo: CredentialType[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CredentialLoginHistoryGridComponent', CredentialLogin, BaseState);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnGoToRequestsHistory'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/requests-history'], { CredentialID: options.data.CredentialID })\r\n }, {\r\n text: this.RC('btnGoToCredentialsReport'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/credentials-report'], { CredentialID: options.data.CredentialID })\r\n }];\r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { WebAPICredential } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { BaseEndpointCRUD } from \"@m4u-angular/base/endpoint/BaseEndpointCRUD\";\r\n\r\n@Injectable()\r\nexport class WebAPICredentialEndpoint extends BaseEndpointCRUD\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"WebAPICredential\", api);\r\n }\r\n}\r\n","import { Component, ViewChild } from '@angular/core';\r\nimport { CredentialActivityEndpoint } from '@core/endpoints/credential-activity.endpoint';\r\nimport { EnumUserLoginStatus } from '@core/framework/sysenums.enum';\r\nimport { BaseState, CredentialType, CredentialLogin, CredentialLoginParams } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { DataSourceCustomAction } from '@base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ToolbarSettings } from '@base/classes/BaseClasses';\r\nimport {\r\n CredentialLoginHistoryGridComponent\r\n} from '@ui/components/general/credential-login-history/grid/credential-login-history-grid.component';\r\nimport { WebAPICredentialEndpoint } from '@m4u-angular/core/endpoints/webapi-credential.endpoint';\r\n\r\nexport class State extends BaseState {\r\n CurrentCredentialID: number;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n Status: EnumUserLoginStatus;\r\n CredentialType: number = -1;\r\n\r\n CredentialsInfo: CredentialType[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credential-login-history',\r\n templateUrl: './credential-login-history.component.html'\r\n})\r\nexport class CredentialLoginHistoryComponent extends BasePageComponent {\r\n\r\n @ViewChild(CredentialLoginHistoryGridComponent) grid: CredentialLoginHistoryGridComponent;\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private webAPICredentialEndpoint: WebAPICredentialEndpoint) {\r\n super(A, 'CredentialLoginHistoryComponent', CredentialLogin, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n this.LoadCredentials();\r\n\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialsInfo = response.Entities;\r\n });\r\n }\r\n\r\n private LoadDataSource() {\r\n this.DataSources['UserLogins'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n const params = new CredentialLoginParams();\r\n\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.Status = this.State.Status;\r\n params.CredentialType = this.State.CredentialType !== undefined ? this.State.CredentialType : -999;\r\n params.CredentialID = this.State.CurrentCredentialID;\r\n\r\n return this.credentialActivityEndpoint.ListLogins(params, options);\r\n }, undefined, undefined, false);\r\n\r\n this.DS['UserLogins']?.Reload();\r\n }\r\n\r\n override InitState() {\r\n this.State.DateFrom = DateHelpers.BOM(new Date());\r\n this.State.DateTo = DateHelpers.EOM(new Date());\r\n this.State.Status = EnumUserLoginStatus.All;\r\n this.State.CredentialType = -1;\r\n this.State.CurrentCredentialID = null;\r\n\r\n this.ReadQuery();\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.GridExtender = this.grid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n override OnClearFilter() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n\r\n private LoadCredentials() {\r\n this.DataSources['Credentials'] =\r\n new DataSourceCustomAction((options) => this.webAPICredentialEndpoint.GetList(options),\r\n (entryID) => this.webAPICredentialEndpoint.Get(entryID));\r\n }\r\n\r\n private ReadQuery() {\r\n if (this.QueryParams.CredentialID) {\r\n this.State.CurrentCredentialID = +this.QueryParams.CredentialID;\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { BaseDataResponse, BaseEntityResponse, CredentialActivityStatus, WebAPIRequest, WebAPIRequestListParams } from \"@base/entities/BaseEntities\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport {DataLoadOptions} from \"@base/datalayer/DataLoadOptions\";\r\nimport { BaseEndpointCRUD } from \"@m4u-angular/base/endpoint/BaseEndpointCRUD\";\r\n\r\n@Injectable()\r\nexport class WebAPIRequestEndpoint extends BaseEndpointCRUD\r\n{\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super(\"WebAPIRequest\", api);\r\n }\r\n \r\n public ListEx(Params: WebAPIRequestListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, {options: options?.GetLoadOptions()});\r\n }\r\n\r\n public GetPossibleControllers(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleControllers');\r\n }\r\n\r\n public GetPossibleActions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleActions');\r\n }\r\n\r\n public GetPossibleModules(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleModules');\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialActivityStatus } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-request-history-grid',\r\n templateUrl: './request-history-grid.component.html',\r\n styleUrls: ['./request-history-grid.component.scss']\r\n})\r\nexport class RequestHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'RequestHistoryGridComponent', CredentialActivityStatus, BaseState);\r\n }\r\n\r\n OnRowClick(e) {\r\n if (e.data.EntryID) { this.Navigate(['/pages/general/request-history', e.data.EntryID]); }\r\n }\r\n\r\n GetStatusColor(isSuccess: boolean) {\r\n return isSuccess ? 'green-cyan' : 'cinnabar';\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseEntity, BaseState, WebAPIRequestListParams } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { WebAPICredentialEndpoint } from '@m4u-angular/core/endpoints/webapi-credential.endpoint';\r\nimport { WebAPIRequestEndpoint } from '@m4u-angular/core/endpoints/webapi-request.endpoint';\r\nimport { RequestHistoryGridComponent } from '../request-history-grid/request-history-grid.component';\r\n\r\nclass State extends BaseState {\r\n CurrentCredentialID: number;\r\n\r\n Module: string;\r\n Controller: string;\r\n Action: string;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n\r\n Controllers: string[];\r\n Actions: string[];\r\n Modules: string[];\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-request-history-list',\r\n templateUrl: './request-history-list.component.html',\r\n styleUrls: ['./request-history-list.component.scss']\r\n})\r\nexport class RequestHistoryListComponent extends BasePageComponent {\r\n\r\n @ViewChild(RequestHistoryGridComponent) grid: RequestHistoryGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private webAPICredentialEndpoint: WebAPICredentialEndpoint,\r\n private webAPIRequestEndpoint: WebAPIRequestEndpoint) {\r\n super(A, 'RequestHistoryListComponent', BaseEntity, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.LoadCredentials();\r\n this.InitControllers();\r\n this.InitActions();\r\n this.InitModules();\r\n\r\n this.ReadQuery();\r\n }\r\n\r\n protected override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.IsAllowExport = true;\r\n settings.GridExtender = this.grid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter(): void {\r\n this.State.Module = undefined;\r\n this.State.Controller = undefined;\r\n this.State.Action = undefined;\r\n this.State.DateFrom = undefined;\r\n this.State.DateTo = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n public OnCredentialChanged() {\r\n this.LoadDataSource();\r\n }\r\n\r\n public OnDateFromChange(dateFrom) {\r\n if (!dateFrom?.value) return;\r\n\r\n this.State.DateFrom = new Date(dateFrom.value.setHours(0, 0, 0));\r\n }\r\n\r\n public OnDateToChange(dateTo) {\r\n if (!dateTo?.value) return;\r\n\r\n this.State.DateTo = new Date(dateTo.value.setHours(23, 59, 59, 999));\r\n }\r\n\r\n private LoadCredentials() {\r\n this.DataSources['Credentials'] = new DataSourceCustomAction((options) => this.webAPICredentialEndpoint.GetList(options), (entryID) => this.webAPICredentialEndpoint.Get(entryID));\r\n }\r\n\r\n private LoadDataSource() {\r\n if (!this.State.CurrentCredentialID) {\r\n this.DataSources['Requests'] = undefined;\r\n return;\r\n }\r\n\r\n const params = new WebAPIRequestListParams();\r\n params.CredentialID = this.State.CurrentCredentialID;\r\n params.ModuleName = this.State.Module;\r\n params.Controller = this.State.Controller;\r\n params.Action = this.State.Action;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n\r\n this.DataSources['Requests'] = new DataSourceCustomAction((options) => this.webAPIRequestEndpoint.ListEx(params, options), undefined, undefined, false);\r\n }\r\n\r\n private InitControllers() {\r\n this.Do(this.webAPIRequestEndpoint.GetPossibleControllers(), false, (response) => {\r\n this.State.Controllers = response.Data;\r\n });\r\n }\r\n\r\n private InitActions() {\r\n this.Do(this.webAPIRequestEndpoint.GetPossibleActions(), false, (response) => {\r\n this.State.Actions = response.Data;\r\n });\r\n }\r\n\r\n private InitModules() {\r\n this.Do(this.webAPIRequestEndpoint.GetPossibleModules(), false, (response) => {\r\n this.State.Modules = response.Data;\r\n });\r\n }\r\n\r\n private ReadQuery() {\r\n if (this.QueryParams.CredentialID) {\r\n this.State.CurrentCredentialID = +this.QueryParams.CredentialID;\r\n this.OnCredentialChanged();\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, WebAPIRequest } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { WebAPIRequestEndpoint } from '@m4u-angular/core/endpoints/webapi-request.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Body: string;\r\n Response: string;\r\n QueryString: string;\r\n Tabs: any[];\r\n CurrentTabIndex: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-request-history',\r\n templateUrl: './request-history.component.html',\r\n styleUrls: ['./request-history.component.scss']\r\n})\r\nexport class RequestHistoryComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, webAPIRequestEndpoint: WebAPIRequestEndpoint) {\r\n super(A, 'RequestHistoryComponent', WebAPIRequest, State, webAPIRequestEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.InitBody();\r\n this.InitResponse();\r\n this.InitQueryString();\r\n this.InitTabs();\r\n }\r\n\r\n public CopyText() {\r\n navigator.clipboard.writeText(this.State.CurrentTabIndex === 0 ? this.State.Body : this.State.Response);\r\n this.UI.InfoMessage(this.RC(\"msgTextCopied\"));\r\n }\r\n\r\n private InitBody() {\r\n if (this.Entity?.Body) {\r\n const json = JSON.parse(this.Entity.Body);\r\n this.State.Body = JSON.stringify(json, undefined, 4);\r\n }\r\n }\r\n\r\n private InitResponse() {\r\n if (this.Entity?.Response) {\r\n try {\r\n const json = JSON.parse(this.Entity.Response);\r\n this.State.Response = JSON.stringify(json, undefined, 4);\r\n } catch (error) {\r\n this.State.Response = this.Entity.Response;\r\n }\r\n }\r\n }\r\n\r\n private InitQueryString() {\r\n if (this.Entity?.QueryString) {\r\n this.State.QueryString = this.Entity.QueryString;\r\n if (this.State.QueryString.startsWith('?')) { this.State.QueryString = this.State.QueryString.substring(1); }\r\n this.State.QueryString = this.State.QueryString.split('&').join('\\r\\n')\r\n }\r\n }\r\n\r\n private InitTabs() {\r\n this.State.Tabs = [];\r\n\r\n if (this.Entity.Body) {\r\n this.State.Tabs.push({\r\n index: 0,\r\n text: this.RC(\"lblBody\"),\r\n Name: \"Body\"\r\n });\r\n\r\n this.State.CurrentTabIndex = 0;\r\n } else {\r\n this.State.CurrentTabIndex = 1;\r\n }\r\n\r\n this.State.Tabs.push({\r\n index: 1,\r\n text: this.RC(\"lblResponse\"),\r\n Name: \"Response\"\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n BaseEntitiesResponse,\r\n SystemCredentialInfo, CredentialAdditionalInfoMetadata,\r\n BaseDataResponse, CredentialExternalInfo, CreateCredentialsParams, SystemCredentialParams\r\n} from '@base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { BaseEndpoint } from '@base/endpoint/BaseEndpoint';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\n\r\n@Injectable()\r\nexport class SystemCredentialsEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('SystemCredentials', api);\r\n }\r\n\r\n public ListSystemCredentials(Params: SystemCredentialParams, options: DataLoadOptions)\r\n : Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListSystemCredentials', Params, options?.GetLoadOptions());\r\n }\r\n\r\n public ListCredentialsForCreations(params: SystemCredentialParams): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListCredentialsForCreations', params);\r\n }\r\n\r\n public CreateCredentials(params: CreateCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CreateCredentials', params);\r\n }\r\n\r\n public SendWelcomeUserMessage(params: CreateCredentialsParams) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'SendWelcomeUserMessage', params);\r\n }\r\n\r\n public GetAdditionalInfoMetadata(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetAdditionalInfoMetadata');\r\n }\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumNotificationDeliveryOptions, EnumPageDisplayModes,\r\n EnumPageEntitySources, EnumSystemOptions\r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State {\r\n NotificationDeliveryOptions: any[] = [];\r\n UserCreationOptions: any[] = [];\r\n NotificationDeliveryOption: EnumNotificationDeliveryOptions;\r\n UserCreationOptionID: number = 0;\r\n Languages: any[] = [];\r\n LanguageID: string = 'HE';\r\n}\r\n\r\n@Component({\r\n selector: 'app-welcome-message-config-dialog',\r\n templateUrl: './welcome-message-config-dialog.component.html',\r\n styleUrls: ['./welcome-message-config-dialog.component.scss']\r\n})\r\nexport class WelcomeMessageConfigDialogComponent extends BasePageComponent {\r\n @Input() ShowUserCreationOption: boolean;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'WelcomeMessageConfigDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n\r\n }\r\n\r\n override OnInitTitle() {\r\n return this.ShowUserCreationOption ? 'Credential creation' : this.RC('Pages.WelcomeMessageConfigDialogComponent');\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.State.NotificationDeliveryOptions = this.LIST('WelcomeDeliveryOptions')\r\n .sort((a, b) => a.SortOrder > b.SortOrder ? 1 : -1)\r\n .filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail);\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS);\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp);\r\n default:\r\n break;\r\n }\r\n return true;\r\n });\r\n if (!this.ShowUserCreationOption) {\r\n this.State.NotificationDeliveryOptions = this.State.NotificationDeliveryOptions\r\n .filter(x => x.Value !== EnumNotificationDeliveryOptions.DontSend);\r\n }\r\n this.State.NotificationDeliveryOption = this.State.NotificationDeliveryOptions[0]?.Value;\r\n this.State.UserCreationOptions = this.LIST('UserCreationOptions');\r\n this.State.Languages = this.LIST('Languages');\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialAdditionalInfoMetadata, CredentialExternalInfo, CredentialType, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials-grid',\r\n templateUrl: './system-credentials-grid.component.html'\r\n})\r\nexport class SystemCredentialsGridComponent extends BaseGridComponent{\r\n\r\n @Input() CredentialTypes: CredentialType[];\r\n @Input() AdditionalInfoMetadata: CredentialAdditionalInfoMetadata;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SystemCredentialsGridComponent', SystemCredentialInfo, BaseState);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnManageCredentials'),\r\n visible: true,\r\n onClick: () => this.OnManageCredentials(options)\r\n }, {\r\n text: this.RC('btnGoToLoginHistory'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/credential-login-history'], { CredentialID: options.data.EntryID })\r\n }, {\r\n text: this.RC('btnGoToRequestsHistory'),\r\n visible: true,\r\n onClick: () => this.Navigate(['pages/general/requests-history'], { CredentialID: options.data.EntryID })\r\n }];\r\n }\r\n\r\n OnGetLastUsedBeforeText(rowData): string {\r\n return rowData.LastUseDate ? DateHelpers.GetDateApproximate((rowData as SystemCredentialInfo).LastUseDate, false) : '';\r\n }\r\n\r\n GetCaption(rowData, captionField): string {\r\n return rowData[captionField];\r\n }\r\n\r\n OnManageCredentials(options: any) {\r\n const { Type, EntryID } = options.data;\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: EntryID, Type: Type });\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport {\r\n BaseState, CreateCredentialsParams, CredentialAdditionalInfoMetadata,\r\n CredentialExternalInfo, CredentialType, SystemCredentialParams, SystemCredentialInfo\r\n}\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@m4u-angular/core/endpoints/system-credentials.endpoint';\r\nimport { EnumYesNo } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { WelcomeMessageConfigDialogComponent }\r\n from '@m4u-angular/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\nimport { SystemCredentialsGridComponent } from './system-credentials-grid/system-credentials-grid.component';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\nexport class State extends BaseState {\r\n CredentialTypes: CredentialType[];\r\n AdditionalInfoMetadata: CredentialAdditionalInfoMetadata;\r\n SelectedRows: CredentialExternalInfo[] = [];\r\n CredentialType: number;\r\n CredentialID: number;\r\n IsActive: any;\r\n IsPendingWelcome: any;\r\n IsLockedOut: any;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials',\r\n templateUrl: './system-credentials.component.html',\r\n styleUrls: ['./system-credentials.component.scss']\r\n})\r\nexport class SystemCredentialsComponent extends BasePageComponent {\r\n @ViewChild(WelcomeMessageConfigDialogComponent) dialog: WelcomeMessageConfigDialogComponent;\r\n @ViewChild(SystemCredentialsGridComponent) grid: SystemCredentialsGridComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private systemCredentialEndpoint: SystemCredentialsEndpoint) {\r\n super(A, 'SystemCredentialsComponent', SystemCredentialInfo, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.GetParamsFromQuery();\r\n this.LoadDataSource();\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialTypes = response.Entities;\r\n });\r\n this.Do(this.systemCredentialEndpoint.GetAdditionalInfoMetadata(), false, (response) => {\r\n this.State.AdditionalInfoMetadata = response.Data;\r\n });\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n const settings = new ToolbarSettings;\r\n settings.IsAllowFilter = true;\r\n settings.GridExtender = this.grid?.G;\r\n\r\n return settings;\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.CredentialType = undefined;\r\n this.State.CredentialID = undefined;\r\n this.State.IsActive = undefined;\r\n this.State.IsPendingWelcome = undefined;\r\n this.State.IsLockedOut = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n private GetParamsFromQuery() {\r\n if (this.QueryParams.CredentialID) {\r\n this.State.CredentialID = +this.QueryParams.CredentialID;\r\n }\r\n }\r\n private LoadDataSource() {\r\n this.DataSources['SystemCredentials'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n const request = new SystemCredentialParams();\r\n request.CredentialType = this.State.CredentialType;\r\n request.CredentialID = this.State.CredentialID;\r\n request.IsActive = this.State.IsActive === EnumYesNo.Yes ?\r\n true : this.State.IsActive === EnumYesNo.No ? false : undefined;\r\n request.IsPendingWelcome = this.State.IsPendingWelcome === EnumYesNo.Yes ?\r\n true : this.State.IsPendingWelcome === EnumYesNo.No ? false : undefined;\r\n request.IsLockedOut = this.State.IsLockedOut === EnumYesNo.Yes ?\r\n true : this.State.IsLockedOut === EnumYesNo.No ? false : undefined;\r\n return this.systemCredentialEndpoint.ListSystemCredentials(request, options);\r\n }, undefined, undefined, false);\r\n\r\n this.DS['SystemCredentials']?.Reload();\r\n }\r\n\r\n OnSelectionChanged(event) {\r\n this.State.SelectedRows = event;\r\n }\r\n\r\n ShowMessageConfigDialog() {\r\n this.dialog.ShowDialogShort((data) => {\r\n const { NotificationDeliveryOption, LanguageID } = data;\r\n const params = new CreateCredentialsParams();\r\n params.Language = LanguageID;\r\n params.DeliveryOption = NotificationDeliveryOption;\r\n params.CredentialsForCreation = this.State.SelectedRows;\r\n this.Do(this.systemCredentialEndpoint.SendWelcomeUserMessage(params), false, (data) => {\r\n this.ReloadComponent();\r\n this.UI.InfoMessage(`${this.RC('msgSuccess')}: ${data.Data} ${this.RC('lblTimes')}`);\r\n });\r\n });\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { DataLoadOptions } from '@m4u-angular/base/datalayer/DataLoadOptions';\r\nimport {\r\n BaseState, CreateCredentialsParams, CredentialAdditionalInfoMetadata,\r\n CredentialExternalInfo, CredentialType, SystemCredentialInfo, SystemCredentialParams\r\n}\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@m4u-angular/core/endpoints/system-credentials.endpoint';\r\nimport { WelcomeMessageConfigDialogComponent }\r\n from '@m4u-angular/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\n\r\nexport class State extends BaseState {\r\n AdditionalInfoMetadata: CredentialAdditionalInfoMetadata;\r\n SelectedRows: CredentialExternalInfo[] = [];\r\n CredentialTypes: CredentialType[];\r\n CredentialType: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials-creation',\r\n templateUrl: './system-credentials-creation.component.html',\r\n styleUrls: ['./system-credentials-creation.component.scss']\r\n})\r\nexport class SystemCredentialsCreationComponent extends BasePageComponent {\r\n @ViewChild(WelcomeMessageConfigDialogComponent) dialog: WelcomeMessageConfigDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private credentialActivityEndpoint: CredentialActivityEndpoint,\r\n private systemCredentialEndpoint: SystemCredentialsEndpoint) {\r\n super(A, 'SystemCredentialsCreationComponent', SystemCredentialInfo, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n this.Do(this.systemCredentialEndpoint.GetAdditionalInfoMetadata(), false, (response) => {\r\n this.State.AdditionalInfoMetadata = response.Data;\r\n });\r\n this.Do(this.credentialActivityEndpoint.ListCredentialTypes(), false, (response) => {\r\n this.State.CredentialTypes = response.Entities;\r\n });\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true\r\n };\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.CredentialType = undefined;\r\n this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource() {\r\n const request = new SystemCredentialParams();\r\n request.CredentialType = this.State.CredentialType;\r\n this.DataSources['Credentials'] = new DataSourceCustomAction((options: DataLoadOptions) => {\r\n return this.systemCredentialEndpoint.ListCredentialsForCreations(request);\r\n });\r\n\r\n this.DS['Credentials']?.Reload();\r\n }\r\n\r\n OnSelectionChanged(event) {\r\n this.State.SelectedRows = event;\r\n }\r\n\r\n ShowMessageConfigDialog() {\r\n this.dialog.ShowDialogShort((data) => {\r\n const { NotificationDeliveryOption, LanguageID, UserCreationOptionID } = data;\r\n const params = new CreateCredentialsParams();\r\n params.Language = LanguageID;\r\n params.DeliveryOption = NotificationDeliveryOption;\r\n params.CredentialsForCreation = this.State.SelectedRows;\r\n params.UserCreationOption = UserCreationOptionID;\r\n this.Do(this.systemCredentialEndpoint.CreateCredentials(params), false, (data) => {\r\n this.ReloadComponent();\r\n this.UI.InfoMessage(`${this.RC('msgSuccess')}: ${data.Data} ${this.RC('lblTimes')}`);\r\n if (params.CredentialsForCreation?.length === 1) {\r\n const creds = params.CredentialsForCreation[0];\r\n this.Navigate(['/pages/passwordmanage'], { CredentialID: creds.EntryID , Type: creds.Type });\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { BaseEndpoint } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { BaseEntitiesResponse, DataEditorView } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class DataEditorEndpoint extends BaseEndpoint {\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('DataEditor', api);\r\n }\r\n\r\n public ListViews(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'ListViews');\r\n }\r\n\r\n public CheckPerformance(views: any) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckPerformance', views);\r\n }\r\n\r\n public CheckValidity(views: any) {\r\n return this.api.ExecutePostAction(this.ControllerName, 'CheckValidity', views);\r\n }\r\n}","import { Component, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { BaseState, DataEditorView, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DataEditorEndpoint } from '@m4u-angular/core/endpoints/data-editor.endpoint';\r\nimport { WelcomeMessageConfigDialogComponent }\r\n from '@m4u-angular/ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\n\r\nexport class State extends BaseState {\r\n Views: DataEditorView[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-data-view-list',\r\n templateUrl: './data-view-list.component.html',\r\n})\r\nexport class DataViewListComponent extends BasePageComponent {\r\n @ViewChild(WelcomeMessageConfigDialogComponent) dialog: WelcomeMessageConfigDialogComponent;\r\n\r\n constructor(A: ServiceBagService, private dataEditorEndpoint: DataEditorEndpoint) {\r\n super(A, 'DataViewListComponent', SystemCredentialInfo, State);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.InitState();\r\n this.LoadDataSource();\r\n }\r\n\r\n private LoadDataSource() {\r\n this.Do(this.dataEditorEndpoint.ListViews(), false, (res) => this.State.Views = res.Entities);\r\n }\r\n\r\n CheckPerformance() {\r\n this.IsLoading = true;\r\n this.Do(this.dataEditorEndpoint.CheckPerformance({ Views: this.State.Views }), true, res => {\r\n this.State.Views = res.Entities;\r\n this.IsLoading = false;\r\n })\r\n }\r\n\r\n CheckValidity() {\r\n this.IsLoading = true;\r\n this.Do(this.dataEditorEndpoint.CheckValidity({ Views: this.State.Views }), true, res => {\r\n this.State.Views = res.Entities;\r\n this.IsLoading = false;\r\n })\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n BaseDataResponse,\r\n BaseEntityResponse, RemoteRequest,\r\n RemoteRequestListParams\r\n} from '@base/entities/BaseEntities';\r\nimport { APIGatewayService } from '../gateway/APIGateway.service';\r\nimport { DataLoadOptions } from '@base/datalayer/DataLoadOptions';\r\nimport { BaseEndpointCRUD } from '@m4u-angular/base/endpoint/BaseEndpointCRUD';\r\n\r\n@Injectable()\r\nexport class RemoteRequestEndpoint extends BaseEndpointCRUD{\r\n //Constructor\r\n constructor(api: APIGatewayService) {\r\n super('RemoteRequest', api);\r\n }\r\n\r\n public ListEx(Params: RemoteRequestListParams, options: DataLoadOptions): Observable> {\r\n return this.api.ExecutePostAction(this.ControllerName, 'ListEx', Params, { options: options?.GetLoadOptions() });\r\n }\r\n \r\n public GetPossibleControllers(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleControllers');\r\n }\r\n\r\n public GetPossibleActions(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleActions');\r\n }\r\n\r\n public GetPossibleMethods(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleMethods');\r\n }\r\n\r\n public GetPossibleStatuses(): Observable> {\r\n return this.api.ExecuteGetAction(this.ControllerName, 'GetPossibleStatuses');\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialActivityStatus } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-remote-request-history-grid',\r\n templateUrl: './remote-request-history-grid.component.html'\r\n})\r\nexport class RemoteRequestHistoryGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'RemoteRequestHistoryGridComponent', CredentialActivityStatus, BaseState);\r\n }\r\n\r\n OnRowClick(e) {\r\n if (e.data.EntryID) {\r\n this.Navigate(['/pages/general/remote-request', e.data.EntryID]);\r\n }\r\n }\r\n\r\n GetStatusColor(isSuccess: boolean) {\r\n return isSuccess ? 'green-cyan' : 'cinnabar';\r\n }\r\n}","export default \"\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BaseEntity, BaseState, RemoteRequestListParams } from '@base/entities/BaseEntities';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { RemoteRequestEndpoint } from '@m4u-angular/core/endpoints/remote-request.endpoint';\r\nimport { DataSourceCustomAction } from '@m4u-angular/base/datalayer/BaseDataSources';\r\nimport { RemoteRequestHistoryGridComponent } from './grid/remote-request-history-grid.component';\r\n\r\nclass State extends BaseState {\r\n Controllers: string[] | null;\r\n Actions: string[] | null;\r\n Methods: string[] | null;\r\n Statuses: number[] | null;\r\n DateFrom: Date;\r\n DateTo: Date;\r\n\r\n ControllerList: string[];\r\n ActionsList: string[];\r\n MethodsList: string[];\r\n StatusesList: number[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-remote-request-history-list',\r\n templateUrl: './remote-request-history-list.component.html'\r\n})\r\n\r\nexport class RemoteRequestHistoryListComponent extends BasePageComponent{\r\n constructor(A: ServiceBagService, private remoteRequestEndpoint: RemoteRequestEndpoint) {\r\n super(A, 'RemoteRequestHistoryListComponent', BaseEntity, State);\r\n }\r\n @ViewChild(RemoteRequestHistoryGridComponent) grid: RemoteRequestHistoryGridComponent;\r\n\r\n protected override OnInitComponent() {\r\n this.LoadDataSource();\r\n this.InitControllers();\r\n this.InitActions();\r\n this.InitMethods();\r\n this.InitStatuses();\r\n }\r\n\r\n private LoadDataSource() {\r\n const params = new RemoteRequestListParams();\r\n params.Controllers = this.State.Controllers;\r\n params.Actions = this.State.Actions;\r\n params.DateFrom = this.State.DateFrom;\r\n params.DateTo = this.State.DateTo;\r\n params.Methods = this.State.Methods;\r\n params.Statuses = this.State.Statuses;\r\n\r\n this.DataSources['Requests'] = new DataSourceCustomAction(\r\n (options) => this.remoteRequestEndpoint.ListEx(params, options)\r\n , undefined, undefined, false);\r\n }\r\n\r\n override OnGetToolbarSettings() {\r\n return {\r\n IsAllowFilter: true,\r\n IsAllowExport: true,\r\n GridExtender: this.grid?.G\r\n };\r\n }\r\n\r\n protected override OnApplyFilter() {\r\n this.LoadDataSource();\r\n }\r\n\r\n protected override OnClearFilter() {\r\n this.State.Controllers = null;\r\n this.State.Actions = null;\r\n this.State.DateFrom = null;\r\n this.State.DateTo = null;\r\n this.State.Statuses = null;\r\n this.State.Methods = null;\r\n this.LoadDataSource();\r\n }\r\n\r\n private InitControllers() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleControllers(), false, (response) => {\r\n this.State.ControllerList = response.Data;\r\n });\r\n }\r\n\r\n private InitActions() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleActions(), false, (response) => {\r\n this.State.ActionsList = response.Data;\r\n });\r\n }\r\n\r\n private InitMethods() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleMethods(), false, (response) => {\r\n this.State.MethodsList = response.Data;\r\n });\r\n }\r\n\r\n private InitStatuses() {\r\n this.Do(this.remoteRequestEndpoint.GetPossibleStatuses(), false, (response) => {\r\n this.State.StatusesList = response.Data;\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, RemoteRequest } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { RemoteRequestEndpoint } from '@m4u-angular/core/endpoints/remote-request.endpoint';\r\nimport { EnumPageDisplayModes } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n Body: string;\r\n Response: string;\r\n QueryString: string;\r\n Tabs: any[];\r\n CurrentTabIndex: number;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-remote-request-history',\r\n templateUrl: './remote-request-history.component.html',\r\n styleUrls: ['./remote-request-history.component.scss']\r\n})\r\nexport class RemoteRequestHistoryComponent extends BasePageCRUDComponent {\r\n\r\n constructor(A: ServiceBagService, remoteRequestEndpoint: RemoteRequestEndpoint) {\r\n super(A, 'RemoteRequestHistoryComponent', RemoteRequest, State, remoteRequestEndpoint, EnumPageDisplayModes.Window);\r\n }\r\n\r\n override OnEntityLoaded() {\r\n this.InitBody();\r\n this.InitResponse();\r\n this.InitQueryString();\r\n this.InitTabs();\r\n }\r\n\r\n public CopyText() {\r\n navigator.clipboard.writeText(this.State.CurrentTabIndex === 0 ? this.State.Body : this.State.Response);\r\n this.UI.InfoMessage(this.RC('msgTextCopied'));\r\n }\r\n\r\n private InitBody() {\r\n if (this.Entity?.Body) {\r\n try {\r\n const json = JSON.parse(this.Entity.Body);\r\n this.State.Body = JSON.stringify(json, undefined, 4);\r\n } catch (error) {\r\n this.State.Body = this.Entity.Body;\r\n }\r\n }\r\n }\r\n\r\n private InitResponse() {\r\n if (this.Entity?.Response) {\r\n try {\r\n const json = JSON.parse(this.Entity.Response);\r\n this.State.Response = JSON.stringify(json, undefined, 4);\r\n } catch (error) {\r\n this.State.Response = this.Entity.Response;\r\n }\r\n }\r\n }\r\n\r\n private InitQueryString() {\r\n if (this.Entity?.QueryString) {\r\n this.State.QueryString = this.Entity.QueryString;\r\n if (this.State.QueryString.startsWith('?')) {\r\n this.State.QueryString = this.State.QueryString.substring(1);\r\n }\r\n this.State.QueryString = this.State.QueryString.split('&').join('\\r\\n');\r\n }\r\n }\r\n\r\n private InitTabs() {\r\n this.State.Tabs = [];\r\n\r\n if (this.Entity.Body) {\r\n this.State.Tabs.push({\r\n index: 0,\r\n text: this.RC('lblBody'),\r\n Name: 'Body'\r\n });\r\n\r\n this.State.CurrentTabIndex = 0;\r\n } else {\r\n this.State.CurrentTabIndex = 1;\r\n }\r\n\r\n this.State.Tabs.push({\r\n index: 1,\r\n text: this.RC('lblResponse'),\r\n Name: 'Response'\r\n });\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { PrepareRoutes } from '@core/framework/navigator.service';\r\nimport { ExceptionComponent } from '@core/exceptions/exception.component';\r\nimport { LoginGuard } from '@core/framework/login.guard';\r\nimport { CredentialsActivityStatusComponent } from '@ui/components/general/credential-activity-status/credentials-activity-status.component';\r\nimport { NotificationsHistoryComponent } from '@ui/notifications/notifications-history/notificationshistory.component';\r\nimport { NotificationViewComponent } from '@ui/notifications/notifications-history/notification-view/notificationview.component';\r\nimport { EmptyLayoutComponent } from '@ui/layouts/layout/empty-layout/emptylayout.component';\r\nimport { MainLayoutComponent } from '@ui/layouts/layout/main-layout/mainlayout.component';\r\nimport { ComingSoonComponent } from '@ui/components/login/coming-soon/comingsoon.component';\r\nimport { LoginComponent } from '@ui/components/login/login/login.component';\r\nimport { LogoutComponent } from '@ui/components/login/logout/logout.component';\r\nimport { SessionExpireComponent } from '@ui/components/login/session-expire/sessionexpire.component';\r\nimport { PasswordChangeComponent } from '@ui/components/password/password-change/passwordchange.component';\r\nimport { PasswordChangeExpiredComponent } from '@ui/components/password/password-change-expired/passwordchangeexpired.component';\r\nimport { PasswordManageComponent } from '@ui/components/password/password-manage/passwordmanage.component';\r\nimport { PasswordRecoveryComponent } from '@ui/components/password/password-recovery/passwordrecovery.component';\r\nimport { PasswordWelcomeComponent } from '@ui/components/password/password-welcome/passwordwelcome.component';\r\nimport { LoginByOtpComponent } from '@ui/components/login/login-by-otp/login-by-otp.component';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { NotificationServerListComponent } from '@ui/notifications/notification-server/list/notification-server-list.component';\r\nimport { NotificationServerComponent } from '@ui/notifications/notification-server/notification-server.component';\r\nimport { NotificationTemplateListComponent }\r\n from '@m4u-angular/ui/notifications/notification-template/notification-template-list/notification-template-list.component';\r\nimport { NotificationTemplateComponent } from '@m4u-angular/ui/notifications/notification-template/notification-template.component';\r\nimport { SystemOptionsComponent } from '@ui/components/general/system-options/system-options.component';\r\nimport { MidStoreComponent } from '@core/mid/mid-store.component';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { DemoLayoutComponent } from '@ui/demo/layouts/demo-layout/demo-layout.component';\r\nimport { DemoEditorsComponent } from '@ui/demo/components/editors/demo-editors.component';\r\nimport { DemoLayoutsComponent } from '@ui/demo/components/layouts/demo-layouts.component';\r\nimport { DemoSectionsComponent } from '@ui/demo/components/sections/demo-sections.component';\r\nimport { DemoCardsComponent } from '@ui/demo/components/cards/demo-cards.component';\r\nimport { DemoTabsComponent } from '@ui/demo/components/tabs/demo-tabs.component';\r\nimport { DemoGridsComponent } from '@ui/demo/components/grids/demo-grids.component';\r\nimport { DemoBottomSheetsComponent } from '@ui/demo/components/bottom-sheets/demo-bottom-sheets.component';\r\nimport { DemoPagesComponent } from '@ui/demo/components/pages/demo-pages.component';\r\nimport { HistoryViewComponent } from '@ui/components/general/history-view/historyview.component';\r\nimport {\r\n DemoPageToolbarButtonsComponent\r\n} from '@ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component';\r\nimport {\r\n DemoPageHeaderButtonsComponent\r\n} from '@ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component';\r\nimport { DemoSidebarsComponent } from '@ui/demo/components/sidebars/demo-sidebars.component';\r\nimport { DemoDialogsComponent } from '@ui/demo/components/dialogs/demo-dialogs.component';\r\nimport { DemoPipesComponent } from '@ui/demo/components/pipes/demo-pipes.component';\r\nimport { DemoComponentsComponent } from '@ui/demo/components/components/demo-components.component';\r\nimport { CredentialLoginHistoryComponent } from '@ui/components/general/credential-login-history/credential-login-history.component';\r\nimport { RequestHistoryListComponent } from '@ui/components/general/request-history/request-history-list/request-history-list.component';\r\nimport { RequestHistoryComponent } from '@ui/components/general/request-history/request-history.component';\r\nimport { SystemCredentialsComponent } from '@m4u-angular/ui/components/general/system-credentials/system-credentials.component';\r\nimport { SystemCredentialsCreationComponent }\r\n from '@m4u-angular/ui/components/general/system-credentials-creation/system-credentials-creation.component';\r\nimport { DataViewListComponent } from '@m4u-angular/ui/components/general/data-views/data-view-list.component';\r\nimport { RemoteRequestHistoryListComponent } from '@ui/components/general/remote-request-history/remote-request-history-list.component';\r\nimport { RemoteRequestHistoryComponent } from '@ui/components/general/remote-request-history/remote-request-history.component';\r\n\r\nconst routes: Routes = [\r\n // Demo routes\r\n {\r\n path: 'demo', component: DemoLayoutComponent,\r\n children: [\r\n { path: 'buttons', component: DemoButtonsComponent },\r\n { path: 'editors', component: DemoEditorsComponent },\r\n { path: 'layouts', component: DemoLayoutsComponent },\r\n { path: 'components', component: DemoComponentsComponent },\r\n { path: 'sections', component: DemoSectionsComponent },\r\n { path: 'cards', component: DemoCardsComponent },\r\n { path: 'tabs', component: DemoTabsComponent },\r\n { path: 'grids', component: DemoGridsComponent },\r\n { path: 'page-examples', component: DemoPagesComponent },\r\n { path: 'page-examples/toolbar-buttons', component: DemoPageToolbarButtonsComponent },\r\n { path: 'page-examples/header-buttons', component: DemoPageHeaderButtonsComponent },\r\n { path: 'sidebars', component: DemoSidebarsComponent },\r\n { path: 'bottom-sheets', component: DemoBottomSheetsComponent },\r\n { path: 'dialogs', component: DemoDialogsComponent },\r\n { path: 'pipes', component: DemoPipesComponent }\r\n ]\r\n },\r\n //System routes\r\n {\r\n path: 'system', component: EmptyLayoutComponent,\r\n children: [\r\n { path: 'login', component: LoginComponent },\r\n { path: 'login-otp', component: LoginByOtpComponent },\r\n { path: 'logout', component: LogoutComponent },\r\n { path: 'sessionexpired', component: SessionExpireComponent },\r\n { path: 'exception', component: ExceptionComponent },\r\n { path: 'comingsoon', component: ComingSoonComponent },\r\n { path: 'passwordchange', component: PasswordChangeComponent, canActivate: [LoginGuard] },\r\n { path: 'passwordchangeexpired', component: PasswordChangeExpiredComponent },\r\n { path: 'passwordrecovery', component: PasswordRecoveryComponent },\r\n { path: 'passwordwelcome', component: PasswordWelcomeComponent },\r\n { path: 'midstore', component: MidStoreComponent },\r\n { path: 'buttons', component: DemoButtonsComponent }\r\n ]\r\n },\r\n {\r\n path: 'pages', component: MainLayoutComponent,\r\n children: [\r\n //General routes\r\n ...PrepareRoutes([{ path: 'passwordmanage', component: PasswordManageComponent, canActivate: [LoginGuard], outlet: 'window' }]),\r\n {\r\n path: 'general',\r\n children: PrepareRoutes([\r\n {\r\n path: 'credentials-activity-status',\r\n component: CredentialsActivityStatusComponent,\r\n data: { Menu: 'credentials_activity_status' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notificationshistory',\r\n component: NotificationsHistoryComponent,\r\n data: { Menu: 'notificationshistory' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notificationview/:EntryID',\r\n component: NotificationViewComponent,\r\n data: { Menu: 'notificationview' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'notification-servers',\r\n component: NotificationServerListComponent,\r\n data: { Menu: 'notification_servers' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notification-server/:EntryID',\r\n component: NotificationServerComponent,\r\n data: { Menu: 'notification_server' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'notification-templates',\r\n component: NotificationTemplateListComponent,\r\n data: { Menu: 'notification_templates' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'notification-template/:EntryID',\r\n component: NotificationTemplateComponent,\r\n data: { Menu: 'notification_template' }, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'system-options',\r\n component: SystemOptionsComponent,\r\n data: { Menu: 'system_options' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'credential-login-history',\r\n component: CredentialLoginHistoryComponent,\r\n data: { Menu: 'credential_login_history' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'requests-history',\r\n component: RequestHistoryListComponent,\r\n data: { Menu: 'request_history' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'request-history/:EntryID', component: RequestHistoryComponent, canActivate: [LoginGuard], outlet: 'window'\r\n },\r\n {\r\n path: 'historyview',\r\n component: HistoryViewComponent,\r\n data: { Menu: 'historyview' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'credentials-report',\r\n component: SystemCredentialsComponent,\r\n data: { Menu: 'credentials_report' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'credentials-creation',\r\n component: SystemCredentialsCreationComponent,\r\n data: { Menu: 'credentials_creation' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'data-views',\r\n component: DataViewListComponent,\r\n data: { Menu: 'data_views' }, canActivate: [LoginGuard]\r\n },\r\n {\r\n path: 'remote-requests-history', component: RemoteRequestHistoryListComponent,\r\n data: { Menu: 'remote_request_history' }, canActivate: [LoginGuard]\r\n },\r\n { \r\n path: 'remote-request/:EntryID', component: RemoteRequestHistoryComponent, \r\n canActivate: [LoginGuard], outlet: 'window' \r\n }\r\n ])\r\n },\r\n //Custom anonymous routes\r\n ...PrepareRoutes(AppConfigService.loadConfig().RoutesAnonymous),\r\n //Custom protected routes\r\n ...PrepareRoutes(AppConfigService.loadConfig().RoutesProtected)\r\n ]\r\n },\r\n //Custom routes with empty layout\r\n {\r\n path: 'pages', component: EmptyLayoutComponent,\r\n children: PrepareRoutes(AppConfigService.loadConfig().RoutesWithEmptyLayout)\r\n },\r\n //Redirect to login on entry or to home page\r\n {\r\n path: '',\r\n redirectTo: AppConfigService.loadConfig().OnGetHomePagePath()\r\n ? `pages/${PrepareRoutes([{ path: AppConfigService.loadConfig().OnGetHomePagePath() }])[0].path}`\r\n : 'system/login',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: '**',\r\n component: ExceptionComponent,\r\n data: {\r\n MessageCode: 'msgRouteNotFound'\r\n }\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, {\r\n onSameUrlNavigation: 'reload',\r\n relativeLinkResolution: 'legacy'\r\n })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule {\r\n}\r\n","import { ErrorHandler, Injectable } from \"@angular/core\";\r\nimport { AppInjector } from \"../injector/injector.module\";\r\nimport { APIGatewayService } from \"../gateway/APIGateway.service\";\r\nimport { ClientException } from \"@base/entities/BaseEntities\";\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SysGlobals } from \"../framework/sysglobals\";\r\nimport { environment } from \"../../environment/environment\";\r\nimport { NavigatorService } from \"../framework/navigator.service\";\r\n\r\n@Injectable()\r\nexport class ExceptionHandler implements ErrorHandler {\r\n handleError(error) {\r\n //Error info\r\n var Exception = new ClientException;\r\n Exception.Message = error.message || error.toString();\r\n Exception.Type = error.name;\r\n Exception.StackTrace = error.stack;\r\n\r\n //Dispatch 'errorOccured' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event['errorMessage'] = Exception.Message;\r\n event.initEvent('errorOccured', true, true);\r\n document.dispatchEvent(event);\r\n\r\n SysGlobals.LastException = Exception;\r\n\r\n //Skip when debugging\r\n if (!environment.production) {\r\n console.error(error);\r\n throw (error);\r\n }\r\n\r\n //Print error\r\n console.error(error);\r\n\r\n //Device info\r\n var Detector = AppInjector.get(DeviceDetectorService);\r\n Exception.Device = Detector.device;\r\n Exception.DeviceType = (!Detector.isMobile() ? 'D' : (Detector.isMobile() ? 'M' : 'T'));\r\n Exception.Browser = Detector.browser;\r\n Exception.BrowserVersion = Detector.browser_version;\r\n Exception.OS = Detector.os;\r\n Exception.OSVersion = Detector.os_version;\r\n\r\n //Execute\r\n var api = AppInjector.get(APIGatewayService);\r\n api.ExecutePostAction(\"System\", \"LogClientException\", Exception).subscribe(x => {\r\n var Navigator = AppInjector.get(NavigatorService);\r\n Navigator.Navigate(['/system/exception']);\r\n history.replaceState(null, null, '/system/exception') // replace last broken page url\r\n });\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport class Environment \r\n{ \r\n production: boolean; \r\n version: string;\r\n dbSchema: string;\r\n}\r\n\r\nexport const ENVIRONMENT = new InjectionToken('Token for environment constant');\r\n","import { Component } from \"@angular/core\";\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { ServiceBagService, ServiceBagServices } from '@base/component/ServiceBag';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\n\r\nclass State extends BaseState\r\n{\r\n DataSourceName: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-commonsettings',\r\n templateUrl: './commonsetting.component.html'\r\n})\r\n\r\nexport class CommonSettingComponent extends BasePageComponent\r\n{\r\n override ModuleName = this.A.Navigator.GetCustomRouteData().ModuleName || '';\r\n constructor(A: ServiceBagService)\r\n {\r\n super(A, 'CommonSettingComponent', BaseEntity, State);\r\n }\r\n\r\n override OnInitTitle()\r\n {\r\n const title = this.A.Navigator.GetCustomRouteData().Title;\r\n if (title) { return this.RC(title); }\r\n }\r\n\r\n protected override OnInitState(): void\r\n {\r\n this.State.DataSourceName = this.A.Navigator.GetCustomRouteData().DataSource;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent {\r\n @Input() Class: string = '';\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { DxAccordionComponent, DxTabsComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.scss']\r\n})\r\nexport class TabsComponent implements AfterViewInit {\r\n\r\n @Input() Items: any[];\r\n\r\n private _selectedIndex: number;\r\n @Input() set SelectedIndex(value: number) {\r\n if (Utils.IsEmpty(value)) return;\r\n\r\n this._selectedIndex = value;\r\n this.SelectedIndexChange.emit(value);\r\n }\r\n get SelectedIndex() {\r\n return this._selectedIndex;\r\n }\r\n\r\n @Input() set Visible(value: boolean) {\r\n this._visible = value;\r\n this.SetVisibility();\r\n }\r\n\r\n @Input() IsTabsNavHidden: boolean = false;\r\n @Input() IsShowOnlyTabs: boolean = false;\r\n @Input() IsShowOnlyAccordion: boolean = false;\r\n @Input() IsShowStepNumbers: boolean = false;\r\n @Input() CustomButtonText: string;\r\n @Input() CustomButtonIcon: string;\r\n\r\n @Output() SelectedIndexChange = new EventEmitter();\r\n @Output() OnItemClick = new EventEmitter();\r\n @Output() OnCustomButtonClicked = new EventEmitter();\r\n\r\n @ViewChild('tabs') tabs: DxTabsComponent;\r\n @ViewChild('accordion') accordion: DxAccordionComponent;\r\n\r\n get Instance() {\r\n const instance = (this.tabs && this.tabs.instance) || (this.accordion && this.accordion.instance);\r\n if (instance && !instance['_contentReadyAction']) instance['_initContentReadyAction']();\r\n return instance;\r\n }\r\n\r\n private _currentItemIndex;\r\n private _visible = true;\r\n IsInitialized: boolean;\r\n\r\n constructor(public screen: ScreenService) { }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.IsInitialized = true;\r\n }, 200);\r\n this.accordion && this.accordion.instance.updateDimensions();\r\n this.SetVisibility();\r\n this.Instance && this.Instance.repaint();\r\n this._currentItemIndex = this.SelectedIndex;\r\n }\r\n\r\n onItemClick(event) {\r\n this.OnItemClick.emit(event);\r\n this.SelectedIndexChange.emit(event.itemIndex);\r\n if (event.itemIndex != this._currentItemIndex) {\r\n this.accordion && this.accordion.instance.repaint();\r\n this._currentItemIndex = event.itemIndex;\r\n }\r\n }\r\n\r\n OnCustomButtonClick(event, index) {\r\n if (event) event.stopPropagation();\r\n this.OnCustomButtonClicked.emit(index);\r\n }\r\n\r\n SetVisibility() {\r\n if (this.tabs) this.tabs.visible = this._visible;\r\n else if (this.accordion) this.accordion.visible = this._visible;\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{ index + 1 }}
\\r\\n
{{tab.text}}
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { ResourcesService } from '../../../../core/framework/resources.service';\r\nimport { AppConfigService, VersionDescriptor } from '../../../../configuration/app.config.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { LanguageService } from '@m4u-angular/core/framework/language.service';\r\nimport { Orientation, ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\n@Component({\r\n selector: 'm4u-login-page',\r\n templateUrl: './login-base.component.html',\r\n styleUrls: ['./login-base.component.scss']\r\n})\r\nexport class LoginBaseComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() MainTitle: string;\r\n @Input() AdditionalTitle: string;\r\n\r\n IsMultiLanguage: boolean;\r\n Language: string;\r\n ModulesVersion: VersionDescriptor[] = [];\r\n ScreenMode: string;\r\n IsScreenModeVisible = false;\r\n Orientation: Orientation;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(public resourcesService: ResourcesService,\r\n private appConfigService: AppConfigService,\r\n private languageService: LanguageService,\r\n public screen: ScreenService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.IsMultiLanguage = this.appConfigService.M4UConfig.isMultiLanguage;\r\n this._subscriptions.push(this.languageService.Language$.subscribe(language => !this.Language && (this.Language = language)));\r\n this.ModulesVersion = this.appConfigService.getModulesVersion();\r\n\r\n //\r\n if (this.screen.IsDesktop()) {\r\n this.ScreenMode = 'Desktop';\r\n } else if (this.screen.IsTablet()) {\r\n this.ScreenMode = 'Tablet';\r\n } else if (this.screen.IsMobile()) {\r\n this.ScreenMode = 'Mobile';\r\n }\r\n\r\n this.Orientation = this.screen.Orientation();\r\n this.screen.LogDeviceInfo(); \r\n }\r\n\r\n OnToggleScreenMode(e) {\r\n if (e && e.stopPropagation) e.stopPropagation();\r\n this.IsScreenModeVisible = !this.IsScreenModeVisible;\r\n }\r\n\r\n ngAfterViewInit() {\r\n // this is for correct elements direction change on language switch\r\n const rtlElements = document.querySelectorAll('.login-form-content .dx-rtl');\r\n rtlElements.forEach(x => x.classList.remove('dx-rtl'));\r\n }\r\n\r\n OnLanguageChanged(e) {\r\n this.languageService.SetLanguage(this.Language);\r\n }\r\n\r\n GetAppTitle() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.resourcesService.RC('$$AppTitles.LoginAppName', moduleName);\r\n }\r\n\r\n GetAppCompanyName() {\r\n const moduleName = this.GetFirstModuleName();\r\n return this.resourcesService.RC('$$AppTitles.LoginCompanyName', moduleName);\r\n }\r\n\r\n GetFirstModuleName() {\r\n const moduleNames = this.appConfigService.AppConfig.ModuleName.split(',');\r\n return moduleNames[0];\r\n }\r\n\r\n GetLanguageIcon() {\r\n const path = 'assets/icons/';\r\n const iconName = this.Language === EnumLanguages.English ? 'en.svg' : 'he.svg';\r\n return `${path}${iconName}`;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{MainTitle || GetAppTitle()}}
\\r\\n
{{AdditionalTitle || GetAppCompanyName()}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DxButtonComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss']\r\n})\r\nexport class ButtonComponent {\r\n @Input() Mode: 'transparent' | 'light' | 'base' | 'solid' | 'text';\r\n @Input() Type: 'success' | 'danger' | 'normal' | 'default';\r\n @Input() Size: 'default' | 'large' | 'small' = 'default';\r\n @Input() Icon: string;\r\n @Input() TabIndex: number;\r\n @Input() Text: string;\r\n @Input() Hint: string;\r\n @Input() Class: string;\r\n @Input() Visible = true;\r\n @Input() FocusStateEnabled: boolean;\r\n @Input() Disabled: boolean;\r\n @Input() IsRound: boolean;\r\n @Input() IsFullWidth: boolean;\r\n @Input() IsHideTextOnMobile: boolean;\r\n @Input() IsLoading: boolean;\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n\r\n @ViewChild('btn') btn: DxButtonComponent;\r\n\r\n private _id: string;\r\n get ID() {\r\n if (!this._id) this._id = 'btn_' + Math.random().toString(36).replace('0.', '');\r\n return this._id;\r\n }\r\n\r\n constructor(public screen: ScreenService) {\r\n }\r\n\r\n GetClass() {\r\n return `${this.Class || ''} ${this.Mode ? ('btn-' + this.Mode) : ''} ${this.IsRound ? ' btn-round' : ''} btn-size-${this.Size}`;\r\n }\r\n\r\n GetText() {\r\n return this.screen.IsMobile() && this.IsHideTextOnMobile ? '' : this.Text;\r\n }\r\n\r\n GetStylingMode() {\r\n switch (this.Mode) {\r\n case 'transparent':\r\n case 'base':\r\n return 'outlined';\r\n case 'solid':\r\n return 'contained';\r\n case 'light':\r\n case 'text':\r\n return 'text';\r\n }\r\n }\r\n\r\n Click(e) {\r\n this.OnClick.emit(e.event);\r\n }\r\n\r\n Repaint() {\r\n this.btn && this.btn.instance && this.btn.instance.repaint();\r\n }\r\n\r\n OnTooltipShowing(e) {\r\n e.component?.content()?.parentElement?.classList?.add('button-tooltip');\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n {{Hint}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CredentialType, CredentialActivityStatus } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { DateHelpers } from '@core/helpers/DateHelpers';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-credentialactivitystatus-grid',\r\n templateUrl: './credentials-activity-status-grid.component.html',\r\n styleUrls: ['./credentials-activity-status-grid.component.scss']\r\n})\r\nexport class CredentialActivityStatusGridComponent extends BaseGridComponent{\r\n @Input() CredentialsInfo: CredentialType[];\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'CredentialActivityStatusGridComponent', CredentialActivityStatus, BaseState);\r\n }\r\n\r\n OnGetLastUsedBeforeText(rowData): string {\r\n return DateHelpers.GetDateApproximate((rowData as CredentialActivityStatus).LastUseDate, false);\r\n }\r\n\r\n protected override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('btnGoToLoginHistory'),\r\n visible: true,\r\n onClick: () => this.OnGoToLoginHistory(options)\r\n }, {\r\n text: this.RC('btnGoToRequestsHistory'),\r\n visible: true,\r\n onClick: () => this.OnGoToRequestsHistory(options)\r\n }];\r\n }\r\n\r\n private OnGoToLoginHistory(options) {\r\n this.Navigate(['pages/general/credential-login-history'], { CredentialID: options.data.CredentialID });\r\n }\r\n\r\n private OnGoToRequestsHistory(options) {\r\n this.Navigate(['pages/general/requests-history'], { CredentialID: options.data.CredentialID });\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, ElementRef, EventEmitter, Input, Output, Renderer2, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DxTooltipComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'm4u-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.scss']\r\n})\r\nexport class TagComponent {\r\n @Input() Size: 'small' | 'large' = 'small';\r\n @Input() Icon: string;\r\n @Input() Text: string;\r\n @Input() Hint: string;\r\n @Input() Visible: boolean;\r\n @Input() Color: string = '#0098fa';\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n \r\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {\r\n }\r\n\r\n ngOnInit() {\r\n this.SetElementStyles();\r\n }\r\n\r\n SetElementStyles() {\r\n const largeTagHeight = '36px';\r\n const smallTagHeight = '28px';\r\n const height = this.Size === 'small' ? smallTagHeight : largeTagHeight;\r\n this.renderer.setProperty(this.elementRef.nativeElement, 'style', `--tag-color: ${this.Color}; --tag-height: ${height}`);\r\n }\r\n\r\n Click(e) {\r\n this.OnClick.emit(e.event);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n {{ Text }}\\r\\n \\r\\n \\r\\n {{ Hint }} \\r\\n \\r\\n\\r\\n\";","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { NavigatorService } from '@m4u-angular/core/framework/navigator.service';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { SessionService, SessionStates } from '@m4u-angular/core/framework/session.service';\r\nimport { EnumMessageBoxTypes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\nimport { EnumSystemOptions } from '@m4u-angular/core/framework/systemoptions.enum';\r\nimport { MessageBoxDialogComponent } from '@m4u-angular/ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\nimport { SystemEndpoint } from '@core/endpoints/system.endpoint';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\n\r\n@Component({\r\n selector: 'm4u-session-expired',\r\n templateUrl: './session-expired.component.html',\r\n styleUrls: ['./session-expired.component.scss']\r\n})\r\nexport class SessionExpiredComponent implements OnInit, OnDestroy {\r\n @ViewChild(MessageBoxDialogComponent) messageDialog: MessageBoxDialogComponent;\r\n private sessionState$Subscription: Subscription;\r\n // @ts-ignore\r\n private isMessageDialogInDOM: boolean = true;\r\n\r\n constructor(private sessionService: SessionService,\r\n private resourcesService: ResourcesService,\r\n private navigatorService: NavigatorService,\r\n private systemOptionsService: SystemOptionsService,\r\n private systemEndpoint: SystemEndpoint,\r\n private sidebarService: SidebarService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.sessionState$Subscription = this.sessionService.sessionStateChanged$\r\n .subscribe(state => {\r\n if (state === SessionStates.AlmostExpired || state === SessionStates.Expired) {\r\n this.ShowExpiredDialog(state);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.sessionState$Subscription && this.sessionState$Subscription.unsubscribe();\r\n }\r\n\r\n ShowExpiredDialog(state: SessionStates) {\r\n const showDialog = (title, prompt, onClose?: (e: any) => void) => {\r\n this.messageDialog.Type = EnumMessageBoxTypes.Custom;\r\n if (state === SessionStates.AlmostExpired) {\r\n this.messageDialog.Buttons = [\r\n { Text: this.resourcesService.RC('btnLogOff'), ButtonID: 0 },\r\n { Text: this.resourcesService.RC('btnStayConnected'), ButtonID: 1 }\r\n ];\r\n }\r\n else if (state === SessionStates.Expired) {\r\n this.messageDialog.Buttons = [\r\n { Text: this.resourcesService.RC('btnGoToHomePage'), ButtonID: 0 },\r\n ];\r\n }\r\n this.messageDialog.Title = title;\r\n this.messageDialog.Prompt = prompt;\r\n this.messageDialog.ShowDialogShort(onClose);\r\n };\r\n\r\n if (state === SessionStates.AlmostExpired &&\r\n this.systemOptionsService.getSystemOptionAsBoolean(EnumSystemOptions.ShowAlmostExpiredTimeoutAlert)) {\r\n showDialog(\r\n this.resourcesService.RC('lblSessionAlmostExpiredTitle'),\r\n this.resourcesService.RC('lblSessionAlmostExpiredPrompt'), e => {\r\n if (e === 0) {\r\n this.sidebarService.ClearSidebars();\r\n this.navigatorService.Navigate(['/system/logout']);\r\n } else if (e === 1) {\r\n this.systemEndpoint.KeepAlive().subscribe(_ => { });\r\n }\r\n });\r\n }\r\n\r\n if (state === SessionStates.Expired &&\r\n this.systemOptionsService.getSystemOptionAsBoolean(EnumSystemOptions.ShowExpiredTimeoutAlert)) {\r\n showDialog(this.resourcesService.RC('lblSessionExpiredTitle'), this.resourcesService.RC('lblSessionExpiredPrompt'), () => {\r\n // Switch off/on a message-dialog to restart the native angular lifecycle. \r\n // Hack! Related to an issue when the message-box doesn't appear after the first showing.\r\n // Remove after an issue will be fixed.\r\n this.isMessageDialogInDOM = false;\r\n\r\n setTimeout(() => {\r\n this.sidebarService.ClearSidebars();\r\n this.navigatorService.Navigate(['/system/logout']);\r\n this.isMessageDialogInDOM = true;\r\n }, 200);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","export default \"\";","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-gridbottomcontainer',\r\n templateUrl: './grid-bottom-container.component.html',\r\n styleUrls: ['./grid-bottom-container.component.scss']\r\n})\r\nexport class GridBottomContainerComponent { } //TODO: delete\r\n","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","import {AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-tooltip',\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.scss']\r\n})\r\nexport class TooltipComponent implements AfterViewInit {\r\n // @ts-ignore\r\n private LabelLines: string[] = [];\r\n\r\n @Input() IconClass: string;\r\n @Input() IconColor: string;\r\n @Input() set Label(value: string) {\r\n this.LabelLines = value ? value.split('\\n') : [];\r\n }\r\n\r\n @ViewChild('tooltipIcon') tooltipEl: ElementRef;\r\n\r\n constructor(private renderer: Renderer2) {\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.InitTooltipContainer();\r\n }\r\n\r\n public InitTooltipContainer(): string {\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'dx-icon');\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'tooltip-icon-fonst-size');\r\n\r\n if (this.IconClass) {\r\n if (this.IconClass.includes('mdi')) {\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'mdi');\r\n }\r\n\r\n this.renderer.addClass(this.tooltipEl.nativeElement, this.IconClass);\r\n } else {\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'mdi');\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'mdi-information');\r\n }\r\n\r\n if (this.IconColor) {\r\n this.renderer.setStyle(this.tooltipEl.nativeElement, 'color', this.IconColor);\r\n return;\r\n }\r\n\r\n this.renderer.addClass(this.tooltipEl.nativeElement, 'tooltip-icon-color');\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n
\\r\\n
{{labelLine}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import {ComponentFactoryResolver, ComponentRef, Directive, Input, OnChanges, OnInit, SimpleChanges, ViewContainerRef} from '@angular/core';\r\nimport {TooltipComponent} from '@ui/components/tooltip/tooltip.component';\r\nimport {DxTextBoxComponent} from 'devextreme-angular';\r\n\r\nexport class M4UConfigTooltipDirectiveBase implements OnInit, OnChanges {\r\n\r\n @Input() Label: string;\r\n @Input() Visible = true;\r\n private _viewContainerRef: ViewContainerRef;\r\n private _componentFactoryResolver: ComponentFactoryResolver\r\n private _tooltipComponent: ComponentRef;\r\n\r\n constructor(viewContainerRef: ViewContainerRef, componentFactoryResolver: ComponentFactoryResolver) {\r\n this._viewContainerRef = viewContainerRef;\r\n this._componentFactoryResolver = componentFactoryResolver;\r\n }\r\n\r\n ngOnInit() {\r\n this.SetVisible();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.Visible && changes.Visible.currentValue !== changes.Visible.previousValue) {\r\n this.SetVisible();\r\n }\r\n if (changes.Label && changes.Label.currentValue !== changes.Label.previousValue) {\r\n if (this._tooltipComponent) {this._tooltipComponent.instance.Label = this.Label; }\r\n }\r\n }\r\n\r\n SetVisible() {\r\n if (this.Visible) {\r\n if (!this._viewContainerRef.element.nativeElement.classList.contains('with-tooltip')) {\r\n this._viewContainerRef.element.nativeElement.classList.add('with-tooltip');\r\n }\r\n if (!this._tooltipComponent) {\r\n const componentFactory = this._componentFactoryResolver.resolveComponentFactory(TooltipComponent);\r\n this._tooltipComponent = this._viewContainerRef.createComponent(componentFactory);\r\n }\r\n else {\r\n this._viewContainerRef.insert(this._tooltipComponent.hostView);\r\n }\r\n this._tooltipComponent.instance.Label = this.Label;\r\n }\r\n else {\r\n if (this._viewContainerRef.element.nativeElement.classList.contains('with-tooltip')) {\r\n this._viewContainerRef.element.nativeElement.classList.remove('with-tooltip');\r\n }\r\n if (this._tooltipComponent) {\r\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._tooltipComponent.hostView));\r\n }\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: ':not(dx-text-box)[configTooltip]',\r\n})\r\nexport class M4UConfigTooltipDirective extends M4UConfigTooltipDirectiveBase {\r\n constructor(private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(viewContainerRef, componentFactoryResolver);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: 'dx-text-box[configTooltip]',\r\n})\r\nexport class M4UConfigTextBoxTooltipDirective extends M4UConfigTooltipDirectiveBase {\r\n\r\n constructor(private textBox: DxTextBoxComponent, private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {\r\n super(viewContainerRef, componentFactoryResolver);\r\n }\r\n\r\n override SetVisible() {\r\n super.SetVisible();\r\n if (this.Visible) {\r\n if (!this.textBox.buttons) {\r\n this.textBox.buttons = [];\r\n }\r\n\r\n if (this.textBox.buttons.find((b: any) => b.name === 'tooltip') === undefined) {\r\n this.textBox.buttons.push({\r\n name: 'tooltip',\r\n location: 'after',\r\n options: {\r\n hoverStateEnabled: false,\r\n elementAttr: {class: 'tooltip-placeholder-button'}\r\n }\r\n });\r\n setTimeout(() => this.textBox.instance.repaint());\r\n }\r\n }\r\n else {\r\n if (this.textBox.buttons) {\r\n this.textBox.buttons = this.textBox.buttons.filter((b: any) => b.name !== 'tooltip');\r\n setTimeout(() => this.textBox.instance.repaint());\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive, OnInit } from '@angular/core';\r\nimport { DxTextBoxComponent } from 'devextreme-angular';\r\n\r\n@Directive({\r\n selector: '[configViewPasswordButton]',\r\n})\r\nexport class M4UConfigViewPasswordDirective implements OnInit {\r\n\r\n constructor(private textBox: DxTextBoxComponent) {\r\n }\r\n\r\n ngOnInit() {\r\n const button = {\r\n name: 'viewPassword',\r\n location: 'after',\r\n options: {\r\n icon: 'assets/eye-open.svg',\r\n elementAttr: { class: 'btn-size-small password-view-btn', style: 'margin:0;' },\r\n type: 'normal',\r\n onClick: (e) => {\r\n this.textBox.mode = this.textBox.mode === 'text' ? 'password' : 'text';\r\n const icon = this.textBox.mode === 'text' ? 'assets/eye-closed.svg' : 'assets/eye-open.svg';\r\n e.component.option('icon', icon);\r\n }\r\n }\r\n };\r\n if (!this.textBox.buttons) {\r\n this.textBox.buttons = [];\r\n }\r\n this.textBox.buttons.unshift(button as any);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationService } from '@m4u-angular/core/framework/notification.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n UnreadCount: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-badge',\r\n templateUrl: './push-message-badge.component.html',\r\n styleUrls: ['./push-message-badge.component.scss']\r\n})\r\nexport class PushMessageBadgeComponent extends BaseComponent {\r\n\r\n private _subscription: Subscription;\r\n\r\n constructor(A: ServiceBagService,\r\n private notificationService: NotificationService) {\r\n super(A, 'PushMessageBadgeComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscription = this.notificationService.NotificationUnread$\r\n .subscribe((unreadCount) => this.State.UnreadCount = unreadCount);\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscription && this._subscription.unsubscribe();\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n {{ State.UnreadCount }}\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, NotificationServer } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-server-grid',\r\n templateUrl: './notification-server-grid.component.html',\r\n styleUrls: ['./notification-server-grid.component.scss']\r\n})\r\nexport class NotificationServerGridComponent extends BaseGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationServerGridComponent', NotificationServer, BaseState);\r\n }\r\n\r\n OnNavigate(e: any) {\r\n this.Navigate(['/pages/general/notification-server', e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, NotificationTemplate } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-template-grid',\r\n templateUrl: './notification-template-grid.component.html',\r\n styleUrls: ['./notification-template-grid.component.scss']\r\n})\r\nexport class NotificationTemplateGridComponent extends BaseGridComponent {\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationTemplateGridComponent', NotificationTemplate, BaseState);\r\n }\r\n\r\n OnNavigate(e) {\r\n this.Navigate(['/pages/general/notification-template', e.data.EntryID]);\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { IBaseModuleComponent } from '../component/IBaseComponent';\r\nimport { AppInjector } from \"@core/injector/injector.module\";\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { ServiceBagService } from '../component/ServiceBag';\r\nimport { Observable, observable, pipe, tap } from 'rxjs';\r\nimport { BaseResponse } from '../entities/BaseEntities';\r\n\r\nexport class BaseService implements IBaseModuleComponent {\r\n ModuleName: string = AppInjector.get(AppConfigService).getModuleNameByInstance(this);\r\n\r\n get UserInfo(): any {\r\n const session = AppInjector.get(SessionService);\r\n return this.ModuleName ? session.UserInfoDict[this.ModuleName] : session.UserInfos[0];\r\n }\r\n\r\n public get UI(): UiService {\r\n const serviceBagService = AppInjector.get(ServiceBagService);\r\n return serviceBagService.UI;\r\n }\r\n\r\n public RC(value, ...args: string[] | number[]): string {\r\n const serviceBagService = AppInjector.get(ServiceBagService);\r\n return serviceBagService.ResourcesService.RC(value, this.ModuleName, ...args);\r\n }\r\n\r\n protected handleResponse() {\r\n return (observable: Observable) => {\r\n return observable.pipe(tap((response) => {\r\n if (!response.IsSuccess) {\r\n this.UI.StopMessage(response.ResponseMessage);\r\n }\r\n }));\r\n };\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BaseService } from '@m4u-angular/base/service/BaseService';\r\n\r\n@Injectable()\r\nexport class NotificationConfigurationBaseService extends BaseService {\r\n\r\n GetButtons(notification: Notification): any[] {\r\n return [];\r\n }\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseResponse, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationEndpoint } from '@m4u-angular/core/endpoints/notification.endpoint';\r\nimport { PushMessageEndpoint } from '@m4u-angular/core/endpoints/push-message.endpoint';\r\nimport { NotificationConfigurationBaseService } from '@m4u-angular/core/framework/notification-configuration-base.service';\r\nimport { DateHelpers } from '@m4u-angular/core/helpers/DateHelpers';\r\nimport { AppInjector } from '@m4u-angular/core/injector/injector.module';\r\nimport { BottomSheetContext } from 'swipe-bottom-sheet/angular';\r\nimport { Notification } from '../../../base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message',\r\n templateUrl: './push-message.component.html',\r\n styleUrls: ['./push-message.component.scss']\r\n})\r\nexport class PushMessageComponent extends BaseComponent {\r\n\r\n private _notification: Notification;\r\n @Input() set Notification(value: Notification) {\r\n if (!value) return;\r\n this._notification = value;\r\n this.NotificationButtons = this.notificationConfigurationService.GetButtons(value);\r\n }\r\n get Notification() { return this._notification; }\r\n\r\n @Input() BottomSheetContext: BottomSheetContext;\r\n @Output() OnNotificationRead = new EventEmitter();\r\n\r\n NotificationButtons: any[];\r\n\r\n constructor(A: ServiceBagService,\r\n private pushMessageEndpoint: PushMessageEndpoint,\r\n private notificationConfigurationService: NotificationConfigurationBaseService) {\r\n super(A, 'PushMessageComponent', BaseState);\r\n }\r\n\r\n OnItemClick() {\r\n if (!this.Notification || this.Notification.IsRead) return;\r\n\r\n this.Notification.IsRead = true;\r\n setTimeout(() => this.Do(this.pushMessageEndpoint.ReadPushNotification(this.Notification.EntryID), false,\r\n (response: BaseResponse) => response.IsSuccess && this.OnNotificationRead.emit()), 500);\r\n }\r\n\r\n IsNotificationButtonsExists() {\r\n return this.NotificationButtons && this.NotificationButtons.length && this.NotificationButtons.some(x => x.Visible);\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n
{{ Notification.CreatedDate | formatDateApproximate }}
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { NotificationService } from '@m4u-angular/core/framework/notification.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { Notification } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Message, MessageService } from 'primeng/api';\r\nimport { Toast } from 'primeng/toast';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-toasts',\r\n templateUrl: './push-message-toasts.component.html',\r\n styleUrls: ['./push-message-toasts.component.scss']\r\n})\r\nexport class PushMessageToastsComponent extends BaseComponent {\r\n\r\n private notificationsSubscription: Subscription;\r\n Notifications: Notification[] = [];\r\n\r\n @ViewChild('toast') toast: Toast;\r\n \r\n constructor(A: ServiceBagService,\r\n private notificationService: NotificationService,\r\n private messageService: MessageService) {\r\n super(A, 'PushMessageToastsComponent', BaseState);\r\n }\r\n\r\n protected override OnInitComponent() {\r\n this.notificationsSubscription = this.notificationService.Notifications$\r\n .subscribe((notifications: Notification[]) => {\r\n this.Notifications = notifications;\r\n \r\n const messages = this.Notifications.map(x => this.ConvertToMessage(x));\r\n this.ShowToasts(messages);\r\n });\r\n }\r\n\r\n private ConvertToMessage(notitification: Notification): Message {\r\n return { \r\n id: notitification.EntryID, \r\n key: 'pm', \r\n life: 15000, \r\n closable: false, \r\n styleClass: 'push-message-toast', \r\n data: notitification \r\n } as Message;\r\n }\r\n\r\n private ShowToasts(messages: Message[]) {\r\n setTimeout(() => this.messageService.addAll(messages), 1000);\r\n }\r\n\r\n OnNotificationRead(notitication: Notification) {\r\n const messageToDeleteIndex = this.toast.messages.findIndex(x => x.id === notitication.EntryID);\r\n const messageToDelete = this.toast.messages.find(x => x.id === notitication.EntryID);\r\n this.toast.onMessageClose({ index: messageToDeleteIndex, message: messageToDelete });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this.notificationsSubscription && this.notificationsSubscription.unsubscribe();\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Notification } from '@base/entities/BaseEntities';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-email-history-item',\r\n templateUrl: './email-history-item.component.html',\r\n styleUrls: ['./email-history-item.component.scss']\r\n})\r\nexport class EmailHistoryItemComponent extends BaseComponent {\r\n\r\n @Input() Entity: Notification;\r\n\r\n constructor(A: ServiceBagService,\r\n public sanitizer: DomSanitizer) {\r\n super(A, 'EmailHistoryItemComponent', BaseState);\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Notification } from '@base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-history-item',\r\n templateUrl: './push-message-history-item.component.html',\r\n styleUrls: ['./push-message-history-item.component.scss']\r\n})\r\nexport class PushMessageHistoryItemComponent extends BaseComponent {\r\n @Input() Entity: Notification;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PushMessageHistoryItemComponent', BaseState);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{ Entity.Body }}\\r\\n
\\r\\n
\\r\\n\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { Notification } from '@base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sms-history-item',\r\n templateUrl: './sms-history-item.component.html',\r\n styleUrls: ['./sms-history-item.component.scss']\r\n})\r\nexport class SmsHistoryItemComponent extends BaseComponent {\r\n @Input() Entity: Notification;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SmsHistoryItemComponent', BaseState);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n {{ Entity.Body }}\\r\\n
\\r\\n
\\r\\n\";","import { Component } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-email-history-grid',\r\n templateUrl: './email-history-grid.component.html',\r\n styleUrls: ['./email-history-grid.component.scss']\r\n})\r\nexport class EmailHistoryGridComponent extends NotificationGridComponent {\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'EmailHistoryGridComponent');\r\n }\r\n}","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, OnInit } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-sms-history-grid',\r\n templateUrl: './sms-history-grid.component.html',\r\n styleUrls: ['./sms-history-grid.component.scss']\r\n})\r\nexport class SmsHistoryGridComponent extends NotificationGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'SmsHistoryGridComponent');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { NotificationGridComponent } from '../notificationgrid.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-history-grid',\r\n templateUrl: './push-message-history-grid.component.html',\r\n styleUrls: ['./push-message-history-grid.component.scss']\r\n})\r\nexport class PushMessageHistoryGridComponent extends NotificationGridComponent {\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PushMessageHistoryGridComponent');\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import {Component, Input} from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport {\r\n EnumInfoUTypes,\r\n EnumNotificationDeliveryOptions,\r\n EnumPageDisplayModes,\r\n EnumPageEntitySources\r\n} from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nexport class State extends BaseState {\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n FromAddress: string;\r\n Address: string;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-test-dialog',\r\n templateUrl: './notification-test-dialog.component.html',\r\n styleUrls: ['./notification-test-dialog.component.scss']\r\n})\r\nexport class NotificationTestDialogComponent extends BasePageComponent {\r\n\r\n @Input() SMSEndPointIsInforU: EnumInfoUTypes;\r\n\r\n infoUPhonePattern: any = /^[a-zA-Z0-9\\s]*$/;\r\n\r\n NotificationTypes = this.LIST('NotificationTypes').filter(x => x.Value !== EnumNotificationDeliveryOptions.PushMessage);\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'NotificationTestDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitState(): void {\r\n this.State.DeliveryOption = EnumNotificationDeliveryOptions.Email;\r\n }\r\n\r\n OnDeliveryOptionChange() {\r\n this.State.FromAddress = undefined;\r\n if (this.State.DeliveryOption === EnumNotificationDeliveryOptions.SMS && !this.State.FromAddress) {\r\n if (this.SMSEndPointIsInforU === EnumInfoUTypes.InforU) {\r\n this.State.FromAddress = this.RC('lblDefaultFromAddressForInforU');\r\n }\r\n else if (this.SMSEndPointIsInforU === EnumInfoUTypes.Unicell) {\r\n this.State.FromAddress = this.RC('lblDefaultFromAddressForUnicel');\r\n }\r\n }\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\";","import { Component, Input, OnInit } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources } from '@m4u-angular/core/framework/sysenums.enum';\r\n\r\nclass State extends BaseState {\r\n HtmlBody: SafeHtml;\r\n}\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-notification-preview-dialog',\r\n templateUrl: './notification-preview-dialog.component.html',\r\n styleUrls: ['./notification-preview-dialog.component.scss']\r\n})\r\nexport class NotificationPreviewDialogComponent extends BasePageComponent {\r\n\r\n @Input() set HTMLBody(value: string) {\r\n if (value) { this.State.HtmlBody = this.sanitizer.bypassSecurityTrustHtml(value); }\r\n }\r\n\r\n constructor(A: ServiceBagService,\r\n private sanitizer: DomSanitizer) {\r\n super(A, 'NotificationPreviewDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","import { Component } from '@angular/core';\r\nimport { MainMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { ResourcesService } from '@m4u-angular/core/framework/resources.service';\r\nimport { RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { SessionService } from '@m4u-angular/core/framework/session.service';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { combineLatest, Observable, Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n NavbarItems: MainMenuElement[] = [];\r\n SelectedIndex: number;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-nav-bar',\r\n templateUrl: './nav-bar.component.html',\r\n styleUrls: ['./nav-bar.component.scss']\r\n})\r\nexport class NavBarComponent extends BaseComponent {\r\n\r\n private _navbarItems$: Observable;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private sessionService: SessionService,\r\n private resourceService: ResourcesService,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'NavBarComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._navbarItems$ = this.A.AppConfigService.AppConfig.OnGetNavbarItems(this.sessionService.UserInfoDict);\r\n this._subscriptions.push(this._navbarItems$.subscribe(items => {\r\n items.forEach(item => this.InitializeItem(item));\r\n this.State.NavbarItems = items;\r\n }));\r\n this._subscriptions.push(\r\n combineLatest([this._navbarItems$, this.A.SysEvents.SelectedRoute]).subscribe(([navbarItems, selectedRoute]) => {\r\n this.State.SelectedIndex = selectedRoute ? navbarItems.findIndex(x => x.menu === selectedRoute) : undefined;\r\n })\r\n );\r\n }\r\n\r\n OnItemClick(idx) {\r\n if (idx == this.State.SelectedIndex) return;\r\n\r\n const menu = this.State.NavbarItems[idx];\r\n\r\n this.routeHistoryService.ClearHistory();\r\n\r\n const menuUserInfo = menu.moduleName ? this.sessionService.UserInfoDict[menu.moduleName] : this.sessionService.UserInfos[0];\r\n const navigateParams = menu.pathParams && menu.pathParams(menuUserInfo) || [];\r\n navigateParams.unshift(menu.path);\r\n \r\n this.A.Navigator.Navigate(navigateParams, menu.queryParams || null);\r\n }\r\n\r\n private InitializeItem(menu: MainMenuElement): void {\r\n menu.text = this.GetItemTranslation(menu);\r\n menu.visible = this.GetItemVisible(menu);\r\n }\r\n\r\n private GetItemTranslation(menu: MainMenuElement): string {\r\n const menuWithoutModule = menu.menu.substring(menu.menu.indexOf(\".\") + 1, menu.menu.length);\r\n return menu.text || this.resourceService.RC(`$$Pages.${menuWithoutModule}`, menu.moduleName);\r\n }\r\n\r\n private GetItemVisible(menu: MainMenuElement) {\r\n const menuUserInfo = menu.moduleName && this.sessionService.UserInfoDict[menu.moduleName];\r\n const permissionResult = Utils.IsEmpty(menu.permission) \r\n ? true \r\n : menuUserInfo && menuUserInfo.hasOwnProperty(menu.permission) && menuUserInfo[menu.permission];\r\n const permissionFunctionResult = Utils.IsEmpty(menu.permissionFunction) \r\n ? true \r\n : menu.permissionFunction(menuUserInfo);\r\n\r\n return !!permissionResult && permissionFunctionResult;\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n {{item.text}}\\r\\n
\\r\\n
\\r\\n
\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { PushMessageEndpoint } from '@m4u-angular/core/endpoints/push-message.endpoint';\r\nimport { BaseComponent } from '../../../base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '../../../base/component/ServiceBag';\r\nimport { BaseState } from '../../../base/entities/BaseEntities';\r\n\r\nclass State extends BaseState {\r\n IsLoadAllNotifications: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-push-message-list-popup',\r\n templateUrl: './push-message-list-popup.component.html',\r\n styleUrls: ['./push-message-list-popup.component.scss']\r\n})\r\nexport class PushMessageListPopupComponent extends BaseComponent {\r\n\r\n @Input() Visible: boolean;\r\n @Output() VisibleChange = new EventEmitter();\r\n\r\n @Input() PositionTarget: string;\r\n\r\n constructor(A: ServiceBagService,\r\n private pushMessageEndpoint: PushMessageEndpoint) {\r\n super(A, 'PushMessageListPopupComponent', State);\r\n }\r\n\r\n OnOptionChanged(e) {\r\n if (e.name === 'visible') this.VisibleChange.emit(e.value);\r\n }\r\n\r\n OnLoadAllNotifications(value: boolean) {\r\n this.State.IsLoadAllNotifications = value;\r\n }\r\n\r\n OnHidden() {\r\n this.State.IsLoadAllNotifications = false;\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","import { Component, Input } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumFilterPanelActions } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-page-filter',\r\n templateUrl: './page-filter.component.html',\r\n styleUrls: ['./page-filter.component.scss']\r\n})\r\nexport class PageFilterComponent extends BaseComponent {\r\n\r\n @Input() Context: BottomSheetDialogComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private sidebarService: SidebarService) {\r\n super(A, 'PageFilterComponent', BaseState);\r\n }\r\n\r\n ApplyFilter() {\r\n this.A.SysEvents.FilterPanelAction(EnumFilterPanelActions.Apply);\r\n this.sidebarService.Hide('Filters');\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n }\r\n\r\n ClearFilter() {\r\n this.A.SysEvents.FilterPanelAction(EnumFilterPanelActions.Clear);\r\n this.sidebarService.Hide('Filters');\r\n this.Context && this.Context.CloseDialogWithSuccess();\r\n }\r\n\r\n HasContent(content: any) {\r\n return content && content.childElementCount > 0;\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component, ElementRef, Input, OnInit, Renderer2, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { BottomSheetContentParams, BottomSheetContextMenuParams, BottomSheetService } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { SidebarService } from '@m4u-angular/core/framework/sidebar.service';\r\nimport { EnumApplicationMode } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { HistoryViewComponent } from '@m4u-angular/ui/components/general/history-view/historyview.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n ToolbarSettings: ToolbarSettings;\r\n ContextMenuItems: any[] = [];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-page-toolbar-buttons',\r\n templateUrl: './page-toolbar-buttons.component.html',\r\n styleUrls: ['./page-toolbar-buttons.component.scss']\r\n})\r\nexport class PageToolbarButtonsComponent extends BaseComponent {\r\n @Input() PageComponentName: string;\r\n @Input() FilterTemplateRef: TemplateRef;\r\n\r\n @ViewChild('historyView') protected historyViewDialog: HistoryViewComponent;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n public element: ElementRef,\r\n private renderer: Renderer2,\r\n private sidebarService: SidebarService,\r\n private bottomSheetService: BottomSheetService) {\r\n super(A, 'PageToolbarButtonsComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscriptions.push(this.A.SysEvents.Toolbar.subscribe((toolbarSettings: ToolbarSettings) => {\r\n if (!toolbarSettings) return;\r\n if (this.PageComponentName === toolbarSettings.PageComponentName) {\r\n this.State.ToolbarSettings = toolbarSettings;\r\n this.InitContextMenuItems();\r\n }\r\n }));\r\n }\r\n\r\n InitContextMenuItems() {\r\n const contextMenuItems = this.State.ToolbarSettings.OnGetContextMenuItems();\r\n this.State.ContextMenuItems = contextMenuItems.map(x => {\r\n return {\r\n label: x.text,\r\n icon: x.icon,\r\n visible: x.visible,\r\n command: x.onClick,\r\n separator: (x as any).separator\r\n };\r\n });\r\n }\r\n\r\n IsShowContextMenuButton() {\r\n return this.A.AppConfigService.AppConfig.Mode === EnumApplicationMode.Standard\r\n && this.State.ContextMenuItems && this.State.ContextMenuItems.length;\r\n }\r\n\r\n OpenFilter() {\r\n if (this.A.Screen.IsMobile()) {\r\n const contentParams = new BottomSheetContentParams();\r\n contentParams.Name = 'Filters';\r\n contentParams.Title = this.RC('lblFilters');\r\n contentParams.Class = 'no-page-scroll';\r\n contentParams.Content = this.FilterTemplateRef;\r\n this.bottomSheetService.Show(contentParams, true);\r\n } else {\r\n this.sidebarService.Show('Filters', this.RC('lblFilters'), this.FilterTemplateRef,\r\n this.State.ToolbarSettings.FilterPanelWidth, null, null, 'filters-sidebar');\r\n }\r\n }\r\n\r\n ExcelExport() {\r\n const gridExtender = this.GetGridExternder();\r\n gridExtender && gridExtender.ExportExcel();\r\n }\r\n\r\n Print(e) {\r\n if (this.State.ToolbarSettings?.OnPrintButtonClick) {\r\n this.State.ToolbarSettings.OnPrintButtonClick(e);\r\n } else {\r\n const gridExtender = this.GetGridExternder();\r\n gridExtender ? gridExtender.Print() : window.print();\r\n }\r\n }\r\n\r\n private GetGridExternder() {\r\n return typeof this.State.ToolbarSettings?.GridExtender === 'function' ? this.State.ToolbarSettings?.GridExtender() : this.State.ToolbarSettings?.GridExtender;\r\n }\r\n\r\n OnShowContextMenu(event, cm) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.A.Screen.IsMobile() && !this.State.ToolbarSettings?.ShowContextMenuAsUsualOnMobile) {\r\n const title = this.State.ToolbarSettings?.ContextMenuTitle || this.RC('titleChooseOption');\r\n const menuParams = new BottomSheetContextMenuParams();\r\n menuParams.Title = title;\r\n menuParams.Items = this.State.ContextMenuItems;\r\n this.bottomSheetService.ShowContextMenu(menuParams);\r\n return;\r\n }\r\n\r\n cm.show(event);\r\n return false;\r\n }\r\n\r\n OnContextMenuShow() {\r\n this.InitContextMenuItems();\r\n\r\n const contextMenuTitle = this.State.ToolbarSettings && this.State.ToolbarSettings.ContextMenuTitle;\r\n if (!contextMenuTitle) return;\r\n\r\n const pageContextMenuHeaderId = 'page-context-menu-header';\r\n const pageContextMenuHeader = document.getElementById(pageContextMenuHeaderId);\r\n if (!pageContextMenuHeader) {\r\n const contextMenuHeaderContainer = this.renderer.createElement('div');\r\n this.renderer.setProperty(contextMenuHeaderContainer, 'id', pageContextMenuHeaderId);\r\n this.renderer.setProperty(contextMenuHeaderContainer, 'innerHTML', contextMenuTitle);\r\n this.renderer.insertBefore(document.querySelector('.page-context-menu'), contextMenuHeaderContainer, document.querySelector('.page-context-menu p-contextmenusub'));\r\n }\r\n }\r\n\r\n ShowHistory(e, hs) {\r\n this.State.ToolbarSettings.Page.GetHistory().subscribe(history => {\r\n if (!history || history.length == 0) {\r\n this.UI.StopMessage(this.RC('lblHistoryNotFound'));\r\n return;\r\n }\r\n this.historyViewDialog.Entities = history;\r\n this.historyViewDialog.ShowDialogShort(undefined);\r\n });\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-spin-loader',\r\n templateUrl: './spin-loader.component.html',\r\n styleUrls: ['./spin-loader.component.scss']\r\n})\r\nexport class SpinLoaderComponent {\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport {BaseComponent} from \"@base/component/BaseComponent\";\r\nimport {BaseState} from \"@base/entities/BaseEntities\";\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {DemoPage} from \"@ui/demo/models/demo-page\";\r\n\r\nclass State extends BaseState {\r\n Pages: DemoPage[] = [];\r\n}\r\n\r\n@Component({\r\n selector: 'm4u-demo-navbar',\r\n templateUrl: './demo-navbar.component.html',\r\n styleUrls: ['./demo-navbar.component.scss']\r\n})\r\nexport class DemoNavbarComponent extends BaseComponent {\r\n\r\n constructor(A: ServiceBagService, public screen: ScreenService) {\r\n super(A, 'DemoNavbarComponent', State);\r\n }\r\n\r\n override OnInitComponent() {\r\n this.State.Pages = this.GetPages();\r\n }\r\n \r\n public onPageSelected(url: string) {\r\n this.Navigate([url]);\r\n }\r\n \r\n private GetPages(): DemoPage[] {\r\n return [\r\n { Text: \"Buttons\", Url: \"/demo/buttons\" },\r\n { Text: \"Editors\", Url: \"/demo/editors\" },\r\n { Text: \"Layouts\", Url: \"/demo/layouts\" },\r\n { Text: \"Components\", Url: \"/demo/components\" }, // Add upload component and spinner-loader \r\n { Text: \"Sections\", Url: \"/demo/sections\" },\r\n { Text: \"Cards\", Url: \"/demo/cards\" },\r\n { Text: \"Tabs\", Url: \"/demo/tabs\" },\r\n { Text: \"Grids\", Url: \"/demo/grids\" },\r\n { Text: \"Pages\", Url: \"/demo/page-examples\" },\r\n { Text: \"Sidebars\", Url: \"/demo/sidebars\" },\r\n { Text: \"Bottom Sheets\", Url: \"/demo/bottom-sheets\" },\r\n { Text: \"Dialogs\", Url: \"/demo/dialogs\" },\r\n { Text: \"Pipes\", Url: \"/demo/pipes\" }\r\n ]\r\n }\r\n}","export default \"
\\r\\n

Demo

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\";","import {Component, Input} from '@angular/core';\r\nimport {ServiceBagService} from \"@base/component/ServiceBag\";\r\nimport {ScreenService} from \"@core/framework/screen.service\";\r\nimport {BaseEntity, BaseState} from \"@base/entities/BaseEntities\";\r\nimport {BaseGridComponent} from \"../../../../../base/component/BaseGridComponent\";\r\nimport {DemoMobilePhoneBrand, DemoMobilePhoneModel} from \"@ui/demo/models/demo-mobile-phone\";\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\n\r\n@Component({\r\n selector: 'app-demo-grid',\r\n templateUrl: './demo-grid.component.html'\r\n})\r\nexport class DemoGridComponent extends BaseGridComponent {\r\n\r\n @Input() Brands: DemoMobilePhoneBrand[] = [];\r\n @Input() Models: DemoMobilePhoneModel[] = [];\r\n @Input() Colors: any[] = [];\r\n \r\n constructor(A: ServiceBagService) {\r\n super(A, 'DemoGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n override GetGridRowContextMenu(options?: any): ContextMenuElement[] {\r\n return [{\r\n text: this.RC('someContextMenuTitle'),\r\n onClick: () => console.log(options)\r\n }]\r\n }\r\n\r\n OnColumnClick(e) {\r\n console.log(e);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\";","import { Component } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HistoryItem, RouteHistoryService } from '@m4u-angular/core/framework/route-history.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\nclass State extends BaseState {\r\n History: HistoryItem[];\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss']\r\n})\r\nexport class BreadcrumbComponent extends BaseComponent {\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(A: ServiceBagService,\r\n private routeHistoryService: RouteHistoryService) {\r\n super(A, 'BreadcrumbComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._subscriptions.push(this.routeHistoryService.HistoryItems$.subscribe(history => {\r\n this.State.History = [ ...history];\r\n }));\r\n this.A.SysEvents.SetBreadCrumbVisible(true);\r\n }\r\n\r\n OnItemClick(item: HistoryItem) {\r\n this.routeHistoryService.NavigateHistoryItem(item);\r\n }\r\n\r\n OnBack() {\r\n this.routeHistoryService.GoBack();\r\n }\r\n\r\n protected override OnDestroyComponent(): void {\r\n this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{ item.Title }}
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumLanguages } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\nimport { PdfJsViewerComponent } from 'ng2-pdfjs-viewer';\r\n\r\nclass State extends BaseState {\r\n PDFData: Blob;\r\n ShowLoadPanel: boolean;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-pdf-viewer',\r\n templateUrl: './pdf-viewer.component.html',\r\n styleUrls: ['./pdf-viewer.component.scss']\r\n})\r\nexport class PdfViewerComponent extends BaseComponent {\r\n\r\n @Input() FileName: string;\r\n @Input() set PDFData(value: string | Blob) { \r\n if(typeof value === 'string') value = Utils.ConvertToBlob(value, 'application/pdf'); \r\n this.State.PDFData = value;\r\n if (this.State.PDFData) {\r\n this.State.ShowLoadPanel = false;\r\n this.SetStyles();\r\n }\r\n }\r\n @Output() OnDocumentLoaded = new EventEmitter();\r\n\r\n @ViewChild(PdfJsViewerComponent) instance: PdfJsViewerComponent;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'PdfViewerComponent', State);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n setTimeout(() => !this.State.PDFData && (this.State.ShowLoadPanel = false), 3000);\r\n }\r\n\r\n protected OnInitComponentFinished(): void {\r\n this.SetStyles();\r\n }\r\n\r\n protected override OnInitState() {\r\n this.State.ShowLoadPanel = !this.State.PDFData;\r\n }\r\n\r\n GetLocale(): string {\r\n return SysGlobals.Language == EnumLanguages.Hebrew ? \"he\" : \"en-US\";\r\n }\r\n\r\n DocumentLoaded(event: any) {\r\n this.OnDocumentLoaded.emit(event);\r\n }\r\n\r\n private SetStyles() {\r\n setTimeout(() => {\r\n if (!this.instance || !this.instance.iframe) return;\r\n\r\n const iframeDocument = this.instance.iframe.nativeElement.contentDocument;\r\n const style = iframeDocument.createElement('style');\r\n\r\n const toolbarStyles = `\r\n #toolbarContainer {\r\n background: #294D92;\r\n }\r\n `;\r\n const backgroundStyles = `\r\n #viewerContainer {\r\n background-color: white;\r\n }\r\n `;\r\n\r\n style.appendChild(iframeDocument.createTextNode(toolbarStyles));\r\n if (this.A.Screen.IsMobile()) style.appendChild(iframeDocument.createTextNode(backgroundStyles));\r\n\r\n iframeDocument.head && iframeDocument.head.appendChild(style);\r\n }, 500);\r\n }\r\n}\r\n","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{ 'msgLoadingPDF' | RC }}
\\r\\n
\\r\\n
\";","import { Component, Input } from '@angular/core';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, BaseEntity, CredentialExternalInfo } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { LoginEndpoint } from '@m4u-angular/core/endpoints/login.endpoint';\r\nimport { EnumLanguages, EnumNotificationDeliveryOptions, EnumPageDisplayModes, EnumPageEntitySources, EnumSystemOptions }\r\n from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { SysGlobals } from '@m4u-angular/core/framework/sysglobals';\r\nimport { Utils } from '@m4u-angular/core/helpers/Utils';\r\n\r\nclass State extends BaseState {\r\n DeliveryOptions: any[];\r\n DeliveryOption: EnumNotificationDeliveryOptions;\r\n Language: EnumLanguages;\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-welcome-user-dialog',\r\n templateUrl: './welcome-user-dialog.component.html',\r\n styleUrls: ['./welcome-user-dialog.component.scss']\r\n})\r\nexport class WelcomeUserDialogComponent extends BasePageComponent {\r\n\r\n @Input() CredentialID: number;\r\n @Input() CredentialInfo: CredentialExternalInfo;\r\n\r\n constructor(A: ServiceBagService,\r\n private loginEndpoint: LoginEndpoint) {\r\n super(A, 'WelcomeUserDialogComponent', BaseEntity, State, EnumPageDisplayModes.Dialog, EnumPageEntitySources.External);\r\n }\r\n\r\n override OnInitState() {\r\n this.State.Language = SysGlobals.Language as EnumLanguages;\r\n this.State.DeliveryOptions = this.LIST('NotificationDeliveryOptions').filter(x => {\r\n switch (x.Value) {\r\n case EnumNotificationDeliveryOptions.Email:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodEmail) && this.CredentialInfo.Email;\r\n case EnumNotificationDeliveryOptions.SMS:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodSMS) && this.CredentialInfo.Phone;\r\n case EnumNotificationDeliveryOptions.WhatsApp:\r\n return this.SystemOptionFlag(EnumSystemOptions.IsSupportNotificationMethodWhatsApp) && this.CredentialInfo.Phone;\r\n default:\r\n break;\r\n }\r\n return false;\r\n });\r\n if (this.State.DeliveryOptions.length > 0) this.State.DeliveryOption = this.State.DeliveryOptions[0].Value;\r\n }\r\n\r\n WelcomeUser() {\r\n const address = this.State.DeliveryOption == EnumNotificationDeliveryOptions.Email ?\r\n this.CredentialInfo.Email : this.CredentialInfo.Phone;\r\n this.Do(this.loginEndpoint.WelcomeUser(+this.CredentialID, this.State.DeliveryOption, address, this.State.Language), true, () => {\r\n this.CloseDialogWithSuccess();\r\n });\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \";","import { Component } from '@angular/core';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-historyview-grid',\r\n templateUrl: './historyview-grid.component.html',\r\n styleUrls: ['./historyview-grid.component.scss']\r\n})\r\nexport class HistoryViewGridComponent extends BaseGridComponent\r\n{\r\n constructor(A: ServiceBagService) {\r\n super(A, 'HistoryViewGridComponent', BaseEntity, BaseState);\r\n }\r\n\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","\r\n/** Utility functions for interaction with html components */\r\nexport class HtmlUtils\r\n{\r\n public static HexToRgbColorString(hexColor: string) {\r\n const colorString = hexColor.substring(1);\r\n const rgbArr = colorString.match(/.{1,2}/g)\r\n .map(function(hex) { return parseInt(hex, 16) });\r\n return rgbArr.join();\r\n }\r\n\r\n public static HexToInt(hexColor: string): number {\r\n const colorString = hexColor.substring(1);\r\n return ~parseInt(colorString, 16)^0x00FFFFFF;\r\n }\r\n\r\n public static IntToHex(number: number): string {\r\n return '#' + (number & 0x00FFFFFF).toString(16).padStart(6, '0');\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { BaseComponent } from '@m4u-angular/base/component/BaseComponent';\r\nimport { ServiceBagServices, ServiceBagService } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { HtmlUtils } from '@core/helpers/HtmlUtils';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'm4u-total-balance',\r\n templateUrl: './total-balance-card.component.html',\r\n styleUrls: ['./total-balance-card.component.scss']\r\n})\r\nexport class TotalBalanceCardComponent extends BaseComponent {\r\n\r\n @Input() Currency: string;\r\n @Input() Title: string;\r\n @Input() Amount: number;\r\n @Input() Icon: string;\r\n @Input() Color: string;\r\n\r\n private _onClickObserved: boolean;\r\n @Output() OnClick: EventEmitter = new EventEmitter;\r\n\r\n constructor(A: ServiceBagService) {\r\n super(A, 'TotalBalanceComponent', BaseState);\r\n }\r\n\r\n protected override OnInitComponent(): void {\r\n this._onClickObserved = this.OnClick.observed;\r\n }\r\n\r\n HasClickEvent(event) {\r\n return this._onClickObserved;\r\n }\r\n\r\n OnCardClick(event) {\r\n this.OnClick && this.OnClick.emit(event);\r\n }\r\n\r\n GetBoxShadowStyle() {\r\n if (!this.Color) return '';\r\n \r\n const rgb = HtmlUtils.HexToRgbColorString(this.Color);\r\n if (!rgb) return '';\r\n\r\n return `0 4px 14px rgba(${rgb}, 0.4)`;\r\n }\r\n\r\n GetIconBackgroundColor() {\r\n if (!this.Color) return '';\r\n\r\n const rgb = HtmlUtils.HexToRgbColorString(this.Color);\r\n if (!rgb) return '';\r\n\r\n return `rgba(${rgb}, 0.12)`;\r\n }\r\n}\r\n","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
{{Title}}
\\r\\n
\\r\\n {{ Amount | formatPriceWithCurrency: Currency: true }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm4u-icon',\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss']\r\n})\r\nexport class IconComponent {\r\n @Input() Name: string;\r\n @Input() Size: number = 24;\r\n @Input() Tip: string;\r\n\r\n @HostBinding('style.width') get width() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.height') get height() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.line-height') get lineHeight() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.font-size') get fontSize() {\r\n return `${this.Size}px`;\r\n }\r\n @HostBinding('style.background-size') get backgroundSize() {\r\n return `${this.Size}px ${this.Size}px`;\r\n }\r\n\r\n get isLink() {\r\n return /\\//.test(this.Name);\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CreateCredentialsParams, CredentialAdditionalInfoMetadata, CredentialExternalInfo, CredentialType, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\n\r\nclass State extends BaseState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-system-credentials-creation-grid',\r\n templateUrl: './system-credentials-creation-grid.component.html',\r\n styleUrls: ['./system-credentials-creation-grid.component.scss']\r\n})\r\nexport class SystemCredentialsCreationGridComponent extends BaseGridComponent {\r\n @Input() AdditionalInfoMetadata: CredentialAdditionalInfoMetadata;\r\n @ViewChild('grid') grid: any;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n @Input() CredentialTypes: CredentialType[];\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'SystemCredentialsCreationGridComponent', SystemCredentialInfo, State);\r\n\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { BaseGridComponent } from '@m4u-angular/base/component/BaseGridComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseState, CreateCredentialsParams, CredentialAdditionalInfoMetadata, CredentialExternalInfo, DataEditorView, SystemCredentialInfo }\r\n from '@m4u-angular/base/entities/BaseEntities';\r\nimport { CredentialActivityEndpoint } from '@m4u-angular/core/endpoints/credential-activity.endpoint';\r\n\r\nclass State extends BaseState {\r\n\r\n}\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-data-view-grid',\r\n templateUrl: './data-view-grid.component.html',\r\n})\r\nexport class DataViewGridComponent extends BaseGridComponent {\r\n @Input() Views: DataEditorView[];\r\n @ViewChild('grid') grid: any;\r\n @Output() OnSelectionChanged = new EventEmitter();\r\n\r\n constructor(A: ServiceBagService, private credentialActivityEndpoint: CredentialActivityEndpoint) {\r\n super(A, 'DataViewGridComponent', SystemCredentialInfo, State);\r\n\r\n }\r\n\r\n OnGridSelectionChanged(event: any) {\r\n this.OnSelectionChanged.emit(this.grid.instance?.getSelectedRowsData());\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { SystemOptionsListComponent } from '../ui/components/general/system-options/Components/system-options-list/system-options-list.component';\r\nimport { AddSystemOptionDialogComponent } from '../ui/components/general/system-options/Components/add-system-option-dialog/add-system-option-dialog.component';\r\nimport { SystemOptionComponent } from '../ui/components/general/system-options/Components/system-option/system-option.component';\r\nimport { SystemOptionsComponent } from '@ui/components/general/system-options/system-options.component';\r\nimport { PasswordTooltipComponent } from './../ui/components/password/password-tooltip/password-tooltip.component';\r\nimport { AgmCoreModule } from '@agm/core';\r\nimport { APP_BASE_HREF, CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, ErrorHandler, LOCALE_ID, NgModule, InjectionToken } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserModule, HammerGestureConfig, HammerModule, HAMMER_GESTURE_CONFIG, TransferState } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { SignaturePadModule } from 'angular2-signaturepad';\r\nimport { PdfJsViewerModule } from 'ng2-pdfjs-viewer';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { NullComponent } from '@base/component/NullComponent';\r\nimport { ServiceBagService } from '@base/component/ServiceBag';\r\nimport { M4UCardComponent } from '@ui/layouts/componentlayouts/card/card.component';\r\nimport { M4ULinkComponent } from '@ui/layouts/componentlayouts/link/link.component';\r\nimport { CollapsibleGroupComponent } from '@ui/layouts/componentlayouts/collapsible-group/collapsiblegroup.component';\r\nimport { GridButtonAddComponent } from '@ui/layouts/componentlayouts/grid-button-add/gridbuttonadd.component';\r\nimport { GridButtonRemoveComponent } from '@ui/layouts/componentlayouts/grid-button-remove/gridbuttonremove.component';\r\nimport { PageButtonsComponent } from '@ui/layouts/componentlayouts/page-buttons/pagebuttons.component';\r\nimport { FileBoxDialogComponent } from '@ui/dialogs/filebox-dialog/fileboxdialog.component';\r\nimport { InputBoxDialogComponent } from '@ui/dialogs/inputbox-dialog/inputboxdialog.component';\r\nimport { MessageBoxDialogComponent } from '@ui/dialogs/messagebox-dialog/messageboxdialog.component';\r\nimport { PhotoBoxDialogComponent } from '@ui/dialogs/photobox-dialog/photoboxdialog.component';\r\nimport { PrintBoxDialogComponent } from '@ui/dialogs/printbox-dialog/printboxdialog.component';\r\nimport { SelectBoxDialogComponent } from '@ui/dialogs/selectbox-dialog/selectboxdialog.component';\r\nimport { SignBoxDialogComponent } from '@ui/dialogs/signbox-dialog/signboxdialog.component';\r\nimport { SignBoxComponent } from '@ui/dialogs/signbox-dialog/signbox/signbox.component';\r\nimport { ImageBoxDialogComponent } from '@ui/dialogs/imagebox-dialog/imageboxdialog.component';\r\nimport { BarcodeBoxDialogComponent } from '@ui/dialogs/barcodebox-dialog/barcodeboxdialog.component';\r\nimport { M4UCustomBuildDirective } from '@ui/directives/CustomBuild';\r\nimport { FormatPriceWithCurrencyDirective, M4UConfigBooleanColumnDirective, M4UConfigEntitySourceDirectiveSelectBox, M4UConfigEntitySourceDirectiveTagBox, M4UConfigEntitySourceLookupColumn, M4UConfigMonthYearDirective, M4UConfigTimeDirective, M4UConfigYearDirective, M4UContextMenuDirective, M4UFieldEmptyDirective, M4UFieldLinkDirective, M4UFieldXEmptyDirective, M4UFormatCurrencyDirective, M4UFormatGeneralDirective, M4UFormatPercentDirective, M4UFormatPriceDirective, M4UFormatQuantityDirective, M4UFormatRateDirective, M4UFormatRoundedPriceDirective, M4UFormatSumDirective, M4ULinkColumnDirective, M4UListWithPagination, M4UMultiEmailDirective } from '@ui/directives/Directives';\r\nimport { M4UConfigSearchDirective } from '@ui/directives/FormatSearch.directive';\r\nimport { M4UConfigServerSideCustomFilterDirective } from '@ui/directives/CustomServerSideFilter.directive';\r\nimport { M4URouterLinkEx, M4URouterLinkExWithHref } from '@ui/directives/Link.directive';\r\nimport { M4UViewContainerDirective } from '@ui/directives/ViewContainer.directive';\r\nimport * as pipes from '@ui/directives/Pipes';\r\nimport { FormatDateApproximatePipe, FormatDateAtTimePipe, FormatDateCompactPipe, FormatDatePipe, FormatDateShortPipe, FormatFullDateCompactPipe, FormatNumberGeneralPipe, FormatNumberPercentPipe, FormatNumberPricePipe, FormatNumberQuantityPipe, FormatNumberRatePipe, FormatNumberShortPipe, FormatNumberSumPipe, FormatTimePipe, HighlightPipe, LookupListPipe, LookupPipe, RCPipe, RCXPipe, SafePipe, YesEmptyPipe, YesNoPipe, YesNoPipeYN, StringBrPipe, FileSizePipe, RCMPipe, RCMXPipe, AbsPipe, FormatDayNamePipe, FormatDayNameShortPipe, FormatPriceWithCurrencyPipe } from '@ui/directives/Pipes';\r\nimport { M4URequiredDirectiveCheckBox, M4URequiredDirectiveColumn, M4URequiredDirectiveNumberBox, M4URequiredDirectiveSelectBox, M4URequiredDirectiveTextBox, M4URequiredDirectiveRadioGroup, M4URequiredDirectiveDateBox, M4URequiredDirectiveTextArea } from '@ui/directives/Required.directive';\r\nimport { ThrottleEventDirective } from '@ui/directives/ThrottleEvent.directive';\r\nimport { ExceptionComponent } from '@core/exceptions/exception.component';\r\nimport { FieldDetailComponent } from '@ui/layouts/fieldlayouts/field-detail/fielddetail.component';\r\nimport { FieldDetailComponentX } from '@ui/layouts/fieldlayouts/field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '@ui/layouts/fieldlayouts/field-form/fieldform.component';\r\nimport { FieldFormComponentX } from '@ui/layouts/fieldlayouts/field-formx/fieldformx.component';\r\nimport { SectionComponent } from '@ui/layouts/fieldlayouts/section/section.component';\r\nimport { DevExpressService } from '@core/framework/devexpress.service';\r\nimport { FrameworkService, OnInitializeFramework } from '@core/framework/framework.service';\r\nimport { HistoryEndpoint } from '@core/endpoints/history.endpoint';\r\nimport { GeneralEndpoint } from '@core/endpoints/general.endpoint';\r\nimport { GenericListEndpoint } from '@core/endpoints/genericlist.endpoint';\r\nimport { NativeNotificationsService } from '@core/framework/nativenotifications.service';\r\nimport { NavigatorService } from '@core/framework/navigator.service';\r\nimport { ResourcesService } from '@core/framework/resources.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\nimport { SystemEndpoint } from '@core/endpoints/system.endpoint';\r\nimport { SystemOptionsEndpoint } from '@core/endpoints/system-options.endpoint';\r\nimport { APIGatewayInterceptor } from '@core/gateway/APIGateway.intercept';\r\nimport { APIGatewayService } from '@core/gateway/APIGateway.service';\r\nimport { M4UConfigGridDirective, GridWrapperDirective } from '../base/grid/Grid.directive';\r\nimport { InjectorModule } from '@core/injector/injector.module';\r\nimport { AppComponent } from '@ui/layouts/layout/app.component';\r\nimport { EmptyLayoutComponent } from '@ui/layouts/layout/empty-layout/emptylayout.component';\r\nimport { MainLayoutComponent } from '@ui/layouts/layout/main-layout/mainlayout.component';\r\nimport { NavMenuComponent } from '@ui/layouts/layout/nav-menu/navmenu.component';\r\nimport { PageLayoutComponent } from '@ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { ProgressPanelComponent } from '@ui/layouts/layout/progress-panel/progresspanel.component';\r\nimport { ToolbarComponent } from '@ui/layouts/layout/toolbar/toolbar.component';\r\nimport { ComingSoonComponent } from '@ui/components/login/coming-soon/comingsoon.component';\r\nimport { LoginComponent } from '@ui/components/login/login/login.component';\r\nimport { LogoutComponent } from '@ui/components/login/logout/logout.component';\r\nimport { SessionExpireComponent } from '@ui/components/login/session-expire/sessionexpire.component';\r\nimport { CredentialsActivityStatusComponent } from '@ui/components/general/credential-activity-status/credentials-activity-status.component';\r\nimport { NotificationsHistoryComponent } from '@ui/notifications/notifications-history/notificationshistory.component';\r\nimport { NotificationViewComponent } from '@m4u-angular/ui/notifications/notifications-history/notification-view/notificationview.component';\r\nimport { NotificationGridComponent } from '@m4u-angular/ui/notifications/notifications-history/notification-grid/notificationgrid.component';\r\nimport { M4UStopClickPropagation } from '@ui/directives/Directives';\r\nimport { HistoryViewComponent } from '@m4u-angular/ui/components/general/history-view/historyview.component';\r\nimport { ArrayOrderByPipe } from '@ui/directives/Pipes';\r\nimport { M4UDevExpressModule } from './devexpress.module';\r\nimport { PasswordChangeComponent } from '@ui/components/password/password-change/passwordchange.component';\r\nimport { PasswordChangeExpiredComponent } from '@ui/components/password/password-change-expired/passwordchangeexpired.component';\r\nimport { PasswordRecoveryComponent } from '@ui/components/password/password-recovery/passwordrecovery.component';\r\nimport { PasswordWelcomeComponent } from '@ui/components/password/password-welcome/passwordwelcome.component';\r\nimport { LoginEndpoint } from '@core/endpoints/login.endpoint';\r\nimport { PasswordManageComponent } from '@ui/components/password/password-manage/passwordmanage.component';\r\nimport { RecaptchaModule } from 'ng-recaptcha';\r\nimport { CaptchaComponent } from '@ui/layouts/componentlayouts/captcha/captcha.component';\r\nimport { AttachedFilesComponent } from '@ui/layouts/componentlayouts/attached-files/attached-files.component';\r\nimport { FileCardComponent } from '@ui/layouts/componentlayouts/attached-files/file-card/file-card.component';\r\nimport { M4USearchComponent } from '@ui/layouts/componentlayouts/search/search.component';\r\nimport { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';\r\nimport { M4ULoadingAnimationComponent } from '@ui/layouts/componentlayouts/loading-animation/loading-animation.component';\r\nimport { InjectedComponentsComponent } from '@ui/layouts/componentlayouts/injected-components/injected-components.component';\r\nimport { InjectedComponentsBaseService } from '@core/framework/injected-components-base.service';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { SessionService } from '@core/framework/session.service';\r\nimport { LoginGuard } from '@core/framework/login.guard';\r\nimport { ConfirmCancelGuard } from '@core/framework/confirm-cancel.guard';\r\nimport { ServiceWorkerModule } from '@angular/service-worker';\r\nimport { environment } from '../environment/environment';\r\nimport { ExceptionHandler } from '@core/exceptions/exception.handler';\r\nimport { ENVIRONMENT } from '../environment/environment.model';\r\nimport { AppConfig, APP_CONFIG } from '@configuration/app.config.model';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { LoginService } from '@core/framework/login.service';\r\nimport { LoginByOtpComponent } from '@ui/components/login/login-by-otp/login-by-otp.component';\r\nimport { CommonSettingComponent } from '@ui/components/general/commonsettings/commonsetting.component';\r\nimport { CustomizationService } from '@core/framework/customization-service';\r\nimport { NotificationEndpoint } from '@core/endpoints/notification.endpoint';\r\nimport { RecaptchaV3Module, RECAPTCHA_V3_SITE_KEY } from 'ng-recaptcha';\r\n\r\nimport { FooterComponent } from '@ui/layouts/layout/footer/footer.component';\r\n\r\nimport { NestedOptionHost } from 'devextreme-angular';\r\n\r\nimport { TabsComponent } from '@ui/components/tabs/tabs.component';\r\nimport { LoginBaseComponent } from '@ui/components/login/base/login-base.component';\r\n\r\nimport { StatusColumnComponent } from '@ui/components/status-column/status-column.component';\r\nimport { ButtonComponent } from '@ui/components/button/button.component';\r\nimport { CredentialActivityStatusGridComponent } from '@ui/components/general/credential-activity-status/grid/credentials-activity-status-grid.component';\r\nimport { TagComponent } from '@ui/components/tag/tag.component';\r\nimport { SessionExpiredComponent } from '@m4u-angular/ui/components/session-expired/session-expired.component';\r\n\r\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\nimport { SystemOptionsService } from '@m4u-angular/core/framework/system-options.service';\r\n\r\nimport { SidebarModule } from 'primeng/sidebar';\r\nimport { CarouselModule } from 'primeng/carousel';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\nimport { GridBottomContainerComponent } from '@ui/layouts/componentlayouts/grid-bottom-container/grid-bottom-container.component';\r\nimport { ContextMenuModule } from 'primeng/contextmenu';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { PreviewDialogComponent } from '@ui/dialogs/preview-dialog/previewdialog.component';\r\n//import { IonicModule, IonicRouteStrategy } from '@ionic/angular';\r\n//import { RouteReuseStrategy } from '@angular/router';\r\nimport { SplitterModule } from 'primeng/splitter';\r\nimport { StepsModule } from 'primeng/steps';\r\nimport { M4UConfigTextBoxTooltipDirective, M4UConfigTooltipDirective } from '@ui/directives/Tooltip.directive';\r\nimport { TooltipComponent } from '@ui/components/tooltip/tooltip.component';\r\nimport { M4UConfigViewPasswordDirective } from '@ui/directives/ViewPassword.directive';\r\nimport { PushMessageListComponent } from '@ui/notifications/push-message-list/push-message-list.component';\r\nimport { PushMessageBadgeComponent } from '@ui/notifications/push-message-badge/push-message-badge.component';\r\nimport { NotificationService } from '@core/framework/notification.service';\r\nimport { NotificationServerListComponent } from '@ui/notifications/notification-server/list/notification-server-list.component';\r\nimport { NotificationServerEndpoint } from '@core/endpoints/notification-server.endpoint';\r\nimport { NotificationServerGridComponent } from '@ui/notifications/notification-server/list/notification-server-grid/notification-server-grid.component';\r\nimport { NotificationTemplateListComponent } from '@ui/notifications/notification-template/notification-template-list/notification-template-list.component';\r\nimport { NotificationTemplateGridComponent } from '@ui/notifications/notification-template/notification-template-grid/notification-template-grid.component';\r\nimport { NotificationTemplateComponent } from '@ui/notifications/notification-template/notification-template.component';\r\nimport { NotificationTemplateEndpoint } from '@core/endpoints/notification-template.endpoint';\r\nimport { NotificationConfigurationBaseService } from '@core/framework/notification-configuration-base.service';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { PushMessageComponent } from '@ui/notifications/push-message/push-message.component';\r\nimport { PushMessageToastsComponent } from '@ui/notifications/push-message-toasts/push-message-toasts.component';\r\nimport { EmailHistoryItemComponent } from '@ui/notifications/notifications-history/email-history-item/email-history-item.component';\r\nimport { PushMessageHistoryItemComponent } from '@ui/notifications/notifications-history/push-message-history-item/push-message-history-item.component';\r\nimport { SmsHistoryItemComponent } from '@ui/notifications/notifications-history/sms-history-item/sms-history-item.component';\r\nimport { HtmlBoxDialogComponent } from '@ui/dialogs/htmlbox-dialog/htmlbox-dialog.component';\r\nimport { EmailHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/email-history-grid/email-history-grid.component';\r\nimport { SmsHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/sms-history-grid/sms-history-grid.component';\r\nimport { PushMessageHistoryGridComponent } from '@ui/notifications/notifications-history/notification-grid/push-message-history-grid/push-message-history-grid.component';\r\nimport { PushMessageEndpoint } from '@core/endpoints/push-message.endpoint';\r\nimport { UiService } from '@core/framework/ui.service';\r\nimport { LOADING_BAR_CONFIG } from '@ngx-loading-bar/core';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { MessageService } from 'primeng/api';\r\nimport { NotificationTestDialogComponent } from '@ui/notifications/notification-test-dialog/notification-test-dialog.component';\r\nimport { NotificationPreviewDialogComponent } from '@ui/notifications/notification-preview-dialog/notification-preview-dialog.component';\r\nimport { NavBarComponent } from '@ui/layouts/layout/nav-bar/nav-bar.component';\r\nimport { MidStoreComponent } from '@m4u-angular/core/mid/mid-store.component';\r\nimport { AgmMarkerSpiderModule } from 'agm-spiderfier';\r\nimport { NotificationServerComponent } from '@ui/notifications/notification-server/notification-server.component';\r\nimport { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';\r\nimport { BottomSheetService } from '@core/framework/bottom-sheet.service';\r\nimport { BottomSheetListComponent } from '@ui/components/bottom-sheet-list/bottom-sheet-list.component';\r\nimport { PushMessageListPopupComponent } from '@ui/notifications/push-message-list-popup/push-message-list-popup.component';\r\nimport { SideBarComponent } from '@ui/layouts/layout/side-bar/side-bar.component';\r\nimport { PageFilterComponent } from '@ui/layouts/layout/page-filter/page-filter.component';\r\nimport { SidebarService } from '@core/framework/sidebar.service';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { PageToolbarButtonsComponent } from '@ui/layouts/componentlayouts/page-toolbar-buttons/page-toolbar-buttons.component';\r\nimport { GridToolbarComponent } from '@m4u-angular/ui/layouts/componentlayouts/grid-toolbar/grid-toolbar.component';\r\nimport { LanguageService } from '@core/framework/language.service';\r\nimport { SpinLoaderComponent } from '@ui/components/spin-loader/spin-loader.component';\r\nimport { BottomSheetContextMenuComponent } from '@ui/components/bottom-sheet-context-menu/bottom-sheet-context-menu.component';\r\nimport { DemoLayoutComponent } from '@ui/demo/layouts/demo-layout/demo-layout.component';\r\nimport { DemoButtonsComponent } from '@ui/demo/components/buttons/demo-buttons.component';\r\nimport { DemoNavbarComponent } from '@ui/demo/layouts/demo-navbar/demo-navbar.component';\r\nimport { DemoEditorsComponent } from '@ui/demo/components/editors/demo-editors.component';\r\nimport { DemoLayoutsComponent } from '@ui/demo/components/layouts/demo-layouts.component';\r\nimport { DemoSectionsComponent } from '@ui/demo/components/sections/demo-sections.component';\r\nimport { DemoCardsComponent } from '@ui/demo/components/cards/demo-cards.component';\r\nimport { DemoTabsComponent } from '@ui/demo/components/tabs/demo-tabs.component';\r\nimport { DemoGridsComponent } from '@ui/demo/components/grids/demo-grids.component';\r\nimport { DemoBottomSheetsComponent } from '@ui/demo/components/bottom-sheets/demo-bottom-sheets.component';\r\nimport { BaseGridComponent } from '@base/component/BaseGridComponent';\r\nimport { DemoGridComponent } from '@ui/demo/components/grids/grid/demo-grid.component';\r\nimport { DemoPagesComponent } from '@ui/demo/components/pages/demo-pages.component';\r\nimport {\r\n DemoPageToolbarButtonsComponent\r\n} from '@ui/demo/components/pages/examples/toolbar-buttons/demo-page-toolbar-buttons.component';\r\nimport {\r\n DemoPageHeaderButtonsComponent\r\n} from '@ui/demo/components/pages/examples/header-buttons/demo-page-header-buttons.component';\r\nimport { DemoSidebarsComponent } from '@ui/demo/components/sidebars/demo-sidebars.component';\r\nimport { DemoDialogsComponent } from '@ui/demo/components/dialogs/demo-dialogs.component';\r\nimport { DemoSimpleDialogComponent } from '@ui/demo/components/dialogs/simple-dialog/demo-simple-dialog.component';\r\nimport { DemoPipesComponent } from '@ui/demo/components/pipes/demo-pipes.component';\r\nimport { DemoComponentsComponent } from '@ui/demo/components/components/demo-components.component';\r\nimport { BreadcrumbComponent } from '@ui/components/breadcrumb/breadcrumb.component';\r\nimport { RouteHistoryService } from '@core/framework/route-history.service';\r\nimport { CredentialActivityEndpoint } from '@core/endpoints/credential-activity.endpoint';\r\nimport { CredentialLoginHistoryComponent } from '@ui/components/general/credential-login-history/credential-login-history.component';\r\nimport {\r\n CredentialLoginHistoryGridComponent\r\n} from '@ui/components/general/credential-login-history/grid/credential-login-history-grid.component';\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { PdfViewerComponent } from '@ui/components/pdf-viewer/pdf-viewer.component';\r\nimport { SliderModule } from 'primeng/slider';\r\nimport { RequestHistoryListComponent } from '@ui/components/general/request-history/request-history-list/request-history-list.component';\r\nimport { WebAPICredentialEndpoint } from '@core/endpoints/webapi-credential.endpoint';\r\nimport { RequestHistoryGridComponent } from '@ui/components/general/request-history/request-history-grid/request-history-grid.component';\r\nimport { WebAPIRequestEndpoint } from '@core/endpoints/webapi-request.endpoint';\r\nimport { RemoteRequestEndpoint } from '@core/endpoints/remote-request.endpoint';\r\nimport { RequestHistoryComponent } from '@ui/components/general/request-history/request-history.component';\r\nimport { RemoteRequestHistoryListComponent } from '@ui/components/general/remote-request-history/remote-request-history-list.component';\r\nimport { RemoteRequestHistoryComponent } from '@ui/components/general/remote-request-history/remote-request-history.component';\r\nimport { RemoteRequestHistoryGridComponent }\r\n from '@ui/components/general/remote-request-history/grid/remote-request-history-grid.component';\r\nimport { WelcomeUserDialogComponent } from '@ui/components/password/password-manage/welcome-user-dialog/welcome-user-dialog.component';\r\nimport { HistoryViewGridComponent } from '@m4u-angular/ui/components/general/history-view/grid/historyview-grid.component';\r\nimport { TimelineModule } from 'primeng/timeline';\r\nimport { EntityService } from '@core/framework/entity.service';\r\nimport { TotalBalanceCardComponent } from '@ui/components/total-balance-card/total-balance-card.component';\r\nimport * as UIComponents from '@ui/components';\r\nimport { EMPTY_STRING_TOKEN } from '@m4u-angular/base/endpoint/BaseEndpoint';\r\nimport { BottomSheetDialogComponent } from '@ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { SystemCredentialsComponent } from '@ui/components/general/system-credentials/system-credentials.component';\r\nimport { SystemCredentialsGridComponent }\r\n from '@ui/components/general/system-credentials/system-credentials-grid/system-credentials-grid.component';\r\nimport { SystemCredentialsCreationComponent }\r\n from '@ui/components/general/system-credentials-creation/system-credentials-creation.component';\r\nimport { SystemCredentialsCreationGridComponent }\r\n from '@ui/components/general/system-credentials-creation/system-credentials-creation-grid/system-credentials-creation-grid.component';\r\nimport { WelcomeMessageConfigDialogComponent } from '@ui/dialogs/welcome-message-config-dialog/welcome-message-config-dialog.component';\r\nimport { DataViewListComponent } from '@ui/components/general/data-views/data-view-list.component';\r\nimport { DataViewGridComponent } from '@ui/components/general/data-views/data-views-grid/data-view-grid.component';\r\nimport { DataEditorEndpoint } from '@core/endpoints/data-editor.endpoint';\r\nimport { SystemCredentialsEndpoint } from '@core/endpoints/system-credentials.endpoint';\r\nimport { ContextMenuService } from '@core/framework/context-menu.service';\r\nimport { GalleriaModule } from 'primeng/galleria';\r\n\r\n//Components to be used by application\r\nexport const ReusableComponents: any =\r\n [\r\n //Field layouts\r\n SectionComponent,\r\n FieldFormComponent,\r\n FieldFormComponentX,\r\n FieldDetailComponent,\r\n FieldDetailComponentX,\r\n\r\n //UI Enahncements\r\n M4UCardComponent,\r\n M4ULinkComponent,\r\n M4USearchComponent,\r\n PageButtonsComponent,\r\n CollapsibleGroupComponent,\r\n GridBottomContainerComponent,\r\n GridButtonAddComponent,\r\n GridButtonRemoveComponent,\r\n CaptchaComponent,\r\n AttachedFilesComponent,\r\n FileCardComponent,\r\n M4ULoadingAnimationComponent,\r\n TabsComponent,\r\n ButtonComponent,\r\n TagComponent,\r\n SessionExpiredComponent,\r\n TooltipComponent,\r\n ...Object.values(UIComponents),\r\n\r\n //Dialogs\r\n SelectBoxDialogComponent,\r\n InputBoxDialogComponent,\r\n MessageBoxDialogComponent,\r\n PrintBoxDialogComponent,\r\n SignBoxDialogComponent,\r\n SignBoxComponent,\r\n ImageBoxDialogComponent,\r\n PhotoBoxDialogComponent,\r\n FileBoxDialogComponent,\r\n PreviewDialogComponent,\r\n BarcodeBoxDialogComponent,\r\n WelcomeUserDialogComponent,\r\n BottomSheetDialogComponent,\r\n WelcomeMessageConfigDialogComponent,\r\n\r\n //Main components\r\n AppComponent,\r\n NullComponent,\r\n PageLayoutComponent,\r\n\r\n //Misc directives\r\n M4UCustomBuildDirective,\r\n ThrottleEventDirective,\r\n M4URequiredDirectiveTextBox,\r\n M4URequiredDirectiveNumberBox,\r\n M4URequiredDirectiveSelectBox,\r\n M4URequiredDirectiveCheckBox,\r\n M4URequiredDirectiveRadioGroup,\r\n M4URequiredDirectiveDateBox,\r\n M4URequiredDirectiveColumn,\r\n M4URequiredDirectiveTextArea,\r\n M4URouterLinkEx,\r\n M4URouterLinkExWithHref,\r\n M4UStopClickPropagation,\r\n M4UFieldEmptyDirective,\r\n M4UFieldXEmptyDirective,\r\n GridWrapperDirective,\r\n M4UViewContainerDirective,\r\n M4UContextMenuDirective,\r\n\r\n //Format directives\r\n M4UConfigMonthYearDirective,\r\n M4UConfigYearDirective,\r\n M4UConfigTimeDirective,\r\n M4UFormatSumDirective,\r\n M4UFormatPriceDirective,\r\n M4UFormatRoundedPriceDirective,\r\n M4UFormatQuantityDirective,\r\n M4UFormatPercentDirective,\r\n M4UFormatRateDirective,\r\n M4UFormatGeneralDirective,\r\n M4UFormatCurrencyDirective,\r\n M4UMultiEmailDirective,\r\n FormatPriceWithCurrencyDirective,\r\n\r\n //Config directives\r\n M4UConfigSearchDirective,\r\n M4UConfigGridDirective,\r\n M4UConfigEntitySourceDirectiveSelectBox,\r\n M4UConfigEntitySourceDirectiveTagBox,\r\n M4UConfigEntitySourceLookupColumn,\r\n M4UConfigBooleanColumnDirective,\r\n M4UConfigTooltipDirective,\r\n M4UConfigTextBoxTooltipDirective,\r\n M4UConfigViewPasswordDirective,\r\n M4UListWithPagination,\r\n M4UFieldLinkDirective,\r\n M4ULinkColumnDirective,\r\n M4UConfigServerSideCustomFilterDirective,\r\n\r\n //Pipes\r\n ...Object.values(pipes),\r\n ArrayOrderByPipe,\r\n SafePipe,\r\n StringBrPipe,\r\n FileSizePipe,\r\n AbsPipe,\r\n FormatPriceWithCurrencyPipe,\r\n CommonSettingComponent,\r\n\r\n StatusColumnComponent,\r\n SystemOptionComponent,\r\n AddSystemOptionDialogComponent,\r\n SystemOptionsListComponent,\r\n BottomSheetListComponent,\r\n BottomSheetContextMenuComponent,\r\n PageToolbarButtonsComponent,\r\n SpinLoaderComponent,\r\n BreadcrumbComponent,\r\n PdfViewerComponent,\r\n TotalBalanceCardComponent\r\n ];\r\n//System components - no need to re-export\r\nexport const SystemComponents: any =\r\n [\r\n LoginBaseComponent,\r\n LoginComponent,\r\n LogoutComponent,\r\n SessionExpireComponent,\r\n PasswordChangeComponent,\r\n PasswordChangeExpiredComponent,\r\n PasswordRecoveryComponent,\r\n PasswordWelcomeComponent,\r\n ExceptionComponent,\r\n ComingSoonComponent,\r\n MainLayoutComponent,\r\n EmptyLayoutComponent,\r\n ToolbarComponent,\r\n ProgressPanelComponent,\r\n NavMenuComponent,\r\n NavBarComponent,\r\n CredentialsActivityStatusComponent,\r\n CredentialActivityStatusGridComponent,\r\n NotificationsHistoryComponent,\r\n NotificationViewComponent,\r\n NotificationGridComponent,\r\n EmailHistoryGridComponent,\r\n SmsHistoryGridComponent,\r\n PushMessageHistoryGridComponent,\r\n PushMessageListComponent,\r\n PushMessageListPopupComponent,\r\n PushMessageBadgeComponent,\r\n PushMessageComponent,\r\n PushMessageToastsComponent,\r\n EmailHistoryItemComponent,\r\n HtmlBoxDialogComponent,\r\n NotificationPreviewDialogComponent,\r\n NotificationTestDialogComponent,\r\n PushMessageHistoryItemComponent,\r\n SmsHistoryItemComponent,\r\n PasswordManageComponent,\r\n LoginByOtpComponent,\r\n InjectedComponentsComponent,\r\n FooterComponent,\r\n NotificationServerComponent,\r\n NotificationServerListComponent,\r\n NotificationServerGridComponent,\r\n NotificationTemplateListComponent,\r\n NotificationTemplateGridComponent,\r\n NotificationTemplateComponent,\r\n PasswordTooltipComponent,\r\n SystemOptionsComponent,\r\n MidStoreComponent,\r\n SideBarComponent,\r\n PageFilterComponent,\r\n GridToolbarComponent,\r\n CredentialLoginHistoryComponent,\r\n CredentialLoginHistoryGridComponent,\r\n RequestHistoryListComponent,\r\n RequestHistoryGridComponent,\r\n RequestHistoryComponent,\r\n RemoteRequestHistoryComponent,\r\n RemoteRequestHistoryListComponent,\r\n RemoteRequestHistoryGridComponent,\r\n HistoryViewComponent,\r\n HistoryViewGridComponent,\r\n SystemCredentialsComponent,\r\n SystemCredentialsGridComponent,\r\n SystemCredentialsCreationComponent,\r\n SystemCredentialsCreationGridComponent,\r\n DataViewListComponent,\r\n DataViewGridComponent\r\n ];\r\n\r\nconst SystemEndpoints: any =\r\n [\r\n LoginEndpoint,\r\n GeneralEndpoint,\r\n GenericListEndpoint,\r\n SystemEndpoint,\r\n NotificationEndpoint,\r\n NotificationServerEndpoint,\r\n NotificationTemplateEndpoint,\r\n PushMessageEndpoint,\r\n CredentialActivityEndpoint,\r\n WebAPICredentialEndpoint,\r\n WebAPIRequestEndpoint,\r\n HistoryEndpoint,\r\n DataEditorEndpoint,\r\n SystemCredentialsEndpoint,\r\n RemoteRequestEndpoint,\r\n SystemOptionsEndpoint\r\n ];\r\n\r\n//System services - need to provide only\r\nconst SystemServices: any =\r\n [\r\n LoginGuard,\r\n ConfirmCancelGuard,\r\n LoginService,\r\n SessionService,\r\n APIGatewayService,\r\n DevExpressService,\r\n FrameworkService,\r\n SysEnumsService,\r\n ResourcesService,\r\n ServiceBagService,\r\n NativeNotificationsService,\r\n NavigatorService,\r\n SysEventsService,\r\n ScreenService,\r\n InjectedComponentsBaseService,\r\n AppConfigService,\r\n CustomizationService,\r\n NestedOptionHost,\r\n DeviceDetectorService,\r\n SystemOptionsService,\r\n NotificationService,\r\n NotificationConfigurationBaseService,\r\n UiService,\r\n MessageService,\r\n DialogService,\r\n BottomSheetService,\r\n SidebarService,\r\n LanguageService,\r\n RouteHistoryService,\r\n EntityService,\r\n TransferState,\r\n ContextMenuService,\r\n { provide: HTTP_INTERCEPTORS, useClass: APIGatewayInterceptor, multi: true },\r\n { provide: APP_INITIALIZER, useFactory: OnInitializeFramework, multi: true }\r\n ];\r\n\r\n//Angular modules - need to re-export\r\nconst BuiltInModules: any =\r\n [\r\n BrowserModule,\r\n CommonModule,\r\n FormsModule,\r\n InjectorModule,\r\n HttpClientModule,\r\n BrowserAnimationsModule,\r\n M4UDevExpressModule,\r\n PdfJsViewerModule,\r\n SignaturePadModule,\r\n RecaptchaModule,\r\n LoadingBarHttpClientModule,\r\n InfiniteScrollModule,\r\n ScrollingModule,\r\n SidebarModule,\r\n CarouselModule,\r\n ButtonModule,\r\n InputNumberModule,\r\n ContextMenuModule,\r\n ToolbarModule,\r\n SplitterModule,\r\n StepsModule,\r\n SelectButtonModule,\r\n ToastModule,\r\n DynamicDialogModule,\r\n ProgressSpinnerModule,\r\n TimelineModule,\r\n SliderModule,\r\n GalleriaModule\r\n ];\r\n\r\nconst DemoComponents: any =\r\n [\r\n DemoLayoutComponent,\r\n DemoNavbarComponent,\r\n DemoButtonsComponent,\r\n DemoEditorsComponent,\r\n DemoLayoutsComponent,\r\n DemoComponentsComponent,\r\n DemoSectionsComponent,\r\n DemoCardsComponent,\r\n DemoTabsComponent,\r\n DemoGridsComponent,\r\n DemoGridComponent,\r\n DemoBottomSheetsComponent,\r\n DemoPagesComponent,\r\n DemoPageToolbarButtonsComponent,\r\n DemoPageHeaderButtonsComponent,\r\n DemoSidebarsComponent,\r\n DemoDialogsComponent,\r\n DemoSimpleDialogComponent,\r\n DemoPipesComponent\r\n ];\r\n\r\nconst appConfig: AppConfig = AppConfigService.loadConfig();\r\nconst m4uConfig = AppConfigService.loadM4UConfig();\r\n\r\nexport function IsRegisterServiceWorker(): boolean {\r\n if (!environment.production) return false;\r\n if (location.protocol != 'https:') return false;\r\n if (!m4uConfig.isRegisterServiceWorker) return false;\r\n return true;\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n //IonicModule.forRoot(),\r\n BuiltInModules,\r\n AppRoutingModule,\r\n SidebarModule,\r\n PortalModule,\r\n AgmCoreModule.forRoot({ apiKey: m4uConfig.googleMapsApiKey, language: 'iw', region: 'IL' }),\r\n ServiceWorkerModule.register('ngsw-worker.js', { enabled: IsRegisterServiceWorker() }),\r\n AgmMarkerSpiderModule,\r\n RecaptchaV3Module\r\n ],\r\n declarations: [SystemComponents, ReusableComponents, m4uConfig.isDemoEnabled ? DemoComponents : [], ...appConfig.Components],\r\n entryComponents: appConfig.EntryComponents,\r\n exports: [BuiltInModules, AgmCoreModule, ReusableComponents],\r\n providers: [\r\n SystemEndpoints,\r\n SystemServices,\r\n { provide: ErrorHandler, useClass: ExceptionHandler },\r\n { provide: ENVIRONMENT, useValue: environment },\r\n { provide: LOCALE_ID, useValue: m4uConfig.defaultLocale ?? 'he-IL' },\r\n //{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },\r\n { provide: EMPTY_STRING_TOKEN, useValue: '' },\r\n { provide: APP_BASE_HREF, useValue: m4uConfig.deploymentApplicationFolder },\r\n { provide: APP_CONFIG, useValue: appConfig },\r\n { provide: LOADING_BAR_CONFIG, useValue: { latencyThreshold: 100 } },\r\n ...appConfig.Endpoints,\r\n ...appConfig.Services,\r\n { provide: RECAPTCHA_V3_SITE_KEY, useValue: m4uConfig.reCAPTCHAv3Key }\r\n ],\r\n bootstrap: [AppComponent],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class M4UAngularModule {\r\n}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { environment } from './environment/environment';\r\nimport { M4UAngularModule } from './_modules/m4uangular.module';\r\nimport themes from 'devextreme/ui/themes';\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\n//Dispatch 'applicationStarted' event\r\n//Syntax was adapted to work in the IE browser\r\nvar event = document.createEvent('Event');\r\nevent.initEvent('applicationStarted', true, true);\r\ndocument.dispatchEvent(event);\r\n\r\nthemes.initialized(() => {\r\n platformBrowserDynamic().bootstrapModule(M4UAngularModule)\r\n .then(() => {\r\n //Dispatch 'applicationLoaded' event\r\n //Syntax was adapted to work in the IE browser\r\n var event = document.createEvent('Event');\r\n event.initEvent('applicationLoaded', true, true);\r\n document.dispatchEvent(event);\r\n })\r\n .catch(err => console.error(err));\r\n});","export default \"
\\r\\n
\\r\\n \\r\\n \\r\\n
{{contextMenu.text || contextMenu.label}}
\\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { ContextMenuElement } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\n\r\n@Component({\r\n selector: 'app-bottom-sheet-context-menu',\r\n templateUrl: './bottom-sheet-context-menu.component.html',\r\n styleUrls: ['./bottom-sheet-context-menu.component.scss']\r\n})\r\nexport class BottomSheetContextMenuComponent implements IBottomSheetComponent {\r\n MenuItems: ContextMenuElement[];\r\n Context: BottomSheetDialogComponent;\r\n get MenuItemsFiltered() {\r\n return this.MenuItems?.filter(x => !(x as any).separator);\r\n }\r\n\r\n constructor() {}\r\n\r\n OnItemClick(contextMenu) {\r\n contextMenu.onClick && contextMenu.onClick() \r\n || contextMenu.command && contextMenu.command();\r\n this.Context.ClosePage();\r\n }\r\n}\r\n","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{ GetItemText(data) }}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { BottomSheetListParams, IBottomSheetComponent } from '@m4u-angular/core/framework/bottom-sheet.service';\r\nimport { BottomSheetDialogComponent } from '@m4u-angular/ui/dialogs/bottom-sheet-dialog/bottom-sheet-dialog.component';\r\nimport { DxListComponent } from 'devextreme-angular';\r\n\r\n@Component({\r\n selector: 'app-bottom-sheet-list',\r\n templateUrl: './bottom-sheet-list.component.html',\r\n styleUrls: ['./bottom-sheet-list.component.scss']\r\n})\r\nexport class BottomSheetListComponent implements IBottomSheetComponent {\r\n @Input() ListParams: BottomSheetListParams;\r\n @ViewChild('list') list: DxListComponent;\r\n\r\n Context: BottomSheetDialogComponent;\r\n get IsGrouped(): boolean {\r\n const data = Array.isArray(this.ListParams.DataSource) ? this.ListParams.DataSource : (this.ListParams.DataSource as any).items();\r\n return data.some(x => x.key && x.items);\r\n }\r\n\r\n FilteredDataSource: any[];\r\n\r\n constructor() {\r\n }\r\n\r\n OnItemClick(e) {\r\n if (this.ListParams.IsMultiSelection) return;\r\n\r\n const selectedValue = e.itemData[this.ListParams.ValueExpr];\r\n this.CompleteSelection(e?.event, selectedValue);\r\n }\r\n\r\n ApplySelection(e) {\r\n const selectedValue = this.list.selectedItemKeys;\r\n this.CompleteSelection(e?.event, selectedValue);\r\n }\r\n\r\n private CompleteSelection(event, selectedValue) {\r\n if (this.Context)\r\n this.Context.OnClose() && this.Context.CloseDialogWithSuccess({ event: event, value: selectedValue });\r\n else\r\n this.ListParams.OnCompleted({ event: event, value: selectedValue });\r\n }\r\n\r\n GetBankIcon = (iconName: string) => {\r\n return `assets/projects/kraken/${iconName}`;\r\n };\r\n\r\n GetItemText = (data) => {\r\n return data.key\r\n || (typeof (this.ListParams.DisplayExpr) === 'function' ? this.ListParams.DisplayExpr(data) : data[this.ListParams.DisplayExpr]);\r\n };\r\n\r\n OnSearch(e) {\r\n const dataSource = this.ListParams.DataSource as any;\r\n if (!Array.isArray(dataSource)) {\r\n const filter = this.ListParams.SearchExpr\r\n .map(expr => [expr, 'contains', e])\r\n .reduce((acc, curr) => acc.length === 0 ? [curr] : [...acc, 'or', curr], []);\r\n dataSource.filter(filter);\r\n dataSource.load();\r\n return;\r\n }\r\n const originalDataSource = this.ListParams.DataSource as any[];\r\n this.FilteredDataSource = e.length\r\n ? originalDataSource.filter(x => this.ListParams.SearchExpr.some(expr => {\r\n return x[expr] ? x[expr].toLowerCase().includes(e.toLowerCase()) : false\r\n }))\r\n : undefined;\r\n }\r\n}\r\n","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\";","import { CdkPortalOutletAttachedRef, Portal } from '@angular/cdk/portal';\r\nimport { Component, ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, Input, TemplateRef, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageComponent } from '@m4u-angular/base/component/BasePageComponent';\r\nimport { ServiceBagService, ServiceBagServices } from '@m4u-angular/base/component/ServiceBag';\r\nimport { BaseEntity, BaseState } from '@m4u-angular/base/entities/BaseEntities';\r\nimport { EnumPageDisplayModes, EnumPageEntitySources, EnumWindowSizes } from '@m4u-angular/core/framework/sysenums.enum';\r\nimport { PageLayoutComponent } from '@m4u-angular/ui/layouts/layout/page-layout/pagelayout.component';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n\r\n@Component({\r\n providers: ServiceBagServices,\r\n selector: 'app-bottom-sheet-dialog',\r\n templateUrl: './bottom-sheet-dialog.component.html',\r\n styleUrls: ['./bottom-sheet-dialog.component.scss']\r\n})\r\nexport class BottomSheetDialogComponent extends BasePageComponent {\r\n\r\n @ViewChild('bottomSheetContent', { read: ViewContainerRef }) containerRef: ViewContainerRef;\r\n\r\n @Input() ContentPortal: Portal;\r\n @Input() ContentParams: any;\r\n @Input() Title: string;\r\n @Input() Height: EnumWindowSizes;\r\n @Input() Class: string;\r\n\r\n @ViewChild('page') pageLayout: PageLayoutComponent;\r\n\r\n constructor(A: ServiceBagService,\r\n private deviceDetector: DeviceDetectorService) {\r\n super(A, 'BottomSheetDialogComponent', BaseEntity, BaseState, EnumPageDisplayModes.BottomSheet, EnumPageEntitySources.External);\r\n }\r\n\r\n protected override OnInitTitle(): string {\r\n return this.Title;\r\n }\r\n\r\n Repaint() {\r\n setTimeout(() => this.pageLayout?.popup?.instance?.repaint(), 200);\r\n }\r\n\r\n ContentAttached(ref: CdkPortalOutletAttachedRef) {\r\n (ref as any).context = {\r\n $implicit: this\r\n };\r\n if (this.ContentParams && ref instanceof ComponentRef) {\r\n Object.entries(this.ContentParams).forEach(([key, value]) => {\r\n ref.instance[key] = value;\r\n });\r\n }\r\n\r\n if (this.deviceDetector.device === 'iPhone') this.Repaint();\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n@Component({\r\n selector: 'm4u-fielddetail',\r\n templateUrl: './fielddetail.component.html',\r\n styleUrls: ['./fielddetail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FieldDetailComponent extends FieldFormComponent {\r\n @Input() Icon: string;\r\n @Input() IsShowEmpty: boolean = false;\r\n @Input() Position: 'vertical' | 'horizontal' = 'vertical';\r\n @Input() ValueAlignment: 'start' | 'end' = 'start';\r\n @Input() Class: string;\r\n @Input() Value: string;\r\n\r\n get SaveHTML(){\r\n return this.sanitizer.bypassSecurityTrustHtml(this.Value);\r\n }\r\n}","export default \"
\\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\";","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n\r\n@Component({\r\n selector: 'm4u-fielddetailx',\r\n templateUrl: './fielddetailx.component.html',\r\n styleUrls: ['./fielddetailx.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FieldDetailComponentX extends FieldFormComponent {\r\n @Input() Icon: string;\r\n @Input() IsShowEmpty: boolean;\r\n @Input() Position: 'vertical' | 'horizontal' = 'vertical';\r\n @Input() ValueAlignment: 'start' | 'end' = 'start';\r\n @Input() Class: string;\r\n // obsolete\r\n @Input() Value: string;\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n {{Label}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, ContentChildren, Input, QueryList } from '@angular/core';\r\nimport { DxCheckBoxComponent, DxDateBoxComponent, DxDropDownBoxComponent, DxNumberBoxComponent, DxRadioGroupComponent, DxSelectBoxComponent, DxTagBoxComponent, DxTextAreaComponent, DxTextBoxComponent } from 'devextreme-angular';\r\nimport { Utils } from '@core/helpers/Utils';\r\nimport { IBaseComponent } from '@base/component/IBaseComponent';\r\nimport { CustomizationService } from '@m4u-angular/core/framework/customization-service';\r\nimport { ScreenService } from '@m4u-angular/core/framework/screen.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'm4u-field',\r\n templateUrl: './fieldform.component.html',\r\n styleUrls: ['./fieldform.component.scss'] \r\n})\r\nexport class FieldFormComponent implements AfterViewInit {\r\n @Input() Name: string;\r\n @Input() IsHideLabel: boolean;\r\n @Input() IsRemoveLabel: boolean;\r\n @Input() public Component: IBaseComponent;\r\n @Input() SearchText: string = null;\r\n\r\n @ContentChildren(DxSelectBoxComponent) private ctlSelectBoxes: QueryList;\r\n @ContentChildren(DxTextBoxComponent) private ctlTextBoxes: QueryList;\r\n @ContentChildren(DxTextAreaComponent) private ctlTextAreas: QueryList;\r\n @ContentChildren(DxNumberBoxComponent) private ctlNumberBoxes: QueryList;\r\n @ContentChildren(DxDateBoxComponent) private ctlDateBoxes: QueryList;\r\n @ContentChildren(DxCheckBoxComponent) private ctlCheckBoxes: QueryList;\r\n @ContentChildren(DxTagBoxComponent) private ctlTagBoxes: QueryList;\r\n @ContentChildren(DxRadioGroupComponent) private ctlRadioGroup: QueryList;\r\n @ContentChildren(DxDropDownBoxComponent) private ctlDropDownBoxes: QueryList;\r\n\r\n public IsHide: boolean;\r\n public IsFocused: boolean;\r\n\r\n private m_bInitComplete: boolean;\r\n private m_bEventAttached: boolean;\r\n\r\n constructor(private customizationService: CustomizationService, private screen: ScreenService, public sanitizer: DomSanitizer) { }\r\n\r\n //Set template that highlights the typed in item, shows the value, and enables search by value\r\n private _Label: string;\r\n get Label(): string {\r\n return this._Label; \r\n }\r\n @Input() set Label(value: string) {\r\n const sPrev = this._Label;\r\n this._Label = value;\r\n if (this.m_bInitComplete) this.SetPlaceHolder(sPrev);\r\n }\r\n\r\n //Set placeholder\r\n private SetPlaceHolder(sPrev: string) {\r\n //Get relevant editor control\r\n const control = this.GetEditorControl();\r\n if (control == undefined) return;\r\n if (control instanceof DxCheckBoxComponent) {\r\n if (this.screen.IsMobile() && this.IsHideLabel == null) this.IsHideLabel = true;\r\n return;\r\n }\r\n if (control instanceof DxTextAreaComponent && control.stylingMode === 'outlined') {\r\n this.IsHideLabel = false;\r\n return;\r\n }\r\n\r\n //Handle cases when placeholder is set explicitely on the editor itself\r\n const sPlaceHolder = control.instance.option('placeholder');\r\n if (Utils.IsEmpty(sPlaceHolder) || sPlaceHolder == sPrev) control.instance.option('placeholder', this.Label);\r\n\r\n //Hide the label\r\n this.IsHideLabel = Utils.IsEmpty(control.instance.option(\"value\")) && Utils.IsEmpty(control.instance.option(\"mask\"));\r\n\r\n //Attach event\r\n if (!this.m_bEventAttached) {\r\n this.m_bEventAttached = true;\r\n control.instance.on('valueChanged', (e) => this.IsHideLabel = Utils.IsEmpty(e.value) && Utils.IsEmpty(control.instance.option(\"mask\")));\r\n control.instance.on('focusIn', (e) =>\r\n { \r\n this.IsHideLabel = false;\r\n this.IsFocused = true;\r\n });\r\n control.instance.on('focusOut', (e) =>\r\n {\r\n this.IsHideLabel = Utils.IsEmpty(e.component.option(\"value\")) && Utils.IsEmpty(control.instance.option(\"mask\"));\r\n this.IsFocused = false;\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.m_bInitComplete = true;\r\n setTimeout(() => this.SetPlaceHolder(this.Label), 300);\r\n }\r\n\r\n public SetFieldDefaultValue() {\r\n this.customizationService.SetFieldDefaultValue(this);\r\n }\r\n\r\n //Configures the customizations\r\n public SetFieldCustomizations() {\r\n this.customizationService.SetFieldCustomizations(this);\r\n }\r\n\r\n //Return the relevant control that we need to apply to\r\n GetEditorControl(): any {\r\n for (const controls of this.Controls()) {\r\n if (controls != undefined && controls.length == 1) return controls.first;\r\n }\r\n }\r\n\r\n //Return all control types\r\n protected Controls(): QueryList[] {\r\n return [\r\n this.ctlSelectBoxes,\r\n this.ctlTextBoxes,\r\n this.ctlTextAreas,\r\n this.ctlNumberBoxes,\r\n this.ctlDateBoxes,\r\n this.ctlCheckBoxes,\r\n this.ctlTagBoxes,\r\n this.ctlRadioGroup,\r\n this.ctlDropDownBoxes\r\n ];\r\n }\r\n\r\n}\r\n","export default \"
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { Component } from '@angular/core';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\n\r\n@Component({\r\n selector: 'm4u-fieldx',\r\n templateUrl: './fieldformx.component.html',\r\n styleUrls: ['./fieldformx.component.scss']\r\n})\r\nexport class FieldFormComponentX extends FieldFormComponent {\r\n\r\n}","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
{{Label}}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\";","import { AfterViewInit, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList, ChangeDetectionStrategy, \r\n ChangeDetectorRef, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\r\nimport { DxButtonComponent, DxSwitchComponent, DxCheckBoxComponent, DxDateBoxComponent, DxNumberBoxComponent, DxSelectBoxComponent, \r\n DxSliderComponent, DxTextAreaComponent, DxTextBoxComponent, DxDataGridComponent } from 'devextreme-angular';\r\nimport { Subscription } from 'rxjs';\r\nimport { SysEventsService } from '@core/framework/sysevents.service';\r\nimport { FieldDetailComponent } from '../field-detail/fielddetail.component';\r\nimport { FieldDetailComponentX } from '../field-detailx/fielddetailx.component';\r\nimport { FieldFormComponent } from '../field-form/fieldform.component';\r\nimport { FieldFormComponentX } from '../field-formx/fieldformx.component';\r\nimport { GridExtender } from '@base/grid/Grid.extender';\r\nimport { GridWrapperDirective } from '@base/grid/Grid.directive';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\n\r\n@Component({\r\n selector: 'm4u-section',\r\n templateUrl: './section.component.html',\r\n styleUrls: ['./section.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { '[class.section-with-shadow]': 'UseShadow' }\r\n})\r\nexport class SectionComponent implements AfterViewInit, OnInit, OnDestroy {\r\n @Input() Icon: string;\r\n @Input() Label: string;\r\n @Input() HideLabelOnMobile: boolean;\r\n @Input() Name: string;\r\n @Input() IsCollapsable: boolean;\r\n @Input() set IsCollapsed (value: boolean) {\r\n this.IsContentHidden = value;\r\n }\r\n @Input() Type: 'default' | 'outlined' = 'default';\r\n @Input() Style: 'light' | 'dark' = 'light';\r\n @Input() UseShadow: boolean;\r\n @Input() IsHideIcon: boolean;\r\n @Input() IsHeaderLink: boolean;\r\n @Output() OnHeaderClick = new EventEmitter();\r\n @Output() OnSectionToggle = new EventEmitter();\r\n\r\n IsContentHidden: boolean;\r\n\r\n private _visible: boolean;\r\n get visible(): boolean { \r\n return this._visible;\r\n }\r\n set visible(value: boolean) { \r\n this._visible = value; this.cdr.detectChanges();\r\n }\r\n\r\n @ContentChildren(DxSelectBoxComponent, { descendants: true }) private ctlSelectBoxes: QueryList;\r\n @ContentChildren(DxTextBoxComponent, { descendants: true }) private ctlTextBoxes: QueryList;\r\n @ContentChildren(DxTextAreaComponent, { descendants: true }) private ctlTextAreas: QueryList;\r\n @ContentChildren(DxNumberBoxComponent, { descendants: true }) private ctlNumberBoxes: QueryList;\r\n @ContentChildren(DxDateBoxComponent, { descendants: true }) private ctlDateBoxes: QueryList;\r\n @ContentChildren(DxCheckBoxComponent, { descendants: true }) private ctlCheckBoxes: QueryList;\r\n @ContentChildren(DxSliderComponent, { descendants: true }) private ctlSliders: QueryList;\r\n @ContentChildren(DxButtonComponent, { descendants: true }) private ctlButtons: QueryList;\r\n @ContentChildren(DxSwitchComponent, { descendants: true }) private ctlSwitches: QueryList;\r\n\r\n @ContentChildren(DxDataGridComponent, { descendants: true }) private grids: QueryList;\r\n //explicit grids that defined inside custom component\r\n @ContentChildren(GridWrapperDirective, { descendants: true }) private editableGrids: QueryList;\r\n\r\n\r\n //Fields\r\n @ContentChildren(FieldFormComponent, { descendants: true }) private fields1: QueryList;\r\n @ContentChildren(FieldFormComponentX, { descendants: true }) private fields2: QueryList;\r\n @ContentChildren(FieldDetailComponent, { descendants: true }) private fields3: QueryList;\r\n @ContentChildren(FieldDetailComponentX, { descendants: true }) private fields4: QueryList;\r\n\r\n @ViewChild('section') Section: ElementRef;\r\n\r\n private subscriptionOnSetDefaults: Subscription;\r\n constructor(public screen: ScreenService, private sysEvents: SysEventsService, private cdr: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.visible = true;\r\n this.subscriptionOnSetDefaults = this.sysEvents.OnSetDefaults.subscribe(x => {\r\n this.SetDefaultValues();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptionOnSetDefaults && this.subscriptionOnSetDefaults.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.SetCustomizations();\r\n }\r\n \r\n //Lock all controls on form\r\n public LockControls(bLock: boolean) {\r\n this.Controls().forEach(controls => controls.forEach(x => x.readOnly = bLock));\r\n if (bLock) this.Grids().forEach(x => {\r\n (x.grid.instance as any).option(\r\n {\r\n 'editing.allowAdding': false,\r\n 'editing.allowDeleting': false,\r\n 'editing.allowUpdating': false\r\n });\r\n });\r\n }\r\n\r\n //Accept changes - sync the grid with the bound entity\r\n public AcceptGridChanges(): Promise[] {\r\n return this.Grids().map(x => x.ValidateGrid());\r\n }\r\n\r\n\r\n //Apply customizations\r\n protected SetCustomizations() {\r\n this.Fields().forEach(fields => fields.forEach(x => x.SetFieldCustomizations()));\r\n }\r\n\r\n //Set default values for the fields\r\n public SetDefaultValues() {\r\n this.Fields().forEach(fields => fields.forEach(x => x.SetFieldDefaultValue()));\r\n }\r\n\r\n public ResetValidation() {\r\n\r\n this.Controls().forEach(controls => controls.forEach(x => {\r\n x.instance.option(\r\n {\r\n isValid: true,\r\n validationError: undefined,\r\n validationErrors: undefined,\r\n validationStatus: 'valid'\r\n });\r\n }));\r\n }\r\n\r\n protected Grids(): GridExtender[] {\r\n const arr: GridExtender[] = [];\r\n this.grids.forEach(grid => arr.push((grid as any).G));\r\n this.editableGrids.forEach(grid => arr.push((grid as any).G));\r\n return arr;\r\n }\r\n\r\n //Return all control types\r\n protected Controls(): QueryList[] {\r\n const arr =\r\n [\r\n this.ctlSelectBoxes,\r\n this.ctlTextBoxes,\r\n this.ctlTextAreas,\r\n this.ctlNumberBoxes,\r\n this.ctlDateBoxes,\r\n this.ctlCheckBoxes,\r\n this.ctlSliders,\r\n this.ctlButtons,\r\n this.ctlSwitches\r\n ];\r\n return arr;\r\n }\r\n\r\n //Return all fields\r\n protected Fields(): QueryList[] {\r\n const arr =\r\n [\r\n this.fields1,\r\n this.fields2,\r\n this.fields3,\r\n this.fields4\r\n ];\r\n return arr;\r\n }\r\n\r\n ToggleSection() {\r\n if (!this.IsCollapsable) {\r\n return;\r\n }\r\n\r\n this.IsContentHidden = !this.IsContentHidden;\r\n this.OnSectionToggle.emit(!this.IsContentHidden);\r\n if (!this.IsContentHidden) {\r\n setTimeout(() => this.ctlTextAreas.forEach(ta => ta.instance.repaint()));\r\n }\r\n }\r\n\r\n GetSectionClass() {\r\n return `section-${this.Type} section-${this.Style}`;\r\n }\r\n\r\n HeaderClick(event) {\r\n this.IsHeaderLink ? this.OnHeaderClick.emit(event) : this.ToggleSection();\r\n }\r\n}\r\n","export default \"\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
{{ GetPreviewTitle() || ( 'titlePreview' | RC ) }}
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n {{Title}}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","import { Component, ElementRef, HostListener, Input, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { BasePageComponent } from '@base/component/BasePageComponent';\r\nimport { BaseEntity, BaseState } from '@base/entities/BaseEntities';\r\nimport { AppConfigService } from '@configuration/app.config.service';\r\nimport { ScreenService } from '@core/framework/screen.service';\r\nimport { EnumApplicationMode, EnumPageDisplayModes, EnumScreenSizes, EnumWindowSizes, SysEnumsService } from '@core/framework/sysenums.enum';\r\nimport { ToolbarSettings } from '@m4u-angular/base/classes/BaseClasses';\r\nimport { BasePageCRUDComponent } from '@m4u-angular/base/component/BasePageCRUDComponent';\r\nimport { FrameworkService } from '@m4u-angular/core/framework/framework.service';\r\nimport { SysEventsService } from '@m4u-angular/core/framework/sysevents.service';\r\nimport { DxContextMenuComponent, DxPopupComponent, DxScrollViewComponent } from 'devextreme-angular';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'm4u-page',\r\n templateUrl: './pagelayout.component.html',\r\n styleUrls: ['./pagelayout.component.scss', '../page-filter/page-filter.component.scss']\r\n})\r\nexport class PageLayoutComponent implements OnInit, OnDestroy {\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n EscPress = (event: KeyboardEvent) => this.EscPressed(event);\r\n\r\n private _isPageButtonsVisible: boolean;\r\n private _pageToolbarSettings: ToolbarSettings;\r\n private _subscriptions: Subscription[] = [];\r\n\r\n IsPageSidePanelVisible: boolean;\r\n ShowPreview: boolean;\r\n PreviewPDFData: string | Blob;\r\n PreviewFileName: string;\r\n\r\n @ViewChild('pageHeader') pageHeader: ElementRef;\r\n @ViewChild('popup') popup: DxPopupComponent;\r\n @ViewChild('scroll') scroll: DxScrollViewComponent;\r\n @ViewChild('mnuViewModes') protected viewModesMenu: DxContextMenuComponent;\r\n\r\n constructor(public screen: ScreenService,\r\n private appConfigService: AppConfigService,\r\n public SysEnums: SysEnumsService,\r\n private sysEvents: SysEventsService,\r\n public screenService: ScreenService,\r\n private frameworkService: FrameworkService) {\r\n }\r\n\r\n @Input() public WindowHeight: EnumWindowSizes;\r\n @Input() public WindowWidth: EnumWindowSizes;\r\n @Input() public IsNoToolbar: boolean;\r\n @Input() public IsNoBodyScroll: boolean;\r\n @Input() public Class: string;\r\n @Input() public ShowScrollbar: string;\r\n @Input() ButtonsPosition: 'toolbar' | 'header' | 'header-title';\r\n @Input() Page: BasePageComponent;\r\n @Input() public ShowDialogAsWindow: boolean;\r\n @Input() public IsFooterHidden: boolean;\r\n @Input() public IsHeaderInBody: boolean;\r\n @Input() public IsHeaderCollapsed: boolean;\r\n\r\n @Input() SidePanelTemplate: TemplateRef;\r\n @Input() ToolbarButtonsBefore: TemplateRef;\r\n @Input() ToolbarButtonsCenter: TemplateRef;\r\n @Input() ToolbarButtonsAfter: TemplateRef;\r\n @Input() QuickFilters: TemplateRef;\r\n @Input() HeaderButtonsBefore: TemplateRef;\r\n @Input() HeaderButtonsAfter: TemplateRef;\r\n @Input() TitleButtons: TemplateRef;\r\n // \r\n @Input() PageBody: TemplateRef;\r\n @Input() SidePanelPosition: 'left' | 'right';\r\n @Input() HideSidePanelToggle: boolean;\r\n\r\n get ShowBreadBrumb() {\r\n return this.appConfigService.AppConfig.ShowBreadcrumb();\r\n }\r\n\r\n get Title() {\r\n return this._pageToolbarSettings?.Title;\r\n }\r\n\r\n IsShowViewModesButton() {\r\n return this._pageToolbarSettings?.ViewModes && this._pageToolbarSettings?.ViewModes.length;\r\n }\r\n\r\n get ViewModes() {\r\n return this._pageToolbarSettings?.ViewModes;\r\n }\r\n\r\n get ShowBackButton() {\r\n return this._pageToolbarSettings?.ShowBackButton;\r\n }\r\n\r\n ngOnInit() {\r\n this._subscriptions.push(this.sysEvents.Toolbar.subscribe((toolbarSettings: ToolbarSettings) => {\r\n if (!toolbarSettings || this.Page.ComponentName !== toolbarSettings.PageComponentName) return;\r\n\r\n this._pageToolbarSettings = toolbarSettings;\r\n\r\n if (!this.ButtonsPosition) {\r\n this.ButtonsPosition = this.Page.DisplayMode == EnumPageDisplayModes.Window\r\n || this.Page.DisplayMode == EnumPageDisplayModes.Dialog\r\n || this.Page instanceof BasePageCRUDComponent\r\n ? 'toolbar'\r\n : this.screen.IsDesktop() ? 'header' : 'header-title';\r\n }\r\n\r\n const contextMenuItems = toolbarSettings.OnGetContextMenuItems();\r\n this._isPageButtonsVisible = toolbarSettings.IsAllowFilter || toolbarSettings.IsAllowPrint || toolbarSettings.IsAllowExport\r\n || (contextMenuItems && contextMenuItems.length > 0);\r\n }));\r\n\r\n this._subscriptions.push(this.sysEvents.PageSidePanelState.subscribe(({ pageComponentName, state }) => {\r\n if (pageComponentName != this.Page.ComponentName) return;\r\n\r\n this.IsPageSidePanelVisible = state;\r\n }));\r\n\r\n this._subscriptions.push(this.sysEvents.PagePreviewState.subscribe(({ pageComponentName, state, data, fileName }) => {\r\n if (pageComponentName != this.Page.ComponentName) return;\r\n\r\n this.ShowPreview = state;\r\n this.PreviewPDFData = data;\r\n this.PreviewFileName = fileName;\r\n }));\r\n }\r\n\r\n GetPreviewTitle() {\r\n return this._pageToolbarSettings.OnGetPreviewTitle();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._subscriptions && this._subscriptions.forEach(x => x.unsubscribe());\r\n }\r\n\r\n IsHeaderEmpty() {\r\n return this.IsQuickFiltersEmpty && !this.HasContent(this.pageHeader) && !(this.IsMobileTitleVisible());\r\n }\r\n\r\n IsMobileTitleVisible() {\r\n return this.IsStandardApplicationMode() && this.screen.IsMobile() && this.Page.DisplayMode === EnumPageDisplayModes.FullScreen;\r\n }\r\n\r\n get IsQuickFiltersEmpty() {\r\n return !this.QuickFilters && !this.HeaderButtonsBefore && !this.HeaderButtonsAfter && \r\n (this.ButtonsPosition === 'toolbar' || this.ButtonsPosition === 'header-title' || !this._isPageButtonsVisible);\r\n }\r\n\r\n GetPageLoadingClass() {\r\n return this.Page.IsLoading ? 'page-is-loading' : '';\r\n }\r\n\r\n GetCustomClass() {\r\n return (this.Class || '') + ` ${this.Page.ComponentName}` + ` ${this.GetPageLoadingClass()}`;\r\n }\r\n\r\n GetDialogClass() {\r\n // eslint-disable-next-line max-len\r\n return `m4u-popup ${this.GetPopupWidthClass()} ${this.GetCustomClass()} ${this.Page.ShowDialogAsBottomSheet ? 'm4u-bottom-sheet' : 'm4u-dialog'}`;\r\n }\r\n\r\n GetDialogWidth() {\r\n return this.Page.ShowDialogAsBottomSheet ? '100%' : this.GetPopupSize(this.WindowWidth);\r\n }\r\n\r\n GetDialogHeight() {\r\n const height = this.Page.ShowDialogAsBottomSheet ? this.GetBottomSheetHeight(this.WindowHeight) : this.ShowDialogAsWindow\r\n ? '100%' : this.GetPopupSize(this.WindowHeight);\r\n\r\n const currentHeight = this.popup?.instance?.option('height');\r\n if (currentHeight === height) return currentHeight;\r\n\r\n this.popup?.instance?.option('height', height);\r\n return height;\r\n }\r\n\r\n GetDialogPosition() {\r\n return this.Page.ShowDialogAsBottomSheet ? 'bottom' : this.ShowDialogAsWindow ? this.GetPopupPosition() : 'center';\r\n }\r\n\r\n GetPopupSize(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '30%';\r\n case EnumWindowSizes.WindowSmall: return '40%';\r\n case EnumWindowSizes.WindowMedium: return '50%';\r\n case EnumWindowSizes.WindowLarge: return '75%';\r\n case EnumWindowSizes.WindowXLarge: return '90%';\r\n case EnumWindowSizes.WindowAutoSize: return this.WindowHeight == size ? 'auto' : '100%';\r\n }\r\n }\r\n\r\n GetBottomSheetHeight(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '95dvh';\r\n\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '50dvh';\r\n case EnumWindowSizes.WindowSmall: return '60dvh';\r\n case EnumWindowSizes.WindowMedium: return '70dvh';\r\n case EnumWindowSizes.WindowLarge: return '80dvh';\r\n case EnumWindowSizes.WindowXLarge: return '95dvh';\r\n case EnumWindowSizes.WindowAutoSize: return 'auto';\r\n }\r\n }\r\n\r\n GetWindowWidth(size: EnumWindowSizes) {\r\n if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n const previewSize = this.ShowPreview ? this.GetPreviewSize(size) : '0px';\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return `calc(${previewSize} + 30vw)`;\r\n case EnumWindowSizes.WindowSmall: return `calc(${previewSize} + 40vw)`;\r\n case EnumWindowSizes.WindowMedium: return `calc(${previewSize} + 50vw)`;\r\n case EnumWindowSizes.WindowLarge: return `calc(${previewSize} + 75vw)`;\r\n case EnumWindowSizes.WindowXLarge: return `calc(${previewSize} + 90vw)`;\r\n case EnumWindowSizes.WindowAutoSize: return '100%';\r\n }\r\n }\r\n\r\n GetPreviewSize(size: EnumWindowSizes) {\r\n switch (size) {\r\n case EnumWindowSizes.WindowXSmall: return '45vw';\r\n case EnumWindowSizes.WindowSmall: return '45vw';\r\n case EnumWindowSizes.WindowMedium: return '45vw';\r\n case EnumWindowSizes.WindowLarge: return '20vw';\r\n case EnumWindowSizes.WindowXLarge: return '10vw';\r\n case EnumWindowSizes.WindowAutoSize: return 0;\r\n }\r\n }\r\n\r\n GetPopupWidthClass() {\r\n switch (this.WindowWidth) {\r\n case EnumWindowSizes.WindowXSmall:\r\n case EnumWindowSizes.WindowSmall:\r\n return 'm4u-popup-small';\r\n case EnumWindowSizes.WindowMedium:\r\n return 'm4u-popup-medium';\r\n case EnumWindowSizes.WindowLarge:\r\n case EnumWindowSizes.WindowXLarge:\r\n return 'm4u-popup-large';\r\n case EnumWindowSizes.WindowAutoSize:\r\n return 'm4u-popup-auto';\r\n }\r\n }\r\n\r\n GetPopupPosition() {\r\n return this.screen.IsRTL() ? 'left top' : 'right top';\r\n }\r\n\r\n GetBottomSheetPosition() {\r\n return this.screen.IsRTL() ? 'right top' : 'left top';\r\n }\r\n\r\n GetPopupShowAnimation() {\r\n const direction = this.screen.IsRTL() ? 'left' : 'right';\r\n return { type: 'slideIn', direction: direction, duration: 150 };\r\n }\r\n\r\n GetPopupHideAnimation() {\r\n const direction = this.screen.IsRTL() ? 'left' : 'right';\r\n return { type: 'slideOut', direction: direction, duration: 150 };\r\n }\r\n\r\n GetBottomSheetShowAnimation() {\r\n return { type: 'slideIn', direction: 'bottom', duration: 150 };\r\n }\r\n\r\n GetBottomSheetHideAnimation() {\r\n return { type: 'slideOut', direction: 'bottom', duration: 150 };\r\n }\r\n\r\n //Returns whether current page should be shown as full screen\r\n //This is a major hub function that determines visibility of window and dialog (not so relevant to DisplayMode=FullScreen)\r\n //Basically:\r\n //DisplayMode=FullScreen - always rendered on full screen\r\n //DisplayMode=Window - rendered on full screen if screen is XSmall\r\n //DisplayMode=Dialog - rendered on full screen if screen is XSmall and the page itself is not of small dimensions.\r\n public IsShowAsFullScreen(): boolean {\r\n\r\n //Screen and current page sizes\r\n const bMobile: boolean = this.screen.IsMobile();\r\n const bSmallPage: boolean = (this.WindowHeight == EnumWindowSizes.WindowXSmall\r\n || this.WindowHeight == EnumWindowSizes.WindowSmall\r\n || this.WindowHeight == EnumWindowSizes.WindowAutoSize) && (this.WindowWidth == EnumWindowSizes.WindowXSmall);\r\n\r\n //No need for special classes if showing full screen, unless this is a mobile device\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.FullScreen) return true;\r\n\r\n //For window - show full screen or in window according to screen size. Use window dimensions\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.Window) return bMobile ? true : false;\r\n\r\n //For dialog - show always in partial view, unless this is a mobile device and the page is large\r\n if (this.Page.DisplayMode == EnumPageDisplayModes.Dialog) return false;//bMobile ? (bSmallPage ? false : true) : false;\r\n }\r\n\r\n public IsBodyWithScroll() {\r\n return !this.IsNoBodyScroll && (this.screen.IsDesktop() || this.screen.IsTablet() || this.Page.DisplayMode === EnumPageDisplayModes.Dialog);\r\n }\r\n\r\n OnPopupHiding(e) {\r\n e.cancel = true;\r\n this.Page.NavigateBack();\r\n }\r\n\r\n //Specify whether to render the toolbar\r\n public IsRenderToolbar(): boolean {\r\n return !this.IsNoToolbar && this.appConfigService.AppConfig.Mode !== EnumApplicationMode.IFrame;\r\n }\r\n\r\n IsStandardApplicationMode() {\r\n return this.appConfigService.AppConfig.Mode === EnumApplicationMode.Standard;\r\n }\r\n\r\n public IsShowNavbar() {\r\n return (this.Page.DisplayMode !== 'Dialog' && !(this.Page instanceof BasePageCRUDComponent) && this.screen.IsMobile())\r\n || ((this.Page as any).IsAllowNavbar && (this.Page as any).IsAllowNavbar());\r\n }\r\n\r\n OnSidePanelToggle() {\r\n this.IsPageSidePanelVisible = !this.IsPageSidePanelVisible;\r\n this.sysEvents.SetPageSidePanelState(this.Page.ComponentName, this.IsPageSidePanelVisible);\r\n }\r\n\r\n HasContent(content: any) {\r\n return content\r\n && (content.childElementCount !== undefined ? content.childElementCount > 0 : content.nativeElement.childElementCount > 0);\r\n }\r\n\r\n OnNavigateHomeOrSwitchMode() {\r\n if (this.IsShowViewModesButton()) {\r\n //Switch mode\r\n this.OnShowViewModes();\r\n } else {\r\n //Go to home route\r\n if (!this.IsStandardApplicationMode() || !this._pageToolbarSettings?.Page \r\n || this._pageToolbarSettings?.Page.DisplayMode != EnumPageDisplayModes.FullScreen) return;\r\n this.frameworkService.NavigateDefault();\r\n }\r\n }\r\n\r\n OnViewModesMenuClick(e) {\r\n this._pageToolbarSettings.Title = e.itemData.text;\r\n e.itemData.callback();\r\n }\r\n\r\n OnShowViewModes = () => {\r\n this.viewModesMenu.instance.show();\r\n };\r\n\r\n OnBack() {\r\n this._pageToolbarSettings.BackButtonClick();\r\n }\r\n\r\n EscPressed = (event: KeyboardEvent) => {\r\n const popupElement = this.GetPopupElement(event?.target as any);\r\n if (!popupElement?.classList?.contains(this.Page.ComponentName)) return;\r\n\r\n if (this.Page?.DisplayMode === EnumPageDisplayModes.Window || this.Page?.DisplayMode === EnumPageDisplayModes.Dialog) {\r\n this.Page.ClosePage();\r\n }\r\n };\r\n\r\n private GetPopupElement(el: Element) {\r\n if (!el) return null;\r\n if (el.classList.contains('m4u-popup')) return el;\r\n\r\n return this.GetPopupElement(el.parentElement);\r\n }\r\n\r\n // experimental\r\n // GetPopupSize(size: EnumWindowSizes) {\r\n // if (this.IsShowAsFullScreen()) return '100%';\r\n\r\n // const screenSize = this.screen.GetScreenSize();\r\n // //\r\n // console.log(screenSize);\r\n // //\r\n // if (screenSize === EnumScreenSizes.ScreenXSmall) return '90%';\r\n\r\n // switch (size) {\r\n // case EnumWindowSizes.WindowXSmall:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '60%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '50%' : '40%';\r\n // case EnumWindowSizes.WindowSmall:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '55%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '50%' : '5%';\r\n // case EnumWindowSizes.WindowMedium:\r\n // return (screenSize === EnumScreenSizes.ScreenSmall)\r\n // ? '70%'\r\n // : (screenSize === EnumScreenSizes.ScreenMedium) ? '60%' : '50%';\r\n // case EnumWindowSizes.WindowLarge: return '75%';\r\n // case EnumWindowSizes.WindowXLarge: return '90%';\r\n // case EnumWindowSizes.WindowAutoSize:\r\n\r\n // switch (screenSize) {\r\n // case EnumScreenSizes.ScreenSmall:\r\n // return '70%';\r\n // case EnumScreenSizes.ScreenMedium:\r\n // return '60%';\r\n // case EnumScreenSizes.ScreenLarge:\r\n // return '50%';\r\n // case EnumScreenSizes.ScreenXLarge:\r\n // return '40%';\r\n // }\r\n\r\n // //return this.WindowHeight == size ? 'auto' : '100%';\r\n // }\r\n // }\r\n}\r\n","var map = {\n\t\"./paymentpage/_app.config\": 44663\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 = 37836;"],"sourceRoot":"webpack:///","file":"main.954ffa03024885c78806.js"}