{"version":3,"sources":["webpack:///./node_modules/reactstrap/es/FormGroup.js","webpack:///./node_modules/reactstrap/es/FormFeedback.js","webpack:///./node_modules/reactstrap/es/Form.js","webpack:///./app/containers/Escalation/messages.js","webpack:///./app/containers/Escalation/RuleDisplay.js","webpack:///./app/containers/Escalation/RuleInputs.js","webpack:///./app/containers/Escalation/DetailInputs.js","webpack:///./app/containers/Escalation/SwimlaneInputs.js","webpack:///./app/containers/Escalation/FilterInputs.js","webpack:///./app/containers/EscalationDetails/EditDetailsModal.js","webpack:///./app/containers/EscalationDetails/EditFiltersModal.js","webpack:///./app/containers/EscalationDetails/messages.js","webpack:///./app/containers/EscalationDetails/EditSwimlanesModal.js","webpack:///./app/containers/EscalationDetails/EditRulesModal.js","webpack:///./app/containers/EscalationDetails/index.js"],"names":["propTypes","children","node","row","bool","check","inline","disabled","tag","className","string","cssModule","object","FormGroup","props","Tag","attributes","classes","createElement","defaultProps","valid","tooltip","undefined","FormFeedback","validMode","innerRef","oneOfType","func","Form","_Component","_this","call","this","getRef","bind","submit","_proto","prototype","ref","render","_this$props","defineMessages","allEscalationTitle","id","defaultMessage","addEscalation","missingUser","disabledUser","missingBot","width","Icon","fa","name","mapStateToProps","createStructuredSelector","users","selectSonraiUsers","usersLoading","selectSonraiUsersLoading","bots","selectBots","withConnect","connect","compose","themeable","text","getMissingTooltip","srn","type","style","display","gridTemplateColumns","marginRight","color","fontWeight","fontStyle","Tooltip","trigger","anchor","UserWidget","table","tooltipContent","messages","rule","get","Math","floor","Hoverable","hoverStyle","backgroundColor","theme","highlight","cursor","renderContent","hovered","whiteSpace","overflowX","textOverflow","columnGap","bot","find","getIn","BotWidget","user","startCase","camelCase","getLink","canEdit","BorderlessButton","onClick","delete","roleOptions","value","label","unitOptions","Label","for","dispatch","bindActionCreators","fetchEscalationOptions","fetchPolicies","getBots","useEffect","isEmpty","filters","botOptions","length","setBotOptions","map","toJS","userOptions","setUserOptions","toList","useState","rules","List","selectedRules","setSelectedRules","addNew","setAddNew","newResolvedTime","setNewResolvedTime","newResolvedTimeValid","setNewResolvedTimeValid","newResolvedUnit","setNewResolvedUnit","newActionType","setNewActionType","newActionTarget","setNewActionTarget","test","clearNew","controlHeight","onChange","options","placeholder","renderBotSelect","renderUserSelect","loading","alignItems","justifyContent","renderRoleSelect","styles","empty","buttons","marginTop","addContainer","background","neutralLight","borderRadius","padding","gridTemplateRows","rowGap","topContainer","marginBottom","setRules","marginLeft","sortBy","index","splice","handleRemoveRule","fontSize","verticalAlign","lineHeight","height","Input","params","target","defaultValue","Object","keys","ACTION_TYPES","key","renderSelect","Button","escalateToBot","botSrn","assignUser","userSrn","assignRole","roleType","push","fromJS","actionType","triggerAfter","size","DetailInputs","hasTyped","setHasTyped","invalid","title","setTitle","setDescription","description","allSwimlanes","selectSwimlanes","permissionChecker","swimlanes","swombo","swimlane","sl","selectedSwimlanes","setSelectedSwimlanes","setSwimlanes","sw","swimlaneSRN","isMulti","filter","swim","userHasPermission","permissionName","FILTER_TYPES","policy","controlframework","property","access","activity","custom","all","filterTypeOptions","accessOptions","activityOptions","properties","selectEscalationFilterOptions","loadingProperties","selectEscalationFilterOptionsLoading","policies","selectPolicies","controlFrameworks","selectControlGroups","fetchingPolicies","selectFetchingPolicies","fetchingCFs","selectFetchingControlGroups","getKeyOption","controlFrameworkSrn","toLowerCase","op","selectStyles","option","data","success","policyOptions","setPolicyOptions","controlFrameworkOptions","setControlFrameworkOptions","cf","propertyOptions","setPropertyOptions","prop","allKeys","allTypes","ticketKey","ticketType","selectedFilters","setSelectedFilters","hasPolicyLabels","setHasPolicyLabels","hasCFLabels","setHasCFLabels","newType","setNewType","newKey","setNewKey","newAllKeys","setNewAllKeys","allTicketWarningOpen","setAllTicketWarningOpen","set","setFilters","addAllTicketType","closeButton","getAllKeyText","handleRemoveFilter","data-tip","data-for","place","effect","multiline","html","isDisabled","filteredOptions","renderCFSelect","getKeyLabel","checked","cfSrn","toggle","isOpen","ModalHeader","updatedTitle","setUpdatedTitle","updatedDescription","setUpdatedDescription","shouldClose","setShouldClose","saving","close","Modal","ModalBody","ModalFooter","TextLink","update","details","EditFiltersModal","updatedFilters","setUpdatedFilters","isDiff","FilterInputs","forEach","updated","add","remove","invalidSwimlaneEditErrorMessage","EditSwimlanesModal","updatedSwimlanes","setUpdatedSwimlanes","errorInvalidSwimlanes","SwimlaneInputs","DynamicFormattedMessage","requiredSwimlanes","valueSeq","swimbini","swimmy","to","pathname","search","qs","stringify","newTab","textAlign","join","s","swombini","getIsDifferent","updatedRules","setUpdatedRules","RuleInputs","CenterContent","SquareLoadingAnimation","Breadcrumb","EscalationDetails","setState","detailModalOpen","swimlaneModalOpen","clearErrorInvalidSwimlanes","filterModalOpen","ruleModalOpen","swombosis","ass","assignment","lane","keyParsed","typeParsed","match","escalations","getEscalations","container","margin","gridRowGap","headerTop","gridColumnGap","tableTop","maxHeight","overflow","group","state","parse","location","escalation","Map","canAssign","getFilterData","primary","BorderedCard","updatingError","Alert","SectionHeader","openDetailModal","outline","Expandable","openSwimlanelModal","swimlanesLoading","DataTable","fitAllRows","getSwimlaneData","autosize","customColumnConfig","flex","openFilterModal","openRuleModal","renderRules","updateEscalation","schemeSrn","updating","closeDetailModal","escaltion","closeSwimlanelModal","closeFilterModal","EditRulesModal","closeRuleModal","React","Component","selectEscalations","selectEscalationsLoading","selectSwimlanesLoading","selectUpdatingEscalation","selectUpdatingEscalationError","selectUpdatingEscalationInvalidSwimlaneForTickets","clearUpdateEscalationSwimlaneEditCustomTicketError"],"mappings":"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","file":"22.6a186c956c3429a93924.chunk.js","sourcesContent":["import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n inline: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'div'\n};\n\nvar FormGroup = function FormGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n row = props.row,\n disabled = props.disabled,\n check = props.check,\n inline = props.inline,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"row\", \"disabled\", \"check\", \"inline\", \"tag\"]);\n\n var classes = mapToCssModules(classNames(className, row ? 'row' : false, check ? 'form-check' : 'form-group', check && inline ? 'form-check-inline' : false, check && disabled ? 'disabled' : false), cssModule);\n\n if (Tag === 'fieldset') {\n attributes.disabled = disabled;\n }\n\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormGroup.propTypes = propTypes;\nFormGroup.defaultProps = defaultProps;\nexport default FormGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n valid: PropTypes.bool,\n tooltip: PropTypes.bool\n};\nvar defaultProps = {\n tag: 'div',\n valid: undefined\n};\n\nvar FormFeedback = function FormFeedback(props) {\n var className = props.className,\n cssModule = props.cssModule,\n valid = props.valid,\n tooltip = props.tooltip,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"valid\", \"tooltip\", \"tag\"]);\n\n var validMode = tooltip ? 'tooltip' : 'feedback';\n var classes = mapToCssModules(classNames(className, valid ? \"valid-\" + validMode : \"invalid-\" + validMode), cssModule);\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormFeedback.propTypes = propTypes;\nFormFeedback.defaultProps = defaultProps;\nexport default FormFeedback;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n inline: PropTypes.bool,\n tag: tagPropType,\n innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]),\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'form'\n};\n\nvar Form =\n/*#__PURE__*/\nfunction (_Component) {\n _inheritsLoose(Form, _Component);\n\n function Form(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.getRef = _this.getRef.bind(_assertThisInitialized(_this));\n _this.submit = _this.submit.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = Form.prototype;\n\n _proto.getRef = function getRef(ref) {\n if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n this.ref = ref;\n };\n\n _proto.submit = function submit() {\n if (this.ref) {\n this.ref.submit();\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n className = _this$props.className,\n cssModule = _this$props.cssModule,\n inline = _this$props.inline,\n Tag = _this$props.tag,\n innerRef = _this$props.innerRef,\n attributes = _objectWithoutPropertiesLoose(_this$props, [\"className\", \"cssModule\", \"inline\", \"tag\", \"innerRef\"]);\n\n var classes = mapToCssModules(classNames(className, inline ? 'form-inline' : false), cssModule);\n return React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n };\n\n return Form;\n}(Component);\n\nForm.propTypes = propTypes;\nForm.defaultProps = defaultProps;\nexport default Form;","/*\n * AppLayout Messages\n *\n * This contains all the text for the AppLayout component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n allEscalationTitle: {\n id: 'app.containers.Escalation.allEscalationTitle',\n defaultMessage: 'All Escalation Schemes',\n },\n addEscalation: {\n id: 'app.containers.Escalation.addEscalation',\n defaultMessage: 'Add Escalation',\n },\n missingUser: {\n id: 'app.containers.Escalation.missingUser',\n defaultMessage:\n 'User data failed to load or no longer exists. If user has been deleted the escalation rule will fail.',\n },\n disabledUser: {\n id: 'app.containers.Escalation.disabledUser',\n defaultMessage:\n 'User is disabled. If user is disabled the escalalation rule will fail.',\n },\n missingBot: {\n id: 'app.containers.Escalation.missingBot',\n defaultMessage:\n 'Bot data failed to load or no longer exists. If bot has been deleted the escalation rule will fail.',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { createStructuredSelector } from 'reselect'\nimport { connect } from 'react-redux'\nimport Hoverable from 'components/Hoverable'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport BotWidget from 'components/BotWidget'\nimport UserWidget from 'components/UserWidget'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { compose } from 'redux'\nimport { startCase, camelCase } from 'lodash'\nimport { FormattedMessage } from 'react-intl'\nimport {\n selectBots,\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport { TitleShimmer } from 'components/ShimmerLoader'\nimport Tooltip from 'components/Tooltip'\nimport messages from './messages'\n\nconst RuleDisplay = props => {\n const getMissingTooltip = (srn, type) => {\n if (type === 'bot') {\n return (\n \n \n {`Unavailable - ${srn}`}\n \n )\n }\n\n return (\n \n \n \n \n }\n tooltipContent={\n type === 'user' ? (\n \n ) : type === 'disabled' ? (\n \n ) : (\n \n )\n }\n />\n )\n }\n\n const getLink = () => {\n if (props.rule.get('actionType') === 'ESCALATE_TO_BOT') {\n if (props.bots.get('isLoading')) {\n return \n }\n const bot = props.bots\n .get('data')\n .find(\n bot =>\n bot.get('srn') === props.rule.getIn(['escalateToBot', 'botSrn'])\n )\n if (bot) {\n return \n } else {\n return getMissingTooltip(\n props.rule.getIn(['escalateToBot', 'botSrn']),\n bot\n )\n }\n }\n if (props.rule.get('actionType') === 'ASSIGN_USER') {\n if (props.usersLoading) {\n return \n }\n const user = props.users.get(props.rule.getIn(['assignUser', 'userSrn']))\n if (user) {\n if (user.get('isActive')) {\n return (\n \n )\n } else {\n return getMissingTooltip(\n props.rule.getIn(['assignUser', 'userSrn']),\n 'disabled'\n )\n }\n } else {\n return getMissingTooltip(\n props.rule.getIn(['assignUser', 'userSrn']),\n 'user'\n )\n }\n } else if (props.rule.get('actionType') === 'ASSIGN_ROLE') {\n return (\n \n {startCase(camelCase(props.rule.getIn(['assignRole', 'roleType'])))}\n \n )\n }\n }\n\n const getTypeMessage = () => {\n if (props.rule.get('actionType') === 'ESCALATE_TO_BOT') {\n return ' escalate to applicable bot '\n }\n if (props.rule.get('actionType') === 'ASSIGN_USER') {\n return ' escalate to user '\n } else if (props.rule.get('actionType') === 'ASSIGN_ROLE') {\n return ' escalate to role '\n }\n }\n\n const buildTimeMessage = () => {\n let text = ' after '\n if (props.rule.get('triggerAfter') < 86400) {\n text += `${Math.floor(props.rule.get('triggerAfter') / 3600)} hour(s)`\n } else {\n text += `${Math.floor(props.rule.get('triggerAfter') / 86400)} day(s)`\n }\n return text\n }\n\n const message = buildTimeMessage() + getTypeMessage()\n\n return (\n
\n (\n \n \n
\n If  not resolved\n
\n\n
{message}
\n \n {getLink()}\n
\n \n\n {hovered && props.canEdit && (\n \n \n \n )}\n \n )}\n />\n \n )\n}\n\nRuleDisplay.propTypes = {\n rule: ImmutableProptypes.map,\n bots: ImmutableProptypes.map,\n users: ImmutableProptypes.map,\n usersLoading: PropTypes.bool,\n delete: PropTypes.func,\n canEdit: PropTypes.bool,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n users: selectSonraiUsers,\n usersLoading: selectSonraiUsersLoading,\n bots: selectBots,\n})\n\nconst withConnect = connect(mapStateToProps, null)\n\nexport default compose(withConnect, themeable)(RuleDisplay)\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { bindActionCreators, compose } from 'redux'\nimport { Form, Input, FormGroup, Label } from 'reactstrap'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { fromJS, List } from 'immutable'\nimport Select from 'react-select'\nimport Icon from 'components/Icon'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport { getBots } from 'containers/SonraiData/actions'\nimport {\n selectBots,\n selectSonraiUsers,\n selectSonraiUsersLoading,\n} from 'containers/SonraiData/selectors'\nimport { fetchEscalationOptions } from 'containers/EscalationData/actions'\nimport { fetchPolicies } from 'containers/ControlFrameworkData/actions'\nimport RuleDisplay from './RuleDisplay'\nimport { ACTION_TYPES } from 'appConstants'\nimport { TitleShimmer } from 'components/ShimmerLoader'\n\nconst roleOptions = [\n { value: 'SYSTEM_ADMIN', label: 'System Admin' },\n { value: 'SWIMLANE_OWNER', label: 'Swimlane Owner' },\n]\n\nconst unitOptions = [\n { label: 'Hour(s)', value: 'hour' },\n { label: 'Day(s)', value: 'day' },\n]\n\nconst RuleInputs = props => {\n useEffect(() => {\n if (props.bots.get('data').isEmpty() && !props.bots.get('isLoading')) {\n props.getBots({ filters: {} })\n }\n }, [])\n\n useEffect(() => {\n if (botOptions.length < 1 && !props.bots.get('data').isEmpty()) {\n setBotOptions(\n props.bots\n .get('data')\n .map(bot => ({ label: bot.get('title'), value: bot.get('srn') }))\n .toJS()\n )\n }\n }, [props.bots])\n\n useEffect(() => {\n if (userOptions.length < 1 && !props.users.isEmpty()) {\n setUserOptions(\n props.users\n .map(user => ({\n label: user.get('name'),\n value: user.get('srn'),\n }))\n .toList()\n .toJS()\n )\n }\n })\n\n const [selectedRules, setSelectedRules] = useState(\n props.rules ? props.rules : List()\n )\n const [addNew, setAddNew] = useState(false)\n\n const [newResolvedTime, setNewResolvedTime] = useState(0)\n const [newResolvedTimeValid, setNewResolvedTimeValid] = useState(true)\n const [newResolvedUnit, setNewResolvedUnit] = useState(unitOptions[0])\n const [newActionType, setNewActionType] = useState(null)\n const [newActionTarget, setNewActionTarget] = useState(null)\n\n const [botOptions, setBotOptions] = useState([])\n const [userOptions, setUserOptions] = useState([])\n\n useEffect(() => {\n if (newResolvedTime) {\n if (/^\\d+$/.test(newResolvedTime)) {\n setNewResolvedTimeValid(true)\n } else {\n setNewResolvedTimeValid(false)\n }\n }\n }, [newResolvedTime])\n\n const clearNew = () => {\n setAddNew(false)\n setNewResolvedTime(0)\n setNewResolvedUnit(unitOptions[0])\n setNewActionType(null)\n setNewActionTarget(null)\n }\n\n const renderSelect = () => {\n switch (newActionType.value) {\n case 'ESCALATE_TO_BOT':\n return renderBotSelect()\n case 'ASSIGN_USER':\n return renderUserSelect(props.usersLoading)\n case 'ASSIGN_ROLE':\n return renderRoleSelect()\n }\n }\n\n const renderBotSelect = () => {\n return (\n
\n \n \n
\n )\n }\n\n const renderUserSelect = loading => {\n return (\n
\n \n {loading ? (\n \n \n
\n ) : (\n \n )}\n \n )\n }\n\n const renderRoleSelect = () => {\n return (\n
\n \n \n
\n )\n }\n\n const styles = {\n addNew: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n empty: {\n fontWeight: 400,\n fontStyle: 'italic',\n },\n buttons: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n marginTop: '1em',\n columnGap: '1em',\n },\n addContainer: {\n background: props.theme.neutralLight,\n borderRadius: '0.25em',\n padding: '0.5em',\n marginTop: '1em',\n display: 'grid',\n gridTemplateRows: 'auto auto auto',\n rowGap: '1em',\n },\n topContainer: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n marginBottom: '1em',\n },\n }\n\n const handleRemoveRule = index => {\n setSelectedRules(selectedRules.splice(index, 1))\n }\n\n const handleAddRule = () => {\n let target = {}\n switch (newActionType.value) {\n case 'ESCALATE_TO_BOT':\n target.escalateToBot = {\n botSrn: newActionTarget.value,\n }\n break\n case 'ASSIGN_USER':\n target.assignUser = {\n userSrn: newActionTarget.value,\n }\n break\n case 'ASSIGN_ROLE':\n target.assignRole = {\n roleType: newActionTarget.value,\n }\n break\n }\n setSelectedRules(\n selectedRules.push(\n fromJS({\n actionType: newActionType.value,\n triggerAfter:\n newResolvedUnit.value === 'hour'\n ? newResolvedTime * 3600\n : newResolvedTime * 86400,\n ...target,\n })\n )\n )\n clearNew()\n }\n\n useEffect(() => {\n props.setRules(selectedRules)\n }, [selectedRules])\n\n useEffect(() => {\n if (!props.canEdit) {\n setSelectedRules(props.rules ? props.rules : List())\n }\n }, [props.rules])\n\n return (\n
\n \n
\n
\n {selectedRules.isEmpty() ? 'No Rules Assigned' : 'Rules Assigned'}\n
\n
\n {!addNew && props.canEdit && (\n setAddNew(true)} color=\"primary\">\n New Rule\n \n \n )}\n
\n
\n {selectedRules\n .sortBy(rule => rule.get('triggerAfter'))\n .map((rule, index) => {\n return (\n
\n {!props.bots.get('data').isEmpty() &&\n !props.bots.get('isLoading') ? (\n handleRemoveRule(index)}\n canEdit={props.canEdit}\n rule={rule}\n />\n ) : (\n \n )}\n
\n )\n })}\n\n {addNew && (\n
\n
\n
\n \n {\n setNewResolvedTime(params.target.value)\n }}\n type=\"number\"\n defaultValue={0}\n />\n
\n
\n \n \n
\n
\n
\n
\n \n {\n setNewActionType(params)\n setNewActionTarget(null)\n }}\n options={Object.keys(ACTION_TYPES).map(key => ({\n value: key,\n label: ACTION_TYPES[key],\n }))}\n placeholder=\"Select an Action...\"\n />\n
\n
\n {newActionType && renderSelect()}\n
\n
\n\n
\n \n Add\n \n \n
\n \n Close\n \n
\n
\n
\n )}\n
\n
\n )\n}\n\nRuleInputs.propTypes = {\n rules: ImmutableProptypes.list,\n usersLoading: PropTypes.bool,\n setRules: PropTypes.func,\n getBots: PropTypes.func,\n users: ImmutableProptypes.map,\n canEdit: PropTypes.bool,\n bots: ImmutableProptypes.map,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n users: selectSonraiUsers,\n usersLoading: selectSonraiUsersLoading,\n bots: selectBots,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n fetchEscalationOptions,\n fetchPolicies,\n getBots,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, themeable)(RuleInputs)\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Form, FormFeedback, Input, FormGroup, Label } from 'reactstrap'\n\nconst styles = {\n label: { fontWeight: 400, fontStyle: 'italic' },\n}\nconst DetailInputs = props => {\n const [hasTyped, setHasTyped] = useState(false)\n return (\n
\n \n \n {\n props.setTitle(params.target.value)\n setHasTyped(true)\n }}\n value={props.title}\n />\n Enter an Escalation title.\n \n \n \n {\n props.setDescription(params.target.value)\n setHasTyped(true)\n }}\n value={props.description}\n />\n \n
\n )\n}\n\nDetailInputs.propTypes = {\n title: PropTypes.string,\n description: PropTypes.string,\n setTitle: PropTypes.func,\n setDescription: PropTypes.func,\n}\n\nexport default DetailInputs\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { connect } from 'react-redux'\nimport { Form, FormGroup, Label } from 'reactstrap'\nimport Select from 'react-select'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\nimport { fromJS } from 'immutable'\nimport permissionChecker from 'containers/PermissionChecker'\n\nconst findLabel = (srn, swimlanes) => {\n const swimlane = swimlanes.find(sl => sl.get('srn') === srn)\n if (swimlane) {\n return swimlane.get('title')\n } else {\n return srn\n }\n}\n\nconst styles = {\n label: {\n fontWeight: 400,\n fontStyle: 'italic',\n },\n}\n\nconst SwimlaneInputs = props => {\n const [selectedSwimlanes, setSelectedSwimlanes] = useState(\n props.swimlanes\n ? props.swimlanes\n .map(swombo => ({\n label: findLabel(swombo.get('swimlaneSRN'), props.allSwimlanes),\n value: swombo.get('swimlaneSRN'),\n }))\n .toJS()\n : []\n )\n\n useEffect(() => {\n props.setSwimlanes(\n fromJS(\n selectedSwimlanes\n ? selectedSwimlanes.map(sw => ({ swimlaneSRN: sw.value }))\n : null\n )\n )\n }, [selectedSwimlanes])\n\n const handleChangeSwimlanes = params => {\n setSelectedSwimlanes(params)\n }\n\n const getOptions = () => {\n return props.allSwimlanes\n .toList()\n .filter(swim => {\n return props.userHasPermission({\n permissionName: 'assign.escalations',\n swimlanes: [swim.get('srn')],\n })\n })\n .map(swombo => ({\n value: swombo.get('srn'),\n label: swombo.get('title'),\n }))\n .toJS()\n }\n\n return (\n
\n \n \n \n \n
\n )\n}\n\nSwimlaneInputs.propTypes = {\n allSwimlanes: ImmutableProptypes.map,\n setSwimlanes: PropTypes.func,\n userHasPermission: PropTypes.func.isRequired,\n swimlanes: ImmutableProptypes.list,\n}\n\nconst mapStateToProps = createStructuredSelector({\n allSwimlanes: selectSwimlanes,\n})\n\nconst withConnect = connect(mapStateToProps, null)\n\nexport default compose(withConnect, permissionChecker)(SwimlaneInputs)\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { bindActionCreators, compose } from 'redux'\nimport {\n Form,\n Input,\n FormGroup,\n Label,\n Modal,\n ModalHeader,\n ModalBody,\n} from 'reactstrap'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { fromJS, List } from 'immutable'\nimport Select from 'react-select'\nimport Icon from 'components/Icon'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport Hoverable from 'components/Hoverable'\nimport ReactTooltip from 'react-tooltip'\nimport {\n selectEscalationFilterOptions,\n selectEscalationFilterOptionsLoading,\n} from 'containers/EscalationData/selectors'\nimport {\n selectPolicies,\n selectControlGroups,\n selectFetchingPolicies,\n selectFetchingControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport { fetchEscalationOptions } from 'containers/EscalationData/actions'\nimport { startCase } from 'lodash'\nimport { TitleShimmer } from 'components/ShimmerLoader'\n\nconst FILTER_TYPES = {\n policy: 'Control Policy',\n controlframework: 'Control Framework',\n property: 'Property Change',\n access: 'Access',\n activity: 'Activity',\n custom: 'Custom Ticket',\n all: 'Enable All',\n}\n\nconst filterTypeOptions = Object.keys(FILTER_TYPES).map(key => ({\n value: key,\n label: FILTER_TYPES[key],\n}))\n\n// Access -> Has permission to, Actionable by\nconst accessOptions = [\n { value: 'hasPermissionTo', label: 'Has Permission To' },\n { value: 'actionableBy', label: 'Actionable By' },\n]\n// Activity -> Accessed from, Accessed using\nconst activityOptions = [\n { value: 'accessedFrom', label: 'Accessed From' },\n { value: 'accessedUsing', label: 'Accessed Using' },\n]\n\nconst getKeyText = keys => {\n return `Key: ${keys.get('label')}`\n}\n\nconst FilterInputs = props => {\n const getKeyOption = (type, key, controlFrameworkSrn) => {\n const lowerType = type ? type.toLowerCase() : ''\n switch (lowerType) {\n case 'policy':\n return {\n value: key,\n label: controlFrameworkSrn\n ? props.controlFrameworks.getIn(\n [controlFrameworkSrn, 'title'],\n controlFrameworkSrn\n )\n : props.policies.getIn([key, 'title'], key),\n }\n case 'property':\n return {\n value: key,\n label: startCase(key),\n }\n case 'access':\n return {\n value: key,\n label: accessOptions.find(op => op.value === key)\n ? accessOptions.find(op => op.value === key).label\n : '',\n }\n case 'activity':\n return {\n value: key,\n label: activityOptions.find(op => op.value === key)\n ? activityOptions.find(op => op.value === key).label\n : '',\n }\n case 'custom':\n return {\n value: key,\n label: key,\n }\n }\n }\n\n const selectStyles = {\n option: (styles, { data }) => {\n return {\n ...styles,\n // backgroundColor:\n // data.value === 'ALL' ? props.theme.success : 'inherited',\n color: data.value === 'all' ? props.theme.success : 'inherited',\n ':hover': {\n backgroundColor: '#B2D4FF',\n },\n }\n },\n }\n\n const buildOptionsOnMount = filters => {\n return fromJS(\n filters.toJS().map(filter => ({\n allKeys: filter.allKeys,\n allTypes: filter.allTypes,\n ticketKey: getKeyOption(\n filter.ticketType,\n filter.ticketKey,\n filter.controlFrameworkSrn\n ),\n ticketType: {\n value: filter.ticketType,\n label:\n FILTER_TYPES[\n filter.ticketType ? filter.ticketType.toLowerCase() : ''\n ],\n },\n controlFrameworkSrn: filter.controlFrameworkSrn,\n }))\n )\n }\n\n useEffect(() => {\n if (props.properties.isEmpty() && !props.loadingProperties) {\n props.fetchEscalationOptions()\n }\n }, [])\n\n useEffect(() => {\n if (\n !policyOptions &&\n !props.policies.isEmpty() &&\n !props.fetchingPolicies\n ) {\n setPolicyOptions(\n props.policies\n .map(policy => ({\n value: policy.get('srn'),\n label: policy.get('title'),\n }))\n .toList()\n .toJS()\n )\n }\n if (\n !controlFrameworkOptions &&\n !props.controlFrameworks.isEmpty() &&\n !props.fetchingCFs\n ) {\n setControlFrameworkOptions(\n props.controlFrameworks\n .map(cf => ({\n value: cf.get('srn'),\n label: cf.get('title'),\n }))\n .toList()\n .toJS()\n )\n }\n if (\n !propertyOptions &&\n !props.properties.isEmpty() &&\n !props.loadingProperties\n ) {\n setPropertyOptions(\n props.properties\n .map(prop => ({\n value: prop.get('keyName'),\n label: startCase(prop.get('keyName')),\n }))\n .toJS()\n )\n }\n })\n\n const [selectedFilters, setSelectedFilters] = useState(\n buildOptionsOnMount(props.filters ? props.filters : List())\n )\n const [hasPolicyLabels, setHasPolicyLabels] = useState(false)\n const [hasCFLabels, setHasCFLabels] = useState(false)\n const [addNew, setAddNew] = useState(false)\n\n const [newType, setNewType] = useState(null)\n const [newKey, setNewKey] = useState('')\n const [newAllKeys, setNewAllKeys] = useState(false)\n\n const [policyOptions, setPolicyOptions] = useState(null)\n const [controlFrameworkOptions, setControlFrameworkOptions] = useState(null)\n const [propertyOptions, setPropertyOptions] = useState(null)\n\n const [allTicketWarningOpen, setAllTicketWarningOpen] = useState(false)\n\n useEffect(() => {\n if (\n (!props.policies.isEmpty() &&\n !props.fetchingPolicies &&\n !hasPolicyLabels) ||\n (!props.controlFrameworks.isEmpty() && !props.fetchingCFs && !hasCFLabels)\n ) {\n setSelectedFilters(\n selectedFilters.map(filter => {\n if (\n filter.getIn(['ticketType', 'value'], '').toLowerCase() === 'policy'\n ) {\n return filter.set(\n 'ticketKey',\n fromJS(\n getKeyOption(\n filter.getIn(['ticketType', 'value']),\n filter.getIn(['ticketKey', 'value']),\n filter.get('controlFrameworkSrn')\n )\n )\n )\n } else {\n return filter\n }\n })\n )\n if (\n !props.policies.isEmpty() &&\n !props.fetchingPolicies &&\n !hasPolicyLabels\n ) {\n setHasPolicyLabels(true)\n }\n if (\n !props.controlFrameworks.isEmpty() &&\n !props.fetchingCFs &&\n !hasCFLabels\n ) {\n setHasCFLabels(true)\n }\n }\n }, [props.fetchingPolicies, props.fetchingCFs])\n\n useEffect(() => {\n props.setFilters(\n fromJS(\n selectedFilters\n .map(filter => ({\n allKeys: filter.get('allKeys'),\n ticketKey: filter.get('ticketKey'),\n ticketType: startCase(filter.getIn(['ticketType', 'value'])),\n allTypes: filter.get('allTypes'),\n controlFrameworkSrn: filter.get('controlFrameworkSrn'),\n }))\n .toJS()\n )\n )\n }, [selectedFilters])\n\n useEffect(() => {\n if (newType && newType.value === 'all' && !allTicketWarningOpen) {\n setAddNew(false)\n clearNew()\n if (selectedFilters.isEmpty()) {\n addAllTicketType()\n } else {\n setAllTicketWarningOpen(true)\n }\n }\n }, [newType])\n\n const styles = {\n addNew: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n empty: {\n fontWeight: 400,\n fontStyle: 'italic',\n },\n topContainer: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n marginBottom: '1em',\n },\n closeButton: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n marginTop: '1em',\n columnGap: '1em',\n },\n addContainer: {\n background: props.theme.neutralLight,\n borderRadius: '0.25em',\n padding: '0.5em',\n marginTop: '1em',\n },\n }\n\n const getAllKeyText = type => {\n const lowerType = type ? type.toLowerCase() : ''\n switch (lowerType) {\n case 'policy':\n return 'All Policies Selected...'\n case 'property':\n return 'All Properties Selected...'\n case 'access':\n return 'All Access Selected...'\n case 'activity':\n return 'All Activity Selected...'\n case 'all':\n return 'All Keys Selected...'\n default:\n return null\n }\n }\n\n const renderPolicySelect = () => {\n if (props.fetchingPolicies || !policyOptions) {\n return \n }\n\n return (\n
\n \n setNewKey(params)}\n options={policyOptions.filter(policy => {\n if (selectedFilters && !selectedFilters.isEmpty()) {\n if (\n selectedFilters.find(\n filter =>\n filter.getIn(['ticketKey', 'value']) === policy.value\n )\n ) {\n return false\n }\n return true\n } else {\n return true\n }\n })}\n />\n
\n )\n }\n\n const renderCFSelect = () => {\n if (props.fetchingCFs || !controlFrameworkOptions) {\n return \n }\n\n let filteredOptions = null\n if (selectedFilters && !selectedFilters.isEmpty()) {\n filteredOptions = controlFrameworkOptions.filter(\n cf =>\n !selectedFilters.find(\n filter => filter.get('controlFrameworkSrn') === cf.value\n )\n )\n }\n\n return (\n
\n \n setNewKey(params)}\n options={filteredOptions ? filteredOptions : controlFrameworkOptions}\n />\n
\n )\n }\n\n const renderPropertySelect = () => {\n if (props.loadingProperties || !propertyOptions) {\n return \n }\n\n return (\n
\n \n setNewKey(params)}\n options={propertyOptions.filter(prop => {\n if (selectedFilters && !selectedFilters.isEmpty()) {\n if (\n selectedFilters.find(\n filter => filter.getIn(['ticketKey', 'value']) === prop.value\n )\n ) {\n return false\n }\n return true\n } else {\n return true\n }\n })}\n />\n
\n )\n }\n\n const renderAccessSelect = () => {\n return (\n
\n \n setNewKey(params)}\n options={accessOptions.filter(access => {\n if (selectedFilters && !selectedFilters.isEmpty()) {\n if (\n selectedFilters.find(\n filter =>\n filter.getIn(['ticketKey', 'value']) === access.value\n )\n ) {\n return false\n }\n return true\n } else {\n return true\n }\n })}\n />\n
\n )\n }\n\n const renderActivitySelect = () => {\n return (\n
\n \n setNewKey(params)}\n options={activityOptions.filter(activity => {\n if (selectedFilters && !selectedFilters.isEmpty()) {\n if (\n selectedFilters.find(\n filter =>\n filter.getIn(['ticketKey', 'value']) === activity.value\n )\n ) {\n return false\n }\n return true\n } else {\n return true\n }\n })}\n />\n
\n )\n }\n\n const renderCustomSelect = () => {\n return
Custom
\n }\n\n const renderSelect = () => {\n const lowerType = newType.value ? newType.value.toLowerCase() : ''\n switch (lowerType) {\n case 'policy':\n return renderPolicySelect()\n case 'controlframework':\n return renderCFSelect()\n case 'property':\n return renderPropertySelect()\n case 'access':\n return renderAccessSelect()\n case 'activity':\n return renderActivitySelect()\n case 'custom':\n return renderCustomSelect()\n default:\n return null\n }\n }\n\n const clearNew = () => {\n setAddNew(false)\n setNewType(null)\n setNewKey('')\n setNewAllKeys(false)\n }\n\n const handleAddFilter = () => {\n let type = newType\n let cfSrn = null\n const lowerType = newType.value ? newType.value.toLowerCase() : ''\n if (lowerType === 'controlframework') {\n type = filterTypeOptions.find(\n op => op.value && op.value.toLowerCase() === 'policy'\n )\n cfSrn = newKey.value\n }\n\n clearNew()\n setSelectedFilters(\n selectedFilters.push(\n fromJS({\n ticketType: type,\n ticketKey: newAllKeys ? null : newKey,\n allKeys: newAllKeys,\n allTypes: false,\n controlFrameworkSrn: cfSrn,\n })\n )\n )\n }\n\n const getKeyLabel = () => {\n const lowerType = newType.value ? newType.value.toLowerCase() : ''\n switch (lowerType) {\n case 'policy':\n return 'All Policies'\n case 'property':\n return 'All Properties'\n case 'access':\n return 'All Access'\n case 'activity':\n return 'All Activities'\n case 'custom':\n return 'All Keys'\n default:\n return null\n }\n }\n\n const addAllTicketType = () => {\n clearNew()\n setAllTicketWarningOpen(false)\n setSelectedFilters(\n fromJS([\n {\n ticketType: { value: 'all', label: 'Enable All' },\n ticketKey: null,\n allKeys: true,\n allTypes: true,\n controlFrameworkSrn: null,\n },\n ])\n )\n }\n\n const handleRemoveFilter = index => {\n setSelectedFilters(selectedFilters.splice(index, 1))\n }\n\n return (\n
\n \n
\n
\n {selectedFilters.isEmpty()\n ? `No Filters Assigned`\n : `Filters Assigned`}\n
\n
\n {!addNew && (\n {\n selectedFilters.getIn([0, 'allTypes'], false)\n ? handleRemoveFilter(0)\n : setAddNew(true)\n }}\n color=\"primary\"\n >\n {selectedFilters.getIn([0, 'allTypes'], false)\n ? `Remove All Types`\n : `New Filter`}\n \n \n )}\n
\n
\n {selectedFilters.map((filter, index) => {\n return (\n
\n (\n \n \n
\n {filter.get('allTypes')\n ? `All Ticket Types`\n : filter.get('controlFrameworkSrn')\n ? 'Control Framework'\n : filter.getIn(['ticketType', 'label'])}\n
\n \n {(filter.get('controlFrameworkSrn') &&\n (props.fetchingCFs ||\n props.controlFrameworks.isEmpty())) ||\n (filter\n .getIn(['ticketType', 'value'], '')\n .toLowerCase() === 'policy' &&\n (props.fetchingPolicies ||\n props.policies.isEmpty())) ? (\n \n ) : filter.get('allKeys') ? (\n getAllKeyText(filter.getIn(['ticketType', 'value']))\n ) : (\n
{filter.getIn(['ticketKey', 'label'])}
\n )}\n
\n {hovered && (\n handleRemoveFilter(index)}\n >\n \n \n )}\n \n \n )}\n />\n \n {filter.get('allKeys')\n ? getAllKeyText(filter.getIn(['ticketType', 'value']))\n : getKeyText(filter.get('ticketKey'))}\n \n \n )\n })}\n\n {addNew && (\n
\n
\n \n {\n setNewKey('')\n setNewAllKeys(false)\n setNewType(params)\n }}\n options={filterTypeOptions}\n styles={selectStyles}\n />\n
\n {newType && (\n
\n {renderSelect()}\n {newType.value &&\n newType.value.toLowerCase() !== 'controlframework' && (\n setNewAllKeys(!newAllKeys)}\n >\n \n {}}\n />\n \n )}\n
\n )}\n
\n \n Add\n \n \n
\n \n Close\n \n
\n
\n
\n )}\n {allTicketWarningOpen && (\n setAllTicketWarningOpen(false)} isOpen={true}>\n \n Enabling all ticket types will remove all other filters.\n \n \n \n setAllTicketWarningOpen(false)}\n color=\"primary\"\n >\n Cancel\n \n \n Confirm\n \n \n \n \n )}\n
\n
\n )\n}\n\nFilterInputs.propTypes = {\n filters: ImmutableProptypes.list,\n policies: ImmutableProptypes.map,\n controlFrameworks: ImmutableProptypes.map,\n properties: ImmutableProptypes.list,\n loadingProperties: PropTypes.bool,\n fetchingPolicies: PropTypes.bool,\n fetchingCFs: PropTypes.bool,\n setFilters: PropTypes.func,\n fetchEscalationOptions: PropTypes.func,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n properties: selectEscalationFilterOptions,\n loadingProperties: selectEscalationFilterOptionsLoading,\n policies: selectPolicies,\n controlFrameworks: selectControlGroups,\n fetchingPolicies: selectFetchingPolicies,\n fetchingCFs: selectFetchingControlGroups,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n fetchEscalationOptions,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, themeable)(FilterInputs)\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { connect } from 'react-redux'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\nimport DetailInputs from 'containers/Escalation/DetailInputs'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\n\nconst EditDetailsModal = props => {\n const [updatedTitle, setUpdatedTitle] = useState(props.title)\n const [updatedDescription, setUpdatedDescription] = useState(\n props.description\n )\n const [shouldClose, setShouldClose] = useState(false)\n\n useEffect(() => {\n if (!props.saving && shouldClose) {\n props.close()\n }\n }, [props.saving])\n\n const handleUpdate = () => {\n if (\n updatedTitle !== props.title ||\n props.description !== updatedDescription\n ) {\n setShouldClose(true)\n props.update({\n details: {\n title: updatedTitle,\n description: updatedDescription,\n },\n })\n }\n }\n\n return (\n \n Update Details\n \n \n \n \n \n Cancel\n \n \n \n Save\n \n \n \n )\n}\n\nEditDetailsModal.propTypes = {\n title: PropTypes.string,\n description: PropTypes.string,\n isOpen: PropTypes.bool,\n saving: PropTypes.bool,\n close: PropTypes.func,\n update: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n allSwimlanes: selectSwimlanes,\n})\n\nconst withConnect = connect(mapStateToProps, null)\n\nexport default compose(withConnect)(EditDetailsModal)\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport FilterInputs from 'containers/Escalation/FilterInputs'\n\nconst EditFiltersModal = props => {\n const [updatedFilters, setUpdatedFilters] = useState(List())\n const [shouldClose, setShouldClose] = useState(false)\n\n useEffect(() => {\n if (!props.saving && shouldClose) {\n props.close()\n }\n }, [props.saving])\n\n const getIsDifferent = () => {\n let isDiff = false\n\n if (props.filters) {\n if (\n props.filters.getIn([0, 'allKeys'], false) &&\n updatedFilters.isEmpty()\n ) {\n isDiff = true\n } else {\n props.filters.forEach(filter => {\n if (\n !updatedFilters.find(updated => {\n if (filter.get('allKeys')) {\n return (\n updated.get('ticketType').toLowerCase() ===\n filter.get('ticketType').toLowerCase()\n )\n } else if (filter.get('controlFrameworkSrn')) {\n return (\n filter.get('controlFrameworkSrn') &&\n filter.get('controlFrameworkSrn') ===\n updated.get('controlFrameworkSrn')\n )\n } else {\n return (\n updated.get('ticketType').toLowerCase() ===\n filter.get('ticketType').toLowerCase() &&\n updated.getIn(['ticketKey', 'value']) ===\n filter.get('ticketKey')\n )\n }\n })\n ) {\n isDiff = true\n }\n })\n }\n }\n\n if (updatedFilters) {\n if (updatedFilters.getIn([0, 'allKeys'], false) && !props.filters) {\n isDiff = true\n } else {\n updatedFilters.forEach(updated => {\n if (\n !props.filters ||\n !props.filters.find(filter => {\n if (updated.get('allKeys')) {\n return (\n filter.get('ticketType').toLowerCase() ===\n updated.get('ticketType').toLowerCase()\n )\n } else if (updated.get('controlFrameworkSrn')) {\n return (\n filter.get('controlFrameworkSrn') ===\n updated.get('controlFrameworkSrn')\n )\n } else {\n return (\n filter.get('ticketType').toLowerCase() ===\n updated.get('ticketType').toLowerCase() &&\n filter.get('ticketKey') ===\n updated.getIn(['ticketKey', 'value'])\n )\n }\n })\n ) {\n isDiff = true\n }\n })\n }\n }\n return isDiff\n }\n\n const organizeAndSave = () => {\n const add = []\n const remove = []\n if (props.filters) {\n props.filters.forEach(filter => {\n if (\n !updatedFilters.find(updated => {\n if (filter.get('allKeys')) {\n return (\n updated.get('ticketType').toLowerCase() ===\n filter.get('ticketType').toLowerCase()\n )\n } else if (filter.get('controlFrameworkSrn')) {\n return (\n filter.get('controlFrameworkSrn') ===\n updated.get('controlFrameworkSrn')\n )\n } else {\n return (\n updated.get('ticketType').toLowerCase() ===\n filter.get('ticketType').toLowerCase() &&\n updated.getIn(['ticketKey', 'value']) ===\n filter.get('ticketKey')\n )\n }\n })\n ) {\n remove.push(filter.get('srn'))\n }\n })\n }\n\n updatedFilters.forEach(updated => {\n if (props.filters) {\n if (\n !props.filters.find(filter => {\n if (updated.get('allKeys')) {\n return (\n filter.get('ticketType').toLowerCase() ===\n updated.get('ticketType').toLowerCase()\n )\n } else if (updated.get('controlFrameworkSrn')) {\n return (\n filter.get('controlFrameworkSrn') ===\n updated.get('controlFrameworkSrn')\n )\n } else {\n return (\n filter.get('ticketType').toLowerCase() ===\n updated.get('ticketType').toLowerCase() &&\n filter.get('ticketKey') ===\n updated.getIn(['ticketKey', 'value'])\n )\n }\n })\n ) {\n add.push(\n updated\n .set('ticketKey', updated.getIn(['ticketKey', 'value'], null))\n .toJS()\n )\n }\n } else {\n add.push(\n updated\n .set('ticketKey', updated.getIn(['ticketKey', 'value'], null))\n .toJS()\n )\n }\n })\n\n setShouldClose(true)\n props.update({\n filters: {\n add,\n remove,\n },\n })\n }\n\n useEffect(() => {\n setUpdatedFilters(List())\n }, [props.filters])\n\n return (\n \n Update Filters\n \n \n \n \n \n Cancel\n \n \n \n Save\n \n \n \n )\n}\n\nEditFiltersModal.propTypes = {\n close: PropTypes.func,\n isOpen: PropTypes.bool,\n saving: PropTypes.bool,\n filters: ImmutableProptypes.list,\n update: PropTypes.func,\n}\n\nexport default EditFiltersModal\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n invalidSwimlaneEditErrorMessage: {\n id: 'app.containers.EscalationDetails.invalidSwimlaneEditErrorMessage',\n defaultMessage:\n 'The changes have not been saved because an invalid state was ' +\n 'detected. The follwing custom tickets are assigned to this ' +\n 'escalations and have swimlanes assigned which are being removed. ' +\n 'This will cause the tickets not to be escalated. Please remove the ' +\n 'escalation filters for the following tickets to proceed:',\n },\n})\n","import React, { Fragment, useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport SwimlaneInputs from 'containers/Escalation/SwimlaneInputs'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport qs from 'querystring'\n\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport Button from 'components/Button'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\n\nimport messages from './messages'\n\nconst EditSwimlanesModal = props => {\n const [updatedSwimlanes, setUpdatedSwimlanes] = useState(List())\n const [shouldClose, setShouldClose] = useState(false)\n\n useEffect(() => {\n if (!props.saving && shouldClose) {\n if (!props.errorInvalidSwimlanes) {\n props.close()\n }\n }\n }, [props.saving])\n\n const getIsDifferent = () => {\n if (!props.swimlanes && updatedSwimlanes) {\n return true\n }\n if (props.swimlanes && !updatedSwimlanes) {\n return true\n }\n if (!props.swimlanes && !updatedSwimlanes) {\n return false\n }\n\n let isDiff = false\n props.swimlanes.forEach(swombo => {\n if (\n !updatedSwimlanes.find(\n s => swombo.get('swimlaneSRN') === s.get('swimlaneSRN')\n )\n ) {\n isDiff = true\n }\n })\n updatedSwimlanes.forEach(swombini => {\n if (\n !props.swimlanes.find(\n s => s.get('swimlaneSRN') === swombini.get('swimlaneSRN')\n )\n ) {\n isDiff = true\n }\n })\n return isDiff\n }\n\n const organizeAndSave = () => {\n const add = []\n const remove = []\n\n if (updatedSwimlanes) {\n if (!props.swimlanes) {\n add.push(...updatedSwimlanes.map(sl => sl.get('swimlaneSRN')))\n } else {\n props.swimlanes.forEach(swombo => {\n if (\n !updatedSwimlanes.find(\n s => swombo.get('swimlaneSRN') === s.get('swimlaneSRN')\n )\n ) {\n remove.push(swombo.get('srn'))\n }\n })\n updatedSwimlanes.forEach(swombini => {\n if (\n !props.swimlanes.find(\n s => s.get('swimlaneSRN') === swombini.get('swimlaneSRN')\n )\n ) {\n add.push(swombini.get('swimlaneSRN'))\n }\n })\n }\n } else {\n remove.push(...props.swimlanes.map(sl => sl.get('srn')))\n }\n\n setShouldClose(true)\n props.update({\n swimlanes: {\n add,\n remove,\n },\n })\n }\n\n return (\n \n Update Swimlane Assignments\n \n \n
\n {props.errorInvalidSwimlanes && (\n // render the error message that user would make custom ticket\n // configurations invalid because of the swimlane removals\n \n \n
\n
\n \n {props.errorInvalidSwimlanes\n .get('tickets')\n .toJS()\n .map(({ srn, title }) => {\n const requiredSwimlanes = props.errorInvalidSwimlanes\n .getIn(['requiredSwimlanes', srn])\n .map(srn => {\n return props.allSwimlanes\n .valueSeq()\n .find(swimbini => swimbini.get('srn') === srn)\n })\n .filter(swimmy => swimmy)\n .toJS()\n return (\n \n \n {title}: \n \n {srn}\n \n \n
\n \n ({'required: '}\n {requiredSwimlanes\n .map(swimbini => swimbini.title)\n .join(', ')}\n )\n \n
\n
\n )\n })}\n
\n \n )}\n \n
\n \n \n Cancel\n \n \n \n Save\n \n \n
\n )\n}\n\nEditSwimlanesModal.propTypes = {\n allSwimlanes: ImmutablePropTypes.map,\n swimlanes: ImmutableProptypes.list,\n isOpen: PropTypes.bool,\n saving: PropTypes.bool,\n close: PropTypes.func,\n update: PropTypes.func,\n errorInvalidSwimlanes: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n}\n\nexport default EditSwimlanesModal\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutableProptypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport RuleInputs from 'containers/Escalation/RuleInputs'\n\nconst EditFiltersModal = props => {\n const [updatedRules, setUpdatedRules] = useState(List())\n const [shouldClose, setShouldClose] = useState(false)\n\n useEffect(() => {\n if (!props.saving && shouldClose) {\n props.close()\n }\n }, [props.saving])\n\n const getIsDifferent = () => {\n let isDiff = false\n if (props.rules) {\n props.rules.forEach(rule => {\n if (\n !updatedRules.find(updated => {\n if (\n updated.get('actionType') === rule.get('actionType') &&\n updated.get('triggerAfter') === rule.get('triggerAfter')\n ) {\n if (updated.get('actionType') === 'ASSIGN_USER') {\n return (\n updated.getIn(['assignUser', 'userSrn']) ===\n rule.getIn(['assignUser', 'userSrn'])\n )\n } else if (updated.get('actionType') === 'ESCALATE_TO_BOT') {\n return (\n updated.getIn(['escalateToBot', 'botSrn']) ===\n rule.getIn(['escalateToBot', 'botSrn'])\n )\n } else if (updated.get('actionType') === 'ASSIGN_ROLE') {\n return (\n updated.getIn(['assignRole', 'roleType']) ===\n rule.getIn(['assignRole', 'roleType'])\n )\n }\n return true\n } else {\n return false\n }\n })\n ) {\n isDiff = true\n }\n })\n }\n\n updatedRules.forEach(updated => {\n if (\n props.rules &&\n !props.rules.find(rule => {\n if (\n updated.get('actionType') === rule.get('actionType') &&\n updated.get('triggerAfter') === rule.get('triggerAfter')\n ) {\n if (updated.get('actionType') === 'ASSIGN_USER') {\n return (\n updated.getIn(['assignUser', 'userSrn']) ===\n rule.getIn(['assignUser', 'userSrn'])\n )\n } else if (updated.get('actionType') === 'ESCALATE_TO_BOT') {\n return (\n updated.getIn(['escalateToBot', 'botSrn']) ===\n rule.getIn(['escalateToBot', 'botSrn'])\n )\n } else if (updated.get('actionType') === 'ASSIGN_ROLE') {\n return (\n updated.getIn(['assignRole', 'roleType']) ===\n rule.getIn(['assignRole', 'roleType'])\n )\n }\n return true\n } else {\n return false\n }\n })\n ) {\n isDiff = true\n } else if (!props.rules) {\n isDiff = true\n }\n })\n return isDiff\n }\n\n const organizeAndSave = () => {\n const add = []\n const remove = []\n if (props.rules) {\n props.rules.forEach(rule => {\n if (\n !updatedRules.find(updated => {\n if (\n updated.get('actionType') === rule.get('actionType') &&\n updated.get('triggerAfter') === rule.get('triggerAfter')\n ) {\n if (updated.get('actionType') === 'ASSIGN_USER') {\n return (\n updated.getIn(['assignUser', 'userSrn']) ===\n rule.getIn(['assignUser', 'userSrn'])\n )\n } else if (updated.get('actionType') === 'ESCALATE_TO_BOT') {\n return (\n updated.getIn(['escalateToBot', 'botSrn']) ===\n rule.getIn(['escalateToBot', 'botSrn'])\n )\n } else if (updated.get('actionType') === 'ASSIGN_ROLE') {\n return (\n updated.getIn(['assignRole', 'roleType']) ===\n rule.getIn(['assignRole', 'roleType'])\n )\n }\n return true\n } else {\n return false\n }\n })\n ) {\n remove.push(rule.get('srn'))\n }\n })\n }\n\n updatedRules.forEach(updated => {\n if (\n props.rules &&\n !props.rules.find(rule => {\n if (\n updated.get('actionType') === rule.get('actionType') &&\n updated.get('triggerAfter') === rule.get('triggerAfter')\n ) {\n if (updated.get('actionType') === 'ASSIGN_USER') {\n return (\n updated.getIn(['assignUser', 'userSrn']) ===\n rule.getIn(['assignUser', 'userSrn'])\n )\n } else if (updated.get('actionType') === 'ESCALATE_TO_BOT') {\n return (\n updated.getIn(['escalateToBot', 'botSrn']) ===\n rule.getIn(['escalateToBot', 'botSrn'])\n )\n } else if (updated.get('actionType') === 'ASSIGN_ROLE') {\n return (\n updated.getIn(['assignRole', 'roleType']) ===\n rule.getIn(['assignRole', 'roleType'])\n )\n }\n return true\n } else {\n return false\n }\n })\n ) {\n add.push(updated.toJS())\n } else if (!props.rules) {\n add.push(updated.toJS())\n }\n })\n\n setShouldClose(true)\n props.update({\n rules: {\n add,\n remove,\n },\n })\n }\n\n return (\n \n Update Filters\n \n \n \n \n \n Cancel\n \n \n \n Save\n \n \n \n )\n}\n\nEditFiltersModal.propTypes = {\n close: PropTypes.func,\n isOpen: PropTypes.bool,\n saving: PropTypes.bool,\n rules: ImmutableProptypes.list,\n update: PropTypes.func,\n}\n\nexport default EditFiltersModal\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { bindActionCreators, compose } from 'redux'\nimport { push } from 'connected-react-router'\nimport DataTable from 'components/DataTable'\nimport BorderedCard from 'components/BorderedCard'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport Button from 'components/Button'\nimport { List, Map } from 'immutable'\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\n\nimport qs from 'query-string'\nimport {\n selectEscalations,\n selectEscalationsLoading,\n selectUpdatingEscalation,\n selectUpdatingEscalationError,\n selectUpdatingEscalationInvalidSwimlaneForTickets,\n} from 'containers/EscalationData/selectors'\nimport {\n selectSwimlanes,\n selectSwimlanesLoading,\n} from 'containers/SonraiData/selectors'\nimport {\n selectFetchingPolicies,\n selectPolicies,\n selectControlGroups,\n selectFetchingControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport {\n getEscalations,\n updateEscalation,\n clearUpdateEscalationSwimlaneEditCustomTicketError,\n} from 'containers/EscalationData/actions'\nimport SectionHeader from 'components/SectionHeader'\nimport { startCase, camelCase } from 'lodash'\nimport EditDetailsModal from './EditDetailsModal'\nimport EditFiltersModal from './EditFiltersModal'\nimport EditSwimlanesModal from './EditSwimlanesModal'\nimport EditRulesModal from './EditRulesModal'\nimport RuleInputs from 'containers/Escalation/RuleInputs'\nimport UserWidget from 'components/UserWidget'\nimport Expandable from 'components/Expandable'\nimport CenterContent from 'components/CenterContent'\nimport { Alert } from 'reactstrap'\nimport permissionChecker from 'containers/PermissionChecker'\n\nexport class EscalationDetails extends React.Component {\n constructor(props) {\n super(props)\n if (!props.loading && props.escalations.isEmpty()) {\n props.getEscalations()\n }\n\n this.styles = {\n container: {\n margin: '1em',\n display: 'grid',\n gridTemplateRows: 'auto auto 1fr',\n gridRowGap: '1em',\n height: '100%',\n },\n headerTop: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n gridColumnGap: '1em',\n marginBottom: '1em',\n },\n tableTop: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n marginBottom: '0.25em',\n },\n title: {\n fontWeight: 400,\n },\n description: {\n maxHeight: '150px',\n overflow: 'auto',\n },\n group: {\n marginBottom: '3em',\n },\n }\n this.state = {\n detailModalOpen: false,\n swimlaneModalOpen: false,\n filterModalOpen: false,\n ruleModalOpen: false,\n updatedSwimlanes: null,\n }\n }\n\n openDetailModal = () => {\n this.setState({ detailModalOpen: true })\n }\n\n closeDetailModal = () => {\n this.setState({ detailModalOpen: false })\n }\n\n openSwimlanelModal = () => {\n this.setState({ swimlaneModalOpen: true })\n }\n\n closeSwimlanelModal = () => {\n this.setState({ swimlaneModalOpen: false })\n this.props.clearErrorInvalidSwimlanes()\n }\n\n openFilterModal = () => {\n this.setState({ filterModalOpen: true })\n }\n\n closeFilterModal = () => {\n this.setState({ filterModalOpen: false })\n }\n\n openRuleModal = () => {\n this.setState({ ruleModalOpen: true })\n }\n\n closeRuleModal = () => {\n this.setState({ ruleModalOpen: false })\n }\n\n getSwimlaneData = swombosis => {\n return swombosis\n .filter(ass =>\n this.props.userHasPermission({\n permissionName: 'view.data',\n swimlanes: [ass.get('swimlaneSRN')],\n })\n )\n .map(assignment => {\n const sl = this.props.swimlanes.find(\n lane => lane.get('srn') === assignment.get('swimlaneSRN')\n )\n if (sl) {\n return { name: sl.get('title'), description: sl.get('description') }\n } else {\n return {\n name: `[ Swimlane Not Found ] ${assignment.get('swimlaneSRN')}`,\n description: 'Swimlane data failed to load or no longer exists.',\n }\n }\n })\n .toJS()\n }\n\n getKeyLabel = type => {\n const downCased = type ? type.toLowerCase() : ''\n switch (downCased) {\n case 'policy':\n return 'All Policies'\n case 'property':\n return 'All Properties'\n case 'access':\n return 'All Access'\n case 'activity':\n return 'All Activities'\n case 'custom':\n return 'All Keys'\n default:\n return 'All Keys'\n }\n }\n\n getFilterData = filters => {\n return filters\n .map(filter => {\n let keyParsed = ''\n let typeParsed = filter.get('allTypes')\n ? 'ALL TYPES'\n : filter.get('controlFrameworkSrn')\n ? 'Control Framework'\n : startCase(camelCase(filter.get('ticketType')))\n\n if (filter.get('allKeys')) {\n keyParsed = this.getKeyLabel(filter.get('ticketType'))\n } else {\n if (filter.get('ticketType').toLowerCase() === 'policy') {\n if (filter.get('controlFrameworkSrn')) {\n keyParsed = this.props.controlFrameworks.getIn(\n [filter.get('controlFrameworkSrn'), 'title'],\n `[ Control Framework Not Found ] ${filter.get(\n 'controlFrameworkSrn'\n )}`\n )\n } else {\n keyParsed = this.props.policies.getIn(\n [filter.get('ticketKey'), 'title'],\n `[ Policy Not Found ] ${filter.get('ticketKey')}`\n )\n }\n }\n // if it's for a custom ticket srn of a ticket, display that to user:\n else if (\n (filter.get('ticketKey') ?? '').match(\n /^srn:[a-zA-z]+::Ticket\\/[a-f0-9-]+$/\n )\n ) {\n keyParsed = filter.get('ticketKey')\n typeParsed = 'Custom Ticket'\n }\n // otherwise it's probably a CRM or property ticket:\n else {\n keyParsed = startCase(filter.get('ticketKey'))\n }\n }\n return {\n ticketType: typeParsed,\n ticketKey: keyParsed,\n }\n })\n .toJS()\n }\n\n renderRules = rules => {\n return (\n
\n {}} rules={rules} />\n
\n )\n }\n\n render() {\n if (this.props.loading || this.props.escalations.isEmpty()) {\n return (\n \n \n \n )\n }\n\n const srn = qs.parse(this.props.location.search).srn\n const escalation = this.props.escalations.get(srn) || Map()\n\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.escalations',\n })\n\n const canAssign = this.props.userHasPermission({\n permissionName: 'assign.escalations',\n })\n\n const data = this.getFilterData(\n escalation.get('filters') ? escalation.get('filters') : List()\n )\n\n return (\n
\n \n this.props.push({ pathname: '/App/Escalation' })}\n >\n All Escalations\n \n Escalation Details \n \n \n {this.props.updatingError && (\n {this.props.updatingError}\n )}\n
\n {escalation.get('title')}\n {canEdit && (\n \n )}\n
\n \n
\n {escalation.get('description')}\n
\n \n
Created By:
\n \n
\n \n \n \n
\n
\n
Active for Swimlanes:
\n
\n {(canEdit || canAssign) && (\n \n \n Manage Swimlane Assignments\n \n )}\n
\n
\n\n
\n {this.props.swimlanesLoading ? (\n \n \n \n ) : (\n \n )}\n
\n
\n
\n
\n
\n For tickets matching at least one of:\n
\n
\n {canEdit && (\n \n \n Manage Filters\n \n )}\n
\n
\n
\n {this.props.fetchingPolicies || this.props.fetchingCFs ? (\n \n \n \n ) : (\n \n )}\n
\n
\n
\n
\n
\n After a matching ticket is created:\n
\n
\n {canEdit && (\n \n \n Manage Rules\n \n )}\n
\n
\n\n
\n {this.renderRules(escalation.get('rules'))}\n
\n
\n \n {this.state.detailModalOpen && (\n \n this.props.updateEscalation({\n schemeSrn: escalation.get('srn'),\n ...params,\n })\n }\n isOpen\n saving={this.props.updating}\n close={this.closeDetailModal}\n />\n )}\n {this.state.swimlaneModalOpen && (\n \n this.props.userHasPermission({\n permissionName: 'view.data',\n swimlanes: [ass.get('swimlaneSRN')],\n })\n )\n : null\n }\n update={params =>\n this.props.updateEscalation({\n schemeSrn: escalation.get('srn'),\n ...params,\n })\n }\n saving={this.props.updating}\n />\n )}\n {this.state.filterModalOpen && (\n \n this.props.updateEscalation({\n schemeSrn: escalation.get('srn'),\n ...params,\n })\n }\n filters={escalation.get('filters')}\n saving={this.props.updating}\n />\n )}\n {this.state.ruleModalOpen && (\n \n this.props.updateEscalation({\n schemeSrn: escalation.get('srn'),\n ...params,\n })\n }\n rules={escalation.get('rules')}\n saving={this.props.updating}\n />\n )}\n \n )\n }\n}\n\nEscalationDetails.propTypes = {\n location: PropTypes.object,\n getEscalations: PropTypes.func,\n push: PropTypes.func,\n userHasPermission: PropTypes.func,\n fetchingPolicies: PropTypes.bool,\n updateEscalation: PropTypes.func,\n escalations: ImmutablePropTypes.map,\n controlFrameworks: ImmutablePropTypes.map,\n policies: ImmutablePropTypes.map,\n swimlanes: ImmutablePropTypes.map,\n loading: PropTypes.bool,\n swimlanesLoading: PropTypes.bool,\n updating: PropTypes.bool,\n fetchingCFs: PropTypes.bool,\n theme: themeShape,\n updatingError: PropTypes.string,\n errorInvalidSwimlanes: ImmutablePropTypes.listOf(ImmutablePropTypes.map),\n clearErrorInvalidSwimlanes: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n escalations: selectEscalations,\n loading: selectEscalationsLoading,\n swimlanes: selectSwimlanes,\n swimlanesLoading: selectSwimlanesLoading,\n updating: selectUpdatingEscalation,\n updatingError: selectUpdatingEscalationError,\n policies: selectPolicies,\n controlFrameworks: selectControlGroups,\n fetchingPolicies: selectFetchingPolicies,\n fetchingCFs: selectFetchingControlGroups,\n errorInvalidSwimlanes: selectUpdatingEscalationInvalidSwimlaneForTickets,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getEscalations,\n updateEscalation,\n clearErrorInvalidSwimlanes: clearUpdateEscalationSwimlaneEditCustomTicketError,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(\n withConnect,\n themeable,\n permissionChecker\n)(EscalationDetails)\n"],"sourceRoot":""}