Skip to content
Snippets Groups Projects
EditableCell.js 980 B
Newer Older
  • Learn to ignore specific revisions
  • meskio's avatar
    meskio committed
    import React, { useState } from "react";
    import { Form } from "react-bootstrap";
    
    import { printMoney } from "./util";
    import PriceEditor from "./PriceEditor";
    
    meskio's avatar
    meskio committed
    
    function EditableCell(props) {
      const [data, setData] = useState(props.value);
      const [editing, setEditing] = useState(false);
    
    
      let value = props.value;
      if (props.price) {
        value = printMoney(props.value);
      }
    
    meskio's avatar
    meskio committed
      if (props.ro || !editing) {
    
        return <td onClick={() => setEditing(true)}>{value}</td>;
    
    meskio's avatar
    meskio committed
      }
    
      const submit = (e) => {
        e.preventDefault();
        props.onChange(data);
        setEditing(false);
      };
    
      return (
        <td>
          <Form onSubmit={submit}>
    
            {props.price ? (
              <PriceEditor value={data} onChange={(price) => setData(price)} />
            ) : (
              <Form.Control
                value={data}
                onChange={(e) => setData(e.target.value)}
                onBlur={() => setEditing(false)}
              />
            )}
    
    meskio's avatar
    meskio committed
          </Form>
        </td>
      );
    }
    
    export default EditableCell;