diff --git a/frontend/app/components/Dashboard/components/MetricViewHeader/MetricViewHeader.tsx b/frontend/app/components/Dashboard/components/MetricViewHeader/MetricViewHeader.tsx index 434538ea8..a958cd0ec 100644 --- a/frontend/app/components/Dashboard/components/MetricViewHeader/MetricViewHeader.tsx +++ b/frontend/app/components/Dashboard/components/MetricViewHeader/MetricViewHeader.tsx @@ -3,14 +3,17 @@ import { Icon, PageTitle, Button, Link, SegmentSelection } from 'UI'; import MetricsSearch from '../MetricsSearch'; import Select from 'Shared/Select'; import { useStore } from 'App/mstore'; -import { useObserver } from 'mobx-react-lite'; +import { observer, useObserver } from 'mobx-react-lite'; +import { DROPDOWN_OPTIONS, Option } from 'App/constants/card'; function MetricViewHeader() { const { metricStore } = useStore(); - const sort = useObserver(() => metricStore.sort); - const listView = useObserver(() => metricStore.listView); + const sort = metricStore.sort; + const listView = metricStore.listView; + const filter = metricStore.filter; + + const writeOption = (e: any, { name, value }: any) => {}; - return (
@@ -21,16 +24,16 @@ function MetricViewHeader() { - metricStore.updateKey('listView', !listView) } - value={{ value: listView ? 'list' : 'grid' }} - list={ [ - { value: 'list', name: '', icon: 'graph-up-arrow' }, - { value: 'grid', name: '', icon: 'hash' }, - ]} + {/* metricStore.updateKey('listView', !listView)} + value={{ value: listView ? 'list' : 'grid' }} + list={[ + { value: 'list', name: '', icon: 'graph-up-arrow' }, + { value: 'grid', name: '', icon: 'hash' }, + ]} />
metricStore.updateKey('filter', { ...filter, type: value.value})} + plain={true} + /> + + onChange(value)} + isMulti={true} + /> + ); +} + +function ListViewToggler({}) { + const { metricStore } = useStore(); + const listView = useObserver(() => metricStore.listView); + return ( +
+ + +
+ ); +} diff --git a/frontend/app/components/Dashboard/components/MetricsLibraryModal/MetricsLibraryModal.tsx b/frontend/app/components/Dashboard/components/MetricsLibraryModal/MetricsLibraryModal.tsx index 5227b7171..cfa6a4a6d 100644 --- a/frontend/app/components/Dashboard/components/MetricsLibraryModal/MetricsLibraryModal.tsx +++ b/frontend/app/components/Dashboard/components/MetricsLibraryModal/MetricsLibraryModal.tsx @@ -70,7 +70,7 @@ function MetricSearch({ onChange }: any) { function SelectedContent({ dashboardId, selected }: any) { const { hideModal } = useModal(); const { metricStore, dashboardStore } = useStore(); - const total = useObserver(() => metricStore.sortedWidgets.length); + const total = useObserver(() => metricStore.metrics.length); const dashboard = useMemo(() => dashboardStore.getDashboard(dashboardId), [dashboardId]); const addSelectedToDashboard = () => { diff --git a/frontend/app/components/Dashboard/components/MetricsList/MetricsList.tsx b/frontend/app/components/Dashboard/components/MetricsList/MetricsList.tsx index 44423944b..14245093d 100644 --- a/frontend/app/components/Dashboard/components/MetricsList/MetricsList.tsx +++ b/frontend/app/components/Dashboard/components/MetricsList/MetricsList.tsx @@ -17,11 +17,11 @@ function MetricsList({ onSelectionChange?: (selected: any[]) => void; }) { const { metricStore } = useStore(); - const metrics = metricStore.sortedWidgets; + const cards = metricStore.filteredCards; const metricsSearch = metricStore.metricsSearch; const listView = useObserver(() => metricStore.listView); const [selectedMetrics, setSelectedMetrics] = useState([]); - const sortBy = useObserver(() => metricStore.sort.by); + // const sortBy = useObserver(() => metricStore.sort.by); useEffect(() => { metricStore.fetchList(); @@ -42,17 +42,17 @@ function MetricsList({ } }; - const filterByDashboard = (item: Widget, searchRE: RegExp) => { - const dashboardsStr = item.dashboards.map((d: any) => d.name).join(' '); - return searchRE.test(dashboardsStr); - }; + // const filterByDashboard = (item: Widget, searchRE: RegExp) => { + // const dashboardsStr = item.dashboards.map((d: any) => d.name).join(' '); + // return searchRE.test(dashboardsStr); + // }; - const list = - metricsSearch !== '' - ? filterList(metrics, metricsSearch, ['name', 'metricType', 'owner'], filterByDashboard) - : metrics; + // const list = + // metricsSearch !== '' + // ? filterList(metrics, metricsSearch, ['name', 'metricType', 'owner'], filterByDashboard) + // : metrics; - const lenth = list.length; + const lenth = cards.length; useEffect(() => { metricStore.updateKey('sessionsPage', 1); @@ -74,18 +74,18 @@ function MetricsList({ - setSelectedMetrics(checked ? list.map((i: any) => i.metricId) : []) + setSelectedMetrics(checked ? cards.map((i: any) => i.metricId) : []) } /> ) : ( @@ -94,8 +94,8 @@ function MetricsList({
Showing{' '} - {Math.min(list.length, metricStore.pageSize)} out - of {list.length} cards + {Math.min(cards.length, metricStore.pageSize)} out + of {cards.length} cards
{} -function MetricsSearch(props) { - const { metricStore } = useStore(); - const [query, setQuery] = useState(metricStore.metricsSearch); - useEffect(() => { - debounceUpdate = debounce((key, value) => metricStore.updateKey(key, value), 500); - }, []) +let debounceUpdate: any = () => {}; +function MetricsSearch() { + const { metricStore } = useStore(); + const [query, setQuery] = useState(metricStore.filter.query); + useEffect(() => { + debounceUpdate = debounce( + (key: any, value: any) => metricStore.updateKey('filter', { ...metricStore.filter, query: value }), + 500 + ); + }, []); - const write = ({ target: { value } }) => { - setQuery(value); - debounceUpdate('metricsSearch', value); - } - - return useObserver(() => ( -
- - -
- )); + const write = ({ target: { value } }: any) => { + setQuery(value); + debounceUpdate('metricsSearch', value); + }; + + return useObserver(() => ( +
+ + +
+ )); } export default MetricsSearch; diff --git a/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx b/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx index f2faf0d5a..c85389529 100644 --- a/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx +++ b/frontend/app/components/Dashboard/components/WidgetForm/components/MetricTypeDropdown/MetricTypeDropdown.tsx @@ -1,7 +1,6 @@ -import React, { useMemo } from 'react'; -import { TYPES, LIBRARY } from 'App/constants/card'; +import React from 'react'; +import { DROPDOWN_OPTIONS, Option } from 'App/constants/card'; import Select from 'Shared/Select'; -import { MetricType } from 'App/components/Dashboard/components/MetricTypeItem/MetricTypeItem'; import { components } from 'react-select'; import CustomDropdownOption from 'Shared/CustomDropdownOption'; import { observer } from 'mobx-react-lite'; @@ -22,20 +21,11 @@ interface Props { function MetricTypeDropdown(props: Props) { const { metricStore } = useStore(); const metric: any = metricStore.instance; - const options: Options[] = useMemo(() => { - // TYPES.shift(); // remove "Add from library" item - return TYPES.filter((i: MetricType) => i.slug !== LIBRARY).map((i: MetricType) => ({ - label: i.title, - icon: i.icon, - value: i.slug, - description: i.description, - })); - }, []); React.useEffect(() => { const queryCardType = props.query.get('type'); - if (queryCardType && options.length > 0 && metric.metricType) { - const type = options.find((i) => i.value === queryCardType); + if (queryCardType && DROPDOWN_OPTIONS.length > 0 && metric.metricType) { + const type: Option = DROPDOWN_OPTIONS.find((i) => i.value === queryCardType) as Option; setTimeout(() => onChange(type.value), 0); } }, []); @@ -48,13 +38,16 @@ function MetricTypeDropdown(props: Props) {