diff options
author | eug-vs <eug-vs@keemail.me> | 2021-03-16 01:38:54 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2021-03-16 01:38:54 +0300 |
commit | 49a44a5762a2863566267689002834ee88d06abb (patch) | |
tree | b471b6ace58355f8d08e024e7546bf57057fe8fb /src/containers/Service/ServiceItem.tsx | |
parent | 6a200e57d4a0be0532587b9648ff8d58f97e91e8 (diff) | |
download | commercel-ui-49a44a5762a2863566267689002834ee88d06abb.tar.gz |
feat: add WaybillPanel
Diffstat (limited to 'src/containers/Service/ServiceItem.tsx')
-rw-r--r-- | src/containers/Service/ServiceItem.tsx | 59 |
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; |