From 865b41114060765308d560181f4996c0aa7a3e74 Mon Sep 17 00:00:00 2001
From: eug-vs <eug-vs@keemail.me>
Date: Fri, 26 Mar 2021 01:06:44 +0300
Subject: refactor: move Service to lib/

---
 src/containers/Page.tsx                   |  2 +-
 src/containers/Service/Service.tsx        | 25 -------------
 src/containers/Service/ServiceContext.tsx | 37 -------------------
 src/containers/Service/ServiceItem.tsx    | 59 -------------------------------
 src/containers/Service/ServiceList.tsx    | 35 ------------------
 5 files changed, 1 insertion(+), 157 deletions(-)
 delete mode 100644 src/containers/Service/Service.tsx
 delete mode 100644 src/containers/Service/ServiceContext.tsx
 delete mode 100644 src/containers/Service/ServiceItem.tsx
 delete mode 100644 src/containers/Service/ServiceList.tsx

(limited to 'src/containers')

diff --git a/src/containers/Page.tsx b/src/containers/Page.tsx
index 73b122e..ae9e231 100644
--- a/src/containers/Page.tsx
+++ b/src/containers/Page.tsx
@@ -1,7 +1,7 @@
 import React from 'react';
 import Paper from '../components/Paper';
 import Button from '../components/Button';
-import { Action } from './Service/ServiceContext';
+import { Action } from '../lib/ServiceContext';
 
 interface Props {
   title?: string;
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;
-- 
cgit v1.2.3