diff options
Diffstat (limited to 'src/containers/Service')
| -rw-r--r-- | src/containers/Service/Service.tsx | 25 | ||||
| -rw-r--r-- | src/containers/Service/ServiceContext.tsx | 37 | ||||
| -rw-r--r-- | src/containers/Service/ServiceItem.tsx | 59 | ||||
| -rw-r--r-- | src/containers/Service/ServiceList.tsx | 35 | 
4 files changed, 0 insertions, 156 deletions
| diff --git a/src/containers/Service/Service.tsx b/src/containers/Service/Service.tsx deleted file mode 100644 index b527531..0000000 --- a/src/containers/Service/Service.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React, { useContext } from 'react'; -import { Route, Switch, useRouteMatch } from 'react-router-dom'; -import _ from 'lodash'; -import ServiceList from './ServiceList'; -import ServiceItem from './ServiceItem'; -import ServiceContext from './ServiceContext'; - - -const Service: React.FC = () => { -  const { path } = useRouteMatch(); -  const service = useContext(ServiceContext); - -  return ( -    <Switch> -      <Route exact path={path} component={ServiceList} /> -      <Route path={`${path}/add`} component={ServiceItem} /> -      {_.map(service.routes, (component, route) => ( -        <Route path={`${path}/${route}`} component={component} key={route} /> -      ))} -      <Route path={`${path}/:id`} component={ServiceItem} /> -    </Switch> -  ); -}; - -export default Service; diff --git a/src/containers/Service/ServiceContext.tsx b/src/containers/Service/ServiceContext.tsx deleted file mode 100644 index 0cccc93..0000000 --- a/src/containers/Service/ServiceContext.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import { FormikProps } from 'formik'; -import { Props as ButtonProps } from '../../components/Button'; -import { Field } from '../../components/ListTable'; - -export interface Action extends ButtonProps { -  name: string; -} - -export interface PanelProps { -  item: any; -  mutate: (item: any) => void; -} - -export interface ServiceParams { -  route: string; -  name: string; -  nameSingular?: string; -  tableFields: Field[]; -  default?: Record<string, any>; -  routes?: Record<string, React.FC>; -  actions?: Action[]; -  rowLink?: (item: any) => string; -  Form?: React.FC<FormikProps<any>>; -  Panel?: React.FC<PanelProps>; -} - -const ServiceContext = React.createContext<ServiceParams>({ -  route: '', -  name: '', -  nameSingular: '', -  tableFields: [], -  default: {}, -}); - -export const ServiceProvider = ServiceContext.Provider; -export default ServiceContext; diff --git a/src/containers/Service/ServiceItem.tsx b/src/containers/Service/ServiceItem.tsx deleted file mode 100644 index 0e24895..0000000 --- a/src/containers/Service/ServiceItem.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React, { useContext } from 'react'; -import { useParams, useHistory } from 'react-router-dom'; -import { Formik } from 'formik'; -import _ from 'lodash'; -import Page from '../Page'; -import hooks from '../../hooks/useAPIClient'; -import useQuery from '../../hooks/useQuery'; -import { post, patch, del } from '../../requests'; -import ServiceContext, { Action } from './ServiceContext'; - -interface Params { -  id: string; -} - -const ServiceItem: React.FC = () => { -  const service = useContext(ServiceContext); -  const history = useHistory(); -  const query = useQuery(); -  const { id } = useParams<Params>(); -  const { data: item, mutate } = hooks[service.route].useItem(id); - -  const handleDelete = () => del(`/${service.route}/${id}`) -    .then(() => history.push(`/${service.route}`)); - -  const onSubmit = (values: any) => { -    const promise = id -      ? patch(`/${service.route}/${id}`, values) -      : post(`/${service.route}`, values); -    return promise.then(response => { -      mutate(response.data); -      history.push(`/${service.route}`); -    }); -  }; - -  const actions: Action[] = _.compact([ -    { name: 'Назад', variant: 'outlined', onClick: history.goBack }, -    id && { name: 'Удалить', variant: 'outlined', onClick: handleDelete }, -    { name: 'Сохранить', type: 'submit', form: 'form' }, -  ]); - -  return ( -    <Page -      title={id ? item?.name : `Новый ${service.nameSingular}`} -      actions={actions} -      className="grid lg:grid-cols-2" -    > -      {(!id || item) && ( -        <Formik -          initialValues={_.defaults(item, query, service.default)} -          onSubmit={onSubmit} -          children={service.Form} -        /> -      )} -      {item && service.Panel && <service.Panel item={item} mutate={mutate} />} -    </Page> -  ); -}; - -export default ServiceItem; diff --git a/src/containers/Service/ServiceList.tsx b/src/containers/Service/ServiceList.tsx deleted file mode 100644 index f716b24..0000000 --- a/src/containers/Service/ServiceList.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { useContext } from 'react'; -import { useHistory, useLocation } from 'react-router-dom'; -import Page from '../Page'; -import ListTable from '../../components/ListTable'; -import hooks from '../../hooks/useAPIClient'; -import ServiceContext from './ServiceContext'; - -const ServiceList: React.FC = () => { -  const service = useContext(ServiceContext); -  const history = useHistory(); -  const location = useLocation(); -  const { data } = hooks[service.route].useList(location.search); - -  const actions = service.actions || [{ -    name: 'Добавить', -    route: `/${service.route}/add${location.search}`, -  }]; - -  const handleRowClick = (index: number) => { -    const item = data && data[index]; -    const route = service.rowLink -      ? service.rowLink(item) -      : `/${service.route}/${item?._id}`; - -    history.push(route); -  }; - -  return ( -    <Page title={service.name} actions={actions}> -      <ListTable items={data} fields={service.tableFields} handleRowClick={handleRowClick} /> -    </Page> -  ); -}; - -export default ServiceList; | 
