summaryrefslogtreecommitdiff
path: root/src/containers/Service/ServiceItem.tsx
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2021-03-16 01:38:54 +0300
committereug-vs <eug-vs@keemail.me>2021-03-16 01:38:54 +0300
commit49a44a5762a2863566267689002834ee88d06abb (patch)
treeb471b6ace58355f8d08e024e7546bf57057fe8fb /src/containers/Service/ServiceItem.tsx
parent6a200e57d4a0be0532587b9648ff8d58f97e91e8 (diff)
downloadcommercel-ui-49a44a5762a2863566267689002834ee88d06abb.tar.gz
feat: add WaybillPanel
Diffstat (limited to 'src/containers/Service/ServiceItem.tsx')
-rw-r--r--src/containers/Service/ServiceItem.tsx59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/containers/Service/ServiceItem.tsx b/src/containers/Service/ServiceItem.tsx
new file mode 100644
index 0000000..bd449f9
--- /dev/null
+++ b/src/containers/Service/ServiceItem.tsx
@@ -0,0 +1,59 @@
+import React, { useContext } from 'react';
+import { useParams, useHistory } from 'react-router-dom';
+import { Formik } from 'formik';
+import _ from 'lodash';
+import Page, { Action } from '../Page';
+import hooks from '../../hooks/useAPIClient';
+import { post, patch, del } from '../../requests';
+import ServiceContext from './ServiceContext';
+
+interface Params {
+ id: string;
+}
+
+const ServiceItem: React.FC = () => {
+ const service = useContext(ServiceContext);
+ const history = useHistory();
+ 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[] = [
+ { name: 'Назад', variant: 'outlined', onClick: history.goBack },
+ { name: 'Удалить', variant: 'outlined', onClick: handleDelete },
+ { name: 'Сохранить', type: 'submit', form: 'form' },
+ ];
+
+ return (
+ <Page
+ title={id ? item?.name : `Новый ${service.nameSingular}`}
+ actions={actions}
+ className="flex"
+ >
+ {(!id || item) && (
+ <div className="w-1/3">
+ <Formik
+ initialValues={_.defaults(item, service.default)}
+ onSubmit={onSubmit}
+ children={service.Form}
+ />
+ </div>
+ )}
+ {item && service.Panel && <service.Panel item={item} />}
+ </Page>
+ );
+};
+
+export default ServiceItem;