123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- import { Form, Input, Button, Spin, Row, Col, Switch, Select as AntdSelect, Checkbox } from 'antd'
- import { useEffect, useMemo, useState } from 'react'
- import HttpService from '../../services/httpService'
- import { respuestas } from '../../utilities'
- import { useNavigate } from 'react-router-dom'
- import { useQuery, useModel } from '../../hooks'
- import { commonRules } from '../../constants/rules'
- import { Select } from '../../components'
- const selectores = {
- productos: {
- name: "producto",
- expand: "subproductos",
- },
- }
- const endpoints = {
- condicionante: "condicionante",
- };
- const amplitudes = [
- {
- value: "Familia",
- label: "Familia",
- },
- {
- value: "Familia (Varios)",
- label: "Familia (Varios)",
- },
- ]
- const fines = [
- {
- value: "Consumo Humano",
- label: "Consumo Humano",
- },
- {
- value: "Polinización",
- label: "Polinización",
- }
- ]
- const tipos = [
- {
- value: "Introducción",
- label: "Introducción",
- },
- {
- value: "Expotación",
- label: "Expotación",
- },
- {
- value: "Tránsito",
- label: "Tránsito",
- },
- {
- value: "Movilización (Salida)",
- label: "Movilización (Salida)",
- },
- {
- value: "Importación",
- label: "Importación",
- }
- ]
- const ProductoDetalle = () => {
- const [form] = Form.useForm()
- const navigate = useNavigate()
- const [loading, setLoading] = useState(false)
- const query = useQuery()
- const id = query.get("id")
- const [request, setRequest] = useState({})
- const [activa, setActiva] = useState(false)
- const [subproductos, setSubproductos] = useState([])
- // const extraParams = useMemo(() => ({
- // idAgenda: id,
- // }), [id])
- const requestParams = useMemo(() => ({
- name: endpoints.condicionante,
- // expand: 'subproductos',
- id,
- // extraParams
- }), [id])
- const { model, modelLoading } = useModel(request)
- useEffect(() => {
- if (id) {
- setRequest(requestParams)
- }
- return () => {
- setRequest({})
- }
- }, [id, requestParams])
- useEffect(() => {
- if (model) {
- form.setFieldsValue({ //seteo cuando son varios
- ...model,
- subproductos: model.subproductos.map((subproducto, index) => ({
- ...subproducto,
- key: index
- }))
- })
- if (model?.activa) {
- setActiva(true)
- }
- }
- }, [form, model])
- const onFinish = async (values) => {
- try {
- setLoading(true);
- let body = {
- ...values,
- };
- if (id) {
- body.id = id
- }
- const res = await HttpService.post(`${endpoints.producto}/guardar`, body);
- respuestas(res);
- if (res?.status === 200) {
- navigate('/condicionantes')
- }
- } catch (error) {
- console.log(error);
- setLoading(false);
- } finally {
- setLoading(false);
- }
- }
- if (modelLoading) {
- return <Spin
- size="large"
- style={{ display: "block", margin: "auto", marginTop: "50px" }}
- />
- }
- return (
- <Form
- layout="vertical"
- name="basic"
- form={form}
- onFinish={onFinish}
- onFinishFailed={() => { }}
- >
- <Row gutter={16}>
- <Col span={24}>
- <h2>Información del Condicionante</h2>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Título"
- name="titulo"
- rules={[
- commonRules.requerido,
- ]}
- >
- <Input />
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Descripción"
- name="descripcion"
- rules={[
- commonRules.requerido,
- ]}
- >
- <Input.TextArea rows={3} />
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Activa"
- name="activa"
- >
- <Switch
- checkedChildren="Si"
- unCheckedChildren="No"
- style={{ backgroundColor: activa ? "#52c41a" : "#f5222d" }}
- checked={activa}
- onChange={(checked) => setActiva(checked)}
- />
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Amplitud"
- name="amplitud"
- rules={[
- commonRules.requerido,
- ]}
- >
- <AntdSelect
- showSearch
- placeholder="Seleccione una amplitud"
- optionFilterProp="children"
- filterOption={(input, option) =>
- option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
- }
- >
- {amplitudes.map((amplitud) => (
- <AntdSelect.Option key={amplitud.value} value={amplitud.value}>
- {amplitud.label}
- </AntdSelect.Option>
- ))}
- </AntdSelect>
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Fines de Movilización"
- name="fines"
- rules={[
- commonRules.requerido,
- ]}
- >
- <Checkbox.Group>
- {fines.map((fin) => (
- <Checkbox key={fin.value} value={fin.value}>
- {fin.label}
- </Checkbox>
- ))}
- </Checkbox.Group>
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Tipo de Movilización"
- name="tipos"
- rules={[
- commonRules.requerido,
- ]}
- >
- <Checkbox.Group>
- {tipos.map((tipo) => (
- <Checkbox key={tipo.value} value={tipo.value}>
- {tipo.label}
- </Checkbox>
- ))}
- </Checkbox.Group>
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Especies"
- name="idProducto"
- rules={[commonRules.requerido]}
- >
- <Select
- modelsParams={selectores.productos}
- labelProp="nombre"
- valueProp="idProducto"
- append={[model?.producto]}
- extraParams={{ padre: true }}
- onChange={(_, item) => {
- setSubproductos(item?.subproductos)
- console.log(item)
- }}
- />
- </Form.Item>
- </Col>
- <Col md={8} xs={24}>
- <Form.Item
- label="Subproductos"
- name="subproductos"
- >
- <Checkbox.Group>
- {subproductos.map((subproducto) => (
- <Checkbox key={subproducto?.id} value={subproducto?.id}>
- {subproducto?.nombre}
- </Checkbox>
- ))}
- </Checkbox.Group>
- </Form.Item>
- </Col>
- <Col span={24}>
- <Form.Item>
- <Button
- type="primary"
- htmlType="submit"
- style={{ marginTop: "30px" }}
- loading={loading}
- >
- Guardar
- </Button>
- </Form.Item>
- </Col>
- </Row>
- </Form>
- )
- }
- export default ProductoDetalle
|