Skip to content
Snippets Groups Projects
ProductPicker.js 3.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • meskio's avatar
    meskio committed
    import React from 'react';
    import { Form, Row, Col, Button } from 'react-bootstrap';
    import { Typeahead } from 'react-bootstrap-typeahead';
    import Fetcher from './Fetcher';
    import { printMoney } from './util';
    
    class ProductPicker extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                code: "",
                products: [],
            };
        }
    
        delPick(index) {
            let picks = this.props.picks;
            picks.splice(index, 1);
            this.props.setPicks(picks);
        }
    
        setAmmount(index, ammount) {
            let picks = this.props.picks;
            picks[index].ammount = parseInt(ammount);
            this.props.setPicks(picks);
        }
    
        setCode(codeStr) {
            const code = parseInt(codeStr);
            const product = this.state.products.find(p => p.code === code);
            if (product === undefined) {
                this.setState({ code: codeStr });
            } else {
                this.pickProduct(product);
            }
        }
    
        pickProduct(product) {
            let picks = this.props.picks;
            picks.push({
                code: product.code,
                name: product.name,
                price: product.price,
                ammount: 1
            });
            this.props.setPicks(picks);
            this.setState({ code: "" });
        }
    
        render() {
            const rows = this.props.picks.map((p, i) => {
                return (
                    <Form.Group key={p.code} as={Row}>
                        <Col>
                            <p>{p.code}</p>
                        </Col>
                        <Col sm={4}>
                            <p>{p.name}</p>
                        </Col>
                        <Col>
                            {printMoney(p.price)+""}
                        </Col>
                        {this.props.ammount &&
                        <Col>
                            <Form.Control
                                type="number" min="1"
                                placeholder="cantidad"
                                value={p.ammount}
                                onChange={e => this.setAmmount(i, e.target.value)}
                            />
                        </Col>
                        }
                        <Col sm={1}>
                            <Button variant="danger" onClick={() => this.delPick(i)}>-</Button>
                        </Col>
                    </Form.Group>
                )
            });
    
            return (
                <Fetcher url="/api/product" onFetch={products => this.setState({ products })} >
                    <Row>
                        <Col>
                            <h6>Código</h6>
                        </Col>
                        <Col sm={4}>
                            <h6>Nombre</h6>
                        </Col>
                        <Col>
                            <h6>Precio</h6>
                        </Col>
                        {this.props.ammount &&
                        <Col>
                            <h6>Cantidad</h6>
                        </Col>
                        }
                        <Col sm={1}>
                        </Col>
                    </Row>
                    {rows}
                    <Form.Group as={Row}>
                        <Col>
                            <Form.Control
                                placeholder="codigo"
                                value={this.state.code}
                                onChange={e => this.setCode(e.target.value)}
                            />
                        </Col>
                        <Col sm={4}>
                            <Typeahead
                                id="product-name"
                                labelKey="name"
                                options={this.state.products}
                                onChange={name => this.pickProduct(name[0])}
                                selected={[]}
                            />
                        </Col>
                        <Col></Col>
                        {this.props.ammount &&
                        <Col></Col>
                        }
                        <Col sm={1}></Col>
                    </Form.Group>
                </Fetcher>
            );
        }
    }
    
    export default ProductPicker;