summaryrefslogtreecommitdiff
path: root/src/lib/ServiceList.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ServiceList.tsx')
-rw-r--r--src/lib/ServiceList.tsx44
1 files changed, 3 insertions, 41 deletions
diff --git a/src/lib/ServiceList.tsx b/src/lib/ServiceList.tsx
index 9f6835a..ae17a9c 100644
--- a/src/lib/ServiceList.tsx
+++ b/src/lib/ServiceList.tsx
@@ -4,46 +4,20 @@ import _ from 'lodash';
import Page from '../containers/Page';
import ListTable from '../components/ListTable';
import hooks from '../hooks/useAPIClient';
-import ServiceContext, { Filter } from './ServiceContext';
-import useQuery from '../hooks/useQuery';
-
-const getOptionLabel = (item: any, filter: Filter) => {
- const value = _.get(item, filter.as || filter.key);
- return filter.transform ? filter.transform(value) : value;
-};
+import ServiceContext from './ServiceContext';
+import ServiceFilters from './ServiceFilters';
const ServiceList: React.FC = () => {
const service = useContext(ServiceContext);
const history = useHistory();
const location = useLocation();
- const query = useQuery();
const { data } = hooks[service.route].useList(location.search);
- const { data: unfilteredData } = hooks[service.route].useList('', { revalidateOnMount: !!location.search });
const actions = service.actions || [{
name: 'Добавить',
route: `/${service.route}/add${location.search}`,
}];
- const filters = service.filters?.map(filter => {
- const options = _
- .uniqBy(unfilteredData, filter.key)
- .map((item: any) => ({
- key: _.get(item, filter.key),
- label: getOptionLabel(item, filter),
- }));
-
- // Add default option
- options?.unshift({
- key: '-',
- label: filter.label,
- });
-
- const value = _.get(query, filter.key);
-
- return { ...filter, options, value };
- });
-
const handleRowClick = (item: any) => {
const route = service.rowLink
? service.rowLink(item)
@@ -52,23 +26,11 @@ const ServiceList: React.FC = () => {
history.push(route);
};
- const applyFilter = (key: string, value: string) => {
- const updatedQuery = { ...query, [key]: value };
- if (value === '-') delete updatedQuery[key];
-
- const queryString = new URLSearchParams(updatedQuery);
- history.push(`${service.route}?${queryString}`);
- };
-
- const resetFilters = () => history.push(service.route);
-
return (
<Page
title={service.name}
actions={actions}
- filters={filters}
- applyFilter={applyFilter}
- resetFilters={resetFilters}
+ filters={<ServiceFilters />}
>
<ListTable items={data} fields={service.tableFields} handleRowClick={handleRowClick} />
</Page>