diff --git a/frontend/app/Router.js b/frontend/app/Router.js index e3250f892..cc31ea640 100644 --- a/frontend/app/Router.js +++ b/frontend/app/Router.js @@ -17,7 +17,7 @@ const AssistPure = lazy(() => import('Components/Assist')); const BugFinderPure = lazy(() => import('Components/BugFinder/BugFinder')); const DashboardPure = lazy(() => import('Components/Dashboard/NewDashboard')); const ErrorsPure = lazy(() => import('Components/Errors/Errors')); -const FunnelDetails = lazy(() => import('Components/Funnels/FunnelDetails')); +const FunnelDetailsPure = lazy(() => import('Components/Funnels/FunnelDetails')); const FunnelIssueDetails = lazy(() => import('Components/Funnels/FunnelIssueDetails')); const FunnelPagePure = lazy(() => import('Components/Funnels/FunnelPage')); import WidgetViewPure from 'Components/Dashboard/components/WidgetView'; @@ -49,7 +49,7 @@ const Client = withSiteIdUpdater(ClientPure); const Onboarding = withSiteIdUpdater(OnboardingPure); const Errors = withSiteIdUpdater(ErrorsPure); const FunnelPage = withSiteIdUpdater(FunnelPagePure); -const Funnels = withSiteIdUpdater(FunnelDetails); +const FunnelsDetails = withSiteIdUpdater(FunnelDetailsPure); const FunnelIssue = withSiteIdUpdater(FunnelIssueDetails); const withSiteId = routes.withSiteId; const withObTab = routes.withObTab; @@ -68,7 +68,7 @@ const ASSIST_PATH = routes.assist(); const ERRORS_PATH = routes.errors(); const ERROR_PATH = routes.error(); const FUNNEL_PATH = routes.funnels(); -// const FUNNEL_DETAIL_PATH = routes.funnel(); +const FUNNEL_CREATE_PATH = routes.funnelsCreate(); const FUNNEL_ISSUE_PATH = routes.funnelIssue(); const SESSION_PATH = routes.session(); const LIVE_SESSION_PATH = routes.liveSession(); @@ -216,6 +216,7 @@ class Router extends React.Component { + {/* */} diff --git a/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js__ similarity index 100% rename from frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js rename to frontend/app/components/Funnels/FunnelDetails/FunnelDetails.js__ diff --git a/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.tsx b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.tsx new file mode 100644 index 000000000..0bbc2fe5c --- /dev/null +++ b/frontend/app/components/Funnels/FunnelDetails/FunnelDetails.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { withRouter } from 'react-router-dom'; + +interface Props { + +} +function FunnelDetails(props: Props) { + return ( +
+ Create View/Detail View +
+ ); +} + +export default withRouter(FunnelDetails); \ No newline at end of file diff --git a/frontend/app/components/Funnels/FunnelList/FunnelList.tsx b/frontend/app/components/Funnels/FunnelList/FunnelList.tsx index b73b643c2..ca18a3c81 100644 --- a/frontend/app/components/Funnels/FunnelList/FunnelList.tsx +++ b/frontend/app/components/Funnels/FunnelList/FunnelList.tsx @@ -4,6 +4,7 @@ import { useObserver } from 'mobx-react-lite'; import React, { useEffect } from 'react'; import { sliceListPerPage } from 'App/utils'; import FunnelItem from '../FunnelItem/FunnelItem'; +import FunnelSearch from '../FunnelSearch'; function FunnelList(props) { const { funnelStore } = useStore() @@ -19,8 +20,13 @@ function FunnelList(props) { return (
- - +
+ + +
+
+ +
Funnels make it easy to uncover the most significant issues that impacted conversions.
diff --git a/frontend/app/components/Funnels/FunnelPage/FunnelPage.tsx b/frontend/app/components/Funnels/FunnelPage/FunnelPage.tsx index f4b3da812..57e2c7fe0 100644 --- a/frontend/app/components/Funnels/FunnelPage/FunnelPage.tsx +++ b/frontend/app/components/Funnels/FunnelPage/FunnelPage.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Switch, Route } from 'react-router'; +import FunnelDetails from '../FunnelDetails/FunnelDetails'; import FunnelList from '../FunnelList'; function FunnelPage(props) { @@ -9,6 +10,14 @@ function FunnelPage(props) { + + + + + + {/* + + */} ); diff --git a/frontend/app/components/Funnels/FunnelSearch/FunnelSearch.tsx b/frontend/app/components/Funnels/FunnelSearch/FunnelSearch.tsx new file mode 100644 index 000000000..ba36b7d9e --- /dev/null +++ b/frontend/app/components/Funnels/FunnelSearch/FunnelSearch.tsx @@ -0,0 +1,34 @@ +import { useObserver } from 'mobx-react-lite'; +import React, { useEffect, useState } from 'react'; +import { useStore } from 'App/mstore'; +import { Icon } from 'UI'; +import { debounce } from 'App/utils'; + +let debounceUpdate: any = () => {} +function FunnelSearch(props) { + const { funnelStore } = useStore(); + const [query, setQuery] = useState(funnelStore.search); + useEffect(() => { + debounceUpdate = debounce((key, value) => funnelStore.updateKey(key, value), 500); + }, []) + + const write = ({ target: { name, value } }) => { + setQuery(value); + debounceUpdate('metricsSearch', value); + } + + return useObserver(() => ( +
+ + +
+ )); +} + +export default FunnelSearch; \ No newline at end of file diff --git a/frontend/app/components/Funnels/FunnelSearch/index.ts b/frontend/app/components/Funnels/FunnelSearch/index.ts new file mode 100644 index 000000000..2db683671 --- /dev/null +++ b/frontend/app/components/Funnels/FunnelSearch/index.ts @@ -0,0 +1 @@ +export { default } from './FunnelSearch'; \ No newline at end of file diff --git a/frontend/app/mstore/funnelStore.ts b/frontend/app/mstore/funnelStore.ts index 721adeb6b..1913b2506 100644 --- a/frontend/app/mstore/funnelStore.ts +++ b/frontend/app/mstore/funnelStore.ts @@ -9,6 +9,7 @@ export default class FunnelStore { list: IFunnel[] = [] instance: IFunnel | null = null period: Period = Period({ rangeName: LAST_7_DAYS }) + search: string = '' page: number = 1 pageSize: number = 10 diff --git a/frontend/app/routes.js b/frontend/app/routes.js index da458f46b..fd8859935 100644 --- a/frontend/app/routes.js +++ b/frontend/app/routes.js @@ -92,6 +92,7 @@ export const errors = params => queried('/errors', params); export const error = (id = ':errorId', hash) => hashed(`/errors/${ id }`, hash); export const funnels = params => queried('/funnels', params) +export const funnelsCreate = () => `/funnels/create`; export const funnel = (id = ':funnelId', hash) => hashed(`/funnels/${ id }`, hash); export const funnelIssue = (id = ':funnelId', issueId = ':issueId', hash) => hashed(`/funnels/${ id }/${ issueId}`, hash); @@ -135,6 +136,7 @@ const REQUIRED_SITE_ID_ROUTES = [ errors(), onboarding(''), funnels(''), + funnelsCreate(''), funnel(''), funnelIssue(''), ];