diff options
| -rw-r--r-- | src/containers/Service/Service.tsx | 6 | ||||
| -rw-r--r-- | src/containers/Service/ServiceContext.tsx | 5 | ||||
| -rw-r--r-- | src/containers/Service/ServiceItem.tsx (renamed from src/containers/Service/ServiceForm.tsx) | 25 | ||||
| -rw-r--r-- | src/containers/Service/ServiceList.tsx | 2 | ||||
| -rw-r--r-- | src/containers/WaybillForm.tsx | 40 | ||||
| -rw-r--r-- | src/containers/WaybillPanel.tsx | 44 | ||||
| -rw-r--r-- | src/index.tsx | 2 | 
7 files changed, 90 insertions, 34 deletions
| diff --git a/src/containers/Service/Service.tsx b/src/containers/Service/Service.tsx index 3a7cbee..162fce0 100644 --- a/src/containers/Service/Service.tsx +++ b/src/containers/Service/Service.tsx @@ -1,7 +1,7 @@  import React from 'react';  import { Route, Switch, useRouteMatch } from 'react-router-dom';  import ServiceList from './ServiceList'; -import ServiceForm from './ServiceForm'; +import ServiceItem from './ServiceItem';  const Service: React.FC = () => { @@ -10,8 +10,8 @@ const Service: React.FC = () => {    return (      <Switch>        <Route exact path={path} component={ServiceList} /> -      <Route path={`${path}/add`} component={ServiceForm} /> -      <Route path={`${path}/edit/:id`} component={ServiceForm} /> +      <Route path={`${path}/add`} component={ServiceItem} /> +      <Route path={`${path}/:id`} component={ServiceItem} />      </Switch>    );  }; diff --git a/src/containers/Service/ServiceContext.tsx b/src/containers/Service/ServiceContext.tsx index c035417..b4200a0 100644 --- a/src/containers/Service/ServiceContext.tsx +++ b/src/containers/Service/ServiceContext.tsx @@ -1,6 +1,10 @@  import React from 'react';  import { FormikProps } from 'formik'; +export interface PanelProps { +  item: any; +} +  export interface ServiceParams {    route: string;    name: string; @@ -8,6 +12,7 @@ export interface ServiceParams {    tableFields: any[];    default: Record<string, any>;    Form?: React.FC<FormikProps>; +  Panel?: React.FC<PanelProps>;  }  const ServiceContext = React.createContext<ServiceParams>({ diff --git a/src/containers/Service/ServiceForm.tsx b/src/containers/Service/ServiceItem.tsx index 0c02cbd..bd449f9 100644 --- a/src/containers/Service/ServiceForm.tsx +++ b/src/containers/Service/ServiceItem.tsx @@ -11,7 +11,7 @@ interface Params {    id: string;  } -const ServiceForm: React.FC = () => { +const ServiceItem: React.FC = () => {    const service = useContext(ServiceContext);    const history = useHistory();    const { id } = useParams<Params>(); @@ -31,22 +31,29 @@ const ServiceForm: React.FC = () => {    };    const actions: Action[] = [ -    { name: 'Назад', variant: 'outlined', route: '..' }, +    { 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}> +    <Page +      title={id ? item?.name : `Новый ${service.nameSingular}`} +      actions={actions} +      className="flex" +    >        {(!id || item) && ( -        <Formik -          initialValues={_.defaults(item, service.default)} -          onSubmit={onSubmit} -          children={service.Form} -        /> +        <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 ServiceForm; +export default ServiceItem; diff --git a/src/containers/Service/ServiceList.tsx b/src/containers/Service/ServiceList.tsx index 6af2d1b..b7054eb 100644 --- a/src/containers/Service/ServiceList.tsx +++ b/src/containers/Service/ServiceList.tsx @@ -15,7 +15,7 @@ const ServiceList: React.FC = () => {    const handleRowClick = (index: number) => {      const item = data && data[index]; -    history.push(`/${service.route}/edit/${item?._id}`); +    history.push(`/${service.route}/${item?._id}`);    };    return ( diff --git a/src/containers/WaybillForm.tsx b/src/containers/WaybillForm.tsx index 1e3276f..fedc9c4 100644 --- a/src/containers/WaybillForm.tsx +++ b/src/containers/WaybillForm.tsx @@ -10,27 +10,25 @@ const WaybillForm: React.FC<FormikProps> = ({ setFieldValue, values }) => {    return (      <Form id="form"> -      <div className="max-w-lg"> -        <Select -          name="contractorId" -          label="Контрагент" -          options={contractorOptions} -        /> -        <Select -          name="productId" -          label="Товар" -          options={productOptions} -        /> -        <Select -          name="operation" -          label="Операция" -          options={[ -            { key: 'in', label: 'Приход' }, -            { key: 'out', label: 'Расход' }, -          ]} -        /> -        <Input name="quantity" type="number" label="Количество" /> -      </div> +      <Select +        name="contractorId" +        label="Контрагент" +        options={contractorOptions} +      /> +      <Select +        name="productId" +        label="Товар" +        options={productOptions} +      /> +      <Select +        name="operation" +        label="Операция" +        options={[ +          { key: 'in', label: 'Приход' }, +          { key: 'out', label: 'Расход' }, +        ]} +      /> +      <Input name="quantity" type="number" label="Количество" />      </Form>    );  }; diff --git a/src/containers/WaybillPanel.tsx b/src/containers/WaybillPanel.tsx new file mode 100644 index 0000000..ca40169 --- /dev/null +++ b/src/containers/WaybillPanel.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { useHistory } from 'react-router-dom'; +import Input from '../components/Input'; +import Button from '../components/Button'; +import Paper from '../components/Paper'; +import { post } from '../requests'; +import { PanelProps } from './Service/ServiceContext'; + + +const WaybillPanel: React.FC<PanelProps> = ({ item }) => { +  const history = useHistory(); + +  const handleExecute = () => post(`/waybills/${item._id}/execute`) +    .then(() => history.push('/waybills')); + +  const handleCancel = () => post(`/waybills/${item._id}/cancel`) +    .then(() => history.push('/waybills')); + +  const executed = item.status === 'executed'; +  const total = item.product.price * item.quantity; + +  return ( +    <div className="m-4 p-4 pl-16 border-l flex flex-col"> +      <p className="text-lg"> +        Итоговая сумма: ${total} +      </p> +      <div> +        <Button route={`/contractors/${item.contractorId}`} variant="outlined"> +          Перейти к контрагенту +        </Button> +        <Button route={`/products/${item.productId}`} variant="outlined"> +          Перейти к продукту +        </Button> +      </div> +      { +        executed +          ? <Button onClick={handleCancel}>Откатить</Button> +          : <Button onClick={handleExecute}>Провести</Button> +      } +    </div> +  ); +}; + +export default WaybillPanel; diff --git a/src/index.tsx b/src/index.tsx index e637e68..68f3222 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -12,12 +12,14 @@ import Service from './containers/Service/Service';  import { ServiceProvider } from './containers/Service/ServiceContext';  import services from './services';  import WaybillForm from './containers/WaybillForm'; +import WaybillPanel from './containers/WaybillPanel';  import ContractorForm from './containers/ContractorForm';  import ProductForm from './containers/ProductForm';  services[0].Form = ProductForm;  services[1].Form = ContractorForm;  services[2].Form = WaybillForm; +services[2].Panel = WaybillPanel;  const navigation = [ | 
