{"version":3,"sources":["webpack:///./app/containers/SearchManager/messages.js","webpack:///./app/containers/SearchManager/SearchInfo.js","webpack:///./app/containers/SearchManager/constants.js","webpack:///./app/containers/SearchManager/actions.js","webpack:///./app/containers/SearchManager/selectors.js","webpack:///./app/containers/SearchManager/sagas.js","webpack:///./app/containers/SearchManager/reducer.js","webpack:///./app/containers/SearchManager/index.js"],"names":["defineMessages","searchHome","id","defaultMessage","title","usedInHint","notUsed","usedInOnePlace","usedInNPlaces","customSource","emptyPolicies","emptyWidgets","searchInfoTitle","policiesTitle","themeable","theme","search","styles","header","color","neutralDark","fontWeight","cardtitle","widgets","getIn","List","widgetsBySolutionCard","reduce","cardMap","widget","widgetName","get","cardName","has","update","cardWidgets","push","set","Map","map","widgetNames","join","policies","style","fontSize","margin","marginBottom","messages","size","paddingLeft","isEmpty","toList","toJS","policy","srn","DUPLICATE_SEARCH","DELETE_SAVED_SEARCH","DELETE_SEARCH_AND_WIDGETS","duplicateSearch","createAction","duplicateSearchSuccess","deleteSavedSearch","deleteSavedSearchSuccess","selectDuplicatingSearchId","createSelector","state","query","deleteWidget","deletePolicy","deleteSearchAndWidgets","searchSaga","action","payload","fields","console","warn","newQueryName","name","select","selectQueryTypes","queryTypes","queryBuilder","QueryBuilder","resultViews","types","queryRootField","find","field","mutateSearchConfig","buildCreateSavedSearch","client","getClient","mutate","mutation","gql","gqlStatement","variables","results","savedSearch","data","CreateSearch","put","setSavedSearch","error","sid","removeSavedSearch","containedByWidget","items","containedByControlPolicy","all","call","takeLatest","initialState","fromJS","duplicatingSearchId","searchReducer","handleActions","BarLoadingAnimation","Icon","fa","SearchManager","props","savedSearchesDetailsLoaded","savedSearchesLoading","fetchSavedSearchesDetails","api","gridApi","setState","viewingSearchId","pathname","qs","stringify","searchId","view","SEARCH_VIEWS","BUILD","_","orderBy","savedSearches","source","SONRAI_ORG_NAME","intl","formatMessage","comment","Object","values","flatMap","comments","usedIn","createdDate","lastModified","createdBy","createdByUser","sonraiUsers","clone","delete","description","showLoadingOverlay","container","display","gridTemplateRows","overflow","padding","height","gridRowGap","this","loadDetailsIfNecessary","rows","getRows","Breadcrumb","cursor","primary","onClick","BorderedCard","list","DataTable","customGridProps","groupUseEntireRow","overlayLoadingTemplate","onLoad","onDoubleClickRow","openSearch","autosize","customColumnConfig","flex","minWidth","hide","width","valueGetter","params","cellRendererFramework","CreatedByBadge","table","count","usedCount","TextLink","aggFunc","pinned","headerName","enableRowGroup","menuTabs","suppressMenu","canClone","userHasPermission","permissionName","BorderlessButton","onClickDuplicate","neutralLight","resourceId","onClickDelete","Modal","isOpen","toggle","closeSearchInfo","ModalHeader","ModalBody","ImmutablePureComponent","propTypes","canDelete","PropTypes","func","isRequired","string","intlShape","onSelectSavedSearch","saveDuplicate","ImmutablePropTypes","bool","themeShape","mapStateToProps","createStructuredSelector","selectSavedSearches","selectSavedSearchesLoading","selectSavedSearchesDetailsLoaded","selectSonraiUsers","withConnect","connect","dispatch","bindActionCreators","withReducer","injectReducer","key","reducer","withSaga","injectSaga","saga","sagas","compose","permissionChecker","injectIntl"],"mappings":"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","file":"50.ea2181620d8e0eb9d6a4.chunk.js","sourcesContent":["import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n searchHome: {\n id: 'app.containers.SearchManager.searchHome',\n defaultMessage: 'Search',\n },\n title: {\n id: 'app.containers.SearchManager.title',\n defaultMessage: 'Manage Saved Searches',\n },\n usedInHint: {\n id: 'app.containers.SearchManager.usedInHint',\n defaultMessage: 'Show where this search is used',\n },\n notUsed: {\n id: 'app.containers.SearchManager.notUsed',\n defaultMessage: '(Not Used)',\n },\n usedInOnePlace: {\n id: 'app.containers.SearchManager.usedInOnePlace',\n defaultMessage: 'Used in 1 place',\n },\n usedInNPlaces: {\n id: 'app.containers.SearchManager.usedInOnePlace',\n defaultMessage: 'Used in {count} places',\n },\n customSource: {\n id: 'app.containers.SearchManager.customSource',\n defaultMessage: 'Custom',\n },\n emptyPolicies: {\n id: 'app.containers.SearchManager.emptyPolicies',\n defaultMessage: 'none',\n },\n emptyWidgets: {\n id: 'app.containers.SearchManager.emptyWidgets',\n defaultMessage: 'none',\n },\n searchInfoTitle: {\n id: 'app.containers.SearchManager.searchInfoTitle',\n defaultMessage: 'Solution Cards and Widgets',\n },\n policiesTitle: {\n id: 'app.containers.SearchManager.policiesTitle',\n defaultMessage: 'Control Policies',\n },\n})\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map, List } from 'immutable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { FormattedMessage } from 'react-intl'\n\nimport messages from './messages'\n\nconst SearchInfo = ({ theme, search }) => {\n const styles = {\n header: {\n color: theme.neutralDark,\n fontWeight: 400,\n },\n cardtitle: {\n fontWeight: 400,\n },\n }\n\n const widgets = search.getIn(['containedByWidget', 'items'], List())\n\n const widgetsBySolutionCard = widgets\n .reduce((cardMap, widget) => {\n const widgetName = widget.get('title')\n const cardName = widget.getIn(['containedBy', 'items', 0, 'name'])\n\n return cardMap.has(cardName)\n ? cardMap.update(cardName, cardWidgets => cardWidgets.push(widgetName))\n : cardMap.set(cardName, List([widgetName]))\n }, Map())\n .map(widgetNames => widgetNames.join(', '))\n\n const policies = search.getIn(['containedByControlPolicy', 'items'], List())\n\n return (\n
\n
\n
\n ({widgets.size})\n
\n
\n {widgetsBySolutionCard.isEmpty() ? (\n \n \n \n ) : (\n widgetsBySolutionCard\n .map((cardWidgets, cardName) => {\n if (cardName) {\n return (\n
\n {cardName}: {cardWidgets}\n
\n )\n }\n })\n .toList()\n .toJS()\n )}\n
\n
\n\n
\n ({policies.size})\n
\n
\n {policies.isEmpty() ? (\n \n \n \n ) : (\n policies\n .toJS()\n .map(policy =>
{policy.title}
)\n )}\n
\n
\n )\n}\n\nSearchInfo.propTypes = {\n search: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n}\n\nexport default themeable(SearchInfo)\n","export const DUPLICATE_SEARCH = 'app/SearchManager/DUPLICATE_SEARCH'\nexport const DUPLICATE_SEARCH_SUCCESS =\n 'app/SearchManager/DUPLICATE_SEARCH_SUCCESS'\nexport const DELETE_SAVED_SEARCH = 'app/SearchManager/DELETE_SAVED_SEARCH'\nexport const DELETE_SAVED_SEARCH_SUCCESS =\n 'app/SearchManager/DELETE_SAVED_SEARCH_SUCCESS'\nexport const DELETE_SEARCH_AND_WIDGETS =\n 'app/SearchManager/DELETE_SEARCH_AND_WIDGETS'\n","import { createAction } from 'redux-actions'\n\nimport {\n DUPLICATE_SEARCH,\n DUPLICATE_SEARCH_SUCCESS,\n DELETE_SAVED_SEARCH,\n DELETE_SAVED_SEARCH_SUCCESS,\n DELETE_SEARCH_AND_WIDGETS,\n} from './constants'\n\nexport const duplicateSearch = createAction(DUPLICATE_SEARCH)\nexport const duplicateSearchSuccess = createAction(DUPLICATE_SEARCH_SUCCESS)\nexport const deleteSavedSearch = createAction(DELETE_SAVED_SEARCH)\nexport const deleteSavedSearchSuccess = createAction(\n DELETE_SAVED_SEARCH_SUCCESS\n)\nexport const deleteSearchAndWidgets = createAction(DELETE_SEARCH_AND_WIDGETS)\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nexport const selectSearchManager = state => state.get('searchmanager') || Map()\n\nexport const selectDuplicatingSearchId = createSelector(\n selectSearchManager,\n query => query.get('duplicatingSearchId')\n)\n","import { all, put, takeLatest, select, call } from 'redux-saga/effects'\nimport { getClient } from 'apolloClient'\nimport { QueryBuilder } from 'query-builder'\nimport gql from 'graphql-tag'\nimport { Map } from 'immutable'\n\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport {\n setSavedSearch,\n removeSavedSearch,\n} from 'containers/SonraiData/actions'\n\nimport { deleteSavedSearchSuccess, duplicateSearchSuccess } from './actions'\nimport {\n DUPLICATE_SEARCH,\n DELETE_SAVED_SEARCH,\n DELETE_SEARCH_AND_WIDGETS,\n} from './constants'\n\nfunction* duplicateSearch(action) {\n try {\n if (action.payload.fields.isEmpty()) {\n //eslint-disable-next-line no-console\n console.warn('Tried to save empty query; exiting')\n return\n }\n\n const newQueryName = action.payload.name\n\n const queryTypes = yield select(selectQueryTypes)\n\n const queryBuilder = new QueryBuilder({\n query: action.payload.fields,\n resultViews: action.payload.resultViews,\n types: queryTypes,\n })\n\n const queryRootField = action.payload.fields.find(\n field => !field.get('parentId'),\n null,\n Map()\n )\n\n const mutateSearchConfig = queryBuilder.buildCreateSavedSearch(\n queryRootField.toJS(), //TODO: update query builder to take just the ID here\n newQueryName\n )\n const client = getClient()\n const results = yield client.mutate({\n mutation: gql`\n ${mutateSearchConfig.gqlStatement}\n `,\n variables: mutateSearchConfig.variables,\n })\n\n const savedSearch = results.data.CreateSearch\n\n yield put(setSavedSearch(savedSearch))\n yield put(duplicateSearchSuccess())\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error when handling SAVE_QUERY', e)\n }\n}\n\nfunction* deleteSavedSearch(action) {\n const search = action.payload\n\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation deleteSavedSearch{\n DeleteSearch(srn: \"${search.srn}\")\n }\n `,\n })\n yield put(deleteSavedSearchSuccess(search.sid))\n yield put(removeSavedSearch(search.sid))\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`Error deleteing saved search ${e}`)\n }\n}\n\nfunction* deleteWidget(id) {\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation deleteWidget{\n DeleteWidget(srn: \"${id}\")\n }\n `,\n })\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`There was an error deleting widgets from search ${e}`)\n }\n}\n\nfunction* deletePolicy(id) {\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation deletePolicy{\n DeleteControlpolicy(srn: \"${id}\")\n }\n `,\n })\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error(`There was an error deleting a policy from search ${e}`)\n }\n}\n\nfunction* deleteSearchAndWidgets(action) {\n const search = action.payload.toJS()\n const widgets = search.containedByWidget.items\n const policies = search.containedByControlPolicy.items\n\n try {\n yield all(widgets.map(widget => call(deleteWidget, widget.srn)))\n yield all(policies.map(policy => call(deletePolicy, policy.srn)))\n yield call(deleteSavedSearch, action)\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error when handling DELETE_SAVED_SEARCH', e)\n }\n}\n\nfunction* searchSaga() {\n yield all([\n takeLatest(DUPLICATE_SEARCH, duplicateSearch),\n takeLatest(DELETE_SAVED_SEARCH, deleteSavedSearch),\n takeLatest(DELETE_SEARCH_AND_WIDGETS, deleteSearchAndWidgets),\n ])\n}\n\nexport default searchSaga\n","import { fromJS } from 'immutable'\n\nimport { DUPLICATE_SEARCH, DUPLICATE_SEARCH_SUCCESS } from './constants'\nimport { handleActions } from 'redux-actions'\n\nexport const initialState = fromJS({\n duplicatingSearchId: null,\n})\n\nconst searchReducer = handleActions(\n {\n [DUPLICATE_SEARCH]: (state, { payload }) =>\n state.set('duplicatingSearchId', payload.id),\n [DUPLICATE_SEARCH_SUCCESS]: state => state.set('duplicatingSearchId', null),\n },\n initialState\n)\n\nexport default searchReducer\n","import React 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 _ from 'lodash'\nimport { Modal, ModalBody, ModalHeader } from 'reactstrap'\nimport { FormattedMessage, injectIntl, intlShape } from 'react-intl'\nimport { push } from 'connected-react-router'\nimport { Map, fromJS } from 'immutable'\nimport qs from 'query-string'\nimport CreatedByBadge from 'components/CreatedByBadge'\nimport { SEARCH_VIEWS } from 'containers/Search/constants'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport TextLink from 'components/TextLink'\nimport BarLoadingAnimation from 'components/BarLoadingAnimation'\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport permissionChecker from 'containers/PermissionChecker'\nimport { SONRAI_ORG_NAME } from 'appConstants'\nimport { fetchSavedSearchesDetails } from 'containers/SonraiData/actions'\nimport {\n selectSavedSearchesLoading,\n selectSavedSearchesDetailsLoaded,\n selectSavedSearches,\n selectSonraiUsers,\n} from 'containers/SonraiData/selectors'\n\nimport SearchInfo from './SearchInfo'\nimport messages from './messages'\nimport { duplicateSearch, deleteSavedSearch } from './actions'\nimport { selectDuplicatingSearchId } from './selectors'\nimport sagas from './sagas'\nimport reducer from './reducer'\n\nclass SearchManager extends ImmutablePureComponent {\n constructor(props) {\n super(props)\n\n this.state = {\n viewingSearchId: null,\n }\n\n this.styles = {\n container: {\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n overflow: 'hidden',\n padding: '1em',\n height: '100%',\n gridRowGap: '0.5em',\n },\n }\n\n this.gridApi = null\n }\n\n componentDidMount() {\n this.loadDetailsIfNecessary()\n }\n\n componentDidUpdate() {\n this.loadDetailsIfNecessary()\n }\n\n componentWillUnmount() {\n this.gridApi = null\n }\n\n loadDetailsIfNecessary = () => {\n if (!this.props.savedSearchesDetailsLoaded) {\n if (!this.props.savedSearchesLoading) {\n this.props.fetchSavedSearchesDetails()\n }\n }\n }\n\n onLoad = ({ api }) => {\n this.gridApi = api\n }\n\n closeSearchInfo = () => {\n this.setState({\n viewingSearchId: null,\n })\n }\n\n openSearch = ({ sid }) => {\n this.props.push({\n pathname: '/App/Search',\n search: qs.stringify({\n searchId: sid,\n view: SEARCH_VIEWS.BUILD,\n }),\n })\n }\n\n getRows = () => {\n return _.orderBy(\n this.props.savedSearches\n .toList()\n .toJS()\n .map(search => {\n const source =\n _.get(search, ['ownedByOrganization', 'items', '0', 'sid']) ===\n SONRAI_ORG_NAME\n ? 'Sonrai'\n : this.props.intl.formatMessage(messages.customSource)\n\n const comment = Object.values(_.get(search, ['query', 'fields'], {}))\n .flatMap(field => field.comments || [])\n .join(' ')\n\n return {\n name: search.name,\n usedIn: '',\n createdDate: search.createdDate,\n lastModified: search.lastModified,\n createdBy: search.createdBy,\n createdByUser: this.props.sonraiUsers\n .get(search.createdBy, Map())\n .toJS(),\n source: source,\n srn: search.srn,\n sid: search.sid,\n clone: '',\n delete: '',\n search,\n description: search.description,\n comment,\n }\n }),\n 'name'\n )\n }\n\n onClickDelete = search => {\n this.props.deleteSavedSearch(search)\n if (this.gridApi) {\n this.gridApi.showLoadingOverlay()\n }\n }\n\n onClickDuplicate = search => {\n this.props.duplicateSearch({\n fields: search.getIn(['query', 'fields']),\n resultViews: search.getIn(['query', 'resultViews']),\n name: search.get('name') + ' (Copy)',\n id: search.get('sid'),\n })\n\n if (this.gridApi) {\n this.gridApi.showLoadingOverlay()\n }\n }\n\n render() {\n const rows = this.getRows()\n\n if (!this.props.savedSearchesDetailsLoaded) {\n return \n }\n\n return (\n
\n
\n \n this.props.push({ pathname: '/App/Search' })}\n >\n \n \n \n \n \n \n
\n \n Working...',\n }}\n onLoad={this.onLoad}\n onDoubleClickRow={this.openSearch}\n data={rows}\n autosize={false}\n customColumnConfig={{\n name: {\n flex: 1,\n minWidth: 200,\n },\n sid: {\n hide: true,\n },\n srn: {\n hide: true,\n },\n search: {\n hide: true,\n },\n comment: {\n hide: true,\n },\n createdBy: {\n minWidth: 200,\n width: 200,\n valueGetter: params => {\n if (!params.data) {\n return ''\n }\n\n return params.data.createdByUser.name || 'Sonrai'\n },\n cellRendererFramework: ({ data }) => {\n if (!data) {\n return null\n }\n return \n },\n },\n usedIn: {\n valueGetter: params => {\n if (!params.data) {\n return null\n }\n\n const search = params.data.search\n const usedCount =\n search.containedByControlPolicy.count +\n search.containedByWidget.count\n\n return usedCount\n },\n cellRendererFramework: params => {\n if (!params.data) {\n return null\n }\n\n const search = params.data.search\n const usedCount =\n search.containedByControlPolicy.count +\n search.containedByWidget.count\n\n if (usedCount === 0) {\n return \n }\n\n return (\n \n this.setState({ viewingSearchId: search.sid })\n }\n >\n {usedCount === 1 ? (\n \n ) : (\n \n )}\n \n )\n },\n },\n createdByUser: {\n hide: true,\n },\n clone: {\n width: 70,\n minWidth: 70,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!params.data) {\n return null\n }\n\n const canClone = this.props.userHasPermission({\n permissionName: 'edit.searches',\n })\n const search = fromJS(params.data.search)\n if (canClone) {\n return (\n this.onClickDuplicate(search)}\n >\n \n \n )\n } else {\n return (\n \n \n \n )\n }\n },\n },\n delete: {\n width: 70,\n minWidth: 70,\n aggFunc: null,\n pinned: 'right',\n headerName: '',\n enableRowGroup: false,\n menuTabs: [],\n suppressMenu: true,\n cellRendererFramework: params => {\n if (!params.data) {\n return null\n }\n\n const canDelete = this.props.userHasPermission({\n permissionName: 'edit.searches',\n resourceId: params.data.search.resourceId,\n })\n if (canDelete) {\n return (\n this.onClickDelete(params.data.search)}\n >\n \n \n )\n } else {\n return (\n \n \n \n )\n }\n },\n },\n }}\n />\n \n \n \n "\n {this.props.savedSearches\n .get(this.state.viewingSearchId, Map())\n .get('name')}\n " used in places\n \n \n \n \n \n
\n )\n }\n}\n\nSearchManager.propTypes = {\n canDelete: PropTypes.func.isRequired,\n deleteSavedSearch: PropTypes.func,\n duplicatingSearchId: PropTypes.string,\n duplicateSearch: PropTypes.func,\n fetchSavedSearchesDetails: PropTypes.func.isRequired,\n intl: intlShape,\n onSelectSavedSearch: PropTypes.func,\n push: PropTypes.func.isRequired,\n saveDuplicate: PropTypes.func,\n savedSearches: ImmutablePropTypes.map.isRequired,\n savedSearchesLoading: PropTypes.bool,\n savedSearchesDetailsLoaded: PropTypes.bool,\n sonraiUsers: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n duplicatingSearchId: selectDuplicatingSearchId,\n savedSearches: selectSavedSearches,\n savedSearchesLoading: selectSavedSearchesLoading,\n savedSearchesDetailsLoaded: selectSavedSearchesDetailsLoaded,\n sonraiUsers: selectSonraiUsers,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n deleteSavedSearch,\n duplicateSearch,\n fetchSavedSearchesDetails,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'searchManager', reducer })\nconst withSaga = injectSaga({ key: 'searchManager', saga: sagas })\n\nexport default compose(\n withConnect,\n permissionChecker,\n themeable,\n injectIntl,\n withReducer,\n withSaga\n)(SearchManager)\n"],"sourceRoot":""}