} />
diff --git a/frontend/app/api_client.js b/frontend/app/api_client.js
index c0ccf9bcd..5673a0aab 100644
--- a/frontend/app/api_client.js
+++ b/frontend/app/api_client.js
@@ -88,7 +88,6 @@ export default class APIClient {
if (
path !== '/targets_temp' &&
!path.includes('/metadata/session_search') &&
- !path.includes('/watchdogs/rules') &&
!path.includes('/assist/credentials') &&
!!this.siteId &&
siteIdRequiredPaths.some(sidPath => path.startsWith(sidPath))
diff --git a/frontend/app/components/BugFinder/AutoComplete/AutoComplete.js b/frontend/app/components/BugFinder/AutoComplete/AutoComplete.js
deleted file mode 100644
index 59ed9d9e9..000000000
--- a/frontend/app/components/BugFinder/AutoComplete/AutoComplete.js
+++ /dev/null
@@ -1,199 +0,0 @@
-import React from 'react';
-import APIClient from 'App/api_client';
-import cn from 'classnames';
-import { Input, Icon } from 'UI';
-import { debounce } from 'App/utils';
-import OutsideClickDetectingDiv from 'Shared/OutsideClickDetectingDiv';
-import EventSearchInput from 'Shared/EventSearchInput';
-import stl from './autoComplete.module.css';
-import FilterItem from '../CustomFilters/FilterItem';
-
-const TYPE_TO_SEARCH_MSG = "Start typing to search...";
-const NO_RESULTS_MSG = "No results found.";
-const SOME_ERROR_MSG = "Some error occured.";
-const defaultValueToText = value => value;
-const defaultOptionMapping = (values, valueToText) => values.map(value => ({ text: valueToText(value), value }));
-
-const hiddenStyle = {
- whiteSpace: 'pre-wrap',
- opacity: 0, position: 'fixed', left: '-3000px'
-};
-
-let pasted = false;
-let changed = false;
-
-class AutoComplete extends React.PureComponent {
- static defaultProps = {
- method: 'GET',
- params: {},
- }
-
- state = {
- values: [],
- noResultsMessage: TYPE_TO_SEARCH_MSG,
- ddOpen: false,
- query: this.props.value,
- loading: false,
- error: false
- }
-
- componentWillReceiveProps(newProps) {
- if (this.props.value !== newProps.value) {
- this.setState({ query: newProps.value});
- }
- }
-
- onClickOutside = () => {
- this.setState({ ddOpen: false });
- }
-
- requestValues = (q) => {
- const { params, endpoint, method } = this.props;
- this.setState({
- loading: true,
- error: false,
- });
- return new APIClient()[ method.toLowerCase() ](endpoint, { ...params, q })
- .then(response => response.json())
- .then(({ errors, data }) => {
- if (errors) {
- this.setError();
- } else {
- this.setState({
- ddOpen: true,
- values: data,
- loading: false,
- noResultsMessage: NO_RESULTS_MSG,
- });
- }
- })
- .catch(this.setError);
- }
-
- debouncedRequestValues = debounce(this.requestValues, 1000)
-
- setError = () => this.setState({
- loading: false,
- error: true,
- noResultsMessage: SOME_ERROR_MSG,
- })
-
-
- onInputChange = ({ target: { value } }) => {
- changed = true;
- this.setState({ query: value, updated: true })
- const _value = value ? value.trim() : undefined;
- if (_value !== '' && _value !== ' ') {
- this.debouncedRequestValues(_value)
- }
- }
-
- onBlur = ({ target: { value } }) => {
- // to avoid sending unnecessary request on focus in/out without changing
- if (!changed && !pasted) return;
-
- value = pasted ? this.hiddenInput.value : value;
- const { onSelect, name } = this.props;
- if (value !== this.props.value) {
- const _value = value ? value.trim() : undefined;
- onSelect(null, {name, value: _value});
- }
-
- changed = false;
- pasted = false;
- }
-
- onItemClick = (e, item) => {
- e.stopPropagation();
- e.preventDefault();
- const { onSelect, name } = this.props;
-
- this.setState({ query: item.value, ddOpen: false})
- onSelect(e, {name, ...item.toJS()});
- }
-
- render() {
- const { ddOpen, query, loading, values } = this.state;
- const {
- optionMapping = defaultOptionMapping,
- valueToText = defaultValueToText,
- placeholder = 'Type to search...',
- headerText = '',
- fullWidth = false,
- onRemoveValue = () => {},
- onAddValue = () => {},
- showCloseButton = false,
- } = this.props;
-
- const options = optionMapping(values, valueToText)
-
- return (
-
- {/* */}
-
-
this.setState({ddOpen: true})}
- onChange={ this.onInputChange }
- onBlur={ this.onBlur }
- value={ query }
- autoFocus={ true }
- type="text"
- placeholder={ placeholder }
- onPaste={(e) => {
- const text = e.clipboardData.getData('Text');
- this.hiddenInput.value = text;
- pasted = true; // to use only the hidden input
- } }
- autocomplete="do-not-autofill-bad-chrome"
- />
-
- { showCloseButton ? : or}
-
-
-
- {showCloseButton && or
}
- {/* this.setState({ddOpen: true})}
- value={ query }
- // icon="search"
- label={{ basic: true, content: test
}}
- labelPosition='right'
- loading={ loading }
- autoFocus={ true }
- type="search"
- placeholder={ placeholder }
- onPaste={(e) => {
- const text = e.clipboardData.getData('Text');
- this.hiddenInput.value = text;
- pasted = true; // to use only the hidden input
- } }
- /> */}
-
- { ddOpen && options.length > 0 &&
-
- { headerText && headerText }
- {
- options.map(item => (
- this.onItemClick(e, item) }
- />
- ))
- }
-
- }
-
- );
- }
-}
-
-export default AutoComplete;
diff --git a/frontend/app/components/BugFinder/AutoComplete/DropdownItem.js b/frontend/app/components/BugFinder/AutoComplete/DropdownItem.js
deleted file mode 100644
index dc2b97304..000000000
--- a/frontend/app/components/BugFinder/AutoComplete/DropdownItem.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import stl from './dropdownItem.module.css';
-
-const DropdownItem = ({ value, onSelect }) => {
- return (
- { value }
- );
-};
-
-export default DropdownItem;
diff --git a/frontend/app/components/BugFinder/AutoComplete/autoComplete.module.css b/frontend/app/components/BugFinder/AutoComplete/autoComplete.module.css
deleted file mode 100644
index 09a9a6571..000000000
--- a/frontend/app/components/BugFinder/AutoComplete/autoComplete.module.css
+++ /dev/null
@@ -1,64 +0,0 @@
-.menu {
- border-radius: 0 0 3px 3px;
- box-shadow: 0 2px 10px 0 $gray-light;
- padding: 20px;
- background-color: white;
- max-height: 350px;
- overflow-y: auto;
- position: absolute;
- top: 28px;
- left: 0;
- width: 500px;
- z-index: 99;
-}
-
-.searchInput {
- & input {
- font-size: 13px !important;
- padding: 5px !important;
- color: $gray-darkest !important;
- font-size: 14px !important;
- background-color: rgba(255, 255, 255, 0.8) !important;
-
- & .label {
- padding: 0px !important;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
- height: 28px !important;
- width: 280px;
- color: $gray-darkest !important;
-}
-
-.fullWidth {
- width: 100% !important;
-}
-
-.inputWrapper {
- border: solid thin $gray-light !important;
- border-radius: 3px;
- border-radius: 3px;
- display: flex;
- align-items: center;
- & input {
- height: 28px;
- font-size: 13px !important;
- padding: 0 5px !important;
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
- }
-
- & .right {
- height: 28px;
- display: flex;
- align-items: center;
- padding: 0 5px;
- background-color: $gray-lightest;
- border-left: solid thin $gray-light !important;
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
- cursor: pointer;
- }
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/AutoComplete/dropdownItem.module.css b/frontend/app/components/BugFinder/AutoComplete/dropdownItem.module.css
deleted file mode 100644
index f5646a470..000000000
--- a/frontend/app/components/BugFinder/AutoComplete/dropdownItem.module.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.wrapper {
- padding: 8px;
- border-bottom: solid thin rgba(0, 0, 0, 0.05);
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- cursor: pointer;
- &:hover {
- background-color: $active-blue;
- }
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/AutoComplete/index.js b/frontend/app/components/BugFinder/AutoComplete/index.js
deleted file mode 100644
index fa63241a4..000000000
--- a/frontend/app/components/BugFinder/AutoComplete/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './AutoComplete';
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/BugFinder.js b/frontend/app/components/BugFinder/BugFinder.js
deleted file mode 100644
index 2c31a3ca8..000000000
--- a/frontend/app/components/BugFinder/BugFinder.js
+++ /dev/null
@@ -1,131 +0,0 @@
-import React from 'react';
-import cn from 'classnames';
-import { connect } from 'react-redux';
-import withPageTitle from 'HOCs/withPageTitle';
-import { fetchFavoriteList as fetchFavoriteSessionList } from 'Duck/sessions';
-import { applyFilter, clearEvents, addAttribute } from 'Duck/filters';
-import { KEYS } from 'Types/filter/customFilter';
-import SessionList from './SessionList';
-import stl from './bugFinder.module.css';
-import withLocationHandlers from 'HOCs/withLocationHandlers';
-import { fetch as fetchFilterVariables } from 'Duck/sources';
-import { fetchSources } from 'Duck/customField';
-import { setActiveTab } from 'Duck/search';
-import SessionsMenu from './SessionsMenu/SessionsMenu';
-import NoSessionsMessage from 'Shared/NoSessionsMessage';
-import SessionSearch from 'Shared/SessionSearch';
-import MainSearchBar from 'Shared/MainSearchBar';
-import { clearSearch, fetchSessions, addFilterByKeyAndValue } from 'Duck/search';
-import { FilterKey } from 'Types/filter/filterType';
-
-const weakEqual = (val1, val2) => {
- if (!!val1 === false && !!val2 === false) return true;
- if (!val1 !== !val2) return false;
- return `${val1}` === `${val2}`;
-};
-
-const allowedQueryKeys = [
- 'userOs',
- 'userId',
- 'userBrowser',
- 'userDevice',
- 'userCountry',
- 'startDate',
- 'endDate',
- 'minDuration',
- 'maxDuration',
- 'referrer',
- 'sort',
- 'order',
-];
-
-@withLocationHandlers()
-@connect(
- (state) => ({
- filter: state.getIn(['filters', 'appliedFilter']),
- variables: state.getIn(['customFields', 'list']),
- sources: state.getIn(['customFields', 'sources']),
- filterValues: state.get('filterValues'),
- favoriteList: state.getIn(['sessions', 'favoriteList']),
- currentProjectId: state.getIn(['site', 'siteId']),
- sites: state.getIn(['site', 'list']),
- watchdogs: state.getIn(['watchdogs', 'list']),
- activeFlow: state.getIn(['filters', 'activeFlow']),
- sessions: state.getIn(['sessions', 'list']),
- }),
- {
- fetchFavoriteSessionList,
- applyFilter,
- addAttribute,
- fetchFilterVariables,
- fetchSources,
- clearEvents,
- setActiveTab,
- clearSearch,
- fetchSessions,
- addFilterByKeyAndValue,
- }
-)
-@withPageTitle('Sessions - OpenReplay')
-export default class BugFinder extends React.PureComponent {
- state = { showRehydratePanel: false };
- constructor(props) {
- super(props);
-
- // TODO should cache the response
- // props.fetchSources().then(() => {
- // defaultFilters[6] = {
- // category: 'Collaboration',
- // type: 'CUSTOM',
- // keys: this.props.sources.filter(({type}) => type === 'collaborationTool').map(({ label, key }) => ({ type: 'CUSTOM', source: key, label: label, key, icon: 'integrations/' + key, isFilter: false })).toJS()
- // };
- // defaultFilters[7] = {
- // category: 'Logging Tools',
- // type: 'ERROR',
- // keys: this.props.sources.filter(({type}) => type === 'logTool').map(({ label, key }) => ({ type: 'ERROR', source: key, label: label, key, icon: 'integrations/' + key, isFilter: false })).toJS()
- // };
- // });
- // if (props.sessions.size === 0) {
- // props.fetchSessions();
- // }
-
- const queryFilter = this.props.query.all(allowedQueryKeys);
- if (queryFilter.hasOwnProperty('userId')) {
- props.addFilterByKeyAndValue(FilterKey.USERID, queryFilter.userId);
- } else {
- if (props.sessions.size === 0) {
- props.fetchSessions();
- }
- }
- }
-
- toggleRehydratePanel = () => {
- this.setState({ showRehydratePanel: !this.state.showRehydratePanel });
- };
-
- setActiveTab = (tab) => {
- this.props.setActiveTab(tab);
- };
-
- render() {
- const { showRehydratePanel } = this.state;
-
- return (
-
- );
- }
-}
diff --git a/frontend/app/components/BugFinder/DateRange.js b/frontend/app/components/BugFinder/DateRange.js
deleted file mode 100644
index 9a6e77f12..000000000
--- a/frontend/app/components/BugFinder/DateRange.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { connect } from 'react-redux';
-import { applyFilter } from 'Duck/search';
-import { fetchList as fetchFunnelsList } from 'Duck/funnels';
-import DateRangeDropdown from 'Shared/DateRangeDropdown';
-
-@connect(state => ({
- filter: state.getIn([ 'search', 'instance' ]),
-}), {
- applyFilter, fetchFunnelsList
-})
-export default class DateRange extends React.PureComponent {
- onDateChange = (e) => {
- // this.props.fetchFunnelsList(e.rangeValue)
- this.props.applyFilter(e)
- }
- render() {
- const { filter: { rangeValue, startDate, endDate }, className } = this.props;
-
- return (
-
- );
- }
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/FilterSelectionButton.js b/frontend/app/components/BugFinder/FilterSelectionButton.js
deleted file mode 100644
index 9854b29a3..000000000
--- a/frontend/app/components/BugFinder/FilterSelectionButton.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import { Icon } from 'UI';
-import stl from './filterSelectionButton.module.css';
-
-const FilterSelectionButton = ({ label }) => {
- return (
-
- { label }
-
-
- );
-};
-
-export default FilterSelectionButton;
diff --git a/frontend/app/components/BugFinder/Filters/SortDropdown.js b/frontend/app/components/BugFinder/Filters/SortDropdown.js
deleted file mode 100644
index 398902ec5..000000000
--- a/frontend/app/components/BugFinder/Filters/SortDropdown.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react';
-import { connect } from 'react-redux';
-import Select from 'Shared/Select';
-import { Icon } from 'UI';
-import { sort } from 'Duck/sessions';
-import { applyFilter } from 'Duck/search';
-import stl from './sortDropdown.module.css';
-
-@connect(null, { sort, applyFilter })
-export default class SortDropdown extends React.PureComponent {
- state = { value: null }
- sort = ({ value }) => {
- value = value.value
- this.setState({ value: value })
- const [ sort, order ] = value.split('-');
- const sign = order === 'desc' ? -1 : 1;
- this.props.applyFilter({ order, sort });
-
- this.props.sort(sort, sign)
- setTimeout(() => this.props.sort(sort, sign), 3000); //AAA
- }
-
- render() {
- const { options } = this.props;
- return (
- }
- />
- );
- }
-}
diff --git a/frontend/app/components/BugFinder/Filters/index.js b/frontend/app/components/BugFinder/Filters/index.js
deleted file mode 100644
index 5b18d95f3..000000000
--- a/frontend/app/components/BugFinder/Filters/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './Filters';
diff --git a/frontend/app/components/BugFinder/Filters/sortDropdown.module.css b/frontend/app/components/BugFinder/Filters/sortDropdown.module.css
deleted file mode 100644
index 87e26bc68..000000000
--- a/frontend/app/components/BugFinder/Filters/sortDropdown.module.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.dropdown {
- display: flex !important;
- padding: 4px 6px;
- border-radius: 3px;
- color: $gray-darkest;
- font-weight: 500;
- &:hover {
- background-color: $gray-light;
- }
-}
-
-.dropdownTrigger {
- padding: 4px 8px;
- border-radius: 3px;
- &:hover {
- background-color: $gray-light;
- }
-}
-
-.dropdownIcon {
- margin-top: 2px;
- margin-left: 3px;
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/Insights.js b/frontend/app/components/BugFinder/Insights.js
deleted file mode 100644
index 39cfdd041..000000000
--- a/frontend/app/components/BugFinder/Insights.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { connect } from 'react-redux';
-import styles from './insights.module.css';
-
-const Insights = ({ insights }) => (
-
-
-
- {'This journey is only 2% of all the journeys but represents 20% of problems.'}
-
-
-
- {'Lorem Ipsum 1290 events of 1500 events.'}
-
-
-);
-
-Insights.displayName = 'Insights';
-
-export default connect(state => ({
- insights: state.getIn([ 'sessions', 'insights' ]),
-}))(Insights);
diff --git a/frontend/app/components/BugFinder/ListHeader.js b/frontend/app/components/BugFinder/ListHeader.js
deleted file mode 100644
index 4379d0647..000000000
--- a/frontend/app/components/BugFinder/ListHeader.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-import stl from './listHeader.module.css';
-
-const ListHeader = ({ title }) => {
- return (
- { title }
- );
-};
-
-export default ListHeader;
diff --git a/frontend/app/components/BugFinder/SessionList/SessionList.js b/frontend/app/components/BugFinder/SessionList/SessionList.js
deleted file mode 100644
index a2901812b..000000000
--- a/frontend/app/components/BugFinder/SessionList/SessionList.js
+++ /dev/null
@@ -1,150 +0,0 @@
-import React from 'react';
-import { connect } from 'react-redux';
-import { Loader, NoContent, Pagination } from 'UI';
-import { applyFilter, addAttribute, addEvent } from 'Duck/filters';
-import { fetchSessions, addFilterByKeyAndValue, updateCurrentPage, setScrollPosition } from 'Duck/search';
-import SessionItem from 'Shared/SessionItem';
-import SessionListHeader from './SessionListHeader';
-import { FilterKey } from 'Types/filter/filterType';
-import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG';
-
-// const ALL = 'all';
-const PER_PAGE = 10;
-const AUTOREFRESH_INTERVAL = 5 * 60 * 1000;
-var timeoutId;
-
-@connect(state => ({
- shouldAutorefresh: state.getIn([ 'filters', 'appliedFilter', 'events' ]).size === 0,
- savedFilters: state.getIn([ 'filters', 'list' ]),
- loading: state.getIn([ 'sessions', 'loading' ]),
- activeTab: state.getIn([ 'search', 'activeTab' ]),
- allList: state.getIn([ 'sessions', 'list' ]),
- total: state.getIn([ 'sessions', 'total' ]),
- filters: state.getIn([ 'search', 'instance', 'filters' ]),
- metaList: state.getIn(['customFields', 'list']).map(i => i.key),
- currentPage: state.getIn([ 'search', 'currentPage' ]),
- scrollY: state.getIn([ 'search', 'scrollY' ]),
- lastPlayedSessionId: state.getIn([ 'sessions', 'lastPlayedSessionId' ]),
-}), {
- applyFilter,
- addAttribute,
- addEvent,
- fetchSessions,
- addFilterByKeyAndValue,
- updateCurrentPage,
- setScrollPosition,
-})
-export default class SessionList extends React.PureComponent {
-
- constructor(props) {
- super(props);
- this.timeout();
- }
-
- onUserClick = (userId, userAnonymousId) => {
- if (userId) {
- this.props.addFilterByKeyAndValue(FilterKey.USERID, userId);
- } else {
- this.props.addFilterByKeyAndValue(FilterKey.USERID, '', 'isUndefined');
- }
- }
-
- timeout = () => {
- timeoutId = setTimeout(function () {
- if (this.props.shouldAutorefresh) {
- // this.props.applyFilter();
- this.props.fetchSessions();
- }
- this.timeout();
- }.bind(this), AUTOREFRESH_INTERVAL);
- }
-
- getNoContentMessage = activeTab => {
- let str = "No recordings found";
- if (activeTab.type !== 'all') {
- str += ' with ' + activeTab.name;
- return str;
- }
-
- return str + '!';
- }
-
- componentWillUnmount() {
- this.props.setScrollPosition(window.scrollY)
- clearTimeout(timeoutId)
- }
-
- componentDidMount() {
- const { scrollY } = this.props;
- window.scrollTo(0, scrollY);
- }
-
- renderActiveTabContent(list) {
- const {
- loading,
- filters,
- activeTab,
- metaList,
- currentPage,
- total,
- lastPlayedSessionId,
- } = this.props;
- const _filterKeys = filters.map(i => i.key);
- const hasUserFilter = _filterKeys.includes(FilterKey.USERID) || _filterKeys.includes(FilterKey.USERANONYMOUSID);
-
- return (
-
-
-
- {this.getNoContentMessage(activeTab)}
- }
- // subtext="Please try changing your search parameters."
- // animatedIcon="no-results"
- show={ !loading && list.size === 0}
- subtext={
-
-
Please try changing your search parameters.
-
- }
- >
-
-
- { list.map(session => (
-
-
-
-
- ))}
-
-
-
this.props.updateCurrentPage(page)}
- limit={PER_PAGE}
- debounceRequest={1000}
- />
-
-
-
- );
- }
-
- render() {
- const { activeTab, allList, total } = this.props;
-
- return (
-
-
- { this.renderActiveTabContent(allList) }
-
- );
- }
-}
diff --git a/frontend/app/components/BugFinder/SessionList/SessionListFooter.js b/frontend/app/components/BugFinder/SessionList/SessionListFooter.js
deleted file mode 100644
index 2d8edd726..000000000
--- a/frontend/app/components/BugFinder/SessionList/SessionListFooter.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { connect } from 'react-redux';
-import { Button } from 'UI';
-import styles from './sessionListFooter.module.css';
-
-const SessionListFooter = ({
- displayedCount, totalCount, loading, onLoadMoreClick,
-}) => (
-
-
- { `Displaying ${ displayedCount } of ${ totalCount }` }
-
- { totalCount > displayedCount &&
-
- }
-
-);
-
-SessionListFooter.displayName = 'SessionListFooter';
-
-export default connect(state => ({
- loading: state.getIn([ 'sessions', 'loading' ])
-}))(SessionListFooter);
diff --git a/frontend/app/components/BugFinder/SessionList/SessionListHeader.js b/frontend/app/components/BugFinder/SessionList/SessionListHeader.js
deleted file mode 100644
index c6994fdaf..000000000
--- a/frontend/app/components/BugFinder/SessionList/SessionListHeader.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import React from 'react';
-import { connect } from 'react-redux';
-import SortDropdown from '../Filters/SortDropdown';
-import { numberWithCommas } from 'App/utils';
-import SelectDateRange from 'Shared/SelectDateRange';
-import { applyFilter } from 'Duck/search';
-import Record from 'Types/app/period';
-import { useStore } from 'App/mstore';
-import { useObserver } from 'mobx-react-lite';
-import { moment } from 'App/dateRange';
-
-const sortOptionsMap = {
- 'startTs-desc': 'Newest',
- 'startTs-asc': 'Oldest',
- 'eventsCount-asc': 'Events Ascending',
- 'eventsCount-desc': 'Events Descending',
-};
-const sortOptions = Object.entries(sortOptionsMap).map(([value, label]) => ({ value, label }));
-
-function SessionListHeader({ activeTab, count, applyFilter, filter }) {
- const { settingsStore } = useStore();
-
- const label = useObserver(() => settingsStore.sessionSettings.timezone.label);
- const getTimeZoneOffset = React.useCallback(() => {
- return label.slice(-6);
- }, [label]);
-
- const { startDate, endDate, rangeValue } = filter;
- const period = new Record({ start: startDate, end: endDate, rangeName: rangeValue, timezoneOffset: getTimeZoneOffset() });
-
- const onDateChange = (e) => {
- const dateValues = e.toJSON();
- dateValues.startDate = moment(dateValues.startDate).utcOffset(getTimeZoneOffset(), true).valueOf();
- dateValues.endDate = moment(dateValues.endDate).utcOffset(getTimeZoneOffset(), true).valueOf();
- applyFilter(dateValues);
- };
-
- React.useEffect(() => {
- if (label) {
- const dateValues = period.toJSON();
- dateValues.startDate = moment(dateValues.startDate).startOf('day').utcOffset(getTimeZoneOffset(), true).valueOf();
- dateValues.endDate = moment(dateValues.endDate).endOf('day').utcOffset(getTimeZoneOffset(), true).valueOf();
- // applyFilter(dateValues);
- }
- }, [label]);
-
- return (
-
-
-
- {activeTab.name}
- {count ? numberWithCommas(count) : 0}
-
- {
-
- Sessions Captured in
-
-
- }
-
-
-
- );
-}
-
-export default connect(
- (state) => ({
- activeTab: state.getIn(['search', 'activeTab']),
- period: state.getIn(['search', 'period']),
- filter: state.getIn(['search', 'instance']),
- }),
- { applyFilter }
-)(SessionListHeader);
diff --git a/frontend/app/components/BugFinder/SessionList/index.js b/frontend/app/components/BugFinder/SessionList/index.js
deleted file mode 100644
index 7ad26942d..000000000
--- a/frontend/app/components/BugFinder/SessionList/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './SessionList';
diff --git a/frontend/app/components/BugFinder/SessionList/sessionList.module.css b/frontend/app/components/BugFinder/SessionList/sessionList.module.css
deleted file mode 100644
index 1d8cbbc6b..000000000
--- a/frontend/app/components/BugFinder/SessionList/sessionList.module.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.customMessage {
- padding: 5px 10px !important;
- box-shadow: none !important;
- font-size: 12px !important;
- color: $gray-medium !important;
- font-weight: 300;
- display: flex;
- justify-content: center;
- & > div {
- flex: none !important;
- }
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/SessionList/sessionListFooter.module.css b/frontend/app/components/BugFinder/SessionList/sessionListFooter.module.css
deleted file mode 100644
index d7a90c1b7..000000000
--- a/frontend/app/components/BugFinder/SessionList/sessionListFooter.module.css
+++ /dev/null
@@ -1,18 +0,0 @@
-@import 'mixins.css';
-
-.pageLoading {
- display: flex;
- flex-flow: column;
- align-items: center;
- margin: 20px 0 30px;
-}
-
-.loadMoreButton {
- @mixin basicButton;
-}
-
-.countInfo {
- font-size: 10px;
- color: #999;
- margin-bottom: 10px;
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js b/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js
deleted file mode 100644
index 4dde1a130..000000000
--- a/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import React from 'react'
-import { connect } from 'react-redux';
-import cn from 'classnames';
-import { SideMenuitem, Tooltip } from 'UI'
-import stl from './sessionMenu.module.css';
-import { clearEvents } from 'Duck/filters';
-import { issues_types } from 'Types/session/issue'
-import { fetchList as fetchSessionList } from 'Duck/sessions';
-import { useModal } from 'App/components/Modal';
-import SessionSettings from 'Shared/SessionSettings/SessionSettings'
-
-function SessionsMenu(props) {
- const { activeTab, isEnterprise } = props;
- const { showModal } = useModal();
-
- const onMenuItemClick = (filter) => {
- props.onMenuItemClick(filter)
- }
-
- return (
-
-
-
- Sessions
-
-
showModal(, { right: true })}>
- Configure the percentage of sessions
to be captured, timezone and more.}
- >
- Settings
-
-
-
-
-
- onMenuItemClick({ name: 'All', type: 'all' })}
- />
-
-
- { issues_types.filter(item => item.visible).map(item => (
-
onMenuItemClick(item)}
- />
- ))}
-
-
- onMenuItemClick({ name: isEnterprise ? 'Vault' : 'Bookmarks', type: 'bookmark', description: isEnterprise ? 'Sessions saved to vault never get\'s deleted from records.' : '' })}
- />
-
- )
-}
-
-export default connect(state => ({
- activeTab: state.getIn([ 'search', 'activeTab' ]),
- captureRate: state.getIn(['watchdogs', 'captureRate']),
- filters: state.getIn([ 'filters', 'appliedFilter' ]),
- sessionsLoading: state.getIn([ 'sessions', 'fetchLiveListRequest', 'loading' ]),
- isEnterprise: state.getIn([ 'user', 'account', 'edition' ]) === 'ee',
-}), {
- clearEvents, fetchSessionList
-})(SessionsMenu);
diff --git a/frontend/app/components/BugFinder/SessionsMenu/index.js b/frontend/app/components/BugFinder/SessionsMenu/index.js
deleted file mode 100644
index b045139e4..000000000
--- a/frontend/app/components/BugFinder/SessionsMenu/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './SessionsMenu';
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/SessionsMenu/sessionMenu.module.css b/frontend/app/components/BugFinder/SessionsMenu/sessionMenu.module.css
deleted file mode 100644
index fe6643871..000000000
--- a/frontend/app/components/BugFinder/SessionsMenu/sessionMenu.module.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.header {
- margin-bottom: 15px;
- & .label {
- text-transform: uppercase;
- color: gray;
- letter-spacing: 0.2em;
- }
-
- & .manageButton {
- margin-left: 5px;
- font-size: 12px;
- color: $teal;
- cursor: pointer;
- padding: 2px 5px;
- border: solid thin transparent;
- border-radius: 3px;
- margin-bottom: -3px;
- &:hover {
- background-color: $gray-light;
- color: $gray-darkest;
- }
- }
-}
-
-.divider {
- height: 1px;
- width: 100%;
- background-color: $gray-light;
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/TabItem/TabItem.js b/frontend/app/components/BugFinder/TabItem/TabItem.js
deleted file mode 100644
index cf1202046..000000000
--- a/frontend/app/components/BugFinder/TabItem/TabItem.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react';
-import cn from 'classnames';
-import { Icon } from 'UI';
-import stl from './tabItem.module.css';
-
-const TabItem = ({ icon, label, count, iconColor = 'teal', active = false, leading, ...rest }) => {
- return (
-
-
- { icon && }
- { label }
- { count && ({ count })}
-
- { !!leading && leading }
-
- );
-}
-
-export default TabItem;
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/TabItem/index.js b/frontend/app/components/BugFinder/TabItem/index.js
deleted file mode 100644
index a710e0eb5..000000000
--- a/frontend/app/components/BugFinder/TabItem/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './TabItem'
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/TabItem/tabItem.module.css b/frontend/app/components/BugFinder/TabItem/tabItem.module.css
deleted file mode 100644
index 61dafc098..000000000
--- a/frontend/app/components/BugFinder/TabItem/tabItem.module.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.wrapper {
- color: $teal;
- cursor: pointer;
- padding: 5px;
- border: solid thin transparent;
- border-radius: 3px;
- margin-left: -5px;
-
- &.active,
- &:hover {
- background-color: $active-blue;
- border-color: $active-blue-border;
- & .actionWrapper {
- opacity: 1;
- }
- }
-}
-
-.disabled {
- opacity: 0.5;
- pointer-events: none;
- cursor: not-allowed;
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/bugFinder.module.css b/frontend/app/components/BugFinder/bugFinder.module.css
deleted file mode 100644
index 15198e709..000000000
--- a/frontend/app/components/BugFinder/bugFinder.module.css
+++ /dev/null
@@ -1,44 +0,0 @@
-@import 'mixins.css';
-
-.searchWrapper {
- flex: 1;
- border-radius: 3px;
- margin-bottom: 30px;
-}
-
-
-.bottom {
- display: flex;
- align-items: center;
- border-top: solid thin #EDEDED;
- & > div {
- cursor: pointer;
- padding: 0 10px;
- border-right: solid thin $gray-light;
- &:hover {
- background-color: $active-blue;
- }
- &:last-child {
- border-right: solid thin transparent;
- }
- &:first-child {
- flex: 1;
- text-align: center;
- }
- }
-
-}
-
-.savedSearchesWrapper {
- width: 200px;
- margin-left: 20px;
-}
-
-
-.header {
- text-transform: uppercase;
- font-size: 12px;
- margin-bottom: 10px;
- letter-spacing: 1px;
- color: $gray-medium;
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/bugFinder.stories.js b/frontend/app/components/BugFinder/bugFinder.stories.js
deleted file mode 100644
index fb9acb8b6..000000000
--- a/frontend/app/components/BugFinder/bugFinder.stories.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import { storiesOf } from '@storybook/react';
-import SessionsMenu from './SessionsMenu/SessionsMenu';
-import SessionItem from 'Shared/SessionItem';
-import SessionStack from 'Shared/SessionStack';
-import Session from 'Types/session';
-import SessionListHeader from './SessionList/SessionListHeader';
-import SavedFilter from 'Types/filter/savedFilter';
-import { List } from 'immutable';
-
-var items = [
- {
- "watchdogId": 140,
- "projectId": 1,
- "type": "errors",
- "payload": {
- "threshold": 0,
- "captureAll": true
- }
- },
- {
- "watchdogId": 139,
- "projectId": 1,
- "type": "bad_request",
- "payload": {
- "threshold": 0,
- "captureAll": true
- }
- },
-]
-
-var session = Session({
- "projectId": 1,
- "sessionId": "2236890417118217",
- "userUuid": "1e4bec88-fe8d-4f51-9806-716e92384ffc",
- "userId": null,
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
- "userOs": "Mac OS X",
- "userBrowser": "Chrome",
- "userDevice": "Mac",
- "userCountry": "FR",
- "startTs": 1584132239030,
- "duration": 618469,
- "eventsCount": 24,
- "pagesCount": 18,
- "errorsCount": 0,
- "watchdogs": [
- 137,
- 143
- ],
- "favorite": false,
- "viewed": false
-})
-
-var savedFilters = [
- SavedFilter({filterId: 1, name: 'Something', count: 10, watchdogs: []})
-]
-
-storiesOf('Bug Finder', module)
- .add('Sessions Menu', () => (
-
- ))
- .add('Sessions Item', () => (
-
- ))
- .add('Session List Header', () => (
-
- ))
- .add('Sessions Stack', () => (
-
- ))
diff --git a/frontend/app/components/BugFinder/filterSelectionButton.module.css b/frontend/app/components/BugFinder/filterSelectionButton.module.css
deleted file mode 100644
index 4c51cf3a4..000000000
--- a/frontend/app/components/BugFinder/filterSelectionButton.module.css
+++ /dev/null
@@ -1,24 +0,0 @@
-
-.wrapper {
- display: flex;
- align-items: center;
- justify-content: space-between;
- height: 28px;
- border: solid thin rgba(34, 36, 38, 0.15) !important;
- border-radius: 4px;
- padding: 0 10px;
- width: 150px;
- color: $gray-darkest;
- cursor: pointer;
- background-color: rgba(0, 0, 0, 0.1) !important;
- &:hover {
- background-color: white;
- }
- & span {
- margin-right: 5px;
- max-width: 140px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
-}
\ No newline at end of file
diff --git a/frontend/app/components/BugFinder/index.js b/frontend/app/components/BugFinder/index.js
deleted file mode 100644
index 7594b6ce8..000000000
--- a/frontend/app/components/BugFinder/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './BugFinder';
diff --git a/frontend/app/components/BugFinder/insights.module.css b/frontend/app/components/BugFinder/insights.module.css
deleted file mode 100644
index 8d935dbac..000000000
--- a/frontend/app/components/BugFinder/insights.module.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-@import 'icons.css';
-
-.notes {
- margin: 15px 0;
- font-weight: 300;
-}
-.tipIcon {
- @mixin icon lightbulb, $gray-medium, 13px;
- margin-right: 5px;
-}
-
-.tipText {
- display: flex;
- align-items: center;
- color: $gray-medium;
- font-size: 12px;
-}
diff --git a/frontend/app/components/BugFinder/listHeader.module.css b/frontend/app/components/BugFinder/listHeader.module.css
deleted file mode 100644
index 76e5907e4..000000000
--- a/frontend/app/components/BugFinder/listHeader.module.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.header {
- padding: 3px 10px;
- letter-spacing: 1.5px;
- color: $gray-medium;
- font-size: 12px;
- text-transform: uppercase;
-}
\ No newline at end of file
diff --git a/frontend/app/components/Errors/List/List.js b/frontend/app/components/Errors/List/List.js
index 8a22a1f2d..4318951ab 100644
--- a/frontend/app/components/Errors/List/List.js
+++ b/frontend/app/components/Errors/List/List.js
@@ -4,8 +4,7 @@ import { Set, List as ImmutableList } from "immutable";
import { NoContent, Loader, Checkbox, LoadMoreButton, IconButton, Input, DropdownPlain, Pagination } from 'UI';
import { merge, resolve, unresolve, ignore, updateCurrentPage, editOptions } from "Duck/errors";
import { applyFilter } from 'Duck/filters';
-import { IGNORED, RESOLVED, UNRESOLVED } from 'Types/errorInfo';
-import SortDropdown from 'Components/BugFinder/Filters/SortDropdown';
+import { IGNORED, UNRESOLVED } from 'Types/errorInfo';
import Divider from 'Components/Errors/ui/Divider';
import ListItem from './ListItem/ListItem';
import { debounce } from 'App/utils';
diff --git a/frontend/app/components/shared/SessionStack/SessionStack.js b/frontend/app/components/shared/SessionStack/SessionStack.js
deleted file mode 100644
index 394e36ab7..000000000
--- a/frontend/app/components/shared/SessionStack/SessionStack.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react'
-import stl from './sessionStack.module.css'
-import cn from 'classnames';
-import { Icon } from 'UI'
-import { names } from 'Types/watchdog'
-import { applySavedFilter, setActiveFlow } from 'Duck/filters';
-import { connect } from 'react-redux';
-import { setActiveTab } from 'Duck/sessions';
-
-const IconLabel = ({ icon, label}) => (
-
-
0 ? 'gray' : 'gray-medium'} />
- 0 ? 'color-gray' : 'color-gray-medium')}>{label}
-
-)
-
-function SessionStack({ flow = {}, applySavedFilter, setActiveTab, setActiveFlow }) {
- const onAllClick = (flow) => {
- setActiveFlow(flow)
- applySavedFilter(flow.filter)
- setActiveTab({ type: 'all', name: 'All'})
- }
- return (
-
-
onAllClick(flow)}>
- {flow.name}
-
-
-
{flow.count} Sessions
-
- {flow.watchdogs.map(({type, count}) => (
-
- ))}
-
-
-
- )
-}
-
-export default connect(null, { applySavedFilter, setActiveTab, setActiveFlow })(SessionStack)
diff --git a/frontend/app/components/shared/SessionStack/index.js b/frontend/app/components/shared/SessionStack/index.js
deleted file mode 100644
index db3464728..000000000
--- a/frontend/app/components/shared/SessionStack/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './SessionStack';
\ No newline at end of file
diff --git a/frontend/app/components/shared/SessionStack/sessionStack.module.css b/frontend/app/components/shared/SessionStack/sessionStack.module.css
deleted file mode 100644
index 30b2a6eef..000000000
--- a/frontend/app/components/shared/SessionStack/sessionStack.module.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-@import 'mixins.css';
-
-.wrapper {
- background: #fff;
- border: solid thin $gray-light;
- border-radius: 3px;
- @mixin defaultHover;
- box-shadow:
- /* The top layer shadow */
- /* 0 1px 1px rgba(0,0,0,0.15), */
- /* The second layer */
- 4px 4px 1px 1px white,
- /* The second layer shadow */
- 4px 4px 0px 1px rgba(0,0,0,0.4);
- /* Padding for demo purposes */
- padding: 16px;
-}
\ No newline at end of file
diff --git a/frontend/app/types/filter/savedFilter.js b/frontend/app/types/filter/savedFilter.js
index f10b0686b..7b414430f 100644
--- a/frontend/app/types/filter/savedFilter.js
+++ b/frontend/app/types/filter/savedFilter.js
@@ -11,7 +11,6 @@ export default Record({
filter: Filter(),
createdAt: undefined,
count: 0,
- watchdogs: List(),
isPublic: false,
}, {
idKey: 'searchId',
diff --git a/frontend/app/types/session/session.ts b/frontend/app/types/session/session.ts
index 49d5f6962..2b362ceff 100644
--- a/frontend/app/types/session/session.ts
+++ b/frontend/app/types/session/session.ts
@@ -66,7 +66,6 @@ export default Record(
returningLocation: undefined,
returningLocationTime: undefined,
errorsCount: 0,
- watchdogs: [],
issueTypes: [],
issues: [],
userDeviceHeapSize: 0,
@@ -145,7 +144,6 @@ export default Record(
return {
...session,
isIOS: session.platform === 'ios',
- watchdogs: session.watchdogs || [],
errors: exceptions,
siteId: projectId,
events,
diff --git a/frontend/app/types/ts/search.ts b/frontend/app/types/ts/search.ts
index 1c45bbe56..32660818b 100644
--- a/frontend/app/types/ts/search.ts
+++ b/frontend/app/types/ts/search.ts
@@ -10,5 +10,4 @@ export interface SavedSearch {
projectId: number;
searchId: number;
userId: number;
- watchdogs: List
}