Untitled

mail@pastecode.io avatarunknown
javascript
14 days ago
3.6 kB
5
Indexable
Never
import React, { useState } from "react";
import EditableLine from "./EditableLine";
import {v4} from "uuid";

export default function EditableSheet(props) {


    const removeData = (index) => {
        console.log(data);
        setData(data.filter((item, i) => i !== index));
    }

    props.data.map((item, index) => {
        item.uuid = v4();
    });
    const [data, setData] = useState(props.data);

    const addRowRef = React.useRef(null);
    // add listeners to the form to submit it

    const addData = () => {
        let newData = [];
        let inputs = addRowRef.current.getElementsByTagName("input");
        for (let i = 0; i < inputs.length; i++) {
            newData.push(inputs[i].value);
        }
        newData.uuid = v4();
        setData([...data, newData]);
        console.log(data);

        // clear the inputs
        for (let i = 0; i < inputs.length; i++) {
            inputs[i].value = "";
        }
    }


    return (
        <div className="relative overflow-x-auto shadow-md sm:rounded-lg">
            <table className="w-full text-sm text-left text-gray-500 dark:text-gray-400">
                <thead className="bg-gray-50 dark:bg-gray-800">
                    <EditableLine data={props.headers} header />
                </thead>
                <tbody className="bg-white divide-y dark:divide-gray-700 dark:bg-gray-800">
                    {props.data.map((item, index) => (
                        // add index to the item
                        <EditableLine
                            data={item}
                            rowClass={index % 2 === 0 ? "even" : "odd"}
                            removeData={removeData}
                        />
                    ))}
                    <tr className="bg-gray-50 dark:bg-gray-700" ref={addRowRef}>
                        {
                            props.headers.map((item, index) => (
                                <td className="px-6 py-4 whitespace-nowrap">
                                    <input
                                        type="text"
                                        name={item}
                                        id={item}
                                        className="border rounded-md px-3 py-2 w-full"
                                    />
                                </td>
                            ))
                        }
                        <td className="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                            <button
                                type="button"
                                className="text-indigo-600 hover:text-indigo-900"
                                onClick={addData}
                            >
                                Add
                            </button>
                        </td>
                        {/* <td className="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                            <button
                                type="button"
                                className="text-indigo-600 hover:text-indigo-900"
                                onClick={() => {
                                    setData(data.slice(0, data.length - 1));
                                }}
                            >
                                Remove
                            </button>
                        </td> */}
                    </tr>
                </tbody>
            </table>
        </div >
    )
}