{"version":3,"sources":["webpack:///./app/containers/PermissionChecker/RedirectWithoutPermission.js","webpack:///./app/components/DateRangePicker/index.js","webpack:///./app/containers/UserActivity/constants.js","webpack:///./app/containers/UserActivity/reducer.js","webpack:///./app/containers/UserActivity/actions.js","webpack:///./app/containers/UserActivity/queries.js","webpack:///./app/containers/UserActivity/selectors.js","webpack:///./app/containers/UserActivity/sagas.js","webpack:///./app/containers/UserActivity/messages.js","webpack:///./app/containers/UserActivity/UserActivityBreadcrumb.js","webpack:///./app/containers/UserActivity/UserActivityFilterForm.js","webpack:///./app/containers/UserActivity/UserActivityFilterContainer.js","webpack:///./app/containers/UserActivity/UserActivityList.js","webpack:///./app/containers/UserActivity/index.js"],"names":["RedirectWithoutPermission","props","permissions","get","multiPermissions","hasAny","forEach","permission","userHasPermission","permissionName","resourceId","swimlanes","push","to","this","redirectWithoutPermission","Component","defaultProps","withConnect","connect","dispatch","bindActionCreators","compose","permissionChecker","DateRangePicker","startDate","endDate","formattedStartDate","format","FILTER_DATE_FORMAT","formattedEndDate","onChange","setState","state","moment","focusedInput","oldProps","style","padding","display","alignItems","justifyContent","noBorder","startDateId","endDateId","onFocusChange","onDatesChange","isOutsideRange","date","isAfter","endOf","displayFormat","React","FETCH_USER_ACTIVITY","SET_FILTER_VALUES","initialState","fromJS","allActionTypes","allEventNames","userActivity","loading","error","data","userActivityFilter","toDate","value","fromDate","subtract","userActivityReducer","handleActions","setIn","payload","activities","set","fetchUserActivity","createAction","fetchUserActivitySuccess","fetchUserActivityError","setFilterValues","USER_ACTIVITY_QUERY","gql","selectStateForThisPage","selectUserActivity","createSelector","selectUserActivityFilter","selectAllActionTypes","selectAllEventNames","userActivitySaga","getClient","client","select","filter","query","variables","response","path","_","Error","put","console","all","takeLatest","defineMessages","errorFetchingUserAcvitity","id","defaultMessage","filterFormApply","filterFormClose","filterFormTitle","filterFormReset","filterFormLabelDateRange","filterFormLabelEventName","filterFormLabelType","filterFormLabelUser","userActivityPageName","userManagmentPageName","UserAuditLogsBreadcrumb","Breadcrumb","TextLink","color","pathname","DynamicFormattedMessage","messages","FilterFormContainer","styled","div","FilterFormField","getEventNameOptions","map","label","initialStateFromProps","sonraiUsers","dateRange","getIn","users","srn","identity","user","toJS","actionTypes","actionType","eventNames","eventName","UserActvityFilterForm","useState","setDateRange","setUsers","setEventNames","setActionTypes","useEffect","className","onClick","resetInitialState","reduxInitialState","sonraiUsersLoading","SelectBar","isClearable","isMulti","placeholder","options","Object","values","toggleShowFilterPanel","Button","newFilterValue","length","at","actorSrn","toQueryFilters","AnchorIconContainer","mapStateToProps","createStructuredSelector","selectSonraiUsers","selectSonraiUsersLoading","themeable","hasFiltersApplied","isEqual","showFilterPanel","setShowFilterPanel","Popover","isOpen","onToggle","position","Icon","fa","name","theme","primary","styles","card","height","TableContainer","BarLoadingAnimation","SonraiBadge","UserActivityListBody","tableData","reverse","sortBy","activity","Map","createdDate","message","DataTable","autosize","customGridProps","groupUseEntireRow","customColumnConfig","valueGetter","params","stripTags","cellRendererFramework","UserWidget","table","hide","flex","minWidth","customFilter","UserActivityList","BorderedCard","SectionHeader","PageContainer","Helmet","title","UserActivityPage","withReducer","injectReducer","key","reducer","withSaga","injectSaga","saga"],"mappings":"87CAQO,IAAMA,0BAAb,qF,uJAAA,8I,KAAA,K,MAAA,qH,8FAAA,8B,MAS8B,WAC1B,IAAK,MAAKC,MAAMC,YAAYC,IAAI,WAC9B,GAAI,MAAKF,MAAMG,iBAAkB,CAC/B,IAAIC,QAAS,EACb,MAAKJ,MAAMG,iBAAiBE,SAAQ,SAAAC,YAEhC,MAAKN,MAAMO,kBAAkB,CAC3BC,eAAgBF,WAAWE,eAC3BC,WAAYH,WAAWG,WACvBC,UAAWJ,WAAWI,cAGxBN,QAAS,MAGRA,QACH,MAAKJ,MAAMW,KAAK,MAAKX,MAAMY,SAGP,MAAKZ,MAAMO,kBAAkB,CACjDC,eAAgB,MAAKR,MAAMQ,eAC3BC,WAAY,MAAKT,MAAMS,WACvBC,UAAW,MAAKV,MAAMU,aAGtB,MAAKV,MAAMW,KAAK,MAAKX,MAAMY,M,IAlCrC,+B,0GAAA,M,uCAAA,O,2UAAA,uC,YAAA,2B,WAAA,2CAEIC,KAAKC,8BAFT,2CAMID,KAAKC,8BANT,+BAyCI,OAAO,U,4GAzCX,2BAA+CC,8CA6C/ChB,0BAA0BiB,aAAe,CACvCJ,GAAI,uBA6BN,IAAMK,YAAcC,yDAAQ,MAAM,SAAAC,UAAQ,OACxCC,8DAAmB,CAAET,+DAAQQ,aAGhBE,yEACbC,sCACAL,YAFaI,CAGbtB,4B,8oECpFIwB,gB,2BACJ,yBAAYvB,OAAO,U,wBAAA,O,8HAAA,uB,KACjB,K,KAAA,2CAAMA,OAAN,O,8FADiB,8B,MAwBH,eAA4B,IAAzBwB,UAAyB,KAAzBA,UAAWC,QAAc,KAAdA,QACtBC,mBAAqBF,UACvBA,UAAUG,OAAOC,6CACjB,KAEEC,iBAAmBJ,QAAUA,QAAQE,OAAOC,6CAAsB,KAExE,MAAK5B,MAAM8B,SAAS,CAClBN,UAAWE,mBACXD,QAASI,mBAGX,MAAKE,SAAS,CACZP,oBACAC,oB,IAtCe,mB,0GAGjB,MAAKO,MAAQ,CACXR,UAAWxB,MAAMwB,UAAYS,oDAAOjC,MAAMwB,WAAa,KACvDC,QAASzB,MAAMyB,QAAUQ,oDAAOjC,MAAMyB,SAAW,KACjDS,aAAc,MANC,M,8eAUAC,UACbA,SAASX,YAAcX,KAAKb,MAAMwB,WACpCX,KAAKkB,SAAS,CACZP,UAAWX,KAAKb,MAAMwB,UAAYS,oDAAOpB,KAAKb,MAAMwB,WAAa,OAIjEW,SAASV,UAAYZ,KAAKb,MAAMyB,SAClCZ,KAAKkB,SAAS,CACZN,QAASZ,KAAKb,MAAMwB,UAAYS,oDAAOpB,KAAKb,MAAMyB,SAAW,S,+BAuB1D,gBACP,OACE,YACEW,MAAO,CACLC,QAAS,kCACTC,QAAS,OACTC,WAAY,SACZC,eAAgB,kBALpB,EAQE,KAAC,yDAAD,CACEC,UAAQ,EACRjB,UAAWX,KAAKmB,MAAMR,UACtBkB,YAAY,2BACZjB,QAASZ,KAAKmB,MAAMP,QACpBkB,UAAU,yBACVT,aAAcrB,KAAKmB,MAAME,aACzBU,cAAe,SAAAV,cAAY,OAAI,OAAKH,SAAS,CAAEG,6BAC/CW,cAAehC,KAAKgC,cACpBC,eAAgB,SAAAC,MAAI,OAAId,oDAAOc,MAAMC,QAAQf,sDAASgB,MAAM,SAC5DC,cAAe,sB,6HA/DKC,6CAAMpC,WA4ErBQ,uC,unBClFF6B,oBAAsB,kDAItBC,kBAAoB,gD,oKCOjC,IAgGaC,aAAeC,yBAAO,CACjCC,eAjGyB,CACzB,SACA,OACA,SACA,SACA,SACA,SA4FAC,cAzFwB,CACxB,YACA,sBACA,gCACA,+BACA,+BACA,+BACA,gCACA,iCACA,iCACA,iCACA,aACA,+BACA,kCACA,iBACA,gBACA,oBACA,mBACA,eACA,YACA,YACA,YACA,UACA,uBACA,uBACA,oBACA,sBACA,sBACA,sBACA,qCACA,qCACA,oBACA,oBACA,8BACA,8BACA,2BACA,SACA,YACA,iBACA,iBACA,YACA,YACA,eACA,sBACA,mBACA,iBACA,sBACA,qBACA,yBACA,6BACA,eACA,aACA,wBACA,iBACA,eACA,eACA,sBACA,mBACA,iBACA,gBACA,qBACA,sBACA,qBACA,yBACA,6BACA,eACA,aACA,wBACA,iBACA,eACA,eACA,mBACA,iBACA,sBACA,qBACA,yBACA,6BACA,eACA,aACA,wBACA,iBACA,eACA,gBACA,qBACA,yBAMAC,aAAc,CACZC,SAAS,EACTC,OAAO,EACPC,KAAM,MAERC,mBAAoB,CAElBC,OAAQ,CAAEC,MAAO/B,yBAASN,OAAO,eACjCsC,SAAU,CACRD,MAAO/B,yBAASiC,SAAS,EAAG,QAAQvC,OAAO,kBA4BlCwC,QAvBaC,yCAAa,kCAEpChB,qBAAsB,SAAApB,OAAK,OAC1BA,MACGqC,MAAM,CAAC,eAAgB,YAAY,GACnCA,MAAM,CAAC,eAAgB,UAAU,MALD,+BD1HA,yDCgIR,SAAArC,OAAK,OAChCA,MACGqC,MAAM,CAAC,eAAgB,YAAY,GACnCA,MAAM,CAAC,eAAgB,UAAU,MATD,+BD3HC,0DCqIR,SAACrC,MAAD,UAAUsC,QAAV,KAAUA,QAAV,OAC5BtC,MACGqC,MAAM,CAAC,eAAgB,YAAY,GACnCA,MAAM,CAAC,eAAgB,UAAU,GACjCA,MAAM,CAAC,eAAgB,QAASd,yBAAOe,QAAQC,gBAdf,+BAepClB,mBAAoB,SAACrB,MAAD,WAAUsC,QAAV,MAAUA,QAAV,OACnBtC,MACGwC,IAAI,qBAAsBjB,yBAAOe,UACjCD,MAAM,CAAC,eAAgB,YAAY,MAlBH,gBAoBvCf,c,+ICxIWmB,kBAAoBC,uCAAatB,qBACjCuB,yBAA2BD,uCFRE,0DES7BE,uBAAyBF,uCFRG,yDES5BG,gBAAkBH,uCAAarB,mB,gjBCTrC,IAAMyB,oB,0BAAsBC,GAAH,mBCC1BC,iCAAyB,SAAAhD,OAAK,OAAIA,MAAM9B,IAAI,eAAgBoD,eAErD2B,mBAAqBC,sBAChCF,kCACA,SAAAhD,OAAK,OAAIA,MAAM9B,IAAI,mBAGRiF,yBAA2BD,sBACtCF,kCACA,SAAAhD,OAAK,OAAIA,MAAM9B,IAAI,yBAGRkF,qBAAuBF,sBAClCF,kCACA,SAAAhD,OAAK,OAAIA,MAAM9B,IAAI,qBAGRmF,oBAAsBH,sBACjCF,kCACA,SAAAhD,OAAK,OAAIA,MAAM9B,IAAI,oB,gCCdXuE,yB,iCAsBAa,kBAtBV,SAAUb,0BAAV,gJAEmB,OAFnB,gCAEyBc,yBAFzB,OAGmB,OADTC,OAFV,8BAGyBC,kBAAON,0BAHhC,OAIqB,OADXO,OAHV,8BAI2BF,OAAOG,MAAM,CAClCA,MAAOb,oBACPc,UAAW,CAAEF,iBANnB,UAIUG,SAJV,cASUC,KAAO,CAAC,OAAQ,kBAAmB,SAEtB,QADbvB,WAAawB,iBAAE7F,IAAI2F,SAAUC,KAAM,OAV7C,8BAYY,IAAIE,MAAJ,iDAAoDF,OAZhE,QAcI,OAdJ,iBAcUG,kBAAItB,yBAAyB,CAAEJ,yBAdzC,uCAkBI,OAlBJ,+CAiBI2B,QAAQtC,MAAM,2CAAd,aAjBJ,iBAkBUqC,kBAAIrB,0BAlBd,mEAsBA,SAAUU,mBAAV,wGACE,OADF,iBACQa,kBAAI,CACRC,kBAAWhD,oBAAqBqB,yBAChC2B,kBAAW/C,kBAAmBoB,2BAHlC,sDAOea,I,mBAAAA,uB,wOCnCAe,4BAAe,CAC5BC,0BAA2B,CACzBC,GAAI,wDACJC,eAAgB,sDAElBC,gBAAiB,CACfF,GAAI,8CACJC,eAAgB,SAElBE,gBAAiB,CACfH,GAAI,8CACJC,eAAgB,SAElBG,gBAAiB,CACfJ,GAAI,8CACJC,eAAgB,WAElBI,gBAAiB,CACfL,GAAI,8CACJC,eAAgB,iBAElBK,yBAA0B,CACxBN,GAAI,uDACJC,eAAgB,cAElBM,yBAA0B,CACxBP,GAAI,kDACJC,eAAgB,cAElBO,oBAAqB,CACnBR,GAAI,kDACJC,eAAgB,eAElBQ,oBAAqB,CACnBT,GAAI,kDACJC,eAAgB,QAElBS,qBAAsB,CACpBV,GAAI,2CACJC,eAAgB,iBAElBU,sBAAuB,CACrBX,GAAI,oDACJC,eAAgB,oB,2uBCjCL,SAASW,0BACtB,OACE,KAACC,WAAA,EAAD,UACE,KAACA,WAAA,EAAD,UACE,KAACC,SAAA,EAAD,CACEC,MAAM,UACN1G,GAAI,CACF2G,SAAU,6BAHd,EAME,8BAACC,wBAAA,EAA4BC,SAASP,yBAG1C,KAACE,WAAA,EAAD,UACE,8BAACI,wBAAA,EAA4BC,SAASR,wB,25GCT9C,IAAMS,oBAAsBC,sCAAOC,IAAV,yCA8BnBC,gBAAkBF,sCAAOC,IAAV,oBAgCrB,SAASE,oBAAT,OACE,OAD8C,MAAjBrE,cACRsE,KAAI,SAAA/D,OAAK,MAAK,CACjCgE,MAAOhE,MACPA,MAAOA,UAyCX,SAASiE,sBAAT,OAAoE,IAAnCnE,mBAAmC,MAAnCA,mBAAoBoE,YAAe,MAAfA,YAC7CC,UAAY,CAChB3G,UAAWsC,mBAAmBsE,MAAM,CAAC,WAAY,UACjD3G,QAASqC,mBAAmBsE,MAAM,CAAC,SAAU,WAG3CC,MAAQ,KACRvE,mBAAmBsE,MAAM,CAAC,WAAY,aACxCC,MAAQvE,mBACLsE,MAAM,CAAC,WAAY,WACnBL,KAAI,SAAAO,KAAG,OAAIJ,YAAYhI,IAAIoI,QAC3B5C,OAAOK,iBAAEwC,UACTR,KAAI,SAAAS,MAAI,MAAK,CAAExE,MAAOwE,KAAKtI,IAAI,OAAQ8H,MAAOQ,KAAKtI,IAAI,YACvDuI,QAGL,IAAIC,YAAc,KACd5E,mBAAmBsE,MAAM,CAAC,aAAc,aAC1CM,YAAc5E,mBACXsE,MAAM,CAAC,aAAc,WACrBL,KAAI,SAAAY,YAAU,MAAK,CAClBX,MAAOW,WACP3E,MAAO2E,eAERF,QAGL,IAAIG,WAAa,KAWjB,OAVI9E,mBAAmBsE,MAAM,CAAC,YAAa,aACzCQ,WAAa9E,mBACVsE,MAAM,CAAC,YAAa,WACpBL,KAAI,SAAAc,WAAS,MAAK,CACjBb,MAAOa,UACP7E,MAAO6E,cAERJ,QAGE,CAAEN,oBAAWE,YAAOK,wBAAaE,uB,UAuEhC,2BAAC,gBAAD,IAhEK,SAASE,sBAAsB9I,OAAO,IAhGrD,MAdA,KAA0BkI,YA8G2B,0BACjBa,uBAAS,IADQ,GAC5CZ,UAD4C,cACjCa,aADiC,wCAEzBD,uBAAS,MAFgB,GAE5CV,MAF4C,cAErCY,SAFqC,wCAGfF,uBAAS,MAHM,GAG5CH,WAH4C,cAGhCM,cAHgC,wCAIbH,uBAAS,MAJI,GAI5CL,YAJ4C,cAI/BS,eAJ+B,cAuCnD,OAhCAC,yBAAU,WACR,IAAM9F,aAAe2E,sBAAsBjI,OAC3CgJ,aAAa1F,aAAa6E,WAC1Bc,SAAS3F,aAAa+E,OACtBc,eAAe7F,aAAaoF,aAC5BQ,cAAc5F,aAAasF,cAC1B,CAAC5I,MAAM8D,qBA2BR,2BAAC4D,oBAAD,UACE,kCAAK2B,UAAU,wBAAf,EACE,kCAAKA,UAAU,mBAAf,EACE,8BAAC7B,wBAAA,EAA4BC,SAASd,kBAExC,2BAACU,SAAA,EAAD,CAAUC,MAAM,UAAUgC,QA7BhC,WACE,IAAMC,kBAAoBtB,sB,kcAAsB,CAAD,GAC1CjI,MAD0C,CAE7C8D,mBAAoB0F,aAAkBtJ,IAAI,yBAE5C8I,aAAaO,kBAAkBpB,WAC/Bc,SAASM,kBAAkBlB,OAC3Bc,eAAeI,kBAAkBb,aACjCQ,cAAcK,kBAAkBX,mBAqB5B,EACE,8BAACpB,wBAAA,EAA4BC,SAASb,mBAG1C,2BAACiB,gBAAD,UACE,kCAAKwB,UAAU,oBAAf,EACE,8BAAC7B,wBAAA,EAA4BC,SAASZ,2BAExC,2BAACtF,gBAAA,EAAD,CACEO,SAAUkH,aACVxH,UAAW2G,UAAU3G,UACrBC,QAAS0G,UAAU1G,WAGvB,2BAACoG,gBAAD,UACE,kCAAKwB,UAAU,oBAAf,EACE,8BAAC7B,wBAAA,EAA4BC,SAAST,sBAEvChH,MAAMyJ,mBAAN,MAGC,2BAACC,UAAA,EAAD,CACEC,aAAW,EACXC,SAAO,EACPC,YAAY,eACZC,SApLZ,KAoLoC9J,MApLVkI,YAAe,KAAfA,YACjB6B,OAAOC,OACZ9B,YACGH,KAAI,SAAAS,MAAI,MAAK,CACZR,MAAOQ,KAAKtI,IAAI,QAChB8D,MAAOwE,KAAKtI,IAAI,WAEjBuI,SA8KKzE,MAAOqE,MACPvG,SAAUmH,YAIhB,2BAACpB,gBAAD,UACE,kCAAKwB,UAAU,oBAAf,EACE,8BAAC7B,wBAAA,EAA4BC,SAASX,2BAExC,2BAAC4C,UAAA,EAAD,CACEC,aAAW,EACXC,SAAO,EACPC,YAAY,sBACZC,QAAShC,oBAAoB9H,OAC7BgE,MAAO4E,WACP9G,SAAUoH,iBAGd,2BAACrB,gBAAD,UACE,kCAAKwB,UAAU,oBAAf,EACE,8BAAC7B,wBAAA,EAA4BC,SAASV,sBAExC,2BAAC2C,UAAA,EAAD,CACEC,aAAW,EACXC,SAAO,EACPC,YAAY,sBACZC,SAjMV,MAiMwC9J,MAjMU,MAAlBwD,eACRuE,KAAI,SAAA/D,OAAK,MAAK,CAClCgE,MAAOhE,MACPA,MAAOA,WA+LDA,MAAO0E,YACP5G,SAAUqH,kBAGd,kCAAKE,UAAU,2BAAf,EACE,2BAAChC,SAAA,EAAD,CACEgC,UAAU,eACVC,QAAStJ,MAAMiK,4BAFjB,EAIE,8BAACzC,wBAAA,EAA4BC,SAASf,kBAExC,2BAACwD,OAAA,EAAD,CAAQ5C,MAAM,UAAUgC,QAjF9B,WACE,IAAMa,eA1GV,gBAAuE,IAA7ChC,UAA6C,MAA7CA,UAAWE,MAAkC,MAAlCA,MAAOK,YAA2B,MAA3BA,YAAaE,WAAc,MAAdA,WACjD5E,MAAQ,CACZC,SAAU,CAAED,MAAOmE,UAAU3G,WAC7BuC,OAAQ,CAAEC,MAAOmE,UAAU1G,UAqB7B,OAlBIiH,aAAeA,YAAY0B,OAAS,IACtCpG,MAAM2E,WAAa,CACjBqB,OAAQtB,YAAYX,KAAI,SAAAsC,IAAE,OAAIA,GAAGrG,WAIjCqE,OAASA,MAAM+B,OAAS,IAC1BpG,MAAMsG,SAAW,CACfN,OAAQ3B,MAAMN,KAAI,SAAAS,MAAI,OAAIA,KAAKxE,WAI/B4E,YAAcA,WAAWwB,OAAS,IACpCpG,MAAM6E,UAAY,CAChBmB,OAAQpB,WAAWb,KAAI,SAAAc,WAAS,OAAIA,UAAU7E,WAI3CA,MAkFkBuG,CAAe,CACpCpC,oBACAE,YACAO,sBACAF,0BAEF1I,MAAM6E,gBAAgBsF,gBACtBnK,MAAMiK,+BAyEF,EACE,8BAACzC,wBAAA,EAA4BC,SAAShB,oB,8kECxPhD,IAAM+D,oBAAsB7C,sCAAOC,IAAV,8CAiDzB,I,oCAAM6C,gBAAkBC,sBAAyB,CAC/ClH,eAAgB4B,qBAChB3B,cAAe4B,oBACf6C,YAAayC,YACblB,mBAAoBmB,YACpB9G,mBAAoBqB,2BAMhBlE,YAAcC,oBAClBuJ,iBAJyB,SAAAtJ,UAAQ,OACjCC,8BAAmB,CAAEyD,iCAAmB1D,aAO3BE,4DACbJ,YACA4J,YAFaxJ,EA1DR,SAAqCrB,OAC1C,IAAM8K,mBAAqB/E,iBAAEgF,QAC3BvB,aAAkBtJ,IAAI,sBAAsBuI,OAC5CzI,MAAM8D,mBAAmB2E,QAHsB,qDAMHM,wBAAS,GANN,GAM1CiC,gBAN0C,cAMzBC,mBANyB,cAOjD,SAAShB,wBACPgB,oBAAoBD,iBAGtB,OACE,gCAACE,QAAA,EAAD,CACEC,OAAQH,gBACRI,SAAUnB,sBACVoB,SAAS,oBAHX,EAKE,gCAACH,QAAA,EAAD,UACE,gCAACV,oBAAD,UACE,gCAACc,KAAA,EAAD,CACEC,IAAE,EACFC,KAAMV,kBAAoB,eAAiB,SAC3C1I,MAAO,CACLkF,MAAOtH,MAAMyL,MAAMC,aAK3B,gCAACR,QAAA,EAAD,UACE,8BAACpC,sBAAD,YACM9I,MADN,CAEEiK,sBAAuBA,8B,wrCCjDjC,IAAM0B,OAAS,CACbC,KAAM,CACJC,OAAQ,SAqCZ,I,gCAAMC,eAAiBnE,sCAAOC,IAAV,mC,sBAUT,qBAACmE,oBAAA,EAAD,I,MAsCY,qBAACC,YAAA,EAAD,I,MAeN,qBAAC,yCAAD,IAvDV,SAASC,qBAAqBjM,OACnC,GAAIA,MAAM0D,aAAaxD,IAAI,WACzB,6BAGF,GAAIF,MAAM0D,aAAaxD,IAAI,SACzB,OACE,4BAAKmJ,UAAU,oCAAf,EACE,8BAAC7B,wBAAA,EAA4BC,SAASnB,4BAK5C,IAxCF,KAA2B5C,aAAcwE,YAwCjCgE,WAxCmBxI,cAA3B,KAwCoC1D,OAxCT0D,aAAcwE,YAAe,KAAfA,YAChCnC,iBAAEoG,QACPpG,iBAAEqG,OACA1I,aACGxD,IAAI,QACJuI,OACAV,KAAI,SAAAsE,UAAQ,MAAK,CAChB7D,KAAMN,YAAYhI,IAAImM,SAAS/B,SAAUgC,yBAAO7D,OAChDI,UAAWwD,SAASxD,UACpBF,WAAY0D,SAAS1D,WACrB4D,YAAaF,SAASE,YACtBC,QAASH,SAASG,QAClBlC,SAAU+B,SAAS/B,aAEvB,CAAC,kBA2BL,OACE,qBAACwB,eAAD,UACE,qBAACW,UAAA,EAAD,CACEC,UAAU,EACV7I,KAAMqI,UACNS,gBAAiB,CACfC,mBAAmB,GAErBC,mBAAoB,CAClBrE,KAAM,CACJsE,YAAa,SAAAC,QACX,OAAKA,OAAOlJ,KAILkJ,OAAOlJ,KAAK2E,KAAKgD,KACpBwB,uBAAUD,OAAOlJ,KAAK2E,KAAKgD,MAC3B,SALK,IAQXyB,sBAAuB,SAAAF,QACrB,OAAKA,OAAOlJ,KAIPkJ,OAAOlJ,KAAK2E,KAAKF,IAIf,qBAAC4E,WAAA,EAAD,CAAYC,OAAK,EAAC7E,IAAKyE,OAAOlJ,KAAK2E,KAAKF,MAH7C,MAJO,KAUbgC,SAAU,CACR8C,MAAM,GAERZ,QAAS,CACPa,KAAM,EACNC,SAAU,MAGdC,aAAc,WACZ,iBAWK,SAASC,iBAAiBxN,OACvC,OACE,qBAACyN,aAAA,EAAD,CAAcrL,MAAOuJ,OAAOC,WAA5B,EACE,qBAAC8B,cAAA,EAAD,UACE,8BAAClG,wBAAA,EAA4BC,SAASR,uBAExC,8BAACgF,qBAAyBjM,Q,00EC7GhC,IAAM2N,cAAgBhG,sCAAOC,IAAV,+B,iBAgBX,iBAACgG,OAAA,OAAD,CAAQC,MAAK,2B,kBACb,iBAAC9N,0BAAA,EAAD,CAA2BS,eAAe,eATrCsN,8BAAb,wD,8HAAA,iH,uCAAA,O,2UAAA,8B,YAAA,kB,WAAA,2CAEIjN,KAAKb,MAAMyE,sBAFf,+BAMI,OACE,iBAACkJ,cAAD,6CAGE,8BAAC,wBAA2B9M,KAAKb,OACjC,8BAACwN,iBAAqB3M,KAAKb,a,4GAXnC,kBAAsCe,iBA0BhC0J,6BAAkBC,sBAAyB,CAC/CxC,YAAayC,YACblB,mBAAoBmB,YACpBlH,aAAcuB,qBAYVhE,yBAAcC,oBAClBuJ,8BAVyB,SAAAtJ,UAAQ,OACjCC,8BACE,CACEqD,oCACA9D,sCAEFQ,aAQE4M,YAAcC,wBAAc,CAAEC,IAAK,eAAgBC,kBACnDC,SAAWC,qBAAW,CAAEH,IAAK,eAAgBI,KAAMA,QAE1ChN,+CACbJ,yBACA8M,YACAI,SAHa9M,CAIbyM","file":"35.259d0e2312880c233810.chunk.js","sourcesContent":["import { Component } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport permissionChecker from './index'\n\nexport class RedirectWithoutPermission extends Component {\n componentDidMount() {\n this.redirectWithoutPermission()\n }\n\n componentDidUpdate() {\n this.redirectWithoutPermission()\n }\n\n redirectWithoutPermission = () => {\n if (!this.props.permissions.get('loading')) {\n if (this.props.multiPermissions) {\n let hasAny = false\n this.props.multiPermissions.forEach(permission => {\n if (\n this.props.userHasPermission({\n permissionName: permission.permissionName,\n resourceId: permission.resourceId,\n swimlanes: permission.swimlanes,\n })\n ) {\n hasAny = true\n }\n })\n if (!hasAny) {\n this.props.push(this.props.to)\n }\n } else {\n const hasPermission = this.props.userHasPermission({\n permissionName: this.props.permissionName,\n resourceId: this.props.resourceId,\n swimlanes: this.props.swimlanes,\n })\n if (!hasPermission) {\n this.props.push(this.props.to)\n }\n }\n }\n }\n\n render() {\n return null\n }\n}\n\nRedirectWithoutPermission.defaultProps = {\n to: '/App/SolutionCenter',\n}\n\nRedirectWithoutPermission.propTypes = {\n permissions: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n }).isRequired,\n permissionName: PropTypes.string,\n resourceId: PropTypes.string,\n swimlanes: PropTypes.arrayOf(PropTypes.string),\n\n // if you have multiple permissions, passs it this bad boy\n multiPermissions: PropTypes.arrayOf(\n PropTypes.shape({\n permissionName: PropTypes.string,\n resourceId: PropTypes.string,\n swimlanes: PropTypes.arrayOf(PropTypes.string),\n })\n ),\n // path to redirect to\n to: PropTypes.string,\n\n // userHasPermission populated from permissionChecker hoc\n userHasPermission: PropTypes.func.isRequired,\n\n // ~ bound action creator ~\n push: PropTypes.func.isRequired,\n}\n\nconst withConnect = connect(null, dispatch =>\n bindActionCreators({ push }, dispatch)\n)\n\nexport default compose(\n permissionChecker,\n withConnect\n)(RedirectWithoutPermission)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { FILTER_DATE_FORMAT } from 'appConstants'\nimport moment from 'moment'\nimport { DateRangePicker as DateRangePickerLib } from 'react-dates'\n\nclass DateRangePicker extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n startDate: props.startDate ? moment(props.startDate) : null,\n endDate: props.endDate ? moment(props.endDate) : null,\n focusedInput: null,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.startDate !== this.props.startDate) {\n this.setState({\n startDate: this.props.startDate ? moment(this.props.startDate) : null,\n })\n }\n\n if (oldProps.endDate !== this.props.endDate) {\n this.setState({\n endDate: this.props.startDate ? moment(this.props.endDate) : null,\n })\n }\n }\n\n onDatesChange = ({ startDate, endDate }) => {\n const formattedStartDate = startDate\n ? startDate.format(FILTER_DATE_FORMAT)\n : null\n\n const formattedEndDate = endDate ? endDate.format(FILTER_DATE_FORMAT) : null\n\n this.props.onChange({\n startDate: formattedStartDate,\n endDate: formattedEndDate,\n })\n\n this.setState({\n startDate,\n endDate,\n })\n }\n\n render() {\n return (\n \n this.setState({ focusedInput })}\n onDatesChange={this.onDatesChange}\n isOutsideRange={date => moment(date).isAfter(moment().endOf('day'))}\n displayFormat={'MMMM D YYYY'}\n />\n \n )\n }\n}\n\nDateRangePicker.propTypes = {\n onChange: PropTypes.func.isRequired,\n startDate: PropTypes.string,\n endDate: PropTypes.string,\n}\n\nexport default DateRangePicker\n","export const FETCH_USER_ACTIVITY = `app/containers/UserActivity/FETCH_USER_ACTIVITY`\nexport const FETCH_USER_ACTIVITY_SUCCES = `app/containers/UserActivity/FETCH_USER_ACTIVITY_SUCCES`\nexport const FETCH_USER_ACTIVITY_ERROR = `app/containers/UserActivity/FETCH_USER_ACTIVITY_ERROR`\n\nexport const SET_FILTER_VALUES = `app/containers/UserActivity/SET_FILTER_VALUES`\n","import { fromJS } from 'immutable'\nimport moment from 'moment'\nimport { handleActions } from 'redux-actions'\n\nimport {\n FETCH_USER_ACTIVITY,\n FETCH_USER_ACTIVITY_SUCCES,\n FETCH_USER_ACTIVITY_ERROR,\n SET_FILTER_VALUES,\n} from './constants'\n\nvar hardcodedActionTypes = [\n 'Create',\n 'Read',\n 'Update',\n 'Delete',\n 'Assign',\n 'Login',\n]\n\nvar hardcodedEventNames = [\n 'UserLogin',\n 'CreatePolicyEvalLog',\n 'CreateControlFrameworkEvalLog',\n 'CreateCollectorConfiguration',\n 'UpdateCollectorConfiguration',\n 'DeleteCollectorConfiguration',\n 'DeleteCollectorConfigurations',\n 'CreateDataClassificationConfig',\n 'UpdateDataClassificationConfig',\n 'DeleteDataClassificationConfig',\n 'setMonitor',\n 'setChangeDetectionProperties',\n 'removeChangeDetectionProperties',\n 'resetLockState',\n 'setImportance',\n 'bulkSetImportance',\n 'bulkDismissAlert',\n 'dismissAlert',\n 'CreateBot',\n 'UpdateBot',\n 'DeleteBot',\n 'SyncBot',\n 'CreateBotAssignments',\n 'RemoveBotAssignments',\n 'UpdateSonraiUsers',\n 'CreateSonraiInvites',\n 'UpdateSonraiInvites',\n 'DeleteSonraiInvites',\n 'CreateSonraiPendingRoleAssignments',\n 'DeleteSonraiPendingRoleAssignments',\n 'CreateSonraiRoles',\n 'UpdateSonraiRoles',\n 'CreateSonraiRoleAssignments',\n 'DeleteSonraiRoleAssignments',\n 'UpdateSonraiCurrentUsers',\n 'AddTag',\n 'CreateTag',\n 'UpdateCdconfig',\n 'UpdateResource',\n 'UpdateTag',\n 'DeleteTag',\n 'CreateReport',\n 'CreateQueryvariable',\n 'CreateSavedquery',\n 'CreateSwimlane',\n 'CreateControlpolicy',\n 'CreateSolutioncard',\n 'CreateControlframework',\n 'CreatePlatformcloudaccount',\n 'CreateWidget',\n 'CreateList',\n 'CreatePlatformaccount',\n 'CreateSearchv2',\n 'CreateSearch',\n 'UpdateReport',\n 'UpdateQueryvariable',\n 'UpdateSavedquery',\n 'UpdateSwimlane',\n 'UpdateContent',\n 'UpdatePlatformuser',\n 'UpdateControlpolicy',\n 'UpdateSolutioncard',\n 'UpdateControlframework',\n 'UpdatePlatformcloudaccount',\n 'UpdateWidget',\n 'UpdateList',\n 'UpdatePlatformaccount',\n 'UpdateSearchv2',\n 'UpdateSearch',\n 'DeleteReport',\n 'DeleteSavedquery',\n 'DeleteSwimlane',\n 'DeleteControlpolicy',\n 'DeleteSolutioncard',\n 'DeleteControlframework',\n 'DeletePlatformcloudaccount',\n 'DeleteWidget',\n 'DeleteList',\n 'DeletePlatformaccount',\n 'DeleteSearchv2',\n 'DeleteSearch',\n 'CloneSwimlane',\n 'CloneControlpolicy',\n 'CloneControlframework',\n]\n\nexport const initialState = fromJS({\n allActionTypes: hardcodedActionTypes,\n allEventNames: hardcodedEventNames,\n userActivity: {\n loading: true,\n error: false,\n data: null,\n },\n userActivityFilter: {\n // default date range = 1 week\n toDate: { value: moment().format('YYYY-MM-DD') },\n fromDate: {\n value: moment().subtract(1, 'week').format('YYYY-MM-DD'),\n },\n },\n})\n\nconst userActivityReducer = handleActions(\n {\n [FETCH_USER_ACTIVITY]: state =>\n state\n .setIn(['userActivity', 'loading'], true)\n .setIn(['userActivity', 'error'], false),\n [FETCH_USER_ACTIVITY_ERROR]: state =>\n state\n .setIn(['userActivity', 'loading'], false)\n .setIn(['userActivity', 'error'], true),\n [FETCH_USER_ACTIVITY_SUCCES]: (state, { payload }) =>\n state\n .setIn(['userActivity', 'loading'], false)\n .setIn(['userActivity', 'error'], false)\n .setIn(['userActivity', 'data'], fromJS(payload.activities)),\n [SET_FILTER_VALUES]: (state, { payload }) =>\n state\n .set('userActivityFilter', fromJS(payload))\n .setIn(['userActivity', 'loading'], true),\n },\n initialState\n)\n\nexport default userActivityReducer\n","import {\n FETCH_USER_ACTIVITY,\n FETCH_USER_ACTIVITY_SUCCES,\n FETCH_USER_ACTIVITY_ERROR,\n SET_FILTER_VALUES,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const fetchUserActivity = createAction(FETCH_USER_ACTIVITY)\nexport const fetchUserActivitySuccess = createAction(FETCH_USER_ACTIVITY_SUCCES)\nexport const fetchUserActivityError = createAction(FETCH_USER_ACTIVITY_ERROR)\nexport const setFilterValues = createAction(SET_FILTER_VALUES)\n","import gql from 'graphql-tag'\n\nexport const USER_ACTIVITY_QUERY = gql`\n query fetchUserActivity($filter: SonraiAuditLogFilter) {\n SonraiAuditLogs(where: $filter) {\n items {\n srn\n resourceId\n type\n actorSrn\n createdDate\n resourceSrn\n actionType\n eventName\n message\n }\n }\n }\n`\n","import { createSelector } from 'reselect'\nimport { initialState } from './reducer'\n\nconst selectStateForThisPage = state => state.get('UserActivity', initialState)\n\nexport const selectUserActivity = createSelector(\n selectStateForThisPage,\n state => state.get('userActivity')\n)\n\nexport const selectUserActivityFilter = createSelector(\n selectStateForThisPage,\n state => state.get('userActivityFilter')\n)\n\nexport const selectAllActionTypes = createSelector(\n selectStateForThisPage,\n state => state.get('allActionTypes')\n)\n\nexport const selectAllEventNames = createSelector(\n selectStateForThisPage,\n state => state.get('allEventNames')\n)\n","import { all, put, select, takeLatest } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport { fetchUserActivitySuccess, fetchUserActivityError } from './actions'\nimport { FETCH_USER_ACTIVITY, SET_FILTER_VALUES } from './constants'\nimport { USER_ACTIVITY_QUERY } from './queries'\nimport { selectUserActivityFilter } from './selectors'\n\nfunction* fetchUserActivity() {\n try {\n const client = yield getClient()\n const filter = yield select(selectUserActivityFilter)\n const response = yield client.query({\n query: USER_ACTIVITY_QUERY,\n variables: { filter },\n })\n\n const path = ['data', 'SonraiAuditLogs', 'items']\n const activities = _.get(response, path, null)\n if (activities === null) {\n throw new Error(`response did not contain value at path ${path}`)\n }\n yield put(fetchUserActivitySuccess({ activities }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetching user activity', e)\n yield put(fetchUserActivityError())\n }\n}\n\nfunction* userActivitySaga() {\n yield all([\n takeLatest(FETCH_USER_ACTIVITY, fetchUserActivity),\n takeLatest(SET_FILTER_VALUES, fetchUserActivity),\n ])\n}\n\nexport default userActivitySaga\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n errorFetchingUserAcvitity: {\n id: 'app.containers.UserActivity.errorFetchingUserAcvitity',\n defaultMessage: 'There was an error fetching the user activity data',\n },\n filterFormApply: {\n id: 'app.containers.UserActivity.filterFormApply',\n defaultMessage: 'Apply',\n },\n filterFormClose: {\n id: 'app.containers.UserActivity.filterFormClose',\n defaultMessage: 'Close',\n },\n filterFormTitle: {\n id: 'app.containers.UserActivity.filterFormTitle',\n defaultMessage: 'Filters',\n },\n filterFormReset: {\n id: 'app.containers.UserActivity.filterFormReset',\n defaultMessage: 'Reset Filters',\n },\n filterFormLabelDateRange: {\n id: 'app.containers.UserActivity.filterFormLabelDateRange',\n defaultMessage: 'Date Range',\n },\n filterFormLabelEventName: {\n id: 'app.containers.UserActivity.filterFormEventName',\n defaultMessage: 'Event Name',\n },\n filterFormLabelType: {\n id: 'app.containers.UserActivity.filterFormLabelType',\n defaultMessage: 'Action Type',\n },\n filterFormLabelUser: {\n id: 'app.containers.UserActivity.filterFormLabelUser',\n defaultMessage: 'User',\n },\n userActivityPageName: {\n id: 'app.containers.UserActivity.userActivity',\n defaultMessage: 'User Activity',\n },\n userManagmentPageName: {\n id: 'app.containers.UserActivity.userManagmentPageName',\n defaultMessage: 'User Managment',\n },\n})\n","import React from 'react'\n\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\n\nimport messages from './messages'\n\n/**\n * this component has the breadcrumb users will see so they know where they are\n * and they can click on part of it to go back to where they were before\n */\nexport default function UserAuditLogsBreadcrumb() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nUserAuditLogsBreadcrumb.propTypes = {}\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport styled from 'styled-components'\n\nimport Button from 'components/Button'\nimport DateRangePicker from 'components/DateRangePicker'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SelectBar from 'components/SelectBar'\nimport { BlockShimmer } from 'components/ShimmerLoader'\nimport TextLink from 'components/TextLink'\n\nimport { initialState as reduxInitialState } from './reducer'\nimport messages from './messages'\n\n// this component has some styles for laying out the form\nconst FilterFormContainer = styled.div`\n padding: 0.5rem;\n width: 300px;\n\n & .title-container {\n align-items: center;\n display: flex;\n font-size: 0.9rem;\n justify-content: space-between;\n\n & .title-text {\n font-weight: 400;\n font-size: 1.1rem;\n }\n }\n\n & .controls-container {\n text-align: right;\n width: 100%;\n\n & .close-button {\n font-size: 0.9rem;\n cursor: pointer;\n color: #ababab;\n margin: 0rem 0.75rem 0rem 0rem;\n }\n }\n`\n\n// this component has some styles for a field in our form\nconst FilterFormField = styled.div`\n margin: 1rem 0rem;\n\n & .field-title {\n font-weight: 400;\n }\n`\n\n/**\n * take sonraiUsers from property and make a list of select options\n */\nfunction getUserOptions({ sonraiUsers }) {\n return Object.values(\n sonraiUsers\n .map(user => ({\n label: user.get('name'),\n value: user.get('srn'),\n }))\n .toJS()\n )\n}\n\n/**\n * take the allOptions data from property and make a list of select options\n */\nfunction getActionTypeOptions({ allActionTypes }) {\n return allActionTypes.map(value => ({\n label: value,\n value: value,\n }))\n}\n\nfunction getEventNameOptions({ allEventNames }) {\n return allEventNames.map(value => ({\n label: value,\n value: value,\n }))\n}\n\n/**\n * The values in the redux store have a bit different form than what works\n * nicely for this form, so we use this method to transform form values from\n * this component into redux form\n */\nfunction toQueryFilters({ dateRange, users, actionTypes, eventNames }) {\n const value = {\n fromDate: { value: dateRange.startDate },\n toDate: { value: dateRange.endDate },\n }\n\n if (actionTypes && actionTypes.length > 0) {\n value.actionType = {\n values: actionTypes.map(at => at.value),\n }\n }\n\n if (users && users.length > 0) {\n value.actorSrn = {\n values: users.map(user => user.value),\n }\n }\n\n if (eventNames && eventNames.length > 0) {\n value.eventName = {\n values: eventNames.map(eventName => eventName.value),\n }\n }\n\n return value\n}\n\n/**\n * The values in the redux store have a bit different form than what works\n * nicely for this form, so we use this method to transform redux values\n * into values for this form\n */\nfunction initialStateFromProps({ userActivityFilter, sonraiUsers }) {\n const dateRange = {\n startDate: userActivityFilter.getIn(['fromDate', 'value']),\n endDate: userActivityFilter.getIn(['toDate', 'value']),\n }\n\n let users = null\n if (userActivityFilter.getIn(['actorSrn', 'values'])) {\n users = userActivityFilter\n .getIn(['actorSrn', 'values'])\n .map(srn => sonraiUsers.get(srn))\n .filter(_.identity)\n .map(user => ({ value: user.get('srn'), label: user.get('name') }))\n .toJS()\n }\n\n let actionTypes = null\n if (userActivityFilter.getIn(['actionType', 'values'])) {\n actionTypes = userActivityFilter\n .getIn(['actionType', 'values'])\n .map(actionType => ({\n label: actionType,\n value: actionType,\n }))\n .toJS()\n }\n\n let eventNames = null\n if (userActivityFilter.getIn(['eventName', 'values'])) {\n eventNames = userActivityFilter\n .getIn(['eventName', 'values'])\n .map(eventName => ({\n label: eventName,\n value: eventName,\n }))\n .toJS()\n }\n\n return { dateRange, users, actionTypes, eventNames }\n}\n\n/**\n * this is the filter form component. it is displayed when the user clicks to\n * open the form popover\n */\nexport default function UserActvityFilterForm(props) {\n const [dateRange, setDateRange] = useState({})\n const [users, setUsers] = useState(null)\n const [eventNames, setEventNames] = useState(null)\n const [actionTypes, setActionTypes] = useState(null)\n\n // set the state for our form based on the current filter state from redux\n useEffect(() => {\n const initialState = initialStateFromProps(props)\n setDateRange(initialState.dateRange)\n setUsers(initialState.users)\n setActionTypes(initialState.actionTypes)\n setEventNames(initialState.eventNames)\n }, [props.userActivityFilter])\n\n // if the user clicks reset, use the initial redux state for this form\n function resetFilters() {\n const resetInitialState = initialStateFromProps({\n ...props,\n userActivityFilter: reduxInitialState.get('userActivityFilter'),\n })\n setDateRange(resetInitialState.dateRange)\n setUsers(resetInitialState.users)\n setActionTypes(resetInitialState.actionTypes)\n setEventNames(resetInitialState.eventNames)\n }\n\n // when they click apply, sync our form values with redux\n function onApply() {\n const newFilterValue = toQueryFilters({\n dateRange,\n users,\n eventNames,\n actionTypes,\n })\n props.setFilterValues(newFilterValue)\n props.toggleShowFilterPanel()\n }\n\n return (\n \n
\n
\n \n
\n \n \n \n
\n \n
\n \n
\n \n
\n \n
\n \n
\n {props.sonraiUsersLoading ? (\n \n ) : (\n \n )}\n
\n \n
\n \n
\n \n
\n \n
\n \n
\n \n
\n
\n \n \n \n \n
\n
\n )\n}\n\nUserActvityFilterForm.propTypes = {\n allActionTypes: ImmutablePropTypes.listOf(PropTypes.string),\n userActivityFilter: ImmutablePropTypes.map,\n setFilterValues: PropTypes.func,\n sonraiUsersLoading: PropTypes.bool,\n sonraiUsers: ImmutablePropTypes.map,\n toggleShowFilterPanel: PropTypes.func.isRequired,\n}\n","import React, { useState } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\n\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\n\nimport styled from 'styled-components'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport Icon from 'components/Icon'\nimport Popover, { PopoverBody, PopoverAnchor } from 'components/Popover'\n\nimport UserActvityFilterForm from './UserActivityFilterForm'\n\nimport { setFilterValues } from './actions'\n\nimport { initialState as reduxInitialState } from './reducer'\n\nimport {\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport {\n selectAllActionTypes,\n selectAllEventNames,\n selectUserActivityFilter,\n} from './selectors'\n\nconst AnchorIconContainer = styled.div`\n margin: 1rem 0rem 0rem 0.75rem;\n`\n\n/**\n * this is the form popover component with the icon to toggle if it is open\n */\nexport function UserActivityFilterContainer(props) {\n const hasFiltersApplied = !_.isEqual(\n reduxInitialState.get('userActivityFilter').toJS(),\n props.userActivityFilter.toJS()\n )\n\n const [showFilterPanel, setShowFilterPanel] = useState(false)\n function toggleShowFilterPanel() {\n setShowFilterPanel(!showFilterPanel)\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\nUserActivityFilterContainer.propTypes = {\n theme: themeShape,\n userActivityFilter: ImmutablePropTypes.map,\n}\n\nconst mapStateToProps = createStructuredSelector({\n allActionTypes: selectAllActionTypes,\n allEventNames: selectAllEventNames,\n sonraiUsers: selectSonraiUsers,\n sonraiUsersLoading: selectSonraiUsersLoading,\n userActivityFilter: selectUserActivityFilter,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators({ setFilterValues }, dispatch)\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n themeable\n)(UserActivityFilterContainer)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Map } from 'immutable'\nimport styled from 'styled-components'\n\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\nimport UserWidget from 'components/UserWidget'\nimport SonraiBadge from 'components/SonraiBadge'\n\nimport UserActivityFilterContainer from './UserActivityFilterContainer'\nimport messages from './messages'\nimport { stripTags } from 'utils/sonraiUtils'\n\nconst styles = {\n card: {\n height: '100%',\n },\n}\n\nconst propTypes = {\n push: PropTypes.func.isRequired,\n sonraiUsersLoading: PropTypes.bool,\n sonraiUsers: ImmutablePropTypes.map,\n userActivity: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n }),\n}\n\n/**\n * From the prop passed from parent, create something presentable for the table\n */\nfunction getDataForTable({ userActivity, sonraiUsers }) {\n return _.reverse(\n _.sortBy(\n userActivity\n .get('data')\n .toJS()\n .map(activity => ({\n user: sonraiUsers.get(activity.actorSrn, Map()).toJS(),\n eventName: activity.eventName,\n actionType: activity.actionType,\n createdDate: activity.createdDate,\n message: activity.message,\n actorSrn: activity.actorSrn,\n })),\n ['createdDate']\n )\n )\n}\n\nconst TableContainer = styled.div`\n /* do this otherwise the table hangs off bottom of card */\n height: calc(100% - 30px);\n`\n\n/**\n * this the body of the list, showing loading, error or table\n */\nexport function UserActivityListBody(props) {\n if (props.userActivity.get('loading')) {\n return \n }\n\n if (props.userActivity.get('error')) {\n return (\n
\n \n
\n )\n }\n\n const tableData = getDataForTable(props)\n return (\n \n {\n if (!params.data) {\n return ''\n }\n\n return params.data.user.name\n ? stripTags(params.data.user.name)\n : 'Sonrai'\n },\n // eslint-disable-next-line react/display-name\n cellRendererFramework: params => {\n if (!params.data) {\n return ''\n }\n\n if (!params.data.user.srn) {\n return \n }\n\n return \n },\n },\n actorSrn: {\n hide: true,\n },\n message: {\n flex: 1,\n minWidth: 700,\n },\n }}\n customFilter={() => {\n return \n }}\n />\n \n )\n}\nUserActivityListBody.propTypes = propTypes\n\n/**\n * This the main component with the layout and the title of the content\n */\nexport default function UserActivityList(props) {\n return (\n \n \n \n \n \n \n )\n}\nUserActivityList.propTypes = propTypes\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport styled from 'styled-components'\n\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { push } from 'connected-react-router'\nimport { createStructuredSelector } from 'reselect'\n\nimport injectSaga from 'utils/injectSaga'\nimport injectReducer from 'utils/injectReducer'\nimport reducer from './reducer'\nimport saga from './sagas'\n\nimport { Helmet } from 'react-helmet'\nimport RedirectWithoutPermission from 'containers/PermissionChecker/RedirectWithoutPermission'\nimport UserActivityBreadcrumb from './UserActivityBreadcrumb'\nimport UserActivityList from './UserActivityList'\n\nimport { fetchUserActivity } from './actions'\n\nimport {\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport { selectUserActivity } from './selectors'\n\nconst PageContainer = styled.div`\n padding: 1rem;\n height: calc(100vh - 60px /* header height */);\n display: grid;\n grid-template-rows: 1rem auto;\n grid-row-gap: 1rem;\n`\n\nexport class UserActivityPage extends Component {\n componentDidMount() {\n this.props.fetchUserActivity()\n }\n\n render() {\n return (\n \n \n \n \n \n \n )\n }\n}\n\nUserActivityPage.propTypes = {\n // ~ bound action creators ~\n fetchUserActivity: PropTypes.func.isRequired,\n push: PropTypes.func.isRequired,\n\n // ~ props from redux store ~\n userSelectors: ImmutablePropTypes.iterable,\n}\n\nconst mapStateToProps = createStructuredSelector({\n sonraiUsers: selectSonraiUsers,\n sonraiUsersLoading: selectSonraiUsersLoading,\n userActivity: selectUserActivity,\n})\n\nconst mapDispatchToProps = dispatch =>\n bindActionCreators(\n {\n fetchUserActivity,\n push,\n },\n dispatch\n )\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'UserActivity', reducer })\nconst withSaga = injectSaga({ key: 'UserActivity', saga: saga })\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga\n)(UserActivityPage)\n"],"sourceRoot":""}